codex-workflow-v2 2.0.0-beta.10 → 2.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +43 -9
  2. package/dist/src/alpha6/handoff.d.ts +4 -3
  3. package/dist/src/alpha6/handoff.js +58 -3
  4. package/dist/src/alpha6/handoff.js.map +1 -1
  5. package/dist/src/alpha6/mechanical-feasibility.d.ts +7 -0
  6. package/dist/src/alpha6/mechanical-feasibility.js +303 -0
  7. package/dist/src/alpha6/mechanical-feasibility.js.map +1 -0
  8. package/dist/src/alpha6/milestone.d.ts +25 -2
  9. package/dist/src/alpha6/milestone.js +359 -32
  10. package/dist/src/alpha6/milestone.js.map +1 -1
  11. package/dist/src/alpha6/plan-integrity.d.ts +14 -0
  12. package/dist/src/alpha6/plan-integrity.js +127 -0
  13. package/dist/src/alpha6/plan-integrity.js.map +1 -0
  14. package/dist/src/alpha6/remediation.d.ts +2 -1
  15. package/dist/src/alpha6/remediation.js +168 -3
  16. package/dist/src/alpha6/remediation.js.map +1 -1
  17. package/dist/src/cli.js +13 -1
  18. package/dist/src/cli.js.map +1 -1
  19. package/dist/src/contracts.d.ts +69 -1
  20. package/dist/src/git.d.ts +1 -1
  21. package/dist/src/git.js +8 -1
  22. package/dist/src/git.js.map +1 -1
  23. package/dist/src/index.d.ts +1 -0
  24. package/dist/src/index.js +1 -0
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/lifecycle/corrective-replan.js +8 -3
  27. package/dist/src/lifecycle/corrective-replan.js.map +1 -1
  28. package/dist/src/version.d.ts +1 -1
  29. package/dist/src/version.js +1 -1
  30. package/dist/src/workflow.d.ts +5 -0
  31. package/dist/src/workflow.js +399 -90
  32. package/dist/src/workflow.js.map +1 -1
  33. package/docs/autonomy-guardrails.md +21 -0
  34. package/docs/beta11-plan-integrity-recovery-brief.md +38 -0
  35. package/docs/development-flow.md +31 -6
  36. package/docs/lifecycle/state-machine-stabilization.md +1 -1
  37. package/docs/pdf/README.md +24 -0
  38. package/docs/pdf/codex-workflow-v2-architecture-ru.pdf +0 -0
  39. package/docs/pdf/codex-workflow-v2-chat-only-guide-ru.pdf +0 -0
  40. package/docs/pdf/codex-workflow-v2-technical-reference-ru.pdf +0 -0
  41. package/docs/pdf/requirements.txt +1 -0
  42. package/docs/pdf/sources/codex-workflow-v2-architecture-ru.md +234 -0
  43. package/docs/pdf/sources/codex-workflow-v2-chat-only-guide-ru.md +334 -0
  44. package/docs/pdf/sources/codex-workflow-v2-technical-reference-ru.md +413 -0
  45. package/docs/problem-briefs/01-pre-implementation-integrity.md +478 -0
  46. package/docs/problem-briefs/02-minimal-step-integrity.md +411 -0
  47. package/docs/problem-briefs/03-minimal-agent-context-integrity.md +358 -0
  48. package/docs/problem-briefs/04-task-dependency-and-structural-replacement-integrity.md +566 -0
  49. package/docs/problem-briefs/BRIEF-TEMPLATE.md +56 -0
  50. package/docs/problem-briefs/README.md +120 -0
  51. package/docs/problem-briefs/evidence/p01-mechanical-feasibility-corpus.md +90 -0
  52. package/docs/problem-briefs/evidence/signal-v4-pre-m3-replay.md +246 -0
  53. package/docs/release.md +15 -6
  54. package/docs/split-required-recovery.md +19 -26
  55. package/docs/validation-report.md +116 -77
  56. package/package.json +5 -1
  57. package/plugins/codex-workflow-gateway/.codex-plugin/plugin.json +1 -1
  58. package/plugins/codex-workflow-gateway/references/protocol.md +19 -2
  59. package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +17 -3
  60. package/references/state-machine.md +9 -5
  61. package/schemas/authorization-event.schema.json +64 -1
  62. package/schemas/corrective-decision-event.schema.json +48 -3
  63. package/schemas/milestone-scope-change-event.schema.json +6 -1
  64. package/schemas/milestone.schema.json +6 -1
  65. package/schemas/task-handoff-event.schema.json +18 -2
  66. package/scripts/generate-pdf-docs.py +512 -0
  67. package/scripts/run-pdf-docs.mjs +62 -0
@@ -1,85 +1,124 @@
1
- # V2 beta.10 Validation Report
1
+ # V2 beta.11 Validation Report
2
2
 
3
- Release candidate `2.0.0-beta.10` was validated on 2026-08-22 with Node.js 24.17.0.
3
+ Release candidate `2.0.0-beta.11` was validated on 2026-08-24 with Node.js 24.17.0.
4
4
 
