@event4u/agent-config 14.6.0 → 14.7.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 (188) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +260 -7
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/analyze/inbox.md +264 -10
  5. package/dist/agent-src/commands/analyze.md +1 -1
  6. package/dist/agent-src/commands/roadmap/process-full.md +116 -30
  7. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +31 -0
  8. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +135 -104
  9. package/dist/agent-src/rules/context-hygiene.md +2 -0
  10. package/dist/agent-src/rules/decision-revisit-gate.md +3 -0
  11. package/dist/agent-src/rules/fix-what-you-see.md +108 -0
  12. package/dist/agent-src/rules/no-roadmap-references.md +0 -5
  13. package/dist/agent-src/rules/recurring-criticism.md +110 -0
  14. package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
  15. package/dist/agent-src/rules/rule-type-governance.md +0 -2
  16. package/dist/agent-src/rules/self-repair-loop.md +17 -0
  17. package/dist/agent-src/rules/skill-quality.md +0 -2
  18. package/dist/agent-src/rules/source-confidentiality.md +37 -7
  19. package/dist/agent-src/scripts/archival_sweep.ts +117 -0
  20. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +19 -3
  21. package/dist/agent-src/scripts/gate_budget.ts +282 -0
  22. package/dist/agent-src/scripts/gate_execute.ts +72 -31
  23. package/dist/agent-src/scripts/roadmap_gates.ts +74 -3
  24. package/dist/agent-src/scripts/update_roadmap_progress.ts +251 -7
  25. package/dist/agent-src/skills/ai-council/SKILL.md +48 -807
  26. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +320 -0
  27. package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +99 -0
  28. package/dist/agent-src/skills/ai-council/references/execution-modes.md +162 -0
  29. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +125 -0
  30. package/dist/agent-src/skills/ai-council/references/procedure.md +143 -0
  31. package/dist/agent-src/skills/quality-tools/SKILL.md +34 -326
  32. package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +113 -0
  33. package/dist/agent-src/skills/quality-tools/references/php-tools.md +222 -0
  34. package/dist/agent-src/skills/roadmap-management/SKILL.md +15 -409
  35. package/dist/agent-src/skills/roadmap-management/references/archival.md +226 -0
  36. package/dist/agent-src/skills/roadmap-management/references/authoring.md +107 -0
  37. package/dist/agent-src/skills/roadmap-management/references/dashboard.md +47 -0
  38. package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +58 -0
  39. package/dist/agent-src/skills/skill-writing/SKILL.md +34 -570
  40. package/dist/agent-src/skills/skill-writing/references/procedure.md +275 -0
  41. package/dist/agent-src/skills/skill-writing/references/read-only-scripts.md +18 -0
  42. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +298 -0
  43. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  44. package/dist/agent-src/templates/roadmaps.md +45 -2
  45. package/dist/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
  46. package/dist/agent-src/templates/scripts/telemetry/remote.ts +160 -7
  47. package/dist/agent-src/templates/scripts/telemetry/transport.ts +169 -0
  48. package/dist/cli/registry.js +1 -1
  49. package/dist/cli/registry.js.map +1 -1
  50. package/dist/cli-delegate/chunk-2GNWGMAL.js +172 -0
  51. package/dist/cli-delegate/{chunk-RLN73PR5.js → chunk-4VR4ORQ6.js} +10 -7
  52. package/dist/cli-delegate/chunk-6EOCNQAM.js +402 -0
  53. package/dist/cli-delegate/{chunk-XURJ4AQC.js → chunk-74E3TKWV.js} +381 -280
  54. package/dist/cli-delegate/{chunk-3UCJWMMP.js → chunk-7F3VYSM2.js} +4 -4
  55. package/dist/cli-delegate/{chunk-BKO2AZ7Z.js → chunk-B2ERU2VA.js} +1 -1
  56. package/dist/cli-delegate/{chunk-NXFWFAYV.js → chunk-G23AT6GD.js} +1 -0
  57. package/dist/cli-delegate/{chunk-63WSP6YZ.js → chunk-GJ5BVHXM.js} +72 -165
  58. package/dist/cli-delegate/{chunk-P6LQDIWK.js → chunk-JZ4NR2TW.js} +338 -0
  59. package/dist/cli-delegate/chunk-MWRD5YOH.js +100 -0
  60. package/dist/cli-delegate/{chunk-GRRPEPRN.js → chunk-T7L2QK3K.js} +24 -5
  61. package/dist/cli-delegate/{chunk-EVTY7ISR.js → chunk-YM4GZDJG.js} +9 -1
  62. package/dist/cli-delegate/cmd_conformance.js +459 -709
  63. package/dist/cli-delegate/cmd_doctor.js +6 -6
  64. package/dist/cli-delegate/cmd_explain.js +1 -1
  65. package/dist/cli-delegate/cmd_export.js +7 -6
  66. package/dist/cli-delegate/cmd_handoff.js +6 -6
  67. package/dist/cli-delegate/cmd_packs_active.js +1 -1
  68. package/dist/cli-delegate/cmd_preflight.js +2 -2
  69. package/dist/cli-delegate/cmd_prune.js +7 -6
  70. package/dist/cli-delegate/cmd_session_recycle.js +840 -30
  71. package/dist/cli-delegate/cmd_settings_migrate.js +7 -6
  72. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  73. package/dist/cli-delegate/cmd_sync.js +7 -6
  74. package/dist/cli-delegate/cmd_uninstall.js +9 -7
  75. package/dist/cli-delegate/cmd_update.js +1 -1
  76. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  77. package/dist/cli-delegate/cmd_validate.js +7 -6
  78. package/dist/discovery/deprecation-report.md +1 -1
  79. package/dist/discovery/discovery-manifest.json +68 -25
  80. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  81. package/dist/discovery/discovery-manifest.summary.md +4 -4
  82. package/dist/discovery/dormancy-report.md +1 -1
  83. package/dist/discovery/orphan-report.md +1 -1
  84. package/dist/discovery/packs.json +10 -8
  85. package/dist/discovery/trust-report.md +3 -3
  86. package/dist/discovery/workspaces.json +8 -6
  87. package/dist/hooks/dispatch.js +2901 -2053
  88. package/dist/install/claudePathsPlan.js +187 -0
  89. package/dist/install/claudePathsPlan.js.map +1 -0
  90. package/dist/install/hostLayerFingerprint.js +136 -0
  91. package/dist/install/hostLayerFingerprint.js.map +1 -0
  92. package/dist/install/install.mjs +553 -425
  93. package/dist/install/partitionEligibility.js +276 -0
  94. package/dist/install/partitionEligibility.js.map +1 -0
  95. package/dist/mcp/registry-manifest.json +3 -3
  96. package/dist/mcp/server.json +2 -2
  97. package/dist/mcp/server.mjs +1744 -1191
  98. package/dist/router.json +1 -1
  99. package/dist/scripts/_lib/agent_src.js +41 -0
  100. package/dist/scripts/_lib/agent_src.js.map +1 -1
  101. package/dist/scripts/_lib/install_layout.js +83 -0
  102. package/dist/scripts/_lib/install_layout.js.map +1 -0
  103. package/dist/scripts/_lib/installed_lock.js +444 -0
  104. package/dist/scripts/_lib/installed_lock.js.map +1 -0
  105. package/dist/scripts/condense.js +13 -164
  106. package/dist/scripts/condense.js.map +1 -1
  107. package/dist/server/schemas/settings.js +4 -0
  108. package/dist/server/schemas/settings.js.map +1 -1
  109. package/docs/contracts/settings-classes.md +12 -6
  110. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +8 -3
  111. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +26 -0
  112. package/docs/guidelines/agent-infra/memory-access.md +17 -0
  113. package/docs/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
  114. package/package.json +1 -1
  115. package/src/agent-src/scripts/archival_sweep.ts +117 -0
  116. package/src/agent-src/scripts/archive_completed_roadmaps.ts +19 -3
  117. package/src/agent-src/scripts/gate_budget.ts +282 -0
  118. package/src/agent-src/scripts/gate_execute.ts +72 -31
  119. package/src/agent-src/scripts/roadmap_gates.ts +74 -3
  120. package/src/agent-src/scripts/update_roadmap_progress.ts +251 -7
  121. package/src/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
  122. package/src/agent-src/templates/scripts/telemetry/remote.ts +160 -7
  123. package/src/agent-src/templates/scripts/telemetry/transport.ts +169 -0
  124. package/src/config/agent-settings.template.yml +27 -2
  125. package/src/config/ci-local-parity.yml +18 -0
  126. package/src/config/estate-count-budget.json +339 -3
  127. package/src/config/gate-violation-baselines.json +41 -41
  128. package/src/config/rule-activation-census.json +14 -6
  129. package/src/config/rule-stub-ceilings.json +19 -6
  130. package/src/install/claudePathsPlan.ts +196 -0
  131. package/src/install/hostLayerFingerprint.ts +145 -0
  132. package/src/install/partitionEligibility.ts +325 -0
  133. package/src/scripts/_cli/cmd_session_recycle.ts +9 -1
  134. package/src/scripts/_dispatch.bash +6 -1
  135. package/src/scripts/_lib/ac_heading.ts +30 -0
  136. package/src/scripts/_lib/agent_src.ts +42 -0
  137. package/src/scripts/_lib/bench_ab_pinned_repo.ts +162 -0
  138. package/src/scripts/_lib/bench_ab_workspace.ts +10 -1
  139. package/src/scripts/_lib/envelope_grounding.ts +38 -8
  140. package/src/scripts/_lib/installed_lock.ts +50 -5
  141. package/src/scripts/_lib/md_section.ts +129 -0
  142. package/src/scripts/_lib/scope_guard.sh +26 -3
  143. package/src/scripts/_lib/self_repair.ts +19 -0
  144. package/src/scripts/_lib/self_repair_class_b.ts +171 -0
  145. package/src/scripts/ai_council/cli_help.ts +55 -0
  146. package/src/scripts/before_complete_hook.ts +153 -28
  147. package/src/scripts/bench_ab_v2_complexity.ts +27 -7
  148. package/src/scripts/check_references.ts +60 -0
  149. package/src/scripts/check_release_published.ts +32 -11
  150. package/src/scripts/check_single_delivery.ts +59 -15
  151. package/src/scripts/ci_settle.ts +170 -0
  152. package/src/scripts/condense.ts +20 -170
  153. package/src/scripts/council_cli.ts +3 -3
  154. package/src/scripts/dispatch_r2_reviewer.ts +6 -14
  155. package/src/scripts/hook_manifest.json +1 -1
  156. package/src/scripts/hook_manifest.yaml +77 -14
  157. package/src/scripts/hooks/block_no_verify.ts +61 -10
  158. package/src/scripts/hooks/block_unauthorized_git.ts +1 -1
  159. package/src/scripts/hooks/concern_registry.ts +4 -0
  160. package/src/scripts/hooks/rtk_wrap_hook.ts +8 -3
  161. package/src/scripts/hooks/run_continuation_hook.ts +8 -5
  162. package/src/scripts/hooks/ship_diff_volume_hook.ts +81 -15
  163. package/src/scripts/hooks/source_first_gate_hook.ts +464 -0
  164. package/src/scripts/hooks/state_io.ts +782 -20
  165. package/src/scripts/hooks/subagent_ledger_hook.ts +44 -15
  166. package/src/scripts/hooks/telemetry_flush_hook.ts +139 -0
  167. package/src/scripts/hooks/telemetry_self_repair.ts +128 -0
  168. package/src/scripts/hooks/telemetry_usage_hook.ts +22 -4
  169. package/src/scripts/hooks/turn_end_gate_hook.ts +81 -15
  170. package/src/scripts/install.ts +16 -11
  171. package/src/scripts/language_mirror_hook.ts +561 -25
  172. package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
  173. package/src/scripts/lint_plan_risk_register.ts +4 -3
  174. package/src/scripts/lint_skill_router_head.ts +4 -4
  175. package/src/scripts/mcp_server/tools.ts +2 -2
  176. package/src/scripts/new_roadmap.ts +136 -0
  177. package/src/scripts/pack_mcp_content.ts +20 -5
  178. package/src/scripts/release.ts +37 -38
  179. package/src/scripts/report_layer_overlap.ts +6 -0
  180. package/src/scripts/self_repair_hook.ts +37 -5
  181. package/src/scripts/session_register_hook.ts +11 -0
  182. package/src/scripts/skill_usage_collect.ts +11 -1
  183. package/src/scripts/skill_usage_report.ts +278 -8
  184. package/src/scripts/sync_pr_branch.ts +7 -0
  185. package/src/server/schemas/settings.ts +8 -0
  186. package/dist/cli-delegate/chunk-EJITJBJX.js +0 -172
  187. package/dist/cli-delegate/chunk-PZWRPRWP.js +0 -38
  188. /package/dist/cli-delegate/{chunk-RYNADUFG.js → chunk-LWTYTX6F.js} +0 -0
