codex-workflow-v2 2.0.0-beta.13.8 → 2.0.0-beta.14

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 (281) hide show
  1. package/README.md +27 -388
  2. package/dist/reviewer-runtime-build.json +96 -32
  3. package/dist/src/alpha6/adoption.d.ts +2 -0
  4. package/dist/src/alpha6/adoption.js +22 -0
  5. package/dist/src/alpha6/adoption.js.map +1 -1
  6. package/dist/src/alpha6/captured-check-evidence.d.ts +51 -0
  7. package/dist/src/alpha6/captured-check-evidence.js +152 -0
  8. package/dist/src/alpha6/captured-check-evidence.js.map +1 -0
  9. package/dist/src/alpha6/component-owner.d.ts +15 -1
  10. package/dist/src/alpha6/component-owner.js +44 -2
  11. package/dist/src/alpha6/component-owner.js.map +1 -1
  12. package/dist/src/alpha6/corrective-decision-boundary.d.ts +4 -0
  13. package/dist/src/alpha6/corrective-decision-boundary.js +47 -0
  14. package/dist/src/alpha6/corrective-decision-boundary.js.map +1 -0
  15. package/dist/src/alpha6/downstream-proof.d.ts +1 -25
  16. package/dist/src/alpha6/downstream-proof.js +0 -171
  17. package/dist/src/alpha6/downstream-proof.js.map +1 -1
  18. package/dist/src/alpha6/failed-step-planning-recovery.d.ts +10 -0
  19. package/dist/src/alpha6/failed-step-planning-recovery.js +93 -0
  20. package/dist/src/alpha6/failed-step-planning-recovery.js.map +1 -0
  21. package/dist/src/alpha6/literal-test-invocation.d.ts +2 -0
  22. package/dist/src/alpha6/literal-test-invocation.js +106 -0
  23. package/dist/src/alpha6/literal-test-invocation.js.map +1 -0
  24. package/dist/src/alpha6/milestone.d.ts +2 -0
  25. package/dist/src/alpha6/milestone.js +10 -1
  26. package/dist/src/alpha6/milestone.js.map +1 -1
  27. package/dist/src/alpha6/navigation-dirty-carryover.d.ts +11 -0
  28. package/dist/src/alpha6/navigation-dirty-carryover.js +130 -0
  29. package/dist/src/alpha6/navigation-dirty-carryover.js.map +1 -0
  30. package/dist/src/alpha6/plan-integrity.js +7 -5
  31. package/dist/src/alpha6/plan-integrity.js.map +1 -1
  32. package/dist/src/alpha6/plan-risk.d.ts +2 -0
  33. package/dist/src/alpha6/plan-risk.js +10 -3
  34. package/dist/src/alpha6/plan-risk.js.map +1 -1
  35. package/dist/src/alpha6/remediation.d.ts +6 -21
  36. package/dist/src/alpha6/remediation.js +161 -476
  37. package/dist/src/alpha6/remediation.js.map +1 -1
  38. package/dist/src/alpha6/root-cause-replan-carryover.d.ts +4 -1
  39. package/dist/src/alpha6/root-cause-replan-carryover.js +29 -5
  40. package/dist/src/alpha6/root-cause-replan-carryover.js.map +1 -1
  41. package/dist/src/beta1/project-transaction.d.ts +3 -1
  42. package/dist/src/beta1/project-transaction.js +6 -2
  43. package/dist/src/beta1/project-transaction.js.map +1 -1
  44. package/dist/src/checks/runner.d.ts +26 -0
  45. package/dist/src/checks/runner.js +223 -0
  46. package/dist/src/checks/runner.js.map +1 -0
  47. package/dist/src/checks/task-sync.d.ts +10 -0
  48. package/dist/src/checks/task-sync.js +41 -0
  49. package/dist/src/checks/task-sync.js.map +1 -0
  50. package/dist/src/checks/worker.d.ts +1 -0
  51. package/dist/src/checks/worker.js +154 -0
  52. package/dist/src/checks/worker.js.map +1 -0
  53. package/dist/src/cli-actions.d.ts +2 -2
  54. package/dist/src/cli-actions.js +3 -15
  55. package/dist/src/cli-actions.js.map +1 -1
  56. package/dist/src/cli.js +14 -98
  57. package/dist/src/cli.js.map +1 -1
  58. package/dist/src/contracts.d.ts +35 -32
  59. package/dist/src/dependency-provenance.d.ts +2 -2
  60. package/dist/src/dependency-provenance.js +12 -69
  61. package/dist/src/dependency-provenance.js.map +1 -1
  62. package/dist/src/domain/base-sync-conflict.d.ts +13 -0
  63. package/dist/src/domain/base-sync-conflict.js +32 -0
  64. package/dist/src/domain/base-sync-conflict.js.map +1 -0
  65. package/dist/src/domain/step-start-admission.d.ts +4 -0
  66. package/dist/src/domain/step-start-admission.js +9 -0
  67. package/dist/src/domain/step-start-admission.js.map +1 -0
  68. package/dist/src/domain/virgin-registration.d.ts +3 -0
  69. package/dist/src/domain/virgin-registration.js +65 -0
  70. package/dist/src/domain/virgin-registration.js.map +1 -0
  71. package/dist/src/errors.d.ts +1 -1
  72. package/dist/src/errors.js.map +1 -1
  73. package/dist/src/gateway-handshake.js +0 -8
  74. package/dist/src/gateway-handshake.js.map +1 -1
  75. package/dist/src/git.d.ts +3 -1
  76. package/dist/src/git.js +41 -14
  77. package/dist/src/git.js.map +1 -1
  78. package/dist/src/graph.js +25 -3
  79. package/dist/src/graph.js.map +1 -1
  80. package/dist/src/index.d.ts +1 -0
  81. package/dist/src/lifecycle/corrective-replan.js +3 -3
  82. package/dist/src/lifecycle/corrective-replan.js.map +1 -1
  83. package/dist/src/navigation-actions.d.ts +9 -0
  84. package/dist/src/navigation-actions.js +72 -0
  85. package/dist/src/navigation-actions.js.map +1 -0
  86. package/dist/src/navigation-update-artifact.d.ts +5 -0
  87. package/dist/src/navigation-update-artifact.js +227 -0
  88. package/dist/src/navigation-update-artifact.js.map +1 -0
  89. package/dist/src/navigation-update.d.ts +39 -0
  90. package/dist/src/navigation-update.js +82 -0
  91. package/dist/src/navigation-update.js.map +1 -0
  92. package/dist/src/observation.js +52 -29
  93. package/dist/src/observation.js.map +1 -1
  94. package/dist/src/observed-routes.js +5 -6
  95. package/dist/src/observed-routes.js.map +1 -1
  96. package/dist/src/pending-review-update.d.ts +0 -13
  97. package/dist/src/pending-review-update.js +1 -6
  98. package/dist/src/pending-review-update.js.map +1 -1
  99. package/dist/src/reviewer.d.ts +1 -1
  100. package/dist/src/reviewer.js +20 -17
  101. package/dist/src/reviewer.js.map +1 -1
  102. package/dist/src/runtime.d.ts +3 -0
  103. package/dist/src/runtime.js +6 -0
  104. package/dist/src/runtime.js.map +1 -0
  105. package/dist/src/state/corrective-replan-executor.d.ts +10 -0
  106. package/dist/src/state/corrective-replan-executor.js +37 -1
  107. package/dist/src/state/corrective-replan-executor.js.map +1 -1
  108. package/dist/src/state/corrective-replan-public-schema.js +15 -2
  109. package/dist/src/state/corrective-replan-public-schema.js.map +1 -1
  110. package/dist/src/state/corrective-replan-public.js +6 -5
  111. package/dist/src/state/corrective-replan-public.js.map +1 -1
  112. package/dist/src/state/corrective-replan-transaction.d.ts +1 -0
  113. package/dist/src/state/corrective-replan-transaction.js +12 -11
  114. package/dist/src/state/corrective-replan-transaction.js.map +1 -1
  115. package/dist/src/state/corrective-yield-executor.js +2 -2
  116. package/dist/src/state/corrective-yield-executor.js.map +1 -1
  117. package/dist/src/state/corrective-yield-transaction.d.ts +1 -0
  118. package/dist/src/state/corrective-yield-transaction.js +11 -10
  119. package/dist/src/state/corrective-yield-transaction.js.map +1 -1
  120. package/dist/src/state/lock.d.ts +4 -0
  121. package/dist/src/state/lock.js +21 -0
  122. package/dist/src/state/lock.js.map +1 -1
  123. package/dist/src/version.d.ts +1 -1
  124. package/dist/src/version.js +1 -1
  125. package/dist/src/version.js.map +1 -1
  126. package/dist/src/workflow-blocker-route.d.ts +8 -0
  127. package/dist/src/workflow-blocker-route.js +106 -0
  128. package/dist/src/workflow-blocker-route.js.map +1 -0
  129. package/dist/src/workflow.d.ts +48 -63
  130. package/dist/src/workflow.js +698 -1470
  131. package/dist/src/workflow.js.map +1 -1
  132. package/docs/autonomy-guardrails.md +26 -304
  133. package/docs/decisions.md +14 -112
  134. package/docs/development-flow.md +35 -238
  135. package/docs/project-memory.md +31 -50
  136. package/docs/release-app-evidence.md +190 -0
  137. package/docs/release.md +95 -363
  138. package/docs/updating-existing-project.md +19 -717
  139. package/package.json +11 -13
  140. package/plugins/codex-workflow-gateway/.codex-plugin/plugin.json +2 -2
  141. package/plugins/codex-workflow-gateway/references/chat-dispatch.md +73 -197
  142. package/plugins/codex-workflow-gateway/references/codebase-memory-routing.md +57 -0
  143. package/plugins/codex-workflow-gateway/references/protocol.md +42 -445
  144. package/plugins/codex-workflow-gateway/scripts/chat-dispatch.mjs +7 -1
  145. package/plugins/codex-workflow-gateway/scripts/chat-model-policy.mjs +10 -8
  146. package/plugins/codex-workflow-gateway/scripts/chat-registry.mjs +23 -5
  147. package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +66 -740
  148. package/references/state-machine.md +4 -4
  149. package/roles/technical-planner.md +1 -1
  150. package/schemas/corrective-decision-event.schema.json +3 -1
  151. package/schemas/project-knowledge-map.schema.json +3 -1
  152. package/schemas/remediation-event.schema.json +10 -1
  153. package/schemas/task.schema.json +46 -2
  154. package/schemas/transition-payloads.schema.json +16 -1
  155. package/src/alpha6/adoption.ts +1123 -0
  156. package/src/alpha6/captured-check-evidence.ts +132 -0
  157. package/src/alpha6/check-support-anchor.ts +128 -0
  158. package/src/alpha6/component-owner.ts +168 -0
  159. package/src/alpha6/corrective-decision-boundary.ts +39 -0
  160. package/src/alpha6/downstream-proof.ts +520 -0
  161. package/src/alpha6/failed-step-planning-recovery.ts +88 -0
  162. package/src/alpha6/handoff.ts +1443 -0
  163. package/src/alpha6/journal.ts +473 -0
  164. package/src/alpha6/literal-test-invocation.ts +84 -0
  165. package/src/alpha6/mechanical-feasibility.ts +488 -0
  166. package/src/alpha6/milestone.ts +2192 -0
  167. package/src/alpha6/navigation-dirty-carryover.ts +154 -0
  168. package/src/alpha6/npm-check-contract.ts +47 -0
  169. package/src/alpha6/plan-integrity.ts +298 -0
  170. package/src/alpha6/plan-risk.ts +1480 -0
  171. package/src/alpha6/preexecution-replan.ts +187 -0
  172. package/src/alpha6/remediation-cause.ts +98 -0
  173. package/src/alpha6/remediation.ts +2438 -0
  174. package/src/alpha6/review.ts +1198 -0
  175. package/src/alpha6/root-cause-replan-carryover.ts +491 -0
  176. package/src/alpha6/store-sidecars.ts +335 -0
  177. package/src/alpha7/autonomy.ts +411 -0
  178. package/src/alpha7/corrective-recovery.ts +1332 -0
  179. package/src/artifacts.ts +130 -0
  180. package/src/beta1/project-transaction.ts +355 -0
  181. package/src/change-explanation.ts +153 -0
  182. package/src/checks/runner.ts +245 -0
  183. package/src/checks/task-sync.ts +41 -0
  184. package/src/checks/worker.ts +149 -0
  185. package/src/cli-actions.ts +107 -0
  186. package/src/cli.ts +1457 -0
  187. package/src/contracts.ts +1494 -0
  188. package/src/credential-output.ts +89 -0
  189. package/src/credential-transport.ts +215 -0
  190. package/src/delegation.ts +190 -0
  191. package/src/dependency-provenance.ts +472 -0
  192. package/src/diagnostics.ts +93 -0
  193. package/src/domain/base-sync-conflict.ts +35 -0
  194. package/src/domain/completed-step-carryover.ts +76 -0
  195. package/src/domain/discovery.ts +27 -0
  196. package/src/domain/plan-semantics.ts +58 -0
  197. package/src/domain/step-start-admission.ts +10 -0
  198. package/src/domain/validation.ts +177 -0
  199. package/src/domain/virgin-registration.ts +46 -0
  200. package/src/errors.ts +24 -0
  201. package/src/fs-utils.ts +61 -0
  202. package/src/gateway-handshake.ts +95 -0
  203. package/src/git.ts +183 -0
  204. package/src/graph.ts +342 -0
  205. package/src/historical-step-provenance.ts +136 -0
  206. package/src/index.ts +23 -0
  207. package/src/lifecycle/canonical-hash.ts +28 -0
  208. package/src/lifecycle/catalog.ts +202 -0
  209. package/src/lifecycle/compiler-inspection.ts +29 -0
  210. package/src/lifecycle/core-static-readiness.ts +132 -0
  211. package/src/lifecycle/corrective-replan-authority.ts +136 -0
  212. package/src/lifecycle/corrective-replan-binding-manifest.ts +51 -0
  213. package/src/lifecycle/corrective-replan-credential-core.ts +408 -0
  214. package/src/lifecycle/corrective-replan-credential-schema.ts +54 -0
  215. package/src/lifecycle/corrective-replan-credentials.ts +48 -0
  216. package/src/lifecycle/corrective-replan.ts +843 -0
  217. package/src/lifecycle/evaluator.ts +48 -0
  218. package/src/lifecycle/fingerprint.ts +488 -0
  219. package/src/lifecycle/immutable.ts +8 -0
  220. package/src/lifecycle/implementation-table.ts +118 -0
  221. package/src/lifecycle/index.ts +8 -0
  222. package/src/lifecycle/schema-artifact.ts +263 -0
  223. package/src/lifecycle/semantic-registry.ts +572 -0
  224. package/src/lifecycle/types.ts +838 -0
  225. package/src/memory.ts +273 -0
  226. package/src/migration.ts +161 -0
  227. package/src/navigation-actions.ts +70 -0
  228. package/src/navigation-update-artifact.ts +198 -0
  229. package/src/navigation-update.ts +121 -0
  230. package/src/observation.ts +225 -0
  231. package/src/observed-routes.ts +660 -0
  232. package/src/operational-contract.ts +125 -0
  233. package/src/pending-review-update.ts +175 -0
  234. package/src/repository.ts +99 -0
  235. package/src/reviewer.ts +1879 -0
  236. package/src/runtime.ts +6 -0
  237. package/src/state/corrective-replan-executor.ts +818 -0
  238. package/src/state/corrective-replan-public-schema.ts +83 -0
  239. package/src/state/corrective-replan-public.ts +908 -0
  240. package/src/state/corrective-replan-transaction.ts +949 -0
  241. package/src/state/corrective-yield-executor.ts +327 -0
  242. package/src/state/corrective-yield-transaction.ts +730 -0
  243. package/src/state/lock.ts +902 -0
  244. package/src/state/store.ts +567 -0
  245. package/src/transition-core.ts +330 -0
  246. package/src/ulid.ts +24 -0
  247. package/src/version.ts +2 -0
  248. package/src/workflow-blocker-route.ts +109 -0
  249. package/src/workflow.ts +10172 -0
  250. package/docs/alpha7.1-implementation-brief.md +0 -268
  251. package/docs/alpha7.2-corrective-context-refresh-brief.md +0 -484
  252. package/docs/alpha7.2.1-remediation-recovery-brief.md +0 -86
  253. package/docs/beta1-stabilization-brief.md +0 -165
  254. package/docs/beta11-plan-integrity-recovery-brief.md +0 -38
  255. package/docs/beta13.2-signal-review-recovery.md +0 -38
  256. package/docs/beta2-initial-assembly-navigation-brief.md +0 -616
  257. package/docs/change-model.md +0 -118
  258. package/docs/delegated-approval.md +0 -254
  259. package/docs/lifecycle/state-machine-stabilization.md +0 -641
  260. package/docs/pdf/README.md +0 -24
  261. package/docs/pdf/codex-workflow-v2-architecture-ru.pdf +0 -0
  262. package/docs/pdf/codex-workflow-v2-chat-only-guide-ru.pdf +0 -0
  263. package/docs/pdf/codex-workflow-v2-technical-reference-ru.pdf +0 -0
  264. package/docs/pdf/requirements.txt +0 -1
  265. package/docs/pdf/sources/codex-workflow-v2-architecture-ru.md +0 -478
  266. package/docs/pdf/sources/codex-workflow-v2-chat-only-guide-ru.md +0 -508
  267. package/docs/pdf/sources/codex-workflow-v2-technical-reference-ru.md +0 -778
  268. package/docs/pending-review-update.md +0 -15
  269. package/docs/problem-briefs/01-pre-implementation-integrity.md +0 -482
  270. package/docs/problem-briefs/02-minimal-step-integrity.md +0 -411
  271. package/docs/problem-briefs/03-minimal-agent-context-integrity.md +0 -358
  272. package/docs/problem-briefs/04-task-dependency-and-structural-replacement-integrity.md +0 -573
  273. package/docs/problem-briefs/BRIEF-TEMPLATE.md +0 -56
  274. package/docs/problem-briefs/README.md +0 -120
  275. package/docs/problem-briefs/evidence/p01-mechanical-feasibility-corpus.md +0 -90
  276. package/docs/problem-briefs/evidence/signal-v4-pre-m3-replay.md +0 -246
  277. package/docs/split-required-recovery.md +0 -47
  278. package/docs/stable-release-defect-register.md +0 -730
  279. package/docs/validation-report.md +0 -182
  280. package/scripts/generate-pdf-docs.py +0 -524
  281. package/scripts/run-pdf-docs.mjs +0 -62
