codex-workflow-v2 2.0.0-beta.13 → 2.0.0-beta.13.10

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 (86) hide show
  1. package/README.md +6 -1
  2. package/dist/reviewer-runtime-build.json +44 -20
  3. package/dist/src/alpha6/failed-step-planning-recovery.d.ts +10 -0
  4. package/dist/src/alpha6/failed-step-planning-recovery.js +93 -0
  5. package/dist/src/alpha6/failed-step-planning-recovery.js.map +1 -0
  6. package/dist/src/alpha6/plan-risk.d.ts +4 -0
  7. package/dist/src/alpha6/plan-risk.js +50 -13
  8. package/dist/src/alpha6/plan-risk.js.map +1 -1
  9. package/dist/src/alpha6/preexecution-replan.d.ts +38 -0
  10. package/dist/src/alpha6/preexecution-replan.js +130 -0
  11. package/dist/src/alpha6/preexecution-replan.js.map +1 -0
  12. package/dist/src/alpha6/remediation.d.ts +4 -2
  13. package/dist/src/alpha6/remediation.js +155 -20
  14. package/dist/src/alpha6/remediation.js.map +1 -1
  15. package/dist/src/alpha6/root-cause-replan-carryover.d.ts +18 -0
  16. package/dist/src/alpha6/root-cause-replan-carryover.js +396 -0
  17. package/dist/src/alpha6/root-cause-replan-carryover.js.map +1 -0
  18. package/dist/src/alpha7/autonomy.d.ts +3 -0
  19. package/dist/src/alpha7/autonomy.js +89 -42
  20. package/dist/src/alpha7/autonomy.js.map +1 -1
  21. package/dist/src/change-explanation.d.ts +64 -0
  22. package/dist/src/change-explanation.js +150 -0
  23. package/dist/src/change-explanation.js.map +1 -0
  24. package/dist/src/cli-actions.d.ts +3 -2
  25. package/dist/src/cli-actions.js +6 -0
  26. package/dist/src/cli-actions.js.map +1 -1
  27. package/dist/src/cli.js +73 -1
  28. package/dist/src/cli.js.map +1 -1
  29. package/dist/src/contracts.d.ts +38 -0
  30. package/dist/src/dependency-provenance.d.ts +3 -2
  31. package/dist/src/dependency-provenance.js +33 -2
  32. package/dist/src/dependency-provenance.js.map +1 -1
  33. package/dist/src/domain/plan-semantics.d.ts +11 -0
  34. package/dist/src/domain/plan-semantics.js +49 -0
  35. package/dist/src/domain/plan-semantics.js.map +1 -0
  36. package/dist/src/gateway-handshake.js +2 -0
  37. package/dist/src/gateway-handshake.js.map +1 -1
  38. package/dist/src/lifecycle/corrective-replan.js +3 -3
  39. package/dist/src/lifecycle/corrective-replan.js.map +1 -1
  40. package/dist/src/observed-routes.js +1 -0
  41. package/dist/src/observed-routes.js.map +1 -1
  42. package/dist/src/pending-review-update.d.ts +49 -0
  43. package/dist/src/pending-review-update.js +132 -0
  44. package/dist/src/pending-review-update.js.map +1 -0
  45. package/dist/src/repository.js +16 -4
  46. package/dist/src/repository.js.map +1 -1
  47. package/dist/src/reviewer.js +4 -1
  48. package/dist/src/reviewer.js.map +1 -1
  49. package/dist/src/state/corrective-replan-executor.js +3 -1
  50. package/dist/src/state/corrective-replan-executor.js.map +1 -1
  51. package/dist/src/state/corrective-replan-public.js +5 -4
  52. package/dist/src/state/corrective-replan-public.js.map +1 -1
  53. package/dist/src/state/corrective-yield-executor.js +12 -3
  54. package/dist/src/state/corrective-yield-executor.js.map +1 -1
  55. package/dist/src/state/store.d.ts +1 -1
  56. package/dist/src/state/store.js +17 -3
  57. package/dist/src/state/store.js.map +1 -1
  58. package/dist/src/version.d.ts +1 -1
  59. package/dist/src/version.js +1 -1
  60. package/dist/src/version.js.map +1 -1
  61. package/dist/src/workflow.d.ts +84 -1
  62. package/dist/src/workflow.js +1616 -355
  63. package/dist/src/workflow.js.map +1 -1
  64. package/docs/beta13.2-signal-review-recovery.md +38 -0
  65. package/docs/change-model.md +118 -0
  66. package/docs/delegated-approval.md +26 -0
  67. package/docs/pdf/codex-workflow-v2-architecture-ru.pdf +0 -0
  68. package/docs/pdf/codex-workflow-v2-chat-only-guide-ru.pdf +0 -0
  69. package/docs/pdf/codex-workflow-v2-technical-reference-ru.pdf +0 -0
  70. package/docs/pdf/sources/codex-workflow-v2-architecture-ru.md +9 -1
  71. package/docs/pdf/sources/codex-workflow-v2-chat-only-guide-ru.md +9 -5
  72. package/docs/pdf/sources/codex-workflow-v2-technical-reference-ru.md +18 -3
  73. package/docs/pending-review-update.md +15 -0
  74. package/docs/release.md +267 -2
  75. package/docs/updating-existing-project.md +36 -6
  76. package/docs/validation-report.md +30 -9
  77. package/package.json +2 -1
  78. package/plugins/codex-workflow-gateway/references/chat-dispatch.md +204 -0
  79. package/plugins/codex-workflow-gateway/references/protocol.md +11 -0
  80. package/plugins/codex-workflow-gateway/scripts/chat-dispatch.mjs +298 -0
  81. package/plugins/codex-workflow-gateway/scripts/chat-model-policy.mjs +43 -0
  82. package/plugins/codex-workflow-gateway/scripts/chat-registry.mjs +55 -3
  83. package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +218 -21
  84. package/schemas/plan-risk-audit-event.schema.json +1 -0
  85. package/schemas/preexecution-replan-event.schema.json +45 -0
  86. package/schemas/task.schema.json +55 -0
