codex-workflow-v2 2.0.0-beta.12.8 → 2.0.0-beta.12.9

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 (36) hide show
  1. package/README.md +3 -1
  2. package/dist/src/alpha6/review.d.ts +6 -0
  3. package/dist/src/alpha6/review.js +12 -0
  4. package/dist/src/alpha6/review.js.map +1 -1
  5. package/dist/src/cli.js +33 -0
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/contracts.d.ts +37 -1
  8. package/dist/src/dependency-provenance.d.ts +2 -2
  9. package/dist/src/dependency-provenance.js +21 -5
  10. package/dist/src/dependency-provenance.js.map +1 -1
  11. package/dist/src/git.js +1 -0
  12. package/dist/src/git.js.map +1 -1
  13. package/dist/src/historical-step-provenance.d.ts +20 -0
  14. package/dist/src/historical-step-provenance.js +111 -0
  15. package/dist/src/historical-step-provenance.js.map +1 -0
  16. package/dist/src/state/corrective-replan-executor.js +5 -0
  17. package/dist/src/state/corrective-replan-executor.js.map +1 -1
  18. package/dist/src/version.d.ts +1 -1
  19. package/dist/src/version.js +1 -1
  20. package/dist/src/workflow.d.ts +6 -1
  21. package/dist/src/workflow.js +195 -8
  22. package/dist/src/workflow.js.map +1 -1
  23. package/docs/pdf/codex-workflow-v2-architecture-ru.pdf +0 -0
  24. package/docs/pdf/codex-workflow-v2-chat-only-guide-ru.pdf +0 -0
  25. package/docs/pdf/codex-workflow-v2-technical-reference-ru.pdf +0 -0
  26. package/docs/pdf/sources/codex-workflow-v2-architecture-ru.md +16 -6
  27. package/docs/pdf/sources/codex-workflow-v2-chat-only-guide-ru.md +24 -28
  28. package/docs/pdf/sources/codex-workflow-v2-technical-reference-ru.md +33 -13
  29. package/docs/release.md +7 -1
  30. package/docs/updating-existing-project.md +30 -0
  31. package/docs/validation-report.md +75 -74
  32. package/package.json +1 -1
  33. package/plugins/codex-workflow-gateway/.codex-plugin/plugin.json +1 -1
  34. package/plugins/codex-workflow-gateway/references/protocol.md +9 -0
  35. package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +25 -0
  36. package/schemas/task.schema.json +43 -0
@@ -1,10 +1,10 @@
1
1
  ---
2
- title: Codex Workflow V2: архитектура beta.12.8
2
+ title: Codex Workflow V2: архитектура beta.12.9
3
3
  subtitle: Источники истины, lifecycle, роли, delegation, зависимости Tasks и границы доверия
4
4
  part: Часть 1 из 3 | Архитектура
5
5
  document_version: 2.0
6
- date: 29 августа 2026
7
- subject: Архитектура и границы Codex Workflow V2 beta.12.8
6
+ date: 30 августа 2026
7
+ subject: Архитектура и границы Codex Workflow V2 beta.12.9
8
8
  ---
9
9
 
10
10
  # 1. Назначение и граница системы
@@ -18,7 +18,7 @@ Codex Workflow V2 - локальный state machine поверх Codex App, Git
18
18
  Система рассчитана на одного пользователя и одну машину. Она не предоставляет distributed locking,
19
19
  криптографическую идентификацию actor string или безопасную синхронизацию state между компьютерами.
20
20
 
21
- ## 1.1. Что beta.12.8 гарантирует
21
+ ## 1.1. Что beta.12.9 гарантирует
22
22
 
23
23
  - exact project-local npm package и совместимый handshake до lifecycle действий;
24
24
  - Discovery до materialization Task или Milestone;
@@ -35,8 +35,10 @@ Codex Workflow V2 - локальный state machine поверх Codex App, Git
35
35
  worktree и HEAD сохраняются, stale completion authority снимается, та же Task возвращается в planning.
36
36
  - bounded compatibility recovery, если beta.12.6 после этого recovery ошибочно rebind-нула отвергнутый
37
37
  Plan: exact dirty bytes сохраняются до нового consolidated Step, а Knowledge refresh не отменяет `plan-set`.
38
+ - corrective Plan сохраняет authority исключённых completed Step commits, а beta.12.9 bounded recovery
39
+ исправляет уже stranded state только при passed strict review и прежнем hash-bound final acceptance.
38
40
 
39
- ## 1.2. Что beta.12.8 не гарантирует
41
+ ## 1.2. Что beta.12.9 не гарантирует
40
42
 
41
43
  - правильность продуктовой идеи или автоматически выбранного provider Task;
42
44
  - semantic sufficiency Plan, если точные факты нельзя доказать поддерживаемым analyzer;
@@ -283,6 +285,14 @@ Task в `needs_fix`; stale Knowledge можно reconciliate/approve, но fresh
283
285
  всем dirty set. `task run` принимает carryover лишь при exact HEAD/path/hash match, после чего Step
284
286
  проходит обычные checks, Core-owned commit и strict review.
285
287
 
288
+ beta.12.9 закрывает исторический provenance gap corrective replan. Новые replan transitions автоматически
289
+ переносят evidence commits исключённых Steps в `invalidatedStepCommits`. Для уже существующего gap Core
290
+ требует один неожиданный commit, complete passed strict-review chain, verified reviewer attestation и
291
+ совпадающий прежний final acceptance. Если пакет уже зарегистрирован, recovery меняет только Task state.
292
+ Если exact beta.12.9 dependency commit ещё находится в HEAD, отдельный update compatibility route
293
+ регистрирует dependency и historical authority одной revision. Оба пути сохраняют dirty bytes текущего
294
+ Step, не переписывают Git и завершаются fresh обычным `step-complete` flow.
295
+
286
296
  Docker socket `EPERM` в sandbox не является доказательством сломанного daemon. Gateway один раз