package/docs/release.md CHANGED
@@ -1,363 +1,95 @@
1
- # Release Policy
2
-
3
- The npm package is `codex-workflow-v2` with public visibility. Consumers must pin
4
- an exact version. Stable compatibility covers the latest minor release of the current
5
- major only; older minors are unsupported unless a release note explicitly says otherwise.
6
-
7
- ## beta.13.8: explain changes and continue active Milestones
8
-
9
- Full autonomy can be issued during an active Milestone using an exact new human-confirmed
10
- contract. Interrupted event-first issuance remains recoverable after expiry or revision change:
11
- a fresh confirmation may supersede an inert missing grant, preserving its event and creating a
12
- new grant identity. Known unpublished grant directories carry no authority; malformed state and
13
- unknown incomplete delegations still fail closed.
14
-
15
- The read-only `change explain` command separates execution context, external approval, semantic
16
- scope, bounded check-support amendment, Plan correction, membership and context refresh. It
17
- preserves the current Core route, including credential prerequisites and effective Step scope.
18
- Its proposal hash is diagnostic evidence, not permission to apply a patch.
19
-
20
- Chat dispatch records the observed child checkout and offers an advisory context check before
21
- writes. Existing Workers are preserved; a parent repository path does not authorize writing
22
- outside the actual child checkout. Model and reasoning selection remain task-specific.
23
-
24
- The exact beta.13.8 runner retains the tested beta.13.6 consumed-carryover source
25
- recovery profile with beta.13.8 as its pinned target. It does not admit a beta.13.7
26
- source or a running Step; historical beta.13.7 transcript evidence remains separately
27
- valid for its original target.
28
-
29
- All ordinary release gates below apply to the exact versioned candidate. Historical failed
30
- real-agent runs remain failed evidence; prior one-time release exceptions are not reused.
31
- Signal deployment additionally requires a fresh safe update boundary, exact installed provenance
32
- and verified continuation by the original Worker. This release does not waive external approval
33
- or claim to prevent every future product failure.
34
-
35
- ## Active Milestone autonomy contract issuance
36
-
37
- The candidate extends full human-confirmed autonomy to an already active Milestone.
38
- Release evidence must cover both initial active issuance and replacement after revocation
39
- or expiry, without resetting Task state, changing membership/semantic scope, or replacing
40
- an existing Worker. A generic delegation is neither upgraded nor revoked implicitly.
41
-
42
- The MAC includes the previous contract/grant snapshot so a revoked confirmation cannot
43
- restore authority. Exact successful and interrupted-write retries must preserve identity;
44
- legacy event-first records retain their bounded pre-execution recovery. Shared Milestone
45
- exclusion protects issuance, revocation and scope/status transitions.
46
-
47
- Acceptance must continue through same-Worker execution and guarded atomic context refresh
48
- using the new full contract, with the old grant rejected without Task/Knowledge mutations.
49
- Include read-only preparation, stale bindings, valid-contract replacement refusal, malformed
50
- actors/expiry, unavailable Knowledge and disallowed Milestone states. Optional Task-first
51
- navigation must not replace the current execution/recovery action. Run the full test suite,
52
- release checks, downstream package smoke and plugin validation on the final candidate.
53
-
54
- ## beta.13.7 candidate: retire completed carryover authority
55
-
56
- After a recovered Step passed review, its recorded dirty-work permission still
57
- overrode the next Step's route. A later repeated mechanical failure therefore
58
- returned `doctor` instead of ordinary Plan replacement. The completed record is
59
- now retained as history and consumed only after its completion evidence, exact
60
- PRA, required strict review and Git history are verified. Active or damaged
61
- bindings continue to fail closed. A corrective claim must belong to the same
62
- Worker who performed the terminal corrective yield.
63
-
64
- The exact published beta.13.7 read-only compatibility preflight can guide a
65
- stranded beta.13.6 source through its existing Plan replacement and original-Worker
66
- handoff commands before transport. It does not mutate state, authorize execution,
67
- or waive approval gates. Task and base transport must preserve all product bytes
68
- and change only the exact Workflow dependency. See the packaged gateway skill for
69
- the stage-specific bindings and mandatory source status/next readbacks.
70
-
71
- Release evidence must include the published beta.13.6 runtime reproducing the
72
- later-Step blocker, source Plan/PRA/authorization/handoff recovery, dependency
73
- transport, target provenance/context refresh, same-Worker execution and strict
74
- review. A route that reaches only `plan-set` is not sufficient. Prior one-time
75
- release-gate exceptions do not authorize this candidate.
76
-
77
- The trusted lifecycle harness must record each compatibility invocation and its
78
- terminal observation. For source `task plan-set`, record `inputBinding` computed
79
- from the actual files passed to that command: `candidatePlanHash` is the rendered
80
- Plan hash, and `candidateInputHash`/`riskAuditInputHash` are SHA-256 of recursively
81
- key-sorted canonical JSON inputs. Do not copy these values from an approval receipt
82
- without checking the executed inputs. The validator checks this binding, the resulting
83
- Plan hash, original-Worker ownership, ordered source status/next checkpoints, live-lease
84
- waiting, exact stale repair, and a fresh preflight before transport.
85
-
86
- ## beta.13.6 candidate: preserve work across root-cause replan
87
-
88
- A repeated mechanical failure can legitimately yield the same Task to a replacement
89
- Plan while preserving uncommitted implementation. beta.13.5 authorizes that Plan but
90
- then rejects its planned Step because the checkout is dirty. Reaching planning or
91
- reauthorization therefore does not prove recovery.
92
-
93
- Acceptance for this candidate must exercise the complete repeated mechanical failure,
94
- automatic C1 yield, semantic replacement Plan, independent PRA, authorization, and
95
- same-Worker execution sequence with the original dirty bytes. The carryover assessment
96
- must bind the source remediation cycle, verified historical and current Plans, current
97
- PRA and authorization, completed evidence, HEAD, file set and content hash. Every carried
98
- path must already belong to the replacement Step and remain outside forbidden scope;
99
- carryover never expands scope or forgives unrelated work.
100
-
101
- Navigation and execution must use the same assessment. Changed bytes, paths, HEAD,
102
- Plan artifacts, audit/authorization evidence or ambiguous source history must fail
103
- closed before execution. Tests must continue beyond successful start through checks,
104
- Core commit and strict review, and reject each material binding mismatch.
105
-
106
- The stranded-source update must additionally prove a read-only compatibility preflight,
107
- no writer lease or pending Core operation, exact coherent source/target versions,
108
- dependency-only Task and Milestone-base commits, registration of the Task dependency
109
- commit after verification of the base transport, and unchanged product bytes. It must preserve the original Task and Worker and must not
110
- rely on manual product commits, stash/reset, installed-code edits or state-file edits.
111
-
112
- All ordinary release gates below apply. The user's one-time beta.13.5 CI-based release
113
- exception is consumed and is not evidence or an exception for this candidate.
114
-
115
- ## beta.13.5 preventive Plan correction before execution
116
-
117
- A newly discovered implementation Plan defect can require changing unfinished scope
118
- before its next Step runs. The preventive route withdraws the current execution
119
- authorization under an independent blocking Plan Risk Audit, then requires a corrected
120
- Plan, fresh independent audit and ordinary execution authorization. It must preserve
121
- the same Task, completed Step definitions and evidence, requirements, acceptance,
122
- review history and grants. It must not manufacture a failed run to unlock planning.
123
-
124
- Initial eligibility is deliberately limited to a coherent, clean, idle `ready` Task
125
- with no C1 ownership or writer lease. Stale bindings, existing ownership, incomplete
126
- review, unexpected Git history and damaged state must fail closed. Regression gates
127
- must prove authority withdrawal and actual same-Task continuation, plus rejection of
128
- attempts to change the objective, discard completed evidence or weaken guarded scope.
129
-
130
- Replacement Plan publication commits Task state, the current and immutable Plan artifacts,
131
- and its independent audit atomically. Pending correction blocks C1 handoff and dependency
132
- transport until the corrected Plan can be authorized. Proof bindings retain each Step,
133
- failure mode and evidence association; revised proof prose requires an independent audit
134
- with an explicit rationale. Core does not determine whether natural-language proof claims
135
- are semantically stronger.
136
-
137
- External sealed-review CLI help specifies the complete envelope, including its nested
138
- review. Lifecycle validation admits one bounded expired-credential recovery between a
139
- review-input syntax refusal and retry, with unchanged sealed evidence and fresh sequential
140
- status/next bindings; unrelated or unbound mutations remain invalid.
141
-
142
- ## beta.13.4 candidate: continuation after accepted corrective Plan
143
-
144
- This correction is included in beta.13.5; beta.13.4 was not published separately.
145
-
146
- The beta.13.3 first-conflict recovery stopped too early: after a replacement Plan
147
- was accepted and authorized, navigation still applied the old Plan's conflict to
148
- the now-planned Step. Release acceptance for this correction must exercise the
149
- complete same-Task sequence through fresh Plan Risk Audit, execution authorization,
150
- the existing Worker claim, actual Step execution, and another failed review.
151
- Reaching `task plan-set` alone is not sufficient evidence.
152
-
153
- An accepted semantic replacement must be distinguished from a Knowledge-only
154
- rebind using verified Plan artifacts and audit/review bindings. Historical failures
155
- and their global ordinals remain append-only. A missing or damaged artifact must
156
- not silently acknowledge a conflict, and a context refresh must not reopen execution.
157
-
158
- ## beta.13.3 explicit Plan conflict recovery
159
-
160
- A first independently recorded reviewer `route=replan` with a validated Plan conflict
161
- blocks current execution immediately and exposes corrective replan. Historical
162
- rolling-cause classification remains unchanged; valid older histories are not
163
- reclassified as corrupt. Ordinary new fix findings still continue in the same Task.
164
- The failure transaction yields C1 and releases the exact writer lease. An older
165
- failed Task with a retained C1 claim follows credential recovery and
166
- `task corrective-yield` before planning; it cannot run or change its Plan while
167
- the claim remains. Recovery binds the validated remediation event and preserves
168
- the Task, review evidence, and existing worker identity.
169
- The release also includes durable App dispatch and explicit role/phase model selection;
170
- see the packaged `references/chat-dispatch.md`.
171
-
172
- ## beta.13.2 review recovery gate
173
-
174
- The patch preserves protocol 2 and canonical entity schema 2. In addition to the
175
- ordinary release gates, `release:check` executes the large-diff, pending-review
176
- update, supporting-source refresh and Task guard regressions. Acceptance requires
177
- complete external-sealed Step and Task packets above 2 MiB, explicit bounded
178
- failure above the Git output limit, exact credential recovery before Knowledge
179
- refresh, and a Signal-shaped delegated update followed by actual review,
180
- context refresh and the next ordinary Step. A source preflight alone is not
181
- recovery completion. See `beta13.2-signal-review-recovery.md`.
182
-
183
- ## Release gate
184
-
185
- Before tagging a release:
186
-
187
- 1. `npm ci`
188
- 2. `npm run validate`
189
- 3. `npm run test:signal-t10-check-support-e2e`
190
- 4. `npm run test:signal-remediation-e2e`
191
- 5. `npm run pack:check`
192
- 6. `npm run smoke:downstream`
193
- 7. `npm run plugin:check`
194
- 8. `npm run docs:pdf:check`
195
- 9. `npm run release:check`
196
- 10. validate `plugins/codex-workflow-gateway` with the Codex plugin validator
197
- 11. validate the append-only real-agent log with
198
- `node scripts/validate-lifecycle-transcript.mjs --file <lifecycle-log.jsonl>`
199
-
200
- The beta.13 real-agent gate follows the same Codex App boundary as production: the Task agent keeps
201
- its live writer authority while a separate App reviewer consumes an external-sealed packet, then the
202
- Task agent records the result. A nested native `codex exec` launched from inside another Codex agent
203
- is not accepted as release evidence. Packet generation is a logged read-only observation; recording
204
- the sealed result remains an exact `next`-authorized mutation followed by `status` and `next`.
205
-
206
- The downstream smoke packs the actual tarball, installs it into an empty temporary project,
207
- runs the packaged CLI handshake, and proves installation created none of `.codex`, `.tasks`,
208
- `.increments`, or `.memory-bank` in that project.
209
-
210
- The PDF check deterministically regenerates all three Russian documents from
211
- `docs/pdf/sources`, binds the visible package version to the root manifest, and fails when any
212
- tracked PDF is stale. Source and binary PDFs are one release unit.
213
-
214
- For beta.13, `npm run release:check` builds the exact current source before inspecting the packaged
215
- surface and fails unless all of these release contracts remain present:
216
-
217
- - the handshake advertises `cause-bound-rolling-refinement-v1`,
218
- `failed-step-continuation-transaction-v1`, `host-safe-credential-reference-v1`,
219
- `structural-production-edge-contract-v1`, `observed-route-matrix-v2`, `compact-status-v1`,
220
- `reviewer-runtime-preflight-v1`, `explicit-review-mode-v1`, and
221
- `app-owned-operational-preflight-v1`;
222
- - claim/writer credentials are transported only by project/entity/action/actor-bound local
223
- references backed by mode-`0600` storage, legacy secret-bearing arguments fail closed, and secret
224
- material is absent from argv, output, errors, tool/session/transcript fixtures, and evidence;
225
- - a failed check commits failure evidence, exact dirty-byte binding, Task continuation state, and
226
- lease release through the `failed-step-continuation` transaction; a failed strict review similarly
227
- binds remediation, Task pause and exact lease release, and a repeated authoritative reviewer cause
228
- adds C1 yield before root-cause replan; the Signal-shaped E2E continues through recovery, the next
229
- ordinary Step, Task completion, and next-Task dispatch;
230
- - five distinct or unclassified review findings continue in the same Task without a numeric cap,
231
- while repeated normalized mechanical failures still require root-cause replan; a current
232
- explicit external reviewer Plan conflict requires replan immediately, without a synthetic retry;
233
- - a transitive same-component check owner may refine the same Task only under the unchanged semantic
234
- boundary; for a multi-Step `runtime-composition` consumer the independent PRA classification,
235
- not a planner opt-in, requires an edge from a transitive owner to an exact executable consumer
236
- check. A simple one-Step runtime is exempt; neither assertion claims semantic product truth or
237
- P02/P01-B authority;
238
- - the machine-readable route matrix gives every one of the 13 Signal-observed route classes a
239
- unique priority and one exact production transition witness or real terminal observation. The
240
- `signal-observed-route-class-witnesses` boundary does not claim every action is exercised:
241
- action-level metadata remains `executable-witnessed`, `unwitnessed`, or `unsupported`, and unknown
242
- actions fail closed;
243
- - default `status` is a bounded route-exact projection and full historical state requires explicit
244
- `status --full`;
245
- - reviewer runtime preflight is read-only for the sealed checkout and requires exact declared,
246
- locked and repository-local installed Workflow versions plus a hash-verified runtime build manifest;
247
- on every call it re-resolves the exact recursive runtime dependency graph from each actual parent
248
- package (nested before hoisted) and re-hashes package manifests and executable runtime files, so a
249
- warm Node module cache cannot hide a removed, changed, conflicting or symlink-redirected dependency;
250
- the exact installed gateway, reviewer, and workflow modules are loaded synchronously through the
251
- current Node runtime and must report exact package/protocol/schema versions; this avoids a child-process
252
- scheduler deadline without caching a trust decision, and every load or contract failure still fails closed;
253
- the native reviewer output schema is accepted by API strict Structured Outputs: every object property
254
- is required, optional finding values use explicit nullability, and malformed semantic combinations fail closed;
255
- a missing install, missing/stale build or failed handshake returns `prepared=false` with an
256
- actionable blocker; every sealed review packet binds `ordinary` or `security` mode, and ordinary
257
- review cannot imply a security scan;
258
- - package-owned operational preflights report worktree observation, watchdog, consent, and
259
- coordinator-replacement facts without claiming Codex App scheduling, chat mutation, consent, or
260
- atomic App effects.
261
-
262
- For beta.13.1 the same gate additionally verifies the post-publish compatibility boundary. A
263
- markerless pre-authority PRA whose Task has no production-edge fields remains readable and does not
264
- turn an intact beta.12 state into `STATE_CORRUPT`. Both ordinary and atomic corrective-replan PRA
265
- writers persist `structuralProductionEdgeAuthority=required-v1`; that hash-chained marker keeps the
266
- current-Plan structural gate fail-closed even if Task fields are removed. An audit belonging to an
267
- older Plan is never revalidated against a later Plan's Step/edge graph. This is not signed
268
- provenance: a privileged rewrite of the complete local Task and self-hashed chain remains outside
269
- the local-state trust model.
270
-
271
- For beta.12.19, the release gate also relies on `npm run release:check` to fail if:
272
-
273
- - canonical entity schema 2 shapes drift;
274
- - protocol 2 is not the active public contract, or intact protocol-1 adoption evidence stops being readable through the bounded compatibility window;
275
- - the delegated transition allow-list expands;
276
- - schema-2 adoption is presented as `state migrate` instead of posture sidecars;
277
- - alpha.7 rescue, Milestone autonomy (including guarded content refresh), derived actor, or
278
- proof-obligation capabilities and schemas are absent from the packaged surface;
279
- - the truthful structural-replacement-disabled capability, project-level transaction recovery,
280
- secret-safe lock diagnostics, version/base diagnostics, or serialized maintainer validation are missing.
281
- - truthful initial-assembly navigation capability is absent from the packaged surface.
282
- - corrective-yield/replan protocol-v2 commands, closed schemas, Human gate, retained journals,
283
- explicit recovery, or dual-readback capabilities are absent from the packaged surface.
284
- - scoped Task navigation, credential replacement recovery, or sealed external Task/Step review
285
- commands are absent from the packaged surface.
286
- - `task result-set` can enter the unbounded Human final-acceptance gate without consuming a live
287
- writer credential and releasing its lease, or claimed Task E2E cannot reacquire a fresh merge credential.
288
- - bounded dependency-provenance recovery, retained passed-review provenance, the exact Signal T04
289
- revision-26 fixture, or pending/corrupt-review rejection regressions are absent.
290
- - dependency recovery again requires Task-local manifest/lock fields to equal the Milestone base,
291
- or a candidate commit can alter any non-Workflow dependency payload.
292
- - corrective replan drops completed Step evidence from accepted Task history, or an already-stranded
293
- Task can register arbitrary/unreviewed history instead of one exact passed and previously accepted
294
- Step commit.
295
- - beta.12.9 cannot install through an exact dependency-only base/Task transport while preserving the
296
- active Step worktree, or that compatibility route fails to bind the dependency HEAD, historical
297
- commit, current Plan/Step, dirty paths/content hash, and absence of leases/transactions.
298
- - the read-only Milestone progress projection, replacement regression, project-monotonic chat
299
- registry, title fallback/readback, or long-Cyrillic multi-attempt E2E evidence is absent.
300
- - bounded first- or repeated-failure Plan-integrity recovery, selector-required npm-check
301
- feasibility, exact failed-remediation/manifest/worktree
302
- bindings, or the no-synthetic-second-failure regression is absent.
303
- - Plan-integrity update preflight again hard-codes one historical source release instead of deriving
304
- a coherent exact beta.12 source from declared/locked/installed/current/base surfaces, or it accepts
305
- a source before beta.12.11, a source not older than the runner, or any divergent version surface.
306
- - a direct migration check can import an external checksum/catalog authority without the producing
307
- Step owning it; or in-flight recovery can widen beyond the exact imported support path, bypass
308
- `forbiddenScope`, change the Plan hash, skip checks/Core commit/review disclosure, or require a
309
- Human approval for the machine-proved scope-only correction.
310
- - historical check-support evidence is reinterpreted against a later Plan instead of the Plan hash
311
- recorded by the event; or a post-rebind update is accepted without one planned Step explicitly
312
- owning every previously derived support path in both `allowedWrites` and `expectedOutputs`, exact
313
- dirty-byte continuity, coherent versions, and an otherwise idle recovery boundary.
314
- - downstream proof cannot invalidate only completed transitive-predecessor authority while
315
- preserving worktree/HEAD, yielding C1, and returning the same Task to fresh planning; or unrelated
316
- dirty files and damaged invalidation evidence do not fail closed.
317
- - an eligible active downstream proof cannot transport one exact dependency-only update across
318
- aligned base/Task commits while preserving product bytes; or unknown history, unrelated dirty
319
- scope, content drift within an observation, leases, transactions, and wider candidates do not
320
- fail closed before provenance registration and ordinary downstream recovery.
321
- - the exact beta.12.6 post-invalidation Knowledge-rebind shape cannot pass a read-only source gate,
322
- transport beta.12.7 through dependency-only commits, register provenance, restore `needs_fix`,
323
- survive required Knowledge refresh, and reach a fresh replacement Plan;
324
- - preserved dirty bytes can execute without one Step owning the complete bound set, or HEAD/path/hash
325
- drift is accepted; or the Signal-shaped E2E stops before checks, Core commit, strict Step review,
326
- and fresh navigation to Task submission.
327
- - bundled gateway guidance treats Docker socket `EPERM` as daemon failure, consumes a remediation
328
- attempt before one exact escalated probe, or recommends restarting Docker Desktop without separate
329
- authority.
330
- - the P04-A Milestone dependency/initial-Plan transaction capabilities or the P01-A mechanical
331
- feasibility capability is absent from the packaged handshake.
332
- - continuable guarded remediation or evidence-bound `fix`/`replan` review routing is absent, or a
333
- third/later failed review is again converted into an attempt-count stop.
334
- - audited remediation can change Milestone outcome/success signal/acceptance/checks, omit or add
335
- arbitrary predecessor authority, reuse one blocking audit, run with dirty/owned state, or stop
336
- before the new Task merges and the original Task completes a subsequent Step.
337
- - `corrective-derived` Task authorization/final acceptance can exist without the current exact
338
- Milestone execution authorization and audited-remediation event, or final Milestone acceptance is
339
- derived automatically.
340
- - the append-only, Human-confirmed beta.11 attempt-four stop override, its exact three-event/
341
- continue/stop binding, split rejection, stale-confirmation rejection, or tamper detection is
342
- absent from the package.
343
- - an already-applied beta.11 stop override cannot survive a contiguous append-only chain of later
344
- context-only Plan rebinds with exact mechanical audits, delegation, and chronology;
345
- - Git HEAD may advance between the override and current execution authorization through anything
346
- except an exact chain of registered dependency-provenance commits that each change only
347
- `package.json` and `package-lock.json`; or the route weakens the generic stale-decision recovery gate.
348
- - a dependency-provenance recovery recorded after the final mechanical audit cannot explain its
349
- exact single Task revision, or an unrelated revision/damaged provenance is accepted as authority.
350
-
351
- The separate lifecycle transcript validator fails if the real-agent log contains a mutation that
352
- bypasses failed `status`/`next`, an unadvertised or failed mutation, an unresolved syntax-only
353
- retry, or missing post-mutation checkpoints.
354
-
355
- Full `npm test` and `npm run validate` invocations share destructive build outputs and are therefore
356
- single-owner operations. A concurrent invocation fails immediately with
357
- `VALIDATION_ALREADY_RUNNING`; retry it after the owner exits. Stale process locks are recovered
358
- automatically.
359
-
360
- Tag releases as `v<package-version>`. The tag workflow verifies the tag/package match and
361
- uses npm trusted publishing with public access. For a public GitHub repository and public
362
- package, npm trusted publishing generates provenance automatically. Publishing is never
363
- performed by local validation commands.
1
+ # Current release policy
2
+
3
+ ## One contract, two outcomes
4
+
5
+ The executable release contract is [scripts/release-contract.json](../scripts/release-contract.json). The passport verifier and qualification pipeline enforce its stages and freshness window. A green `release:check` means **automated candidate qualification only**. It always writes `releaseEligible: false`; it is never permission to publish.
6
+
7
+ A complete passport needs the exact package version, clean commit SHA, tree and lockfile hashes, one retained tarball SHA-256, all automated evidence, original Codex App lifecycle evidence, and an independent reviewer. Missing, failed, stale, changed or foreign evidence blocks publication. The default evidence window is seven days; evidence dated in the future is invalid. Changing the candidate requires new qualification and App evidence. There is no old-version compatibility bypass.
8
+
9
+ Use exactly **Node 24.17.0**. The runtime guard checks the actual process, package/lock engines, `.node-version`, `.nvmrc` and both CI jobs before validation writes. Record actual Node, OS platform, OS release and architecture; configuration alone is not execution evidence. Qualification supports POSIX hosts; the current target is macOS, with automated Linux CI. A green run on one host is not a portability claim.
10
+
11
+ ## Automated qualification
12
+
13
+ Commit the complete candidate, including its current PDF. Install Node dependencies and the pinned PDF renderer, then run the full pipeline once:
14
+
15
+ ```sh
16
+ npm ci
17
+ python3 -m pip install -r docs/pdf/requirements.txt
18
+ npm run release:check
19
+ ```
20
+
21
+ When current guide sources change, first regenerate with `npm run docs:pdf`, inspect the rendered document and commit it. The mandatory `pdf-check` rebuilds the PDF deterministically with ReportLab 4.4.9 and the vendored fonts, compares actual bytes, and records source/generator/font/output hashes. The current source list and output are in the release contract. Historical PDFs are archived documents, not release evidence; they are not regenerated or included in the current guide.
22
+
23
+ Required stages, in contract order: typecheck; fresh build; runtime build manifest; test compilation; every test file once; PDF freshness; one retained pack; installed downstream smoke using that exact pack; plugin validation; release assertions. Per-file evidence comes from the actual Node test runner and binds file, source hash and qualification ID. Partial inventories, failed/cancelled files, all-skipped files and reused receipts are rejected. Individual optional skips remain visible in the runner counts.
24
+
25
+ The output is an owned `.release/` directory, excluded from Git and the npm package:
26
+
27
+ - `passport.json`: exact candidate and references, initially without App evidence.
28
+ - `candidate.tgz`: the single archive used by smoke, later App installation, and publication.
29
+ - `automated.json`, per-file runner receipts, PDF/plugin/downstream reports: hashed evidence.
30
+
31
+ A failed or interrupted qualification removes the previous passport before starting; it does not preserve an earlier green admission. Source changes during the run also invalidate the result. Do not prepend `validate` or another full suite; they repeat the same tests. `release:verify` consumes evidence and does not rerun the suite or repack.
32
+
33
+ The supervisor reports stage deadlines, startup receipts and exit reasons. Do not increase waits or silently retry to manufacture green. Native pre-JavaScript startup stalls remain a separate host limitation. R2 remains open: an escaped detached descendant can survive a check timeout; `cleanupComplete` proves only the owned process group. These facts are not erased by qualification.
34
+
35
+ ## Original App evidence
36
+
37
+ Run the disposable synthetic project in the real Codex App using the exact retained `candidate.tgz`. Do not run against the live consumer. Create a new Worker task and a separate independent reviewer task; preserve their original App records. The new Worker must resolve the installed gateway skill from its actual App catalog and record that selected path, skill hash and plugin-manifest hash; these must match the packed candidate. Hashing an arbitrary repository copy is not evidence of the loaded skill. Exercise installed gateway handshake, actual Task execution and completion, a sealed independent review and a later merged Task outcome. The reviewer must return its own original result, not a result authored by Worker or Coordinator.
38
+
39
+ Capture the actual CLI log with `scripts/capture-lifecycle.mjs`, retaining command begin/end and successful status/next checkpoints. Preserve its candidate, archive, installed CLI/projector and capture-tool bindings. The full contract and evidence-envelope fields are documented in [release App evidence](release-app-evidence.md). The verifier calls the executable lifecycle validator and checks exact packet/seal hashes, independent identities, actual creation records and terminal continuation. It verifies the local validator's built projector dependency bytes against the same tarball; run `npm run build` in a fresh verification checkout first.
40
+
41
+ The App provider currently supplies no cryptographic provenance used by this repository. Hashes and structural checks bind the candidate, **automated report hash**, original artifact bytes and lifecycle records; they do not independently prove that supplied JSON is a genuine App export. Original live records remain required, but no owner attestation, signature or signing key is required. Publication still requires separate explicit user authorization outside the evidence artifact.
42
+
43
+ Copy the supplied App bundle into `.release/app/`, preserving its relative artifact paths, then attach it:
44
+
45
+ ```sh
46
+ npm run release:passport -- --passport .release/passport.json --app .release/app/evidence.json
47
+ npm run release:verify -- --passport .release/passport.json
48
+ ```
49
+
50
+ Neither command requires a signing key. The attachment never infers publication consent or generates an App record. Missing live evidence is an actionable `RELEASE_APP_EVIDENCE_MISSING`, not a skipped test or a simulated success. Stored `releaseEligible` flags have no authority; verification recomputes eligibility from bytes every time.
51
+
52
+ ## Publication and CI
53
+
54
+ PRs, `main`, `codex/**` pushes and manual validation run automated qualification without publish credentials. CI uploads the automated `.release/` bundle with an explicit incomplete-release warning. This artifact is useful for App qualification but cannot publish by itself.
55
+
56
+ The separate Release workflow runs on a pushed `v<version>` tag. Before pushing that tag, push a data-only branch `release-evidence/v<version>` containing `bundle.zip` and `bundle.sha256` (the latter is one hexadecimal SHA-256). ZIP root must contain `passport.json`, `automated.json`, `candidate.tgz` and every referenced report/App file. The branch is transport, not an approval or signature: its hash detects corruption; the passport verifies the exact tag commit, version, tarball and all mandatory evidence. Missing branches, incomplete bundles and mismatched evidence fail publication. Evidence-branch code is never executed.
57
+
58
+ Push the qualified candidate to `origin/main`, push its completed evidence branch, then push its release tag. The workflow checks archive integrity before safe extraction, rejects links/traversal/duplicates/oversized input, builds verifier dependencies only, verifies the complete passport and publishes the retained tarball. It never reruns qualification or repacks. Verify the published version and artifact hash through npm afterward. No manual dispatch, external HTTPS bundle hosting or mandatory GitHub environment is required.
59
+
60
+ Removing the mandatory environment restores the earlier tag-push OIDC flow. The evidence checkout resolves the branch once to a commit and records that SHA in the job log. The workflow requests an OIDC token for npm trusted publishing. Existing registry authorization must allow this repository and workflow; a tag push does not create registry access. Failure to authenticate is a failed publication, never a reason to bypass the passport. No additional owner signature or environment approval is part of this release contract.
61
+
62
+ For an explicitly authorized local release, set the exact `RELEASE_TAG`, then use:
63
+
64
+ ```sh
65
+ npm run publish:release -- --passport .release/passport.json
66
+ ```
67
+
68
+ The entry point re-verifies the passport, source, tag and packed package identity, copies already verified bytes into a private staging directory, checks the staging hash and publishes **that archive**. It never publishes a directory or repacks the checkout. Direct checkout `npm publish` is blocked by `prepublishOnly`. That hook prevents accidents; a credential holder can bypass npm hooks with `--ignore-scripts` or another client. The enforceable external boundary is registry credential/OIDC access, not a claim that repository code controls every npm client.
69
+
70
+ ## Remaining product limits
71
+
72
+ The specific A1 and M04 route results retain their accepted scope. Broader A4 autonomy metrics, R2 escaped-session cleanup, native host startup diagnosis and any absent live App qualification remain explicit. Positive validator tests use temporary synthetic records; they test rejection/acceptance logic and never substitute for a real App run. A publication decision does not silently close these findings or demonstrate universal lifecycle completion.
73
+
74
+ ## 2.0.0-beta.14 candidate inventory
75
+
76
+ The reproducible branch is `codex/release-candidate-beta.14`, based on tag
77
+ `v2.0.0-beta.13.16` (commit `500c783d469f8c571a136c6763b7781091406cb1`).
78
+ [The release inventory](beta14-release-inventory.json) maps each agreed change to ancestor commits,
79
+ final files, test selectors and limitations. The final commit and actual receipts are recorded in
80
+ the external qualification manifest after committing; this document does not claim a test result.
81
+
82
+ Product graph is inactive: no missing/stale graph gate, refresh obligation or Knowledge approval
83
+ is introduced. Existing schema/state fields remain readable. Installed-workflow and maintainer
84
+ graphs retain separate exact source roots; provider ready alone does not prove source freshness.
85
+
86
+ Protocol and state schema numbers remain 2, but the JSON Schema contracts do change: persisted
87
+ Knowledge timestamps, pending base-sync validation and native/navigation carryover are represented.
88
+ This is not a claim of unchanged schema or compatibility with every historical state. Before release,
89
+ revalidate a fresh isolated Signal snapshot and its next allowed transition. Recovery preserves
90
+ history and dirty bytes and requires renewed execution authority. Signal is not updated by assembly.
91
+
92
+ R2 escaped detached descendants, broad A4 autonomy, native host startup stalls and graph freshness
93
+ limitations remain open. Original App lifecycle/reviewer evidence remains mandatory and is not supplied by automated tests.
94
+ Publication requires separate explicit user authorization, not a signed evidence field. No tag, publication or Coordinator
95
+ instruction is authorized by this candidate assembly.