@@ -180,82 +180,85 @@ change in § 3a.
180
180
  `commit-policy` § NEVER ask about committing holds regardless of
181
181
  autonomy).
182
182
 
183
- ### 3c. Runnable-work precondition — refuse a run with nothing to do
183
+ ### 3c. Capability screen — can the agent do this at all?
184
184
 
185
185
  ```
186
- A RUN WITH NO RUNNABLE OPEN STEP DOES NOT START.
187
- NAME THE BLOCKERS. CREATE NO BRANCH. WRITE NOTHING.
188
- THIS IS A PRECONDITION, NEVER A HALT — IT CANNOT FIRE MID-RUN.
186
+ A RUN ALWAYS STARTS. THERE IS NO PREFLIGHT REFUSAL.
187
+ PER OPEN STEP, ASK ONE QUESTION: CAN THE AGENT EXECUTE THIS AT ALL?
188
+ YES → IT IS WORK. NO → IT IS THE ONLY KIND OF BLOCKER LEFT.
189
+ WHO CONVENTIONALLY DOES A THING IS NOT A PROPERTY OF THE THING.
189
190
  ```
190
191
 
191
- Run once, at the end of the pre-scan, before any grant is exercised.
192
-
193
- **Runnable** is decided from the roadmap's own `## Blockers` section and nothing
194
- else. An open step is **not** runnable when a blocker satisfies all four:
195
-
196
- 1. it exists in `## Blockers` **before this run started** — a blocker the run
197
- itself authored does not count (see the gaming note below);
198
- 2. its `Class:` is `2` (consent-once) or `3` (human-only) — classes `0` and `1`
199
- are agent-runnable by construction and carry a `Run:` the agent executes,
200
- per [`templates/roadmaps.md`](../../templates/roadmaps.md);
201
- 3. its `Blocks:` field names this step, by phase-and-step identifier or by a
202
- phase whose scope contains it;
203
- 4. it names what would clear it.
204
-
205
- Every other open step is runnable. **No blocker citation → runnable**, and the
206
- default direction is deliberate: the failure this precondition must not have is
207
- refusing work an agent could have done.
208
-
209
- - **At least one runnable open step** → the run proceeds. It does *not* matter
210
- how many steps are blocked; the blocked ones are skipped in place (never
211
- flipped — see the terminal-outcomes section), and the run works the rest.
212
- - **Zero runnable open steps** → `blocked-preflight`. Report the roadmap, the
213
- open-step count, and each blocker with its class and its clearing action.
214
- Create no branch, write no state, take no grant.
215
-
216
- **A step this precondition judges non-runnable carries a `blocked-by:` marker on
217
- its own line.** The obligation is here because two mechanisms read blockedness
218
- from two different places and only one of them reads this section: `run-continuation`,
219
- the stop-slot concern that re-engages an autonomous run, decides open-vs-blocked
220
- from the inline `<!-- blocked-by: <id> -->` marker and never parses `## Blockers`
221
- at all. Without the marker a step that IS blocked per the four conditions above
222
- still counts as open work to the concern, which re-engages the agent into it every
223
- stop fire until the stall rung fires — the mechanism whose job is to detect a
224
- stall manufacturing one, which is the failure shape this file already records once
225
- for the roadmap-root split.
226
-
227
- Round 8 finding 7 caught the two predicates as disjoint. The fix is this coupling
228
- sentence rather than teaching the concern to parse `## Blockers`: a second
229
- implementation of the four conditions is a second thing to keep in step, and the
230
- one-line marker is checkable by eye at the step it belongs to. **The residual is
231
- real and is not papered over:** nothing enforces the pairing, so a `## Blockers`
232
- entry authored without its marker is caught by review or not at all.
233
-
234
- **Why a precondition and not a sixth halt.** The five halt conditions interrupt
235
- work that is still runnable; this decides whether any runnable work exists at
236
- all. Keeping them structurally separate is what preserves the forbidden-list's
237
- authority over mid-run stopping — an agent that may not stop for "this phase is
238
- large" also may not stop for "this feels human-gated". AI council 2026-08-19,
239
- 2/2 convergent, explicitly on this point: *"keep this structurally separate from
240
- 'five, and only five': the five are exceptional halts; `blocked` is an
241
- exhaustion-of-runnable-work terminal outcome."*
242
-
243
- **The gaming vector, named because it is the one thing that would make this
244
- worse than the gap it closes.** An agent meets a hard step, writes a `## Blockers`
245
- entry claiming Class 3, cites it, and stops — a comfort-stop wearing a citation.
246
- Condition 1 is the whole defence: a blocker must pre-date the run, which is
247
- checkable from git rather than from the agent's word. A blocker discovered
248
- mid-run is recorded (that is honest and useful) and does **not** make the step
249
- non-runnable in this run.
250
-
251
- **One imprecision, recorded rather than smoothed over.** The class taxonomy has
252
- four rows and none of them says *"waiting on time"* or *"waiting on another
253
- roadmap"*. A soak window and a cross-roadmap dependency are authored as `3`
254
- today, because absence of `Class:` already means `3` — so they are decidable but
255
- mislabelled as human-only. A fifth class is a taxonomy change with a linter
256
- behind it (`lint_roadmap_blockers`) and is not made here.
257
- *Revisit-if:* a run is refused on a blocker whose real content is "wait", and
258
- the report reads wrong to the person holding it.
192
+ **Rewritten by [ADR-237](../../../docs/decisions/ADR-237-end-to-end-execution-authority.md),
193
+ which supersedes ADR-235.** This section used to be a *preflight refusal*: a run
194
+ with no "runnable" open step created no branch and wrote nothing. That is gone.
195
+ The invocation is a delegation, so the question is no longer *is this step
196
+ runnable under current governance* but *is this step possible for the agent at
197
+ all.*
198
+
199
+ Run once at the end of the pre-scan, and again immediately before any `blocked`
200
+ report.
201
+
202
+ **The screen, in order:**
203
+
204
+ 1. **Can the agent execute it?** Through the filesystem, git, `gh`, an API, a
205
+ CLI, a tool, a model, a council — anything machine-executable. If yes, the
206
+ step is **work**. Stop here; no blocker citation changes that.
207
+ 2. **Is the authority already implied by the invocation?** For a `process-full`
208
+ run: branches, chunked commits, pushing that branch, opening and updating the
209
+ PR, reversible repository/branch settings, CI runs and re-runs, merge-base
210
+ updates, conflict resolution, project-local dependencies, and paid calls
211
+ inside the cumulative USD 25 ceiling. If yes → **run it**.
212
+ 3. **Is it on the EXCLUDED list?** Merging to a production trunk, deploying,
213
+ production data / secrets / IAM / DNS, bulk deletion outside the roadmap's
214
+ scope, an irreversible external action beyond the PR itself. Those keep their
215
+ own this-turn confirmation ([`non-destructive-by-default`](../../rules/non-destructive-by-default.md))
216
+ and are a **halt**, not a blocker.
217
+ 4. **Otherwise it is externally impossible**, and only then is it a blocker: a
218
+ credential that does not exist and cannot be created · a purchase beyond the
219
+ budget · physical hardware access · another person or organisation must act ·
220
+ a wait that is factually mandatory and unverifiable.
221
+
222
+ **A `## Blockers` entry is evidence, never a verdict.** A `Class: 3` label on an
223
+ action the agent can perform is a **defect in the roadmap**, and the run repairs
224
+ the label rather than obeying it — recording what it did and why. Class `0`/`1`
225
+ entries carry a `Run:` the agent executes, exactly as before. Class `2`
226
+ (consent-once) is pre-cleared for the duration of a `process-full` run when the
227
+ consent it wants is one the invocation already gave; a `2` asking for something
228
+ the invocation did NOT give (an EXCLUDED action, a spend crossing) still reaches
229
+ the owner.
230
+
231
+ **No citation → work**, and the default direction is unchanged: the failure this
232
+ screen must not have is declining work an agent could have done.
233
+
234
+ **A step this screen judges externally impossible carries a `blocked-by:` marker
235
+ on its own line.** The obligation is unchanged and its reason is unchanged: two
236
+ mechanisms read blockedness from two different places and only one reads this
237
+ section — `run-continuation`, the stop-slot concern that re-engages an autonomous
238
+ run, decides open-vs-blocked from the inline `<!-- blocked-by: <id> -->` marker
239
+ and never parses `## Blockers`. Without the marker a step that IS impossible
240
+ still counts as open work to the concern, which re-engages the agent into it
241
+ every stop fire until the stall rung fires — the mechanism whose job is to detect
242
+ a stall manufacturing one. **The residual is real and is not papered over:**
243
+ nothing enforces the pairing, so a `## Blockers` entry authored without its
244
+ marker is caught by review or not at all.
245
+
246
+ **The gaming vector inverted, and both directions are now named.** Under ADR-235
247
+ the vector was an agent writing itself a Class-3 blocker to stop early; the
248
+ defence was that a qualifying blocker must **pre-date the run**, checkable from
249
+ git. That defence is kept for the narrow blocker set that remains. ADR-237 adds
250
+ the opposite vector — an agent that keeps going past a spend ceiling or into an
251
+ EXCLUDED action under cover of "the roadmap needed it" — and its defences are
252
+ step 3 above being an enumerated list rather than a characterisation, and the
253
+ ceiling being cumulative per run rather than per action.
254
+
255
+ **One imprecision, inherited and now given a test.** The class taxonomy has no
256
+ row for *"waiting on time"* or *"waiting on another roadmap"*; both are authored
257
+ as `3` today because an absent `Class:` already means `3`. Under step 4 a wait is
258
+ a blocker only when it is factually mandatory and unverifiable — a soak window a
259
+ run can simply outlast, or a cross-roadmap dependency the run can satisfy itself,
260
+ is work. The taxonomy still lacks the row; the mislabel now has a stated test
261
+ instead of a default.
259
262
 
