codex-workflow-v2 2.0.0-beta.12.14 → 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 (42) hide show
  1. package/README.md +20 -13
  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 +37 -2
  17. package/dist/src/dependency-provenance.d.ts +5 -0
  18. package/dist/src/dependency-provenance.js +51 -26
  19. package/dist/src/dependency-provenance.js.map +1 -1
  20. package/dist/src/reviewer.d.ts +9 -4
  21. package/dist/src/reviewer.js +10 -8
  22. package/dist/src/reviewer.js.map +1 -1
  23. package/dist/src/state/corrective-replan-public.js +5 -4
  24. package/dist/src/state/corrective-replan-public.js.map +1 -1
  25. package/dist/src/version.d.ts +1 -1
  26. package/dist/src/version.js +1 -1
  27. package/dist/src/workflow.js +75 -40
  28. package/dist/src/workflow.js.map +1 -1
  29. package/docs/autonomy-guardrails.md +17 -14
  30. package/docs/development-flow.md +7 -7
  31. package/docs/pdf/codex-workflow-v2-architecture-ru.pdf +0 -0
  32. package/docs/pdf/codex-workflow-v2-chat-only-guide-ru.pdf +0 -0
  33. package/docs/pdf/codex-workflow-v2-technical-reference-ru.pdf +0 -0
  34. package/docs/pdf/sources/codex-workflow-v2-architecture-ru.md +22 -8
  35. package/docs/pdf/sources/codex-workflow-v2-chat-only-guide-ru.md +19 -12
  36. package/docs/pdf/sources/codex-workflow-v2-technical-reference-ru.md +32 -12
  37. package/docs/release.md +13 -8
  38. package/docs/updating-existing-project.md +18 -0
  39. package/docs/validation-report.md +113 -98
  40. package/package.json +2 -1
  41. package/schemas/authorization-event.schema.json +2 -2
  42. package/schemas/corrective-decision-event.schema.json +67 -4
@@ -1,112 +1,127 @@
1
- # V2 beta.12.14 Validation Report
1
+ # V2 beta.12.16 Validation Report
2
2
 
3
- Release candidate `2.0.0-beta.12.14` 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
- - A clean `npm ci` completed from the exact lockfile and reported zero vulnerabilities. The first
9
- sandboxed attempt failed only on registry DNS (`ENOTFOUND`); the exact network-enabled retry passed.
10
- - `npm run validate` passed typecheck and `349/349` sequential tests with no failures, skips,
11
- cancellations or todos in 2,224,925.03 ms.
12
- - The new regression case completes a corrective-replan transaction, rewrites its self-bound
13
- identity and phase chain to the exact beta.12.12 historical tuple, and proves observation remains
14
- clean. An unknown tuple and the same historical tuple on a pending transaction both remain
15
- `journal-invalid`.
16
- - The full suite still includes the beta.12.13 Signal-shaped E2E: repeated selector-contract
17
- failures, consecutive dependency-only updates, exact carried compatibility, source/target
18
- Knowledge separation, corrective replan, fresh authorization/C1, selector-bearing validation,
19
- Core Step commit and strict Step review.
20
- - `npm run test:signal-remediation-e2e` passed `2/2`; `npm run
21
- test:signal-t03-replan-e2e` passed `1/1`; and `npm run test:signal-t04-recovery` passed `11/11`.
22
- - Package dry-run passed with 281 files (approximately 1.1 MB packed and 4.3 MB unpacked), and the
23
- disposable downstream installation returned `ok=true` for the exact beta.12.14 tarball.
24
- - `npm run plugin:check`, `npm run docs:pdf:check`,
25
- `RELEASE_TAG=v2.0.0-beta.12.14 npm run release:check`, and `git diff --check` all passed. PDF
26
- freshness reported an empty stale set and exact beta.12.14 package binding.
27
-
28
- ## Live Signal reproduction
29
-
30
- The beta.12.13 package was published and installed into Signal through one dependency-only commit
31
- `51e5e61b39ff9a234dcc9ccb80d81da710570f55`. Declared, locked, installed, Task-branch and `main`
32
- versions all became exact `2.0.0-beta.12.13`; the three uncommitted STEP-001 product files retained
33
- their original SHA-256 values.
34
-
35
- Fresh beta.12.13 handshake succeeded with protocol/state schema `2/2`, but read-only `status` failed
36
- closed with `TASK_TRANSACTION_INTEGRITY_FAILED`. It identified exactly three `journal-invalid`
37
- completed Task transactions:
38
-
39
- - `TASK-01M0HVJ4S7GF6JNCNDHPMAVG8Y` / `c66a4bf6b4e67c2b406cccd8229e827a96b7c99e5609d9e025b835817c45e523`;
40
- - `TASK-01M0HVNAWGQGSSXCDJ4DDGEZXV` / `52838ab5e81da7e471a377ff29828f0ad5326bcb20581c9ee65387e617e1446d`;
41
- - `TASK-01M0WXJ2GHGYRH86HR7FMKWSTS` / `d5024dc6ab5b2d85da57b6c7d44b8927e0c1558e890ee434f3911712f6faa56a`.
42
-
43
- All three were terminal corrective-replan transactions created by the prior 28-field binding model.
44
- Their exact common identity was manifest SHA-256
45
- `edab7ee7ac4018e759f5fc702a11a0fd113ef4f2cf8ed8fa823a59fde3012a1a`, runtime fingerprint
46
- `bd4e7a0ddfcb6abc0c5eb107775e6aea7e08c4606dda4d945d77af8a4520710d`, and catalog hash
47
- `fa1d11860d4f07978c3b8e85d1f91cd3d15b17284b05f41e05d462d3bb092aed`.
48
-
49
- The beta.12.14 implementation was built locally and its transaction observer was run read-only
50
- against the real Signal external state. It returned `pending=0`, `corrupt=0`. No state, journal,
51
- sidecar, Git history or product file was modified by this reproduction.
8
+ - A clean `npm ci` completed from the exact lockfile and reported zero vulnerabilities.
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
21
+ sandboxed run failed only because registry DNS was unavailable; the exact network-enabled retry
22
+ passed.
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.
52
70
 
