Repository navigation
Lifting a mission block is the human's typed line, kept in the ledger (M9.51) - #93
Merged
Merged
Conversation
… (M9.51) `aloop mission tick --force --by` now asks (exit 3) for the human's own `lift <mission> <code>` line, the code bound to that block's key and how many times it was lifted, and records a mission.lifted ledger row. The repeat guard and the 3-failed-goals count restart only after a lift the ledger has, so --by alone, a run-log-only lift or an old line lift nothing, and a fresh checkout keeps a lifted block lifted (M9.24's first part). /aloop:mission relays every grant's ASK line verbatim. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aw6CiQcdpzdzZZXKf8WbUM
…1 review) A review found three ways an old or copied lift still lifted a block: a run-log tick carrying an old lift's sha, a line typed for a block that then cleared by itself, and a 3-failed-goals reset taken from the caller's --now. The lift code now digests the occurrence too (the handout that tripped a repeat, or the newest failed goal), a repeat restarts only at the lift row's own run-log event (its first copy), and the goals reset reaches only the goals the human lifted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aw6CiQcdpzdzZZXKf8WbUM
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aw6CiQcdpzdzZZXKf8WbUM
adeelahmad
pushed a commit
that referenced
this pull request
Oct 20, 2026
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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0197nSutKR1QAAqgJhFZ8fPj
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: after M9.17 (#82), every mission grant needed the human's typed line, except one.
aloop mission tick --force --by Adeelstill lifted a block (the repeat guard, or 3 failed goals in a row) on--byalone. The lift was also run data, so a fresh checkout blocked again (M9.24's open--forcepart).After:
tick --force --byasks (exit 3) for the human's own line,lift <mission> <code>, just likeapproveorconfirm. When they have typed it, the lift is recorded as amission.liftedledger row.--byalone, a lift only the run log has, a replayed lift, a negated line, another code, an old line and a line typed for an earlier block all lift nothing. A fresh checkout keeps a lifted block lifted.How:
plugin/bin/_mission.py,_events.py):mission.liftedis anAPPROVAL_EVENTSentry (subject: the mission) with verbliftinGRANT_VERBS. M9.17'sprovenance,citesand staleness rules therefore apply unchanged, andevents emit mission.liftedis gate-owned.tick.py,lift_of): the digest covers four things:factscounts a lift only when its row's sha matches those fields.--nowsaid./aloop:mission: a lift is listed among the typed grants. The BLOCKED row names thelift …line, and there is one new skill eval.mission.budget_exhaustedopen. The §4.12 prose, the M9.8 and M9.12 rows, TRACKING, CHANGELOG andplugin/mission/README.mdare updated.Review. An adversarial review (4 lenses) found three ways an old or copied lift still worked:
--now.Each one now has a test that fails on the first commit and passes on the second.
Evidence:
mission-tick.test.pycheck 30, new. Each part failed on the old code (run separately):--force --byalone exits 0 on master;--noweach lift on the first commit;mission-skill.test.pycheck 8, new.mission-*.test.pysuites pass (tick 30, skill 9, e2e 8, core 13), as domake pycheck eval-validateandscripts/check-tracking.py(82 requirements).Generated by Claude Code