docs: state production reply authority as it is, not as a dispatch lease - #958
docs: state production reply authority as it is, not as a dispatch lease#958chughtapan wants to merge 2 commits into
Conversation
PR #941 removed dispatch leases, LeaseId, conversation_busy, server-side reply grants, and local duplicate-reply suppression from the production line. Several v2-owned records still described production as lease-bearing, and one v2 specification asserted a registration contract that main has never adopted. Production reply authority is the originating ConversationId, carried privately in MCP _meta under the xyz.moltzap/events-v1 extension, and every invocation sends. The records now say that. Where a production target was discussed but never admitted on main, the text says requested and unselected rather than selected. docs/spec/management.md no longer states that main's registration must be idempotent and crash-recoverable through a stable OperationId: main has no OperationId, AuthService.registerAgent generates the credential server-side, and agents.name is unique, so identical retries fail rather than recover. A v2 specification does not bind main's implementation. The membership prohibition narrows to the network wire. A daemon may enrich the conversation it passes across its own loopback MCP boundary with membership its endpoint already holds; the canonical network Conversation is unchanged, verified identical to origin/main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P76aaa1STr3WPZ3nDascta
The gate returned FAIL on six blockers. The artifact is checked in regardless, because a failed review is auditable evidence and the rerun rule needs to show which reviewer saw which candidate. It records what the reviewer disclosed without being asked: a system-reminder injected an author-side task list naming the candidate. Whether that assisted the run is a maintainer judgement, so the record states it rather than deciding it. The author's verification of the findings is recorded alongside the report. Five of six blockers reproduce from the repository alone. The sixth is qualified rather than contested: the extension the candidate cites does exist, but only on an unmerged stack, and the cross-track ownership collision the reviewer raised against it stands. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P76aaa1STr3WPZ3nDascta
Blind teammate review: FAIL — this PR is blocked from landingArtifact checked in at Six blockers. I verified them after delivery rather than contesting them; five of six reproduce from the repository alone.
The one I'd qualify, and why it gets worse rather than betterThe reviewer called the Its underlying point is sharper than its framing, and I missed it entirely: The most serious one is #4I changed the record from selects I conflated two questions: was this selected and did What holdsThe direction is right and four factual corrections check against code: production reply authority genuinely is the ConversationId, no leases survive in production source, daemon-side membership enrichment is real, and NextRework, freeze a new candidate, and review with a different fresh reviewer per the gate's rerun rule. Reviewer prose is not self-certifying — maintainer disposition is still pending regardless of this outcome. One thing the reviewer disclosed unprompted: a system-reminder injected an author-side task list naming this candidate. It says it did not use it and grounds each finding in cited artifacts. Recorded in the artifact rather than judged there. |
Plan step 4a — Lane V-a, the factual half of the reconciliation. The one-path design change is deliberately not here; see below.
What was false
PR #941 removed dispatch leases,
LeaseId,conversation_busy, server-side reply grants, and local duplicate-reply suppression from production. Several v2-owned records still described production as lease-bearing. The sharpest was20260801-model-output-is-start-or-bound-reply:Production reply authority is the originating ConversationId, carried privately in MCP
_metaunderxyz.moltzap/events-v1, and every invocation sends. The records now say that.Where a production target was discussed but never admitted on main, the text now says requested and unselected rather than selected — including freeze row G1-DEC-640, whose only defect was that past tense.
management.mdretractionIt asserted, as normative v2 spec, that main's registration "must be idempotent and crash-recoverable, using a stable OperationId and a client-owned recoverable credential." Verified against main: there is no OperationId anywhere,
AuthService.registerAgentgenerates the credential server-side, andagents.nameisTEXT UNIQUE— so identical retries fail rather than recover. Per20260729-v2-authority-lives-with-v2, a v2 spec must not bind main's implementation. The request is recorded; the outcome is not admitted.Without this, a registration implementer reads an outranking normative spec demanding a contract main's schema cannot deliver.
Membership DTO narrowed to the wire
"Harness introduces no … membership DTO"now scopes to the network wire. A daemon may enrich the conversation it passes across its own loopback MCP boundary with membership its endpoint already holds.I verified the justification rather than asserting it:
git diff origin/main..HEAD -- packages/protocol/src/conversation/is empty. The canonical wire is genuinely unchanged, so the DTO never crosses the network and the record's actual concern is not violated.Provenance: maintainer, 2026-08-04T07:51:15 — "we can include participants in conversation passed by mcp to harness client but not on the main wire."
Audit
Found by a bare
leasegrep, notdispatch lease— the narrower pattern missesoutput.md's "lease and production-owned completion behavior". Every surviving hit is legitimate and was reviewed individually:20260721-sessionless-network.md:69partially-supersededrecord20260801-model-output:1420260801-model-output:54inbound-notifications:53gate-1-freeze:326docs/decision-evidence/was not touched — trajectories are source-faithful ledgers.Deliberately not in this candidate
The one-path
/register/mcpcollapse. It is a separate PR because the risk profile is asymmetric: these are factual corrections against verifiable code, while the one-path change amendsAGENTS.mdConstitution item 3 and supersedes admitted Gate-1 row G1-DEC-635 — 28 edits across 11 files. Bundled, a FAIL there would drag down four uncontroversial corrections and force both to be re-frozen with a fresh reviewer. AGENTS.md already requires a different reviewer per candidate, so splitting costs one extra gate run and no extra reviewer.Status and gates
No record changes
status, so nosuperseded-byfield, noSupersessionsection, and nodocs/decisions/README.mdindex rows move. These are corrections within current outcomes, not replacements of them.pnpm docs:check— 0pnpm docs:check:mermaid— 0leasegrep annotated above, line by lineNext
This candidate still needs the AGENTS.md blind-teammate review gate: one fresh reviewer, the six verbatim questions, no coaching, artifact recorded under
docs/decision-evidence/. Then maintainer acceptance — agents draft and route, never self-admit.🤖 Generated with Claude Code
https://claude.ai/code/session_01P76aaa1STr3WPZ3nDascta