codex-workflow-v2 2.0.0-beta.12.15 → 2.0.0-beta.12.16

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 (39) hide show
  1. package/README.md +18 -12
  2. package/dist/src/alpha6/check-support-anchor.d.ts +24 -0
  3. package/dist/src/alpha6/check-support-anchor.js +102 -0
  4. package/dist/src/alpha6/check-support-anchor.js.map +1 -0
  5. package/dist/src/alpha6/downstream-proof.js +4 -2
  6. package/dist/src/alpha6/downstream-proof.js.map +1 -1
  7. package/dist/src/alpha6/mechanical-feasibility.js +14 -0
  8. package/dist/src/alpha6/mechanical-feasibility.js.map +1 -1
  9. package/dist/src/alpha6/plan-integrity.js +55 -8
  10. package/dist/src/alpha6/plan-integrity.js.map +1 -1
  11. package/dist/src/alpha6/remediation.d.ts +1 -0
  12. package/dist/src/alpha6/remediation.js +86 -5
  13. package/dist/src/alpha6/remediation.js.map +1 -1
  14. package/dist/src/cli.js +1 -0
  15. package/dist/src/cli.js.map +1 -1
  16. package/dist/src/contracts.d.ts +31 -2
  17. package/dist/src/reviewer.d.ts +9 -4
  18. package/dist/src/reviewer.js +10 -8
  19. package/dist/src/reviewer.js.map +1 -1
  20. package/dist/src/state/corrective-replan-public.js +5 -4
  21. package/dist/src/state/corrective-replan-public.js.map +1 -1
  22. package/dist/src/version.d.ts +1 -1
  23. package/dist/src/version.js +1 -1
  24. package/dist/src/workflow.js +33 -9
  25. package/dist/src/workflow.js.map +1 -1
  26. package/docs/autonomy-guardrails.md +17 -14
  27. package/docs/development-flow.md +7 -7
  28. package/docs/pdf/codex-workflow-v2-architecture-ru.pdf +0 -0
  29. package/docs/pdf/codex-workflow-v2-chat-only-guide-ru.pdf +0 -0
  30. package/docs/pdf/codex-workflow-v2-technical-reference-ru.pdf +0 -0
  31. package/docs/pdf/sources/codex-workflow-v2-architecture-ru.md +16 -5
  32. package/docs/pdf/sources/codex-workflow-v2-chat-only-guide-ru.md +11 -7
  33. package/docs/pdf/sources/codex-workflow-v2-technical-reference-ru.md +24 -7
  34. package/docs/release.md +13 -8
  35. package/docs/updating-existing-project.md +18 -0
  36. package/docs/validation-report.md +109 -89
  37. package/package.json +2 -1
  38. package/schemas/authorization-event.schema.json +2 -2
  39. package/schemas/corrective-decision-event.schema.json +67 -4
@@ -145,25 +145,28 @@ commit, or unverified recovery remains blocked.
145
145
 
146
146
  ### First-failure Plan-integrity recovery
147
147
 
148
- A mechanically impossible Plan check must not consume the second ordinary remediation attempt
149
- only to unlock corrective replan. After the first guarded `checks-failed` event, Core performs a
150
- read-only bounded assessment. `next` advertises `task plan-integrity-recover` only when all of the
151
- following are true:
152
-
153
- - the failed Step contains an exact root `npm run <script>` or `npm run-script <script>` check;
154
- - the named script is absent from the current root `package.json`;
155
- - `package.json` is outside the failed Step's `allowedWrites`;
148
+ A mechanically impossible Plan check must not consume another attempt merely to unlock its known
149
+ correction. After the first guarded `checks-failed` event, Core performs a read-only bounded
150
+ assessment. Existing missing-script and required-selector conflicts route to corrective replan.
151
+ beta.12.16 additionally recognizes one exact check-support conflict when all of the following hold:
152
+
153
+ - the failed Step contains an exact root `npm run <script>` check and declares an absent migration
154
+ output path that is inside its original `allowedWrites`;
155
+ - the root script resolves to a repository-local runner whose direct static import resolves to a
156
+ tracked checksum/catalog support module;
157
+ - that support module has SHA-256 anchors and names an existing migration in the same file family,
158
+ but is outside the Step's `allowedWrites` and `forbiddenScope`;
156
159
  - exactly one ordinary `checks-failed` remediation event exists for the Step;
157
160
  - no corrective decision exists for its second-attempt binding;
158
161
  - every dirty file remains inside the Step's current `allowedWrites` and outside its
159
162
  `forbiddenScope`.
160
163
 
