Contract v10: machine-readable verify_required on the boundary result#254
Conversation
shipgate check already escalated to warn and routed to verify when a diff touched a tool surface it cannot gate (#237), but the deferral was only prose + diagnostics — exactly what agents lose on long sessions. The boundary result now carries a top-level `verify_required: bool`, true whenever undeclared_gap or coverage_gap fires, and the field joins AGENT_RESULT_CONTROL_FIELDS. decision="allow" with verify_required=true reads "boundary clean, capability not yet gated: run verify before completion". Deterministic projection of the existing deferral; no second verdict; IE thresholds untouched. Contract 9 -> 10 (additive; ">= 9" guidance in kits stays true, so the bundled prompts are deliberately untouched). Swept: .well-known contract_version + agent_result_control_fields, boundary JSON schema regen, 8 boundary goldens regenerated (only the new field changes, false on the full corpus), the switch-on enumerations across README / AGENTS.md / llms.txt / quickstart / docs/agents/*, the keystone contract doc (v10 note + field semantics), CHANGELOG Unreleased, and llms-full regen. True-path assertions added to the declared-surface and undeclared-surface deferral tests; false-path to the clean-allow test. Full CI-style suite green (-n auto, not perf). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
65ab41e to
7cbf0be
Compare
|
CI failure root-caused and fixed (amended into the commit): my local suite run predated the final amend, and the contract bump had four more pinned layers than the initial sweep found — (1) hardcoded expected control-field lists in 🤖 Generated with Claude Code |
…s to AgentResultV1 Two P2s from review: - Docs described an impossible control state: the evaluator escalates a clean allow to decision="warn" whenever the deferral fires, so allow+verify_required=true cannot be observed. agent-contract-current, CHANGELOG, and the field/tuple comments now state the real pair (warn+true) and that a plain allow always has verify_required=false. - agent_result_control_fields advertised verify_required while the legacy docs/agent-result-schema.v1.json lacked the field (it lived only on the boundary subclass). Moved to the shared AgentResultV1 base with a default of false and regenerated the legacy schema, so the advertised control-field list validates against both schemas. Full CI-style suite + static-only lint + ruff green on this state. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
All three findings addressed:
Full CI-style suite + static-only lint + ruff green on the new commit; #255 rebased on top. 🤖 Generated with Claude Code |
Closes the check/verify semantic gap's last prose dependency (review problem #3; roadmap item 4).
shipgate checkalready warn-and-routes when a diff touches a tool surface it cannot gate (#237) — but the deferral lived in warning prose and diagnostics, exactly what agents lose on long sessions. The boundary result now carries top-levelverify_required: bool(true whenundeclared_gaporcoverage_gapfires), and the field joinsagent_result_control_fields.decision="allow"+verify_required=true= "boundary clean, capability not yet gated — run verify before completion." Deterministic projection of the existing deferral; no second verdict; IE thresholds untouched.Contract 9 → 10 (additive; kit prompts say ">= 9 or newer" and stay true, so bundled prompts + render hashes are deliberately untouched). Sweep:
.well-known(contract_version + control fields), boundary JSON schema regen, 8 goldens regenerated (only the new field appears; false across the whole corpus), switch-on enumerations in README/AGENTS.md/llms.txt/quickstart/docs/agents/*, keystone contract doc (v10 note + field semantics +Runtime contract: 10stamp), docs/architecture.md stamp, CHANGELOG Unreleased, llms-full regen. True-path assertions added to both deferral tests; false-path to clean-allow.Full CI-style suite green locally (
-n auto -m "not perf");shipgate checkon this diff: allow.Note for the site: threemoonslab.com quotes the old README banner + switch lists; it vendors from release tags, so the daily sync PR at the next release carries this — flagged so prose review happens then.
🤖 Generated with Claude Code