chore(deferrals): re-decide both expired rows, and bump the ratchet they were holding - #40
Merged
Merged
Conversation
…hey were holding `cargo xtask deferrals --check` is a weekly scheduled gate, not a PR gate (ADR-0010, deliberately — an expiry should page the schedule, not block unrelated work). Nobody acted on it. Two rows passed review-by, and three published claims had rotted behind them. rust-sdk-902-offer-clock (review-by 2026-08-10). The offer is open with zero replies at 68 days: no comment, no assignee, no linked PR. But R9's trigger is TWO substantive offers unanswered for 60+ days, and the same day's other filing was answered — rust-sdk#903 closed and fixed by merged #905 in nine days. So R9 has NOT fired and M4's DoD does not re-scope. That PR was also not "maintainer-authored" as the engagement doc claimed: GitHub shows the author carrying the Contributor badge, approved and merged by a Member. Successful engagement either way, but the distinction is exactly what R9 measures. Recording the outcome, not posting — upstream posting is a maintainer action under this repo's own pattern (issue #9). suite-0-2-0-stable-pin-bump (review-by 2026-08-15). Half of it was buildable now, so it is built. The row and register row 2.4 both said the npm `alpha` dist-tag "has been quiet since 2026-07-01"; alpha.10 published 2026-07-27, the day after that was written — ADR-0010's own founding example, verbatim, again. alpha.11 followed on 2026-08-07. The stable pin genuinely cannot move (`latest` is still 0.1.16, unchanged since 2026-03-30) and re-dates; the draft ratchet moves here, with a BLESS=1 re-measurement in the same commit. The bump earns its keep immediately. No pre-existing check changed status; the whole delta is 36 new `wire-schema-valid` checks that validate every message against the negotiated revision's JSON schema. Four fail, all on the 2025-11-25 leg, all for missing `cacheScope`/`ttlMs` on resource results — CACH-001, the one clause this workspace's registry had already found and the runner had missed. The standing finding "the runner cannot distinguish the two servers" is superseded rather than deleted: a negative result about an instrument expires when the instrument improves, and here the prose-level reading arrived six weeks before the schema-level one. The two pins are decoupled in 03-conformance-strategy, because they answer different questions: one gates a released revision and waits for a release, the other measures readiness against a scenario set that is itself moving, where holding still does not preserve the measurement — it ages the question. Two new rows for what this exposed: draft-suite-pin-currency, and expired-deferral-notification (a red weekly job reaches a human only by an easily-missed email; fixing that needs `issues: write` on a `contents: read` workflow, so it gets its own reviewed change rather than riding along here). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SjVp39nWRhAQeYjSGbQWoZ
… docs The 2026-08-17 correction fixed "123 and 124 passes where the reports say 58 pass, 1 fail and 59 pass, 0 fail" — and stopped exactly at the boundary of the CLAIM_FILES that `cargo xtask draft-coverage --check` parses. Register row 1.5i, 03-conformance-strategy and 06-roadmap are outside that set, so all three still carried the inflated pair: pass + not-observed, which is the accounting ADR-0012 exists to remove. 58 + 65 = 123 and 59 + 65 = 124, exactly. Found the right way. A CHANGELOG entry in the previous commit quoted register row 1.5i in good faith, and the claim gate rejected it as a verdict no committed report produced. The gate could see the copy and not the original. All three corrected against the committed goldens, with the register row recording what it used to say and why rather than being quietly overwritten. The lesson worth keeping is the boundary, not the arithmetic: a hand-kept number outside the checked set drifts silently, and the checked set is currently seven Markdown files. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SjVp39nWRhAQeYjSGbQWoZ
…cision-2026-08 # Conflicts: # CHANGELOG.md
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.
What and why
cargo xtask deferrals --checkis a weekly scheduled gate, not a PR gate (ADR-0010, deliberately — an expiry should page the schedule, not block unrelated work). Nobody acted on it. Two rows passed their review-by dates, and three published claims had rotted behind them. Both are re-decided against re-fetched evidence rather than re-dated blind, which is what ADR-0010 requires.rust-sdk-902-offer-clock(review-by 2026-08-10). The offer is open with zero replies at 68 days — no comment, no assignee, no linked PR, labelled P2/enhancement. But R9 has not fired: its trigger is two substantive offers unanswered for 60+ days, and the same day's other filing was answered — rust-sdk#903 closed and fixed by merged #905 in nine days. So the count stands at one and M4's DoD does not re-scope. Outcome recorded in the risk register and the engagement doc; not posted upstream, because this repo's own pattern (issue #9) makes posting a maintainer action.That PR was also not "maintainer-authored" as the engagement doc claimed — GitHub shows the author carrying the Contributor badge, approved and merged by a Member. Still a successful engagement, but the distinction is precisely what R9 measures: maintainers triaged and merged a community fix promptly; they did not write it.
suite-0-2-0-stable-pin-bump(review-by 2026-08-15). Half of it was buildable, so it is built. The row and register row 2.4 both said the npmalphadist-tag "has been quiet since 2026-07-01" —alpha.10published 2026-07-27, the day after that was written, andalpha.11on 2026-08-07. That is ADR-0010's own founding example recurring verbatim. The stable pin genuinely cannot move (latestis still0.1.16, unchanged since 2026-03-30) and re-dates; the draft ratchet moves here with aBLESS=1re-measurement in the same commit.The bump paid for itself immediately
No pre-existing check changed status. The entire delta is 36 new
wire-schema-validchecks, which validate every message against the negotiated revision's JSON schema. Thirty-two pass. The four that fail are all on the2025-11-25leg —resources-{list,read-text,read-binary,templates-read}— each formust have required property 'cacheScope'and'ttlMs'.That is CACH-001: the single clause this workspace's registry had already flagged against the legacy server, while the official runner scored both servers an indistinguishable 23/23. The runner found it independently, six weeks later. The standing finding "the runner cannot distinguish the two servers" is recorded as superseded rather than deleted — a negative result about an instrument expires when the instrument improves. Legs now read 37 passing / 4 failing (legacy) and 41 / 0 (stateless); baseline totals move 46 → 78 passing, 0 → 4 failing, 46 → 82 checks.
The asymmetry is recorded because it is instructive:
tools/listandprompts/listpass only because rmcp's#[tool_handler]/#[prompt_handler]expansions attach caching hints unconditionally, whileresources/*go through this workspace's revision-awarecached(), which correctly withholds them at2025-11-25. The honest implementation is the one the new check fails.The gate caught me, and found older residue
The first push failed CI:
draft-coverage — CHANGELOG.md quotes a verdict of 123 pass, 1 fail that no committed report produced. The entry had quoted register row 1.5i in good faith. Those figures are the pre-ADR-0012 counts — 58 + 65 = 123 and 59 + 65 = 124 exactly, foldingnot-observedintopass, the very accounting ADR-0012 removed. The 2026-08-17 sweep that corrected this arithmetic fixed the CLAIM_FILES the gate parses and stopped exactly at that boundary; register row 1.5i,03-conformance-strategy.mdand06-roadmap.mdare outside it and still carried the inflated pair. All three corrected against the committed goldens, second commit. The lesson kept is the boundary, not the arithmetic.Deliberately not done
Moving
deferrals --checkintoxtask ci. ADR-0010 excludes it on purpose and that reasoning holds. The real gap is the last mile: a red weekly job reaches a human only by an easily-missed email, and the job runsspec-drifttoo, so a network flake looks the same from outside as an expired row. Fixing that needsissues: writeon a workflow that is deliberatelycontents: read, plus a new pinned action — a security-surface change with noactionlintavailable here to validate it. Opened as ledger rowexpired-deferral-notificationrather than shipped untested as a rider. Second new row,draft-suite-pin-currency, covers the blind spot that let the ratchet go six weeks stale: the weekly alpha job runs at the registry's revision, so it cannot see draft scenario churn.Checklist
cargo xtask cipasses locally — reportsevery local gate ran and passed: 12 steps, 85 suites, 1,757 tests, 0 failed, 0 SKIPPED, no warnings or errors outside the 3 known-benignlicense-not-encounterednotes. MSRV clippy (1.88.0) andcargo-denyboth ran (advisories ok, bans ok, licenses ok, sources ok).every source and registry file (182) is within 500 lines.conststring,DRAFT_SUITE_VERSION.cargo xtask draft-readinessre-run after the bless reportsmatches the committed baselinewith a clean working tree, so the recorded baseline is self-consistent at the new pin.corpus/draft/captured/are not auto-regenerated (re-copying a tap is a deliberate act, percorpus/README.md), so no.jsonland no golden moved.conformance/draft-readiness.jsonwas re-blessed and its diff reviewed check by check.03-conformance-strategy.md, stated there with its reasoning.deferrals.json(both rows re-decided, two rows added),01-ecosystem-context.md(rows 1.5i and 2.4),03-conformance-strategy.md(pin triggers decoupled; runner-vs-registry paragraph),06-roadmap.md,07-ecosystem-engagement.md(rows 1 and 9),08-risk-register.md(R9),corpus/README.md,crates/mcp-everything-server/README.md, and a dated note inscheduled.yml.Other gates run
cargo xtask deferrals --checkcargo xtask draft-readiness0.2.0-alpha.11pin; working tree cleancargo xtask conformancecargo xtask spec-drift(all features)cargo xtask draft-coverage --checkcargo xtask mutantsxtask/**(excluded by.cargo/mutants.toml), Markdown and JSON; no shipped-cratesrc/changed. Confirmed withcargo mutants --in-diff --list.Every figure above was re-measured against the committed data before posting.
🤖 Generated with Claude Code
https://claude.ai/code/session_01SjVp39nWRhAQeYjSGbQWoZ
Generated by Claude Code