immune-brain 3.5.0 → 3.6.1

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.
@@ -1,25 +1,34 @@
1
- # Immune-Brain Pi Preferences
1
+ # Immune-Brain Host Preferences
2
2
 
3
3
  Pi and Claude Code are supported code-agent hosts. Immune-Brain does not load an
4
4
  agent-local TOML file or Immune-Brain-specific environment overrides. User and
5
- project preferences belong in Pi-injected `AGENTS.md` instructions.
5
+ project preferences belong in the Host's agent instruction files.
6
6
 
7
7
  ## Precedence
8
8
 
9
9
  Planner preferences resolve in this order:
10
10
 
11
11
  1. a literal instruction in the current request;
12
- 2. the repository root `AGENTS.md`;
13
- 3. `~/.pi/agent/AGENTS.md`; or
14
- 4. the Skill's documented default or an explicit user question.
12
+ 2. the repository root agent instruction file, whichever the repository tracks:
13
+ `AGENTS.md` or `CLAUDE.md`;
14
+ 3. the Host's user-level agent instruction file; or
15
+ 4. an explicit user question.
15
16
 
16
- Invalid values are reported rather than guessed.
17
+ Hosts differ in which files they auto-load: Pi injects `AGENTS.md`, while Claude
18
+ Code auto-loads `CLAUDE.md` and does not read `~/.pi/agent/AGENTS.md` at all. A
19
+ Skill therefore reads sources 2 and 3 directly instead of assuming the Host
20
+ placed them in context, and reports which sources it checked.
21
+
22
+ Invalid values are reported rather than guessed. A preference with no documented
23
+ default resolves to a user question, never to a silently chosen value.
17
24
 
18
25
  ## Initiative Carrier
19
26
 
20
27
  The Initiative carrier preference applies only to proposals split across
21
28
  multiple TaskIntents. Ordinary TaskIntents remain tracked by Kernel
22
- TaskRecords. Set one of these fixed directives in `AGENTS.md`:
29
+ TaskRecords. There is no built-in carrier default; when no directive is found,
30
+ Planner asks. Set one of these fixed directives in the repository root
31
+ `AGENTS.md` or `CLAUDE.md`:
23
32
 
24
33
  ```md
25
34
  ## Immune-Brain Preferences
@@ -33,7 +42,7 @@ TaskRecords. Set one of these fixed directives in `AGENTS.md`:
33
42
  - Initiative carrier default: github
34
43
  ```
35
44
 
36
- A repository directive overrides the global directive. A configured `github`
45
+ A repository directive overrides the user-level directive. A configured `github`
37
46
  default is standing opt-in for GitHub projection, but the literal user still
38
47
  confirms the Initiative name, immutable slug, complete Parent/Child decomposition,
39
48
  granularity, and dependencies before the first remote mutation. Planner reports
@@ -6,162 +6,155 @@ description: Use to run an enrolled TaskIntent to completion through Kernel-gove
6
6
  # Immune-Brain: Loop
7
7
 
8
8
  This skill adheres to the **[BASELINE.md](BASELINE.md)**.