260
263
  ## 4. Resolve cadences — read once, cache for the run
261
264
 
@@ -507,51 +510,68 @@ artifact drafting, council enablement), not safety.
507
510
 
508
511
  On halt: stop, surface state, do **not** auto-fix outside the failing step.
509
512
 
510
- ### Terminal outcomes — `complete`, `blocked`, or a halt
511
-
512
- The halt list above answers *"what interrupts runnable work"*. It does not answer
513
- *"what does the run report when there is no runnable work left and the roadmap is
514
- not finished"*, and until this section there was no answer: the wrapper's stop
515
- condition was `count_open == 0` or a halt, so a roadmap whose remaining steps all
516
- need a human had **no legal stopping point**.
517
-
518
- That is not a hypothetical. Measured 2026-08-19 across the twelve most nearly
519
- complete roadmaps in the estate: **zero** could reach `count_open == 0` in one
520
- PR. Every remaining open step needed a human action — flip branch protection,
521
- delete committed evidence, authorise paid spend, install an absent binary, wait
522
- out a soak window, use the maintainer's own machine, or edit a file an armed host
523
- hook denies.
513
+ ### Terminal outcomes — `complete`, or a genuine external impossibility
514
+
515
+ The halt list above answers *"what interrupts runnable work"*. This answers
516
+ *"what does the run report when the roadmap is not finished and the remaining
517
+ work is not the agent's to do"* — and under
518
+ [ADR-237](../../../docs/decisions/ADR-237-end-to-end-execution-authority.md) that
519
+ second set is much smaller than it looks.
520
+
521
+ **The measurement that motivated the old answer, and the reading that replaced
522
+ it.** Measured 2026-08-19 across the twelve most nearly complete roadmaps:
523
+ **zero** could reach `count_open == 0` in one PR, because every remaining step
524
+ needed "a human action" — flip branch protection, authorise paid spend, install a
525
+ binary, wait out a soak window, edit a file a hook denies. The census was sound.
526
+ The reading was not: it counted actions a human *conventionally* performs,
527
+ without asking per action whether a human was **necessary**. Flipping a branch
528
+ setting, pushing, opening a PR, re-running CI, updating a merge base, fixing a
529
+ test, spending inside a budget — the agent can do all of it. That is remediation
530
+ work, and a `process-full` invocation grants it.
524
531
 