287
297
  повторяет exact health probe или Plan check с sandbox escalation без расходования remediation attempt.
288
298
  Restart Docker Desktop требует отдельного разрешения и допустим только после escalated daemon failure.
@@ -292,7 +302,7 @@ Restart Docker Desktop требует отдельного разрешения
292
302
  # 10. Operational checklist
293
303
 
294
304
  - exact package version установлен, bundled gateway соответствует release и переустановлен;
295
- - handshake подтверждает protocol 2, state schema 2 и beta.12.8 capabilities;
305
+ - handshake подтверждает protocol 2, state schema 2 и beta.12.9 capabilities;
296
306
  - каждый mutation следует свежему `status -> next` и exact option contract;
297
307
  - Docker permission failure сначала классифицируется как sandbox boundary, а не как infra retry;
298
308
  - semantic unknowns и human gates не маскируются delegation;
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  title: Codex Workflow V2: delegated chat-only guide
3
- subtitle: Актуальный beta.12.8 путь от нового Discovery до принятого Milestone без ручного CLI
3
+ subtitle: Актуальный beta.12.9 путь от нового Discovery до принятого Milestone без ручного CLI
4
4
  part: Часть 2 из 3 | Практика
5
5
  document_version: 2.0
6
- date: 29 августа 2026
7
- subject: Практическое руководство по delegated Discovery и Milestone в Workflow V2 beta.12.8
6
+ date: 30 августа 2026
7
+ subject: Практическое руководство по delegated Discovery и Milestone в Workflow V2 beta.12.9
8
8
  ---
9
9
 
10
- # 1. Рабочая модель beta.12.8
10
+ # 1. Рабочая модель beta.12.9
11
11
 
12
12
  Пользователь работает в одном Codex Project и формулирует продуктовый outcome. Coordinator выполняет
13
13
  CLI, создаёт отдельные Task/Reviewer chats и ведёт supervision loop. Workflow Core остаётся authority
@@ -40,7 +40,7 @@ Blocking unknown, scope change, grant issuance или unrecoverable integrity co
40
40
  # 2. Подготовка проекта перед новым Discovery
41
41
 
42
42
  1. Убедитесь, что checkout чистый и выбран правильный repository root.
43
- 2. Установите beta.12.8 как точную devDependency после публикации release.
43
+ 2. Установите beta.12.9 как точную devDependency после публикации release.
44
44
  3. Обновите и переустановите bundled `codex-workflow-gateway` этого release.
45
45
  4. Проверьте, что declared и installed package versions равны.
46
46
  5. Запустите новый Coordinator chat, не fork старого Milestone conversation.
@@ -56,7 +56,7 @@ AGENTS.md
56
56
  -> doctor только как дополнительная диагностика
57
57
  ```
58
58
 
59
- Handshake beta.12.8 должен сообщать `packageVersion=2.0.0-beta.12.8`, `protocolVersion=2`,
59
+ Handshake beta.12.9 должен сообщать `packageVersion=2.0.0-beta.12.9`, `protocolVersion=2`,
60
60
  `stateSchemaVersion=2`, dependency DAG, initial Plan transaction, mechanical feasibility,
61
61
  Milestone autonomy и structural replacement disabled capabilities.
62
62
 
@@ -116,7 +116,7 @@ delegate, scope, transitions и expiry. DGR передаётся только е
116
116
  ```text
117
117
  НОВЫЙ COORDINATOR CHAT
118
118
 
119
- Проведи новый Milestone через Codex Workflow V2 beta.12.8 в delegated режиме.
119
+ Проведи новый Milestone через Codex Workflow V2 beta.12.9 в delegated режиме.
120
120
  Repository: <ABSOLUTE-REPOSITORY-ROOT>.
121
121
  Milestone ID: AUTO.
122
122
  Delegate actor: agent:milestone-coordinator.
@@ -304,6 +304,7 @@ Task chat записывает его только при совпадении p
304
304
  | `split-required` | Stop: `STRUCTURAL_REPLACEMENT_REQUIRED`, никаких replacement writes |
305
305
  | Старая версия + active downstream proof блокируют update | Только beta.12.6 exact dependency commits и advertised `update downstream-proof-dependency-recover` |
306
306
  | После downstream recovery beta.12.6 вернула отвергнутый Plan через Knowledge rebind | Только beta.12.7 replan update bridge, затем recovery и новый consolidated Plan той же Task |
307
+ | Corrective Plan потерял authority ранее принятого Step commit | Только advertised beta.12.9 historical-Step preflight/recovery; без rebase/reset и без новой Task |
307
308
  | Exact beta.11 attempt-four `stop-escalate` | Только advertised prepare, затем отдельный Human-confirmed apply; исходный stop сохраняется |
308
309
  | Любой другой explicit `stop-escalate` | Terminal user attention |
309
310
  | Stale dependency binding | Новый handoff/claim только по fresh `next` |
