codex-workflow-v2 2.0.0-beta.12.7 → 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 +9 -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 +37 -3
  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 +7 -2
  21. package/dist/src/workflow.js +206 -11
  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 +23 -6
  27. package/docs/pdf/sources/codex-workflow-v2-chat-only-guide-ru.md +28 -28
  28. package/docs/pdf/sources/codex-workflow-v2-technical-reference-ru.md +41 -26
  29. package/docs/release.md +9 -1
  30. package/docs/updating-existing-project.md +30 -0
  31. package/docs/validation-report.md +90 -96
  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 +15 -0
  35. package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +35 -0
  36. package/schemas/task.schema.json +43 -0
@@ -1,10 +1,10 @@
1
1
  ---
2
- title: Codex Workflow V2: архитектура beta.12.7
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.7
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.7 гарантирует
21
+ ## 1.1. Что beta.12.9 гарантирует
22
22
 
23
23
  - exact project-local npm package и совместимый handshake до lifecycle действий;
24
24
  - Discovery до materialization Task или Milestone;
@@ -26,6 +26,8 @@ Codex Workflow V2 - локальный state machine поверх Codex App, Git
26
26
  - mechanical-feasibility проверку поддерживаемых форм Plan до новой Task authorization;
27
27
  - явный Milestone dependency DAG и один общий runnable predicate для routing, handoff, claim и start;
28
28
  - один C1 writer lease, секретные one-time credentials и Core-owned Step commits;
29
+ - lease-free Human final-acceptance gate: `task result-set` проверяет и освобождает active writer
30
+ lease, а после acceptance merge получает новый credential только через fresh recovery route;
29
31
  - external-sealed Step/Task review в отдельных Codex tasks;
30
32
  - state-bound human gates либо ранее выданные bounded delegation contracts;
31
33
  - journaled recovery для составных переходов и fail-closed поведение при drift/corruption.
@@ -33,8 +35,10 @@ Codex Workflow V2 - локальный state machine поверх Codex App, Git
33
35
  worktree и HEAD сохраняются, stale completion authority снимается, та же Task возвращается в planning.
34
36
  - bounded compatibility recovery, если beta.12.6 после этого recovery ошибочно rebind-нула отвергнутый
35
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.
36
40
 
37
- ## 1.2. Что beta.12.7 не гарантирует
41
+ ## 1.2. Что beta.12.9 не гарантирует
38
42
 
39
43
  - правильность продуктовой идеи или автоматически выбранного provider Task;
40
44
  - semantic sufficiency Plan, если точные факты нельзя доказать поддерживаемым analyzer;
@@ -110,6 +114,11 @@ Discovery -> materialize -> Plan -> Plan Risk Audit
110
114
  -> final acceptance -> merge
111
115
  ```
112
116
 
117
+ `task result-set` является последним execution lease-bound переходом. Он требует рекламируемый
118
+ writer token, освобождает lease до `awaiting_final_acceptance` и тем самым допускает неограниченную
119
+ по времени Human pause без stale-lock блокировки repository. После acceptance прежний token не
120
+ переиспользуется: fresh `next` выдаёт bounded `task writer-credential-replace` для merge.
121
+
113
122
  Fresh Task authorization записывает versioned mechanical-feasibility evidence. Analyzer может
114
123
  выдать `blocked`, `pass` или `unverified`. `unverified` не означает semantic approval; он означает,
115
124
  что поддерживаемая точная грамматика не доказала противоречие.
@@ -276,6 +285,14 @@ Task в `needs_fix`; stale Knowledge можно reconciliate/approve, но fresh
276
285
  всем dirty set. `task run` принимает carryover лишь при exact HEAD/path/hash match, после чего Step
277
286
  проходит обычные checks, Core-owned commit и strict review.
278
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
+
279
296
  Docker socket `EPERM` в sandbox не является доказательством сломанного daemon. Gateway один раз
280
297
  повторяет exact health probe или Plan check с sandbox escalation без расходования remediation attempt.
281
298
  Restart Docker Desktop требует отдельного разрешения и допустим только после escalated daemon failure.
@@ -285,7 +302,7 @@ Restart Docker Desktop требует отдельного разрешения
285
302
  # 10. Operational checklist
286
303
 
287
304
  - exact package version установлен, bundled gateway соответствует release и переустановлен;
288
- - handshake подтверждает protocol 2, state schema 2 и beta.12.7 capabilities;
305
+ - handshake подтверждает protocol 2, state schema 2 и beta.12.9 capabilities;
289
306
  - каждый mutation следует свежему `status -> next` и exact option contract;
290
307
  - Docker permission failure сначала классифицируется как sandbox boundary, а не как infra retry;
291
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.7 путь от нового 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.7
6
+ date: 30 августа 2026
7
+ subject: Практическое руководство по delegated Discovery и Milestone в Workflow V2 beta.12.9
8
8
  ---
9
9
 
10
- # 1. Рабочая модель beta.12.7
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.7 как точную 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.7 должен сообщать `packageVersion=2.0.0-beta.12.7`, `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.7 в 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.
@@ -242,6 +242,10 @@ Credential и approval grant решают разные задачи.
242
242
  4. Claim проверяет dependency binding и возвращает `writerLeaseReceipt`.
