@event4u/agent-config 14.7.0 → 14.8.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 (138) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +245 -388
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/evals/git-pr-merge.json +13 -0
  5. package/dist/agent-src/commands/evals/roadmap.json +17 -1
  6. package/dist/agent-src/commands/pr/create.md +14 -2
  7. package/dist/agent-src/commands/pr/merge.md +379 -0
  8. package/dist/agent-src/commands/roadmap/process-full.md +157 -3
  9. package/dist/agent-src/commands/roadmap.md +1 -1
  10. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +46 -36
  11. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +37 -2
  12. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +64 -2
  13. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
  14. package/dist/agent-src/rules/artifact-drafting-protocol.md +5 -1
  15. package/dist/agent-src/rules/decision-revisit-gate.md +65 -33
  16. package/dist/agent-src/rules/recurring-criticism.md +1 -1
  17. package/dist/agent-src/rules/roadmap-progress-sync.md +19 -0
  18. package/dist/agent-src/rules/source-confidentiality.md +1 -1
  19. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +7 -4
  20. package/dist/agent-src/scripts/dashboard_mode.ts +212 -0
  21. package/dist/agent-src/scripts/update_roadmap_progress.ts +47 -48
  22. package/dist/agent-src/skills/adr-create/SKILL.md +124 -5
  23. package/dist/agent-src/skills/decision-record/SKILL.md +61 -3
  24. package/dist/agent-src/skills/decision-review/SKILL.md +65 -0
  25. package/dist/agent-src/skills/merge-conflicts/SKILL.md +26 -0
  26. package/dist/agent-src/skills/security/SKILL.md +8 -0
  27. package/dist/agent-src/skills/security-audit/SKILL.md +12 -1
  28. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  29. package/dist/agent-src/templates/roadmaps.md +20 -2
  30. package/dist/cli/registry.js +1 -0
  31. package/dist/cli/registry.js.map +1 -1
  32. package/dist/cli-delegate/{chunk-JZ4NR2TW.js → chunk-7PRE6ZV2.js} +1 -1
  33. package/dist/cli-delegate/{chunk-7F3VYSM2.js → chunk-EEJUMCDZ.js} +14 -14
  34. package/dist/cli-delegate/{chunk-74E3TKWV.js → chunk-H4VIVD4C.js} +5 -5
  35. package/dist/cli-delegate/chunk-I3EIN2YG.js +36 -0
  36. package/dist/cli-delegate/{chunk-4VR4ORQ6.js → chunk-LPPWO5CE.js} +4 -3
  37. package/dist/cli-delegate/{chunk-UEZ7D35A.js → chunk-N7CDDGI3.js} +4 -23
  38. package/dist/cli-delegate/cmd_adr_effective.js +1162 -0
  39. package/dist/cli-delegate/cmd_conformance.js +14 -14
  40. package/dist/cli-delegate/cmd_converge.js +3 -3
  41. package/dist/cli-delegate/cmd_doctor.js +7 -7
  42. package/dist/cli-delegate/cmd_export.js +6 -6
  43. package/dist/cli-delegate/cmd_handoff.js +7 -6
  44. package/dist/cli-delegate/cmd_memory_get.js +2 -1
  45. package/dist/cli-delegate/cmd_migrate.js +2 -2
  46. package/dist/cli-delegate/cmd_preflight.js +5 -5
  47. package/dist/cli-delegate/cmd_prune.js +6 -6
  48. package/dist/cli-delegate/cmd_route_audit.js +6 -5
  49. package/dist/cli-delegate/cmd_route_explain.js +3 -3
  50. package/dist/cli-delegate/cmd_session_recycle.js +3 -3
  51. package/dist/cli-delegate/cmd_settings_get.js +3 -3
  52. package/dist/cli-delegate/cmd_settings_migrate.js +6 -6
  53. package/dist/cli-delegate/cmd_sync.js +6 -6
  54. package/dist/cli-delegate/cmd_uninstall.js +6 -6
  55. package/dist/cli-delegate/cmd_update.js +3 -3
  56. package/dist/cli-delegate/cmd_upgrade.js +3 -3
  57. package/dist/cli-delegate/cmd_validate.js +6 -6
  58. package/dist/cli-delegate/cmd_versions.js +3 -3
  59. package/dist/discovery/deprecation-report.md +1 -1
  60. package/dist/discovery/discovery-manifest.json +53 -22
  61. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  62. package/dist/discovery/discovery-manifest.summary.md +3 -3
  63. package/dist/discovery/dormancy-report.md +1 -1
  64. package/dist/discovery/orphan-report.md +1 -1
  65. package/dist/discovery/packs.json +7 -6
  66. package/dist/discovery/trust-report.md +2 -2
  67. package/dist/discovery/workspaces.json +6 -5
  68. package/dist/hooks/dispatch.js +806 -681
  69. package/dist/install/globalRuleLayers.js +169 -0
  70. package/dist/install/globalRuleLayers.js.map +1 -0
  71. package/dist/install/partitionEligibility.js +156 -0
  72. package/dist/install/partitionEligibility.js.map +1 -1
  73. package/dist/install/ruleLayerPartition.js +157 -0
  74. package/dist/install/ruleLayerPartition.js.map +1 -0
  75. package/dist/mcp/registry-manifest.json +3 -3
  76. package/dist/mcp/server.json +2 -2
  77. package/dist/mcp/server.mjs +654 -578
  78. package/dist/scripts/_lib/prune_empty_dirs.js +85 -0
  79. package/dist/scripts/_lib/prune_empty_dirs.js.map +1 -0
  80. package/dist/scripts/condense.js +52 -89
  81. package/dist/scripts/condense.js.map +1 -1
  82. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +45 -1
  83. package/docs/guidelines/agent-infra/false-green.md +47 -1
  84. package/package.json +1 -1
  85. package/src/agent-src/scripts/archive_completed_roadmaps.ts +7 -4
  86. package/src/agent-src/scripts/dashboard_mode.ts +212 -0
  87. package/src/agent-src/scripts/update_roadmap_progress.ts +47 -48
  88. package/src/config/ci-local-parity.yml +21 -0
  89. package/src/config/estate-count-budget.json +275 -2
  90. package/src/config/evaluator-budgets.json +3 -3
  91. package/src/config/gate-coverage.yml +220 -12
  92. package/src/config/gate-violation-baselines.json +73 -63
  93. package/src/config/gitignore-block.txt +15 -2
  94. package/src/config/hook-latency-budget.json +5 -0
  95. package/src/config/rule-stub-ceilings.json +17 -3
  96. package/src/install/globalRuleLayers.ts +197 -0
  97. package/src/install/partitionEligibility.ts +177 -0
  98. package/src/install/ruleLayerPartition.ts +212 -0
  99. package/src/scripts/_cli/cmd_adr_effective.ts +484 -0
  100. package/src/scripts/_dispatch.bash +11 -0
  101. package/src/scripts/_lib/adr_frontmatter.test.ts +365 -0
  102. package/src/scripts/_lib/adr_frontmatter.ts +459 -0
  103. package/src/scripts/_lib/envelope_grounding.ts +11 -1
  104. package/src/scripts/_lib/layer_overlap_notice.ts +11 -2
  105. package/src/scripts/_lib/prune_empty_dirs.ts +80 -0
  106. package/src/scripts/adr/evidence_census.ts +899 -0
  107. package/src/scripts/adr/regenerate_index.ts +12 -32
  108. package/src/scripts/adr_cite_check.ts +540 -39
  109. package/src/scripts/audit_adr_coverage.ts +103 -17
  110. package/src/scripts/bench_hook_latency.ts +204 -0
  111. package/src/scripts/build_archive_index.ts +34 -0
  112. package/src/scripts/check_adr_frontmatter.ts +574 -39
  113. package/src/scripts/check_hook_bundle_content.ts +219 -0
  114. package/src/scripts/check_new_adr_evidence.ts +529 -0
  115. package/src/scripts/check_references.ts +18 -0
  116. package/src/scripts/check_rule_layer_partition.ts +531 -0
  117. package/src/scripts/check_single_delivery.ts +137 -4
  118. package/src/scripts/check_standing_rule_delivery.ts +8 -2
  119. package/src/scripts/condense.ts +61 -91
  120. package/src/scripts/external_sources_denylist.json +4 -1
  121. package/src/scripts/hooks/block_unauthorized_git.ts +22 -2
  122. package/src/scripts/hooks/dispatch_hook.ts +154 -187
  123. package/src/scripts/hooks/dispatch_issues.ts +38 -19
  124. package/src/scripts/hooks/fallback_yaml.ts +66 -0
  125. package/src/scripts/hooks/host_semantics.ts +21 -0
  126. package/src/scripts/hooks/injection_budget.ts +13 -3
  127. package/src/scripts/hooks/py_json_dumps.ts +103 -0
  128. package/src/scripts/hooks/state_io.ts +88 -1
  129. package/src/scripts/hooks/stdin_failure_policy.ts +96 -0
  130. package/src/scripts/injection_scan_hook.ts +137 -5
  131. package/src/scripts/lint_hook_manifest.ts +49 -0
  132. package/src/scripts/lint_provenance_vocabulary.ts +472 -4
  133. package/src/scripts/routing_doctor.ts +5 -1
  134. package/src/scripts/sync_pr_branch.ts +163 -20
  135. package/dist/cli-delegate/{chunk-PPQO4NGR.js → chunk-6RJA2F5A.js} +3 -3
  136. package/dist/cli-delegate/{chunk-6EOCNQAM.js → chunk-E4XIZDIB.js} +0 -0
  137. package/dist/cli-delegate/{chunk-FBKL6JWT.js → chunk-MMSGVZKV.js} +3 -3
  138. package/dist/cli-delegate/{chunk-GJ5BVHXM.js → chunk-PMEKGDED.js} +3 -3
