codex-workflow-v2 2.0.0-beta.13.5 → 2.0.0-beta.13.6

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.
package/docs/release.md CHANGED
@@ -4,6 +4,35 @@ The npm package is `codex-workflow-v2` with public visibility. Consumers must pi
4
4
  an exact version. Stable compatibility covers the latest minor release of the current
5
5
  major only; older minors are unsupported unless a release note explicitly says otherwise.
6
6
 
7
+ ## beta.13.6 candidate: preserve work across root-cause replan
8
+
9
+ A repeated mechanical failure can legitimately yield the same Task to a replacement
10
+ Plan while preserving uncommitted implementation. beta.13.5 authorizes that Plan but
11
+ then rejects its planned Step because the checkout is dirty. Reaching planning or
12
+ reauthorization therefore does not prove recovery.
13
+
14
+ Acceptance for this candidate must exercise the complete repeated mechanical failure,
15
+ automatic C1 yield, semantic replacement Plan, independent PRA, authorization, and
16
+ same-Worker execution sequence with the original dirty bytes. The carryover assessment
17
+ must bind the source remediation cycle, verified historical and current Plans, current
18
+ PRA and authorization, completed evidence, HEAD, file set and content hash. Every carried
19
+ path must already belong to the replacement Step and remain outside forbidden scope;
20
+ carryover never expands scope or forgives unrelated work.
21
+
22
+ Navigation and execution must use the same assessment. Changed bytes, paths, HEAD,
23
+ Plan artifacts, audit/authorization evidence or ambiguous source history must fail
24
+ closed before execution. Tests must continue beyond successful start through checks,
25
+ Core commit and strict review, and reject each material binding mismatch.
26
+
27
+ The stranded-source update must additionally prove a read-only compatibility preflight,
28
+ no writer lease or pending Core operation, exact coherent source/target versions,
29
+ dependency-only Task and Milestone-base commits, registration of the Task dependency
30
+ commit after verification of the base transport, and unchanged product bytes. It must preserve the original Task and Worker and must not
31
+ rely on manual product commits, stash/reset, installed-code edits or state-file edits.
32
+
33
+ All ordinary release gates below apply. The user's one-time beta.13.5 CI-based release
34
+ exception is consumed and is not evidence or an exception for this candidate.
35
+
7
36
  ## beta.13.5 preventive Plan correction before execution
8
37
 
9
38
  A newly discovered implementation Plan defect can require changing unfinished scope
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-workflow-v2",
3
- "version": "2.0.0-beta.13.5",
3
+ "version": "2.0.0-beta.13.6",
4
4
  "description": "Requirements-first Codex development workflow with local state and explicit Git ownership.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -115,6 +115,43 @@ is semantically stronger. Changing that prose therefore requires an independent
115
115
  `approved-with-rationale` audit, a changed substantive summary, and an explicit rationale; the
116
116
  earlier audit remains immutable history for human review.
117
117
 
118
+ When the exact beta.13.6 package reports validated root-cause corrective-replan dirty
119
+ carryover, the retained work belongs to a previously failed execution of the same Task.
120
+ Use the fresh advertised `task run` only with the current writer credential and exact
121
+ Task/Step bindings. Core must verify the repeated mechanical cause, historical Plan,
122
+ replacement Plan and independent PRA, authorization, completed evidence, HEAD, dirty
123
+ paths and content hash. Every retained path must already be allowed by the new Step
124
+ and remain outside forbidden scope. A changed binding or blocked assessment is a hard
125
+ stop; never clean, stash, reset, manually commit, or edit state to make it eligible.
126
+
127
+ The beta.13.6 corrective-carryover update compatibility profile permits its exact
128
+ external runner to execute only the read-only
129
+ `update corrective-carryover-preflight --id <TASK-ID>` against a repository coherently
130
+ pinned to beta.13.5. This is an explicit compatibility inspection, not permission to
131
+ run ordinary transitions with an external or unpublished package. An active writer
132
+ lease blocks transport. Wait for natural expiry. The target compatibility preflight
133
+ may then return only an exact source-package stale-lease repair, after validating the
134
+ sole expired Task lease, its original claimant, Task/Plan/PRA/authorization/HEAD and
135
+ dirty-work bindings. This narrowly scoped preflight action is the authority for that
136
+ source-package repair; do not describe it as an action advertised by the old source
137
+ `next`. An active lease, another lease or any other blocker forbids the repair and
138
+ transport. Never force-release a live lease. Preserve the original C1 claimant and
139
+ hash-bound ownership event, log the preflight and exact repair, then run sequential
140
+ source `status` and `next` and repeat the target preflight.
141
+
142
+ After repair, require a fresh preflight with `eligible=true`, no blockers, and exact
143
+ Task revision, source HEAD, replacement Plan/PRA/authorization, dirty paths/hash and
144
+ original C1 ownership. Transport only the exact target dependency in `package.json`
145
+ and `package-lock.json`: one commit on the Milestone base in a separate worktree and
146
+ one at Task HEAD, leaving every product byte unchanged. Install the repository-local
147
+ target, then follow fresh navigation through the existing
148
+ `update dependency-provenance-recover` only when it advertises the matching carryover
149
+ binding. Use current bounded credential recovery for the original Worker, and obtain
150
+ fresh validated carryover before `task run`. Unknown history, wider commits, version
151
+ misalignment, changed product bytes, different ownership, pending operations or missing
152
+ bindings stop the update. This profile creates no scope or approval authority and does
153
+ not authorize editing the installed package or Workflow state files.
154
+
118
155
  When fresh `next` advertises `task downstream-proof-recover`, the active proof Step has produced