5
5
  ## Automated release evidence
6
6
 
7
- - `npm run validate` passed `297/297` sequential tests with no failures, skips,
8
- cancellations, or todos. The exact Signal recovery tests also passed independently through
9
- `npm run test:signal-t04-recovery` (`5/5`).
10
- - `npm run pack:check` passed with an isolated temporary npm cache. The tarball contains 247 files;
11
- package size is 1.0 MB and unpacked size is 3.6 MB.
12
- - `npm run smoke:downstream` packed and installed the actual beta.10 tarball in an empty project,
13
- then passed the packaged CLI handshake. The first sandboxed attempt was network-blocked while
14
- fetching `ajv`; the authorized network retry passed.
7
+ - `npm ci` completed from the committed lockfile with 0 reported vulnerabilities.
8
+ - The final `npm run validate` passed `319/319` sequential tests with no failures, skips,
9
+ cancellations, or todos. The focused Signal recovery suite passed independently (`5/5`).
10
+ - `npm run pack:check` passed. The beta.11 tarball contains 269 files; package size is approximately
11
+ 951 kB and unpacked size is 3.7 MB.
12
+ - `npm run smoke:downstream` packed and installed the actual beta.11 tarball in an empty temporary
13
+ project, then passed the packaged CLI handshake. The first sandboxed attempt was network-blocked
14
+ while fetching `ajv`; the authorized network retry and the final post-`npm ci` run passed.
15
15
  - `npm run plugin:check`, the plugin-creator structural validator, the skill validator,