@@ -323,32 +324,26 @@ beta.12.6 и требуйте от fresh `next` `update downstream-proof-depende
323
324
  binding dirty set. Recover регистрирует только dependency HEAD; следующий fresh `next` должен вернуть
324
325
  обычный `task downstream-proof-recover`. Любой иной diff/history/dirty path/lease означает stop.
325
326
 
326
- Для exact stranded shape после уже выполненного beta.12.6 recovery сначала запустите новой версией
327
- read-only `update downstream-proof-replan-update-preflight`. Продолжайте только при `eligible=true`,
328
- source `2.0.0-beta.12.6`, exact revision/HEAD, ожидаемых dirty paths/hash и пустых blockers. Затем
329
- перенесите beta.12.7 двумя dependency-only commits на base и Task branch, установите пакет и следуйте
330
- fresh `next` через `update downstream-proof-replan-dependency-recover` и
331
- `task downstream-proof-replan-recover`. После обязательного Knowledge reconcile/approve fresh `next`
332
- должен остаться на `task plan-set`, а не resurrect старый Plan. Новый Step обязан один владеть всем
333
- сохранённым dirty set; `task run` допустим только при `downstreamProofCarryover.state=validated`.
327
+ Для beta.12.9 historical-Step blocker обновите base в отдельном worktree и Task branch двумя commits
328
+ только package/lock. После install продолжайте лишь при advertised `update historical-step-dependency-recover`
329
+ и preflight, связавшем HEAD/parent, passed+accepted historical SHA, Plan/Step, dirty hash и отсутствие lease.
330
+ Recover сохраняет product bytes; затем обязательны `status -> next -> task step-complete`. Если package
331
+ уже зарегистрирован, используйте advertised `task historical-step-provenance-preflight/recover`.
332
+
333
+ Для exact beta.12.6 stranded-replan shape сначала нужен eligible read-only source preflight с exact
334
+ revision/HEAD/dirty hash. Затем два beta.12.7 dependency-only commits и advertised dependency/replan
335
+ recoveries. После Knowledge refresh `next` обязан остаться на `task plan-set`; новый единый Step должен
336
+ владеть всем dirty set, а `task run` требует `downstreamProofCarryover.state=validated`.
334
337
 
335
338
  Ошибка Docker socket/CLI `EPERM`, `operation not permitted` или `permission denied` в sandbox не считается
336
339
  падением daemon и не расходует retry. Повторите exact read-only probe или Plan check один раз с sandbox
337
340
  escalation. Не перезапускайте Docker Desktop и не меняйте image без отдельного разрешения и подтверждённого
338
341
  escalated daemon failure.
339
342
 
340
- Если после применённого stop override `next` рекламирует delegated `task context-refresh` или
341
- `update dependency-provenance-recover`, выполните только этот advertised atomic/recovery переход и
342
- снова запросите `status -> next`. Таких механических refresh/update циклов может быть несколько.
343
- Продолжайте attempt 4 только при `stopOverrideContextRebind.state=validated`. При одновременном
344
- `writerCredentialRecovery.action=task writer-credential-replace` сначала восстановите credential
345
- точного claimant-актора. `doctor`, semantic Plan change, разрыв rebind/audit chain или HEAD commit без
346
- точного dependency-provenance record означают stop, а не ручной обход.
347
-
348
- Если advertised navigation записала dependency provenance после последнего context-refresh audit,
349
- продолжайте только когда fresh `next` сам вернул `task run`. Core обязан доказать, что каждый такой
350
- recovery объясняет ровно один дополнительный Task revision; простое `revision >=` не является
351
- authority.
343
+ После stop override выполняйте только advertised context/dependency recoveries и каждый раз повторяйте
344
+ `status -> next`; attempt 4 требует `stopOverrideContextRebind.state=validated`. Lost credential
345
+ восстанавливает только advertised exact claimant route. Semantic drift, broken chain, необъяснённый HEAD
346
+ или revision означают stop; продолжение разрешено только когда fresh `next` сам вернул `task run`.
352
347
 
353
348
  # 12. Milestone final acceptance
354
349
 
@@ -367,7 +362,7 @@ Task/project DGR. `dependencyBinding` для standalone handoff равен null.
367
362
 
368
363
  # 14. Итоговый checklist пользователя
369
364
 
370
- - beta.12.8 exact package и новый bundled gateway установлены;
365
+ - beta.12.9 exact package и новый bundled gateway установлены;
371
366
  - новый Coordinator chat не является fork старого Milestone;
372
367
  - bootstrap DGR, если нужен, выдан отдельным exact human confirmation;
373
368
  - Discovery не materialized при blocking unknowns;
@@ -380,5 +375,6 @@ Task/project DGR. `dependencyBinding` для standalone handoff равен null.
380
375
  - downstream predecessor recovery, если рекламировался, сохранил worktree и завершился новым Plan authority;
381
376
  - active-proof package bridge, если понадобился, зарегистрировал только exact dependency HEAD перед recovery;
382
377
  - stranded-replan bridge, если понадобился, завершился новым Plan и полным Step checks/review, а не только сменой navigation;
378
+ - historical-Step recovery, если рекламировался, сохранил exact accepted commit и довёл текущий Step до обычного `step-complete` без history rewrite;
383
379
  - split-required остановился без replacement mutations;
384
380
  - Milestone validation и final acceptance связаны с текущим clean base HEAD.
@@ -1,10 +1,10 @@
1
1
  ---
2
- title: Codex Workflow V2: технический справочник beta.12.8
2
+ title: Codex Workflow V2: технический справочник beta.12.9
3
3
  subtitle: Protocol 2, state schema 2, transactions, credentials, dependency authority, review и recovery
4
4
  part: Часть 3 из 3 | Technical reference
5
5
  document_version: 2.0
6
- date: 29 августа 2026
7
- subject: Технический контракт Codex Workflow V2 beta.12.8
6
+ date: 30 августа 2026
7
+ subject: Технический контракт Codex Workflow V2 beta.12.9
8
8
  ---
9
9
 
10
10
  # 1. Runtime contract
@@ -13,9 +13,9 @@ Workflow V2 предоставляет локальные revisioned transitions
13
13
  и `value` либо структурированную ошибку с `code`, `message` и `details`. Chat, PDF и gateway не создают
14
14
  authority сами: mutating permission определяется runtime state и свежим `next`.
15
15
 
16
- | Параметр beta.12.8 | Значение |
16
+ | Параметр beta.12.9 | Значение |
17
17
  |---|---|
18
- | npm package | `codex-workflow-v2@2.0.0-beta.12.8` |
18
+ | npm package | `codex-workflow-v2@2.0.0-beta.12.9` |
19
19
  | protocolVersion | 2 |
20
20
  | stateSchemaVersion | 2 |
21
21
  | lifecycle epoch | 2 |
@@ -37,7 +37,7 @@ Gateway выполняет:
37
37
  5. вызов только package-local `dist/src/cli.js --repo <root>`;
38
38
  6. `gateway handshake` до lifecycle действий.
39
39
 
40
- Ключевые beta.12.8 capabilities:
40
+ Ключевые beta.12.9 capabilities:
41
41
 
42
42
  | Группа | Capabilities |
43
43
  |---|---|
@@ -46,7 +46,7 @@ Gateway выполняет:
46
46
  | Task planning | Plan Risk Audit, proof obligations, mechanical feasibility |
47
47
  | C1 | handoff sidecar/bundle, derived Worker actor, credential replacement, Human-gate lease release |
48
48
  | Reviews | strict reviewer, Step strict review, continuable remediation, evidence-bound fix/replan routing |
49
- | Recovery | Task-local dependency provenance, plan integrity, downstream-proof predecessor invalidation, remediation mode, legacy stop override, append-only stop-rebind chain, corrective yield/replan journals |
49
+ | Recovery | Task-local dependency provenance, historical Step provenance, plan integrity, downstream-proof predecessor invalidation, remediation mode, legacy stop override, append-only stop-rebind chain, corrective yield/replan journals |
50
50
  | Replacement | `structural-task-replacement-disabled-v1` |
51
51
 
52
52
  Handshake incompatibility прекращает работу. Запуск global package, `latest`, mutable range или соседней
@@ -381,6 +381,26 @@ fresh `next` рекламирует lease-bound `task downstream-proof-recover`
381
381
  remainder и пройти fresh Plan Risk Audit и execution authorization. Unrelated/non-predecessor file,
382
382
  strict-review evidence, unregistered commit, branch mismatch или damaged sidecar возвращают `doctor`.
383
383
 
384
+ # 13.3. beta.12.9 historical Step provenance
385
+
386
+ Corrective replan теперь сохраняет evidence commits Steps, исключённых replacement Plan, в
387
+ `invalidatedStepCommits`. Это предотвращает новый unregistered-history blocker без переноса завершённого
388
+ Step в новый Plan.
389
+
390
+ Для уже существующего stranded state fresh `next` допускает только один из двух bounded routes:
391
+
392
+ - `task historical-step-provenance-preflight/recover`, если beta.12.9 dependency HEAD уже зарегистрирован;
393
+ - `update historical-step-dependency-preflight/recover`, если dependency-only beta.12.9 commit ещё
394
+ является единственным unregistered HEAD.
395
+
396
+ Core требует один active Step, dirty paths только в его `allowedWrites`, отсутствие leases/transactions,
397
+ ровно один omitted product commit, полный hash-valid strict Step Review с `passed`, verified reviewer
398
+ attestation и прежний hash-bound `final_acceptance` того же Plan. Update-route дополнительно связывает
399
+ exact `HEAD^`/`HEAD`, package/version surfaces и SHA-256 dirty worktree. Recovery не переписывает Git,
400
+ не меняет product bytes и не возвращает старый Step в Plan; он записывает historical authority и, для
401
+ update-route, dependency provenance в одной Task revision. Fresh `status -> next` после transition
402
+ должен вернуть обычный credential/`task step-complete` flow текущего Step.
403
+
384
404
  # 14. P04-A structural replacement boundary
385
405
 
386
406
  Command shape `task replacement-materialize` retained только для compatibility diagnostics. Любая попытка
@@ -443,12 +463,12 @@ Docker socket/CLI `EPERM`, `operation not permitted` или `permission denied`
443
463
  После каждой successful mutation обязателен sequential `status`, затем fresh `next`. Failed status/next
444
464
  не разрешает direct mutation. Syntax help read-only и не заменяет navigation authority.
445
465
 
446
- # 18. Public command surface beta.12.8
466
+ # 18. Public command surface beta.12.9
447
467
 
448
468
  | Область | Actions |
449
469
  |---|---|
450
470
  | System | `doctor`, `status`, `next`, `gateway handshake`, `locks` |
451
- | Update | `preflight`, `rescue-preflight`, dependency provenance, downstream-proof dependency bridge, downstream-proof replan update/dependency bridge |
471
+ | Update | `preflight`, `rescue-preflight`, dependency provenance, historical-Step dependency bridge, downstream-proof dependency bridge, downstream-proof replan update/dependency bridge |
452
472
  | Project memory | `scan`, `show`, `status`, `approve`, `reconcile` |
453
473
  | Delegation | `prepare`, `grant`, `list`, `show`, `revoke` |
454
474
  | Graph | `prepare`, `status`, `refresh-request`, `bind`, `fallback` |
@@ -458,7 +478,7 @@ Docker socket/CLI `EPERM`, `operation not permitted` или `permission denied`
458
478
  | Task execution | `start`, `run`, `step-complete`, `submit`, `result-set`, `accept`, `sync-base`, `merge`, `merge-confirm` |
459
479
  | C1 | `handoff[-prepare/-replace/-show]`, `claim`, `writer-credential-replace`, `handback[-create]` |
460
480
  | Review | review/step-review packet, launch, sealed record и record actions |
461
- | Corrective | decision/recovery, plan-integrity, downstream-proof-recover/replan-recover, remediation-mode, stop-override prepare/apply, yield и corrective-replan actions |
481
+ | Corrective | decision/recovery, plan-integrity, historical-step-provenance preflight/recover, downstream-proof-recover/replan-recover, remediation-mode, stop-override prepare/apply, yield и corrective-replan actions |
462
482
  | Replacement | `replacement-materialize` retained, но всегда disabled в P04-A |
463
483
 
464
484
  Exact options берутся из fresh `next`; command help используется только когда
@@ -468,10 +488,10 @@ Exact options берутся из fresh `next`; command help используе
468
488
 
469
489
  Перед package update project-local `update preflight` должен вернуть `safe=true`: clean checkout, нет
470
490
  running Step и active/stale writer lease. Исключения — документированный alpha.7 rescue, beta.12.6
471
- active-downstream-proof bridge и beta.12.7 exact stranded-replan bridge; все они fail-closed и не дают
472
- общего разрешения dirty update.
491
+ active-downstream-proof bridge, beta.12.7 exact stranded-replan bridge и beta.12.9 historical-Step
492
+ dependency bridge; все они fail-closed и не дают общего разрешения dirty update.
473
493
 
474
- Перед beta.12.8 tag обязательны `npm ci`, `npm run validate`, `npm run pack:check`,
494
+ Перед beta.12.9 tag обязательны `npm ci`, `npm run validate`, `npm run pack:check`,
475
495
  `npm run smoke:downstream`, `npm run plugin:check`, official plugin/skill validators,
476
496
  `npm run docs:pdf:check`, `npm run release:check` с exact tag binding и validation
477
497
  append-only real-agent lifecycle log.
package/docs/release.md CHANGED
@@ -27,7 +27,7 @@ The PDF check deterministically regenerates all three Russian documents from
27
27
  `docs/pdf/sources`, binds the visible package version to the root manifest, and fails when any
28
28
  tracked PDF is stale. Source and binary PDFs are one release unit.
29
29
 
30
- For beta.12.8, the release gate also relies on `npm run release:check` to fail if:
30
+ For beta.12.9, the release gate also relies on `npm run release:check` to fail if:
31
31
 
32
32
  - canonical entity schema 2 shapes drift;
33
33
  - protocol 2 is not the active public contract, or intact protocol-1 adoption evidence stops being readable through the bounded compatibility window;
@@ -48,6 +48,12 @@ For beta.12.8, the release gate also relies on `npm run release:check` to fail i
48
48
  revision-26 fixture, or pending/corrupt-review rejection regressions are absent.
49
49
  - dependency recovery again requires Task-local manifest/lock fields to equal the Milestone base,
50
50
  or a candidate commit can alter any non-Workflow dependency payload.
51
+ - corrective replan drops completed Step evidence from accepted Task history, or an already-stranded
52
+ Task can register arbitrary/unreviewed history instead of one exact passed and previously accepted
53
+ Step commit.
54
+ - beta.12.9 cannot install through an exact dependency-only base/Task transport while preserving the
55
+ active Step worktree, or that compatibility route fails to bind the dependency HEAD, historical
56
+ commit, current Plan/Step, dirty paths/content hash, and absence of leases/transactions.
51
57
  - the read-only Milestone progress projection, replacement regression, project-monotonic chat
52
58
  registry, title fallback/readback, or long-Cyrillic multi-attempt E2E evidence is absent.
53
59
  - bounded first-failure Plan-integrity recovery, exact failed-remediation/manifest/worktree
@@ -59,6 +59,36 @@ candidate: его HEAD обязан менять ровно `package.json` и `p
59
59
  dependency; любое другое поле, добавленное тем же candidate commit, неизвестный commit, stale base,
