From 505dcde569064e2498b0e36369b4f1f7251eeff9 Mon Sep 17 00:00:00 2001 From: Ralf Anton Beier Date: Fri, 28 Aug 2026 02:23:51 +0200 Subject: [PATCH] Promote FEAT-066; file FEAT-094 so its deferred half is not deleted FEAT-066 -> accepted. Merged in #190 with 13/13 CI green; its 10 tests re-run on main, gate-coverage reports 13 publishable crates in BOTH gates. Both ACs met, and AC2's structural guarantee was mutation-verified independently: appending a third tool object turns it red with ["analyze", "query", "verify"]. BUT PROMOTING IT ALONE WOULD HAVE DELETED WORK FROM THE PLAN. FEAT-066's title promises `analyze / query / verify`; its description defers `verify` to v3.4.0; and NOTHING carried the deferred half -- grepping every artifact for MCP returns FEAT-066 and nothing else. Mark it accepted and the verify tool stops existing anywhere in the plan. That is exactly scry#157/#160: an implementation with no artifact, invisible to the release plan, resurfacing later as a surprise. Here it would have been the inverse -- a plan item quietly evaporating on promotion. So FEAT-094 is filed first, in v3.4.0, `depends-on REQ-021`. Its deferral is measured, not cautious: REQ-021 measured `discharged` = 0 on every real commit pair, gate failing on all of them, ~47% uncertain, and `discharged` unreachable by construction on a stripped module. An always- uncertain verdict in an agent's tool loop is worse than an absent tool -- an absent tool is a fact an agent plans around; a useless one is noise it must learn to ignore. FEAT-094's AC3 is the part worth keeping: when `verify` is eventually added, FEAT-066's AC2 test must be UPDATED, not deleted. The structural guarantee moves from "verify is absent" to "verify is present and its verdict set is complete". A guard removed is a guard that stops being checked. v3.3.0 accepted 7/proposed 3; v3.4.0 accepted 9/proposed 3. rivet=0 claim-check=0 fmt=0 drift-gate=0 gate-coverage=0. Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc Co-authored-by: Claude Opus 5 --- artifacts/roadmap-3.0.yaml | 2 +- artifacts/roadmap-v3.4-mcp-verify.yaml | 51 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 artifacts/roadmap-v3.4-mcp-verify.yaml diff --git a/artifacts/roadmap-3.0.yaml b/artifacts/roadmap-3.0.yaml index f2c2931..9c6e54f 100644 --- a/artifacts/roadmap-3.0.yaml +++ b/artifacts/roadmap-3.0.yaml @@ -1210,7 +1210,7 @@ artifacts: - id: FEAT-066 type: feature title: "v3.3 — scry-mcp: analyze / query / verify as MCP tools" - status: proposed + status: accepted release: v3.3.0 description: > An MCP server exposing scry to agents directly. Agents cannot run `cargo`; diff --git a/artifacts/roadmap-v3.4-mcp-verify.yaml b/artifacts/roadmap-v3.4-mcp-verify.yaml new file mode 100644 index 0000000..d5797fe --- /dev/null +++ b/artifacts/roadmap-v3.4-mcp-verify.yaml @@ -0,0 +1,51 @@ +# v3.4.0 addendum — own file per scry#143 fix (1). +artifacts: + - id: FEAT-094 + type: feature + title: "v3.4 — Expose `verify` over MCP, once a verdict is worth acting on" + status: proposed + release: v3.4.0 + description: > + FEAT-066 shipped the MCP server with `analyze` + `query` and made the + absence of `verify` STRUCTURAL — enforced by the tool list, not by + documentation (its AC2, mutation-verified: appending a third tool object + turns the test red with `["analyze", "query", "verify"]`). + + This artifact exists because that deferral was otherwise UNTRACKED. + FEAT-066's title promises `analyze / query / verify`; its description + defers `verify` to v3.4.0; and nothing carried the deferred half. Promoting + FEAT-066 without this would have deleted the work from the plan — the + scry#157/#160 anti-pattern, where an implementation existed with no + artifact and surfaced later as a surprise. + + WHY IT IS DEFERRED, and the reason is measured rather than cautious. + FEAT-065's `verify_against` is implemented and `accepted`, but REQ-021 + measured that on real inputs `discharged` is 0, the gate fails on every + commit pair, and ~47% of verdicts are `uncertain` — matching scry#123's + 43-45% identity churn. On a STRIPPED module `discharged` is unreachable by + construction. Exposing that over MCP puts an always-`uncertain` verdict + directly into an agent's tool loop, which is the single worst place for a + verdict that cannot discriminate. + + SO THIS IS NOT MERELY WAITING ON PLUMBING. The blocker is REQ-021's own: + `discharged` needs a shape comparison finer than a hash, or corroboration + of the open->safe transition by CONTENT rather than structure (DD-022). + Until then a `verify` tool would be worse than its absence, because an + absent tool is a fact an agent can plan around and an always-uncertain one + is noise it must learn to ignore. + tags: [mcp, adjudication, ai-agent, req021, v3.4] + fields: + phase: phase-3 + acceptance-criteria: + - "Given REQ-021 has been discharged — a genuine fix reaching `discharged` on a shape an agent would actually write — When the MCP server enumerates its tools, Then `verify` is PRESENT and its verdict is actionable. Until that holds, this AC is not satisfiable and the tool must stay absent." + - "Given the tool is added, When a client calls it, Then the response distinguishes `still-open-untouched` from `still-open-after-edit` — an agent told only `still-open` cannot tell 'you did not fix it' from 'I cannot see your fix', which is the loop FEAT-065 AC2 exists to prevent." + - "Given the tool is added, When FEAT-066's AC2 test runs, Then it must be UPDATED rather than deleted: the structural guarantee moves from 'verify is absent' to 'verify is present and its verdict set is complete'. A guard removed is a guard that stops being checked." + residual: > + This feature cannot be scheduled until REQ-021 has a path. It is filed + to keep the deferred half of FEAT-066 visible, not because it is ready + to build. If REQ-021 turns out to be unreachable, the honest outcome is + to CLOSE this and say scry adjudicates for humans and not for an agent + loop — which would be a real finding, not a failure. + links: + - type: depends-on + target: REQ-021