16
- `npm run release:check`, and `git diff --check` passed. The bundled plugin source cachebuster is
17
- `0.1.0+codex.20260822140058`; the packaged installer produced and read back personal installation
18
- `0.1.0+codex.20260822140239` with the beta.10 recovery instructions present in source and cache.
19
-
20
- ## beta.10 retained-review recovery evidence
21
-
22
- - Recovery still requires one clean local Task branch whose final unregistered HEAD changes exactly
23
- `package.json` and `package-lock.json`, with runtime, manifest, lock, installed package, current
24
- branch, and Task base branch all aligned to beta.10. Running Steps, leases, transactions, Core
25
- operations, product changes in the candidate, and base payload drift fail closed.
26
- - A product commit removed from the current Step by corrective replan is now admissible only when
27
- Core derives it from the globally validated strict-review sidecars: an intact
28
- `pending review-recorded attestation-verified` chain, `passed` decision, exact completion
29
- commit, and verified reviewer isolation. Pending review and a corrupted event-hash chain fail
30
- closed in dedicated regressions.
31
- - The dependency candidate is recorded in `systemCommits`. Historical reviewed product commits are
32
- recorded separately in `dependencyProvenanceRecoveries[].retainedHistoricalCommits`; they are not
33
- relabelled as Workflow system commits. Normal Git-history validation consumes both provenance
34
- classes after recovery.
35
- - The release check pins the exact sanitized Signal fixture: project
36
- `b06d0f18f790f4521a23c770`, Milestone `MS-01M0HVCBC9DM3XQAR82T4550DA`, Task
37
- `TASK-01M0HVK4YDJ3W9X0N72TYNV8WK` revision 26, status
38
- `awaiting_execution_authorization`, planned Step with null current evidence, recorded system
39
- commits `d6cce722…` and `198de88…`, and retained passed-review commit `acdfc803…`.
40
-
41
- ## Isolated exact Signal replay
42
-
43
- - The real Signal Git branch and Workflow state were copied to temporary isolated state plus two
44
- temporary Git worktrees. The replay modelled the actual installed transition
45
- `2.0.0-beta.7 2.0.0-beta.10`; it did not assume beta.9.
46
- - With an exact dependency-only candidate over `acdfc803…`, read-only preflight returned
47
- `eligible=true`, no blockers, Task revision 26, and exactly one retained historical commit:
48
- `acdfc80345d2d4cd9d42af17da246701c42f0969`.
49
- - Fresh `next` advertised only `update dependency-provenance-recover`. Recovery advanced the copied
50
- Task `26 27`, preserved current corrective Plan/Step posture, appended the dependency candidate
51
- to `systemCommits`, and persisted `acdfc803…` under `retainedHistoricalCommits`.
52
- - Sequential post-recovery `status → next` returned the normal actionable route
53
- `task context-refresh`, because manifest/lock changed the derived Knowledge inputs. It did not
54
- return `doctor` or another dependency recovery.
55
- - Temporary worktrees, branches, tarball, and copied Workflow state were deleted. Direct readback
56
- then confirmed the real Signal repository remained clean at `acdfc803…` and the real Task remained
57
- revision 26 with no dependency-provenance recovery record.
58
-
59
- ## Progress, replacement, and chat evidence
60
-
61
- - The full suite retains the read-only Milestone progress projection and exact regression
62
- `T03 cancelled T08 replacement`, including stable membership/Step ordinals.
63
- - Automated chat-registry coverage still proves project-monotonic `#NNN`, all compact title
64
- families, long Cyrillic readback/fallback, multiple review attempts, and atomic allocation.
65
- - The beta.9 live App E2E evidence remains valid for the unchanged title/registry implementation:
66
- Tasks `01a02928-0436-7af2-a1b9-a969226d50d9`,
67
- `01a02928-3d39-7673-8e08-6d4ed0f8d554`, and
68
- `01a02928-58a0-7e03-b487-f8877b7f76d8` exercised Task, Step Review A1, and Step Review A2 with
69
- exact deterministic fallback and readback before archival.
70
-
71
- ## External App-runtime limitation retained
72
-
73
- Plugin CLI installation and cache readback passed. A currently open Codex task can still retain the
74
- skill path injected when that task started; loading the new personal plugin version requires a new
75
- Codex task. This is an App runtime/catalog lifetime boundary, not a package or Workflow-state
76
- failure.
16
+ `npm run docs:pdf:check`, `npm run release:check`, and `git diff --check` passed. The bundled
17
+ gateway cachebuster is `0.1.0+codex.20260824113210`.
18
+
19
+ ## Bounded Plan-integrity recovery evidence
20
+
21
+ - Recovery becomes applicable only after the first ordinary `checks-failed` remediation for a
22
+ guarded failed Step when at least one Plan check is an exact root `npm run[-script] <name>`
23
+ command whose named script is absent from the root `package.json`, and that manifest is outside
24
+ the Step's exact `allowedWrites` boundary.
25
+ - Fresh evidence binds the Task revision, first remediation event ID/hash, current Plan and Step
26
+ definition, root manifest path/hash, Git HEAD, exact check commands, missing script names, and
27
+ current dirty-file set into one canonical conflict hash.
28
+ - An eligible `next` advertises only `task plan-integrity-recover`. The mutation appends one
29
+ schema-validated `replan-required` corrective decision and does not modify the worktree or invent
30
+ a second failed execution attempt.
31
+ - Existing C1 ownership remains authoritative. A claimed Worker must execute the advertised
32
+ recovery and then yield its claim before the existing journaled, Human-gated corrective-replan
33
+ transition can prepare replacement Plan authority.
34
+ - The route fails closed when `package.json` is writable by the Step, no missing-script check
35
+ matches the bounded npm-script grammar, unrelated dirty files exist, bindings drift, or
36
+ persisted evidence is malformed or tampered.
37
+
38
+ ## Regression coverage
39
+
40
+ - Four dedicated beta.11 regressions cover the exact happy path, the in-scope-manifest exclusion,
41
+ dirty-worktree rejection, and sidecar evidence tampering.
42
+ - Existing remediation-mode recovery retains higher navigation priority than the new assessment;
43
+ the legacy malformed-third-attempt regression passes unchanged.
44
+ - The corrective-replan serialized definition SHA moved to
45
+ `c601cc100790a19e6ece2a1d60fb46d1e1d52e6922e6104d84f4b6ffe7ba0225` because the decision event
46
+ schema now admits the bounded ordinal-2 recovery record. Its runtime semantic fingerprint remains
47
+ `bd4e7a0ddfcb6abc0c5eb107775e6aea7e08c4606dda4d945d77af8a4520710d`, and the runtime catalog hash
48
+ remains `fa1d11860d4f07978c3b8e85d1f91cd3d15b17284b05f41e05d462d3bb092aed`.
49
+ - The beta.10 dependency-provenance and exact Signal T04 revision-26 regressions remain green.
50
+ - The read-only Milestone projection still preserves `T03 cancelled T08 replacement`, and the
51
+ monotonic chat registry/title fallback regressions remain green.
52
+
53
+ ## Trusted-harness release replay
54
+
55
+ - A fresh disposable project installed the actual current beta.11 tarball, declared the exact
56
+ `2.0.0-beta.11` dependency, and passed package handshake plus `doctor` with protocol 2 and state
57
+ schema 2. Its Git checkout remained clean.
58
+ - The automatic trusted harness invoked the real packaged CLI and append-only recorded Discovery
59
+ bootstrap, sequential `status → next` checkpoints, Project Knowledge scan/approval, and
60
+ Discovery-to-Task materialization through the resulting `task plan-set` boundary.
61
+ - The semantic lifecycle log validated `24/24` events with no failed or unadvertised mutation and
62
+ no missing checkpoint. Its SHA-256 is
63
+ `5c1d666aa3bc27c4b6687b836a565823a1f567227e93f76b2c3285217fb9a0b7`.
64
+ - The matched raw result log contains 12 successful CLI results, no C1 credential fields, and has
65
+ SHA-256 `a51bae7221fa0ff30bd571ca3800bf8ac44911d7746f68e5e86987b6c357ccf6`.
66
+ The exercised tarball SHA-256 is
67
+ `3b7ed19961ba8394625d3a481fafb196dd80be5b138635a0bd1ce084a47fc06e`.
68
+ - This targeted real-agent replay validates release navigation discipline and package integration;
69
+ it does not claim a second full product Milestone. Deeper P01/P04 lifecycle behavior is covered
70
+ by the deterministic and integration suites listed below.
77
71
 