@@ -38,7 +38,7 @@ paused for confirmation before every step) was removed —
38
38
  | `/roadmap:materialize` | `commands/roadmap/materialize.md` | Turn an accepted roadmap into the concrete artefacts it plans |
39
39
  | `/roadmap:process-step` | `commands/roadmap/process-step.md` | Autonomously process the next open step, then stop |
40
40
  | `/roadmap:process-phase` (**default execution scope**) | `commands/roadmap/process-phase.md` | Autonomously process every open step in the current phase |
41
- | `/roadmap:process-full` | `commands/roadmap/process-full.md` | Autonomously process every open step across every phase |
41
+ | `/roadmap:process-full` | `commands/roadmap/process-full.md` | Autonomously process every open step across every phase; `--all` iterates the whole active estate, `--worktree` isolates the workspace |
42
42
  | `/roadmap:next` | `commands/roadmap/next.md` | Screen for the next executable roadmap, then carry it to a reviewable PR (selection + `process-full` + delivery) |
43
43
 
44
44
  Sub-command names match the locked contract in
@@ -89,14 +89,11 @@ evaluation-order accident.
89
89
 
90
90
  **Recursive-dispatch guard (2.3) — honest scope.** No verified host
91
91
  discriminator exists for "is this classification running inside a
92
- subagent/teammate session" — this roadmap's own `point-of-action-carrier`
93
- blocker records the upstream PreToolUse agent-identity request as closed
94
- NOT_PLANNED, and no field in this repo's hook envelope carries session
95
- lineage. The guard is therefore a CALLER-SUPPLIED fact
92
+ subagent/teammate session", and no field in this repo's hook envelope carries
93
+ session lineage. The guard is therefore a CALLER-SUPPLIED fact
96
94
  (`insideSubagentSession`), never a `process.env` probe for an unverified
97
- variable name — the same "no discriminator is publishable" null the
98
- `point-of-action-carrier` blocker already names. When set, it resolves ∅
99
- (in-session) for rungs 1-4; rung 0 is exempt (it never spawns).
95
+ variable name. When set, it resolves ∅ (in-session) for rungs 1-4; rung 0 is
96
+ exempt (it never spawns).
100
97
 
101
98
  **Relationship to the council's own necessity gate.** Rung 4's three
102
99
  signals (design decision / security downgrade / release-gate escalation)
@@ -127,6 +124,32 @@ Criteria are independent and additive in the obvious way (a slice matching
127
124
  two rows takes the higher of the two tiers); this table never lowers a
128
125
  tier `inferSliceTier` (§ below) already raised.
129
126
 