9
- At every runtime role boundary, call the read-only `imm_loop_action` Tool. Use
10
- `route` for active Steps, bounded repair, architecture exploration, advisory
11
- review, Compounder, Kernel ownership, or scope expansion. Use `dispatch_role`
12
- for `qa`, `code-review`, and `ui-review`, then invoke the returned foreground
13
- Agent envelope exactly. Brainstorm and Planner use the same Tool for bounded
14
- `arch-explorer` and explicit-lens `advisory-reviewer` dispatches. Loop may
15
- dispatch `compounder` only when a closed Step supplies structured evidence for
16
- a reusable Learning; routine work without that evidence returns `next: none`
17
- and creates no Learning. Do not discover or load a Pi Skill for these roles. The Managed Path public entries remain `imm-brainstorm`, `imm-planner`, and `imm-loop`; standalone `imm-pr-fix`, `imm-doc-prune`, and `imm-agent-doc-maintain` are host-native and are never dispatched as the Loop role.
18
- Dispatch authorization follows the [shared Subagent Dispatch
19
- Protocol](docs/reference/subagent-dispatch-protocol.md#authorization-authority).
20
- Same-boundary `follow_up` is not a Plan mutation; it repeats the current
21
- execution, QA, and originating review gate. All internal Agent dispatch
22
- envelopes use `run_in_background: false` and return a direct result to the Parent
23
- before any workflow mutation.
24
-
25
- ## Workflow Profiles
26
-
27
- - `direct` has no Plan or Ledger and never invokes this skill.
28
- - `standard` keeps execution in the main context, closes a Plan Step when the runtime accepts passing evidence, and therefore does not dispatch the internal QA role per Step. It still dispatches every runtime-required final code/UI review gate. The last gate pass atomically performs internal terminal settlement when `compounder_requirement.required` is false.
29
- - `strict` preserves the full internal loop: each Step reaches isolated QA before final review, internal Compounder handoff, and terminal settlement. A missing profile is strict.
30
- - Reviewer `follow_up` targets always retain isolated QA. Standard Plans allow at
31
- most two completed/open rounds; `review_budget_state.budget_stop` is a hard
32
- stop. Never attempt a third Loop runtime action.
33
- - `workflow_profile`, `compounder_requirement`, and `review_budget_state` from
34
- the live Kernel / Loop projection are authoritative. Do not infer or override
35
- them in the host.
36
-
37
- ## Core Responsibilities
38
-
39
- - **Main-context completion loop**: Drive the enrolled Kernel task in the current Host conversation until completion or a safe stop.
40
- - **Context-preserving execution**: Call `imm_loop_action` with `op: route`, then follow the returned `executor` context in the current Parent conversation. Implement only the active Step or pending same-boundary `follow_up`, then record structured execution evidence through the Loop runtime action. A bounded test failure uses the returned internal `test-fixer` dispatch with its explicit delegated test-file list; PR feedback or CI repair uses the returned internal `pr-fix` dispatch inside the current Plan boundary.
41
- - **Independent authority isolation**: Use the host `Agent` subagent primitive for `awaiting_qa_decision` and for the exact runtime-reported review gate. Standard Plan Steps close from accepted passing evidence before an internal QA boundary exists; Strict Steps and all follow-ups retain isolated QA. The parent records accepted child decisions through the Loop runtime action.
42
- - **Observable progress**: Update only at major phase changes: Step start, execution evidence recorded, QA/review result, or terminal stop. Always emit a terminal summary.
43
- - **Kernel projection authority**: Re-read `imm_kernel_canary` `status` after every persisted action. Conversation memory never overrides the Kernel projection.
44
- - **External tracker boundary**: The host may attach one opted-in GitHub Issue projection after terminal settlement. Only a fresh claimless `done`/`stopped` projection plus its exact terminal tombstone projects `completed`/`not planned`; Enrollment performs no GitHub projection. Report tracker failures separately, but never treat them as evidence, stop the Loop, repeat a Kernel mutation, or import Issue state.
45
- - **Scope boundary**: Scope expansion always returns to `imm-planner`; Executor, test repair, and PR/CI repair stop with the concrete missing scope and verification reason instead of widening execution.
46
- - **Action authority**: The loop always enters through `imm_loop_action`; its projected `next` authority is `executor`, `test-fixer`, `pr-fix`, `arch-explorer`, `advisory-reviewer`, `compounder`, `imm_kernel_canary`, `imm-planner`, or `none`.
47
-
48
- ## Kernel Loop
49
-
50
- Repeat this sequence; do not silently stop while a valid action remains:
51
-
52
- 1. Call `imm_loop_action` with `op: route` (or `dispatch_role` at a QA/review boundary) and follow the projected `next` authority.
53
- 2. Emit one progress line: `[target][phase] result | next: action`.
54
- 3. Execute exactly one allowed action:
55
- - Kernel ownership: call `imm_kernel_canary` for that owned task. Freeze the completed artifacts, then call `advance_assurance`; when it returns `review_ready`, invoke the foreground reviewer and pass its structured verdict to `submit_review`. When the projection calls for `request_authorization` or `approve_breaking_intent_revision`, invoke the exact Tool operation directly without asking the user for chat pre-confirmation; the native host interaction is the single authority decision. Invoke `repair_authority_state` directly for a proven stale claim; Kernel revalidation removes only the redundant claim without user interaction.
56
- - Active Step / `rework_needed`: follow the returned `executor` context in the current conversation, implement only the active Step or pending same-boundary `follow_up`, verify, record structured execution evidence through the Loop runtime action, and continue. A bounded test-only repair may request internal `test-fixer` with `focus_delta.specific_changes`; PR review or CI repair may request internal `pr-fix` with the current `plan_id`, changed-file boundary, and verification. Both return child evidence to the Parent and cannot widen scope.
57
- - `awaiting_qa_decision`: call `imm_loop_action` with `op: dispatch_role`, role `qa`, the current projection, Plan verification, recorded evidence, and current target identity. Invoke the returned foreground Agent envelope exactly. A `rework` or `replan` must carry validated `notes`.
58
- - `review_required`: map the exact `pending_review_gate` (`imm-code-review` or `imm-ui-review`) to the internal `code-review` or `ui-review` role and call `imm_loop_action` with `op: dispatch_role`, passing `pending_review_gate`, `review_changed_files`, and `review_changed_files_signature`. Invoke the returned foreground Agent envelope exactly. Record a validated pass, or open a same-boundary follow-up through the Loop runtime action.
59
- - `awaiting_user_successor_decision`: stop immediately with `recommended_authority: user`, no next skill, and no runtime action. This boundary must not dispatch Planner, transition, Compounder, or a new Pi session/subagent. Only a literal user may supply a concrete validated successor Plan through the native authority gate; the internal runtime token is `--approve-successor`, never a public Skill or user-facing entry.
60
- 4. After every accepted runtime write, discard the old snapshot and read a fresh Kernel / Loop projection. Emit a result line only when the write completes a major phase or a subagent round.
61
-
62
- Use Pi native `Agent` subagents. Do not spawn Pi child processes or invoke a separate `imm-loop` CLI.
63
-
64
- ## Authority and Failure Guards
65
-
66
- - Implementation requires a validated Plan and active Step or accepted pending `follow_up`.
67
- - The parent may implement but must not issue its own QA or review pass.
68
- - QA and reviewer children must not edit files, write Plans, mutate Kernel state, or close decisions directly.
69
- - Missing `Agent` support, failed or malformed child output, stale child target, runtime write failure, invalid projection, missing credentials, unclear verification, repeated unchanged failure, or user cancellation stops fail-closed with an explicit reason and no decision write.
70
- - A Managed native authority failure reports its stable reason and exactly one same-Host recovery action. Never recommend another Host, worktree, Direct Path, unmanaged implementation, or automatic retry as a fallback.
71
- - `replan_needed` stops at `imm-planner`; do not widen scope or rewrite the active Plan. A replacement must use a new sequential Plan path after the current Plan reaches `completed`, or after a literal user explicitly marks it `cancelled` or `superseded`.
72
- - Plans never suspend, resume, queue, or execute in parallel. Do not insert a repair Plan ahead of the current Plan.
73
- - Same-boundary review `follow_up` repeats execution, independent QA, and the originating review gate.
74
- - Runtime `review_required` is the single review-gate authority. Do not invent hidden gates.
75
- - `imm-compounder` is an internal role and is never invoked as a public Skill. A `complete` projection carries an explicit internal Compounder handoff because the runtime determined it is required. A Standard Plan with optional Compounder is atomically finished by the last review gate and does not emit that handoff. Strict Plans preserve the successful order: current Steps and QA, required reviews, internal Compounder handoff, terminal settlement, then `awaiting_user_successor_decision` for a non-terminal Roadmap slice.
76
- - Successor approval is non-delegable. QA, review, Planner, Compounder, and the loop cannot approve or activate a successor, and the loop must not turn a command template into an executable successor invocation.
77
-
78
- ## Stop Conditions
79
-
80
- Stop only for:
81
-
82
- - `complete` with an explicit internal Compounder handoff before terminal settlement
83
- - `terminal_plan_complete` after a contracted terminal Plan or a legacy Plan without successor metadata has passed internal Compounder handoff and terminal settlement; stop with no next skill, authority, or action
84
- - `awaiting_user_successor_decision` after finish, with literal user authority and no automatic action
85
- - `replan_needed`
86
- - blocker or required user input
87
- - runtime, tool, subagent, or output-contract failure
88
- - user cancellation (no decision write; Plan termination is a separate explicit user-confirmed runtime action)
89
- - repeated unchanged failure
90
- - explicit Step, rework, review, follow-up, or elapsed-time budget exhaustion
91
-
92
- Session-local budgets are advisory. Persisted Step, QA, review, and follow-up state controls recovery. After interruption, re-enter only by reading a fresh projection: a completed runtime write is honored once; an interrupted pre-write action is not claimed; cancellation performs no decision write; repeated unchanged failure stops unless the next attempt names a strategy change; explicit budgets stop before another action.
93
-
94
- ## Observable Output Contract
95
-
96
- Do not narrate projection reads or routine runtime writes. Emit compact progress only for Step start, completed execution evidence, QA/review decisions, failures that change the plan, and terminal stop. Every subagent round still emits exactly one dispatch line and exactly one collection/result line:
97
9
 
98
- ```text
99
- [Step 1/3][Executor] evidence recorded | next: QA
100
- [Step 1/3][QA] Agent dispatched
101
- [Step 1/3][QA] Agent collected: pass | next: imm-code-review
102
- ```
103
-
104
- Do not emit a successful collection line for timeout, cancellation, malformed output, or stale identity; emit the explicit failure stop instead.
105
-
106
- Every exit, including failure, must include:
10
+ ## Kernel Canary Routing and Authority
11
+
12
+ Only explicit `imm-loop` entry starts or resumes this loop. Ordinary host input
13
+ stays host-native; it never resumes a Managed owner implicitly. Read the current
14
+ Host's `imm_kernel_canary` `status` first and verify the exact active backend
15
+ claim, TaskIntent, and TaskRecord. Invalid or contradictory projections fail
16
+ closed. A candidate TaskIntent is not Enrollment authority.
17
+
18
+ Before the first Enrollment of a candidate TaskIntent, confirm the Planner
19
+ returned `tracker_associated` for its Initiative. `tracker_projection_failed` or
20
+ `awaiting_user_initiative_confirmation` blocks that Enrollment until the same
21
+ complete carrier batch succeeds; report the stable carrier reason and its exact
22
+ retry action instead of enrolling. A carrier command the Host refused, cancelled,
23
+ or never ran is not a completed batch, and a later `imm-loop` entry does not
24
+ clear it. This pre-Enrollment gate is distinct from the post-settlement tracker
25
+ projection below, which never blocks the Loop.
26
+
27
+ TaskIntent defines the goal, acceptance, and `scope_hint`; TaskRecord and the
28
+ Kernel projection own lifecycle, artifact state, freshness, and next obligation.
29
+ Conversation memory, GitHub Issues, and `CONTEXT.md` never override them.
30
+ Historical prose Plans and State Ledgers are read-only history, not execution
31
+ instructions. Do not create Steps, workflow profiles, follow-up ledgers, or
32
+ successor Plans to drive a Kernel task.
33
+
34
+ At every internal role boundary call the read-only `imm_loop_action` Tool. Use
35
+ `route` for current-context Executor work, bounded repair, architecture
36
+ exploration, advisory review, Compounder, Kernel ownership, or scope expansion.
37
+ Use Kernel ownership for an enrolled task. This Tool projects authority; it does
38
+ not record execution evidence, mutate task state, or replace Kernel operations.
39
+ Follow the [Subagent Dispatch Protocol](docs/reference/subagent-dispatch-protocol.md#authorization-authority).
40
+ Never load an internal role as a public Skill or spawn another loop process.
41
+ The standalone `imm-pr-fix`, `imm-doc-prune`, and `imm-agent-doc-maintain` are host-native
42
+ maintenance entries, never dispatched as the Loop role. Internal `test-fixer`
43
+ and `pr-fix` repairs remain bounded by the enrolled TaskIntent.
44
+
45
+ ## Execution Loop
46
+
47
+ Continue while the current projection has a valid action:
48
+
49
+ 1. For active artifacts, implement only the enrolled acceptance within
50
+ `scope_hint` in the current conversation. Run focused checks. Executor checks
51
+ are diagnostic evidence, not a QA or Review approval.
52
+ 2. Before Assurance, call `freeze_artifacts` while TaskRecord is `active:active`.
53
+ A bound active Spec and its archive path must both be inside `scope_hint`.
54
+ The Kernel owns byte-preserving archival and the frozen snapshot.
55
+ 3. Call `advance_assurance` in the foreground and consume its direct terminal
56
+ result. Deterministic QA runs fixed acceptance descriptors atomically inside
57
+ the Host integration. Do not dispatch a separate per-Step QA Agent.
58
+ 4. On `review_ready`, invoke the returned `agent_params` as one exact foreground
59
+ Agent call, then pass its structured verdict to `submit_review`. Do not
60
+ replace this snapshot-bound reviewer with a generic role dispatch. The Parent
61
+ cannot issue its own QA or Review pass.
62
+ 5. Follow the returned Kernel obligation. Fresh QA suffices for routine work;
63
+ material and critical work additionally require fresh independent Review.
64
+ Normal completion does not require a second user confirmation.
65
+ 6. For rework, follow the projected artifact state before editing. Resolve
66
+ findings only after fixing and verifying their cause. Changed snapshots
67
+ invalidate old evidence; freeze and run the newly required obligations.
68
+ 7. Stop on terminal `done` or `stopped`, unresolved user decisions, explicit
69
+ cancellation, or a failure without a safe projected action.
70
+
71
+ Use the fresh projection returned by a successful operation when supplied. Read
72
+ `status` after interruption, ambiguous mutation results, absent projections, or
73
+ suspected external changes. Never repeat a mutation merely to obtain its result.
74
+ Kernel CAS and freshness checks remain mandatory; reducing Parent reads does
75
+ not bypass them. Do not poll or create detached jobs.
76
+
77
+ ## Decisions and Recovery
78
+
79
+ - Scope expansion always returns to `imm-planner`. Collect all currently known missing
80
+ paths, caller/test/generated mirrors, and verification reasons in one request.
81
+ Do not edit outside scope while waiting or widen it piecemeal without new
82
+ evidence. Bounded test or PR repair stays inside the same TaskIntent.
83
+ - Invoke `approve_breaking_intent_revision` with the complete next intent
84
+ directly; the native Host gate is the single user decision. Do not overwrite
85
+ enrolled intent sidecars or ask for chat pre-confirmation.
86
+ - On `awaiting_user`, invoke `request_authorization` directly. It is reserved
87
+ for a concrete unresolved decision or explicit stop, not risk tier alone.
88
+ - Invoke `repair_authority_state` directly for a proven stale claim. Kernel
89
+ revalidation removes only the redundant claim without user interaction.
90
+ - A Managed native authority failure stays fail-closed. Report its stable reason
91
+ and exactly one same-Host recovery action. Never recommend another Host,
92
+ worktree, Direct Path, unmanaged implementation, or automatic retry.
93
+ - After interruption, read a fresh projection and run only the pending obligation.
94
+ A committed QA result is honored; an interrupted precommit QA run produces no
95
+ approval. Do not rerun fresh QA simply because Review was interrupted.
96
+ - Malformed or stale reviewer output is not a verdict. Keep the existing
97
+ reservation only if the Host reports it valid; use its exact recovery action.
98
+ Do not fabricate a pass or blindly redispatch Review.
99
+ - Missing tools, credentials, invalid projections, or repeated unchanged failures
100
+ stop with a concrete cause. Cancellation performs no decision write and is not
101
+ task termination. Explicit task stop uses its native authority gate.
102
+
103
+ ## Review and Learning
104
+
105
+ Reviewers are read-only and bound to the frozen snapshot. They cannot edit files,
106
+ write planning artifacts, mutate Kernel state, or settle decisions. Report all
107
+ substantiated blockers in one round, tied to acceptance or a concrete regression;
108
+ separate optional advice from blockers. Suggestions alone do not justify rework.
109
+ Use the returned verdict schema exactly, including omission of unsupported fields.
110
+
111
+ `dispatch_role` for `qa`, `code-review`, or `ui-review` is used only when an
112
+ explicit runtime-supported role boundary requests it, followed by the returned
113
+ foreground Agent envelope exactly. It is not an extra gate on Kernel Assurance.
114
+ All internal Agent envelopes use `run_in_background: false`.
115
+
116
+ The internal Compounder is optional: only closed work with structured evidence
117
+ of a reusable Learning may route to it. Routine completion creates no Learning.
118
+ It cannot approve successors or delay terminal settlement. A projection with
119
+ `recommended_authority: user` must not dispatch successor work automatically.
120
+ Do not create, switch,
121
+ or delete Git worktrees; operate only in the Host launch directory.
122
+
123
+ The Host may attach an opted-in GitHub projection after settlement. Only a fresh claimless
124
+ `done`/`stopped` projection plus its exact terminal tombstone projects
125
+ `completed`/`not planned`; Enrollment performs no GitHub projection. Report a
126
+ tracker failure separately; never use it as evidence, a Loop blocker, or a reason to
127
+ repeat a Kernel mutation.
128
+
129
+ ## Observable Output
130
+
131
+ Emit progress at execution start, QA/Review phase changes, failures, and terminal
132
+ stop. Every Agent round has one dispatch line and one result line; never claim a
133
+ successful collection on timeout, cancellation, malformed output, or stale identity.
134
+ Normal conversation and visible Tool calls are the observation surface. Do not
135
+ narrate routine projection reads or add Footer status content.
136
+
137
+ Every exit includes a concise summary:
107
138
 
108
139
  ```text
109
- Plan:
110
- Completed Steps:
140
+ Task:
141
+ Completed work:
111
142
  QA:
112
143
  Review:
113
144
  Stop reason:
114
145
  Next action:
115
146
  ```
116
147
 
117
- Normal conversation text and visible tool calls are the correctness-level observation surface. Extension widgets are optional decoration only.
118
-
119
- ## Boundary
120
-
121
- - **Allowed**: Coordinate Kernel / Loop projections, current-conversation Executor work, isolated QA/review children, runtime decision recording, same-boundary follow-up, and terminal handoff reporting.
122
- - **Blocked**: Plan edits, parent-owned QA/review pass, hidden review gates, direct Kernel-store edits, child-owned state mutation, automatic Compounder execution, and external loop runners.
123
- - **Workflow guard**: Kernel and Loop projections choose the next authority; each authority keeps its existing Skill contract.
124
-
125
- ## Output artifact
126
-
127
- A visible completion trace plus terminal summary containing Plan, completed Steps, QA state, review state, stop reason, and next action.
128
-
129
- ## Next Action
130
-
131
- - If no validated Plan exists: stop and route to `imm-planner`.
132
- - If an allowed Loop action exists: continue the loop without another user command.
133
- - If work is fully closed but not finished: report the explicit internal Compounder handoff and wait for terminal settlement.
134
- - If the projection is `awaiting_user_successor_decision`: report the candidate and preconditions, ask for the user's decision, and stop without dispatch.
135
-
136
- ## Output style
137
-
138
- Default user-facing shape: checkpoint progress lines, then `Conclusion -> Evidence -> Next action` at the terminal boundary.
139
-
140
- ## Kernel Canary Routing
141
-
142
- When the Kernel projection reports an active/draining backend claim, keep
143
- `imm-loop` as the user-facing entry and call the current Host's Kernel integration
144
- for that owned task. Enrollment and Review authorization use the current Host's
145
- native gates. When the projection calls for `request_authorization` or
146
- `approve_breaking_intent_revision`, invoke the exact Tool operation directly
147
- without asking the user for chat pre-confirmation; the native Host interaction is
148
- the single authority decision. Invoke
149
- `repair_authority_state` directly for a proven stale claim; Kernel revalidation
150
- removes only the redundant claim without user interaction. Do not invoke the
151
- removed `imm-canary-work` Skill as
152
- a separate entry point. Invalid or contradictory projections fail closed. After
153
- implementation and focused verification, freeze the artifacts and call
154
- `advance_assurance`. If it returns `review_ready`, invoke the foreground
155
- reviewer and pass its structured verdict to `submit_review`;
156
- `request_authorization` is reserved for an unresolved user decision or an
157
- explicit stop. Critical work completes after fresh QA and Review without a
158
- second user confirmation.
159
- Every QA/Review operation stays foreground and returns its next projected
160
- obligation directly to the Parent. The host performs any opted-in GitHub Issue
161
- projection only after the corresponding authority mutation: only a fresh
162
- claimless `done`/`stopped` projection with its exact terminal tombstone projects
163
- terminal closure (`completed`/`not planned`); Enrollment performs no GitHub
164
- projection. Treat the attached tracker result as non-authoritative observation.
165
- Report its failure separately, but never use it as evidence, a stop condition,
166
- or a reason to repeat a Kernel mutation. A terminal tombstone alone never
167
- blocks unrelated v3 routing.
148
+ For `settlement_unknown`, call `advance_assurance` once to reconcile the Kernel
149
+ projection before resuming; never replay the uncertain write directly. The runtime
150
+ retries only explicit `EINTR`/`EAGAIN` failures of its initial projection read, once,
151
+ with cancellation checks. Semantic authority errors and mutation failures are not
152
+ retryable reads. For `review_preparation_failed`, repair the reported transport or
153
+ environment cause before advancing; committed QA remains valid. For
154
+ `verdict_invalid`, correct the existing payload once and resubmit without another
155
+ reviewer dispatch. If correction fails, report the schema failure and stop the
156
+ correction loop.
157
+
158
+ For failures, name the cause, stages already committed, the safe retry boundary,
159
+ and exactly one next action. Distinguish user approval from environment repair
160
+ and runtime failure. Do not ask the user to manually switch internal roles.