78
72
  ## Not claimed
79
73
 
80
- - No npm publication, Git tag, push, or release commit was performed by validation.
81
- - No real Signal Workflow mutation, package update, branch change, or manual external-state edit was
82
- performed.
83
- - The isolated replay proves the exact recovery path before publication; a real Signal update must
84
- still install the published beta.10 package and follow fresh project-local `handshake → doctor →
85
- status → next → preflight → advertised recovery`.
74
+ - Validation itself performs no npm publication, Git tag, push, Signal Workflow mutation, or local
75
+ plugin reinstall.
76
+ - The implementation and package gates prove the bounded route. A real blocked project must still
77
+ install the published beta.11 package and follow its fresh project-local `handshake doctor
78
+ status next advertised recovery` navigation.
79
+
80
+ ## Post-beta.11 combined P04-A/P01-A candidate evidence
81
+
82
+ This later evidence was recorded on 2026-08-24 on branch `codex/p04-task-dependencies` and was
83
+ incorporated into the final beta.11 candidate.
84
+
85
+ - P04-A adds the canonical Milestone dependency DAG, atomic initial Plan transaction/recovery,
86
+ dependency-bound handoff/claim/start, legacy fail-closed policy, and unconditional pre-write
87
+ structural replacement shutdown.
88
+ - P01-A adds three versioned read-only analyzers, canonical in-event evidence/hash binding,
89
+ exact pre-start and corrective source selection, and phase-aware freshness before claim/start/run.
90
+ - After final source review added a pre-Git-mutation start race guard, `npm test` passed the exact
91
+ final sequential `319/319` suite with zero failures, skips, cancellations, or todos. The 13/13
92
+ focused P01-A suite, 84/84 affected P01/P04/Task lifecycle selection, and 4/4 beta.11
93
+ late-recovery compatibility tests also passed.
94
+ - `npm run typecheck`, `npm run plugin:check`, `npm run release:check`, schema validation inside
95
+ the full suite, the focused packaged-handshake capability test, and `git diff --check` passed.
96
+ - The changed bundled gateway uses cachebuster `0.1.0+codex.20260824113210`; it was validated but
97
+ not reinstalled.
98
+ - No merge, package install, tag, publication, plugin reinstall, Signal mutation, or brief status
99
+ transition to `implemented` is claimed by this candidate evidence.
100
+
101
+ ## beta.11 PDF release documentation evidence
102
+
103
+ The Russian PDF set was regenerated and revalidated on 2026-08-24 against the combined beta.11
104
+ candidate described above.
105
+
106
+ - The three tracked PDF binaries now have reviewable Markdown authorities under
107
+ `docs/pdf/sources/` and one deterministic ReportLab generator. `npm run docs:pdf:check`
108
+ regenerated all outputs and reported an empty stale set.
109
+ - All 24 pages were rendered and visually inspected: architecture is 6 pages, the delegated
110
+ chat-only guide is 8 pages, and the technical reference is 10 pages. Text extraction found no
111
+ empty pages. The architecture orphan-page defect found during inspection was removed, and the
112
+ complete delegated Discovery prompt no longer splits its readiness checklist across pages.
113
+ - The content documents beta.11 delegated Discovery, the Milestone Autonomy Contract, explicit
114
+ `dependsOnTaskIds`, P04-A runnable routing and structural-replacement stop, P01-A mechanical
115
+ feasibility, C1 credential boundaries, external-sealed review, Plan-integrity recovery, and the
116
+ limited derived-graph role of `codebase-memory-mcp`.
117
+ - `npm run pack:check` passed with an isolated writable npm cache. The 269-file dry-run tarball
118
+ contains all three PDFs, all three Markdown sources, the PDF README and pinned requirement, and
119
+ both generator/check scripts.
120
+ - On the same beta.11 code tree, `npm run validate` passed `319/319`; `npm run typecheck`,
121
+ `npm run plugin:check`, `npm run release:check`, and `git diff --check` also passed.
122
+
123
+ This evidence makes the documentation package-ready for beta.11. The release action remains a
124
+ separate Git/tag operation after all final gates pass on the exact candidate tree.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-workflow-v2",
3
- "version": "2.0.0-beta.10",
3
+ "version": "2.0.0-beta.11",
4
4
  "description": "Requirements-first Codex development workflow with local state and explicit Git ownership.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,6 +34,8 @@
34
34
  "references",
35
35
  "plugins",
36
36
  "docs",
37
+ "scripts/generate-pdf-docs.py",
38
+ "scripts/run-pdf-docs.mjs",
37
39
  "README.md"
38
40
  ],