127
+ ## Cross-vendor worker direction (declared, not implemented)
128
+
129
+ Deny-by-default — a direction not listed here is denied. Direction rules,
130
+ payload allow/deny lists, the report-only boundary, the no-recursion clause and
131
+ the human egress gate:
132
+ [`cross-vendor-worker-direction`](../../../../docs/contracts/cross-vendor-worker-direction.md).
133
+ Role pairs, never vendor names — `classifyLadder` carries no vendor identity
134
+ ([`subagent-routing`](subagent-routing.md) § Why vendor-neutral).
135
+
136
+ Rung-1/2 slices only.
137
+
138
+ | # | Direction (role pair) | Resolves to |
139
+ |---|---|---|
140
+ | CV-1 | a worker on the **non-authoring** vendor reviews the **authoring** vendor's output | report-only worker |
141
+ | CV-2 | the mirror of CV-1 | report-only worker |
142
+
143
+ ```
144
+ DIRECTION PERMITTED + PAYLOAD ALLOWED + HUMAN APPROVED = MAY SEND.
145
+ ANY ONE MISSING = MAY NOT.
146
+ A CROSS-VENDOR WORKER NEVER IMPLEMENTS, WRITES, COMMITS, ACTS,
147
+ OR DISPATCHES ONWARD.
148
+ ```
149
+
150
+ Nothing reads CV-1/CV-2 at runtime: a contract surface a future implementation
151
+ must satisfy, replacing the phantom artefact the original survey cited.
152
+
130
153
  ## Per-slice tier inference (v1.5 — deterministic, task-TYPE-keyed)
131
154
 
132
155
  Once a slice is classified **delegable**, a second deterministic table infers
@@ -206,15 +229,11 @@ NEVER A SILENTLY DEGRADED ANSWER. NO LLM CLASSIFIER FALLBACK (CUT C3).
206
229
  | "does string Y exist" / "probe candidate strings" | `string-existence` | FTS one-shot (`memory_lookup` for the knowledge corpus) or capped `rg -n --max-count` for the codebase |
207
230
  | "run report Z" / "run check_*" | `report-run` | direct script run, wrapped per the **measured** rtk allowlist (`internal/bench/rtk-savings/RESULTS.md` — wrap only the ~55%-savings class) |
208
231
 
209
- **Why rg-first for definition/references** (council debate 2026-07-28,
210
- claude-sonnet-4-5 + gpt-4o, 2 rounds): the pre-registered benchmark behind the
211
- `code-graph-retrieval-null` claim (`docs/CLAIMS.md`) measured native-graph
212
- recall 0.365 vs grep 0.797 on graph-shaped questions, root cause an **indexing
213
- gap** (TS arrow-function exports produce no symbol nodes) that hits structured
214
- lookups exactly as it hits NL retrieval — and the recorded consequence bound
215
- keeps `code_graph.enabled` false permanently. The accelerant clause is the
216
- escape hatch that bound names ("unless external evidence appears"); today it
217
- is inert.
232
+ **Why rg-first** (council 2026-07-28, 2 rounds): the pre-registered benchmark
233
+ behind the `code-graph-retrieval-null` claim (`docs/CLAIMS.md`) measured
234
+ native-graph recall 0.365 vs grep 0.797 on graph-shaped questions — an
235
+ indexing gap that keeps `code_graph.enabled` false permanently. The accelerant
236
+ clause in the table above is that bound's escape hatch and is inert today.
218
237
 
219
238
  **Escalation, not degradation:** a primitive that returns nothing (index miss,
220
239
  pattern too ambiguous, report script absent) — **or an unusable result**
@@ -238,26 +257,17 @@ budgeted (consume part of the N=3 autonomous budget) and opt-in. Not in v1.
238
257
 
239
258
  ## Reference implementation
240
259
 
241
- The deterministic rules are encoded in
242
- [`src/scripts/_lib/auto_dispatch.ts`](../../../../src/scripts/_lib/auto_dispatch.ts)
243
- (`classifyTask`, `classifyLookup` for the lookup-class rung), covered by
244
- [`tests/scripts/_lib_auto_dispatch.test.ts`](../../../../tests/scripts/_lib_auto_dispatch.test.ts)
245
- and the lookup corpus in
246
- [`src/scripts/_lib/auto_dispatch.corpus.test.ts`](../../../../src/scripts/_lib/auto_dispatch.corpus.test.ts)
247
- (`LOOKUP_CORPUS` — the four live-observed shapes + negative controls).
248
-
249
- The judgment ladder (§ above) is encoded in
250
- [`src/scripts/_lib/judgment_ladder.ts`](../../../../src/scripts/_lib/judgment_ladder.ts)
251
- (`classifyLadder`, plus the rung-0/1/3/4 signal-detection functions), covered
252
- by
253
- [`tests/scripts/_lib_judgment_ladder.test.ts`](../../../../tests/scripts/_lib_judgment_ladder.test.ts)
254
- (every rung, the rung-3 degrade path, the recursive-dispatch guard, and every
255
- ∅ case). The delegation-nudge hook
256
- ([`delegation_nudge_hook.ts`](../../../../src/scripts/hooks/delegation_nudge_hook.ts))
257
- is its first production caller — its injected line cites the resolved rung
258
- (`rung-2: dispatch do-in-parallel …`), scoped to the subagent dispatch rungs
259
- (1/2); a rung-0/3/4 verdict stays silent on this carrier until Phase 3/4 give
260
- team/council their own.
260
+ - `classifyTask` / `classifyLookup` —
261
+ [`auto_dispatch.ts`](../../../../src/scripts/_lib/auto_dispatch.ts)
262
+ - `classifyLadder` + the rung-0/1/3/4 signal detectors —
263
+ [`judgment_ladder.ts`](../../../../src/scripts/_lib/judgment_ladder.ts)
264
+ - First production caller —
265
+ [`delegation_nudge_hook.ts`](../../../../src/scripts/hooks/delegation_nudge_hook.ts):
266
+ its injected line cites the resolved rung, scoped to the dispatch rungs
267
+ (1/2); a rung-0/3/4 verdict stays silent on this carrier.
268
+
269
+ Each has a sibling `*.test.ts` under `tests/scripts/` covering every rung, the
270
+ rung-3 degrade path, the recursive-dispatch guard and every ∅ case.
261
271
 
262
272
  ## Related
263
273
 
@@ -86,18 +86,53 @@ In `auto` mode, flip to `on` for the rest of the conversation when the user expr
86
86
 
87
87
  Algorithm and speech-act heuristic: [`autonomy-detection.md`](autonomy-detection.md). Anchor phrases (DE+EN), no-flip patterns, counter-examples, trivial-vs-blocking taxonomy, commit-policy summary, and named failure modes: this file + [`autonomy-examples.md`](autonomy-examples.md).
88
88
 
89
- ## Task-scope — two autonomy shapes
89
+ ## Task-scope — three autonomy shapes
90
90
 
91
91
  Depth for the rule's task-scope Iron Law (`NEW TASK → FRESH CONFIRMATION`).
92
- Two distinct autonomy shapes — keep them apart:
92
+ Three distinct autonomy shapes — keep them apart:
93
93
 
94
94
  | Shape | Trigger | Scope |
95
95
  |---|---|---|