60
60
  dirty checkout, lease или transaction по-прежнему блокируют recovery.
61
61
 
62
+ ### Исключение beta.12.9 для Step commit, потерянного corrective Plan
63
+
64
+ Если активный corrective Step сохраняет допустимый dirty worktree, а `task step-complete` обнаруживает
65
+ ровно один старый product commit, beta.12.9 не требует переписывать Git. Пакет поддерживает два
66
+ строго ограниченных входа в один и тот же recovery:
67
+
68
+ - если beta.12.9 уже зарегистрирована, свежий `next` рекламирует
69
+ `task historical-step-provenance-recover`;
70
+ - если для установки beta.12.9 на Milestone base и Task branch уже созданы ровно dependency-only
71
+ commits, свежий `next` рекламирует `update historical-step-dependency-recover`. Этот переход
72
+ атомарно регистрирует новый dependency HEAD и сохраняет authority старого Step commit.
73
+
74
+ В обоих случаях Core сам доказывает для старого SHA полную hash-valid strict Step Review цепочку с
75
+ решением `passed`, verified reviewer isolation и совпадающий прежний `final_acceptance`. Update-route
76
+ дополнительно требует exact target version на declared/locked/installed/current-branch/base surfaces,
77
+ dependency commit только из `package.json` и `package-lock.json`, а также неизменный hash активного
78
+ dirty worktree относительно read-only assessment.
79
+
80
+ Сначала выполните read-only `task historical-step-provenance-preflight --id <TASK-ID>`. Продолжайте
81
+ только при `eligible=true`, точных Task revision, Plan/Brief/HEAD и commit SHA, отсутствии leases,
82
+ transactions и Core operations, а также dirty paths строго внутри `allowedWrites` единственного
83
+ активного Step. Recover принимает exact SHA, actor и содержательную reason, добавляет SHA в
84
+ `invalidatedStepCommits` и записывает источник прежнего acceptance. Product bytes, HEAD и текущий
85
+ Plan не меняются; старый Step не возвращается в Plan. После recovery обязательны последовательные
86
+ `status` и `next`, затем обычный credential route и `task step-complete` текущего Step.
87
+
88
+ Несколько unknown commits, pending/failed review, несовпадающий Plan прежнего acceptance,
89
+ повреждённый sidecar, посторонний dirty path или lease являются hard stop. Запрещено заменять этот
90
+ переход rebase/reset/amend, ручным `systemCommits` или переносом старого Step в текущий Plan.
91
+
62
92
  ### Исключение beta.12.6 для активного downstream proof