39
41
  "scripts": {
@@ -46,6 +48,8 @@
46
48
  "pack:check": "npm run build && npm pack --dry-run",
47
49
  "smoke:downstream": "npm run build && node scripts/downstream-smoke.mjs",
48
50
  "plugin:check": "node scripts/validate-plugin.mjs",
51
+ "docs:pdf": "node scripts/run-pdf-docs.mjs",
52
+ "docs:pdf:check": "node scripts/run-pdf-docs.mjs --check",
49
53
  "release:check": "node scripts/release-check.mjs",
50
54
  "publish:release": "node scripts/publish.mjs"
51
55
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-workflow-gateway",
3
- "version": "0.1.0+codex.20260822140058",
3
+ "version": "0.1.0+codex.20260824113210",
4
4
  "description": "Thin personal Codex gateway for exact project-local Codex Workflow V2 packages and codebase-memory-mcp.",
5
5
  "author": {
6
6
  "name": "Codex Workflow Maintainers"
@@ -1,6 +1,12 @@
1
1
  # Gateway Protocol V2
2
2
 
3
- ## beta.10 coordinator projections, retained review provenance, and chat registry
3
+ ## beta.11 coordinator projections, retained review provenance, chat registry, and Plan-integrity recovery
4
+
5
+ - When fresh `next` advertises `task plan-integrity-recover`, consume its exact Task revision,
6
+ Step, actor, and writer-token contract. This route is valid only for the Core-derived
7
+ first-failure missing-root-npm-script evidence and must be followed by fresh `status -> next`.
8
+ It records a replan posture without changing Plan or product files; corrective yield and the
9
+ existing state-bound corrective-replan Human gate remain mandatory.
4
10
 
5
11
  - `update dependency-provenance-preflight --id <TASK-ID>` is read-only. The matching
6
12
  `update dependency-provenance-recover --id <TASK-ID> --expected-revision <N> --actor <ACTOR>
@@ -38,7 +44,7 @@ Current capability set:
38
44
  - `delegated-approval-v1`
39
45
  - `task-knowledge-rebind-v1`
40
46
  - `task-context-refresh-v1`
41
- - `terminal-task-replacement-transaction-v1`
47
+ - `structural-task-replacement-disabled-v1`
42
48
  - `project-composite-transaction-journal-v1`
43
49
  - `corrective-plan-audit-v1`
44
50
  - `safe-update-preflight-v1`
@@ -52,7 +58,10 @@ Current capability set:
52
58
  - `step-remediation-circuit-breaker-sidecar-v1`
53
59
  - `milestone-scope-change-sidecar-v1`
54
60
  - `milestone-membership-integrity-v1`
61
+ - `milestone-task-dependency-dag-v1`
62
+ - `milestone-initial-plan-transaction-v1`
55
63
  - `task-c1-handoff-sidecar-v1`
64
+ - `task-mechanical-feasibility-v1`
56
65
  - `semantic-plan-risk-audit-v2`
57
66
  - `guarded-remediation-hard-stop-v1`
58
67
  - `milestone-reverse-membership-integrity-v1`
@@ -62,10 +71,18 @@ Current capability set:
62
71
  - `milestone-initial-assembly-v1`
63
72
  - `milestone-initial-assembly-navigation-v2`
64
73
  - `milestone-autonomy-contract-v1`
74
+ - `milestone-autonomy-content-refresh-v1`
65
75
  - `milestone-autonomous-membership-evolution-v1`
66
76
  - `task-c1-derived-worker-actor-v1`
67
77
  - `guarded-corrective-auditor-routing-v1`
78
+ - `corrective-decision-context-recovery-v1`
79
+ - `remediation-mode-recovery-v1`
68
80
  - `plan-proof-obligations-v1`
81
+ - `bounded-plan-integrity-recovery-v1`
82
+ - `corrective-yield-journal-v1`
83
+ - `corrective-replan-journal-v1`
84
+ - `corrective-replan-human-gate-v1`
85
+ - `corrective-replan-protocol-v2`
69
86
 
70
87
  Protocol `1` and schema `2` remain valid only because alpha.7 is additive. The gateway must
71
88
  not claim compatibility if canonical entity shapes or non-additive command semantics change.
@@ -50,6 +50,17 @@ pending/corrupt transaction. After success run sequential `status` then `next` a
50
50
  returned lifecycle action; Knowledge reconciliation or atomic Task context refresh may legitimately
51
51
  be next because the dependency files changed.
52
52
 
53
+ The beta.11 bounded Plan-integrity route prevents a known impossible check from consuming a second
54
+ ordinary remediation attempt. Use `task plan-integrity-recover` only when fresh `next` advertises
55
+ it for the exact failed Task/Step/revision. Require `state=eligible`, no blockers, one first
56
+ `checks-failed` remediation, an exact missing root npm script, `package.json` outside the Step's
57
+ `allowedWrites`, and a dirty-file set confined to that Step. Pass the exact returned actor and the
58
+ active writer token when the C1 contract requires it. The recovery records only a bound early
59
+ `replan-required` decision: it does not edit the Plan or worktree. Then follow fresh `next` through
60
+ `task corrective-yield` and the existing Human-confirmed corrective-replan flow. Never repeat
61
+ `task run` merely to manufacture the second failure, and never invoke this recovery for a generic
62
+ test failure, a writable manifest, or unconfined changes.
63
+
53
64
  If any step fails, report the concrete diagnostic. Do not load workflow
54
65
  semantics from this skill.
55
66
 
@@ -85,9 +96,12 @@ Autonomy Grant. Never infer eligibility from the Plan yourself; if Core returns
85
96
  `contextRefreshBlocked.unsafeDifferences`, use the ordinary visible Knowledge Map flow.
86
97
 
87
98
  When `next` reports terminal `split-required`, follow `docs/split-required-recovery.md` from the
88
- installed package. The only valid continuation is the exact `task replacement-materialize`
89
- transition (or creation of its one ready Discovery when requested). Never rebind, refresh, replan,
90
- authorize, or resume the historical Task, and never emulate the membership changes manually.
99
+ installed package. P04-A returns `doctor` with blocked action `task replacement-materialize`,
100
+ diagnostic `STRUCTURAL_REPLACEMENT_REQUIRED`, and
101
+ `replacementGate.structuralReplacementAvailable=false`. Stop without invoking the retained
102
+ command shape or consuming a replacement Discovery. Never rebind, refresh, replan, authorize,
103
+ resume, cancel, or manually replace the historical Task. Continue only after a later P04-B/P05
104
+ package explicitly advertises a topology-preserving replacement capability.
91
105
 
92
106
  When `next` returns `milestone initial-assembly`, execution is unavailable. Follow only the
93
107
  advertised `linked-task-assembly.commands` (`discovery start` and `discovery materialize`) until all
@@ -78,20 +78,24 @@ the grant's Milestone. Every added source must match the Plan, and removals, can
78
78
  wildcard or directory targets, existing source category/scope/authority changes, gaps, and
79
79
  conflicts fail closed before any state write. `next` exposes the composite option only when the
80
80
  full predicate passes and otherwise reports concrete unsafe differences. Both update paths journal
81
- `state.json`, `plan.json`, and `scope-change-events.jsonl` together. Membership integrity is validated
82
- before scheduling, Task start, Milestone validation, scope change, and repository `next`.
81
+ `state.json`, `plan.json`, and `scope-change-events.jsonl` together. Initial Plan publication uses
82
+ the same recovery journal for `state.json` and `plan.json`. Membership and dependency integrity is
83
+ validated before scheduling, handoff, claim (before lease acquisition), Task start, Milestone
84
+ validation, scope change, and repository `next`.
83
85
  The same guard scans in reverse and blocks every live Task whose `milestoneId` is absent from
84
86
  the Milestone's required/waived/cancelled classification.
85
87
 
86
88
  `C1` coordination is machine-bound but local: `task handoff-prepare` returns a one-time claim
87
89
  token and prompt bound to a stable handoff ID, revision, context hashes, Milestone positions,
88
- delegate/grant, expected next action, and expiry. `task claim` validates those bindings and
90
+ Milestone revision, membership revision, Milestone Plan hash, delegate/grant, expected next action,
91
+ and expiry. `task claim` validates those bindings and
89
92
  activates claimant-only mutation; terminal `task handback-create` returns result, evidence,
90
93
  review, knowledge, limitation, and recommended-next bindings. Milestone Tasks must be claimed
91
94
  before start. If no target is supplied, Core derives `agent:worker:<task-id>`. No part of this
92
95
  contract requires or proves a physically separate Codex thread.
93
96
 
94
- Repository-level scheduling respects current Milestone membership. An unstarted linked Task
95
- is eligible only for an `active` Milestone with `required` disposition. Historical unstarted
97
+ Repository-level scheduling respects current Milestone membership and its canonical dependency
98
+ DAG. A linked Task is eligible only for an `active` Milestone with `required` disposition after
99
+ all required predecessors are `merged`. Historical unstarted
96
100
  Tasks from `waived`, `cancelled`, accepted, or cancelled Milestone paths cannot shadow the
97
101
  Milestone/repository transition returned by `next`.
@@ -20,7 +20,8 @@
20
20
  "headCommit": { "$ref": "#/$defs/nullableHash" },
21
21
  "reason": { "type": "string" },
22
22
  "authorizationMode": { "enum": ["human", "delegated"] },
23
- "delegation": { "$ref": "#/$defs/delegation" }
23
+ "delegation": { "$ref": "#/$defs/delegation" },
24
+ "mechanicalFeasibility": { "$ref": "#/$defs/mechanicalFeasibility" }
24
25
  },
25
26
  "allOf": [
26
27
  {
@@ -50,6 +51,68 @@
50
51
  ]
51
52
  }
52
53
  }
54
+ },
55
+ "mechanicalFeasibility": {
56
+ "type": "object",
57
+ "additionalProperties": false,
58
+ "required": [
59
+ "schemaVersion", "taskId", "evaluatedTaskRevision", "briefHash", "planHash",
60
+ "sourceKind", "sourceBranch", "evaluatedHead", "baseCommit", "analyzerSetHash",
61
+ "analyzerInputHash", "analyzers", "findings", "decision"
62
+ ],
63
+ "properties": {
64
+ "schemaVersion": { "const": 1 },
65
+ "taskId": { "type": "string", "pattern": "^TASK-[0-9A-HJKMNP-TV-Z]{26}$" },
66
+ "evaluatedTaskRevision": { "type": "integer", "minimum": 1 },
67
+ "briefHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
68
+ "planHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
69
+ "sourceKind": { "enum": ["pre-start-base", "corrective-task-workspace"] },
70
+ "sourceBranch": { "type": "string", "minLength": 1 },
71
+ "evaluatedHead": { "type": "string", "pattern": "^[a-f0-9]{40,64}$" },
72
+ "baseCommit": { "$ref": "#/$defs/nullableHash" },
73
+ "analyzerSetHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
74
+ "analyzerInputHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
75
+ "analyzers": {
76
+ "type": "array",
77
+ "minItems": 3,
78
+ "maxItems": 3,
79
+ "items": { "$ref": "#/$defs/mechanicalAnalyzer" }
80
+ },
81
+ "findings": {
82
+ "type": "array",
83
+ "items": { "$ref": "#/$defs/mechanicalFinding" }
84
+ },
85
+ "decision": { "enum": ["clear", "blocked"] }
86
+ }
87
+ },
88
+ "mechanicalAnalyzer": {
89
+ "type": "object",
90
+ "additionalProperties": false,
91
+ "required": ["analyzerId", "analyzerVersion"],
92
+ "properties": {
93
+ "analyzerId": {
94
+ "enum": ["wf2.root-npm-script", "wf2.exact-output-path", "wf2.exact-predecessor-path"]
95
+ },
96
+ "analyzerVersion": { "const": 1 }
97
+ }
98
+ },
99
+ "mechanicalFinding": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": [
103
+ "analyzerId", "analyzerVersion", "result", "stepId", "subject", "evidence", "reasonCode"
104
+ ],
105
+ "properties": {
106
+ "analyzerId": {
107
+ "enum": ["wf2.root-npm-script", "wf2.exact-output-path", "wf2.exact-predecessor-path"]
108
+ },
109
+ "analyzerVersion": { "const": 1 },
110
+ "result": { "enum": ["pass", "blocked", "unverified"] },
111
+ "stepId": { "type": "string", "pattern": "^STEP-[0-9]{3}(?:-[A-Z0-9-]+)?$" },
112
+ "subject": { "type": "string" },
113
+ "evidence": { "type": "string", "minLength": 1 },
114
+ "reasonCode": { "type": "string", "pattern": "^[A-Z0-9_]+$" }
115
+ }
53
116
  }
54
117
  }
55
118
  }
@@ -22,7 +22,7 @@
22
22
  "eventId": { "type": "string", "minLength": 1 },
23
23
  "taskId": { "$ref": "#/$defs/taskId" },
24
24
  "stepId": { "$ref": "#/$defs/stepId" },
25
- "triggeringAttemptCount": { "type": "integer", "minimum": 3 },
25
+ "triggeringAttemptCount": { "type": "integer", "minimum": 2 },
26
26
  "decision": {
27
27
  "enum": ["continue-fix", "replan-required", "split-required", "stop-escalate"]
28
28
  },
@@ -38,18 +38,63 @@
38
38
  "items": { "type": "string", "minLength": 1 }
39
39
  },
40
40
  "planHash": { "$ref": "#/$defs/hash64" },
41
+ "recoveryBasis": { "const": "plan-integrity" },
42
+ "planIntegrityEvidence": { "$ref": "#/$defs/planIntegrityEvidence" },
41
43
  "previousEventHash": { "$ref": "#/$defs/nullableHash64" },
42
44
  "recordedAt": { "type": "string", "format": "date-time" },
43
45
  "eventHash": { "$ref": "#/$defs/hash64" }
44
46
  },
45
- "anyOf": [
47
+ "allOf": [
48
+ {
49
+ "if": { "properties": { "triggeringAttemptCount": { "const": 2 } }, "required": ["triggeringAttemptCount"] },
50
+ "then": {
51
+ "required": ["recoveryBasis", "planIntegrityEvidence"],
52
+ "properties": { "decision": { "const": "replan-required" } }
53
+ },
54
+ "else": {
55
+ "not": { "anyOf": [{ "required": ["recoveryBasis"] }, { "required": ["planIntegrityEvidence"] }] }
56
+ }
57
+ },
58
+ {
59
+ "anyOf": [
46
60
  { "properties": { "coveredFindingIds": { "minItems": 1 } } },
47
61
  { "properties": { "coveredEventIds": { "minItems": 1 } } }
62
+ ]
63
+ }
48
64
  ],
49
65
  "$defs": {
50
66
  "taskId": { "type": "string", "pattern": "^TASK-[0-9A-HJKMNP-TV-Z]{26}$" },
51
67
  "stepId": { "type": "string", "pattern": "^STEP-[0-9]{3}(?:-[A-Z0-9-]+)?$" },
52
68
  "hash64": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
53
- "nullableHash64": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" }
69
+ "nullableHash64": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
70
+ "gitOid": { "type": "string", "pattern": "^[a-f0-9]{40,64}$" },
71
+ "stringList": {
72
+ "type": "array",
73
+ "uniqueItems": true,
74
+ "items": { "type": "string", "minLength": 1 }
75
+ },
76
+ "planIntegrityEvidence": {
77
+ "type": "object",
78
+ "additionalProperties": false,
79
+ "required": [
80
+ "kind", "taskRevision", "remediationEventId", "remediationEventHash",
81
+ "manifestPath", "manifestHash", "gitHead", "stepDefinitionHash",
82
+ "missingScripts", "checkCommands", "changedFiles", "conflictHash"
83
+ ],
84
+ "properties": {
85
+ "kind": { "const": "missing-npm-script-outside-allowed-writes" },
86
+ "taskRevision": { "type": "integer", "minimum": 1 },
87
+ "remediationEventId": { "type": "string", "minLength": 1 },
88
+ "remediationEventHash": { "$ref": "#/$defs/hash64" },
89
+ "manifestPath": { "const": "package.json" },
90
+ "manifestHash": { "$ref": "#/$defs/nullableHash64" },
91
+ "gitHead": { "$ref": "#/$defs/gitOid" },
92
+ "stepDefinitionHash": { "$ref": "#/$defs/hash64" },
93
+ "missingScripts": { "$ref": "#/$defs/stringList", "minItems": 1 },
94
+ "checkCommands": { "$ref": "#/$defs/stringList", "minItems": 1 },
95
+ "changedFiles": { "$ref": "#/$defs/stringList" },
96
+ "conflictHash": { "$ref": "#/$defs/hash64" }
97
+ }
98
+ }
54
99
  }
55
100
  }
@@ -50,7 +50,12 @@
50
50
  "properties": {
51
51
  "taskId": { "$ref": "#/$defs/taskId" },
52
52
  "disposition": { "enum": ["required", "waived", "cancelled"] },
53
- "reason": { "type": "string" }
53
+ "reason": { "type": "string" },
54
+ "dependsOnTaskIds": {
55
+ "type": "array",
56
+ "uniqueItems": true,
57
+ "items": { "$ref": "#/$defs/taskId" }
58
+ }
54
59
  }
55
60
  },
56
61
  "scopeSnapshot": {
@@ -51,7 +51,12 @@
51
51
  "properties": {
52
52
  "taskId": { "$ref": "#/$defs/taskId" },
53
53
  "disposition": { "enum": ["required", "waived", "cancelled"] },
54
- "reason": { "type": "string" }
54
+ "reason": { "type": "string" },
55
+ "dependsOnTaskIds": {
56
+ "type": "array",
57
+ "uniqueItems": true,
58
+ "items": { "$ref": "#/$defs/taskId" }
59
+ }
55
60
  }
56
61
  }
57
62
  }
@@ -45,6 +45,12 @@
45
45
  "planHash": { "$ref": "#/$defs/nullableHash64" },
46
46
  "knowledgeMapRevision": { "type": ["integer", "null"], "minimum": 1 },
47
47
  "knowledgeMapHash": { "$ref": "#/$defs/nullableHash64" },
48
+ "dependencyBinding": {
49
+ "oneOf": [
50
+ { "type": "null" },
51
+ { "$ref": "#/$defs/dependencyBinding" }
52
+ ]
53
+ },
48
54
  "expectedNext": { "type": "string", "minLength": 1 },
49
55
  "delegate": { "type": "string", "minLength": 1 },
50
56
  "grantId": { "type": ["string", "null"], "minLength": 1 },
@@ -94,8 +100,18 @@
94
100
  "$defs": {
95
101
  "taskId": { "type": "string", "pattern": "^TASK-[0-9A-HJKMNP-TV-Z]{26}$" },
96
102
  "hash64": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
97
- "nullableHash64": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" }
98
- ,"handback": {
103
+ "nullableHash64": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
104
+ "dependencyBinding": {
105
+ "type": "object",
106
+ "additionalProperties": false,
107
+ "required": ["milestoneRevision", "membershipRevision", "milestonePlanHash"],
108
+ "properties": {
109
+ "milestoneRevision": { "type": "integer", "minimum": 1 },
110
+ "membershipRevision": { "type": "integer", "minimum": 1 },
111
+ "milestonePlanHash": { "$ref": "#/$defs/hash64" }
112
+ }
113
+ },
114
+ "handback": {
99
115
  "type": "object",
100
116
  "additionalProperties": false,
101
117
  "required": ["status", "mergedCommit", "planHash", "resultHash", "evidenceHash", "reviewAttestationHash", "knowledgeMapRevision", "knowledgeMapHash", "limitations", "recommendedNext"],