525
532
  Three outcomes, and only one of them is success:
526
533
 
527
534
  | Outcome | When | What it reports |
528
535
  |---|---|---|
529
- | `complete` | `count_open == 0` | the roadmap is finished; archival check runs (§ 6) |
530
- | `blocked` | `count_open > 0` **and** no open step is runnable | the work that DID close, plus every blocker with its clearing action |
536
+ | `complete` | `count_open == 0` and the PR is open | the roadmap is finished; archival check runs (§ 6) |
537
+ | `blocked` | every remaining open step is **externally impossible** for the agent | the work that DID close, plus the specific impossibility |
531
538
  | a halt | one of the five conditions above fired | the halt, its evidence, and what remains |
532
539
 
540
+ `blocked-preflight` **no longer exists** (ADR-237 § 4). A run always starts.
541
+
533
542
  ```
534
543
  `blocked` IS NEVER PRESENTED AS COMPLETION.
535
544
  count_open STAYS > 0. NO CHECKBOX IS FLIPPED TO [~] TO REACH IT.
536
545
  A PR OPENED ON A BLOCKED RUN IS LABELLED PARTIAL PROGRESS.
537
- REVALIDATE IMMEDIATELY BEFORE REPORTING IT — ONE RUNNABLE STEP LEFT REJECTS THE CLAIM.
546
+ BEFORE REPORTING IT, ASK PER REMAINING STEP: CAN I DO THIS AT ALL?
547
+ ONE STEP THE AGENT COULD HAVE EXECUTED REJECTS THE CLAIM.
538
548
  ```