63
93
 
64
94
  Обычный `update preflight` по-прежнему правильно запрещает обновление при running Step и dirty
@@ -1,103 +1,104 @@
1
- # V2 beta.12.8 Validation Report
1
+ # V2 beta.12.9 Validation Report
2
2
 
3
- Release candidate `2.0.0-beta.12.8` was validated on 2026-08-29 (Europe/Moscow) with
3
+ Release candidate `2.0.0-beta.12.9` was validated on 2026-08-30 (Europe/Moscow) with
4
4
  Node.js 24.17.0.
5
5
 
6
6
  ## Automated release evidence
7
7
 
8
8
  - `npm ci` completed from the exact lockfile with 0 reported vulnerabilities.
9
- - `npm run validate` passed typecheck and `339/339` sequential tests with no failures, skips,
10
- cancellations, or todos in 1,700,172.265375 ms.
11
- - The focused claimed-Task E2E passed independently. It covers sealed passed final review,
12
- machine-readable `task result-set` writer-token navigation, rejection of a forged token without
13
- Task/lease mutation, successful Result publication, lease-free `awaiting_final_acceptance`, Human
14
- acceptance, fresh credential replacement, merge, and terminal lease release.
15
- - CLI help regression proves that `task result-set` requires `--writer-token` and exposes optional
16
- `--actor` for the exact C1 claimant.
17
- - The full suite retained the Signal-shaped downstream replan E2E, Signal T04 retained-review
18
- recovery, dependency provenance, Plan-integrity recovery, corrective replan, lock hostility,
19
- transaction crash/recovery, Milestone dependency, strict-review, and credential-confinement gates.
20
- - `npm run pack:check` built the exact beta.12.8 package with 275 files, 1.0 MB packed and 4.1 MB
9
+ - `npm run validate` passed typecheck and `343/343` sequential tests with no failures, skips,
10
+ cancellations, or todos in 1,894,344.070542 ms.
11
+ - The focused Signal-shaped E2E proves both recovery entry points. It preserves the active dirty
12
+ worktree and HEAD, registers the exact historical Step commit, reaches fresh
13
+ `task step-complete`, completes that Step with a new Core-owned commit, and validates the resulting
14
+ Task history.
15
+ - Negative cases reject pending or damaged strict review, absent final acceptance, multiple or wrong
16
+ commits, unrelated dirty paths, changed dirty content, active/stale leases, transactions, version
17
+ divergence, and a dependency candidate wider than package/lock.
18
+ - Corrective-replan executor tests prove that future replacement Plans retain evidence commits of
19
+ omitted completed Steps in `invalidatedStepCommits`.
20
+ - `npm run pack:check` built the exact beta.12.9 package with 278 files, 1.0 MB packed and 4.1 MB
21
21
  unpacked. The initial sandboxed invocation could not write the user npm cache (`EPERM`); the exact