@@ -0,0 +1,38 @@
1
+ # beta.13.2: pending-review recovery
2
+
3
+ ## Confirmed failure
4
+
5
+ Signal M04 T01 completed the product changes for STEP-002 on beta.13.1, but its
6
+ required independent Step review could not be prepared. The cumulative Task diff
7
+ was 2,236,058 bytes, exceeding the default synchronous Git output buffer. The
8
+ checkout remained clean and the completion commit remained recorded; review had
9
+ not passed.
10
+
11
+ After the writer lease expired, repository navigation preferred delegated
12
+ Knowledge context refresh over the pending review's credential recovery. The
13
+ context-refresh executor correctly rejected the still-in-progress Step. Thus
14
+ navigation advertised an action its executor could not perform. Ordinary package
15
+ update was also blocked by the in-progress Step.
16
+
17
+ ## Required recovery guarantees
18
+
19
+ - Large Step and final Task review inputs are complete or fail explicitly; Git
20
+ errors have bounded diagnostics rather than dumping the input corpus.
21
+ - Pending review and its exact writer credential recovery remain ahead of
22
+ Knowledge refresh. Refresh during a running Step stays forbidden.
23
+ - Installation recovery validates the source version, exact Task/Plan/Step and
24
+ completion commit, clean checkout, recorded Git history, review journal, and
25
+ absence of active ownership or transactions.
26
+ - Dependency transport preserves product bytes and the original reviewed commit.
27
+ Pending review never establishes passed-review provenance.
28
+ - The original required review, delegated context refresh, Task acceptance and
29
+ merge remain mandatory after recovery. Grants are not broadened or renewed.
30
+
31
+ ## Release acceptance
32
+
33
+ The package regression suite must cover oversized review inputs and the combined
34
+ pending-review, expired-lease and stale-Knowledge state, including rejection of
35
+ unsafe recovery candidates. Release validation also requires the ordinary package
36
+ and external-review lifecycle gates. Actual Signal recovery must pass the blocked
37
+ Step review and reach a subsequent executable lifecycle boundary; green fixture
38
+ tests alone do not establish that the production Milestone has resumed.
@@ -0,0 +1,118 @@
1
+ # Execution context and change explanation
2
+
3
+ A change is explained before it is attempted. The explanation is not an approval, a new grant,
4
+ or a replacement lifecycle. Existing Core `next` remains authoritative.
5
+
6
+ ## One execution context
7
+
8
+ App dispatch defaults to a worktree. An explicitly requested `executionMode: "local"` creates
9
+ in the saved project instead. Use local only when the user requested that execution environment.
10
+ The dispatch prompt separates repository identity from the child's actual write destination.
11
+ Correlated App readback records the real checkout root. A second readback cannot silently move
12
+ that bound Worker into another checkout, even when both share a Git common directory.
13
+
14
+ Before the first write and after a branch/cwd change, call the packaged registry action
15
+ `dispatch-context-check --reservation-id ... --file ... --project-id ...` with:
16
+
17
+ ```json
18
+ {
19
+ "observation": { "thread": {
20
+ "id": "actual-bound-thread-uuid", "kind": "codex", "hostId": "local",
21
+ "cwd": "/absolute/actual/worker/checkout"
22
+ } },
23
+ "writeRoot": "/absolute/actual/worker/checkout",
24
+ "expectedBranch": "exact-branch-from-fresh-Task"
25
+ }
26
+ ```
27
+
28
+ Use a fresh App `read_thread` observation, never a fabricated cwd. This read-only check detects
29
+ repository, checkout, write-root and branch mismatch. It does not replace Task revision, actor,
30
+ lease/credential or external permission checks. Do not send another create request, change the
31
+ target directory, or hand off an active writer merely to clear a mismatch. Reconcile the existing
32
+ Worker and Workflow context. Tracked dispatch without recorded executionContext needs a correlated `dispatch-observe` before
33
+ this check can match; it does not invent an existing checkout binding.
34
+
35
+ ## One change card
36
+
37
+ `change explain --task TASK-ID --file proposal.json --repo /actual/checkout --json` reads the
38
+ current Task and `next` from one observation. It changes no workflow state or product file.
39
+
40
+ ```json
41
+ {
42
+ "reason": "The current check requires one additional support file.",
43
+ "paths": ["tools/check-support.ts"],
44
+ "intent": "implementation",
45
+ "expectedRevision": 12,
46
+ "executionContext": {
47
+ "cwd": "/absolute/actual/worker/checkout",
48
+ "writeRoot": "/absolute/actual/worker/checkout",
49
+ "expectedBranch": "exact-task-branch"
50
+ },
51
+ "externalDecision": "unknown"
52
+ }
53
+ ```
54
+
55
+ `paths` are exact normalized relative file paths, not globs. `expectedPlanHash` is also accepted.
56
+ Inputs are closed; an agent cannot add a `supportProven` or `approved` flag. `externalDecision:
57
+ "denied"` preserves an external denial as a separate blocker. It does not call or emulate the
58
+ external permission service. `intent` may instead be `membership` or `semantic-scope`; declaring
59
+ intent never proves semantic safety. Omitted context is reported as not supplied, not verified.
60
+
61
+ The card binds Task revision/Plan, HEAD, request and bytes of proposed plus observed dirty paths.
62
+ Undeclared dirty files are included; escaping symlinks block byte inspection. The output contains
63
+ no confirmation/claim/writer values and no proposed file contents. A proposal hash is a diagnostic
64
+ binding, not an apply token; always refresh `next` and ordinary mutation preconditions.
65
+
66
+ ## Adaptation routes
67
+
68
+ - Implementation fixes continue within the same Task when the current Core route permits it.
69
+ Review count alone does not select corrective planning.
70
+ - `bounded-plan-amendment` appears only when Core advertises the exact eligible check-support
71
+ scope extension and every out-of-Step file is covered by that evidence. Execute the existing
72
+ `task plan-integrity-recover` route and fresh `next`; its existing atomic evidence and authority
73
+ rules apply. The card never edits `allowedWrites`, enlarges a grant, or supplies an arbitrary
74
+ new Plan. This release reuses the proven bounded amendment mechanism rather than adding a
75
+ competing mutation protocol.
76
+ - An unproved additional file requires Plan review. No broad glob or diff-size rule grants
77
+ automatic extension. Runtime changes and component-owner recovery retain their current audits.
78
+ - Corrective planning and downstream recovery retain existing Task/Worker identity and historical
79
+ evidence. A Knowledge context refresh does not resolve a Plan conflict.
80
+ - Membership is distinct from implementation. Existing audited remediation and full-contract
81
+ membership evolution remain the only corresponding machine routes. A reported membership
82
+ intent does not authorize deletion of a required Task or weakened acceptance.
83
+ - Semantic scope requires an explicit user decision. External denial remains independent of
84
+ Workflow grants and file scope.
85
+
86
+ `requiresUser: null` means the card has not established a specific human gate, not that all
87
+ checks passed. The card is advisory and cannot intercept arbitrary editor/tool writes. Gateway
88
+ agents must invoke the context check and fresh Core route before writing. No claim is made that
89
+ an external approval system will accept the resulting operation.
90
+
91
+ For a legacy Worker already bound before dispatch markers existed, the read-only context check
92
+ uses its existing thread/host plus a freshly supplied Task repository root. It explicitly reports
93
+ that historical checkout provenance is unavailable, preserves the legacy registry bytes and
94
+ never creates or adopts another Worker. A tracked Worker whose checkout changes still reports a
95
+ mismatch; no automatic App handoff or silent registry migration is performed.
96
+
97
+ ## Later independent corrective evidence after a fix review
98
+
99
+ A failed guarded Step can reveal a Plan obstruction after its immutable strict review recorded
100
+ `fix` without a Plan conflict. On a clean current Task checkout, after at least two real remediation
101
+ failures and with no decision already bound to the current ordinal, `next` can expose the optional
102
+ `correctiveDecisionOption`. The ordinary fix action remains the default. No failure, repeated run,
103
+ review rewrite or arbitrary scope extension is required to obtain an independent corrective audit.
104
+ The option is absent while a Step runs, a pending handoff exists, or an earlier navigation gate
105
+ blocks ordinary continuation. Existing writer/C1 actor and token requirements still apply; a
106
+ legitimate claimed Worker credential does not disable this independent audit route.
107
+
108
+ Only a genuine independent audit justifies using the existing `task corrective-decision` command.
109
+ Its resulting append-only decision preserves the original review and completed Steps. A decision
110
+ requiring replan leads to the existing corrective yield/prepare/confirmation route, including its
111
+ separate Human gate; the option supplies no replacement authority, grant or permission to write
112
+ additional files. A conflicting existing decision cannot be overwritten.
113
+
114
+ The option's revision, Brief/Plan/HEAD and remediation event hashes describe the observation used
115
+ for the audit. They are not a new apply token or additional executor-enforced hash contract: the
116
+ existing executor checks its revision, current decision ordinal, audit independence and actor/token
117
+ preconditions. Refresh `next` and audit evidence before recording, including after a HEAD change
118
+ that does not change the Task revision. Never treat stale option output as authorization.
@@ -66,6 +66,32 @@ half of an atomic content-only Task context refresh in that Milestone. Standalon
66
66
  approval remains project-scoped. The contract does not add a generic delegation transition:
67
67
  outcome, success signal, acceptance, checks, discovery, and base branch remain immutable.
68
68
 
69
+ ## Full contract during an active Milestone
70
+
71
+ The human may request `milestone autonomy-prepare` / `milestone autonomy-grant` while a
72
+ Milestone is `active`, as well as before its initial execution. This supports first full
73
+ issuance or replacement after expiry/revocation without resetting the Milestone, altering
74
+ its Plan or completed Task evidence, or recreating its Worker. Planning, blocked, validating,
75
+ final-acceptance and terminal Milestones are not eligible for this route.
76
+
77
+ Preparation is read-only. It requires a coherent registered repository, a complete current
78
+ Plan and active Knowledge Map. Its MAC binds the status, revision, Plan, semantic scope,
79
+ principal, delegate, exact expiry (at most 72 hours), policy and previous authority state.
80
+ Show this complete contract and obtain a separate exact human confirmation. Never renew a
81
+ contract automatically or treat general delegated execution as permission to issue authority.
82
+
83
+ A still-valid full contract cannot be replaced. An explicitly revoked or expired contract
84
+ may be replaced using a freshly prepared MAC. The previous confirmed code cannot undo a
85
+ revocation. Exact retries retain the same contract/grant; an interrupted event-first write
86
+ can be completed only with its original matching confirmation. Issuance and milestone grant
87
+ revocation share a Milestone lock. History remains append-only.
88
+
89
+ `next` exposes optional `activeMilestoneAutonomyOptions` even when a linked Task is selected;
90
+ this does not change the immediate Task action or waive its credential/review/recovery gates.
91
+ A coexisting generic grant remains unchanged and does not gain membership evolution or atomic
92
+ context-refresh authority. The new full contract carries those existing bounded capabilities;
93
+ it never grants standalone Project Knowledge approval or a semantic scope change.
94
+
69
95
  ## Starting a delegate chat
70
96
 
71
97
  A grant does not start an agent and is not attached to a Codex chat automatically. Open a new
@@ -307,6 +307,14 @@ Task независимая PRA-классификация consumer как `runt
307
307
  one-Step runtime не требует искусственного predecessor. Это структурная admission-проверка, а не
308
308
  доказательство product truth и не реализация Step-validity authority P02.
309
309
 
310
+ Beta.13.1 делает эту authority prospective и Plan-bound. Markerless PRA, созданная до появления
311
+ production-edge contract, читается без ретроактивной проверки отсутствующих полей, но только пока и PRA,
312
+ и Task не заявляют новую authority. Обычная новая PRA и atomic corrective replan записывают hash-chained
313
+ marker `required-v1`; content-only knowledge rebind сохраняет production edges у native Task, а у
314
+ действительно legacy Task сохраняет markerless posture. Миграция или ручное переписывание state не нужны.
315
+ Граница доверия остаётся repository-local state: это не криптографическая защита от полного
316
+ привилегированного переписывания всей hash chain.
317
+
310
318
  Versioned observed-route matrix v2 связывает все 13 Signal-observed route classes с unique priority и
311
319
  одним exact production-transition witness либо real terminal observation на класс. Это class-level
312
320
  доказательство: action-level metadata отдельно различает `executable-witnessed`, `unwitnessed` и
@@ -455,7 +463,7 @@ Restart Docker Desktop требует отдельного разрешения
455
463
  # 10. Operational checklist
456
464
 
457
465
  - exact package version установлен, bundled gateway соответствует release и переустановлен;
458
- - handshake подтверждает `packageVersion=2.0.0-beta.13`, protocol 2, state schema 2 и beta.13
466
+ - handshake подтверждает `packageVersion=2.0.0-beta.13.10`, protocol 2, state schema 2 и beta.13
459
467
  capabilities;
460
468
  - routine observation начинается с компактного `status`; `status --full` запрашивается только для
461
469
  расследования, которому действительно нужна полная historical projection;
@@ -57,7 +57,7 @@ AGENTS.md
57
57
  -> doctor только как дополнительная диагностика
58
58
  ```