243
243
  5. `task run` принимает active writer credential согласно `next.writerTokenContract` и обновляет lease.
244
244
  6. `task step-complete`, review record и другие guarded mutations используют только рекламируемый option.
245
+ 7. После passed final review `task result-set` использует active writer token и освобождает lease до
246
+ `awaiting_final_acceptance`; Human gate не должен удерживать credential.
247
+ 8. После acceptance старый token не используется: fresh `next` рекламирует
248
+ `task writer-credential-replace`, затем разрешает merge или merge confirmation.
245
249
 
246
250
  Нельзя искать token в later payload fields, писать его в prompt/report/evidence или заменять redacted
247
251
  fingerprint. Потеря token не разрешает новый handoff либо lease acquisition вне fresh recovery route.
@@ -300,6 +304,7 @@ Task chat записывает его только при совпадении p
300
304
  | `split-required` | Stop: `STRUCTURAL_REPLACEMENT_REQUIRED`, никаких replacement writes |
301
305
  | Старая версия + active downstream proof блокируют update | Только beta.12.6 exact dependency commits и advertised `update downstream-proof-dependency-recover` |
302
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 |
303
308
  | Exact beta.11 attempt-four `stop-escalate` | Только advertised prepare, затем отдельный Human-confirmed apply; исходный stop сохраняется |
304
309
  | Любой другой explicit `stop-escalate` | Terminal user attention |
305
310
  | Stale dependency binding | Новый handoff/claim только по fresh `next` |
@@ -319,32 +324,26 @@ beta.12.6 и требуйте от fresh `next` `update downstream-proof-depende
319
324
  binding dirty set. Recover регистрирует только dependency HEAD; следующий fresh `next` должен вернуть
320
325
  обычный `task downstream-proof-recover`. Любой иной diff/history/dirty path/lease означает stop.
321
326
 
322
- Для exact stranded shape после уже выполненного beta.12.6 recovery сначала запустите новой версией
323
- read-only `update downstream-proof-replan-update-preflight`. Продолжайте только при `eligible=true`,
324
- source `2.0.0-beta.12.6`, exact revision/HEAD, ожидаемых dirty paths/hash и пустых blockers. Затем
325
- перенесите beta.12.7 двумя dependency-only commits на base и Task branch, установите пакет и следуйте
326
- fresh `next` через `update downstream-proof-replan-dependency-recover` и
327
- `task downstream-proof-replan-recover`. После обязательного Knowledge reconcile/approve fresh `next`
328
- должен остаться на `task plan-set`, а не resurrect старый Plan. Новый Step обязан один владеть всем
329
- сохранённым 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`.
330
337
 
331
338
  Ошибка Docker socket/CLI `EPERM`, `operation not permitted` или `permission denied` в sandbox не считается
332
339
  падением daemon и не расходует retry. Повторите exact read-only probe или Plan check один раз с sandbox
333
340
  escalation. Не перезапускайте Docker Desktop и не меняйте image без отдельного разрешения и подтверждённого
334
341
  escalated daemon failure.
335
342
 