22
22
  authorized retry passed.
23
23
  - `npm run smoke:downstream` packed and installed the tarball in a disposable consumer project and
24
24
  returned `ok=true`. The sandboxed attempt could not resolve the npm registry (`ENOTFOUND`); the
25
25
  exact network-authorized retry passed.
26
26
  - `npm run plugin:check` passed for bundled gateway
27
- `0.1.0+codex.20260829181421`. The plugin-creator manifest validator and skill quick validator also
28
- passed using the system Python runtime that provides PyYAML.
29
- - `npm run docs:pdf:check` reported an empty stale set and exact beta.12.8 package binding.
30
- - `RELEASE_TAG=v2.0.0-beta.12.8 npm run release:check` and `git diff --check` passed.
27
+ `0.1.0+codex.20260830183000`.
28
+ - `npm run docs:pdf:check` reported an empty stale set and exact beta.12.9 package binding.
29
+ - `RELEASE_TAG=v2.0.0-beta.12.9 npm run release:check`, JSON parsing and `git diff --check` passed.
31
30
 
32
- ## Root cause corrected by beta.12.8
31
+ ## Root cause corrected by beta.12.9
33
32
 
34
- `WorkflowService.setTaskResult` previously moved a reviewed Task from `validating` to
35
- `awaiting_final_acceptance` without accepting the active writer credential and without releasing
36
- the Task writer lease. Human final acceptance is intentionally unbounded, so an otherwise successful
37
- Task could wait until the lease expired. Repository-level `next` then truthfully returned
38
- `repair-required / STALE_WRITER_LEASE` instead of `task accept`.
33
+ The corrective-replan paths replaced `task.steps` but did not preserve evidence commits belonging to
34
+ completed Steps omitted from the new Plan. Git correctly retained those commits, while Task history
35
+ authority no longer named them. A later `task step-complete` therefore rejected a legitimate,
36
+ previously reviewed and accepted commit as unregistered history.
39
37
 
