codex-workflow-v2 2.0.0-beta.12.4 → 2.0.0-beta.12.5

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.
@@ -67,6 +67,20 @@ active writer token when the C1 contract requires it. The recovery records only
67
67
  `task run` merely to manufacture the second failure, and never invoke this recovery for a generic
68
68
  test failure, a writable manifest, or unconfined changes.
69
69
 
70
+ When fresh `next` advertises `task downstream-proof-recover`, the active proof Step has produced
71
+ uncommitted files inside its own `allowedWrites` and has also exposed required changes owned by one
72
+ or more completed transitive predecessor Steps. Do not invoke `task step-complete`: its scope is
73
+ known to be stale. Use only the exact returned Task revision, claimant/lease actor, writer-token
74
+ contract, and a substantive reason. The atomic recovery preserves the worktree and HEAD, moves the
75
+ predecessor completion commits into historical `invalidatedStepCommits`, clears only the invalidated
76
+ completion evidence, blocks the active proof Step, supersedes execution authorization, appends
77
+ `downstream-proof-invalidations.jsonl`, releases C1/lease authority, and returns the same Task to
78
+ ordinary `task plan-set`. Build the replacement Plan from the full unfinished remainder, attach a
79
+ fresh Plan Risk Audit, then obtain fresh execution authorization. Never use this route for an
80
+ unrelated dirty file, a non-predecessor file, unregistered Git history, strict-review evidence, or
81
+ without explicit fresh `next` eligibility. Do not reset, stash, commit, or recreate the Task or
82
+ Milestone around this transition.
83
+
70
84
  If any step fails, report the concrete diagnostic. Do not load workflow
71
85
  semantics from this skill.
72
86
 
@@ -109,7 +123,7 @@ command shape or consuming a replacement Discovery. Never rebind, refresh, repla
109
123
  resume, cancel, or manually replace the historical Task. Continue only after a later P04-B/P05
110
124
  package explicitly advertises a topology-preserving replacement capability.
111
125
 
112
- When beta.12.4 `next` advertises `task stop-override-prepare`, the route is limited to the exact
126
+ When beta.12.5 `next` advertises `task stop-override-prepare`, the route is limited to the exact
113
127
  beta.11 attempt-four policy stop: two ordinary failures, one corrective failure, a matching
114
128
  attempt-3 `continue-fix`, and a matching attempt-4 `stop-escalate` under the unchanged Plan. Invoke
115
129
  prepare with the exact Task/Step/revision, explicit human actor, and user-supplied reason. It is
@@ -155,6 +169,17 @@ For `task start`, the policy applies only when choosing `--workspace-owner local
155
169
  `task step-complete`, `task merge`, and `task sync-base`, the advertised transition itself
156
170
  writes Git metadata.
157
171
 
172
+ Treat Docker access diagnostics before classifying an infrastructure failure. `EPERM`,
173
+ `operation not permitted`, or `permission denied` while opening the Docker socket or invoking the
174
+ Docker CLI from a sandbox means the proof is unavailable at the current execution boundary; it is
175
+ not evidence that the daemon or image is broken. Re-run the exact read-only health probe or exact
176
+ Plan check once with the required sandbox escalation. This escalation rerun does not consume a
177
+ Workflow remediation attempt or a local infrastructure retry. Only an escalated probe that reaches
178
+ Docker and reports an unavailable daemon may be classified as a Docker infrastructure failure.
179
+ Never start, stop, or restart Docker Desktop, pull a substitute image, or mutate Docker state merely
180
+ because the sandboxed call returned a permission error; those actions require their own explicit
181
+ authorization and evidence.
182
+
158
183
  When `next` includes `writerTokenContract`, treat it as an exact first-call precondition. Retain
159
184
  the active writer lease from the first-field `writerLeaseReceipt` returned by `task run` and pass it using the advertised `option` for that
160
185
  transition. The token is sensitive: never print, summarize, persist, or substitute a redacted
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://codex-workflow.local/schemas/downstream-proof-invalidation-event.schema.json",
4
+ "title": "Codex Workflow V2 Downstream Proof Invalidation Event",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "eventId",
9
+ "taskId",
10
+ "previousTaskRevision",
11
+ "resultTaskRevision",
12
+ "planHash",
13
+ "activeStepId",
14
+ "invalidatedSteps",
15
+ "dirtyFiles",
16
+ "preservedHeadCommit",
17
+ "actor",
18
+ "reason",
19
+ "packageVersion",
20
+ "previousEventHash",
21
+ "recordedAt",
22
+ "eventHash"
23
+ ],
24
+ "properties": {
25
+ "eventId": { "type": "string", "pattern": "^DPI-[0-9A-HJKMNP-TV-Z]{26}$" },
26
+ "taskId": { "$ref": "#/$defs/taskId" },
27
+ "previousTaskRevision": { "type": "integer", "minimum": 1 },
28
+ "resultTaskRevision": { "type": "integer", "minimum": 2 },
29
+ "planHash": { "$ref": "#/$defs/hash64" },
30
+ "activeStepId": { "$ref": "#/$defs/stepId" },
31
+ "invalidatedSteps": {
32
+ "type": "array",
33
+ "minItems": 1,
34
+ "items": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "required": ["stepId", "evidenceCommit", "triggerFiles"],
38
+ "properties": {
39
+ "stepId": { "$ref": "#/$defs/stepId" },
40
+ "evidenceCommit": { "$ref": "#/$defs/gitHash" },
41
+ "triggerFiles": {
42
+ "type": "array",
43
+ "uniqueItems": true,
44
+ "items": { "type": "string", "minLength": 1 }
45
+ }
46
+ }
47
+ }
48
+ },
49
+ "dirtyFiles": {
50
+ "type": "array",
51
+ "minItems": 1,
52
+ "uniqueItems": true,
53
+ "items": { "type": "string", "minLength": 1 }
54
+ },
55
+ "preservedHeadCommit": { "$ref": "#/$defs/gitHash" },
56
+ "actor": { "type": "string", "minLength": 1 },
57
+ "reason": { "type": "string", "minLength": 1 },
58
+ "packageVersion": { "type": "string", "minLength": 1 },
59
+ "previousEventHash": { "$ref": "#/$defs/nullableHash64" },
60
+ "recordedAt": { "type": "string", "format": "date-time" },
61
+ "eventHash": { "$ref": "#/$defs/hash64" }
62
+ },
63
+ "$defs": {
64
+ "taskId": { "type": "string", "pattern": "^TASK-[0-9A-HJKMNP-TV-Z]{26}$" },
65
+ "stepId": { "type": "string", "pattern": "^STEP-[0-9]{3}(?:-[A-Z0-9-]+)?$" },
66
+ "gitHash": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
67
+ "hash64": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
68
+ "nullableHash64": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" }
69
+ }
70
+ }
@@ -55,6 +55,11 @@
55
55
  },
56
56
  "replacementForTaskId": { "type": ["string", "null"], "pattern": "^TASK-[0-9A-HJKMNP-TV-Z]{26}$" },
57
57
  "replacedByTaskId": { "type": ["string", "null"], "pattern": "^TASK-[0-9A-HJKMNP-TV-Z]{26}$" },
58
+ "invalidatedStepCommits": {
59
+ "type": "array",
60
+ "uniqueItems": true,
61
+ "items": { "type": "string", "pattern": "^[a-f0-9]{40}$" }
62
+ },
58
63
  "dependencyProvenanceRecoveries": {
59
64
  "type": "array",
60
65
  "items": {