docs(agents): make the os-dev termination contract explicit and honest about its measured failure rate (#6586) - #6740
Merged
os-project-manager merged 1 commit intoAug 8, 2026
Conversation
…t about its measured failure rate (#6586)
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
os-project-manager
marked this pull request as ready for review
August 8, 2026 13:52
os-project-manager
enabled auto-merge
August 8, 2026 13:52
This was referenced Aug 8, 2026
os-project-manager
deleted the
claude/issue-6586-dev-termination-contract
branch
August 8, 2026 14:35
This was referenced Aug 8, 2026
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.
Fixes #6586
What this changes
One file:
.claude/agents/os-dev.md. Three edits, all in the dev agent's own operating manual.1. A new "Terminating cleanly" section, placed directly after the
Definition of donelist, because termination is the last step of that order. It states:skip-changeset, the foreground CI-convergence read, then the JSON, and nothing of the dev's runs after it.TaskStopbefore it ever acquired the lock.2. The honesty clause, which is the point of the card. The section states plainly that following it does not mean the dev will be heard: 7 of 7 dispatches on 2026-08-08 failed to hand back cleanly after opening a correct PR, and three of those carried this clause verbatim in their dispatch prompt and failed anyway — 3 of 4 clause-carrying runs, which puts the cause outside anything a documentation change can reach. Two binding consequences follow in the text: never read your own silence as success, and the PM's probe-and-revive loop is the standing backstop, not an exception path. Every death so far was fully recoverable from transcript with zero work lost, so the cost is latency and not correctness — and the text says so, precisely so that a revived dev does not "recover" by redoing the work or opening a second PR.
3. Two existing sentences fixed in the same pass, because the addition would otherwise leave them misleading:
Definition of doneteardown bullet said "dev servers on random ports". Background monitors are also things the dev started, and they were the whole fifth sub-shape, so the bullet now names them.Cross-reference, per the issue's third ask
The stale monitor is the same class of cost as the PM's own dispatch timers, where a deleted timer still delivers, and by delivery time its text may be several rounds behind reality — whose mitigation is that every such text opens with idempotent, re-read state before acting. The new section cites that convention by name and applies it to the dev in the other direction: before acting on any wake, re-read the real state rather than replaying the deliverable.
Deliberately NOT done, with pointers
.claude/skills/pm-dispatch/SKILL.mdis untouched. PR docs(pm-dispatch): sweep of 7 measured SKILL corrections — os-regen list drift, the unlock sweep's three duties, verification blindness, the auto-merge signature #6720 is in the merge queue editing that file. The PM-side half of this card — that the probe-and-revive loop is load-bearing rather than a fallback, and that a stale wake should be recognisable without re-reading the deliverable — belongs there and is left for a follow-up on top of docs(pm-dispatch): sweep of 7 measured SKILL corrections — os-regen list drift, the unlock sweep's three duties, verification blindness, the auto-merge signature #6720. The producer-side half, which is this PR, is the one the PM skill already points at ("The producer-side half of this rule lives in.claude/agents/os-dev.md's resource discipline").pm-dispatch/SKILL.mdforbids the PM from subscribing to a dev's PR before the report lands, because before the report the PR is the dev's territory and two pilots step on each other. The agent definition's own CI-convergence bullet, added after fix(runtime): callData 的 ObjectQL 兜底对「记录不存在」统一答 404 RECORD_NOT_FOUND (#5138) #5584 merged red and poisoned main's merge ref, depends on the dev doing that read. So this PR keeps the CI wait and instead makes explicit that it is a foreground read ending in the report, never a licence for a background waker. The ownership sentence in the new section records the handoff point rather than moving it.Verification
No package code changed, so there is no unit test to add and no
pnpm testorpnpm typecheckthat is meaningful for this diff. Saying so beats manufacturing evidence that fits the template. What was run is the gate list enumerated from.github/workflows/lint.yml, after commit, all green:check:skill-frame-sync— the one that reads this exact file:4 copies of the decision frame are structurally isomorphic across 3 files,3 axes,40 markdown files scanned for undeclared copies.check:doc-authoring—365 files clean.check:nul-bytes—scanned 6258 tracked text file(s); no raw ASCII control bytes. Plus a manual scan of the edited file beyond the gate's surface, no matches.check:role-word—44 baselined file(s), no new occurrences.check:docs-audit-scope,check:quick-reference-counts,check:adr-anchors,check:skill-compatibility— all OK.pnpm lint— clean, exit 0.Labels
skip-changeset: this PR touches only.claude/agents/os-dev.md, which is internal agent tooling and publishes nothing to any package, so it releases nothing and writes no changeset. Applied as a union with the labels already on the PR, not as a bare set.Generated by Claude Code