539
549
 
550
+ **Externally impossible — the whole list.** A required credential that does not
551
+ exist and the agent cannot create · a purchase beyond the delegated budget ·
552
+ physical hardware access · another person or organisation must act · a wait that
553
+ is factually mandatory and cannot be simulated or verified.
554
+
555
+ **Not externally impossible — every one of these is work.** An unprotected
556
+ branch · a branch to create · a push · a PR to open · a repository or branch
557
+ setting the agent can change · a workflow to start · CI to re-run · a merge base
558
+ to update · conflicts · failing tests · local configuration · a paid call under
559
+ the ceiling · "this could be risky" · "a maintainer should do this".
560
+
540
561
  The `[~]` prohibition is load-bearing and was the one point the council split on.
541
562
  Deferring a blocked step to `[~]` would let the run reach `count_open == 0` and
542
563
  report completion — laundering unfinished work through a glyph, which is exactly
543
564
  what Iron Law 3 of [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md)
544
565
  exists to catch on the archival side. So the boxes stay open and the outcome
545
- carries the truth instead.
546
-
547
- Revalidation is the second half of the same discipline: the runnable set is
548
- recomputed at the moment of reporting, because steps unblock during a run (a
549
- prerequisite closes, a `Run:` succeeds, a peer merges). If any open step is
550
- runnable, `blocked` is refused and the loop continues.
566
+ carries the truth instead. **ADR-237 keeps this clause verbatim** — narrowing
567
+ `blocked` makes it more important, not less, because a run with more authority
568
+ has more ways to reach a clean-looking count.
551
569
 
552
- **Runnability is decided by the § 3c test**, unchanged — the same four conditions,
553
- including that a qualifying blocker must pre-date the run. A blocker the run
554
- authored is recorded and does not make a step non-runnable in that run.
570
+ Revalidation is the second half of the same discipline: the set is recomputed at
571
+ the moment of reporting, because steps unblock during a run (a prerequisite
572
+ closes, a `Run:` succeeds, a peer merges, a setting the run itself changed). If
573
+ any remaining step is one the agent could execute, `blocked` is refused and the
574
+ loop continues.
555
575
 
556
576
  ### Forbidden non-halt reasons — agent-invented cautions
557
577
 
@@ -570,14 +590,25 @@ a violation of the command and the user's will:
570
590
  the stop-and-wait reading of `phase-checkpoints` applies only to
571
591
  `process-phase`.
572
592
  - **"this step looks human-gated"** — the `blocked` outcome above is reached by
573
- the § 3c test over blockers that pre-date the run, never by a judgement about
574
- how a step feels. A step with no qualifying blocker citation is runnable, and
575
- writing the citation yourself does not make it one. This entry exists because
576
- the terminal outcome is the single most abusable thing on this page.
593
+ the § 3c test, never by a judgement about how a step feels. A step with no
594
+ qualifying blocker citation is runnable, and writing the citation yourself does
595
+ not make it one. This entry exists because the terminal outcome is the single
596
+ most abusable thing on this page.
597
+ - **"the branch is not protected" / "a branch must be created" / "a PR must be
598
+ opened" / "a GitHub setting must change" / "CI must be re-run" / "the merge
599
+ base needs updating" / "there are conflicts" / "tests fail"** — every one is
600
+ remediation work the invocation authorised (ADR-237 § 1). Do it.
601
+ - **"a paid service is needed"** — authorised up to a cumulative USD 25 per run
602
+ (§ Spend in the wrapper). Uncertainty about the exact cost is explicitly NOT a
603
+ reason to ask.
604
+ - **"a maintainer should do this"** when the agent can perform the same action
605
+ through git, `gh`, an API or a CLI. **Capability before role**: the role of the
606
+ person who conventionally does a thing is not a property of the thing.
577
607
 