96
96
  | **Conversation-wide trivial-question suppression** | "stop asking on trivial steps, just work" — no deliverable named. | Sticky for the rest of the conversation. Suppresses trivial workflow questions only; never lifts blocking, Hard Floor, or [`scope-control`](../../rules/scope-control.md) gates. |
97
97
  | **Task-scoped autonomous execution** | "work autonomously on X", "arbeite die Roadmap Y komplett ab", "do PROJ-123 end-to-end" — a deliverable / artifact / ticket is named. | Bound to **that** task. Ends when the task ends. Does **not** authorize starting a new, distinct task autonomously. |
98
+ | **Set-scoped autonomous execution** | An accepted execution contract whose pre-scan **enumerated** a closed, ordered set of deliverables — the set members are named on the contract screen before the single Accept. | Bound to **that enumerated set**. The loop may move from one listed member to the next without a new contact. A member not on the accepted list is a new task and needs fresh confirmation. |
98
99
 
99
100
  Litmus test: does the directive name (or unambiguously point to) a single concrete deliverable? Yes → task-scoped, scope ends with the deliverable. No → conversation-wide, trivial-question suppression only.
100
101
 
102
+ Set-scoped is the same litmus applied to a **list** instead of a single item, and
103
+ it is deliberately the narrowest thing that makes a set run possible:
104
+
105
+ ```
106
+ SET-SCOPED AUTONOMY IS BOUNDED BY THE ENUMERATION THE USER SAW.
107
+ A MEMBER ON THE ACCEPTED LIST IS CONTINUATION. ANYTHING ELSE IS A NEW TASK,
108
+ AND `NEW TASK → FRESH CONFIRMATION` APPLIES TO IT VERBATIM.
109
+ THE SET IS CLOSED AT ACCEPT TIME AND NEVER GROWS DURING THE RUN.
110
+ ```
111
+
112
+ Four conditions, all of which must hold before a run may claim set scope. They
113
+ exist because "a set" is exactly the phrasing under which an unbounded backlog
114
+ could be smuggled in as one authorization:
115
+
116
+ 1. **Enumerated before Accept.** Every member is printed on the contract screen
117
+ — name, branch, and its own artifact count. A set the user did not read is
118
+ not a set they authorized.
119
+ 2. **Closed.** The list cannot grow after Accept. A roadmap discovered mid-run
120
+ is a new task, not a late set member; it waits.
121
+ 3. **Ordered, with independence declared.** The contract states the order and
122
+ which members carry no declared dependency, because that is what decides
123
+ whether the loop may continue past a failure (see
124
+ [`roadmap-process-loop § 3d`](roadmap-process-loop.md)).
125
+ 4. **One contract, one Accept.** Set scope is granted by the same single Accept
126
+ as any other mode. It is never inferred from the fact that several roadmaps
127
+ happen to be open.
128
+
129
+ What set scope does **not** touch: the Hard Floor, the locked decision classes,
130
+ the kernel-edit soak, and every
131
+ [`scope-control`](../../rules/scope-control.md) gate. It removes the *re-ask
132
+ between listed members* and nothing else — a set run that reaches a Hard-Floor
133
+ action stops there exactly as a single-task run would.
134
+
135
+
101
136
  When the user later issues a **new** request — different ticket, different roadmap, different artifact, different feature — treat it as a fresh task. Re-confirm autonomy for the new scope before:
102
137
 
103
138
  - creating a branch / worktree / PR / tag for the new work,
@@ -4,8 +4,8 @@ Loaded by [`roadmap-process-loop § 3`](roadmap-process-loop.md) when the run's
4
4
  **derived** mode is `autonomous` or `phase-checkpoints`. The mode comes from the
5
5
  § 3a ladder — explicit invocation suffix, then frontmatter `execution.mode`,
6
6
  then the invocation form — so an ABSENT frontmatter field no longer keeps this
7
- context unloaded: under `process-full` / `/roadmap:next` it derives
8
- `autonomous`, under `process-phase` it derives `phase-checkpoints`. Only a
7
+ context unloaded: under `process-full` it derives `autonomous`, and under
8
+ `/roadmap:next` or `process-phase` it derives `phase-checkpoints`. Only a
9
9
  *derived* `interactive` (asked for explicitly, declared in frontmatter, or
10
10
  `process-step`) leaves this context unloaded and falls back to the legacy
11
11
  commit-step scan. Defines the run-start pre-scan,
@@ -78,6 +78,8 @@ Artifacts: <N> planned (skills/rules/commands/guidelines) —
78
78
  Open questions: <N> → decision sheet below (<M> rows); the rest via AI
79
79
  council (<members | "none configured — will halt on ambiguity">)
80
80
  Quality: <cadence> · Dashboard: <cadence>
81
+ Late artifacts: <halt | auto-research> (default halt; cap 3 then halt)
82
+ Deferred items: <wait | spawn-follow-up-draft | cancel-with-memo> (default wait)
81
83
 
82
84
  <decision sheet, per contract-decision-sheet — omitted entirely when M = 0>
83
85
 
@@ -97,6 +99,66 @@ re-ask inside the run. Adjust → apply, re-show once. The contract is
97
99
  re-derived on every invocation — it always reflects the roadmap's and
98
100
  repo's current state.
99
101
 
102
+ ### 2a. `late_artifacts` — what happens to an artifact the plan did not name
103
+
104
+ An artifact discovered **after** Accept was outside the batched overlap check,
105
+ so the research the contract summary reported does not cover it. Two policies,
106
+ and the field is on the screen because the choice changes what the run may do
107
+ without asking:
108
+
109
+ | Value | Behaviour |
110
+ |---|---|
111
+ | `halt` (**default**) | The run stops at the discovery with the scope-out-of-roadmap halt. The artifact is reported, not authored. |
112
+ | `auto-research` | The run re-runs Phase B (Research) and the overlap pass mid-run against the *current* artifact state — the identical procedure already accepted as non-interactive at contract time, only later. An **extend** verdict extends silently; a **create** verdict derives its understand-answers from the step text and the sheet answers; only a genuine overlap conflict halts. Capped at **three** late artifacts per run, then halt regardless. |
113
+
114
+ <!-- decision 2026-08-20: the shipped default is `halt`, not `auto-research`.
115
+ AI council 2/2 (anthropic + openai) on the `autonomy-defaults-sheet` fork
116
+ of road-to-user-out-of-the-loop, record
117
+ agents/evidence/council/drain-blocker-dispositions-a.md. Reasoning: the
118
+ roadmap's own Risk 7 is that auto-research drifts the run's scope, and its
119
+ stated mitigation is the cap — but a cap of three is a bound on how far the
120
+ drift goes, not a check on whether it should happen at all. `halt` is also
121
+ the behaviour the tree already had, so shipping it as the default means
122
+ this field is purely additive: nothing that worked before changes, and the
123
+ aggressive path becomes a thing a run declares rather than a thing it
124
+ inherits. Reversibility: flipping the default is one word in this table
125
+ plus one word in the mechanics guideline, with no dependent mechanism to
126
+ unwind, and the roadmap's own kill criterion (late-artifact revisit rate)
127
+ only becomes measurable once some runs declare `auto-research` — which an
128
+ opt-in still permits and a silent default would have made unattributable. -->
129
+
130
+ The cap is not negotiable by the field: a run that keeps discovering artifacts
131
+ has a planning problem, not an autonomy problem, and the third discovery is the
132
+ signal to say so.
133
+
134
+ ### 2b. `deferred_policy` — the two autonomous exits for a `[~]` item
135
+
136
+ [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md) Iron Law 3
137
+ forbids a silent archive with unresolved deferred items. That gate is
138
+ unchanged. What this field changes is which dispositions a run may reach
139
+ **without a synchronous prompt**, and there are exactly two, because the
140
+ preservation test in that rule already splits them the same way:
141
+
142
+ | Value | Behaviour |
143
+ |---|---|
144
+ | `wait` (**default**) | The synchronous halt stands. Every disposition stays conversational. |
145
+ | `spawn-follow-up-draft` | A roadmap closing with `[~]` items spawns the follow-up draft automatically, carrying each item **and** its blocker. The item stays alive in the active estate, which is what makes this council-decidable rather than owner-reserved. |
146
+ | `cancel-with-memo` | An item the run can show is no longer wanted is recorded `[-]` with a reasoning memo naming what changed. This is a **drop**, so it is owner-reserved by the preservation test: the run WRITES the memo and the recommendation, and the archive still waits for the user on that item. |
147
+
148
+ <!-- decision 2026-08-20: the policy offers BOTH exits — a follow-up draft and
149
+ an explicit cancellation with a reasoning memo — not the follow-up draft
150
+ alone. AI council 2/2 (anthropic + openai), same record as above.
151
+ Reasoning: follow-up-draft-only means every deferred item must be carried,
152
+ and a carried item nobody wants becomes the parking lot the roadmap's own
153
+ Risk 5 describes for memos. Offering cancellation makes "this is no longer
154
+ wanted" a statable outcome with a written reason instead of an indefinite
155
+ deferral wearing a follow-up roadmap. Reversibility, and it is the load-
156
+ bearing half: the cancellation exit does NOT lower the gate, because a
157
+ drop stays owner-reserved — the run produces the memo, the user still
158
+ decides. Removing the value later removes an option nobody was obliged to
159
+ use; the default stays `wait` either way. -->
160
+
161
+
100
162
  ## 3. Grants activated by acceptance
101
163
 
102
164
  | Grant | Boundary |
@@ -112,7 +112,8 @@ Rung 3, by wrapper:
112
112
 
113
113
  | Wrapper | Derived mode | Contract |
114
114
  |---|---|---|
115
- | `/roadmap:process-full`, `/roadmap:next` | `autonomous`, **preselected** | offered |
115
+ | `/roadmap:process-full` | `autonomous`, **preselected** | offered |
116
+ | `/roadmap:next` | `phase-checkpoints`, **preselected** | offered |
116
117
  | `/roadmap:process-phase` | `phase-checkpoints` | offered |
117
118
  | `/roadmap:process-step` | — | none (one step needs no run contract) |
118
119
 
@@ -122,6 +123,25 @@ screen's `3. Run interactive instead` option
122
123
  ([`roadmap-execution-contract § 2`](roadmap-execution-contract.md)) stays on it
123
124
  in every case, so a derived mode is always one keystroke from being refused.
124
125
 
126
+ <!-- decision 2026-08-20: /roadmap:next preselects `phase-checkpoints`, not
127
+ `autonomous`. AI council 2/2 (anthropic + openai) on the
128
+ `autonomy-defaults-sheet` fork of road-to-user-out-of-the-loop, record
129
+ agents/evidence/council/drain-blocker-dispositions-a.md. Reasoning: the two
130
+ wrappers differ in what the user has actually seen at Accept time.
131
+ `process-full` names one roadmap the user chose, so `autonomous` is a
132
+ preselection over a scope they read. `/roadmap:next` SELECTS the roadmap
133
+ itself, so `autonomous` there preselects full autonomy over a target the
134
+ user has not seen — the one rung where the derivation picks the object and
135
+ the scope in the same keystroke. Reversibility: this is a preselected
136
+ option on a screen that still offers `1. Go — start processing
137
+ autonomously`, so the aggressive path costs one keystroke and no rebuild;
138
+ flipping the row back is a one-line edit with no dependent mechanism.
139
+ Deliberately scoped to `/roadmap:next` only — the blocker's question named
140
+ that wrapper, and Phase 1 Step 1 of the parent roadmap landed with
141
+ `process-full` → `autonomous` explicitly, so widening the change would
142
+ silently reverse an already-shipped step nobody asked to revisit. -->
143
+
144
+
125
145
  **Why the old fallback was a defect and not a conservative default.** Absent
126
146
  `execution.mode` used to mean the legacy commit-step scan, which derives no
127
147
  contract at all — no batched artifact drafting, no council auto-enable, no
@@ -132,6 +152,23 @@ path *under the wrapper built for the opposite*, and silently — the user saw a
132
152
  A default that contradicts the wrapper the user just typed is a wrong answer,
133
153
  not a safe one.
134
154
 
155
+ **Kill criteria — carried here, at the flip, not only in the roadmap that
156
+ made it.** A default flip whose reversal condition lives in a roadmap is a
157
+ flip nobody can reverse once that roadmap is archived, which is why both
158
+ conditions below sit next to the table they govern:
159
+
160
+ - **The ladder itself** (absent `execution.mode` derives a mode instead of
161
+ falling back to interactive): `3. Run interactive instead` chosen at the
162
+ contract screen in **more than 40 % of 20 runs** reverts rung 3, leaving
163
+ the ladder at explicit-suffix-then-frontmatter only. **No instrument
164
+ today** — nothing records which contract option was chosen, so the rate is
165
+ unmeasured rather than low. Stated so the gap is visible at the flip.
166
+ - **The `/roadmap:next` row** (`phase-checkpoints` rather than
167
+ `autonomous`): reverted if checkpoint-mode runs on that wrapper are
168
+ observed to stop at a phase boundary the user then waves through without
169
+ a change — that is a contact the preselection bought nothing for. Same
170
+ missing instrument, same honesty: this is a condition, not a reading.
171
+
135
172
  **What this does NOT change.** A derived mode grants nothing on its own:
136
173
  authorization is still the single Accept on the contract screen, per
137
174
  [`roadmap-execution-contract § Principle`](roadmap-execution-contract.md). The
@@ -260,6 +297,89 @@ run can simply outlast, or a cross-roadmap dependency the run can satisfy itself
260
297
  is work. The taxonomy still lacks the row; the mislabel now has a stated test
261
298
  instead of a default.
262
299
 
300
+ ### 3d. Set contract — one contract over an enumerated set
301
+
302
+ A **set contract** is the ordinary contract screen rendered over a closed,
303
+ ordered list of roadmaps instead of one. It grants
304
+ [`autonomy-mechanics § Task-scope`](autonomy-mechanics.md)'s **set-scoped**
305
+ shape, whose four conditions (enumerated before Accept · closed · ordered with
306
+ independence declared · one Accept) are the authorization contract — this
307
+ section is only the loop's side of it.
308
+
309
+ **What the screen must print, per member.** Roadmap path, derived branch name,
310
+ open-step count, artifact count from the pre-scan, and its dependency edges.
311
+ One decision sheet spans the whole set: a question that applies to several
312
+ members appears once, and its answer applies to all of them.
313
+
314
+ **Dependency edges come from two sources, unioned.**
315
+
316
+ | Source | Shape | Trust |
317
+ |---|---|---|
318
+ | Declared | `depends:` in the dependent roadmap's frontmatter — a list of roadmap slugs | authoritative; a declared edge is never overridden by the heuristic |
319
+ | Inferred | **file overlap**: the intersection of the owned-path sets the two pre-scans derived | advisory; an inferred edge orders the members and marks them non-parallelizable, and is printed as inferred so the user can see why |
320
+
321
+ The union feeds exactly two decisions and nothing else: **ordering** (a
322
+ dependent member runs after its parent) and **parallelizability** (only members
323
+ with no edge between them and disjoint owned paths are lane candidates). An
324
+ inferred edge is deliberately allowed to be wrong in the conservative
325
+ direction — a false edge costs serial execution, a missed edge costs a
326
+ collision, so overlap resolves toward *serial*.
327
+
328
+ #### Auto-continuity — the next member needs no new contact
329
+
330
+ Under an accepted set contract, when a member closes **green** the loop pulls
331
+ the next member whose dependencies are all satisfied and starts it without a
332
+ new contact. Green means: its own final report ran, its quality cadence passed,
333
+ and no halt class fired. Anything else is not green and does not continue —
334
+ see failure isolation below.
335
+
336
+ The default stays **this one only**: auto-continuity applies to
337
+ `/roadmap:next` and to any wrapper reaching this section **only when the set
338
+ option was chosen on the sheet**. A single-roadmap invocation is never widened
339
+ into a set because more roadmaps happened to be open, which is condition 4 of
340
+ the set-scoped shape read from the loop's side.
341
+
342
+ #### Failure isolation — a regression halts its own member, not the set
343
+
344
+ A quality regression, a failed verify probe, or a halt class firing inside one
345
+ member terminates **that member** and leaves the rest of the set running:
346
+
347
+ 1. Record the member's outcome as halted, with the halt class and the evidence.
348
+ 2. Skip every member that declares a dependency on it — transitively. A
349
+ dependent member of a halted parent is *blocked*, not failed, and is
350
+ reported as such.
351
+ 3. Continue with the next independent member.
352
+ 4. Report every member's outcome in one final report at the end of the set.
353
+
354
+ Two carve-outs, and they are the reason this is isolation rather than
355
+ tolerance. A **Hard-Floor** stop and a **locked decision class** stop the whole
356
+ set, not one member: both are about the user's authority rather than about the
357
+ member's code, and continuing past them under a set contract would be exactly
358
+ the "several authorizations from one Accept" failure the enumeration guards
359
+ against. Likewise the **N=3 validation budget** is per validation target and is
360
+ not reset by moving to the next member.
361
+
362
+ #### Parallel lanes — the shape, and why they are not on yet
363
+
364
+ Lanes are **staged**, not shipped: the gate is ten clean serial set runs, and
365
+ that gate has not been reached because no set run has happened. Recorded here
366
+ so the shape is settled before the runs rather than designed under pressure:
367
+
368
+ - **Cap: two lanes** in the first iteration — a recorded decision
369
+ (`decision 2026-08-20`, AI council 2/2 on the `autonomy-defaults-sheet`
370
+ fork), chosen over the configured `subagents.max_parallel` because a
371
+ collision at two lanes is diagnosable and one at N is not. Reversible: the
372
+ cap is one number in the set contract, and raising it after the first ten
373
+ clean parallel runs is strictly cheaper than recovering from a lost branch.
374
+ - **Candidate test:** no dependency edge in either direction, and disjoint
375
+ owned paths.
376
+ - **Isolation:** the existing worktree scope lock
377
+ ([`worktree-lifecycle`](../../skills/worktree-lifecycle/SKILL.md)).
378
+ - **Coordination:** session-register branch claims, so two sessions never share
379
+ a branch.
380
+ - **Delivery:** one branch and one PR per lane.
381
+ - **Immediate removal:** a single scope-lock collision with data loss.
382
+
263
383
  ## 4. Resolve cadences — read once, cache for the run
264
384
 
265
385
  Read both keys from `.agent-settings.yml` once and cache for the whole
@@ -414,7 +534,39 @@ For each open step in the working set (scope-bound — see wrapper):
414
534
  Empty output → Iron Law 2 was violated this iteration: the step
415
535
  landed work but no checkbox flipped. **Halt loudly**, surface
416
536
  "step <N> landed without checkbox flip — flip then resume", and