40
- Increasing review or implementation attempts cannot correct this condition. The implementation and
41
- review had already passed; the defect was ownership lifetime crossing a Human pause.
38
+ Increasing implementation or review attempts cannot correct this condition. The historical Step had
39
+ already passed strict review and final acceptance; the defect was loss of provenance during Plan
40
+ replacement.
42
41
 
43
42
  ## Implemented lifecycle contract
44
43
 
45
- - `task result-set` now requires the active `--writer-token`; claimed C1 Tasks also pass the exact
46
- claimant through `--actor`.
47
- - Core verifies the current revision, passed/fresh review, live writer credential, and C1 mutation
48
- authority before staging Result.
49
- - Core releases the exact presented lease before committing the transition to
50
- `awaiting_final_acceptance`. Human wait time therefore cannot create a new stale lease.
51
- - Fresh `next` advertises the writer-token contract and bounded credential recovery for
52
- `task result-set` when needed.
53
- - `task accept` remains a credential-free Human/delegated approval transition. After acceptance,
54
- fresh `next` advertises `task writer-credential-replace`; this acquires a new lease for local merge
55
- or external merge confirmation. The pre-gate token is not reusable.
56
- - The public handshake exposes `task-human-gate-lease-release-v1`.
44
+ - Both legacy `setTaskPlan` and journaled corrective-replan execution now retain omitted completed
45
+ Step evidence commits in `invalidatedStepCommits`.
46
+ - `task historical-step-provenance-preflight/recover` repairs an already-installed beta.12.9 state
47
+ only when Core proves exactly one omitted commit, one active Step, confined dirty paths, a complete
48
+ hash-valid passed strict Step Review chain, verified reviewer isolation, and matching prior
49
+ hash-bound final acceptance.
50
+ - `update historical-step-dependency-preflight/recover` handles installation itself when the exact
51
+ beta.12.9 dependency-only commit is the unregistered HEAD. It binds `HEAD^`, dependency `HEAD`, all
52
+ version surfaces, active Plan/Step, historical SHA, dirty paths/content hash, and the absence of
53
+ leases or pending operations.
54
+ - The update transition records the dependency commit and retained historical commit in one Task
55
+ revision. Neither recovery rewrites Git, changes product bytes, adopts the old completed Step into
56
+ the current Plan, or weakens ordinary strict review.
57
+ - Fresh `next` advertises these routes before ordinary dependency recovery and returns to the normal
58
+ credential/`task step-complete` flow after successful registration.
59
+ - The public handshake exposes `historical-step-provenance-recovery-v1`.
57
60
 
58
61
  ## Exact Signal diagnosis evidence
59
62
 
60
- At diagnosis time the Signal project `/Users/home-pc/htdocs/projects/signal_v4` was on exact
61
- beta.12.7 with Task `TASK-01M0WXJAD4GZGVNRJ284ND95C6` at revision 126 and
62
- `awaiting_final_acceptance`. The Task checkout was clean at
63
- `f7ba8533314ee27f176968a6314bf3df40285ef2`; Final Task Review was `passed` with no findings.
64
- The Result hash was `89bbbaaef5d2b454ed7ed0e3d9f57484d36c9d86d596e009a32613701003496e`
65
- and Evidence hash was `85f3cb5c16e039ebf40971f88a4388fe1812ef37be8d6b195451aa6a73640c54`.
66
- Repository-level `next` returned only `locks repair` for the expired lease owned by the Task worker.
63
+ At release-candidate validation time the Signal project
64
+ `/Users/home-pc/htdocs/projects/signal_v4` was on exact beta.12.8 with Task
65
+ `TASK-01M0WXJAD4GZGVNRJ284ND95C6` at revision 136 and status `in_progress`. Current Plan hash was
66
+ `1ba67296f352cb67fa4d46c3ec9cd2ee2f50059903a5fffc7b0b2198f6dbae4e`; HEAD was
67
+ `272d6258e4ce169aa9f5cf2b5a4de29970d82eb7`.
67
68
 
68
- The release process did not mutate Signal state or product files. The legacy lease must first be
69
- removed through that exact advertised repair route with revision, HEAD, review, Result, and Evidence
70
- readback. The agent must stop before `task accept`. Only after the repository is lease-free and
71
- `update preflight` is safe should Signal install beta.12.8 and continue through fresh navigation.
69
+ The active Step `STEP-004-DIRECT-LOGIN-PRIVILEGE-DENIAL` had exactly five dirty files, all inside its
70
+ `allowedWrites`. Historical commit `f7ba8533314ee27f176968a6314bf3df40285ef2` had a passed strict
71
+ Step Review and prior final acceptance, but was absent from current Step evidence and retained
72
+ history authority. No active/stale lease, pending/corrupt transaction, or Core operation remained.
73
+ Milestone progress was `2/8` merged Tasks and T04 remained blocked by T03.
74
+
75
+ The recurring Signal audit automation that had created an unrelated dirty journal was paused, and
76
+ its latest journal was archived outside the checkout with matching SHA-256. The release process did
77
+ not rewrite Signal history or mutate its five product files. Live package transport and recovery are
78
+ separate post-publication actions and must follow the exact advertised beta.12.9 route.
72
79
 