161
- The recovery appends one hash-bound `replan-required` decision for attempt ordinal 2. It preserves
162
- the worktree and does not edit the Plan. A claimed C1 Task must present its current writer token and
163
- then follow `task corrective-yield`; the replacement Plan still requires the existing independent
164
- validation, Risk Audit, Human confirmation, journaled execution, readback, and renewed execution
165
- authorization. Other check failures use the normal continuable remediation route; they do not
166
- receive the narrow Plan-integrity shortcut, but attempt count alone never stops them.
164
+ The recovery appends one hash-bound `continue-fix` decision for attempt ordinal 2 and the exact
165
+ support path. It preserves the worktree and Plan hash; it does not alter source or Git. The current
166
+ C1 actor presents the existing writer token and fresh `task run` exposes the effective scope.
167
+ `task step-complete` remains the only commit owner, all checks rerun, and strict review packets name
168
+ the derived scope. Missing-script/selector conflicts still use `replan-required` plus the normal
169
+ Human-confirmed corrective replan. Unproved or broader scope changes never receive this authority.
167
170
 
168
171
  ### Downstream-proof predecessor recovery
169
172
 
@@ -93,13 +93,13 @@ executable. A reviewer routes to `replan` only with an exact Plan obstruction an
93
93
  change; ordinary findings default to `fix`. Remediation cannot change the Task objective,
94
94
  requirements, or acceptance.
95
95
 
96
- One bounded exception avoids a deliberately repeated failure for an older authorization without
97
- P01-A evidence or a contradiction that becomes observable only after execution starts. If the first guarded check failure
98
- is caused by an absent root npm script that the Step cannot add because `package.json` is outside
99
- its `allowedWrites`, fresh `next` advertises `task plan-integrity-recover`. The command records only
100
- the exact evidence-bound early `replan-required` posture; it never edits source, Plan, or Git.
101
- Continue through the advertised corrective yield and corrective replan rather than calling
102
- `task run` again.
96
+ One bounded exception avoids deliberately repeating an already-proved Plan-integrity failure.
97
+ Missing root scripts and missing mandatory selectors use the advertised evidence-bound
98
+ `replan-required` path. For beta.12.16's exact direct check-support case, fresh `next` instead binds
99
+ the imported SHA/catalog support module and records a machine-derived `continue-fix` scope. Continue
100
+ with fresh `task run`; its envelope contains the original Step paths plus that one support path.
101
+ Core still owns the commit and review packet. Do not add adjacent files or treat this as generic
102
+ permission to change the Plan.
103
103
 
104
104
  If a later proof Step leaves changes both in its own scope and in files owned by a completed
105
105
  transitive predecessor, fresh `next` advertises `task downstream-proof-recover` instead of
@@ -1,10 +1,10 @@
1
1
  ---
2
- title: Codex Workflow V2: архитектура beta.12.15
2
+ title: Codex Workflow V2: архитектура beta.12.16
3
3
  subtitle: Источники истины, lifecycle, роли, delegation, зависимости Tasks и границы доверия
4
4
  part: Часть 1 из 3 | Архитектура
5
5
  document_version: 2.0
6
6
  date: 31 августа 2026
7
- subject: Архитектура и границы Codex Workflow V2 beta.12.15
7
+ subject: Архитектура и границы Codex Workflow V2 beta.12.16
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.15 гарантирует
21
+ ## 1.1. Что beta.12.16 гарантирует
22
22
 
23
23
  - exact project-local npm package и совместимый handshake до lifecycle действий;
24
24
  - Discovery до materialization Task или Milestone;
@@ -41,7 +41,7 @@ Codex Workflow V2 - локальный state machine поверх Codex App, Git
41
41
  один additive remediation Task без нового Human gate; Core сохраняет Milestone semantics и выводит
42
42
  authority из текущей Milestone authorization и exact audit evidence.
43
43
 
44
- ## 1.2. Что beta.12.15 не гарантирует
44
+ ## 1.2. Что beta.12.16 не гарантирует
45
45
 
46
46
  - правильность продуктовой идеи или автоматически выбранного provider Task;
47
47
  - semantic sufficiency Plan, если точные факты нельзя доказать поддерживаемым analyzer;
@@ -337,6 +337,17 @@ Completed corrective-replan journal также остаётся читаемым
337
337
  если его завершённый manifest/runtime/catalog tuple есть в append-only historical registry. Pending и
338
338
  неизвестные identity по-прежнему fail-closed, поэтому compatibility не выдаёт новую authority.
339
339
 
340
+ beta.12.16 закрывает следующий доказанный разрыв: migration Step мог владеть новой SQL migration,
341
+ manifest и bootstrap, но не владеть TypeScript-модулем, который direct import из обязательного check
342
+ использовал как независимую SHA/catalog authority. Новый `wf2.check-support-anchor@1` блокирует такой
343
+ Plan до execution authorization. Для уже выполняемой Task после первого `checks-failed` Core связывает
344
+ Plan/Step/HEAD, полный dirty set, runner/support hashes, direct import, отсутствующий declared output и
345
+ существующие anchors. Если доказательство однозначно, append-only decision `continue-fix` выдаёт только
346
+ один exact support path как effective Step scope. Human replan не нужен, Plan hash и product bytes не
347
+ меняются, а Worker envelope, Core commit и sealed review packet явно используют и раскрывают derived
348
+ scope. Indirect import, dynamic shell, forbidden path, unrelated dirty file или отсутствие SHA anchors
349
+ fail-closed и не расширяют authority.
350
+
340
351
  Docker socket `EPERM` в sandbox не является доказательством сломанного daemon. Gateway один раз