53
71
  ## Root cause corrected
54
72
 
55
- beta.12.13 expanded the live corrective-replan binding manifest from 28 to 30 fields so source Task
56
- Knowledge and target replacement-Plan Knowledge could differ under exact Plan-integrity compatibility.
57
- The transaction journal validator compared every stored journal with only the current manifest hash.
58
- Consequently, already completed and otherwise intact beta.12.12 transactions became unreadable after
59
- the legitimate manifest evolution.
60
-
61
- The problem was not corrupted Signal state and not a missing repair operation. It was missing
62
- versioned read compatibility for consumed, terminal Core transaction authority. Repairing, deleting or
63
- rewriting those journals would have destroyed evidence and hidden the product defect.
64
-
65
- ## Implemented compatibility contract
66
-
67
- - The current binding manifest remains mandatory for every new, pending or in-flight
68
- corrective-replan transaction.
69
- - An append-only registry records exact historical completed identities as a three-value tuple:
70
- manifest SHA-256, runtime semantic fingerprint and runtime catalog hash.
71
- - A non-current identity is accepted only when the journal phase is `completed` and the full tuple is
72
- present in that registry.
73
- - Existing schema validation, path identity, intent hash, phase hash chain, target inventory, owned
74
- preimage/postimage digests, sidecar anchors, completion result and canonical-target readback remain
75
- mandatory. Historical registration bypasses none of them.
76
- - Unknown tuples and historical tuples on nonterminal transactions remain fail closed. A historical
77
- completed journal is read evidence only; it cannot mint a new receipt, resume execution or become
78
- current transition authority.
79
- - Protocol and state schema remain `2/2`; no state migration or repair command is required.
80
-
81
- ## Existing beta.12.13 contract retained
82
-
83
- - Corrective-replan credentials still separate source `knowledgeRevision`/`knowledgeHash` from target
84
- `targetKnowledgeRevision`/`targetKnowledgeHash`.
85
- - Source/target difference still requires an exact current Plan-integrity recovery matching HEAD,
86
- package version, system commit, Plan, failed Step, full remediation history, dirty paths and dirty
87
- worktree hash.
88
- - Consecutive package-only updates can still carry compatibility only from one exact registered
89
- recovery at `HEAD^`, with unchanged product bytes and no C1 posture.
90
- - Completed corrective-yield journals still require their owned event bytes to be an exact prefix of
91
- a valid current append-only handoff history.
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.
92
103
 
93
104
  ## PDF release documentation evidence
94
105
 
95
- - All three tracked Russian PDFs were regenerated from beta.12.14 sources.
96
- - Architecture is 9 pages, delegated chat-only guide is 10 pages, and technical reference is 14
97
- pages. All 33 pages were rendered and visually inspected; the release-gate appendix has an explicit
98
- page boundary, and no clipping, overlap or unreadable content was observed.
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
109
+ was observed.
99
110
 
100
111
  ## Boundaries and non-claims
101
112
 
102
- - The historical registry is not a wildcard, schema migration, state repair or permission to accept
103
- arbitrary old bytes. Each prior identity must be added explicitly and tested.
104
- - The patch does not weaken pending transaction recovery, current Core authority, dirty-worktree
105
- boundaries, review gates or product checks.
106
- - This report does not claim commit/tag/push, npm publication, live beta.12.14 installation, dependency
107
- recovery or STEP-001 completion before each operation receives its own readback.
108
-
109
- Confidence is high for historical completed-journal compatibility because the focused test, full
110
- 349-test gate and read-only real Signal state inspection agree. End-to-end confidence remains
111
- conditional on publication, exact Signal installation, fresh repository-local `status -> next`, and
112
- completion of 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.14",
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"] },
@@ -49,17 +49,32 @@
49
49
  "if": { "properties": { "triggeringAttemptCount": { "const": 2 } }, "required": ["triggeringAttemptCount"] },
