Repository navigation
A mission's gap list counts only as mission evaluate computed it (M9.27) - #101
Merged
Merged
Conversation
…9.27) `mission evaluate` now records eval.completed in the committed ledger. `evaluate check`, `goal derive`/`close` and `mission tick` count an eval only with that record of its content, so a hand-written or edited eval no longer reads as "goal met", and a fresh checkout derives and closes goals from the evals it committed (goal close orders by the ledger). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aw6CiQcdpzdzZZXKf8WbUM
…7 review) Review findings, each a test that failed before this: - goal derive/options took the newest recorded eval even when its file was edited, while tick and evaluate check skipped it; now all three read evaluate.evaluated (record of the content, schema, a seal that matches). - a re-stamped eval (status or sha256 field, outside the digest) was still trusted by tick; the seal must now match the content. - tick ordered evals by the id's clock, goal by the ledger and evaluate check by created_at; all now use the ledger's order. - journey and baseline evidence accepted an eval or state nobody computed. The recomputation half and tick checking a goal's own problems are new ROADMAP items M9.52 and M9.53. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aw6CiQcdpzdzZZXKf8WbUM
# Conflicts: # docs/TRACKING.md # plugin/bin/_mission.py
adeelahmad
marked this pull request as ready for review
October 20, 2026 11:06
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_01AiLhAWTRtwbgMCDQNJUbea
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_01WBVFNrEg85XAnSfHQidCXN
adeelahmad
pushed a commit
that referenced
this pull request
Oct 20, 2026
…er and rule fixes The merge follows the #86 thread's recipe for _shellread.py (Word.body ours, Cmd keeps end plus loop/pipe, their heredoc registration, `for NAME do`), and doors.py skips the reader's compound markers and keeps a pipeline element's cd in the element. Round 4 (the verifiers of round 3): the scope gate walks every state a command may leave the shell in. A cd inside an if/case/loop body, group or function, or after && / ||, may or may not have run, so the rest is judged from each dir (a compound's own `} > f` from where it started); a loop body once per item; unquoted $VAR splits; eval and source /dev/stdin run in the calling shell; a background job's cd stays in it; nesting past 8 levels, more than 1024 walks or 50 000 judged commands blocks. find's -name tests bound a removal through -o alternatives and negations; -fprint/-fls write; wget --spider -O, npm -g --prefix, --global=false, os.environ.__setitem__/ update, xargs -i/-I{}, runuser options and `command -p export` are read. Residuals are ROADMAP M9.54. mission-scope-bash.test.py: 718 commands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0197nSutKR1QAAqgJhFZ8fPj
adeelahmad
pushed a commit
that referenced
this pull request
Oct 20, 2026
…ch; docs for M9.31 Conflicts: the OpenCode plugin's header comment (gate-dispatch on task from master, the door gate last from this branch) and codex-hooks.test.py (both blocks kept). ROADMAP: M9.31 done, new items M9.48, M9.49, M9.54-M9.59, and the M9 row of section 0 brought up to date; TRACKING, CHANGELOG, OVERVIEW. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA
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:
aloop mission tickread every eval file indocs/agents/mission/eval/. A file nobody computed, or one edited after it was written, could saygoal_met: true, and the loop would then hand outRESEARCH("raise the bar") instead ofDERIVE_GOAL. The goal commands trusted an eval only through a run-log event, which a fresh clone does not have, so on a clone tick handed outDERIVE_GOALwhilegoal deriverefused. The readers also picked "the latest eval" by three different clocks.After:
mission evaluaterecordseval.completedin the committed, hash-chained ledger.mission tick,evaluate checkandgoalall take the newest intact eval from one function,evaluate.evaluated, in the ledger's order. Intact means three things: the ledger record covers this exact content, the schema is valid, and the seal matches. An eval that was forged, edited or re-stamped (itsstatusorsha256field changed) says nothing to any reader. A machine whose clock is behind cannot reorder evals. A fresh checkout derives and closes goals from the evals it committed. An eval or state cited as journey or baseline evidence also needs its record.How:
eval.completedjoinsLEDGER_EVENTS.evaluatewrites the record withM.record.intact()checks the record, the schema and the seal, andproblems()adds the existing recomputation.evaluated()andlatest()list and order evals by ledger position.eval_recordreads the ledger record.latest_evalisEV.latest.goal closeorders "derived before evaluated" by ledger position, where it used to use the run log.EV.evaluated. Thegoal_metfallback to the run log is gone.evl_/sta_needs itseval.completed/state.assessedrecord.Calls I made:
evaluate check/goal, not in tick, for now. The tick test's synthetic sections use evals that cannot recompute, so tick reads only the record, schema and seal. That remaining gap is a new ROADMAP item, M9.52.goal check) is a new item, M9.53. It came up in the review.Evidence
scripts/test/mission-tick.test.pysection 31 (check 32): each part below failed on the code before it was fixed.EVALUATE("no eval yet"), notRESEARCH, andevaluate checkexits 2 on it.statusorsha256field, makes tick,evaluate checkandgoal optionsall fall back to the older one.created_atsort earlier. Tick andevaluate checkstill pick it.rm -rf .aladdin, tick saysDERIVE_GOAL, andgoal derivesucceeds.rm -rf .aladdin. Tick says close, andgoal closesucceeds.scripts/test/mission-evaluate.test.py: theeval.completedrow is in the ledger with roleevaluator.scripts/test/mission-journeys.test.py: retiring a journey on a fakeevl_as evidence is refused. Before the fix, the old code retired it.make pycheck,scripts/check-tracking.py(86 requirements) andmake test-hostson the first commit.Generated by Claude Code