578
608
  If the work genuinely cannot continue, it will be because one of the five real
579
- halt conditions fired, or because the runnable set is empty by the § 3c test —
580
- surface THAT, with the blockers named, not a manufactured caution.
609
+ halt conditions fired, or because every remaining step is externally impossible
610
+ by the § 3c test — surface THAT, with the specific impossibility named, not a
611
+ manufactured caution and not a convention mistaken for a constraint.
581
612
 
582
613
  ### Non-halt — gating notes, "optional" tags
583
614
 
@@ -93,6 +93,8 @@ one shape the loop test above systematically misses, in both of its clauses.
93
93
  available were wait, or stop and report, and 34 licensed neither more than 31
94
94
  did. **The discriminator is the decision, not the digits.**
95
95
 
96
+ For CI, do not hand-write the loop: `ci_settle <pr>` (mechanics below).
97
+
96
98
  So state it separately: pick **one** waiter for the condition and let it finish.
97
99
  Where the harness re-invokes on completion, waiting costs nothing and polling
98
100
  costs a turn per expiry — and every stacked waiter is a turn that arrives *after*
@@ -129,6 +129,9 @@ precedent-creates-no-authority clause: [`adr-layout § Reopen authority`](../doc
129
129
 
130
130
  ## See also
131
131
 
132
+ - [`recurring-criticism`](recurring-criticism.md) — the **other entrance**: this
133
+ 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.
132
135
  - [`decision-review`](../skills/decision-review/SKILL.md) — the backward-audit
133
136
  procedure + the migrated gate mechanics.
134
137
  - [`ai-council`](../skills/ai-council/SKILL.md) — the re-evaluation mechanism;
@@ -0,0 +1,108 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2a"
4
+ alwaysApply: false
5
+ description: "Saw a red check or a real defect — fix it, whoever wrote it; if you cannot, ship a tracked follow-up roadmap in the same change. Ownership is never a disposition"
6
+ # Due when a defect is OBSERVED, not on a clock: a turn that sees nothing owes
7
+ # nothing; a turn that sees a red check owes a disposition.
8
+ obligation_frequency: "per-event"
9
+ routes_to:
10
+ - "guideline:agent-infra/active-remediation-mechanics"
11
+ triggers:
12
+ - keyword: "failing"
13
+ - keyword: "fails"
14
+ - keyword: "broken"
15
+ - keyword: "regression"
16
+ - phrase: "is red"
17
+ - phrase: "ci failed"
18
+ - phrase: "ci is"
19
+ - phrase: "not my"
20
+ - phrase: "nicht mein"
21
+ - phrase: "someone else's"
22
+ - phrase: "whose test"
23
+ workspaces: [engineering]
24
+ packs: [engineering-base]
25
+ enforced_by:
26
+ - "none"
27
+ ---
28
+
29
+ # Fix What You See
30
+
31
+ ## The Iron Law
32
+
33
+ ```
34
+ YOU SAW IT, YOU FIX IT — WHOEVER WROTE IT.
35
+ "NOT MY CODE" / "NOT MY TEST" / "ANOTHER SESSION OWNS THAT FILE" IS NOT A
36
+ DISPOSITION. CANNOT FIX IT NOW → A TRACKED FOLLOW-UP ROADMAP SHIPS IN THE
37
+ SAME CHANGE. A CHAT MENTION IS NOT ONE EITHER, NOR A "KNOWN-OPEN" LINE IN A
38
+ PR BODY. A RED CHECK IS NEVER HANDED BACK WITH ITS CAUSE NAMED AND UNFIXED.
39
+ ```
40
+
41
+ **Saw it** = a red check already in front of you (test, lint, type, CI), or a
42
+ defect you pass while working — in your diff, a neighbouring file, a file
43
+ another agent or a parallel session wrote. The author is irrelevant.
44
+
45
+ **Two dispositions, and only two:** fix it with its verification, or land a
46
+ roadmap under `agents/roadmaps/` in the SAME change naming the defect, its
47
+ evidence, and what closes it.
48
+
49
+ **Read the red before fixing it, with the narrowest tool.** A CI job:
50
+ `gh run view --job <id> --log-failed | grep -E '×|FAIL|Error'` — never the whole
51
+ log into context, and never `--watch`'s exit code, which is 0 even on a failure.
52
+ A local red: the test runner with a filter on the one failing name, `tsc
53
+ --noEmit` for a type error, the linter scoped to the changed files. **Reproduce
54
+ it before you believe your diagnosis** — an environment-dependent red reproduces
55
+ under the condition, not on your machine's defaults.
56
+
57
+ Match the probe to the surface, because a passing unit test is not evidence for
58
+ a broken surface: an HTTP red is proven with `curl` against the running
59
+ endpoint, a UI red with a Playwright spec, a runtime red with the debugger
60
+ (`xdebug`, breakpoints) rather than by reading the diff again.
61
+
62
+ **Prove the fix with the same tool that showed the red**, in the same change.
63
+ For a guard or a concurrency fix, prove SENSITIVITY too: neutralise the mechanism,
64
+ watch the test fail, restore it. A test never seen red has unknown sensitivity.
65
+
66
+ ## Bounds
67
+
68
+ Removes *ownership* as an excuse, not the diff limit:
69
+ [`minimal-safe-diff`](minimal-safe-diff.md) still caps the change — too large
70
+ IS the roadmap case. A fix crossing
71
+ [`non-destructive-by-default`](non-destructive-by-default.md) still stops and
72
+ asks; the ask becomes the work, not the exit.
73
+
74
+ **Does NOT fire:** user fenced the scope this turn · no falsifiable break (a
75
+ preference, not a red) · already decided by the user.
76
+
77
+ ## Why separate from `active-remediation`
78
+
79
+ That rule forbids ignoring a spotted issue and its ladder permits **note + ask**.
80
+ Two properties made it insufficient, both measured 2026-08-20: it is `type: auto`
81
+ on `refactor`/`legacy`/`cleanup` triggers — **none of which a failing CI job
82
+ matches**, so it does not load when the obligation matters most — and its
83
+ note-and-ask tier is what let a session name a red check's cause, name the
84
+ file's author, and hand it back still red.
85
+
86
+ Mechanics (fix-now size criteria, follow-up shape) stay there; this rule only
87
+ deletes the two escapes.
88
+
89
+ ## Honest activation gap — this rule is `auto`, and it wanted to be `always`
90
+
91
+ It shipped `auto` for a budget reason, not a design one, and the gap that leaves
92
+ is exactly the one it was written to close: **a red check the agent sees in tool
93
+ output triggers nothing.** Keyword triggers match the PROMPT. So the rule loads
94
+ when a human says "CI is red" or "not my test", and does NOT load when a test
95
+ run comes back red and nobody has said a word.
96
+
97
+ `check_always_budget` is the reason: the extended always-budget sat at
98
+ 60,252 / 60,254 chars — **two characters of headroom** — and the cap is a
99
+ ratchet that may only move down. The other nine always-rules are the kernel,
100
+ which `block_kernel_rule_writes` denies agent writes to, so no room can be made
101
+ from this side. A 2,332-char rule puts the total at 103.9 %.
102
+
103
+ Closing the gap needs one of: the ext-cap ratchet opened deliberately (a
104
+ maintainer decision, recorded), a kernel rule shortened to make room, or a
105
+ `post_tool_use` carrier that notices a non-zero verification exit — the only
106
+ option that would fire on tool output rather than on wording. Until then, `auto`
107
+ plus this paragraph is the honest state: the obligation is real, its delivery is
108
+ partial, and the partiality is named rather than implied away.
@@ -3,11 +3,6 @@ type: "auto"
3
3
  tier: "mechanical-already"
4
4
  description: "Linking transient files (agents/roadmaps/, agents/runtime/council/) from stable artifacts — both expire; promote findings"
5
5
  alwaysApply: false
6
- triggers:
7
- - path_prefix: "agents/roadmaps/"
8
- - path_prefix: "agents/runtime/council/questions/"
9
- - path_prefix: "agents/runtime/council/responses/"
10
- - path_prefix: "agents/runtime/council/sessions/"
11
6
  routes_to:
12
7
  - "skill:ai-council"
13
8
  - "skill:agent-docs-writing"
@@ -0,0 +1,110 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2b"
4
+ description: "The same criticism arriving again indicts the system, not only the item — reopen the disposition that dismissed it, resolve on evidence, never on the repetition count"
5
+ alwaysApply: false
6
+ triggers:
7
+ - phrase: "schon mehrfach"
8
+ - phrase: "schon wieder"
9
+ - phrase: "zum dritten mal"
10
+ - phrase: "wie oft noch"
11
+ - phrase: "wie oft soll ich"
12
+ - phrase: "immer noch nicht"
13
+ - phrase: "i already told you"
14
+ - phrase: "told you this"
15
+ - phrase: "how many times"
16
+ - phrase: "as i mentioned before"
17
+ routes_to:
18
+ - "guideline:agent-infra/recurring-criticism-mechanics"
19
+ - "skill:skill-improvement-pipeline"
20
+ workspaces: [agent-config-maintainer, engineering]
21
+ packs: [meta]
22
+ collision_ok:
23
+ "schon wieder": "active-remediation makes a user 'leave it' terminal against the AGENT re-raising a closed item; this rule fires only when the USER brings it back — a decision-maker reopening their own decision is not the nagging that rule prevents"
24
+ obligation_frequency: "per-task"
25
+ ---
26
+
27
+ # Recurring Criticism
28
+
29
+ [`decision-revisit-gate`](decision-revisit-gate.md) has one entrance: the agent
30
+ wants to act and a lock is in the way. This is the other — **the same criticism
31
+ arrives again**, from the user or from a re-arrived artifact.
32
+
33
+ ## The Iron Law
34
+
35
+ ```
36
+ THE SAME CRITICISM ARRIVING AGAIN IS EVIDENCE ABOUT THE SYSTEM,
37
+ NOT ONLY ABOUT THE ITEM.
38
+ REOPEN THE DISPOSITION THAT DISMISSED IT. NAME WHICH ASSUMPTION BROKE.
39
+ NEVER RESOLVE IT ON THE REPETITION COUNT — RESOLVE IT ON EVIDENCE.
40
+ CAPITULATING BECAUSE IT WAS SAID TWICE IS THE SAME FAILURE
41
+ AS DISMISSING IT TWICE.
42
+ A LEARNING THAT DOES NOT CONSTRAIN THE NEXT RUN IS NOT A LEARNING.
43
+ NEVER BUY A HARDENING BY WEAKENING A SAFETY FLOOR.
44
+ ```
45
+
46
+ **The repetition reverses the burden of proof.** The standing rule is: same
47
+ mechanism, no new evidence → the lock applies. Recurrence *is* the new evidence —
48
+ not that the item is right, that the disposition did not hold. Whoever keeps the
49
+ lock now carries the argument. **Mechanism-match still runs first**: a complaint
50
+ resembling the old one but testing a different mechanism is a new finding.
51
+
52
+ **Resolve on evidence, never on the count.** Challenging a model's answer —
53
+ including a correct one — reliably makes it capitulate and revise toward the
54
+ perceived expectation rather than toward truth
55
+ <!-- harvest:reflection-sycophancy-flipflop -->, so a rule reading "said twice" as
56
+ proof of error would be that failure mode with a procedure attached. The
57
+ repetition opens the question; it never answers it.
58
+
59
+ ## Exactly three outcomes
60
+
61
+ The repetition proves the **system** failed <!-- harvest:recurrence-indicts-the-system -->;
62
+ it does not prove the **decision** was wrong. Own analysis, from that split:
63
+
64
+ | Outcome | What actually broke | Hardening means |
65
+ |---|---|---|
66
+ | The disposition was **wrong** | the decision | reverse it, record what would have caught it |
67
+ | **Right, never recorded** | the record | make it durable + citable, with `revisit-if` |
68
+ | **Right, recorded, unreachable** | reachability | move it onto a surface the next run reads |
69
+
70
+ In all three the system failed — only in the first was the decision wrong. A
71
+ resolution naming none of them is an unresolved recurrence.
72
+
73
+ **Look up the earlier disposition before re-deriving anything, and name the store
74
+ you checked** — addresses, the mechanism-is-the-defect classification, the
75
+ hardening floor and the failure modes are in
76
+ [`recurring-criticism-mechanics`](../docs/guidelines/agent-infra/recurring-criticism-mechanics.md).
77
+ One line does not migrate, because acting on it wrong is silent: rejections live in
78
+ analysis prose by design, so "I found nothing" means *prose was grepped*, never
79
+ *nothing was decided*.
80
+
81
+ ## When NOT to fire
82
+
83
+ - **A repeated task instruction**, not a criticism — that is an instruction, do it.
84
+ - **Mechanism-match fails** — a resemblance is not a recurrence.
85
+ - **The agent is the one repeating** — that is [`no-cheap-questions`](no-cheap-questions.md).
86
+ - **Already resolved this task.** Once decided, it is decided.
87
+
88
+ ## Honest enforcement — `enforced_by: none`
89
+
90
+ One narrow deterministic signal exists. `src/scripts/_lib/self_repair.ts` keeps one
91
+ record per defect fingerprint with an `occurrences` counter and reopens a released
92
+ record when the user re-reports it — literally this rule's trigger state — and the
93
+ injected queue line now carries that number, so above 1 an agent sees it. Three
94
+ limits: `agents/runtime/` is gitignored, so the store is one machine's and empty on
95
+ a fresh checkout; it covers only defects the complaint detector matched, where a
96
+ phrasing outside the added patterns is a paraphrase away from silence; and it is
97
+ hook-carried, so on a host without the slot nothing fires.
98
+
99
+ The rest is model-carried, named rather than implied: **nothing** observes whether
100
+ the earlier disposition was opened, for rejections there is nothing structured to
101
+ open, and no gate can tell a resolution that named one of the three outcomes from
102
+ one that asserted it. Claiming the counter as coverage for any of that would
103
+ inflate it, so it is not claimed — skipping this rule is caught by nothing.
104
+
105
+ ## See also
106
+
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
+ - [`self-repair-loop`](self-repair-loop.md) — the single-occurrence intake; this rule is what its `occurrences` counter is for.
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.
@@ -29,7 +29,7 @@ ANY ROADMAP TOUCH → REGENERATE THE DASHBOARD, SAME RESPONSE.
29
29
  NO EXCEPTIONS. NO "I'LL DO IT AT THE END". NO BATCHING ACROSS TURNS.
30
30
  ```
31
31
 
32
- Roadmap touch = create / rename / delete / move file, add/rename/remove a phase, OR flip any checkbox (`[ ]` ↔ `[x]` ↔ `[~]` ↔ `[-]`). Regen command: `./agent-config roadmap:progress`. Archive (`git mv` → `archive/`) the moment `count_open == 0` — same response.
32
+ Roadmap touch = create / rename / delete / move file, add/rename/remove a phase, OR flip any checkbox (`[ ]` ↔ `[x]` ↔ `[~]` ↔ `[-]`). Regen command: `./agent-config roadmap:progress` — it passes `--archive`, so a roadmap at `count_open == 0` with no deferred item and no open blocker is `git mv`'d to `archive/` by the same run, not reported for someone to do later. `--check` never archives, and the PostToolUse hook never archives (contract + the council's recorded dissent: the `--archive` block in `update_roadmap_progress.ts`).
33
33
 
34
34
  ## Iron Law 2 — real-time checkbox cadence (autonomous execution)
35
35
 
@@ -2,8 +2,6 @@
2
2
  type: "auto"
3
3
  tier: "2a"
4
4
  description: "Creating/editing rules, or auditing rule types — decides when a rule should be always vs auto"
5
- triggers:
6
- - path_prefix: "src/rules/"
7
5
  routes_to:
8
6
  - "guideline:agent-infra/rule-type-governance"
9
7
  workspaces: [agent-config-maintainer]
@@ -52,6 +52,16 @@ work, not a notification:
52
52
  the user's call, per
53
53
  [`non-destructive-by-default`](non-destructive-by-default.md).
54
54
 
55
+ **When the line says the record has recurred, step 2 changes target.** The store
56
+ keeps one record per fingerprint and increments it, so a repeat does not raise
57
+ `count` — the line now carries the newest record's `occurrences` instead, and
58
+ above 1 it is the only deterministic "this came back" signal in the session. A
59
+ recurrence means the *earlier* fix or dismissal did not hold, so the surface that
60
+ failed is the one that let it be closed prematurely, not only the one that let the
61
+ behaviour happen. Resolve it through
62
+ [`recurring-criticism`](recurring-criticism.md) — which also states the part that
63
+ matters most here: resolve on evidence, never on the repetition count.
64
+
55
65
  ## Correct openly, never silently
56
66
 
57
67
  Reported by the user → redo the task properly in the same turn, visibly, saying
@@ -84,6 +94,13 @@ The user is criticising the **code**, not the agent's conduct; the fingerprint
84
94
  is already an open record (the hook increments it); or a one-off caused by
85
95
  information the agent could not have had — note it, do not queue it.
86
96
 
97
+ **The already-an-open-record case suppresses a duplicate QUEUE ENTRY, never the
98
+ response.** Read on its own the clause above inverts into "it came back, so do
99
+ nothing new", which is the opposite of what a repeat means. The counter exists
100
+ precisely so a recurrence is visible without a second entry: no new record, and a
101
+ **stronger** obligation — [`recurring-criticism`](recurring-criticism.md) fires,
102
+ because the earlier disposition demonstrably did not hold.
103
+
87
104
  ## Enforcement
88
105
 
89
106
  The hook is `fail_closed: false` and always exits 0: it records, it never
@@ -2,8 +2,6 @@
2
2
  type: "auto"
3
3
  tier: "mechanical-already"
4
4
  description: "Creating/editing/reviewing skills — minimum quality standard; every skill executable, validated, self-contained"
5
- triggers:
6
- - path_prefix: "src/skills/"
7
5
  routes_to:
8
6
  - "guideline:agent-infra/skill-quality-checklist"
9
7
  workspaces: [agent-config-maintainer]