50
50
  "then": {
51
51
  "required": ["recoveryBasis", "planIntegrityEvidence"],
52
- "properties": { "decision": { "const": "replan-required" } }
52
+ "properties": { "decision": { "enum": ["continue-fix", "replan-required"] } }
53
53
  }
54
54
  },
55
55
  {
56
56
  "if": { "required": ["recoveryBasis"] },
57
57
  "then": {
58
- "required": ["planIntegrityEvidence"],
59
- "properties": { "decision": { "const": "replan-required" } }
58
+ "required": ["planIntegrityEvidence"]
60
59
  },
61
60
  "else": { "not": { "required": ["planIntegrityEvidence"] } }
62
61
  },
62
+ {
63
+ "if": {
64
+ "properties": {
65
+ "planIntegrityEvidence": {
66
+ "properties": { "kind": { "const": "check-support-anchor-outside-allowed-writes" } },
67
+ "required": ["kind"]
68
+ }
69
+ },
70
+ "required": ["planIntegrityEvidence"]
71
+ },
72
+ "then": { "properties": { "decision": { "const": "continue-fix" } } },
73
+ "else": {
74
+ "if": { "required": ["recoveryBasis"] },
75
+ "then": { "properties": { "decision": { "const": "replan-required" } } }
76
+ }
77
+ },
63
78
  {
64
79
  "anyOf": [
65
80
  { "properties": { "coveredFindingIds": { "minItems": 1 } } },
@@ -81,7 +96,8 @@
81
96
  "planIntegrityEvidence": {
82
97
  "oneOf": [
83
98
  { "$ref": "#/$defs/planIntegrityEvidenceV1" },
84
- { "$ref": "#/$defs/planIntegrityEvidenceV2" }
99
+ { "$ref": "#/$defs/planIntegrityEvidenceV2" },
100
+ { "$ref": "#/$defs/planIntegrityEvidenceV3" }
85
101
  ]
86
102
  },
87
103
  "planIntegrityEvidenceV1": {
@@ -142,6 +158,53 @@
142
158
  "changedFiles": { "$ref": "#/$defs/stringList" },
143
159
  "conflictHash": { "$ref": "#/$defs/hash64" }
144
160
  }
161
+ },
162
+ "planIntegrityEvidenceV3": {
163
+ "type": "object", "additionalProperties": false,
164
+ "required": ["kind", "taskRevision", "remediationEvents", "manifestPath", "manifestHash", "gitHead", "stepDefinitionHash", "conflicts", "scopeExtensions", "changedFiles", "conflictHash"],
165
+ "properties": {
166
+ "kind": { "const": "check-support-anchor-outside-allowed-writes" },
167
+ "taskRevision": { "type": "integer", "minimum": 1 },
168
+ "remediationEvents": {
169
+ "type": "array", "minItems": 1,
170
+ "items": {
171
+ "type": "object", "additionalProperties": false,
172
+ "required": ["eventId", "eventHash", "attemptOrdinal"],
173
+ "properties": {
174
+ "eventId": { "type": "string", "minLength": 1 },
175
+ "eventHash": { "$ref": "#/$defs/hash64" },
176
+ "attemptOrdinal": { "type": "integer", "minimum": 1 }
177
+ }
178
+ }
179
+ },
180
+ "manifestPath": { "const": "package.json" },
181
+ "manifestHash": { "$ref": "#/$defs/nullableHash64" },
182
+ "gitHead": { "$ref": "#/$defs/gitOid" },
183
+ "stepDefinitionHash": { "$ref": "#/$defs/hash64" },
184
+ "conflicts": {
185
+ "type": "array", "minItems": 1,
186
+ "items": {
187
+ "type": "object", "additionalProperties": false,
188
+ "required": ["reasonCode", "script", "command", "scriptCommand", "runnerPath", "runnerHash", "supportPath", "supportHash", "importSpecifier", "expectedOutputPaths", "anchoredMigrationNames"],
189
+ "properties": {
190
+ "reasonCode": { "const": "CHECK_SUPPORT_ANCHOR_OUTSIDE_ALLOWED_WRITES" },
191
+ "script": { "type": "string", "minLength": 1 },
192
+ "command": { "type": "string", "minLength": 1 },
193
+ "scriptCommand": { "type": "string", "minLength": 1 },
194
+ "runnerPath": { "type": "string", "minLength": 1 },
195
+ "runnerHash": { "$ref": "#/$defs/hash64" },
196
+ "supportPath": { "type": "string", "minLength": 1 },
197
+ "supportHash": { "$ref": "#/$defs/hash64" },
198
+ "importSpecifier": { "type": "string", "minLength": 1 },
199
+ "expectedOutputPaths": { "$ref": "#/$defs/stringList", "minItems": 1 },
200
+ "anchoredMigrationNames": { "$ref": "#/$defs/stringList", "minItems": 1 }
201
+ }
202
+ }
203
+ },
204
+ "scopeExtensions": { "$ref": "#/$defs/stringList", "minItems": 1 },
205
+ "changedFiles": { "$ref": "#/$defs/stringList" },
206
+ "conflictHash": { "$ref": "#/$defs/hash64" }
207
+ }
145
208
  }
146
209
  }
147
210
  }