Skip to content

Restate the run before continuing it - #85

Merged
thisisjun786 merged 17 commits into
devfrom
codex/crw-33-recovery-summary
Sep 20, 2026
Merged

thisisjun786 merged 17 commits into
devfrom
codex/crw-33-recovery-summary

Conversation

@thisisjun786

@thisisjun786 thisisjun786 commented Sep 20, 2026

Copy link
Copy Markdown
Owner

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 idle with no goal. Before this change that
reads as one fact. After it, idle comes from the host, the absent goal from the goal tool, and
whether that absence is normal comes from the start-policy record — goal-free-run accounts for
it, loop makes it a finding, blocked means no child should exist yet. Three registers, one
sentence, and the recovery that skips the third resumes a run that was deliberately not started.

Four additive edits, 241 insertions and no deletions:

  • crw-run/SKILL.md, one new subsection at the end of "Resume and handoff": the five-line
    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 idle host never cancels a pause somebody set.
  • references/initiative-supervision.md, one new subsection under "Recover the supervision":
    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.
  • references/task-packet.md, additive fields only: the host beside each task identifier where
    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.
  • references/operations/scenarios.md, S33/S34/S35 appended: register confusion after a
    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 completed label is now corroborated by the evidence its
own 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, base dev at
0922cdc4d6cdba61fc1a4eb0d31e802acb0f6a5b, 0 behind.

Hosted CI on that exact head, workflow run
35537471560:

Check Result Job
dev-gate success 106150036811
validate success 106148959068
secrets success 106148958898
tests (3.10) success 106148958927
tests (3.13) success 106148958942
packages (3.11) success 106148958777
packages (3.13) success 106148958949
release-gate skipped 106150037439

Local on the same tree: scripts/ci/validate.py 0, scripts/ci/plugin.py 0,
scripts/ci/contracts.py 0 (102/102 fixtures, 46/46 return sites), scripts/ci/secrets.sh 0,
quick_validate.py plugins/crw/skills/crw-run 0 ("Skill is valid!"), git diff --check 0.
git diff origin/dev --stat: 4 files, 241 insertions, 0 deletions.

Review: 14 threads, read to hasNextPage=false, 0 unresolved. Nine produced code changes, two
were 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.md is a byte-identical
prefix 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 dev and still precedes the new subsection
inside "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.md still says goal-free Run is the ordinary supported mode
and 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.md and operations.md. It
belongs 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-status use
remains 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.md says prefixes are not required. No title format is changed here; the
contradiction is returned to the project parent as a proposed Linear change.

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.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 20, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
🔒 Security Review Completed 2026-09-20T18:55:12.128441Z 91012bf PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

devin-ai-integration[bot]

This comment was marked as resolved.

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.
devin-ai-integration[bot]

This comment was marked as resolved.

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.
devin-ai-integration[bot]

This comment was marked as resolved.

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.
devin-ai-integration[bot]

This comment was marked as resolved.

…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.
devin-ai-integration[bot]

This comment was marked as resolved.

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.
devin-ai-integration[bot]

This comment was marked as resolved.

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.
devin-ai-integration[bot]

This comment was marked as resolved.

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.
devin-ai-integration[bot]

This comment was marked as resolved.

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.
@thisisjun786
thisisjun786 merged commit d65d6e5 into dev Sep 20, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant