devrites 6.2.0 → 6.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/docs/engine/commands.md +2 -2
  4. package/engine/internal/lib/drift.go +14 -2
  5. package/engine/internal/lib/proportion.go +130 -0
  6. package/engine/internal/lib/slicecheck.go +1 -0
  7. package/pack/.claude/agents/devrites-code-reviewer.md +1 -1
  8. package/pack/.claude/agents/devrites-plan-drafter.md +3 -1
  9. package/pack/.claude/agents/devrites-plan-reviewer.md +4 -1
  10. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +8 -1
  11. package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +4 -0
  12. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +1 -1
  13. package/pack/.claude/skills/rite-build/SKILL.md +2 -1
  14. package/pack/.claude/skills/rite-define/SKILL.md +3 -1
  15. package/pack/.claude/skills/rite-plan/reference/slicing.md +7 -0
  16. package/pack/.claude/skills/rite-prove/SKILL.md +1 -1
  17. package/pack/.claude/skills/rite-vet/SKILL.md +3 -1
  18. package/pack/.claude/skills/rite-vet/reference/artifacts.md +15 -3
  19. package/pack/generated/claude/agents/devrites-code-reviewer.md +1 -1
  20. package/pack/generated/claude/agents/devrites-plan-drafter.md +3 -1
  21. package/pack/generated/claude/agents/devrites-plan-reviewer.md +4 -1
  22. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +8 -1
  23. package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +4 -0
  24. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +1 -1
  25. package/pack/generated/claude/skills/rite-build/SKILL.md +2 -1
  26. package/pack/generated/claude/skills/rite-define/SKILL.md +3 -1
  27. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +7 -0
  28. package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -1
  29. package/pack/generated/claude/skills/rite-vet/SKILL.md +3 -1
  30. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +15 -3
  31. package/pack/generated/codex/agents/devrites-code-reviewer.toml +1 -1
  32. package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -1
  33. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +4 -1
  34. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +8 -1
  35. package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +4 -0
  36. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +1 -1
  37. package/pack/generated/codex/skills/rite-build/SKILL.md +2 -1
  38. package/pack/generated/codex/skills/rite-define/SKILL.md +3 -1
  39. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +7 -0
  40. package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
  41. package/pack/generated/codex/skills/rite-vet/SKILL.md +3 -1
  42. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +15 -3
  43. package/pack/generated/devin/agents/devrites-code-reviewer.md +1 -1
  44. package/pack/generated/devin/agents/devrites-plan-drafter.md +3 -1
  45. package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -1
  46. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +8 -1
  47. package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +4 -0
  48. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +1 -1
  49. package/pack/generated/devin/skills/rite-build/SKILL.md +2 -1
  50. package/pack/generated/devin/skills/rite-define/SKILL.md +3 -1
  51. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +7 -0
  52. package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
  53. package/pack/generated/devin/skills/rite-vet/SKILL.md +3 -1
  54. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +15 -3
  55. package/pack/generated/omp/agents/devrites-code-reviewer.md +1 -1
  56. package/pack/generated/omp/agents/devrites-plan-drafter.md +3 -1
  57. package/pack/generated/omp/agents/devrites-plan-reviewer.md +4 -1
  58. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +8 -1
  59. package/pack/generated/omp/skills/devrites-lib/reference/standards/loop-operations.md +4 -0
  60. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +1 -1
  61. package/pack/generated/omp/skills/rite-build/SKILL.md +2 -1
  62. package/pack/generated/omp/skills/rite-define/SKILL.md +3 -1
  63. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +7 -0
  64. package/pack/generated/omp/skills/rite-prove/SKILL.md +1 -1
  65. package/pack/generated/omp/skills/rite-vet/SKILL.md +3 -1
  66. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +15 -3
  67. package/pack/generated/pi/agents/devrites-code-reviewer.md +1 -1
  68. package/pack/generated/pi/agents/devrites-plan-drafter.md +3 -1
  69. package/pack/generated/pi/agents/devrites-plan-reviewer.md +4 -1
  70. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +8 -1
  71. package/pack/generated/pi/skills/devrites-lib/reference/standards/loop-operations.md +4 -0
  72. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +1 -1
  73. package/pack/generated/pi/skills/rite-build/SKILL.md +2 -1
  74. package/pack/generated/pi/skills/rite-define/SKILL.md +3 -1
  75. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +7 -0
  76. package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
  77. package/pack/generated/pi/skills/rite-vet/SKILL.md +3 -1
  78. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +15 -3
  79. package/package.json +1 -1
@@ -98,7 +98,7 @@ Each required reviewer/analyst/auditor starts with exactly one:
98
98
  ```text
99
99
  Outcome: <findings | no-findings | gap>
100
100
  Counts: <n per severity or kind used in the rows below>
101
- Finding: <severity> conf <n> | <file:line or artifact section> | <observed quote/result> | when <input/state/sequence> → <effect> | <minimum fix>
101
+ Finding: <severity> conf <n> | <file:line or artifact section> | <observed quote/result> | when <input/state/sequence> → <effect> | breaks <ID or standard §> "<quoted line>" | <minimum fix>
102
102
  Basis: <files read · commands run to reach this finding>
103
103
  ```
104
104
 
@@ -108,6 +108,13 @@ Basis: <files read · commands run to reach this finding>
108
108
  A Critical/Important row carries `conf <n>` in its severity cell and writes impact
109
109
  as `when <input/state/sequence> → <effect>`; missing either, root admits it as
110
110
  `Unverified: <claim> — missing trigger` (stays `gap`).
111
+ - **Proportionality:** a Critical/Important row's `breaks` quotes the line it violates:
112
+ a spec ID (`AC`/`REQ`/`INV`/`PROH`/`DEC`/`EDGE`) or a shipped standard rule
113
+ (`<standard>.md § <section>`: security, regression, principles). Root anchors the
114
+ quote like the `file:line` quote. No anchor, or one the defect does not break,
115
+ admits the row as Suggestion logged `Deferred: <claim> — no spec anchor` for an
116
+ optional follow-up slice; it never drives a repair round. Hardening no spec line
117
+ asks for is a Suggestion, however plausible.
111
118
  - **`no-findings`:** `No-findings:` names checks and inspected evidence. Bare
112
119
  pass, empty list, or “looks good” is malformed.
113
120
  - **`gap`:** names missing/unreadable/stale input; skipped/failed required check;
@@ -112,6 +112,10 @@ armed AFK workspace whose exact scope, gates, and budgets permit it.
112
112
  run `devrites-engine check drift <slug>` before re-vetting: it names the
113
113
  exact input artifact that changed (or `missing`/`added`) since the recorded
114
114
  baseline, so the Spec Drift Guard or `$rite-vet` starts at the right file.
115
+ - `check drift` and `check slice` print `ADVISORY proportion:` when a slice's proof
116
+ grew over 2x since the Vet baseline or carries over 3x the median proof per AC.
117
+ Repair by moving rows without a `Proves` spec line to `Deferred hardening`
118
+ ([agents.md](agents.md) § Result admission, Proportionality), not by adding proof.
115
119
  - Native notifications fire only after evidence and stop state are written.
116
120
 
117
121
  Use [`afk-hitl.md`](afk-hitl.md) for unattended authority and resource budgets,
@@ -68,7 +68,7 @@ Workspace files carry state; chat does not. Read and execute each phase skill:
68
68
  | 4 | `$rite-define` | approved plan/tasks/traceability |
69
69
  | 5 | `$rite-vet` | every plan; derive mutable budget after READY |
70
70
  | 6 | `$rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; one-slice round when <2 eligible); refill per landing; charge once per landed slice |
71
- | 7 | `$rite-prove` | all slices built; approved proof; recovery on red |
71
+ | 7 | `$rite-prove` | all slices built except deferred (`Satisfies: none`); approved proof; recovery on red |
72
72
  | 8 | `$rite-polish` | re-prove after code edits |
73
73
  | 9 | `$rite-review` | in-scope correction then fresh proof |
74
74
  | 10 | `$rite-seal` | GO/NO-GO; no Git |
@@ -110,7 +110,8 @@ or canonical transaction, return inspection, independent code/doubt/test analysi
110
110
  approved fail-on-red proof, record, AFK accounting, and stop. Use
111
111
  [`reference/output.md`](reference/output.md) plus the shared
112
112
  [`reply contract`](../devrites-lib/reference/reply-contract.md). HITL never starts
113
- the next slice automatically; AFK obeys remaining budget; Prove requires all slices built.
113
+ the next slice automatically; AFK obeys remaining budget; Prove requires every slice built except a
114
+ [deferred slice](../rite-plan/reference/slicing.md#deferred-slice).
114
115
 
115
116
  ## Phase exit
116
117
 
@@ -131,7 +131,9 @@ Pull these via `Read` when shaping the plan:
131
131
  expand this into repository-wide coverage.
132
132
  4. **Map coverage and wiring:** every `AC-###` spec acceptance criterion maps to ≥1 `SLICE-###`
133
133
  ([`acceptance-criteria.md`](../rite-spec/reference/acceptance-criteria.md)); no orphaned criteria, no slice without a
134
- criterion. Lift covered/backstop `Edge Coverage` rows and resolved `Prohibitions (must-NOT)`
134
+ criterion except a [deferred slice](../rite-plan/reference/slicing.md#deferred-slice). Every proof row quotes the spec line it proves (`Proves`); proof that proves
135
+ none goes to `test-plan.md` `## Deferred hardening`, never into a slice
136
+ ([artifacts.md](../rite-vet/reference/artifacts.md)). Lift covered/backstop `Edge Coverage` rows and resolved `Prohibitions (must-NOT)`
135
137
  rows into `traceability.md` and `test-plan.md`; unresolved rows get a gate/owner. Each
136
138
  `Existing behavior to preserve` row becomes a regression row whose current evidence is
137
139
  observed green on the unchanged baseline as a prerequisite of the first slice touching that
@@ -173,3 +173,10 @@ Slices sharing a file never build side by side: put a hub file's shared edit
173
173
  (registry, command table, test harness) in one seam slice the others depend on.
174
174
  `check task-graph` prints the `schedule:` and `ADVISORY hub:` lines; inseparable
175
175
  writes get `Serial rationale: <why>`. Never merge slices or drop acceptance to widen it.
176
+
177
+ ## Deferred slice
178
+ A slice with `Satisfies: none` is an optional follow-up: plan-invented hardening or
179
+ owner-moved scope kept with its preserved source and contracts. It carries no acceptance
180
+ (every AC still maps to a required slice), is never dispatched (`check slice` refuses
181
+ it), and never counts toward "all slices built", Prove, or Seal. The owner elects it
182
+ later through a plan change that gives it an AC.
@@ -64,7 +64,7 @@ test changes.
64
64
  and no-progress corrections before accepting terminal none; a distinct
65
65
  fingerprint below cap resumes offline triage without another real action.
66
66
  2. **Freeze scope.** Read spec, tasks, state, test plan, and full diff. Require
67
- every slice built. Missing `test-plan.md` returns to Vet inline (Prove stays the controlling
67
+ every slice built except a [deferred slice](../rite-plan/reference/slicing.md#deferred-slice). Missing `test-plan.md` returns to Vet inline (Prove stays the controlling
68
68
  caller) and resumes here; it never authorizes ad hoc proof.
69
69
  3. **Approve commands.** If absent, use
70
70
  [test-command-discovery](reference/test-command-discovery.md) over repository
@@ -209,7 +209,9 @@ plan declares a root-authored executable workflow file, read
209
209
  `devrites-engine check readiness --emit-binding <slug>`; normal readiness check
210
210
  must pass. Record the per-input drift baseline alongside it:
211
211
  `devrites-engine check drift <slug> --record` — a later stale binding then
212
- names the exact artifact that moved instead of "something changed". Technical failure records reproduction, not qid. Human gap awaits
212
+ names the exact artifact that moved instead of "something changed". An `ADVISORY
213
+ proportion:` line names a slice whose proof outgrew its ACs: move its rows without a
214
+ `Proves` spec line to `Deferred hardening` before READY, never deepen them. Technical failure records reproduction, not qid. Human gap awaits
213
215
  Clarify. Optional cross-model follows `reference/cross-model.md` (trigger `cross-model`).
214
216
 
215
217
  With READY, no pending remediation, and a valid technical return cursor,
@@ -128,9 +128,21 @@ prove only their named static criterion.
128
128
  <the ASCII code-paths + user-flows diagram from review-axes.md, with COVERAGE / GAPS / REGRESSIONS line>
129
129
 
130
130
  ## Per-gap test requirements
131
- | ID | Path / flow | Test file (match conventions) | Asserts (input → expected) | Kind | Slice | Priority |
132
- |---|---|---|---|---|---|---|
133
- | T1 | <path> | <path/to.test> | <empty list → 200 + []> | unit / E2E / eval | <slice> | P1 / **Regression-Critical** |
131
+ | ID | Path / flow | Test file (match conventions) | Asserts (input → expected) | Kind | Slice | Priority | Proves |
132
+ |---|---|---|---|---|---|---|---|
133
+ | T1 | <path> | <path/to.test> | <empty list → 200 + []> | unit / E2E / eval | <slice> | P1 / **Regression-Critical** | <AC/REQ/INV/PROH/DEC/EDGE ID or standard § + quoted line> |
134
+
135
+ Every row's `Proves` quotes the spec line or standard rule it proves. A row that proves
136
+ none is plan-invented hardening: move it to `Deferred hardening`.
137
+
138
+ ## Deferred hardening
139
+ | ID | Hardening | Why no spec line needs it | Promote by |
140
+ |---|---|---|---|
141
+ | D1 | <proof or mechanism> | <reason> | <the spec line an owner would add> |
142
+
143
+ Deferred rows, like a [deferred slice](../../rite-plan/reference/slicing.md#deferred-slice),
144
+ are not built, proven, or gating in this feature; this table is their follow-up record.
145
+ Nothing is deleted.
134
146
 
135
147
  ## Interaction inventory (UI slices — every element + flow gets an asserting test)
136
148
  Enumerate every interactive element and user flow the feature exposes; one row each, none
@@ -163,7 +163,7 @@ Outcome: <findings | no-findings | gap>
163
163
  Counts: <n per severity or kind used in the rows below>
164
164
  Account: <admitted findings | No-findings | Gap per Result admission>
165
165
  Coverage: <files read fully | hunk-level | skipped: name — reason>
166
- Finding: <severity> conf <n> | <file:line> | <observed> | when <input/state/sequence> → <effect> | <minimum fix>
166
+ Finding: <severity> conf <n> | <file:line> | <observed> | when <input/state/sequence> → <effect> | breaks <ID or standard §> "<quoted line>" | <minimum fix>
167
167
  Basis: <files read · commands run to reach this finding>
168
168
  Contract: <applicable | not-applicable> — <basis: both sides read · crossing test>
169
169
  Tests: <adequate? gaps>
@@ -26,7 +26,9 @@ seams supplied by the orchestrator.
26
26
  Reuse existing seams and dependencies before proposing new ones. Build vertical
27
27
  slices in dependency order; put a hub file's shared edit in one seam slice
28
28
  ([slicing.md](../skills/rite-plan/reference/slicing.md#slice-independence)). Map every REQ and AC to a slice and executable proof,
29
- name rollback and failure paths; keep acceptance-changing proposals separate. Durable
29
+ name rollback and failure paths; keep acceptance-changing proposals separate. Each proof
30
+ row quotes the spec line or standard rule it proves (`Proves`); proof that proves none
31
+ goes to `test-plan.md` `## Deferred hardening`, never into a slice. Durable
30
32
  proof commands must be portable repository commands, never host-local wrappers,
31
33
  user-specific absolute paths, or temporary proof trees.
32
34
  Reconcile `spec.md`'s applicability map against live evidence. When triggered, apply
@@ -120,7 +120,10 @@ criterion, slice, or proof.
120
120
  `convergence_pressure` eligibility mechanical. Tag every Critical/Important
121
121
  `kind: contract` (an implementer could build it differently and still pass the
122
122
  planned tests) or `kind: mechanism` (a named test can discriminate the wrong
123
- implementation; propose that case as the fix, not new plan prose).
123
+ implementation; propose that case as the fix, not new plan prose). Each
124
+ Critical/Important also quotes the spec line (`AC`/`REQ`/`INV`/`PROH`/`DEC`/`EDGE`)
125
+ or standard rule it breaks; hardening no spec line asks for is a Suggestion
126
+ ([agents.md](../skills/devrites-lib/reference/standards/agents.md) § Result admission, Proportionality).
124
127
  - In a recheck, your verdict covers the listed fingerprints, the correction diff, and
125
128
  the dependents of each changed clause. Return an explicit correction-created
126
129
  regression verdict over the touched invariants and those dependents as
@@ -98,7 +98,7 @@ Each required reviewer/analyst/auditor starts with exactly one:
98
98
  ```text
99
99
  Outcome: <findings | no-findings | gap>
100
100
  Counts: <n per severity or kind used in the rows below>
101
- Finding: <severity> conf <n> | <file:line or artifact section> | <observed quote/result> | when <input/state/sequence> → <effect> | <minimum fix>
101
+ Finding: <severity> conf <n> | <file:line or artifact section> | <observed quote/result> | when <input/state/sequence> → <effect> | breaks <ID or standard §> "<quoted line>" | <minimum fix>
102
102
  Basis: <files read · commands run to reach this finding>
103
103
  ```
104
104
 
@@ -108,6 +108,13 @@ Basis: <files read · commands run to reach this finding>
108
108
  A Critical/Important row carries `conf <n>` in its severity cell and writes impact
109
109
  as `when <input/state/sequence> → <effect>`; missing either, root admits it as
110
110
  `Unverified: <claim> — missing trigger` (stays `gap`).
111
+ - **Proportionality:** a Critical/Important row's `breaks` quotes the line it violates:
112
+ a spec ID (`AC`/`REQ`/`INV`/`PROH`/`DEC`/`EDGE`) or a shipped standard rule
113
+ (`<standard>.md § <section>`: security, regression, principles). Root anchors the
114
+ quote like the `file:line` quote. No anchor, or one the defect does not break,
115
+ admits the row as Suggestion logged `Deferred: <claim> — no spec anchor` for an
116
+ optional follow-up slice; it never drives a repair round. Hardening no spec line
117
+ asks for is a Suggestion, however plausible.
111
118
  - **`no-findings`:** `No-findings:` names checks and inspected evidence. Bare
112
119
  pass, empty list, or “looks good” is malformed.
113
120
  - **`gap`:** names missing/unreadable/stale input; skipped/failed required check;
@@ -112,6 +112,10 @@ armed AFK workspace whose exact scope, gates, and budgets permit it.
112
112
  run `devrites-engine check drift <slug>` before re-vetting: it names the
113
113
  exact input artifact that changed (or `missing`/`added`) since the recorded
114
114
  baseline, so the Spec Drift Guard or `/rite-vet` starts at the right file.
115
+ - `check drift` and `check slice` print `ADVISORY proportion:` when a slice's proof
116
+ grew over 2x since the Vet baseline or carries over 3x the median proof per AC.
117
+ Repair by moving rows without a `Proves` spec line to `Deferred hardening`
118
+ ([agents.md](agents.md) § Result admission, Proportionality), not by adding proof.
115
119
  - Native notifications fire only after evidence and stop state are written.
116
120
 
117
121
  Use [`afk-hitl.md`](afk-hitl.md) for unattended authority and resource budgets,
@@ -68,7 +68,7 @@ Workspace files carry state; chat does not. Read and execute each phase skill:
68
68
  | 4 | `/rite-define` | approved plan/tasks/traceability |
69
69
  | 5 | `/rite-vet` | every plan; derive mutable budget after READY |
70
70
  | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; one-slice round when <2 eligible); refill per landing; charge once per landed slice |
71
- | 7 | `/rite-prove` | all slices built; approved proof; recovery on red |
71
+ | 7 | `/rite-prove` | all slices built except deferred (`Satisfies: none`); approved proof; recovery on red |
72
72
  | 8 | `/rite-polish` | re-prove after code edits |
73
73
  | 9 | `/rite-review` | in-scope correction then fresh proof |
74
74
  | 10 | `/rite-seal` | GO/NO-GO; no Git |
@@ -109,7 +109,8 @@ or canonical transaction, return inspection, independent code/doubt/test analysi
109
109
  approved fail-on-red proof, record, AFK accounting, and stop. Use
110
110
  [`reference/output.md`](reference/output.md) plus the shared
111
111
  [`reply contract`](../devrites-lib/reference/reply-contract.md). HITL never starts
112
- the next slice automatically; AFK obeys remaining budget; Prove requires all slices built.
112
+ the next slice automatically; AFK obeys remaining budget; Prove requires every slice built except a
113
+ [deferred slice](../rite-plan/reference/slicing.md#deferred-slice).
113
114
 
114
115
  ## Phase exit
115
116
 
@@ -130,7 +130,9 @@ Pull these via `Read` when shaping the plan:
130
130
  expand this into repository-wide coverage.
131
131
  4. **Map coverage and wiring:** every `AC-###` spec acceptance criterion maps to ≥1 `SLICE-###`
132
132
  ([`acceptance-criteria.md`](../rite-spec/reference/acceptance-criteria.md)); no orphaned criteria, no slice without a
133
- criterion. Lift covered/backstop `Edge Coverage` rows and resolved `Prohibitions (must-NOT)`
133
+ criterion except a [deferred slice](../rite-plan/reference/slicing.md#deferred-slice). Every proof row quotes the spec line it proves (`Proves`); proof that proves
134
+ none goes to `test-plan.md` `## Deferred hardening`, never into a slice
135
+ ([artifacts.md](../rite-vet/reference/artifacts.md)). Lift covered/backstop `Edge Coverage` rows and resolved `Prohibitions (must-NOT)`
134
136
  rows into `traceability.md` and `test-plan.md`; unresolved rows get a gate/owner. Each
135
137
  `Existing behavior to preserve` row becomes a regression row whose current evidence is
136
138
  observed green on the unchanged baseline as a prerequisite of the first slice touching that
@@ -173,3 +173,10 @@ Slices sharing a file never build side by side: put a hub file's shared edit
173
173
  (registry, command table, test harness) in one seam slice the others depend on.
174
174
  `check task-graph` prints the `schedule:` and `ADVISORY hub:` lines; inseparable
175
175
  writes get `Serial rationale: <why>`. Never merge slices or drop acceptance to widen it.
176
+
177
+ ## Deferred slice
178
+ A slice with `Satisfies: none` is an optional follow-up: plan-invented hardening or
179
+ owner-moved scope kept with its preserved source and contracts. It carries no acceptance
180
+ (every AC still maps to a required slice), is never dispatched (`check slice` refuses
181
+ it), and never counts toward "all slices built", Prove, or Seal. The owner elects it
182
+ later through a plan change that gives it an AC.
@@ -63,7 +63,7 @@ test changes.
63
63
  and no-progress corrections before accepting terminal none; a distinct
64
64
  fingerprint below cap resumes offline triage without another real action.
65
65
  2. **Freeze scope.** Read spec, tasks, state, test plan, and full diff. Require
66
- every slice built. Missing `test-plan.md` returns to Vet inline (Prove stays the controlling
66
+ every slice built except a [deferred slice](../rite-plan/reference/slicing.md#deferred-slice). Missing `test-plan.md` returns to Vet inline (Prove stays the controlling
67
67
  caller) and resumes here; it never authorizes ad hoc proof.
68
68
  3. **Approve commands.** If absent, use
69
69
  [test-command-discovery](reference/test-command-discovery.md) over repository
@@ -208,7 +208,9 @@ plan declares a root-authored executable workflow file, read
208
208
  `devrites-engine check readiness --emit-binding <slug>`; normal readiness check
209
209
  must pass. Record the per-input drift baseline alongside it:
210
210
  `devrites-engine check drift <slug> --record` — a later stale binding then
211
- names the exact artifact that moved instead of "something changed". Technical failure records reproduction, not qid. Human gap awaits
211
+ names the exact artifact that moved instead of "something changed". An `ADVISORY
212
+ proportion:` line names a slice whose proof outgrew its ACs: move its rows without a
213
+ `Proves` spec line to `Deferred hardening` before READY, never deepen them. Technical failure records reproduction, not qid. Human gap awaits
212
214
  Clarify. Optional cross-model follows `reference/cross-model.md` (trigger `cross-model`).
213
215
 
214
216
  With READY, no pending remediation, and a valid technical return cursor,
@@ -128,9 +128,21 @@ prove only their named static criterion.
128
128
  <the ASCII code-paths + user-flows diagram from review-axes.md, with COVERAGE / GAPS / REGRESSIONS line>
129
129
 
130
130
  ## Per-gap test requirements
131
- | ID | Path / flow | Test file (match conventions) | Asserts (input → expected) | Kind | Slice | Priority |
132
- |---|---|---|---|---|---|---|
133
- | T1 | <path> | <path/to.test> | <empty list → 200 + []> | unit / E2E / eval | <slice> | P1 / **Regression-Critical** |
131
+ | ID | Path / flow | Test file (match conventions) | Asserts (input → expected) | Kind | Slice | Priority | Proves |
132
+ |---|---|---|---|---|---|---|---|
133
+ | T1 | <path> | <path/to.test> | <empty list → 200 + []> | unit / E2E / eval | <slice> | P1 / **Regression-Critical** | <AC/REQ/INV/PROH/DEC/EDGE ID or standard § + quoted line> |
134
+
135
+ Every row's `Proves` quotes the spec line or standard rule it proves. A row that proves
136
+ none is plan-invented hardening: move it to `Deferred hardening`.
137
+
138
+ ## Deferred hardening
139
+ | ID | Hardening | Why no spec line needs it | Promote by |
140
+ |---|---|---|---|
141
+ | D1 | <proof or mechanism> | <reason> | <the spec line an owner would add> |
142
+
143
+ Deferred rows, like a [deferred slice](../../rite-plan/reference/slicing.md#deferred-slice),
144
+ are not built, proven, or gating in this feature; this table is their follow-up record.
145
+ Nothing is deleted.
134
146
 
135
147
  ## Interaction inventory (UI slices — every element + flow gets an asserting test)
136
148
  Enumerate every interactive element and user flow the feature exposes; one row each, none
@@ -159,7 +159,7 @@ Outcome: <findings | no-findings | gap>
159
159
  Counts: <n per severity or kind used in the rows below>
160
160
  Account: <admitted findings | No-findings | Gap per Result admission>
161
161
  Coverage: <files read fully | hunk-level | skipped: name — reason>
162
- Finding: <severity> conf <n> | <file:line> | <observed> | when <input/state/sequence> → <effect> | <minimum fix>
162
+ Finding: <severity> conf <n> | <file:line> | <observed> | when <input/state/sequence> → <effect> | breaks <ID or standard §> "<quoted line>" | <minimum fix>
163
163
  Basis: <files read · commands run to reach this finding>
164
164
  Contract: <applicable | not-applicable> — <basis: both sides read · crossing test>
165
165
  Tests: <adequate? gaps>
@@ -22,7 +22,9 @@ seams supplied by the orchestrator.
22
22
  Reuse existing seams and dependencies before proposing new ones. Build vertical
23
23
  slices in dependency order; put a hub file's shared edit in one seam slice
24
24
  ([slicing.md](skill://rite-plan/reference/slicing.md#slice-independence)). Map every REQ and AC to a slice and executable proof,
25
- name rollback and failure paths; keep acceptance-changing proposals separate. Durable
25
+ name rollback and failure paths; keep acceptance-changing proposals separate. Each proof
26
+ row quotes the spec line or standard rule it proves (`Proves`); proof that proves none
27
+ goes to `test-plan.md` `## Deferred hardening`, never into a slice. Durable
26
28
  proof commands must be portable repository commands, never host-local wrappers,
27
29
  user-specific absolute paths, or temporary proof trees.
28
30
  Reconcile `spec.md`'s applicability map against live evidence. When triggered, apply
@@ -117,7 +117,10 @@ criterion, slice, or proof.
117
117
  `convergence_pressure` eligibility mechanical. Tag every Critical/Important
118
118
  `kind: contract` (an implementer could build it differently and still pass the
119
119
  planned tests) or `kind: mechanism` (a named test can discriminate the wrong
120
- implementation; propose that case as the fix, not new plan prose).
120
+ implementation; propose that case as the fix, not new plan prose). Each
121
+ Critical/Important also quotes the spec line (`AC`/`REQ`/`INV`/`PROH`/`DEC`/`EDGE`)
122
+ or standard rule it breaks; hardening no spec line asks for is a Suggestion
123
+ ([agents.md](skill://devrites-lib/reference/standards/agents.md) § Result admission, Proportionality).
121
124
  - In a recheck, your verdict covers the listed fingerprints, the correction diff, and
122
125
  the dependents of each changed clause. Return an explicit correction-created
123
126
  regression verdict over the touched invariants and those dependents as
@@ -98,7 +98,7 @@ Each required reviewer/analyst/auditor starts with exactly one:
98
98
  ```text
99
99
  Outcome: <findings | no-findings | gap>
100
100
  Counts: <n per severity or kind used in the rows below>
101
- Finding: <severity> conf <n> | <file:line or artifact section> | <observed quote/result> | when <input/state/sequence> → <effect> | <minimum fix>
101
+ Finding: <severity> conf <n> | <file:line or artifact section> | <observed quote/result> | when <input/state/sequence> → <effect> | breaks <ID or standard §> "<quoted line>" | <minimum fix>
102
102
  Basis: <files read · commands run to reach this finding>
103
103
  ```
104
104
 
@@ -108,6 +108,13 @@ Basis: <files read · commands run to reach this finding>
108
108
  A Critical/Important row carries `conf <n>` in its severity cell and writes impact
109
109
  as `when <input/state/sequence> → <effect>`; missing either, root admits it as
110
110
  `Unverified: <claim> — missing trigger` (stays `gap`).
111
+ - **Proportionality:** a Critical/Important row's `breaks` quotes the line it violates:
112
+ a spec ID (`AC`/`REQ`/`INV`/`PROH`/`DEC`/`EDGE`) or a shipped standard rule
113
+ (`<standard>.md § <section>`: security, regression, principles). Root anchors the
114
+ quote like the `file:line` quote. No anchor, or one the defect does not break,
115
+ admits the row as Suggestion logged `Deferred: <claim> — no spec anchor` for an
116
+ optional follow-up slice; it never drives a repair round. Hardening no spec line
117
+ asks for is a Suggestion, however plausible.
111
118
  - **`no-findings`:** `No-findings:` names checks and inspected evidence. Bare
112
119
  pass, empty list, or “looks good” is malformed.
113
120
  - **`gap`:** names missing/unreadable/stale input; skipped/failed required check;
@@ -112,6 +112,10 @@ armed AFK workspace whose exact scope, gates, and budgets permit it.
112
112
  run `devrites-engine check drift <slug>` before re-vetting: it names the
113
113
  exact input artifact that changed (or `missing`/`added`) since the recorded
114
114
  baseline, so the Spec Drift Guard or `/rite-vet` starts at the right file.
115
+ - `check drift` and `check slice` print `ADVISORY proportion:` when a slice's proof
116
+ grew over 2x since the Vet baseline or carries over 3x the median proof per AC.
117
+ Repair by moving rows without a `Proves` spec line to `Deferred hardening`
118
+ ([agents.md](agents.md) § Result admission, Proportionality), not by adding proof.
115
119
  - Native notifications fire only after evidence and stop state are written.
116
120
 
117
121
  Use [`afk-hitl.md`](afk-hitl.md) for unattended authority and resource budgets,
@@ -68,7 +68,7 @@ Workspace files carry state; chat does not. Read and execute each phase skill:
68
68
  | 4 | `/rite-define` | approved plan/tasks/traceability |
69
69
  | 5 | `/rite-vet` | every plan; derive mutable budget after READY |
70
70
  | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; one-slice round when <2 eligible); refill per landing; charge once per landed slice |
71
- | 7 | `/rite-prove` | all slices built; approved proof; recovery on red |
71
+ | 7 | `/rite-prove` | all slices built except deferred (`Satisfies: none`); approved proof; recovery on red |
72
72
  | 8 | `/rite-polish` | re-prove after code edits |
73
73
  | 9 | `/rite-review` | in-scope correction then fresh proof |
74
74
  | 10 | `/rite-seal` | GO/NO-GO; no Git |
@@ -110,7 +110,8 @@ or canonical transaction, return inspection, independent code/doubt/test analysi
110
110
  approved fail-on-red proof, record, AFK accounting, and stop. Use
111
111
  [`reference/output.md`](reference/output.md) plus the shared
112
112
  [`reply contract`](skill://devrites-lib/reference/reply-contract.md). HITL never starts
113
- the next slice automatically; AFK obeys remaining budget; Prove requires all slices built.
113
+ the next slice automatically; AFK obeys remaining budget; Prove requires every slice built except a
114
+ [deferred slice](skill://rite-plan/reference/slicing.md#deferred-slice).
114
115
 
115
116
  ## Phase exit
116
117
 
@@ -131,7 +131,9 @@ Pull these via `Read` when shaping the plan:
131
131
  expand this into repository-wide coverage.
132
132
  4. **Map coverage and wiring:** every `AC-###` spec acceptance criterion maps to ≥1 `SLICE-###`
133
133
  ([`acceptance-criteria.md`](skill://rite-spec/reference/acceptance-criteria.md)); no orphaned criteria, no slice without a
134
- criterion. Lift covered/backstop `Edge Coverage` rows and resolved `Prohibitions (must-NOT)`
134
+ criterion except a [deferred slice](skill://rite-plan/reference/slicing.md#deferred-slice). Every proof row quotes the spec line it proves (`Proves`); proof that proves
135
+ none goes to `test-plan.md` `## Deferred hardening`, never into a slice
136
+ ([artifacts.md](skill://rite-vet/reference/artifacts.md)). Lift covered/backstop `Edge Coverage` rows and resolved `Prohibitions (must-NOT)`
135
137
  rows into `traceability.md` and `test-plan.md`; unresolved rows get a gate/owner. Each
136
138
  `Existing behavior to preserve` row becomes a regression row whose current evidence is
137
139
  observed green on the unchanged baseline as a prerequisite of the first slice touching that
@@ -173,3 +173,10 @@ Slices sharing a file never build side by side: put a hub file's shared edit
173
173
  (registry, command table, test harness) in one seam slice the others depend on.
174
174
  `check task-graph` prints the `schedule:` and `ADVISORY hub:` lines; inseparable
175
175
  writes get `Serial rationale: <why>`. Never merge slices or drop acceptance to widen it.
176
+
177
+ ## Deferred slice
178
+ A slice with `Satisfies: none` is an optional follow-up: plan-invented hardening or
179
+ owner-moved scope kept with its preserved source and contracts. It carries no acceptance
180
+ (every AC still maps to a required slice), is never dispatched (`check slice` refuses
181
+ it), and never counts toward "all slices built", Prove, or Seal. The owner elects it
182
+ later through a plan change that gives it an AC.
@@ -64,7 +64,7 @@ test changes.
64
64
  and no-progress corrections before accepting terminal none; a distinct
65
65
  fingerprint below cap resumes offline triage without another real action.
66
66
  2. **Freeze scope.** Read spec, tasks, state, test plan, and full diff. Require
67
- every slice built. Missing `test-plan.md` returns to Vet inline (Prove stays the controlling
67
+ every slice built except a [deferred slice](skill://rite-plan/reference/slicing.md#deferred-slice). Missing `test-plan.md` returns to Vet inline (Prove stays the controlling
68
68
  caller) and resumes here; it never authorizes ad hoc proof.
69
69
  3. **Approve commands.** If absent, use
70
70
  [test-command-discovery](reference/test-command-discovery.md) over repository
@@ -209,7 +209,9 @@ plan declares a root-authored executable workflow file, read
209
209
  `devrites-engine check readiness --emit-binding <slug>`; normal readiness check
210
210
  must pass. Record the per-input drift baseline alongside it:
211
211
  `devrites-engine check drift <slug> --record` — a later stale binding then
212
- names the exact artifact that moved instead of "something changed". Technical failure records reproduction, not qid. Human gap awaits
212
+ names the exact artifact that moved instead of "something changed". An `ADVISORY
213
+ proportion:` line names a slice whose proof outgrew its ACs: move its rows without a
214
+ `Proves` spec line to `Deferred hardening` before READY, never deepen them. Technical failure records reproduction, not qid. Human gap awaits
213
215
  Clarify. Optional cross-model follows `reference/cross-model.md` (trigger `cross-model`).
214
216
 
215
217
  With READY, no pending remediation, and a valid technical return cursor,
@@ -128,9 +128,21 @@ prove only their named static criterion.
128
128
  <the ASCII code-paths + user-flows diagram from review-axes.md, with COVERAGE / GAPS / REGRESSIONS line>
129
129
 
130
130
  ## Per-gap test requirements
131
- | ID | Path / flow | Test file (match conventions) | Asserts (input → expected) | Kind | Slice | Priority |
132
- |---|---|---|---|---|---|---|
133
- | T1 | <path> | <path/to.test> | <empty list → 200 + []> | unit / E2E / eval | <slice> | P1 / **Regression-Critical** |
131
+ | ID | Path / flow | Test file (match conventions) | Asserts (input → expected) | Kind | Slice | Priority | Proves |
132
+ |---|---|---|---|---|---|---|---|
133
+ | T1 | <path> | <path/to.test> | <empty list → 200 + []> | unit / E2E / eval | <slice> | P1 / **Regression-Critical** | <AC/REQ/INV/PROH/DEC/EDGE ID or standard § + quoted line> |
134
+
135
+ Every row's `Proves` quotes the spec line or standard rule it proves. A row that proves
136
+ none is plan-invented hardening: move it to `Deferred hardening`.
137
+
138
+ ## Deferred hardening
139
+ | ID | Hardening | Why no spec line needs it | Promote by |
140
+ |---|---|---|---|
141
+ | D1 | <proof or mechanism> | <reason> | <the spec line an owner would add> |
142
+
143
+ Deferred rows, like a [deferred slice](skill://rite-plan/reference/slicing.md#deferred-slice),
144
+ are not built, proven, or gating in this feature; this table is their follow-up record.
145
+ Nothing is deleted.
134
146
 
135
147
  ## Interaction inventory (UI slices — every element + flow gets an asserting test)
136
148
  Enumerate every interactive element and user flow the feature exposes; one row each, none
@@ -160,7 +160,7 @@ Outcome: <findings | no-findings | gap>
160
160
  Counts: <n per severity or kind used in the rows below>
161
161
  Account: <admitted findings | No-findings | Gap per Result admission>
162
162
  Coverage: <files read fully | hunk-level | skipped: name — reason>
163
- Finding: <severity> conf <n> | <file:line> | <observed> | when <input/state/sequence> → <effect> | <minimum fix>
163
+ Finding: <severity> conf <n> | <file:line> | <observed> | when <input/state/sequence> → <effect> | breaks <ID or standard §> "<quoted line>" | <minimum fix>
164
164
  Basis: <files read · commands run to reach this finding>
165
165
  Contract: <applicable | not-applicable> — <basis: both sides read · crossing test>
166
166
  Tests: <adequate? gaps>
@@ -23,7 +23,9 @@ seams supplied by the orchestrator.
23
23
  Reuse existing seams and dependencies before proposing new ones. Build vertical
24
24
  slices in dependency order; put a hub file's shared edit in one seam slice
25
25
  ([slicing.md](../skills/rite-plan/reference/slicing.md#slice-independence)). Map every REQ and AC to a slice and executable proof,
26
- name rollback and failure paths; keep acceptance-changing proposals separate. Durable
26
+ name rollback and failure paths; keep acceptance-changing proposals separate. Each proof
27
+ row quotes the spec line or standard rule it proves (`Proves`); proof that proves none
28
+ goes to `test-plan.md` `## Deferred hardening`, never into a slice. Durable
27
29
  proof commands must be portable repository commands, never host-local wrappers,
28
30
  user-specific absolute paths, or temporary proof trees.
29
31
  Reconcile `spec.md`'s applicability map against live evidence. When triggered, apply
@@ -118,7 +118,10 @@ criterion, slice, or proof.
118
118
  `convergence_pressure` eligibility mechanical. Tag every Critical/Important
119
119
  `kind: contract` (an implementer could build it differently and still pass the
120
120
  planned tests) or `kind: mechanism` (a named test can discriminate the wrong
121
- implementation; propose that case as the fix, not new plan prose).
121
+ implementation; propose that case as the fix, not new plan prose). Each
122
+ Critical/Important also quotes the spec line (`AC`/`REQ`/`INV`/`PROH`/`DEC`/`EDGE`)
123
+ or standard rule it breaks; hardening no spec line asks for is a Suggestion
124
+ ([agents.md](../skills/devrites-lib/reference/standards/agents.md) § Result admission, Proportionality).
122
125
  - In a recheck, your verdict covers the listed fingerprints, the correction diff, and
123
126
  the dependents of each changed clause. Return an explicit correction-created
124
127
  regression verdict over the touched invariants and those dependents as
@@ -98,7 +98,7 @@ Each required reviewer/analyst/auditor starts with exactly one:
98
98
  ```text
99
99
  Outcome: <findings | no-findings | gap>
100
100
  Counts: <n per severity or kind used in the rows below>
101
- Finding: <severity> conf <n> | <file:line or artifact section> | <observed quote/result> | when <input/state/sequence> → <effect> | <minimum fix>
101
+ Finding: <severity> conf <n> | <file:line or artifact section> | <observed quote/result> | when <input/state/sequence> → <effect> | breaks <ID or standard §> "<quoted line>" | <minimum fix>
102
102
  Basis: <files read · commands run to reach this finding>
103
103
  ```
104
104
 
@@ -108,6 +108,13 @@ Basis: <files read · commands run to reach this finding>
108
108
  A Critical/Important row carries `conf <n>` in its severity cell and writes impact
109
109
  as `when <input/state/sequence> → <effect>`; missing either, root admits it as
110
110
  `Unverified: <claim> — missing trigger` (stays `gap`).
111
+ - **Proportionality:** a Critical/Important row's `breaks` quotes the line it violates:
112
+ a spec ID (`AC`/`REQ`/`INV`/`PROH`/`DEC`/`EDGE`) or a shipped standard rule
113
+ (`<standard>.md § <section>`: security, regression, principles). Root anchors the
114
+ quote like the `file:line` quote. No anchor, or one the defect does not break,
115
+ admits the row as Suggestion logged `Deferred: <claim> — no spec anchor` for an
116
+ optional follow-up slice; it never drives a repair round. Hardening no spec line
117
+ asks for is a Suggestion, however plausible.
111
118
  - **`no-findings`:** `No-findings:` names checks and inspected evidence. Bare
112
119
  pass, empty list, or “looks good” is malformed.
113
120
  - **`gap`:** names missing/unreadable/stale input; skipped/failed required check;
@@ -112,6 +112,10 @@ armed AFK workspace whose exact scope, gates, and budgets permit it.
112
112
  run `devrites-engine check drift <slug>` before re-vetting: it names the
113
113
  exact input artifact that changed (or `missing`/`added`) since the recorded
114
114
  baseline, so the Spec Drift Guard or `/rite-vet` starts at the right file.
115
+ - `check drift` and `check slice` print `ADVISORY proportion:` when a slice's proof
116
+ grew over 2x since the Vet baseline or carries over 3x the median proof per AC.
117
+ Repair by moving rows without a `Proves` spec line to `Deferred hardening`
118
+ ([agents.md](agents.md) § Result admission, Proportionality), not by adding proof.
115
119
  - Native notifications fire only after evidence and stop state are written.
116
120
 
117
121
  Use [`afk-hitl.md`](afk-hitl.md) for unattended authority and resource budgets,
@@ -68,7 +68,7 @@ Workspace files carry state; chat does not. Read and execute each phase skill:
68
68
  | 4 | `/rite-define` | approved plan/tasks/traceability |
69
69
  | 5 | `/rite-vet` | every plan; derive mutable budget after READY |
70
70
  | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; one-slice round when <2 eligible); refill per landing; charge once per landed slice |
71
- | 7 | `/rite-prove` | all slices built; approved proof; recovery on red |
71
+ | 7 | `/rite-prove` | all slices built except deferred (`Satisfies: none`); approved proof; recovery on red |
72
72
  | 8 | `/rite-polish` | re-prove after code edits |
73
73
  | 9 | `/rite-review` | in-scope correction then fresh proof |
74
74
  | 10 | `/rite-seal` | GO/NO-GO; no Git |
@@ -110,7 +110,8 @@ or canonical transaction, return inspection, independent code/doubt/test analysi
110
110
  approved fail-on-red proof, record, AFK accounting, and stop. Use
111
111
  [`reference/output.md`](reference/output.md) plus the shared
112
112
  [`reply contract`](../devrites-lib/reference/reply-contract.md). HITL never starts
113
- the next slice automatically; AFK obeys remaining budget; Prove requires all slices built.
113
+ the next slice automatically; AFK obeys remaining budget; Prove requires every slice built except a
114
+ [deferred slice](../rite-plan/reference/slicing.md#deferred-slice).
114
115
 
115
116
  ## Phase exit
116
117
 
@@ -131,7 +131,9 @@ Pull these via `Read` when shaping the plan:
131
131
  expand this into repository-wide coverage.
132
132
  4. **Map coverage and wiring:** every `AC-###` spec acceptance criterion maps to ≥1 `SLICE-###`
133
133
  ([`acceptance-criteria.md`](../rite-spec/reference/acceptance-criteria.md)); no orphaned criteria, no slice without a
134
- criterion. Lift covered/backstop `Edge Coverage` rows and resolved `Prohibitions (must-NOT)`
134
+ criterion except a [deferred slice](../rite-plan/reference/slicing.md#deferred-slice). Every proof row quotes the spec line it proves (`Proves`); proof that proves
135
+ none goes to `test-plan.md` `## Deferred hardening`, never into a slice
136
+ ([artifacts.md](../rite-vet/reference/artifacts.md)). Lift covered/backstop `Edge Coverage` rows and resolved `Prohibitions (must-NOT)`
135
137
  rows into `traceability.md` and `test-plan.md`; unresolved rows get a gate/owner. Each
136
138
  `Existing behavior to preserve` row becomes a regression row whose current evidence is
137
139
  observed green on the unchanged baseline as a prerequisite of the first slice touching that
@@ -173,3 +173,10 @@ Slices sharing a file never build side by side: put a hub file's shared edit
173
173
  (registry, command table, test harness) in one seam slice the others depend on.
174
174
  `check task-graph` prints the `schedule:` and `ADVISORY hub:` lines; inseparable
175
175
  writes get `Serial rationale: <why>`. Never merge slices or drop acceptance to widen it.
176
+
177
+ ## Deferred slice
178
+ A slice with `Satisfies: none` is an optional follow-up: plan-invented hardening or
179
+ owner-moved scope kept with its preserved source and contracts. It carries no acceptance
180
+ (every AC still maps to a required slice), is never dispatched (`check slice` refuses
181
+ it), and never counts toward "all slices built", Prove, or Seal. The owner elects it
182
+ later through a plan change that gives it an AC.