Repository navigation
Mission approvals are the human's own words (M9.17) - #82
Merged
Merged
Conversation
A grant (mission approve, baseline confirm/restore, journeys approve, ethics and telemetry consent) records only when a prompt the UserPromptSubmit hook captured has a line that starts with its verb and names the content's code (the first 8 hex of its sha256). Until then the command asks (exit 3) with that exact line. A negated line, another code or verb, and a line captured before a later decision about the subject (for a baseline, any version's confirmation) grant nothing; each human decision records the prompt count it saw, so the order holds within a second. A human grant row without such a line is a ledger problem. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018RxETAY6S1gcmdctBK8a8Z
adeelahmad
pushed a commit
that referenced
this pull request
Oct 20, 2026
…rgery paths PR #82 (M9.17) makes a mission grant need the human's own words: a prompt line the UserPromptSubmit hook captured. gate-mission-scope now denies the ways around that, for every agent and the supervisor: - a write (Write/Edit/patch or a Bash write) under <run data>/transcripts/, the captured prompts; - a Bash `transcripts prompt|record|snapshot|stop|stage-in`, the hooks' own commands; - where a mission is set, a host session started from a tool call (`claude -p`, `codex exec`, `opencode run`, or any prompt), since its prompt fires UserPromptSubmit too. A host's tools (`claude plugin validate`, `--version`, `opencode models`) stay allowed; no mission, no rule. Test: mission-scope-bash.test.py (220 rows; 13 of the 18 new ones fail on the previous gate), mission-roles.test.py (32 checks); make ci, conformance 78/78 and plugin validate --strict pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0197nSutKR1QAAqgJhFZ8fPj
adeelahmad
marked this pull request as ready for review
October 20, 2026 04:00
…the human's typed line Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018RxETAY6S1gcmdctBK8a8Z
… the human's line Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018RxETAY6S1gcmdctBK8a8Z
… waits for the human's typed line Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018RxETAY6S1gcmdctBK8a8Z
adeelahmad
pushed a commit
that referenced
this pull request
Oct 20, 2026
The section B approvals now go through the human's captured words, as M9.17 requires. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0197nSutKR1QAAqgJhFZ8fPj
This was referenced Oct 20, 2026
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.
Requested by Adeel · project thread
Before: any session could run
mission approve --by Adeel,baseline confirm --by Adeelorjourneys approve --by Adeeland record a human approval. An approval was only as strong as--by, so a role could approve its own mission change, confirm its own baseline, or restore an old one.After: a grant counts only when the human has typed it. Without that, the command exits 3 and prints the line to reply, for example
approve msn_… 3f2a9c1b. The code is the first 8 hex of the content's sha256, so the line names exactly what the human saw. The role relays the line, the human pastes it, and the role runs the command again.How:
_mission.py)record_humanlooks for a captured line before it records any grant.UserPromptSubmithook (transcripts prompt), which is already wired on Claude Code, Codex and OpenCode.approve,confirm,restore,retireorconsent) and names the code.prompt: {ts, sha256, session, line}.--byalone;restorenever rolls back the current version.mission checknames the line to reply.telemetry.revokedis now a human decision the ledger accepts.mission_fixture.as_humangives the tests a human who types every line a grant asks for, which is the real flow.Open with M9.9, recorded in ROADMAP: the prompt log is run data. A shell can append to it or feed
transcripts promptdirectly, and a headless host session started by a role fires the hook too. M9.9's path guard denies roles all three.Evidence
mission-corecheck 13 andmission-baselinecheck 14, both written RED first. On master,mission approve --by Adeelexits 0. Without the cross-version rule, an oldrestoreline restores again.make cipasses locally (78/78 conformance checks).Generated by Claude Code