Restate the run before continuing it - #85
Merged
Merged
Conversation
A management task that restarts has to say where the run actually is before it does anything else, and the words it reads back to do that come from five different registers that look like one vocabulary.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Precedence belongs inside a register. An idle host says no turn is running, which is not an answer to whether somebody paused the task, so a pause, a read-only scope and a no-contact instruction hold until their own owner records a transition. A missing start-policy record is unknown rather than proof none was written.
A status is a claim; the merged revision and the verified outcome are the evidence. A completed label with the landing missing leaves the project in the active set, and the gap is what gets reported. The midpoint-check citation is narrowed to the shape of a status reading so it cannot be read as owning recovery.
Implementation work lands a pull request in its intended target; accepted non-PR work completes on its agreed observable result and has no pull request by design. Requiring a landing from both left finished non-PR projects in the active set.
…summary # Conflicts: # plugins/crw/skills/crw-run/SKILL.md
Where the accepted criteria named installation or live verification, those survive the merge. Implementation work is corroborated by the landing together with every accepted criterion still outstanding beside it.
One landed pull request finishes its issue, not its project: the project is finished when every obligation in its agreed scope is delivered, integrated and reconciled. A supervisor that recovers its projects without the initiative they were approved under has lost the boundary.
Per-subject corroboration is the parent-s work on its own project. A restarted supervisor names each project-s parent and whether it reports the project complete, and tests that outcome against the initiative-s finish condition.
A restart composes its restatement from the coordination record, so a field the record never held is one the next sender has to omit or guess.
Some task interfaces return no host, and the launch record already keeps it only when supplied. Requiring one everywhere made the record unsatisfiable; unknown is the answer, and the next sender names the field unestablished rather than guessing it.
The host requirement applied to every identifier, which an issue, a project and a pull request do not have, and it did not permit the unestablished case the same bullet list allows two lines later.
Five review rounds added a fourth case to a paragraph that still announced three, and left a justification sentence inside a list whose other items are bare facts. The corroboration test and the four states it distinguishes are now separate paragraphs.
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.
Change
A management task that restarts cannot say where its run actually is. It has the coordination
record, but nothing tells it what to read back, in what order, or how to keep three different
time-claims apart — so an old "paused" note outlives the state that replaced it, and the words it
reads back to describe a parent look like one vocabulary when they come from five different places.
Concretely: a supervisor restarts and finds a parent
idlewith no goal. Before this change thatreads as one fact. After it,
idlecomes from the host, the absent goal from the goal tool, andwhether that absence is normal comes from the start-policy record —
goal-free-runaccounts forit,
loopmakes it a finding,blockedmeans no child should exist yet. Three registers, onesentence, and the recovery that skips the third resumes a run that was deliberately not started.
Four additive edits, 241 insertions and no deletions:
restatement (fixed binding including the initiative where this task supervises one, current
temporary target, approved scope with its recorded start policy, current owner of each live
child/issue/PR, the one next action), and the precedence rule that keeps a durable decision
safe from a fresh reading — a later observation wins only over an earlier observation of the
same thing in the same register, so an
idlehost never cancels a pause somebody set.the five registers behind active / idle / notLoaded / systemError / blocked / paused / cancelled
/ archived / completed, the rule that every reading is labelled with its register before
anything acts on it, and the level boundary that keeps a supervisor reading its parents by
result instead of re-verifying their issues.
it was established, observation time per restated fact and per state line, the observation each
setting was read at, the current temporary target beside the fixed binding, and the explicit
handoff record when management moves.
restart, a record that lost the label marking a target temporary, and six look-alike records
told apart in one pass rather than collapsed into "stale record".
A recurring theme in review was worth the rounds: every draft of the completion test let a claim
stand in for the evidence behind it. A
completedlabel is now corroborated by the evidence itsown delivery shape requires — for implementation work the pull request landed in its intended
target plus every accepted criterion still outstanding, installation and live verification
included; for accepted non-PR work the agreed observable result — and that test runs per subject,
so one landed pull request finishes its issue and not its project.
What this deliberately does not do is restate rules that already have owners. The report form stays
with crw-status, the idle action matrix with its midpoint check, identity and routing with OPS-7.1
and OPS-7.2, busy/paused/cancelled/archived with OPS-8.2, the goal default with start-policy.md,
target resolution and parent binding with integrations.md, and finished projects with C9. It also
changes no title or pin format: CRW-137 owns the proposed parent-prefix change and integrations.md
owns the rule in force, so only the ownership half is stated here — a title never identifies an
owner, and a title change never moves a binding.
Implements CRW-33 (고정 관리 작업의 복구 요약과 임시 프로젝트 전환 검증).
Verification
Candidate revision: head
b19a05d3c6817eb9439a19b252cccb1b8a04f826, basedevat0922cdc4d6cdba61fc1a4eb0d31e802acb0f6a5b, 0 behind.Hosted CI on that exact head, workflow run
35537471560:
Local on the same tree:
scripts/ci/validate.py0,scripts/ci/plugin.py0,scripts/ci/contracts.py0 (102/102 fixtures, 46/46 return sites),scripts/ci/secrets.sh0,quick_validate.py plugins/crw/skills/crw-run0 ("Skill is valid!"),git diff --check0.git diff origin/dev --stat: 4 files, 241 insertions, 0 deletions.Review: 14 threads, read to
hasNextPage=false, 0 unresolved. Nine produced code changes, twowere answered in-thread as already covered, one was routed as the out-of-scope residual below,
and the rest were corrections folded in. Instruction review rather than text matching: five
independent review rounds against the drafted wording before anything was written, plus an
independent merge-readiness verification of this head that re-derived the diff, the check
identities, the thread pagination and the untouched-neighbour hashes.
Additive-only is verified rather than asserted: the pre-existing
scenarios.mdis a byte-identicalprefix of the new one, S25's hash is unchanged, and CRW-67's "Account for the resources this run
leaves behind" is byte-identical to its version on
devand still precedes the new subsectioninside "Resume and handoff".
Not verified here: installation or live behaviour. These are instruction changes, so there is no
service to activate; whether an installation has picked them up is a separate observation nobody
has made.
Risks and remaining work
crw-status/references/midpoint-check.mdstill says goal-free Run is the ordinary supported modeand that CRW-118's start-policy.md "is not on dev". start-policy.md landed at ed2ab1c, so that
passage is stale and contradicts
crw-run/SKILL.md,start-policy.mdandoperations.md. Itbelongs to another skill's surface and is not edited here. Nothing in this PR relies on it: the
goal default is taken from start-policy.md directly, and the midpoint check is cited only for the
shape of a status reading and explicitly "not for the goal default". Direct
crw-statususeremains exposed until that passage is corrected under its own issue.
CRW-33's own text contains a parent-title contradiction — its 2026-09-21 section wants a
product-family prefix via CRW-137 while its checkbox (d) forbids a forced prefix, and landed
integrations.mdsays prefixes are not required. No title format is changed here; thecontradiction is returned to the project parent as a proposed Linear change.