341
352
  повторяет exact health probe или Plan check с sandbox escalation без расходования remediation attempt.
342
353
  Restart Docker Desktop требует отдельного разрешения и допустим только после escalated daemon failure.
@@ -346,7 +357,7 @@ Restart Docker Desktop требует отдельного разрешения
346
357
  # 10. Operational checklist
347
358
 
348
359
  - exact package version установлен, bundled gateway соответствует release и переустановлен;
349
- - handshake подтверждает protocol 2, state schema 2 и beta.12.15 capabilities;
360
+ - handshake подтверждает protocol 2, state schema 2 и beta.12.16 capabilities;
350
361
  - каждый mutation следует свежему `status -> next` и exact option contract;
351
362
  - Docker permission failure сначала классифицируется как sandbox boundary, а не как infra retry;
352
363
  - 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.15 путь от нового Discovery до принятого Milestone без ручного CLI
3
+ subtitle: Актуальный beta.12.16 путь от нового Discovery до принятого Milestone без ручного CLI
4
4
  part: Часть 2 из 3 | Практика
5
5
  document_version: 2.0
6
6
  date: 31 августа 2026
7
- subject: Практическое руководство по delegated Discovery и Milestone в Workflow V2 beta.12.15
7
+ subject: Практическое руководство по delegated Discovery и Milestone в Workflow V2 beta.12.16
8
8
  ---
9
9
 
10
- # 1. Рабочая модель beta.12.15
10
+ # 1. Рабочая модель beta.12.16
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.15 как точную devDependency после публикации release.
43
+ 2. Установите beta.12.16 как точную 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.15 должен сообщать `packageVersion=2.0.0-beta.12.15`, `protocolVersion=2`,
59
+ Handshake beta.12.16 должен сообщать `packageVersion=2.0.0-beta.12.16`, `protocolVersion=2`,
60
60
  `stateSchemaVersion=2`, dependency DAG, initial Plan transaction, mechanical feasibility,
61
61
  Milestone autonomy и structural replacement disabled capabilities.
62
62
 
