Align read-first prose with the contract's agent_read_order#251
Open
pengfei-threemoonslab wants to merge 1 commit into
Open
Align read-first prose with the contract's agent_read_order#251pengfei-threemoonslab wants to merge 1 commit into
pengfei-threemoonslab wants to merge 1 commit into
Conversation
The runtime contract (contract --json → agent_read_order), llms.txt, AGENTS.md, .well-known, and docs/agent-contract-current.md § Two read entry points all name agent-handoff.json as the first artifact a coding agent reads after verify — but README told agents "read verifier.json first" in two places (the Verify-first quickstart and the copy-into- your-agent block) while telling them "read agent-handoff.json.gate. merge_verdict first" a few lines later, and the "What it produces" list claimed "in read order" with verifier.json ahead of the handoff. The /shipgate slash command carried the same stale sentence. Fix the three README spots and the slash command to lead with agent-handoff.json (gate.merge_verdict, then controller) and present verifier.json as the authoritative controller substrate, matching the contract doc's language. No field or artifact semantics change. Guard: new test_read_first_instructions_match_contract_agent_read_order in tests/test_public_surface_contract.py pins every "Read `<artifact>` first" instruction on README.md, AGENTS.md, llms.txt, and .claude/commands/shipgate.md to the runtime contract's agent_read_order[0], so the two orderings cannot ship simultaneously again. Verified to fail on the old verifier-first phrasing. (.well-known's machine-readable agent_read_order and primary_commands were already contract-validated by existing tests in this file.) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Why
Problem #9 from the 2026-07-01 repo review: README shipped both orderings simultaneously — "Read
verifier.jsonfirst" (Verify-first quickstart, §189–195; copy-into-your-agent block, §280–285; and the "What it produces" list claimed in read order withverifier.jsonahead of the handoff) vs "readagent-handoff.json.gate.merge_verdictfirst" (§How to read your first result). The/shipgateslash command carried the same stale sentence.The canonical order is not ambiguous:
contract --json→agent_read_order[0]isagent-handoff.json, anddocs/agent-contract-current.md§ Two read entry points spells out the design — handoff first for the compact continue/repair/stop step,verifier.jsonas the authoritative controller substrate,report.json.release_decision.decisionas the gate.llms.txt,AGENTS.md, and.well-knownwere already aligned; README and the slash command were the stragglers.What
.claude/commands/shipgate.md: same alignment (this file ships in the wheel byte-identical via force-include, so no second copy to sync — covered bytest_wheel_claude_command_is_byte_identical_to_repo_file).tests/test_public_surface_contract.py:test_read_first_instructions_match_contract_agent_read_orderpins everyRead `<artifact>` firstinstruction on README.md / AGENTS.md / llms.txt / the slash command to the runtime contract'sagent_read_order[0](viabuild_contract_payload(), the function behindcontract --json), with a vacuity check (each surface must still contain at least one read-first instruction).Scoping notes
.well-known+llms.txtagainstcontract --json" — investigation showed this largely already exists intest_public_surface_contract.py(.well-knownis validated againstbuild_contract_payload()foragent_read_order,verifier_read_order,primary_commands, schema versions, exit codes, and MCP tools;llms.txtfor version literals, triggers, and llms-full references). The genuine uncovered drift was the prose read-first instructions — that's what the new test covers. Filed no redundant checks.skills/agents-shipgate/SKILL.mdstep 3 ("parseverifier.jsonfirst, thenverify-run.json") is intra-substrate ordering (verifier before verify-run), which is contract-correct — deliberately untouched to avoid the three-copy bundled-prompt sync for a non-contradiction.Verification
verifier.jsonfirst" phrasing is re-injected into README.pytest tests/test_public_surface_contract.py tests/test_zero_install_detector.py tests/test_packaging.py tests/test_trust_root.py tests/test_agent_instructions_apply.py tests/test_action_metadata.py— all green;ruff checkclean.shipgate check --agent claude-code --format codex-boundary-jsonon this diff (touches theagent_instructionstrust-root surface):decision: allow,completion_allowed: true— aligning instructions with the contract, not weakening them.🤖 Generated with Claude Code