73
80
  ## PDF release documentation evidence
74
81
 
75
- - All three tracked Russian PDFs were regenerated from the beta.12.8 Markdown sources.
82
+ - All three tracked Russian PDFs were regenerated from the beta.12.9 Markdown sources.
76
83
  - Architecture is 8 pages, the delegated chat-only guide is 9 pages, and the technical reference is
77
- 11 pages. Every page was rendered to PNG and visually inspected.
78
- - Titles, version headers, Cyrillic text, tables, code blocks, Human-gate credential sequence,
79
- release checklist, margins, and page footers have no visible clipping, overlap, orphaned tail page,
80
- or unreadable content.
84
+ 12 pages. All pages were rendered to PNG contact sheets; changed recovery/update pages were also
85
+ inspected at full page resolution.
86
+ - Titles, version headers, Cyrillic text, tables, command names, margins, page footers and section
87
+ transitions have no visible clipping, overlap, unreadable content, or orphaned tail page.
81
88
 
82
89
  ## Existing boundaries and non-claims
83
90
 
84
- - beta.12.8 prevents new `result-set` transitions from retaining a lease. It does not silently delete
85
- a stale lease created by beta.12.7 or earlier; legacy state uses explicit `locks repair`.
86
- - The patch does not auto-accept a Task, bypass final review, widen delegated approval, or turn an
87
- expired bearer into authority.
88
- - Protocol version remains 2 and state schema remains 2; no semantic state migration is introduced.
89
- - Structural replacement remains intentionally disabled. beta.12.8 does not implement P04-B,
90
- topology rewiring, completed-Step adoption, or a wider delegation surface.
91
- - No append-only real-agent lifecycle log was generated for this maintainer release turn because
92
- the package Workflow did not orchestrate its own repository mutation. Transcript validator
93
- semantics remain covered by the complete valid/invalid fixture suite; no synthetic log is
94
- presented as real evidence.
95
- - Validation performed no npm publication, Git commit, tag, remote push, Signal dependency update,
96
- Signal Task acceptance, or local personal-plugin reinstall. Those are separate release/deployment
97
- actions.
98
-
99
- Confidence is high for the package implementation, negative credential behavior, complete claimed
100
- Task continuation, tarball, downstream installation, plugin, and documentation. Confidence that the
101
- live Signal Milestone will continue is conditional on completing the exact legacy stale-lease repair,
102
- observing a safe update preflight, installing the published beta.12.8 package, and following fresh
103
- project-local `status -> next` without skipping the Human gate.
91
+ - Recovery is intentionally unavailable for arbitrary or multiple commits, pending/failed review,
92
+ missing final acceptance, post-assessment drift, unrelated dirty paths, or active ownership.
93
+ - Protocol version remains 2 and state schema remains 2; the optional audit fields are backward
94
+ compatible and no semantic migration is introduced.
95
+ - Structural replacement remains disabled. beta.12.9 does not implement P04-B, topology rewiring,
96
+ completed-Step adoption, or a wider delegation surface.
97
+ - No Git commit, tag, remote push, npm publication, Signal dependency transport, or Signal Task
98
+ completion is claimed by this pre-publication validation report.
99
+
100
+ Confidence is high for the package implementation, prevention path, bounded legacy recovery,
101
+ dependency-install compatibility, negative evidence gates, complete Step continuation, tarball,
102
+ downstream installation, plugin and documentation. Live Signal confidence remains conditional on
103
+ publishing beta.12.9, transporting only package/lock commits to its active base and Task branch, and
104
+ following fresh project-local `status -> next` without manual history or state edits.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-workflow-v2",
3
- "version": "2.0.0-beta.12.8",
3
+ "version": "2.0.0-beta.12.9",
4
4
  "description": "Requirements-first Codex development workflow with local state and explicit Git ownership.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-workflow-gateway",
3
- "version": "0.1.0+codex.20260829181421",
3
+ "version": "0.1.0+codex.20260830183000",
4
4
  "description": "Thin personal Codex gateway for exact project-local Codex Workflow V2 packages and codebase-memory-mcp.",
5
5
  "author": {
6
6
  "name": "Codex Workflow Maintainers"
@@ -33,6 +33,15 @@
33
33
  `retainedHistoricalCommits`.
34
34
  Task-local manifest/lock fields from recorded history may differ from the base, but the candidate
35
35
  commit must preserve them exactly while changing only the Workflow dependency entries.
36
+ - `task historical-step-provenance-preflight --id <TASK-ID>` is read-only. The matching
37
+ `task historical-step-provenance-recover` is available only for one unexpected product commit
38
+ with an intact passed strict-review chain, matching prior final acceptance, no lease or pending
39
+ operation, and dirty files confined to the current active Step. It retains historical authority
40
+ without changing Git, worktree bytes, or the current Plan.
41
+ - `update historical-step-dependency-preflight/recover` handles the same proof when the beta.12.9
42
+ dependency-only commit is the unregistered HEAD. It binds the exact dependency candidate and the
43
+ reviewed historical Step commit in one recovery record, preserves active product bytes, and then
44
+ requires fresh `status` and `next`.
36
45
  - `task stop-override-prepare` is a read-only Human gate for the exact beta.11 attempt-four stop
37
46
  shape. `task stop-override-apply` requires the same Task revision, Step, actor, reason, Plan, HEAD,
38
47
  evidence binding, and returned `SOO-*` code in a later user turn. It appends evidence without