@@ -117,7 +117,7 @@ delegate, scope, transitions и expiry. DGR передаётся только е
117
117
  ```text
118
118
  НОВЫЙ COORDINATOR CHAT
119
119
 
120
- Проведи новый Milestone через Codex Workflow V2 beta.12.15 в delegated режиме.
120
+ Проведи новый Milestone через Codex Workflow V2 beta.12.16 в delegated режиме.
121
121
  Repository: <ABSOLUTE-REPOSITORY-ROOT>.
122
122
  Milestone ID: AUTO.
123
123
  Delegate actor: agent:milestone-coordinator.
@@ -298,6 +298,7 @@ Task chat записывает его только при совпадении p
298
298
  | Состояние | Действие |
299
299
  |---|---|
300
300
  | First proven impossible npm check после legacy/late authorization | Только рекламируемый `task plan-integrity-recover` |
301
+ | Direct imported migration checksum/catalog authority вне Step scope | beta.12.16: advertised `task plan-integrity-recover`, затем тот же Step с exact derived support path; Human replan не нужен |
301
302
  | Downstream proof требует изменить completed predecessor | Только `task downstream-proof-recover`, затем новый Plan/risk audit/authorization в той же Task |
302
303
  | Failed guarded review | Та же Task: исправление и новый strict review без attempt hard stop |
303
304
  | Finding `route=fix` | Продолжить тот же Step; count остаётся диагностикой |
@@ -313,6 +314,9 @@ Task chat записывает его только при совпадении p
313
314
  | Review seal drift | Discard review и создать fresh packet |
314
315
 
315
316
  Plan-integrity recovery не редактирует Plan, package.json или worktree и не синтезирует второй failure.
317
+ Для beta.12.16 check-support evidence fresh `task run` обязан показать `boundedEffect=record-machine-derived-check-support-scope`
318
+ и добавить ровно рекламируемый support path в Worker `allowedWrites`. Для иных Plan-integrity видов
319
+ сохраняется `replan-required` route.
316
320
  P04-A не переносит completed Steps и не rewires dependencies при split.
317
321
 
318
322
  Audited remediation beta.12.11 не является generic scope-change. Coordinator использует только exact
@@ -404,7 +408,7 @@ Task/project DGR. `dependencyBinding` для standalone handoff равен null.
404
408
 
405
409
  # 14. Итоговый checklist пользователя
406
410
 
407
- - beta.12.15 exact package и новый bundled gateway установлены;
411
+ - beta.12.16 exact package и новый bundled gateway установлены;
408
412
  - новый Coordinator chat не является fork старого Milestone;
409
413
  - bootstrap DGR, если нужен, выдан отдельным exact human confirmation;
410
414
  - Discovery не materialized при blocking unknowns;
@@ -1,10 +1,10 @@
1
1
  ---
2
- title: Codex Workflow V2: технический справочник beta.12.15
2
+ title: Codex Workflow V2: технический справочник beta.12.16
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
6
  date: 31 августа 2026
7
- subject: Технический контракт Codex Workflow V2 beta.12.15
7
+ subject: Технический контракт Codex Workflow V2 beta.12.16
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.15 | Значение |
16
+ | Параметр beta.12.16 | Значение |
17
17
  |---|---|
18
- | npm package | `codex-workflow-v2@2.0.0-beta.12.15` |
18
+ | npm package | `codex-workflow-v2@2.0.0-beta.12.16` |
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.15 capabilities:
40
+ Ключевые beta.12.16 capabilities:
41
41
 
42
42
  | Группа | Capabilities |
43
43
  |---|---|
@@ -496,6 +496,23 @@ legacy tuple у незавершённой transaction, повреждённый
496
496
  `journal-invalid`. Это позволяет читать terminal beta.12.12 history после расширения binding manifest,
497
497
  не превращая legacy identity в новую execution authority.
498
498
 
499
+ # 13.7. beta.12.16 check-support scope authority
500
+
501
+ Analyzer `wf2.check-support-anchor@1` рассматривает только root `npm run` check, repository-local
502
+ `node`/`tsx` runner и его direct relative static import. Блокировка допустима, когда Step создаёт
503
+ отсутствующий exact migration output, импортированный support-модуль содержит SHA-256 и approved/
504
+ expected/manifest/catalog anchors той же `.sql` family, но Step не владеет support path. Это machine
505
+ evidence, а не вывод из текста ошибки.
506
+
507
+ Для pre-execution Plan finding `CHECK_SUPPORT_ANCHOR_OUTSIDE_ALLOWED_WRITES` блокирует authorization.
508
+ Для уже выполняемой guarded Step первый `checks-failed` может рекламировать тот же
509
+ `task plan-integrity-recover`, но evidence v3 записывает `continue-fix`, а не `replan-required`.
510
+ `scopeExtensions` равно отсортированному exact набору support paths из conflict evidence; dirty files
511
+ до recovery обязаны оставаться в original allowedWrites, support path не может пересекать
512
+ forbiddenScope. Plan hash не меняется. Effective scope используется retry precondition, Worker envelope,
513
+ Core commit, downstream-proof assessment, corrective-replan worktree guard и strict review packet.
514
+ Любое более широкое изменение остаётся в обычном corrective replan с Human gate.
515
+
499
516
  # 14. P04-A structural replacement boundary
500
517
 
501
518
  Command shape `task replacement-materialize` retained только для compatibility diagnostics. Любая попытка
@@ -558,7 +575,7 @@ Docker socket/CLI `EPERM`, `operation not permitted` или `permission denied`
558
575
  После каждой successful mutation обязателен sequential `status`, затем fresh `next`. Failed status/next
559
576
  не разрешает direct mutation. Syntax help read-only и не заменяет navigation authority.
560
577
 
561
- # 18. Public command surface beta.12.15
578
+ # 18. Public command surface beta.12.16
562
579
 
563
580
  | Область | Actions |
564
581
  |---|---|
@@ -589,7 +606,7 @@ active-downstream-proof bridge, beta.12.7 exact stranded-replan bridge, beta.12.
589
606
  dependency bridge и beta.12.15 Plan-integrity bridge; все они fail-closed и не дают общего разрешения
590
607
  dirty update.
591
608
 
592
- Перед beta.12.15 tag обязательны `npm ci`, `npm run validate`, `npm run test:signal-remediation-e2e`, `npm run pack:check`,
609
+ Перед beta.12.16 tag обязательны `npm ci`, `npm run validate`, `npm run test:signal-t10-check-support-e2e`, `npm run test:signal-remediation-e2e`, `npm run pack:check`,
593
610
  `npm run smoke:downstream`, `npm run plugin:check`, official plugin/skill validators,
594
611
  `npm run docs:pdf:check`, `npm run release:check` с exact tag binding и validation
595
612
  append-only real-agent lifecycle log.
package/docs/release.md CHANGED
@@ -10,14 +10,15 @@ Before tagging a release:
10
10
 
11
11
  1. `npm ci`
12
12
  2. `npm run validate`
13
- 3. `npm run test:signal-remediation-e2e`
14
- 4. `npm run pack:check`
15
- 5. `npm run smoke:downstream`
16
- 6. `npm run plugin:check`
17
- 7. `npm run docs:pdf:check`
18
- 8. `npm run release:check`
19
- 9. validate `plugins/codex-workflow-gateway` with the Codex plugin validator
20
- 10. validate the append-only real-agent log with
13
+ 3. `npm run test:signal-t10-check-support-e2e`
14
+ 4. `npm run test:signal-remediation-e2e`
15
+ 5. `npm run pack:check`
16
+ 6. `npm run smoke:downstream`
17
+ 7. `npm run plugin:check`
18
+ 8. `npm run docs:pdf:check`
19
+ 9. `npm run release:check`
20
+ 10. validate `plugins/codex-workflow-gateway` with the Codex plugin validator
21
+ 11. validate the append-only real-agent log with
21
22
  `node scripts/validate-lifecycle-transcript.mjs --file <lifecycle-log.jsonl>`
22
23
 
23
24
  The downstream smoke packs the actual tarball, installs it into an empty temporary project,
@@ -60,6 +61,10 @@ For beta.12.12, the release gate also relies on `npm run release:check` to fail
60
61
  - bounded first- or repeated-failure Plan-integrity recovery, selector-required npm-check
61
62
  feasibility, exact failed-remediation/manifest/worktree
62
63
  bindings, or the no-synthetic-second-failure regression is absent.
64
+ - a direct migration check can import an external checksum/catalog authority without the producing
65
+ Step owning it; or in-flight recovery can widen beyond the exact imported support path, bypass
66
+ `forbiddenScope`, change the Plan hash, skip checks/Core commit/review disclosure, or require a
67
+ Human approval for the machine-proved scope-only correction.
63
68
  - downstream proof cannot invalidate only completed transitive-predecessor authority while
64
69
  preserving worktree/HEAD, yielding C1, and returning the same Task to fresh planning; or unrelated
65
70
  dirty files and damaged invalidation evidence do not fail closed.
@@ -22,6 +22,24 @@ state schema. Совпадение `stateSchemaVersion` до и после об
22
22
  нужна. Для alpha.6 при `stateSchemaVersion: 2` применяется не migration, а sidecar-only
23
23
  adoption posture.
24
24
 
25
+ ### beta.12.16: direct migration check-support authority
26
+
27
+ Новый mechanical analyzer до execution authorization проверяет root `npm run` migration checks,
28
+ repository-local `node`/`tsx` runner и его direct static relative imports. Если Step создаёт новую
29
+ SQL migration, а импортированный TypeScript/JavaScript support-модуль закрепляет approved SHA-256,
30
+ manifest или expected catalog той же migration family, этот support path должен входить в
31
+ `allowedWrites` той же Step. Иначе Plan возвращается к `task plan-set` до запуска Worker.
32
+
33
+ Для уже выполняемой Task с первым `checks-failed` fresh beta.12.16 `next` может рекламировать
34
+ `task plan-integrity-recover` с reason `CHECK_SUPPORT_ANCHOR_OUTSIDE_ALLOWED_WRITES` и
35
+ `boundedEffect=record-machine-derived-check-support-scope`. Выполните только этот route под текущим
36
+ C1 actor/writer credential, затем снова прочитайте `next` и вызовите `task run`. Worker envelope
37
+ должен добавить ровно `evidence.scopeExtensions`; Plan hash и существующие product bytes остаются
38
+ неизменными. Core повторяет все checks, сам создаёт commit и включает derived scope в sealed review
39
+ packet. Human corrective-replan для этого точного scope-only случая не требуется. Если route не
40
+ рекламируется, есть indirect/dynamic import, лишний dirty path, forbiddenScope intersection или нет
41
+ SHA/catalog anchors — не расширяйте scope вручную.
42
+
25
43
  ### beta.12.12: неисполняемая Step check и сохранение текущей реализации
26
44
 
27
45
  Новые Plans больше не могут получить execution authorization, если root npm script запускает
@@ -1,107 +1,127 @@
1
- # V2 beta.12.15 Validation Report
1
+ # V2 beta.12.16 Validation Report
2
2
 
3
- Release candidate `2.0.0-beta.12.15` was validated on 2026-08-31 (Europe/Moscow) with
3
+ Release candidate `2.0.0-beta.12.16` was validated on 2026-08-31 (Europe/Moscow) with
4
4
  Node.js 24.17.0.
5
5
 
6
6
  ## Automated release evidence
7
7
 
8
8
  - A clean `npm ci` completed from the exact lockfile and reported zero vulnerabilities.
9
- - The first full `npm run validate` run passed every behavioral assertion except two diagnostics
10
- whose text still described the superseded one-commit boundary. The messages were corrected without
11
- changing transition behavior. The second full run passed typecheck and `349/349` sequential tests
12
- with no failures, skips, cancellations or todos in 2,169,018.255 ms.
13
- - The focused dependency-provenance suite passed `11/11`. It covers a two-commit unregistered
14
- dependency suffix, exact oldest-to-newest recovery, per-commit package-version provenance and
15
- fail-closed product/payload/ancestry drift.
16
- - `npm run test:signal-t04-recovery` passed `11/11`; `npm run
17
- test:signal-t03-replan-e2e` passed `1/1`; and `npm run test:signal-remediation-e2e` passed `2/2`.
18
- - Package dry-run passed with 281 files (approximately 1.1 MB packed and 4.3 MB unpacked).
19
- - Disposable downstream installation returned `ok=true` for the exact beta.12.15 tarball. The first
9
+ - `npm run validate` passed typecheck and `352/352` sequential tests with no failures, skips,
10
+ cancellations or todos in 2,166,261.797 ms.
11
+ - The release-specific `npm run test:signal-t10-check-support-e2e` gate passed `6/6`. Its
12
+ Signal-shaped case reproduces the STEP-002 migration/check-support conflict, records one bounded
13
+ machine-derived scope extension, retries the same Step, passes checks and produces the Core-owned
14
+ Step commit without a Human replan.
15
+ - Existing Signal compatibility gates remained green: `npm run test:signal-t04-recovery` passed
16
+ `11/11`, `npm run test:signal-t03-replan-e2e` passed `1/1`, and `npm run
17
+ test:signal-remediation-e2e` passed `2/2`.
18
+ - Package dry-run passed with 284 files (approximately 1.1 MB packed and 4.4 MB unpacked). The
19
+ tarball contains the compiled `check-support-anchor` analyzer and its declaration/source map.
20
+ - Disposable downstream installation returned `ok=true` for the exact beta.12.16 tarball. The first
20
21
  sandboxed run failed only because registry DNS was unavailable; the exact network-enabled retry
21
22
  passed.
22
- - `npm run plugin:check` and `npm run docs:pdf:check` passed. PDF freshness reported an empty stale
23
- set and exact beta.12.15 package binding.
24
-
25
- ## Live Signal reproduction
26
-
27
- Signal Task `TASK-01M1B79C660YMNSRRZ236NTR1T` is blocked after a completed corrective yield. Its
28
- three allowlisted STEP-001 product files remain uncommitted and unchanged. The repository contains
29
- two consecutive Workflow dependency-only commits that Core could not register:
30
-
31
- - beta.12.13: `51e5e61b39ff9a234dcc9ccb80d81da710570f55`;
32
- - beta.12.14: `96c3bd22e818873c1de59cd42b466efde0947d23`.
33
-
34
- Fresh beta.12.14 observation is otherwise coherent: no pending or corrupt transactions and no active
35
- leases. Nevertheless, `next` advertised dependency recovery while its preflight rejected the route
36
- because it expected the current update commit's parent to be an already registered system commit.
37
- The beta.12.13 parent could not be registered earlier because the beta.12.13 transaction-observation
38
- defect prevented all workflow commands before beta.12.14 was installed.
39
-
40
- The beta.12.15 implementation was built locally and run read-only against this exact Signal state.
41
- Preflight returned `eligible=true`, action `update plan-integrity-dependency-recover`, and the exact
42
- two-commit chain above in oldest-to-newest order. No Signal state, journal, sidecar, Git history or
43
- product file was modified by this reproduction.
23
+ - `npm run plugin:check` passed. `npm run docs:pdf:check` reported `stale=[]` and the exact
24
+ beta.12.16 package binding.
25
+
26
+ ## Live Signal reproduction before installation
27
+
28
+ The live repository was observed read-only at:
29
+
30
+ - Task branch `codex/task-01m1b79c66-current-formalization-commit-and-provide`;
31
+ - HEAD `f290d0875387283c368bedd03964fb423619db7b`;
32
+ - repository-local package `codex-workflow-v2@2.0.0-beta.12.15`, protocol/schema `2/2`;
33
+ - Task `TASK-01M1B79C660YMNSRRZ236NTR1T`, with the last recorded STEP-002 failure at Task revision
34
+ 21.
35
+
36
+ HEAD is the Core-owned STEP-001 commit. Its strict external review passed with sealed packet hash
37
+ `c48658ce617bca58eddba4e11f43501eb87967d076e43bd4656f512ba256358f` and seal
38
+ `31cfd03a8bd9f9ba21f067703db90da97102643901725718f3e88199e486d806`.
39
+
40
+ The checkout still contains exactly the eight STEP-002 product paths present at the recorded
41
+ `checks-failed` boundary:
42
+
43
+ - `libs/processing-decision/ports/src/processing-persistence.ts`;
44
+ - `libs/processing-decision/ports/src/index.ts`;
45
+ - `libs/processing-decision/adapters/postgres/src/processing-evidence-transaction.ts`;
46
+ - `libs/processing-decision/adapters/postgres/src/processing-evidence-transaction.spec.ts`;
47
+ - `libs/processing-decision/adapters/postgres/src/processing-evidence-transaction.integration.spec.ts`;
48
+ - `libs/processing-decision/adapters/postgres/migrations/0003_current_formalization_commits.sql`;
49
+ - `libs/processing-decision/adapters/postgres/migrations/manifest.json`;
50
+ - `libs/processing-decision/adapters/postgres/bootstrap/0000_roles_and_schema.sql`.
51
+
52
+ Focused evidence and full affected validation passed for those product changes. The exact migration
53
+ check failed because `tools/postgres/check-processing-migrations.ts` directly imports
54
+ `tools/postgres/processing-migration-files.ts`, while the latter did not catalog the new migration
55
+ and was outside STEP-002 `allowedWrites`. Repeating the approved check could not change that result.
56
+
57
+ The beta.12.16 analyzer was then run read-only against this exact repository state. It derived one
58
+ candidate and no broader scope:
59
+
60
+ - runner: `tools/postgres/check-processing-migrations.ts`;
61
+ - support authority: `tools/postgres/processing-migration-files.ts`;
62
+ - expected output:
63
+ `libs/processing-decision/adapters/postgres/migrations/0003_current_formalization_commits.sql`;
64
+ - reason: `CHECK_SUPPORT_ANCHOR_OUTSIDE_ALLOWED_WRITES`.
65
+
66
+ Fresh beta.12.15 `status -> next` currently stops earlier at an expired writer lease and advertises
67
+ only `locks repair`. No Signal lease, Workflow state, Git history, product file or chat was changed
68
+ by this release-candidate reproduction. Live beta.12.16 recovery is intentionally not claimed until
69
+ publication, installation, stale-lease repair and fresh repository-local readback.
44
70
 
45
71
  ## Root cause corrected
46
72
 
47
- The beta.12.14 carried-compatibility and dependency-recovery logic assumed a single unregistered
48
- Workflow update at `HEAD`, with an already registered parent at `HEAD^`. That assumption is false
49
- when an earlier release was installable but its recovery route was unreachable because observation
50
- itself failed. Installing the observer fix then creates a bounded consecutive suffix of two
51
- unregistered dependency-only commits.
52
-
53
- The resulting blocker was not invalid Signal product work, a stale lease or corrupt Core state. It
54
- was an incomplete dependency-provenance boundary: navigation advertised a route that the route's own
55
- single-hop preflight could never accept.
56
-
57
- ## Implemented compatibility contract
58
-
59
- - Preflight discovers the complete trailing unregistered suffix after the exact recorded Task
60
- history instead of assuming one commit.
61
- - Every suffix element must form an uninterrupted parent chain and change exactly `package.json` and
62
- `package-lock.json`, only as an exact `codex-workflow-v2` pin update. Product bytes, additional
63
- dependency changes, merge ancestry and unexplained commits remain blockers.
64
- - The terminal suffix commit must match the declared, locked and installed package version.
65
- - Carried Plan-integrity compatibility is derived by walking through the bounded suffix to the last
66
- registered system commit. The original recovery, failed Step, Plan, remediation history, dirty
67
- allowlist, dirty SHA-256, C1 posture and completed corrective-yield history must still match.
68
- - Recovery atomically registers the entire chain in `systemCommits` and appends one provenance record
69
- per commit using that commit's actual package version. Partial registration is not permitted.
70
- - A failed atomic recovery leaves all Core state unchanged. No product file, Plan, Step, lease,
71
- review or Git history is edited by this route.
72
- - Protocol and state schema remain `2/2`; no migration or manual state repair is required.
73
-
74
- ## Existing beta.12.14 contract retained
75
-
76
- - Current binding manifests remain mandatory for pending and in-flight corrective-replan
77
- transactions.
78
- - Historical manifest/runtime/catalog identities are accepted only for exact registered completed
79
- journals and cannot create new authority.
80
- - Corrective-replan credentials still separate source Task Knowledge from target replacement-Plan
81
- Knowledge.
82
- - Completed corrective-yield journals still require their canonical event bytes to be an exact prefix
83
- of the append-only handoff history.
84
- - After dependency recovery, the blocked Task must still pass normal corrective-replan preparation,
85
- confirmation, execution, fresh authorization/C1, selector-bearing checks, Core-owned Step commit and
86
- strict external review.
73
+ Mechanical feasibility treated the migration, manifest and bootstrap files as the Step's complete
74
+ output boundary, but did not model the repository-local module imported by the approved migration
75
+ check as execution authority. That support module owns the exact migration list and SHA-256 catalog;
76
+ therefore the new migration cannot pass its check until the support module changes as well.
77
+
78
+ This is not a semantic Plan error and not evidence that the product implementation must be
79
+ discarded. The missing path is mechanically derivable from executable code and exact file anchors.
80
+ The old runtime nevertheless routed the first confirmed failure back to ordinary `task run`, where
81
+ the Worker remained forbidden from editing the only file that could make the approved check pass.
82
+
83
+ ## Implemented contract
84
+
85
+ - New analyzer `wf2.check-support-anchor@1` recognizes only a root `npm run` check, its
86
+ repository-local Node/tsx runner, one direct relative static import, and a support module whose
87
+ migration filename family plus SHA/catalog anchors bind an exact Plan-declared migration output.
88
+ - For a future Plan, execution authorization fails closed when the producing Step does not own that
89
+ exact support path. This prevents the invalid scope from reaching execution.
90
+ - For an already running guarded Step, the first exact `checks-failed` event may advertise `task
91
+ plan-integrity-recover`. Recovery revalidates Plan, Step, HEAD, complete dirty set, runner/support
92
+ hashes, direct import, missing declared output and existing evidence under the Workflow lock.
93
+ - Recovery appends one `continue-fix` decision with the exact `scopeExtensions` path. It does not
94
+ change the Plan hash, product bytes, Git history or review result and does not synthesize a second
95
+ failed attempt.
96
+ - Worker envelope, retry boundary, Core commit, downstream proof, corrective-replan worktree guard
97
+ and strict review packet all use the same effective Step scope. The original allowedWrites remain
98
+ canonical and the append-only decision is visible as derived authority.
99
+ - The existing missing-script and selector-required cases retain `replan-required` and their
100
+ Human-confirmed corrective-replan route. Indirect imports, dynamic shell, unsupported syntax,
101
+ forbidden paths, unrelated dirty files, missing SHA/catalog anchors and multiple ambiguous
102
+ candidates remain fail-closed.
87
103
 
88
104
  ## PDF release documentation evidence
89
105
 
90
- - All three tracked Russian PDFs were regenerated from beta.12.15 sources.
91
- - Architecture is 9 pages, delegated chat-only guide is 10 pages, and technical reference is 14
92
- pages. All 33 rendered pages were visually inspected; no clipping, overlap or unreadable content
106
+ - All three tracked Russian PDFs were regenerated from beta.12.16 sources.
107
+ - Architecture is 9 pages, delegated chat-only guide is 10 pages, and technical reference is 15
108
+ pages. All 34 rendered pages were visually inspected; no clipping, overlap or unreadable content
93
109
  was observed.
94
110
 
95
111
  ## Boundaries and non-claims
96
112
 
97
- - The suffix scan is not generic history adoption. Only the contiguous, exact Workflow-pin-only
98
- prefix between registered Task history and current HEAD is eligible.
99
- - The patch does not weaken dirty-worktree boundaries, Plan identity, remediation evidence, C1
100
- authority, checks or review gates.
101
- - This report does not claim commit/tag/push, npm publication, live beta.12.15 installation,
102
- dependency recovery or STEP-001 completion before each operation receives its own readback.
103
-
104
- Confidence is high for consecutive dependency-provenance recovery because the focused tests, full
105
- 349-test gate and read-only real Signal reproduction agree. End-to-end confidence remains conditional
106
- on publication, exact Signal installation, fresh repository-local `status -> next`, and completion of
107
- the blocked STEP-001 through Core-advertised routes.
113
+ - The patch is not autonomous semantic replanning and does not permit a Worker to add an arbitrary
114
+ file after a failed check.
115
+ - Scope augmentation is limited to one exact mechanically proved support authority for the current
116
+ migration-file family. A broader or ambiguous dependency remains an ordinary Plan conflict.
117
+ - The patch does not weaken dirty-worktree, forbidden-scope, Plan identity, C1 authority, checks,
118
+ Core-owned commit or sealed strict-review gates.
119
+ - This report does not claim commit/tag/push, npm publication, live beta.12.16 installation, live
120
+ STEP-002 recovery, STEP-002 commit/review, Task merge or Milestone completion before those
121
+ operations receive their own readback.
122
+
123
+ Confidence is high for the bounded analyzer, preventive authorization and runtime recovery because
124
+ the full 352-test gate, release-specific Signal E2E, legacy Signal gates and read-only live candidate
125
+ agree. End-to-end confidence for the active Signal Task remains conditional on publication, exact
126
+ repository-local installation, advertised stale-lease repair, fresh `status -> next`, Core recovery,
127
+ the real approved checks and a new sealed external review packet.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-workflow-v2",
3
- "version": "2.0.0-beta.12.15",
3
+ "version": "2.0.0-beta.12.16",
4
4
  "description": "Requirements-first Codex development workflow with local state and explicit Git ownership.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -49,6 +49,7 @@
49
49
  "test:signal-t04-recovery": "node scripts/with-validation-lock.mjs test-signal-t04",
50
50
  "test:signal-t03-replan-e2e": "node scripts/with-validation-lock.mjs test-signal-t03-replan",
51
51
  "test:signal-remediation-e2e": "node scripts/with-validation-lock.mjs test-signal-remediation-topology",
52
+ "test:signal-t10-check-support-e2e": "node scripts/with-validation-lock.mjs test-signal-t10-check-support",
52
53
  "validate": "npm run typecheck && npm test",
53
54
  "pack:check": "npm run build && npm pack --dry-run",
54
55
  "smoke:downstream": "npm run build && node scripts/downstream-smoke.mjs",
@@ -98,7 +98,7 @@
98
98
  "required": ["analyzerId", "analyzerVersion"],
99
99
  "properties": {
100
100
  "analyzerId": {
101
- "enum": ["wf2.root-npm-script", "wf2.exact-output-path", "wf2.exact-predecessor-path"]
101
+ "enum": ["wf2.root-npm-script", "wf2.root-npm-script-arguments", "wf2.check-support-anchor", "wf2.exact-output-path", "wf2.exact-predecessor-path"]
102
102
  },
103
103
  "analyzerVersion": { "const": 1 }
104
104
  }
@@ -111,7 +111,7 @@
111
111
  ],
112
112
  "properties": {
113
113
  "analyzerId": {
114
- "enum": ["wf2.root-npm-script", "wf2.exact-output-path", "wf2.exact-predecessor-path"]
114
+ "enum": ["wf2.root-npm-script", "wf2.root-npm-script-arguments", "wf2.check-support-anchor", "wf2.exact-output-path", "wf2.exact-predecessor-path"]
115
115
  },
116
116
  "analyzerVersion": { "const": 1 },
117
117
  "result": { "enum": ["pass", "blocked", "unverified"] },