417
- stop the run. Do not auto-fix; the user resumes on the next turn.
537
+ stop the run. Outside an accepted contract: do not auto-fix; the user
538
+ resumes on the next turn. Inside one: exactly one self-fix attempt, under
539
+ the four preconditions below.
540
+
541
+ **One deterministic self-fix, contract mode only.** A forgotten flip is the
542
+ one halt class whose repair is mechanical — the work is on disk, the step is
543
+ named, and the glyph follows from the outcome. Halting a contract run on it
544
+ spends a user contact to retype something the run can derive. So inside an
545
+ accepted contract the run may attempt the flip **once**, and only when all
546
+ four hold:
547
+
548
+ 1. **The work is citable.** The step's landed change is identifiable in this
549
+ iteration's own output — a diff, a file path, a command result. No
550
+ evidence, no flip: that is a genuine halt, not a forgotten one.
551
+ 2. **The glyph is unambiguous.** `[x]` only for a step whose evidence is
552
+ present and, where the step carries a `verify:` field, whose fresh green
553
+ run is in this reply. Anything that would be `[~]` or `[-]` is a
554
+ *disposition*, never a repair — those halt exactly as before, because a
555
+ deferral and a cancellation are decisions.
556
+ 3. **Exactly one attempt, per run.** Not per step. A second forgotten flip
557
+ in the same run halts: one is a slip, two is a broken loop, and the
558
+ difference is the whole justification for allowing the first.
559
+ 4. **The attempt is verified, then re-guarded.** Re-run the
560
+ `git status --porcelain` probe above after the flip. Still empty → halt
561
+ loudly as before. A self-fix that cannot prove itself is
562
+ indistinguishable from the failure it was repairing.
563
+
564
+ The attempt is recorded as a decision memo (§ 4 handling), so an auto-flip is
565
+ reviewable after the fact rather than invisible. **Kill criterion, from the
566
+ originating roadmap and repeated here because a flip is a write to the source
567
+ of truth: one wrong auto-flip removes this allowance** and returns the guard
568
+ to halt-always. Reversibility is the deletion of this block — the guard
569
+ underneath it never changed.
418
570
 
419
571
  This guard is the deterministic counterpart to the rule's
420
572
  pre-send self-check — it catches a forgotten flip per step, not
@@ -55,8 +55,12 @@ Fires once per creation task, not once per edit.
55
55
  - At most two propose → reject cycles; then stop.
56
56
  - Commit only on approval.
57
57
  - Bypass is legitimate — *"just write it"* drops the protocol immediately.
58
+ - An artifact discovered **after** an accepted contract halts by default;
59
+ `late_artifacts: auto-research` is the only declared value that continues,
60
+ capped at three per run (mechanics guideline § Late artifacts).
58
61
 
59
- Body migrated to [`guideline:agent-infra/artifact-drafting-protocol-mechanics`](../docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md) (per P4 of `road-to-kernel-and-router.md`) — Phase A/B/C procedure detail + the roadmap-run batch-mode carve-out (Research-once-at-contract-time, batch scope, no `artifact_protocol: skip`).
62
+ Body migrated to [`guideline:agent-infra/artifact-drafting-protocol-mechanics`](../docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md) (per P4 of `road-to-kernel-and-router.md`) — Phase A/B/C procedure detail + the roadmap-run batch-mode carve-out (Research-once-at-contract-time, batch scope, no `artifact_protocol: skip`) + § Late artifacts (the `halt` default
63
+ and the five-step `auto-research` procedure).
60
64
  Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
61
65
 