336
- Если после применённого stop override `next` рекламирует delegated `task context-refresh` или
337
- `update dependency-provenance-recover`, выполните только этот advertised atomic/recovery переход и
338
- снова запросите `status -> next`. Таких механических refresh/update циклов может быть несколько.
339
- Продолжайте attempt 4 только при `stopOverrideContextRebind.state=validated`. При одновременном
340
- `writerCredentialRecovery.action=task writer-credential-replace` сначала восстановите credential
341
- точного claimant-актора. `doctor`, semantic Plan change, разрыв rebind/audit chain или HEAD commit без
342
- точного dependency-provenance record означают stop, а не ручной обход.
343
-
344
- Если advertised navigation записала dependency provenance после последнего context-refresh audit,
345
- продолжайте только когда fresh `next` сам вернул `task run`. Core обязан доказать, что каждый такой
346
- recovery объясняет ровно один дополнительный Task revision; простое `revision >=` не является
347
- 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`.
348
347
 
349
348
  # 12. Milestone final acceptance
350
349
 
@@ -363,7 +362,7 @@ Task/project DGR. `dependencyBinding` для standalone handoff равен null.
363
362
 
364
363
  # 14. Итоговый checklist пользователя
365
364
 
366
- - beta.12.7 exact package и новый bundled gateway установлены;
365
+ - beta.12.9 exact package и новый bundled gateway установлены;
367
366
  - новый Coordinator chat не является fork старого Milestone;
368
367
  - bootstrap DGR, если нужен, выдан отдельным exact human confirmation;
369
368
  - Discovery не materialized при blocking unknowns;
@@ -376,5 +375,6 @@ Task/project DGR. `dependencyBinding` для standalone handoff равен null.
376
375
  - downstream predecessor recovery, если рекламировался, сохранил worktree и завершился новым Plan authority;
377
376
  - active-proof package bridge, если понадобился, зарегистрировал только exact dependency HEAD перед recovery;
378
377
  - stranded-replan bridge, если понадобился, завершился новым Plan и полным Step checks/review, а не только сменой navigation;
378
+ - historical-Step recovery, если рекламировался, сохранил exact accepted commit и довёл текущий Step до обычного `step-complete` без history rewrite;
379
379
  - split-required остановился без replacement mutations;
380
380
  - Milestone validation и final acceptance связаны с текущим clean base HEAD.
@@ -1,10 +1,10 @@
1
1
  ---
2
- title: Codex Workflow V2: технический справочник beta.12.7
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.7
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.7 | Значение |
16
+ | Параметр beta.12.9 | Значение |
17
17
  |---|---|
18
- | npm package | `codex-workflow-v2@2.0.0-beta.12.7` |
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,16 +37,16 @@ Gateway выполняет:
37
37
  5. вызов только package-local `dist/src/cli.js --repo <root>`;
38
38
  6. `gateway handshake` до lifecycle действий.
39
39
 
40
- Ключевые beta.12.7 capabilities:
40
+ Ключевые beta.12.9 capabilities:
41
41
 
42
42
  | Группа | Capabilities |
43
43
  |---|---|
44
44
  | Knowledge и graph | `project-memory-v1`, `graph-binding-v1`, `task-context-refresh-v1` |
45
45
  | Milestone | lifecycle, initial assembly navigation, autonomy, progress, dependency DAG, initial Plan transaction |
46
46
  | Task planning | Plan Risk Audit, proof obligations, mechanical feasibility |
47
- | C1 | handoff sidecar, handoff bundle, derived Worker actor, credential replacement |
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 или соседней
@@ -235,7 +235,8 @@ Claim сверяет stored binding с current Milestone authority до lock acq
235
235
  3. Exact target actor вызывает `task claim` с one-time token.
236
236
  4. Claim выдаёт first-field `writerLeaseReceipt`.
237
237
  5. `task run` принимает token по `next.writerTokenContract`, heartbeats lease и возвращает refreshed receipt.
238
- 6. Terminal handback/release уничтожает active bearer material.
238
+ 6. `task result-set` consumes active token и освобождает lease до Human final-acceptance gate.
239
+ 7. После acceptance `writer-credential-replace` создаёт merge lease; terminal transitions освобождают его.
239
240
 
240
241
  Credential нельзя логировать, сохранять в chat packet или включать в evidence. `handoff-show` возвращает
241
242
  только safe persisted binding. Recovery использует отдельные advertised replacement actions.
@@ -249,7 +250,7 @@ Credential нельзя логировать, сохранять в chat packet
249
250
  | Worker return | Изменения uncommitted и только в allowedWrites |
250
251
  | Step complete | History, scope, checks, review gate, exact writer token |
251
252
  | Commit | Один Core-owned commit с Task/Step metadata |
252
- | Submit | Clean tree, Steps completed/skipped, recorded commits and evidence |
253
+ | Submit/Result | Exact evidence/review; Result освобождает lease до Human gate |
253
254
  | Merge | Fresh review/acceptance, base conditions, accepted HEAD |
254
255
 
255
256
  Local start повторно сравнивает authorized base внутри Git branch creation, закрывая TOCTOU между
@@ -380,6 +381,26 @@ fresh `next` рекламирует lease-bound `task downstream-proof-recover`
380
381
  remainder и пройти fresh Plan Risk Audit и execution authorization. Unrelated/non-predecessor file,
381
382
  strict-review evidence, unregistered commit, branch mismatch или damaged sidecar возвращают `doctor`.
382
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
+
383
404
  # 14. P04-A structural replacement boundary
384
405
 
385
406
  Command shape `task replacement-materialize` retained только для compatibility diagnostics. Любая попытка
@@ -442,12 +463,12 @@ Docker socket/CLI `EPERM`, `operation not permitted` или `permission denied`
442
463
  После каждой successful mutation обязателен sequential `status`, затем fresh `next`. Failed status/next
443
464
  не разрешает direct mutation. Syntax help read-only и не заменяет navigation authority.
444
465
 
445
- # 18. Public command surface beta.12.7
466
+ # 18. Public command surface beta.12.9
446
467
 
447
468
  | Область | Actions |
448
469
  |---|---|
449
470
  | System | `doctor`, `status`, `next`, `gateway handshake`, `locks` |
450
- | 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 |
451
472
  | Project memory | `scan`, `show`, `status`, `approve`, `reconcile` |
452
473
  | Delegation | `prepare`, `grant`, `list`, `show`, `revoke` |
453
474
  | Graph | `prepare`, `status`, `refresh-request`, `bind`, `fallback` |
@@ -457,7 +478,7 @@ Docker socket/CLI `EPERM`, `operation not permitted` или `permission denied`
457
478
  | Task execution | `start`, `run`, `step-complete`, `submit`, `result-set`, `accept`, `sync-base`, `merge`, `merge-confirm` |
458
479
  | C1 | `handoff[-prepare/-replace/-show]`, `claim`, `writer-credential-replace`, `handback[-create]` |
459
480
  | Review | review/step-review packet, launch, sealed record и record actions |
460
- | 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 |
461
482
  | Replacement | `replacement-materialize` retained, но всегда disabled в P04-A |
462
483
 
463
484
  Exact options берутся из fresh `next`; command help используется только когда
@@ -467,16 +488,10 @@ Exact options берутся из fresh `next`; command help используе
467
488
 
468
489
  Перед package update project-local `update preflight` должен вернуть `safe=true`: clean checkout, нет
469
490
  running Step и active/stale writer lease. Исключения — документированный alpha.7 rescue, beta.12.6
470
- active-downstream-proof bridge и beta.12.7 exact stranded-replan bridge; все они fail-closed и не дают
471
- общего разрешения dirty update.
472
-
473
- Перед beta.12.7 tag release repository выполняет:
474
-
475
- 1. `npm ci`;
476
- 2. `npm run validate`;
477
- 3. `npm run pack:check`;
478
- 4. `npm run smoke:downstream`;
479
- 5. `npm run plugin:check` и official plugin/skill validators;
480
- 6. `npm run docs:pdf:check`;
481
- 7. `npm run release:check` с exact release tag binding;
482
- 8. validation append-only real-agent lifecycle log.
491
+ active-downstream-proof bridge, beta.12.7 exact stranded-replan bridge и beta.12.9 historical-Step
492
+ dependency bridge; все они fail-closed и не дают общего разрешения dirty update.
493
+
494
+ Перед beta.12.9 tag обязательны `npm ci`, `npm run validate`, `npm run pack:check`,
495
+ `npm run smoke:downstream`, `npm run plugin:check`, official plugin/skill validators,
496
+ `npm run docs:pdf:check`, `npm run release:check` с exact tag binding и validation
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.7, 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;
@@ -42,10 +42,18 @@ For beta.12.7, the release gate also relies on `npm run release:check` to fail i
42
42
  explicit recovery, or dual-readback capabilities are absent from the packaged surface.
43
43
  - scoped Task navigation, credential replacement recovery, or sealed external Task/Step review
44
44
  commands are absent from the packaged surface.
45
+ - `task result-set` can enter the unbounded Human final-acceptance gate without consuming a live
46
+ writer credential and releasing its lease, or claimed Task E2E cannot reacquire a fresh merge credential.
45
47
  - bounded dependency-provenance recovery, retained passed-review provenance, the exact Signal T04
46
48
  revision-26 fixture, or pending/corrupt-review rejection regressions are absent.
47
49
  - dependency recovery again requires Task-local manifest/lock fields to equal the Milestone base,
48
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.
49
57
  - the read-only Milestone progress projection, replacement regression, project-monotonic chat
50
58
  registry, title fallback/readback, or long-Cyrillic multi-attempt E2E evidence is absent.
51
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