119
156
  uncommitted files inside its own `allowedWrites` and has also exposed required changes owned by one
120
157
  or more completed transitive predecessor Steps. Do not invoke `task step-complete`: its scope is
@@ -215,6 +215,61 @@
215
215
  }
216
216
  },
217
217
  "additionalProperties": false
218
+ },
219
+ "rootCauseReplan": {
220
+ "type": "object",
221
+ "required": [
222
+ "kind", "taskId", "sourceTaskRevision", "stepId", "sourcePlanHash",
223
+ "sourcePlanSemanticHash", "replacementPlanHash", "replacementPlanSemanticHash",
224
+ "sourceHeadCommit", "remediationEvents", "terminalRemediationEventId",
225
+ "terminalRemediationEventHash", "terminalExecutionTaskRevision",
226
+ "repeatedCauseFingerprint", "correctiveYieldEventId", "correctiveYieldEventHash",
227
+ "dirtyFiles", "dirtyWorktreeHash", "replacementPlanRiskAuditEventId",
228
+ "replacementPlanRiskAuditEventHash", "executionAuthorizationHash",
229
+ "executionAuthorizationHead", "completedStepsHash", "c1ClaimEventId",
230
+ "c1ClaimEventHash", "claimant", "compatibilityHash"
231
+ ],
232
+ "properties": {
233
+ "kind": { "const": "root-cause-corrective-replan-dirty-carryover" },
234
+ "taskId": { "type": "string", "pattern": "^TASK-[0-9A-HJKMNP-TV-Z]{26}$" },
235
+ "sourceTaskRevision": { "type": "integer", "minimum": 1 },
236
+ "stepId": { "type": "string", "pattern": "^STEP-[A-Z0-9][A-Z0-9-]{2,63}$" },
237
+ "sourcePlanHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
238
+ "sourcePlanSemanticHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
239
+ "replacementPlanHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
240
+ "replacementPlanSemanticHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
241
+ "sourceHeadCommit": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
242
+ "remediationEvents": {
243
+ "type": "array", "minItems": 1,
244
+ "items": {
245
+ "type": "object", "required": ["eventId", "eventHash", "attemptOrdinal"],
246
+ "properties": {
247
+ "eventId": { "type": "string", "pattern": "^RME-[0-9A-HJKMNP-TV-Z]{26}$" },
248
+ "eventHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
249
+ "attemptOrdinal": { "type": "integer", "minimum": 1 }
250
+ },
251
+ "additionalProperties": false
252
+ }
253
+ },
254
+ "terminalRemediationEventId": { "type": "string", "pattern": "^RME-[0-9A-HJKMNP-TV-Z]{26}$" },
255
+ "terminalRemediationEventHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
256
+ "terminalExecutionTaskRevision": { "type": "integer", "minimum": 1 },
257
+ "repeatedCauseFingerprint": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
258
+ "correctiveYieldEventId": { "type": "string", "pattern": "^HOF-[a-f0-9]{64}$" },
259
+ "correctiveYieldEventHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
260
+ "dirtyFiles": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
261
+ "dirtyWorktreeHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
262
+ "replacementPlanRiskAuditEventId": { "type": "string", "pattern": "^PRA-[0-9A-HJKMNP-TV-Z]{26}$" },
263
+ "replacementPlanRiskAuditEventHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
264
+ "executionAuthorizationHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
265
+ "executionAuthorizationHead": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
266
+ "completedStepsHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
267
+ "c1ClaimEventId": { "type": "string", "pattern": "^HOF-[0-9A-HJKMNP-TV-Z]{26}$" },
268
+ "c1ClaimEventHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
269
+ "claimant": { "type": "string", "minLength": 1 },
270
+ "compatibilityHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
271
+ },
272
+ "additionalProperties": false
218
273
  }
219
274
  },
220
275
  "additionalProperties": false