dev-flow-codex 0.3.0 → 0.4.0

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.
@@ -0,0 +1,153 @@
1
+ # Codex Method Profile Rendering Reference
2
+
3
+ This is the closed Codex Host-rendering reference for Core Contract 0.2 semantic method steps. Read
4
+ it only after Core returns a complete current Action. It explains how Codex may perform the work; it
5
+ is not a process definition or a second task cursor.
6
+
7
+ ## Authority boundary
8
+
9
+ Core owns task and process identity, the current node and Action, node obligations, semantic step
10
+ IDs and order, legal transitions and guards, problem-class validation, destination, evidence
11
+ validity, recovery, blockers, and terminal outcome. The Adapter owns capability visibility checks,
12
+ rendered instructions, expected artifact descriptions, plain-equivalent work, and honest bounded
13
+ method evidence.
14
+
15
+ The Adapter must not derive or select a transition or destination outside the complete current
16
+ Action. A command result, artifact checkbox, proposal status, verification status, or archive status
17
+ does not advance or mutate Core. Only a valid Core apply using one returned transition can do that.
18
+ The Adapter keeps no independent current node, baseline, profile cursor, or completion state.
19
+
20
+ ## Profiles and rendered operation
21
+
22
+ The immutable task profile is exactly one of `plain`, `spec-kit`, or `openspec`. `plain` uses no
23
+ external method capability. The other profiles map only capabilities actually visible in the
24
+ current Host; listing a capability here does not prove that it is installed.
25
+
26
+ Present each Core-returned step with this closed shape:
27
+
28
+ <!-- rendered-operation-example:start -->
29
+ ```json
30
+ {
31
+ "step_id": "requirements.clarify",
32
+ "purpose": "Resolve material requirement ambiguity.",
33
+ "required": true,
34
+ "profile": "spec-kit",
35
+ "capability_id": "speckit-clarify",
36
+ "rendered_instruction": "Use the installed Spec Kit clarify capability for the active feature.",
37
+ "expected_artifacts": ["active feature specification clarification"],
38
+ "availability": "available"
39
+ }
40
+ ```
41
+ <!-- rendered-operation-example:end -->
42
+
43
+ `availability` is closed and ordered as:
44
+
45
+ ```text
46
+ available
47
+ unavailable
48
+ not_applicable
49
+ unknown
50
+ ```
51
+
52
+ This shape is presentation and admission guidance only. It is never persisted as Core task state.
53
+
54
+ ## Semantic step rendering catalog
55
+
56
+ Capability cells name preferred stable capability IDs. A slash-command spelling is not part of the
57
+ contract. “Direct” means the profile has no mandatory external capability for that step; render
58
+ `not_applicable` and perform the listed plain-equivalent work. Conditional capabilities are rendered
59
+ only when actually visible and appropriate to the current authorized artifacts.
60
+
61
+ <!-- semantic-step-table:start -->
62
+ | Step ID | Developer-readable purpose | Plain-equivalent work | Spec Kit capability guidance | OpenSpec capability guidance | Expected artifacts or result |
63
+ | --- | --- | --- | --- | --- | --- |
64
+ | `requirements.capture` | Capture a bounded goal, scope, exclusions, acceptance criteria, constraints, and assumptions. | Write or revise those bounded requirements. | `speckit-specify` only when no prepared feature exists; otherwise review and revise the current specification. | Use visible `openspec-explore` when intent is unclear, then visible `openspec-propose` when a proposal is needed. | Current requirements specification or proposal/delta specification. |
65
+ | `requirements.clarify` | Resolve material requirement questions with the developer. | Ask only material questions and record the answers. | `speckit-clarify`. | Direct proposal/specification revision; visible `openspec-explore` may support exploration. | Recorded material clarifications. |
66
+ | `requirements.validate` | Verify that requirements are observable, bounded, and free of material ambiguity. | Review acceptance and confirm that no material question remains. | `speckit-checklist` or direct checklist review. | `openspec-validate` plus human review. | Requirements-quality review or structurally valid current change. |
67
+ | `design.choose_approach` | Select the simplest viable approach for the current requirements. | Choose a direct bounded design. | `speckit-plan`. | Revise the proposal/design through visible `openspec-propose`. | Current design artifact. |
68
+ | `design.review_complexity` | Identify unnecessary abstractions and justify retained complexity. | Review the design and justify every retained abstraction. | `speckit-plan` plus direct design review. | Direct review; visible `openspec-explore` may support comparison. | Complexity rationale and rejected alternatives. |
69
+ | `design.record_decisions` | Record components, decisions, rejected alternatives, and risks. | Record the current decisions and affected components. | `speckit-plan` artifact updates. | Update the proposal/design through visible `openspec-propose`. | Current decisions, risks, and design references. |
70
+ | `tasks.decompose` | Decompose the current design into bounded, ordered work items. | Create bounded items with dependencies and expected paths. | `speckit-tasks`. | Revise proposal task artifacts through visible `openspec-propose`. | Current bounded task plan. |
71
+ | `tasks.map_acceptance` | Map every current acceptance criterion to work and verification. | Record acceptance-to-work and verification traceability. | `speckit-tasks`. | Review delta specifications and tasks through visible `openspec-propose`. | Acceptance traceability. |
72
+ | `tasks.analyze_consistency` | Check requirements, design, and tasks for gaps or contradictions. | Perform a direct cross-artifact consistency review. | `speckit-analyze`. | `openspec-validate` plus direct consistency review. | No unresolved blocking consistency gap, or exact findings. |
73
+ | `implementation.execute_plan` | Execute only the work authorized by the current task plan. | Implement the current authorized slice. | `speckit-implement`. | `openspec-apply`. | Implemented current work slice. |
74
+ | `implementation.record_surface` | Record exact changed paths or the no-change state and deviations. | Observe and record the exact changed surface. | Direct implementation result; no mandatory capability. | Direct apply result; no mandatory capability. | Changed paths or explicit no-change result. |
75
+ | `implementation.classify_deviations` | Classify deviations as requirement, design, or complexity concerns. | Record the exact concern and route it through Core facts. | Direct classification; amend active artifacts before continuing when semantics change. | Direct classification and current change-artifact update. | Exact deviations and findings. |
76
+ | `test.run_budgeted_checks` | Run only verification authorized by the current verification budget. | Run the current bounded verification steps. | Direct plan-defined checks; no mandatory Spec Kit capability. | Use `openspec-verify` only when visible; otherwise run plan-defined checks. | Actual current verification result. |
77
+ | `test.record_evidence` | Record actual evidence sources, outcomes, and unverified or manual items. | Record actual sources and statuses without relabeling. | Direct evidence recording; no mandatory capability. | Direct evidence recording; no mandatory capability. | Current bounded evidence summary. |
78
+ | `test.classify_failure` | Classify failures as implementation, design, or requirement problems. | Classify current failures from observed facts. | Direct classification; no mandatory capability. | Direct classification; no mandatory capability. | Exact failure class and findings. |
79
+ | `comprehension.explain` | Explain current behavior, design, and code paths in developer-readable terms. | Present a bounded explanation to the developer. | Direct review; no Spec Kit command owns the verdict. | Direct review; no OpenSpec command owns the verdict. | Developer-readable explanation. |
80
+ | `comprehension.identify_complexity` | Identify unnecessary abstractions and maintenance risks. | List concrete complexity and maintenance concerns. | Direct review; no mandatory capability. | Direct review; no mandatory capability. | Exact abstraction and risk findings. |
81
+ | `comprehension.obtain_user_verdict` | Obtain the developer's explicit understanding or remediation verdict. | Ask the developer and wait for an explicit answer. | Direct user interaction; no Spec Kit capability can answer. | Direct user interaction; no OpenSpec capability can answer. | Explicit current user verdict. |
82
+ | `refactor.simplify` | Remove unnecessary complexity within the approved behavior boundary. | Perform the bounded simplification. | `speckit-implement` only after affected artifacts and tasks are current. | Update change artifacts as needed, then use visible `openspec-apply`. | Bounded simplification. |
83
+ | `refactor.reconcile_artifacts` | Reconcile affected process artifacts with the simplification. | Amend only artifacts affected by the simplification. | Use visible `speckit-clarify`, `speckit-plan`, `speckit-tasks`, or `speckit-analyze` only as needed. | Revise proposal/design/spec/task artifacts through visible `openspec-propose` as needed. | Current affected artifacts. |
84
+ | `refactor.record_surface` | Record exact simplifications and the changed surface. | Record simplifications and exact changed paths. | Direct refactor result; no mandatory capability. | Direct apply result; no mandatory capability. | Refactor summary and changed surface. |
85
+ | `delivery.reconcile_acceptance` | Map the latest acceptance criteria to current test and comprehension evidence. | Reconcile every current criterion with current evidence. | `speckit-analyze` or direct final consistency review. | Use visible `openspec-verify` and/or `openspec-validate` as appropriate. | Current acceptance/evidence mapping. |
86
+ | `delivery.reconcile_method_artifacts` | Reconcile method artifacts with delivered behavior. | Ensure current process artifacts describe the delivered behavior. | Direct status reconciliation; `speckit-converge` may be used only when available and appropriate. | Use visible `openspec-sync` and/or `openspec-archive` only when appropriate. | Current reconciled or archived change artifacts. |
87
+ | `delivery.prepare_summary` | Prepare a bounded delivery summary and remaining risks. | Write the final bounded summary and risks. | Direct summary; no mandatory capability. | Direct summary; no mandatory capability. | Delivery summary and remaining risks. |
88
+ <!-- semantic-step-table:end -->
89
+
90
+ The recognized Spec Kit capability IDs are `speckit-specify`, `speckit-clarify`, `speckit-plan`,
91
+ `speckit-checklist`, `speckit-tasks`, `speckit-analyze`, and `speckit-implement`.
92
+ `speckit-converge` is an optional repository capability and is never a Core required step.
93
+
94
+ The recognized OpenSpec capability IDs are `openspec-explore`, `openspec-propose`, `openspec-apply`,
95
+ `openspec-verify`, `openspec-sync`, `openspec-archive`, and `openspec-validate`. Some integrations do
96
+ not expose verify, sync, or archive. Render only a capability actually visible to the Host. The
97
+ presence of an ID in this reference does not prove installation, and OpenSpec installation or
98
+ initialization is never automatic Core behavior.
99
+
100
+ ## Availability and fallback
101
+
102
+ For each step returned by Core:
103
+
104
+ 1. Check only the Host's actual capability surface.
105
+ 2. When the preferred capability is visible and appropriate, render its exact ID and expected result.
106
+ 3. When visibility is absent or cannot be confirmed, report `unavailable` or `unknown` honestly.
107
+ 4. Always show the catalog's plain-equivalent work.
108
+ 5. Do not automatically install a tool, silently run another tool, or treat invocation as completion.
109
+ 6. Record completion only after the semantic work actually completes.
110
+
111
+ For `plain`, render external capability availability as `not_applicable`. When the ordinary work
112
+ actually completes, evidence uses `status="plain_fallback"` and an empty `capability`; plain work is
113
+ never labeled as an external capability completion. The same `plain_fallback` rule applies when a
114
+ selected external capability is unavailable but the equivalent work actually completes.
115
+
116
+ When equivalent work remains incomplete, record `unavailable` or `not_run` honestly. Neither status
117
+ can satisfy a required semantic step, so the Adapter must not call apply for that Action.
118
+
119
+ ## MethodEvidence
120
+
121
+ A normal mutation supplies exactly one `MethodEvidence` item for every current Action method step,
122
+ in Action order. Each item contains only `step_id`, `status`, `capability`, and `summary`.
123
+
124
+ - `completed` requires the non-empty ID of the actual capability that completed the work.
125
+ - `plain_fallback` requires an empty `capability` and completed plain-equivalent work.
126
+ - `unavailable` and `not_run` do not satisfy a required step.
127
+ - Unknown, duplicate, previous-node, reordered, or omitted steps are invalid.
128
+ - Capability output cannot substitute for the typed `node_result` or any current Core evidence gate.
129
+
130
+ ## Artifact references
131
+
132
+ Submit artifact evidence only as `role`, repository-relative `path`, `digest`, and `summary`. Refer
133
+ only to a file actually observed by the Host. Never submit full contents, command output, prompts,
134
+ token data, runtime configuration, or private locations. An artifact digest does not replace the
135
+ repository binding. File existence, checkboxes, validation, sync, or archive status never advances
136
+ Core by itself.
137
+
138
+ For Spec Kit, determine the exact active Feature from explicit repository context. Never infer it
139
+ only from the branch name. Existing specification, design, and task artifacts should be reviewed and
140
+ amended intentionally; step names do not require rerunning specify, plan, or tasks. Checklist marks
141
+ are reviewer evidence, not implementation progress. Analyze findings become typed node facts, and
142
+ implement work produces repository changes, but neither selects a Core transition.
143
+
144
+ For OpenSpec, propose, apply, verify, sync, and archive results remain method evidence only. Archive
145
+ cannot replace DELIVERY acceptance, current test, comprehension, or evidence gates.
146
+
147
+ ## Comprehension verdict
148
+
149
+ All profiles present a bounded requirements/design/code-path explanation, list unnecessary
150
+ abstractions and maintenance risks, ask whether the developer can explain and maintain the result,
151
+ and wait for an explicit user verdict. No AI statement or Spec Kit/OpenSpec capability may provide
152
+ that confirmation. The Adapter then considers only the matching transition that Core returned; Core
153
+ still validates the typed result and derives the destination.
@@ -0,0 +1,305 @@
1
+ # Core Contract 0.2 Node Payload Construction
2
+
3
+ This reference helps the Codex Adapter construct the one closed payload branch returned by the
4
+ current Core Action. It is not a process definition, transition table, cursor, or authority. The
5
+ fresh Action, the live `dev_flow_apply_action` `inputSchema`, and Core validation remain authoritative.
6
+
7
+ ## Construction rules
8
+
9
+ Before every ordinary apply:
10
+
11
+ 1. Bind one complete fresh Action and read `action_kind`, `current_node`, `payload_contract`,
12
+ `method_steps`, and every `available_transition`.
13
+ 2. Select only a transition returned by that Action. Never submit `destination`, `next_node`,
14
+ `next_cursor`, resume node, guard result, or caller classification.
15
+ 3. Select the matching `dev_flow_apply_action` `inputSchema` branch and use exactly the six common
16
+ payload members: `transition_id`, `summary`, `reason`, `artifacts`, `method_evidence`, and
17
+ `node_result`.
18
+ 4. `required_evidence` and `artifacts` are different concepts. `repository_observation` is a Core evidence requirement, not an ArtifactReference role. When no real repository-relative process
19
+ artifact exists, submit `"artifacts": []`.
20
+ 5. Allowed ArtifactReference roles are only `requirements`, `design`, `task_plan`,
21
+ `implementation`, `test`, `comprehension`, `refactor`, `delivery`, and `other_process`.
22
+ 6. Preserve the complete `node_result` branch wrapper. Never flatten baseline fields or encode an
23
+ array as prose.
24
+ 7. Submit exactly one MethodEvidence item for every current Action method step, in Action order.
25
+ For completed `plain` work use `"status": "plain_fallback"` and `"capability": ""`.
26
+ 8. Replace every value beginning `placeholder-` and every exemplar revision/ID with the current
27
+ normalized value read from the current Task/Action. Delivery acceptance, record IDs, and exact
28
+ evidence sets always come from the latest Task projection and are never guessed.
29
+ 9. Do not include repository facts, payload digests, raw command/output/environment data, or
30
+ unknown members.
31
+ 10. `INVALID_ARGUMENT` is a completed Core domain rejection: stop, report a payload-contract error,
32
+ and do not probe with another payload or treat it as transport uncertainty.
33
+
34
+ <!-- node-payload-template:requirements:start -->
35
+ ```json
36
+ {
37
+ "transition_id": "requirements_ready",
38
+ "summary": "placeholder-normalized-summary",
39
+ "reason": "",
40
+ "artifacts": [],
41
+ "method_evidence": [
42
+ {"step_id": "requirements.capture", "status": "plain_fallback", "capability": "", "summary": "placeholder-capture-summary"},
43
+ {"step_id": "requirements.clarify", "status": "plain_fallback", "capability": "", "summary": "placeholder-clarify-summary"},
44
+ {"step_id": "requirements.validate", "status": "plain_fallback", "capability": "", "summary": "placeholder-validation-summary"}
45
+ ],
46
+ "node_result": {
47
+ "problem_class": "none",
48
+ "baseline": {
49
+ "goal": "placeholder-goal",
50
+ "scope": ["placeholder-scope"],
51
+ "out_of_scope": ["placeholder-exclusion"],
52
+ "acceptance_criteria": ["placeholder-acceptance-criterion"],
53
+ "constraints": ["placeholder-constraint"],
54
+ "assumptions": []
55
+ },
56
+ "unresolved_questions": []
57
+ }
58
+ }
59
+ ```
60
+ <!-- node-payload-template:requirements:end -->
61
+
62
+ Never use `repository_observation` as an artifact role, place goal/scope beside `node_result`, or
63
+ omit `problem_class`, `baseline`, or `unresolved_questions`.
64
+
65
+ <!-- node-payload-template:design:start -->
66
+ ```json
67
+ {
68
+ "transition_id": "design_ready",
69
+ "summary": "placeholder-normalized-summary",
70
+ "reason": "",
71
+ "artifacts": [],
72
+ "method_evidence": [
73
+ {"step_id": "design.choose_approach", "status": "plain_fallback", "capability": "", "summary": "placeholder-approach-summary"},
74
+ {"step_id": "design.review_complexity", "status": "plain_fallback", "capability": "", "summary": "placeholder-complexity-summary"},
75
+ {"step_id": "design.record_decisions", "status": "plain_fallback", "capability": "", "summary": "placeholder-decision-summary"}
76
+ ],
77
+ "node_result": {
78
+ "problem_class": "none",
79
+ "baseline": {
80
+ "requirements_revision": 1,
81
+ "approach": "placeholder-approach",
82
+ "components": ["placeholder-component"],
83
+ "decisions": ["placeholder-decision"],
84
+ "rejected_alternatives": ["placeholder-rejected-alternative"],
85
+ "complexity_justification": [],
86
+ "risks": []
87
+ },
88
+ "findings": []
89
+ }
90
+ }
91
+ ```
92
+ <!-- node-payload-template:design:end -->
93
+
94
+ Use the current requirements revision. The field `complexity` is forbidden; the required field is
95
+ `complexity_justification`, even when its value is an empty array.
96
+
97
+ <!-- node-payload-template:tasks:start -->
98
+ ```json
99
+ {
100
+ "transition_id": "tasks_ready",
101
+ "summary": "placeholder-normalized-summary",
102
+ "reason": "",
103
+ "artifacts": [],
104
+ "method_evidence": [
105
+ {"step_id": "tasks.decompose", "status": "plain_fallback", "capability": "", "summary": "placeholder-decomposition-summary"},
106
+ {"step_id": "tasks.map_acceptance", "status": "plain_fallback", "capability": "", "summary": "placeholder-acceptance-map-summary"},
107
+ {"step_id": "tasks.analyze_consistency", "status": "plain_fallback", "capability": "", "summary": "placeholder-consistency-summary"}
108
+ ],
109
+ "node_result": {
110
+ "problem_class": "none",
111
+ "baseline": {
112
+ "design_revision": 1,
113
+ "work_items": [
114
+ {
115
+ "work_item_id": "placeholder-work-item-id",
116
+ "summary": "placeholder-work-item-summary",
117
+ "expected_paths": ["src/placeholder.mjs"],
118
+ "acceptance_indexes": [0],
119
+ "verification_steps": ["placeholder-targeted-verification"],
120
+ "dependencies": []
121
+ }
122
+ ]
123
+ },
124
+ "findings": []
125
+ }
126
+ }
127
+ ```
128
+ <!-- node-payload-template:tasks:end -->
129
+
130
+ <!-- node-payload-template:implement:start -->
131
+ ```json
132
+ {
133
+ "transition_id": "implementation_ready_for_test",
134
+ "summary": "placeholder-normalized-summary",
135
+ "reason": "",
136
+ "artifacts": [],
137
+ "method_evidence": [
138
+ {"step_id": "implementation.execute_plan", "status": "plain_fallback", "capability": "", "summary": "placeholder-execution-summary"},
139
+ {"step_id": "implementation.record_surface", "status": "plain_fallback", "capability": "", "summary": "placeholder-surface-summary"},
140
+ {"step_id": "implementation.classify_deviations", "status": "plain_fallback", "capability": "", "summary": "placeholder-deviation-summary"}
141
+ ],
142
+ "node_result": {
143
+ "problem_class": "none",
144
+ "task_plan_revision": 1,
145
+ "completed_work_item_ids": ["placeholder-work-item-id"],
146
+ "changed_paths": ["src/placeholder.mjs"],
147
+ "no_file_changes": false,
148
+ "deviations": [],
149
+ "findings": []
150
+ }
151
+ }
152
+ ```
153
+ <!-- node-payload-template:implement:end -->
154
+
155
+ Exactly one of a nonempty `changed_paths` list or `no_file_changes=true` describes the current
156
+ implementation result.
157
+
158
+ <!-- node-payload-template:test:start -->
159
+ ```json
160
+ {
161
+ "transition_id": "tests_passed",
162
+ "summary": "placeholder-normalized-summary",
163
+ "reason": "",
164
+ "artifacts": [],
165
+ "method_evidence": [
166
+ {"step_id": "test.run_budgeted_checks", "status": "plain_fallback", "capability": "", "summary": "placeholder-check-summary"},
167
+ {"step_id": "test.record_evidence", "status": "plain_fallback", "capability": "", "summary": "placeholder-evidence-summary"},
168
+ {"step_id": "test.classify_failure", "status": "plain_fallback", "capability": "", "summary": "placeholder-classification-summary"}
169
+ ],
170
+ "node_result": {
171
+ "problem_class": "none",
172
+ "checks": [
173
+ {"source": "automated", "name": "placeholder-check-name", "status": "passed", "summary": "placeholder-check-result", "command_count": 1, "full_suite": false}
174
+ ],
175
+ "failed_items": [],
176
+ "unverified_items": [],
177
+ "manual_handoff_items": [],
178
+ "findings": []
179
+ }
180
+ }
181
+ ```
182
+ <!-- node-payload-template:test:end -->
183
+
184
+ <!-- node-payload-template:comprehension-complexity:start -->
185
+ ```json
186
+ {
187
+ "transition_id": "code_too_complex",
188
+ "summary": "placeholder-normalized-summary",
189
+ "reason": "placeholder-required-complexity-reason",
190
+ "artifacts": [],
191
+ "method_evidence": [
192
+ {"step_id": "comprehension.explain", "status": "plain_fallback", "capability": "", "summary": "placeholder-explanation-summary"},
193
+ {"step_id": "comprehension.identify_complexity", "status": "plain_fallback", "capability": "", "summary": "placeholder-complexity-summary"},
194
+ {"step_id": "comprehension.obtain_user_verdict", "status": "plain_fallback", "capability": "", "summary": "placeholder-user-verdict-summary"}
195
+ ],
196
+ "node_result": {
197
+ "problem_class": "code_complexity",
198
+ "explained_components": ["placeholder-component"],
199
+ "unresolved_questions": [],
200
+ "unnecessary_abstractions": ["placeholder-unnecessary-abstraction"],
201
+ "maintenance_risks": [],
202
+ "user_confirmation": null,
203
+ "findings": ["placeholder-matching-complexity-fact"]
204
+ }
205
+ }
206
+ ```
207
+ <!-- node-payload-template:comprehension-complexity:end -->
208
+
209
+ <!-- node-payload-template:comprehension-passed:start -->
210
+ ```json
211
+ {
212
+ "transition_id": "comprehension_passed",
213
+ "summary": "placeholder-normalized-summary",
214
+ "reason": "",
215
+ "artifacts": [],
216
+ "method_evidence": [
217
+ {"step_id": "comprehension.explain", "status": "plain_fallback", "capability": "", "summary": "placeholder-explanation-summary"},
218
+ {"step_id": "comprehension.identify_complexity", "status": "plain_fallback", "capability": "", "summary": "placeholder-complexity-summary"},
219
+ {"step_id": "comprehension.obtain_user_verdict", "status": "plain_fallback", "capability": "", "summary": "placeholder-user-verdict-summary"}
220
+ ],
221
+ "node_result": {
222
+ "problem_class": "none",
223
+ "explained_components": ["placeholder-component"],
224
+ "unresolved_questions": [],
225
+ "unnecessary_abstractions": [],
226
+ "maintenance_risks": [],
227
+ "user_confirmation": {"source": "user", "status": "passed", "summary": "placeholder-explicit-user-verdict-summary"},
228
+ "findings": []
229
+ }
230
+ }
231
+ ```
232
+ <!-- node-payload-template:comprehension-passed:end -->
233
+
234
+ No AI or method capability may create the passing user confirmation.
235
+
236
+ <!-- node-payload-template:refactor:start -->
237
+ ```json
238
+ {
239
+ "transition_id": "refactor_ready_for_test",
240
+ "summary": "placeholder-normalized-summary",
241
+ "reason": "",
242
+ "artifacts": [],
243
+ "method_evidence": [
244
+ {"step_id": "refactor.simplify", "status": "plain_fallback", "capability": "", "summary": "placeholder-simplification-summary"},
245
+ {"step_id": "refactor.reconcile_artifacts", "status": "plain_fallback", "capability": "", "summary": "placeholder-reconciliation-summary"},
246
+ {"step_id": "refactor.record_surface", "status": "plain_fallback", "capability": "", "summary": "placeholder-surface-summary"}
247
+ ],
248
+ "node_result": {
249
+ "problem_class": "none",
250
+ "changed_paths": ["src/placeholder.mjs"],
251
+ "no_file_changes": false,
252
+ "simplifications": ["placeholder-simplification"],
253
+ "behavior_change_intended": false,
254
+ "findings": []
255
+ }
256
+ }
257
+ ```
258
+ <!-- node-payload-template:refactor:end -->
259
+
260
+ <!-- node-payload-template:delivery:start -->
261
+ ```json
262
+ {
263
+ "transition_id": "delivery_complete",
264
+ "summary": "placeholder-normalized-summary",
265
+ "reason": "",
266
+ "artifacts": [],
267
+ "method_evidence": [
268
+ {"step_id": "delivery.reconcile_acceptance", "status": "plain_fallback", "capability": "", "summary": "placeholder-acceptance-summary"},
269
+ {"step_id": "delivery.reconcile_method_artifacts", "status": "plain_fallback", "capability": "", "summary": "placeholder-artifact-summary"},
270
+ {"step_id": "delivery.prepare_summary", "status": "plain_fallback", "capability": "", "summary": "placeholder-delivery-summary"}
271
+ ],
272
+ "node_result": {
273
+ "problem_class": "none",
274
+ "acceptance": [{"criterion": "placeholder-current-criterion", "status": "satisfied"}],
275
+ "automated_evidence_ids": ["placeholder-current-automated-evidence-id"],
276
+ "manual_evidence_ids": ["placeholder-current-comprehension-evidence-id"],
277
+ "test_record_id": "placeholder-current-test-record-id",
278
+ "comprehension_record_id": "placeholder-current-comprehension-record-id",
279
+ "unverified_items": [],
280
+ "risks": [],
281
+ "findings": []
282
+ }
283
+ }
284
+ ```
285
+ <!-- node-payload-template:delivery:end -->
286
+
287
+ Acceptance order/text and the automated/manual evidence lists must exactly equal the latest Core
288
+ projection. Use only current TestRecord and ComprehensionAssessment IDs; stale or guessed IDs are
289
+ forbidden.
290
+
291
+ <!-- node-payload-template:blocked:start -->
292
+ ```json
293
+ {
294
+ "blocker_id": "placeholder-current-blocker-id",
295
+ "condition": {
296
+ "kind": "restore_issuance_binding",
297
+ "expected_binding_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
298
+ },
299
+ "observed_binding_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
300
+ }
301
+ ```
302
+ <!-- node-payload-template:blocked:end -->
303
+
304
+ For `RESOLVE_BLOCKER`, use the exact current blocker ID, stored condition, and freshly observed
305
+ binding digest required by Core. Never submit a resume node or destination.
Binary file