62
66
  Extends (cross-link, don't restate): `ask-when-uncertain`,
@@ -39,25 +39,21 @@ THE USER IS REACHED FOR THE RESERVED SET — AND ALWAYS FOR IT.
39
39
  NEVER CITE A LOCK YOU HAVE NOT EVALUATED THIS TURN.
40
40
  ```
41
41
 
42
- An agent that finds a genuinely beneficial change blocked by a recorded
43
- past decision — an honest-null eval verdict, a "don't relitigate"
44
- memory or context note, a token-frugality/budget canon line, or an ADR —
45
- does not quietly comply and drop the change. It surfaces the conflict and
46
- re-evaluates the lock — **in the council by default**, reaching the user only
47
- for the reserved set below. Progress means adaptation: locks encode what was
48
- true when they were written, not a ceiling on what the package may ever become.
42
+ An agent that finds a beneficial change blocked by a recorded decision — an
43
+ honest-null verdict, a "don't relitigate" note, a budget-canon line, or an ADR —
44
+ does not quietly comply and drop it. It surfaces the conflict and re-evaluates
45
+ the lock **in the council by default**, reaching the user only for the reserved
46
+ set below. Locks encode what was true when they were written, not a ceiling on
47
+ what the package may ever become.
49
48
 
50
49
  **The default venue is the council, and this is a correction, not a new
51
- policy.** [`ai-council`](../skills/ai-council/SKILL.md) has said since its own
52
- Iron Law that *"a design decision the agent cannot settle from the tree goes to
53
- the council first, not to the user first"*, and its class table already lists
54
- "reopening a recorded decision". This rule used to say "offers the user a path",
55
- which contradicted that and made every lock an owner interrupt. The measured
56
- cost of the contradiction: across 26 days of transcripts, the agent reported a
57
- lock and waited, and the owner had to void the decision retroactively before the
58
- work resumed — in the two clearest cases the lock report is timestamped **before**
59
- the override demand. The ordering was the defect; the permission was never
60
- missing.
50
+ policy.** [`ai-council`](../skills/ai-council/SKILL.md)'s Iron Law already sends
51
+ a decision the agent cannot settle from the tree to the council first, and its
52
+ class table lists "reopening a recorded decision". The old "offers the user a
53
+ path" wording made every lock an owner interrupt; measured across 26 days of
54
+ transcripts, the agent reported a lock and waited while the owner voided the
55
+ decision retroactively — twice with the lock report timestamped **before** the
56
+ override demand. The ordering was the defect; the permission was never missing.
61
57
 
62
58
  **Mechanism-match check comes FIRST**: a verdict settles the *mechanism it
63
59
  tested*, not every future proposal that resembles it — if the blocked change
@@ -81,20 +77,54 @@ distinction.
81
77
  4. **Route it** — council by default (below), user only for the reserved set.
82
78
  5. **Record** the outcome with scope and `revisit-if`.
83
79
 
84
- These five are the obligation and they are stated here rather than only behind
85
- a route, because the route was measurably unreachable: `decision-revisit-gate`
86
- lives in the always-on `meta` pack while `decision-review` ships
87
- `install.default: false` in the non-default `analysis-workbench` pack, so a
88
- pack-legal install received the obligation and not the procedure. `routes_to`
89
- now names two always-on skills; the backward-audit depth in
90
- [`decision-review`](../skills/decision-review/SKILL.md) stays optional, which is
91
- the correct status for depth.
80
+ The five are stated here, not only behind a route, because the route was
81
+ measurably unreachable: `decision-review` ships `install.default: false` in the
82
+ non-default `analysis-workbench` pack, so a pack-legal install received the
83
+ obligation and not the procedure. `routes_to` now names two always-on skills;
84
+ the backward-audit depth in
85
+ [`decision-review`](../skills/decision-review/SKILL.md) stays optional.
92
86
 
93
87
  Full catalog (honest nulls, don't-relitigate notes, budget-canon lines, ADRs,
94
88
  hard structural caps), the per-step detail, when-NOT-to-fire and the failure
95
89
  modes remain in [`skill:decision-review` § Decision-revisit gate — mechanics](../skills/decision-review/SKILL.md).
96
90
  Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
97
91
 
92
+ ## Reading a lock — the two descriptive axes
93
+
94
+ Step 2 reads, in order: **effective state** (status · amendments · successors) →
95
+ **provenance** → **evidence strength** → **discovery** → **current evidence**
96
+ (does the basis still resolve in a clone?) → **reversibility of the proposed
97
+ transition** → **reserved dimensions**. `adr_cite_check` prints six of them —
98
+ read 6 is the agent's, because reversibility belongs to the proposed transition
99
+ and no tool reading one record supplies it. What each field means, and what a
100
+ `[found]` basis ref does NOT claim, is in that script's module docstring. The
101
+ evidence-priced burden table stays in
102
+ [`adr-layout § The reopen record`](../docs/contracts/adr-layout.md).
103
+
104
+ ```
105
+ A GRADE IS A MEASUREMENT, NOT A PERMISSION — IT GRANTS NOTHING.
106
+ CITING AN E0 LOCK AS A HARD BLOCKER WITHOUT SURFACING ITS GRADE IS A VIOLATION.
107
+ NO GRADE LETS AN AGENT SUPERSEDE A RECORD, SKIP A COUNCIL, OR TAKE ANY ACTION
108
+ IT COULD NOT TAKE YESTERDAY. THE COUNCIL-FIRST VENUE STAYS, AT EVERY GRADE.
109
+ AN ADR'S HISTORICAL DECISION-MAKER DOES NOT DETERMINE ITS REOPEN VENUE.
110
+ A LOW-EVIDENCE RECORD MAY STATE A DECISION; IT DOES NOT ESTABLISH THAT ITS
111
+ ALTERNATIVES REMAIN INVALID.
112
+ ```
113
+
114
+ Venue comes from the proposed transition, the trust boundaries it touches and
115
+ the reserved dimensions below — never from who decided originally, and never
116
+ from a grade. A weak grade changes how much a reopen must **do**, never who may
117
+ do it: `authority_basis: owner_intent` is surfaced with its accumulated cost and
118
+ never overruled, and council agreement never raises `evidence.strength` —
119
+ sources and measurements do.
120
+
121
+ **No E0/E1 agent path is enabled here, and no reading of this rule enables
122
+ one.** Whether an independently validated grade may ever reduce the
123
+ *authorization* burden is an owner-reserved open question — the
124
+ `authority-coupling-decision` blocker — left unanswered because the party
125
+ assigning a grade would be the party gaining authority from it, and would be
126
+ self-classifying the transition as reversible-internal on top.
127
+
98
128
  ## Who decides — the owner-reserved set
99
129
 
100
130
  The discriminator, in one question: **does the proposed transition weaken an
@@ -121,27 +151,24 @@ forever. Availability is `agent-config council:status`, never a project file
121
151
  ([`council-availability`](council-availability.md)).
122
152
 
123
153
  Field on the ADR: `reopen_policy: directional | owner | unclassified`, absent →
124
- **`unclassified`**, which permits council investigation and reversible
125
- experiments and gates only execution of a reserved transition. Absent is
154
+ **`unclassified`** — council investigation and reversible experiments are
155
+ permitted; only execution of a reserved transition is gated. Absent is
126
156
  deliberately not `owner`: with 146 accepted ADRs that default would encode
127
- today's blockage into the new schema. Full contract, the reopen record, and the
157
+ today's blockage into the new schema. Full contract, the reopen record and the
128
158
  precedent-creates-no-authority clause: [`adr-layout § Reopen authority`](../docs/contracts/adr-layout.md).
129
159
 
130
160
  ## See also
131
161
 
132
162
  - [`recurring-criticism`](recurring-criticism.md) — the **other entrance**: this
133
163
  rule fires when a lock blocks a change, that one when the same criticism arrives
134
- again. It reuses the five steps and the owner-reserved table below.
164
+ again. It reuses the five steps and the owner-reserved table above.
135
165
  - [`decision-review`](../skills/decision-review/SKILL.md) — the backward-audit
136
166
  procedure + the migrated gate mechanics.
137
167
  - [`ai-council`](../skills/ai-council/SKILL.md) — the re-evaluation mechanism;
138
168
  owns the convergence-summary scope + `revisit-if` contract.
139
169
  - [`decision-record`](../skills/decision-record/SKILL.md) — forward-flow decision
140
170
  locking; its **§ 4 Lock the choice + consequences** requires the `Revisit-if:`
141
- line that names the reopening condition up front. (This pointer used to cite an
142
- "escalation litmus" heading; `grep` over `src/` + `docs/` returns two hits and
143
- neither is in that file — the heading never existed, so the pointer led
144
- nowhere. Corrected to the section that carries the obligation.)
171
+ line that names the reopening condition up front.
145
172
  - [`token-budget-discipline`](token-budget-discipline.md) — the frugality-canon
146
173
  value-over-budget escalation this rule's budget-lock case defers to.
147
174
  - [`no-cheap-questions`](no-cheap-questions.md) — the question-quality floor a
@@ -164,3 +191,8 @@ plus the curated `dist/agent-src/scripts/` list and is deliberately out of this
164
191
  change. And `docs/decisions/` is projected into no agent-visible tree at all —
165
192
  the agent sees ADR *numbers* cited across rules and skills, almost never ADR
166
193
  *text*. Until that changes, "evaluate before citing" means opening the file.
194
+
195
+ `docs/contracts/` is unprojected on the same terms (`dist/agent-src/` carries no
196
+ `docs/`), so the burden table this rule points at is maintainer-reachable only.
197
+ That is why the reserved-set table above stays here rather than becoming a
198
+ pointer: a consumer install receives these lines and not the contract.
@@ -107,4 +107,4 @@ inflate it, so it is not claimed — skipping this rule is caught by nothing.
107
107
  - [`decision-revisit-gate`](decision-revisit-gate.md) — the other entrance; owns the five steps and the owner-reserved routing this rule reuses instead of restating. Separate file only because that one sits four lines under the 200-line cap.
108
108
  - [`self-repair-loop`](self-repair-loop.md) — the single-occurrence intake; this rule is what its `occurrences` counter is for.
109
109
  - [`active-remediation`](active-remediation.md) — the terminal "leave it" this rule does not override (see `collision_ok`).
110
- - [`/analyze:inbox`](../domains/analysis-workbench/analyze/inbox/command.md) § Phase 4c — the artifact-side detection that routes here.
110
+ - [`/analyze:inbox`](../commands/analyze/inbox.md) § Phase 4c — the artifact-side detection that routes here.