Repository navigation
#182: Harden the 0.6.0 release: rerank deadline, pinned embedders, MCP rerank cap, release checks - #187
Merged
Conversation
run_command waited on the configured command with no deadline, so an offline or unauthenticated claude -p blocked ask forever and froze serve's single answer loop. The command now runs in its own process group and is killed with everything it started at the deadline, which sits under serve's 300 s reply window. Closes #182.
A hub id is a moving branch, so a cold cache could load weights nobody chose. Each catalogue row now carries its commit and the fetch asks for it; a cache filled at that commit under refs/main is adopted without a download. Models trusted by name keep following main. Closes #183.
The agent decides every rerank: true call and each one spends tokens. mcp_reranks (25 by default, machine file only) caps them per MCP server process; past it the answer comes from the fused order with a line saying so, and 0 turns rerank over MCP off. Closes #184.
…package name as a stub A tag naming another version would have published packages under a number the binary does not report, and a spent number is never given back. The release now fails first on a mismatch. @devmaxxx/repograph is released after the launcher as a stub that depends on @devmaxxx/zerograph and runs it, and CI runs it from the packed tarball. Closes #185.
…output reads The command runs in its own process group so the deadline can stop what sh started, which took it out of the terminal's group: a Ctrl-C ended zerograph and left the paid call running. SIGINT, SIGTERM and SIGHUP are now passed to the group and then to the previous handler, so serve's flag still sees them. The reads after sh exits share the deadline, so a grandchild holding the pipes cannot hold the answer. DEADLINE drops to 180 s, two minutes under serve's reply window. MCP ask returns the allowance when the rerank did not run (refused, failed, timed out, or the ask errored). The npm publish step skips versions the registry already has, so a rerun after a part-way failure completes.
The launcher and its platform packages become zerograph and zerograph-<platform> on the public npm registry, published from release.yml through trusted publishing, so an install needs no .npmrc or token and every version carries provenance. The old name, @devmaxxx/repograph, stays on GitHub Packages, the registry an old install's .npmrc names for the scope, and now depends on the unscoped zerograph. The runbook gains the one-time placeholder publish and trusted-publisher setup npm requires before a name's first release.
… starts The allowance was taken before the answer and returned when a rerank notice appeared. An exact-id question, which never reaches the model, spent a slot, while a command that billed and then timed out or failed gave its slot back, so the cap did not bound spend. Context now counts the rerank commands it starts, serve's reply carries the count (absent from an older server, read as 0), and MCP charges by it. Also from the review: a pipe keeps at most 8 MiB, the output reads get a 2 s grace past the deadline so an answer that arrived at the edge is not discarded, and a SIG_ERR from installing the interrupt forwarder is never chained to.
…me alias and stub Docs, plans, ADRs and bench scripts now say zerograph. What stays under the old name is what recognises an install made before the rename: the .repograph store, repograph.toml, REPOGRAPH_* variables, the old hooks and MCP entry, and the bench kit that drives the pinned fixture. Recorded data (runs.jsonl rows, bench/results) is untouched; report.py and track.py read its old tool key as zerograph. The launcher no longer installs a repograph command, and the @devmaxxx/repograph stub, its release job and its CI checks are gone.
The quiet check and the agent score match repograph processes and commands again, since the fixture's hooks and older binaries still run under that name. Paths to bench-kit files on disk are back to the names those files have. serve takes the rerank count before an answer's error propagates, so a failed answer no longer leaks its count into the next client's reply.
… exit A resident answer that fails now sends its error and its rerank count instead of closing the connection, and the MCP server charges both that count and a failed local answer's, so a failure that already ran a paid model no longer slips past mcp_reranks. The command runner waits on the stdout reader before polling the exit, so a rerank no longer sits up to 50 ms after the model is done, and signal forwarding keeps one slot per running command so a command that finishes first cannot stop another's forward. The npm README quotes the current default embedder and its numbers.
npm refused the name zerograph-win32-x64 to spam detection, and four names each needed a placeholder and a trusted-publisher setup. The launcher now carries the macOS, Linux and Windows binaries under bin/<platform>/ and runs the one for its platform, so a release publishes one package, an install runs no script and fetches nothing else, and a lockfile still installs across platforms. CI installs the single tarball and checks the error a pack without this platform's binary gives.
devmaxxx
added a commit
that referenced
this pull request
Oct 16, 2026
Bounds the rerank command with a deadline and forwards an interrupt to it, pins every measured embedder to a hub revision, caps an MCP server's paid reranks and charges them by the model commands an answer starts, checks the tag against Cargo.toml before a release publishes, ships every binary inside one unscoped zerograph package on the npm registry through trusted publishing, and renames the remaining repograph mentions while keeping what recognises an install from before the rename. Closes #182, #183, #184, #185 and #186.
2 of 3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Hardening from the 0.6.0 audit, in one PR. Closes #182, closes #183, closes #184, closes #185, closes #186.
claudethatshstarted stops spending; the output reads share the deadline, and Ctrl-C/SIGTERM/SIGHUP are forwarded to the group and then to the previous handler. 180 s is two minutes underserve's 300 s reply window. On Windows onlyshis stopped, as the docs say.main; an existing snapshot of that commit is adopted without a download.mcp_reranks(default 25, machine config only) bounds the rerank commands one MCP server process starts. It is charged by commands actually started (a failed or timed-out one counts, an exact id or a refused command does not);serve's reply carries the count.zerographpackage on the public npm registry carries the macOS, Linux and Windows binaries and runs the one for its platform (npm refusedzerograph-win32-x64to spam detection, and one name means one placeholder and one trusted-publisher setup). Published through trusted publishing (OIDC, provenance); no.npmrc, no install script. One-time placeholder publish and trusted-publisher setup is runbook step 5 and must happen before the tag.mcp_reranks; the command runner wakes on the model's exit instead of a 50 ms poll, never waits on a prompt writer a lingering child keeps blocked, and forwards signals to each running command's group..repograph/,repograph.toml,REPOGRAPH_*, old hooks and MCP entry), in the bench kit that drives the pinned fixture, and in recorded data (runs.jsonl,bench/results, read under the new tool key). Therepographbin alias and the@devmaxxx/repographstub are dropped.Cargo.toml's; publish skips versions already on the registry so a rerun completes. Plusdocs/releases/0.6.0.mdand the staleenrichreferences.Test plan
cargo testandcargo clippy --all-targets -- -D warningson macOSthe_stop_reaches_what_the_shell_startedandtests/rerank_interrupt.rsfail with their fix removedhighwith--fix, twice; second pass: allowance charged by started commands, 8 MiB pipe cap, 2 s read grace, SIG_ERR guardzerographreportszerograph 0.6.0and is the only bin installedzerographplaceholder published and its trusted publisher set (runbook step 5)bench/history/runs.jsonl; dense p90 is two tokens under its floor, the tightest margin