59
59
 
60
- Handshake beta.13 должен сообщать `packageVersion=2.0.0-beta.13`, `protocolVersion=2`,
60
+ Handshake beta.13.10 должен сообщать `packageVersion=2.0.0-beta.13.10`, `protocolVersion=2`,
61
61
  `stateSchemaVersion=2`, dependency DAG, initial Plan transaction, mechanical feasibility,
62
62
  Milestone autonomy, host-safe credential reference, failed-Step continuation transaction,
63
63
  cause-bound rolling refinement, structural production edge, compact status, reviewer runtime preflight,
@@ -168,8 +168,6 @@ base HEAD. Final acceptance выполняй только по exact eligible gr
168
168
  текущему MSA-code; иначе покажи полный requiredHumanGate и остановись.
169
169
  ```
170
170
 
171
- <!-- pagebreak -->
172
-
173
171
  ## 4.1. Что должно получиться до autonomy gate
174
172
 
175
173
  - Discovery без blocking unknowns;
@@ -282,6 +280,12 @@ effective scope той же Task только внутри затронутой
282
280
  requirements, acceptance или security boundary. Это structural admission: оно не доказывает product
283
281
  truth, не заменяет фактический check/review и не заявляет реализацию P02 Step-validity authority.
284
282
 
283
+ В beta.13.1 production-edge authority применяется prospective. Новые ordinary/corrective PRA получают
284
+ hash-chained marker `required-v1`. Markerless PRA и Task без production-edge fields считаются legacy и не
285
+ переписываются; content-only refresh сохраняет эту posture. Для native Task refresh обязан сохранить exact
286
+ `requiresProductionEdges`, `productionEdges[]` и строку edge в новом Plan artifact. Не редактируй state
287
+ вручную: после update следуй только fresh advertised reconcile/context-refresh route.
288
+
285
289
  # 9. Atomic context refresh
286
290
 
287
291
  Когда top-level `next.action` равен `task context-refresh`, нельзя сначала выполнять standalone
@@ -475,8 +479,8 @@ Task/project DGR. `dependencyBinding` для standalone handoff равен null.
475
479
 
476
480
  # 14. Итоговый checklist пользователя
477
481
 
478
- - beta.13 exact package и новый bundled gateway установлены; handshake показывает
479
- `packageVersion=2.0.0-beta.13`, protocol/state schema `2/2` и beta.13 capabilities;
482
+ - beta.13.10 exact package и новый bundled gateway установлены; handshake показывает
483
+ `packageVersion=2.0.0-beta.13.10`, protocol/state schema `2/2` и beta.13 capabilities;
480
484
  - новый Coordinator chat не является fork старого Milestone;
481
485
  - bootstrap DGR, если нужен, выдан отдельным exact human confirmation;
482
486
  - Discovery не materialized при blocking unknowns;
@@ -15,7 +15,7 @@ authority сами: mutating permission определяется runtime state
15
15
 
16
16
  | Параметр beta.13 | Значение |
17
17
  |---|---|
18
- | npm package | `codex-workflow-v2@2.0.0-beta.13` |
18
+ | npm package | `codex-workflow-v2@2.0.0-beta.13.10` |
19
19
  | protocolVersion | 2 |
20
20
  | stateSchemaVersion | 2 |
21
21
  | lifecycle epoch | 2 |
@@ -228,6 +228,13 @@ requirements, acceptance и security boundary. Отдельно независи
228
228
  Эти механизмы проверяют структурную форму и не утверждают product truth. Они не заменяют Plan Risk Audit,
229
229
  Milestone authorization, фактический check result или не реализованную Step-validity authority P02.
230
230
 
231
+ Beta.13.1 вводит prospective, Plan-bound compatibility boundary. Новые ordinary PRA и atomic corrective
232
+ replan связывают `structuralProductionEdgeAuthority=required-v1` с hash chain. Историческая markerless PRA
233
+ не получает новую семантику задним числом, если текущая Task также не содержит production-edge fields.
234
+ Content-only knowledge rebind сохраняет exact native fields и rendered edge, а для такой legacy Task
235
+ сохраняет markerless posture. Это устраняет необходимость state migration; repository-local state остаётся
236
+ доверенной границей и не защищает от полного привилегированного переписывания всей chain.
237
+
231
238
  # 9. C1 handoff и writer lease
232
239
 
233
240
  ## 9.1. Dependency binding
@@ -326,7 +333,7 @@ local reviewer внутри Codex App sandbox.
326
333
  | Повтор stable reviewer `causeId` с `planConflict=true` | Root-cause replan той же Task обязателен |
327
334
  | Похожий prose, номер попытки или reviewer cause без Plan conflict | Не создаёт replan authority |
328
335
  | Finding `route=fix` или route отсутствует | Продолжить ту же Task/Step независимо от attempt count |
329
- | Finding `route=replan` с exact Plan conflict | `task plan-set`; меняются только implementation Steps |
336
+ | Finding `route=replan` с exact Plan conflict, включая первый провал | Штатный corrective yield/replan; повторный run запрещён, меняются только implementation Steps |
330
337
  | `route=replan` без exact conflict | Невалидный review result, state не меняется |
331
338
  | Explicit `split-required` | Structural replacement stop |
332
339
  | Exact beta.11 attempt-four `stop-escalate` | Append-only Human-confirmed compatibility override |
@@ -662,6 +669,14 @@ beta.12.19 runner выдаёт `compatibilityMode=post-rebind-dirty-carryover`,
662
669
  обычный dependency-only transport, repository-local registration, Knowledge rebind, PRA,
663
670
  authorization, checks, Core commit и sealed review. Human approval не добавляется.
664
671
 
672
+ В beta.13.10 `task context-refresh` различает `authority=execution` и
673
+ `authority=planning-only`. Для начатой Task с failed Step, сохранённым stop-PRA и
674
+ проверенной историей Knowledge-only rebind безопасный content-only refresh обновляет
675
+ Knowledge-привязку и сохраняет отрицательный аудит. Task остаётся
676
+ `awaiting_execution_authorization`: разрешение исполнения не создаётся.
677
+ Далее требуется прежний corrective route, независимый аудит и точный human gate
678
+ замены Plan. Повреждённая история и неподходящий drift не дают этого режима.
679
+
665
680
  # 15. P04-A structural replacement boundary
666
681
 
667
682
  Command shape `task replacement-materialize` retained только для compatibility diagnostics. Любая попытка
@@ -760,7 +775,7 @@ dirty update.
760
775
  observed-route matrix/compact-status/reviewer-runtime tests, legacy compatibility regressions,
761
776
  `npm run test:signal-t10-check-support-e2e`, `npm run test:signal-remediation-e2e`,
762
777
  `npm run pack:check`, `npm run smoke:downstream`, `npm run plugin:check`, official plugin/skill validators,
763
- `npm run docs:pdf:check` и `npm run release:check` с exact `v2.0.0-beta.13` tag binding и append-only
778
+ `npm run docs:pdf:check` и `npm run release:check` с exact `v2.0.0-beta.13.10` tag binding и append-only
764
779
  real-agent lifecycle log. Candidate проверяется из clean source checkout; missing built module не должен
765
780
  превращаться в stack trace, а обязан быть детерминированно собран или диагностирован release gate.
766
781
 
@@ -0,0 +1,15 @@
1
+ # Updating while a strict Step review is pending
2
+
3
+ This narrow bridge supports source `codex-workflow-v2@2.0.0-beta.13.1` and the exact executing target package. It preserves the original completion commit, pending review chain, Plan and Knowledge authorization. It does not mark a review passed or bypass the following Knowledge refresh.
4
+
5
+ Use only a verified, exact target package runner with capability `pending-strict-review-dependency-bridge-v1`. The source preflight checks its package/build manifest and runtime file hashes. Never use a mutable version range or a global runner. The target runner exception before installation permits only the read-only source preflight below. Use the installed source runner for an explicitly returned stale lease repair.
6
+
7
+ 1. Run the external target runner: `update pending-review-source-preflight --repo <repo> --id <Task> --json`. Save the complete JSON response outside the repository. If `staleLeaseRepair` names exactly this Task, use the **installed source** `locks repair --id <Task>` and rerun source preflight. The lock manager rechecks expiry; a live or unrelated lease is not repairable through this bridge. Do not transport until the fresh result has `eligible=true` and no blockers.
8
+ 2. Retain the exact source receipt. Create one dependency transport commit on its `baseBranch` at `baseHead`, using a separate temporary worktree. Create one on `taskBranch` at `completionCommit`. Each commit must have one parent, change exactly `package.json` and `package-lock.json`, and change only the exact Workflow dependency entries from source to target. Preserve all product-owned manifest/lock fields independently on each branch. Do not merge, amend, reset, rebase, copy the base manifest over Task changes, or transport product work.
9
+ 3. Install the exact target package in the Task repository. Use its repository-local runner for all remaining commands. Run `status`, then `next`; it must advertise `update pending-review-dependency-recover`. Run `update pending-review-dependency-preflight --id <Task> --file <source-receipt.json>`. Require `eligible=true` and no blockers.
10
+ 4. Run `update pending-review-dependency-recover --id <Task> --expected-revision <source-task-revision> --file <source-receipt.json> --actor <coordinator> --reason <substantive-reason>`. Both plain preflight results and CLI `{ok:true,value:...}` receipts are accepted. The receipt is not authority: recovery reconstructs every source binding from canonical Task, artifacts, strict-review sidecars and Git parent commits. It checks clean checkout, all target version surfaces, exact base transport, and absence of any writer lease or pending transaction/Core operation again.
11
+ 5. Recovery atomically registers the Task dependency commit in existing dependency provenance and writes the hash-chained `pending-review-updates.jsonl` sidecar. Task schema 2 is unchanged. It increments the Task revision but preserves the original pending event, product completion SHA and Step evidence. Repeating recovery is rejected rather than creating duplicate authority.
12
+ 6. Run `status`, then `next`. Recover the exact advertised C1 writer credential if necessary. Generate a fresh `task step-review-packet`; use an independent external sealed reviewer and record the unchanged result with `task step-review-record`. The packet binds the original product commit and includes revalidated transport evidence; its repository seal binds the current dependency HEAD. Any later HEAD, base, Plan, evidence, packet, or seal change fails closed. Local nested review retains its original HEAD guard.
13
+ 7. Follow fresh `status` and `next` after review. Under the original eligible Milestone Autonomy Grant, execute the advertised `task context-refresh` for predeclared supporting-source additions and dependency manifest drift. Then continue to the next normal Step or final Task boundary. Do not substitute standalone approval or manually edit state.
14
+
15
+ A failed preflight is a stop for this bridge. Repair only a specifically documented obstruction, then rerun the read-only assessment; never edit the receipt to hide a blocker. A pending or corrupt transaction must be recovered through its ordinary exact route before retrying.
package/docs/release.md CHANGED
@@ -4,6 +4,262 @@ The npm package is `codex-workflow-v2` with public visibility. Consumers must pi
4
4
  an exact version. Stable compatibility covers the latest minor release of the current
5
5
  major only; older minors are unsupported unless a release note explicitly says otherwise.
6
6
 
7
+ ## beta.13.10: planning-only context refresh
8
+
9
+ A dependency update can stale Knowledge while a started Task retains a failed Step
10
+ and a stop-escalate Plan Risk Audit. Navigation and execution now share the verified
11
+ planning-recovery predicate. Safe content-only refresh returns `authority: planning-only`,
12
+ rebinds Knowledge, preserves the stopped audit and completed evidence, and leaves the
13
+ Task awaiting execution authorization. It never authorizes the stopped Plan.
14
+ The ordinary corrective decision, original Worker recovery, independent replacement
15
+ audit and exact human corrective-replan gate remain required.
16
+
17
+ The regression follows actual dependency transport and provenance recovery through
18
+ Core-generated navigation and the refresh executor to the corrective human gate.
19
+ Tampered history, stale revision, missing grant and write failure are rejected without
20
+ partial Task/Knowledge/Plan/audit updates. Unsupported stopped Tasks are not offered
21
+ an executable context refresh.
22
+
23
+ ## Prospective disposable-fixture bootstrap
24
+
25
+ For candidates after beta.13.9, release tests may initialize a disposable synthetic
26
+ fixture without requesting a live user's Knowledge approval for each candidate.
27
+ This does not change the completed beta.13.9 gate or reinterpret its evidence.
28
+ Production projects, including Signal, retain their existing human/delegation gates.
29
+
30
+ Run the repository-only `scripts/bootstrap-disposable-release-fixture.mjs` with
31
+ `--candidate <absolute tarball> --sha256 <exact SHA256> --version <exact version>`.
32
+ Use `--preflight` first. The tool accepts no repository, state-root or template
33
+ override: it creates fresh owned temporary roots, installs the verified candidate
34
+ with lifecycle scripts disabled, and initializes a fixed fixture with an immutable README and a mutable smoke.txt marker. It uses
35
+ the installed candidate's Core and explicit isolated state, following the existing
36
+ test-helper bootstrap pattern. No production credentials or grants are imported.
37
+ The same synthetic owner initializes a 24-hour fixture-project grant only for
38
+ `agent:disposable-release-worker`, limited to Task execution authorization and final
39
+ acceptance. Its confirmation is simulated and labelled accordingly. It grants no
40
+ Knowledge refresh, scope expansion or production access. Expiry requires a new
41
+ disposable run, not silent renewal. The fixed scenario must not modify Knowledge.
42
+
43
+ The receipt explicitly labels Knowledge consent as **simulated**. Core's stored
44
+ `authorizationMode: human` is test setup here, not evidence of an actual human
45
+ approval. Neither that state nor its receipt may be imported into a production
46
+ project or presented as production authorization. Candidate, template, repository
47
+ and state identities must accompany every downstream evidence record.
48
+
49
+ Synthetic lifecycle tests prove contract behavior, including approval rejection
50
+ and credential recovery. They do not prove the actual App writer/reviewer boundary.
51
+ The separate actual App gate remains required on the exact candidate: a live Worker
52
+ changes the fixed smoke.txt line `Release smoke: pending.` to `Release smoke: complete.`,
53
+ runs its declared check, and a separate App reviewer consumes a bound external-sealed
54
+ Step or Task packet, as advertised by Core. The minimum App smoke ends after the Worker records that review through
55
+ fresh `next` and obtains successful `status` then `next`; no additional human terminal
56
+ acceptance is imposed by this smoke. No new fixture product feature is required per release.
57
+ The App report must disclose the synthetic bootstrap and claim only the App behavior
58
+ actually observed; it must not claim real user consent. Prior failed attempts,
59
+ exact-candidate binding and the ordinary transcript validator remain mandatory.
60
+ This is a test evidence policy, not a runtime approval bypass or an expanded grant.
61
+
62
+ ## beta.13.9: failed-Step planning recovery after Knowledge rebind
63
+
64
+ A started Task can retain completed Steps and a failed guarded Step while a Knowledge
65
+ rebind supersedes its execution authorization. A truthful blocking Plan Risk Audit must
66
+ not require a false approval to reach corrective planning. This recovery uses the current
67
+ blocking audit as planning evidence and proves its unchanged safety baseline through
68
+ hash-checked Knowledge-only Plan history and the historical superseded authorization.
69
+ It never treats either record as current execution authority.
70
+
71
+ Fresh navigation can then advertise the existing independent corrective-decision route.
72
+ The ordinary corrective yield, independent replacement validation and risk audit, exact
73
+ human corrective-replan confirmation, and fresh execution authorization remain mandatory.
74
+ An ordinary `plan-set` cannot bypass that chain. `continue-fix` is not a valid decision
75
+ for this stopped planning posture; ordinary execution repair retains its existing choices.
76
+ The additive upstream-remediation route remains limited to genuinely unstarted Tasks.
77
+
78
+ Release evidence must exercise the complete callable recovery chain, including original
79
+ Worker credential replacement and yield, repeated Knowledge rebind, unchanged completed
80
+ Step and failed review evidence, and rejection of damaged Plan/audit/authorization history.
81
+
82
+ The exact beta.13.9 runner retains the consumed-carryover compatibility profile from
83
+ beta.13.6 with beta.13.9 as its pinned target. The source, ownership, lease, candidate
84
+ Plan, provenance and transaction checks are unchanged. Historical beta.13.7 and
85
+ beta.13.8 transcripts remain bound to their original targets.
86
+
87
+ ## beta.13.8: explain changes and continue active Milestones
88
+
89
+ Full autonomy can be issued during an active Milestone using an exact new human-confirmed
90
+ contract. Interrupted event-first issuance remains recoverable after expiry or revision change:
91
+ a fresh confirmation may supersede an inert missing grant, preserving its event and creating a
92
+ new grant identity. Known unpublished grant directories carry no authority; malformed state and
93
+ unknown incomplete delegations still fail closed.
94
+
95
+ The read-only `change explain` command separates execution context, external approval, semantic
96
+ scope, bounded check-support amendment, Plan correction, membership and context refresh. It
97
+ preserves the current Core route, including credential prerequisites and effective Step scope.
98
+ Its proposal hash is diagnostic evidence, not permission to apply a patch.
99
+
100
+ Chat dispatch records the observed child checkout and offers an advisory context check before
101
+ writes. Existing Workers are preserved; a parent repository path does not authorize writing
102
+ outside the actual child checkout. Model and reasoning selection remain task-specific.
103
+
104
+ The exact beta.13.8 runner retains the tested beta.13.6 consumed-carryover source
105
+ recovery profile with beta.13.8 as its pinned target. It does not admit a beta.13.7
106
+ source or a running Step; historical beta.13.7 transcript evidence remains separately
107
+ valid for its original target.
108
+
109
+ All ordinary release gates below apply to the exact versioned candidate. Historical failed
110
+ real-agent runs remain failed evidence; prior one-time release exceptions are not reused.
111
+ Signal deployment additionally requires a fresh safe update boundary, exact installed provenance
112
+ and verified continuation by the original Worker. This release does not waive external approval
113
+ or claim to prevent every future product failure.
114
+
115
+ ## Active Milestone autonomy contract issuance
116
+
117
+ The candidate extends full human-confirmed autonomy to an already active Milestone.
118
+ Release evidence must cover both initial active issuance and replacement after revocation
119
+ or expiry, without resetting Task state, changing membership/semantic scope, or replacing
120
+ an existing Worker. A generic delegation is neither upgraded nor revoked implicitly.
121
+
122
+ The MAC includes the previous contract/grant snapshot so a revoked confirmation cannot
123
+ restore authority. Exact successful and interrupted-write retries must preserve identity;
124
+ legacy event-first records retain their bounded pre-execution recovery. Shared Milestone
125
+ exclusion protects issuance, revocation and scope/status transitions.
126
+
127
+ Acceptance must continue through same-Worker execution and guarded atomic context refresh
128
+ using the new full contract, with the old grant rejected without Task/Knowledge mutations.
129
+ Include read-only preparation, stale bindings, valid-contract replacement refusal, malformed
130
+ actors/expiry, unavailable Knowledge and disallowed Milestone states. Optional Task-first
131
+ navigation must not replace the current execution/recovery action. Run the full test suite,
132
+ release checks, downstream package smoke and plugin validation on the final candidate.
133
+
134
+ ## beta.13.7 candidate: retire completed carryover authority
135
+
136
+ After a recovered Step passed review, its recorded dirty-work permission still
137
+ overrode the next Step's route. A later repeated mechanical failure therefore
138
+ returned `doctor` instead of ordinary Plan replacement. The completed record is
139
+ now retained as history and consumed only after its completion evidence, exact
140
+ PRA, required strict review and Git history are verified. Active or damaged
141
+ bindings continue to fail closed. A corrective claim must belong to the same
142
+ Worker who performed the terminal corrective yield.
143
+
144
+ The exact published beta.13.7 read-only compatibility preflight can guide a
145
+ stranded beta.13.6 source through its existing Plan replacement and original-Worker
146
+ handoff commands before transport. It does not mutate state, authorize execution,
147
+ or waive approval gates. Task and base transport must preserve all product bytes
148
+ and change only the exact Workflow dependency. See the packaged gateway skill for
149
+ the stage-specific bindings and mandatory source status/next readbacks.
150
+
151
+ Release evidence must include the published beta.13.6 runtime reproducing the
152
+ later-Step blocker, source Plan/PRA/authorization/handoff recovery, dependency
153
+ transport, target provenance/context refresh, same-Worker execution and strict
154
+ review. A route that reaches only `plan-set` is not sufficient. Prior one-time
155
+ release-gate exceptions do not authorize this candidate.
156
+
157
+ The trusted lifecycle harness must record each compatibility invocation and its
158
+ terminal observation. For source `task plan-set`, record `inputBinding` computed
159
+ from the actual files passed to that command: `candidatePlanHash` is the rendered
160
+ Plan hash, and `candidateInputHash`/`riskAuditInputHash` are SHA-256 of recursively
161
+ key-sorted canonical JSON inputs. Do not copy these values from an approval receipt
162
+ without checking the executed inputs. The validator checks this binding, the resulting
163
+ Plan hash, original-Worker ownership, ordered source status/next checkpoints, live-lease
164
+ waiting, exact stale repair, and a fresh preflight before transport.
165
+
166
+ ## beta.13.6 candidate: preserve work across root-cause replan
167
+
168
+ A repeated mechanical failure can legitimately yield the same Task to a replacement
169
+ Plan while preserving uncommitted implementation. beta.13.5 authorizes that Plan but
170
+ then rejects its planned Step because the checkout is dirty. Reaching planning or
171
+ reauthorization therefore does not prove recovery.
172
+
173
+ Acceptance for this candidate must exercise the complete repeated mechanical failure,
174
+ automatic C1 yield, semantic replacement Plan, independent PRA, authorization, and
175
+ same-Worker execution sequence with the original dirty bytes. The carryover assessment
176
+ must bind the source remediation cycle, verified historical and current Plans, current
177
+ PRA and authorization, completed evidence, HEAD, file set and content hash. Every carried
178
+ path must already belong to the replacement Step and remain outside forbidden scope;
179
+ carryover never expands scope or forgives unrelated work.
180
+
181
+ Navigation and execution must use the same assessment. Changed bytes, paths, HEAD,
182
+ Plan artifacts, audit/authorization evidence or ambiguous source history must fail
183
+ closed before execution. Tests must continue beyond successful start through checks,
184
+ Core commit and strict review, and reject each material binding mismatch.
185
+
186
+ The stranded-source update must additionally prove a read-only compatibility preflight,
187
+ no writer lease or pending Core operation, exact coherent source/target versions,
188
+ dependency-only Task and Milestone-base commits, registration of the Task dependency
189
+ commit after verification of the base transport, and unchanged product bytes. It must preserve the original Task and Worker and must not
190
+ rely on manual product commits, stash/reset, installed-code edits or state-file edits.
191
+
192
+ All ordinary release gates below apply. The user's one-time beta.13.5 CI-based release
193
+ exception is consumed and is not evidence or an exception for this candidate.
194
+
195
+ ## beta.13.5 preventive Plan correction before execution
196
+
197
+ A newly discovered implementation Plan defect can require changing unfinished scope
198
+ before its next Step runs. The preventive route withdraws the current execution
199
+ authorization under an independent blocking Plan Risk Audit, then requires a corrected
200
+ Plan, fresh independent audit and ordinary execution authorization. It must preserve
201
+ the same Task, completed Step definitions and evidence, requirements, acceptance,
202
+ review history and grants. It must not manufacture a failed run to unlock planning.
203
+
204
+ Initial eligibility is deliberately limited to a coherent, clean, idle `ready` Task
205
+ with no C1 ownership or writer lease. Stale bindings, existing ownership, incomplete
206
+ review, unexpected Git history and damaged state must fail closed. Regression gates
207
+ must prove authority withdrawal and actual same-Task continuation, plus rejection of
208
+ attempts to change the objective, discard completed evidence or weaken guarded scope.
209
+
210
+ Replacement Plan publication commits Task state, the current and immutable Plan artifacts,
211
+ and its independent audit atomically. Pending correction blocks C1 handoff and dependency
212
+ transport until the corrected Plan can be authorized. Proof bindings retain each Step,
213
+ failure mode and evidence association; revised proof prose requires an independent audit
214
+ with an explicit rationale. Core does not determine whether natural-language proof claims
215
+ are semantically stronger.
216
+
217
+ External sealed-review CLI help specifies the complete envelope, including its nested
218
+ review. Lifecycle validation admits one bounded expired-credential recovery between a
219
+ review-input syntax refusal and retry, with unchanged sealed evidence and fresh sequential
220
+ status/next bindings; unrelated or unbound mutations remain invalid.
221
+
222
+ ## beta.13.4 candidate: continuation after accepted corrective Plan
223
+
224
+ This correction is included in beta.13.5; beta.13.4 was not published separately.
225
+
226
+ The beta.13.3 first-conflict recovery stopped too early: after a replacement Plan
227
+ was accepted and authorized, navigation still applied the old Plan's conflict to
228
+ the now-planned Step. Release acceptance for this correction must exercise the
229
+ complete same-Task sequence through fresh Plan Risk Audit, execution authorization,
230
+ the existing Worker claim, actual Step execution, and another failed review.
231
+ Reaching `task plan-set` alone is not sufficient evidence.
232
+
233
+ An accepted semantic replacement must be distinguished from a Knowledge-only
234
+ rebind using verified Plan artifacts and audit/review bindings. Historical failures
235
+ and their global ordinals remain append-only. A missing or damaged artifact must
236
+ not silently acknowledge a conflict, and a context refresh must not reopen execution.
237
+
238
+ ## beta.13.3 explicit Plan conflict recovery
239
+
240
+ A first independently recorded reviewer `route=replan` with a validated Plan conflict
241
+ blocks current execution immediately and exposes corrective replan. Historical
242
+ rolling-cause classification remains unchanged; valid older histories are not
243
+ reclassified as corrupt. Ordinary new fix findings still continue in the same Task.
244
+ The failure transaction yields C1 and releases the exact writer lease. An older
245
+ failed Task with a retained C1 claim follows credential recovery and
246
+ `task corrective-yield` before planning; it cannot run or change its Plan while
247
+ the claim remains. Recovery binds the validated remediation event and preserves
248
+ the Task, review evidence, and existing worker identity.
249
+ The release also includes durable App dispatch and explicit role/phase model selection;
250
+ see the packaged `references/chat-dispatch.md`.
251
+
252
+ ## beta.13.2 review recovery gate
253
+
254
+ The patch preserves protocol 2 and canonical entity schema 2. In addition to the
255
+ ordinary release gates, `release:check` executes the large-diff, pending-review
256
+ update, supporting-source refresh and Task guard regressions. Acceptance requires
257
+ complete external-sealed Step and Task packets above 2 MiB, explicit bounded
258
+ failure above the Git output limit, exact credential recovery before Knowledge
259
+ refresh, and a Signal-shaped delegated update followed by actual review,
260
+ context refresh and the next ordinary Step. A source preflight alone is not
261
+ recovery completion. See `beta13.2-signal-review-recovery.md`.
262
+
7
263
  ## Release gate
8
264
 
9
265
  Before tagging a release:
@@ -52,8 +308,8 @@ surface and fails unless all of these release contracts remain present:
52
308
  adds C1 yield before root-cause replan; the Signal-shaped E2E continues through recovery, the next
53
309
  ordinary Step, Task completion, and next-Task dispatch;
54
310
  - five distinct or unclassified review findings continue in the same Task without a numeric cap,
55
- while root-cause replan requires either a repeated normalized mechanical failure or the same
56
- stable external reviewer `causeId` with `planConflict=true`;
311
+ while repeated normalized mechanical failures still require root-cause replan; a current
312
+ explicit external reviewer Plan conflict requires replan immediately, without a synthetic retry;
57
313
  - a transitive same-component check owner may refine the same Task only under the unchanged semantic
58
314
  boundary; for a multi-Step `runtime-composition` consumer the independent PRA classification,
59
315
  not a planner opt-in, requires an edge from a transitive owner to an exact executable consumer
@@ -83,6 +339,15 @@ surface and fails unless all of these release contracts remain present:
83
339
  coordinator-replacement facts without claiming Codex App scheduling, chat mutation, consent, or
84
340
  atomic App effects.
85
341
 
342
+ For beta.13.1 the same gate additionally verifies the post-publish compatibility boundary. A
343
+ markerless pre-authority PRA whose Task has no production-edge fields remains readable and does not
344
+ turn an intact beta.12 state into `STATE_CORRUPT`. Both ordinary and atomic corrective-replan PRA
345
+ writers persist `structuralProductionEdgeAuthority=required-v1`; that hash-chained marker keeps the
346
+ current-Plan structural gate fail-closed even if Task fields are removed. An audit belonging to an
347
+ older Plan is never revalidated against a later Plan's Step/edge graph. This is not signed
348
+ provenance: a privileged rewrite of the complete local Task and self-hashed chain remains outside
349
+ the local-state trust model.
350
+
86
351
  For beta.12.19, the release gate also relies on `npm run release:check` to fail if:
87
352
 
88
353
  - canonical entity schema 2 shapes drift;