@event4u/agent-config 7.0.2 → 7.2.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 (140) hide show
  1. package/.claude-plugin/marketplace.json +9 -1
  2. package/CHANGELOG.md +117 -0
  3. package/README.md +4 -2
  4. package/dist/agent-src/commands/council/default.md +28 -20
  5. package/dist/agent-src/commands/evals/fix.json +5 -1
  6. package/dist/agent-src/commands/fix/comments.md +101 -0
  7. package/dist/agent-src/commands/fix.md +5 -2
  8. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +65 -0
  9. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +68 -0
  10. package/dist/agent-src/contexts/execution/host-capability-manifest.md +68 -0
  11. package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +62 -0
  12. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +59 -0
  13. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +8 -3
  14. package/dist/agent-src/contexts/execution/subagent-response-contract.md +56 -0
  15. package/dist/agent-src/contexts/execution/subagent-routing.md +57 -0
  16. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +54 -0
  17. package/dist/agent-src/contexts/execution/subagent-steering.md +71 -0
  18. package/dist/agent-src/contexts/execution/verify-budget.md +50 -0
  19. package/dist/agent-src/rules/brand-source-of-truth.md +10 -0
  20. package/dist/agent-src/rules/delegation-policy.md +85 -0
  21. package/dist/agent-src/rules/design-fidelity.md +98 -0
  22. package/dist/agent-src/rules/domain-safety-pii.md +22 -0
  23. package/dist/agent-src/rules/legal-safety-floor.md +182 -0
  24. package/dist/agent-src/rules/lethal-trifecta-guard.md +25 -22
  25. package/dist/agent-src/rules/output-discipline.md +85 -0
  26. package/dist/agent-src/rules/telegraph-speak.md +4 -1
  27. package/dist/agent-src/rules/token-budget-discipline.md +94 -0
  28. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +102 -15
  29. package/dist/agent-src/scripts/update_roadmap_progress.ts +30 -3
  30. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +20 -5
  31. package/dist/agent-src/skills/ai-council/SKILL.md +28 -1
  32. package/dist/agent-src/skills/blade-ui/SKILL.md +9 -0
  33. package/dist/agent-src/skills/contract-review/SKILL.md +125 -0
  34. package/dist/agent-src/skills/contract-review/evals/triggers.json +17 -0
  35. package/dist/agent-src/skills/dashboard-design/SKILL.md +21 -5
  36. package/dist/agent-src/skills/design-intelligence/SKILL.md +96 -0
  37. package/dist/agent-src/skills/design-review/SKILL.md +83 -0
  38. package/dist/agent-src/skills/design-system-capture/SKILL.md +234 -0
  39. package/dist/agent-src/skills/design-tokens/SKILL.md +1 -0
  40. package/dist/agent-src/skills/dpa-review/SKILL.md +130 -0
  41. package/dist/agent-src/skills/dpa-review/evals/triggers.json +17 -0
  42. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +15 -4
  43. package/dist/agent-src/skills/fe-design/SKILL.md +98 -16
  44. package/dist/agent-src/skills/flux/SKILL.md +8 -0
  45. package/dist/agent-src/skills/iconography/SKILL.md +1 -0
  46. package/dist/agent-src/skills/laravel/SKILL.md +1 -0
  47. package/dist/agent-src/skills/legal-intake-triage/SKILL.md +128 -0
  48. package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +17 -0
  49. package/dist/agent-src/skills/legal-practice-profile/SKILL.md +101 -0
  50. package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +17 -0
  51. package/dist/agent-src/skills/livewire/SKILL.md +8 -0
  52. package/dist/agent-src/skills/nda-triage/SKILL.md +114 -0
  53. package/dist/agent-src/skills/nda-triage/evals/triggers.json +17 -0
  54. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +21 -9
  55. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +3 -1
  56. package/dist/agent-src/skills/recursive-verification/SKILL.md +186 -0
  57. package/dist/agent-src/skills/roadmap-management/SKILL.md +17 -0
  58. package/dist/agent-src/skills/skill-writing/SKILL.md +18 -0
  59. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +11 -0
  60. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +17 -7
  61. package/dist/agent-src/skills/typography-system/SKILL.md +14 -0
  62. package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -0
  63. package/dist/agent-src/templates/agent-settings.md +64 -19
  64. package/dist/discovery/deprecation-report.md +1 -1
  65. package/dist/discovery/discovery-manifest.json +362 -43
  66. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  67. package/dist/discovery/discovery-manifest.summary.md +13 -5
  68. package/dist/discovery/orphan-report.md +1 -1
  69. package/dist/discovery/packs.json +56 -11
  70. package/dist/discovery/trust-report.md +7 -5
  71. package/dist/discovery/workspaces.json +38 -7
  72. package/dist/mcp/registry-manifest.json +3 -3
  73. package/dist/router.json +1 -1
  74. package/dist/server/routes/wizard.js +4 -3
  75. package/dist/server/routes/wizard.js.map +1 -1
  76. package/dist/server/schemas/settings.js +23 -0
  77. package/dist/server/schemas/settings.js.map +1 -1
  78. package/dist/ui/assets/{index-CoQo90sz.js → index-UjcTG_9O.js} +2 -2
  79. package/dist/ui/assets/index-UjcTG_9O.js.map +1 -0
  80. package/dist/ui/index.html +1 -1
  81. package/docs/RELEASE_STORY_TEMPLATE.md +37 -0
  82. package/docs/architecture.md +4 -4
  83. package/docs/benchmark.md +46 -0
  84. package/docs/catalog.md +18 -6
  85. package/docs/command-flows.md +7 -1
  86. package/docs/contracts/ai-council-config.md +17 -10
  87. package/docs/contracts/audit-log-v1.md +7 -0
  88. package/docs/contracts/auto-orchestration-v1.md +70 -0
  89. package/docs/contracts/capability-boundary.md +64 -0
  90. package/docs/contracts/command-clusters.md +1 -1
  91. package/docs/contracts/discovery-manifest.schema.json +2 -2
  92. package/docs/contracts/package-self-orientation.md +3 -0
  93. package/docs/contracts/subagent-boundary.md +54 -0
  94. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +32 -0
  95. package/docs/decisions/ADR-020-global-only-consumer-scope.md +13 -6
  96. package/docs/decisions/ADR-049-configuration-trust-boundary.md +11 -1
  97. package/docs/decisions/ADR-093-ai-council-config-user-global.md +10 -4
  98. package/docs/decisions/ADR-104-ai-council-config-global-only.md +119 -0
  99. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +102 -0
  100. package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +126 -0
  101. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +70 -0
  102. package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +46 -0
  103. package/docs/decisions/INDEX.md +5 -0
  104. package/docs/getting-started.md +2 -2
  105. package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
  106. package/docs/guidelines/agent-infra/domain-pack-architecture.md +56 -0
  107. package/docs/guidelines/design-antipatterns-triggers.json +17 -0
  108. package/docs/guidelines/design-antipatterns.md +170 -0
  109. package/docs/guidelines/design-modes.md +97 -0
  110. package/package.json +1 -1
  111. package/src/config/agent-settings.template.yml +103 -3
  112. package/src/config/discovery/packs.yml +24 -0
  113. package/src/config/discovery/workspaces.yml +7 -0
  114. package/src/scripts/_lib/auto_dispatch.ts +95 -0
  115. package/src/scripts/_lib/host_capability.ts +59 -0
  116. package/src/scripts/_lib/orchestration_gate.ts +98 -0
  117. package/src/scripts/_lib/subagent_bundle.ts +154 -0
  118. package/src/scripts/_lib/subagent_response.ts +82 -0
  119. package/src/scripts/_lib/subagent_routing.ts +81 -0
  120. package/src/scripts/_lib/subagent_spawn.ts +97 -0
  121. package/src/scripts/_lib/subagent_steering.ts +64 -0
  122. package/src/scripts/_lib/verify_budget.ts +54 -0
  123. package/src/scripts/ai_council/advisors.ts +4 -2
  124. package/src/scripts/ai_council/clients.ts +7 -1
  125. package/src/scripts/ai_council/config.ts +22 -17
  126. package/src/scripts/bench_ab_v2_run.ts +127 -0
  127. package/src/scripts/bench_ab_v2_stats.ts +39 -0
  128. package/src/scripts/check_council_config_location.ts +6 -5
  129. package/src/scripts/check_trunk_drift.ts +67 -0
  130. package/src/scripts/lint_design_quality.ts +321 -0
  131. package/src/scripts/lint_discovery_vocabulary.ts +6 -0
  132. package/src/scripts/lint_framework_leakage_allowlist.json +21 -0
  133. package/src/scripts/lint_legal_pack.ts +197 -0
  134. package/src/scripts/lint_output_slop.ts +223 -0
  135. package/src/scripts/lint_pack_risk_class.ts +79 -0
  136. package/src/scripts/probe_projection_fidelity.ts +7 -1
  137. package/src/scripts/schemas/agent-settings.schema.json +23 -0
  138. package/src/scripts/schemas/skill.schema.json +5 -0
  139. package/src/scripts/skill_linter.ts +3 -0
  140. package/dist/ui/assets/index-CoQo90sz.js.map +0 -1
@@ -34,9 +34,15 @@ wraps `npx shadcn@latest add <components>` — **the only subprocess+network
34
34
  surface in the adopted suite**. Per `runtime-safety` + the `execution`
35
35
  block above:
36
36
 
37
- 1. **Propose, never silent-run** — show exact `npx` command + component list first (`--dry-run`); user confirms before live run.
38
- 2. **Missing tool** → per `missing-tool-handling`: `npx`/Node absent → STOP and ask (install vs manual copy) — never silently work around.
39
- 3. **Verify after run** — `components/ui/<name>.tsx` exists, `components.json` unchanged or sanely updated, before reporting success.
37
+ 1. **Propose, never silent-run** — always show the exact `npx` command +
38
+ component list first (use `--dry-run`); the user confirms before any
39
+ live run.
40
+ 2. **Missing tool** → per `missing-tool-handling`: if `npx`/Node is
41
+ absent, STOP and ask (install vs. manual component copy) — never
42
+ silently work around.
43
+ 3. **Verify after run** — confirm the component landed
44
+ (`components/ui/<name>.tsx` exists, `components.json` unchanged or
45
+ sanely updated) before reporting success.
40
46
 
41
47
  ## Compatibility
42
48
 
@@ -82,13 +88,19 @@ Do NOT use when:
82
88
  the generated primitives but is easy to remove during a refactor.
83
89
  - **Anti-AI-slop: shadcn-default look.** The out-of-the-box shadcn
84
90
  theme + `Inter`-as-system-fallback + neutral grays reads as
85
- template across projects. Unless `state.ui_audit.design_tokens`
86
- pins the neutral palette as the project's identity, the polish
87
- step should match typography and color tokens to the design
88
- brief's `aesthetic:` line (from `fe-design` aesthetic-direction).
89
- Theme/font drift within a single audited project breaks
90
- consistency — variation lives between projects, not between
91
+ template across projects (catalog T7/T8 + C5). Unless
92
+ `state.ui_audit.design_tokens` pins the neutral palette as the
93
+ project's identity, the polish step should match typography and color
94
+ tokens to the design brief's `aesthetic:` line (from `fe-design`
95
+ aesthetic-direction). Theme/font drift within a single audited project
96
+ breaks consistency — variation lives between projects, not between
91
97
  components in the same surface.
98
+ - **Anti-AI-slop catalog + linter.** Pull
99
+ [`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
100
+ before the polish step (Visual V1–V7, Layout L1–L8 are the React-component
101
+ slop tells); the objective quality floors (WCAG contrast, focus-visible,
102
+ reduced-motion) are CI-enforced by
103
+ [`lint_design_quality`](../../../src/scripts/lint_design_quality.ts).
92
104
 
93
105
  ## Covered primitives
94
106
 
@@ -78,7 +78,9 @@ Each link **delegates** to the artifact that owns it (no duplication):
78
78
  the response ([`notes-first-reasoning`](../../rules/notes-first-reasoning.md)).
79
79
  4. **gather** — resolve the load-bearing unknown first
80
80
  ([`complexity-first-planning`](../complexity-first-planning/SKILL.md)); dispatch
81
- independent subtasks async ([`subagent-orchestration` § RDP](../subagent-orchestration/SKILL.md)).
81
+ independent subtasks async ([`subagent-orchestration` § RDP](../subagent-orchestration/SKILL.md)),
82
+ settings-gated per [`auto-orchestration-activation`](../../contexts/execution/auto-orchestration-activation.md)
83
+ (`subagents.enabled`/`auto` + host manifest).
82
84
  5. **audit** — check progress against real tool results
83
85
  ([`verify-before-complete`](../../rules/verify-before-complete.md)).
84
86
  6. **verify** — fresh-context verifier on the structural-complexity gate
@@ -0,0 +1,186 @@
1
+ ---
2
+ model_tier: inherit
3
+ name: recursive-verification
4
+ description: "Use to run a depth-bounded self-correction loop (attempt → critic verdict → re-attempt) as a tunable test-time compute knob — a do-and-judge specialisation, default off, capability-gated."
5
+ domain: process
6
+ workspaces:
7
+ - agent-config-maintainer
8
+ packs:
9
+ - meta
10
+ ---
11
+
12
+ # recursive-verification
13
+
14
+ ## When to use
15
+
16
+ * A first attempt at a bounded task may be improvable by feeding the
17
+ attempt plus an explicit critic verdict back into a corrective
18
+ re-attempt — and the extra compute is justified by the task's value.
19
+ * You want **depth** (number of correction rounds) to be an explicit
20
+ compute knob, not an open-ended loop.
21
+ * The shipped default (`verification.recursive`) is not `off` for the
22
+ active host, or the user asks for an extra self-correction pass.
23
+
24
+ Do NOT use when:
25
+
26
+ * The task is trivial — a one-liner, a rename, a format fix. The loop's
27
+ cost dwarfs any gain (the package's A/B bench measured ~11× tokens for
28
+ a single wrapper pass; recursion multiplies that per depth level).
29
+ * The host already one-shots the task. On a strong host with no headroom
30
+ a second pass only adds cost (see `docs/benchmark.md`: strong-host
31
+ discipline lift is null).
32
+ * You are chasing **model intelligence**. This transfers a test-time
33
+ *compute* pattern, not capability — it cannot make a model smarter than
34
+ its weights, and it implies **no** comparison to any frontier model.
35
+ * Budget is the constraint, or `verification.recursive: off` for this host.
36
+
37
+ ## Goal
38
+
39
+ Land a verified result by running a depth-bounded
40
+ `attempt → critic verdict → conditional re-attempt` loop, with depth as
41
+ the only compute knob, every level budgeted, and the loop default-off
42
+ until a benchmark gate authorises it per host.
43
+
44
+ ## The Iron Law
45
+
46
+ ```
47
+ A CROSS-MODEL CRITIC NEVER RUNS ON THE SAME MODEL + CONTEXT AS THE ATTEMPT.
48
+ SAME-MODEL SELF-CRITIQUE IS A DISCIPLINE PASS ONLY — NEVER A CAPABILITY CLAIM.
49
+ ```
50
+
51
+ Inherited from [`subagent-orchestration`](../subagent-orchestration/SKILL.md):
52
+ same model + same context = same blind spots. A same-model self-critique
53
+ at depth 1 is allowed **only** when explicitly flagged as a *discipline*
54
+ (not capability) pass — it can catch a skipped step or a scope-creep, but
55
+ it shares the attempt's blind spots and must never be sold as a capability
56
+ lift. Cross-model recursion (a different vendor as critic) is the
57
+ cross-vendor variant and obeys the Iron Law by construction
58
+ (critic model ≠ attempt model).
59
+
60
+ ## The loop
61
+
62
+ ```
63
+ attempt₀
64
+ → critic verdict (accept | revise: <reason>)
65
+ → accept → done
66
+ → revise → attempt₁ (reads attempt₀ + the verdict as context)
67
+ → critic verdict
68
+ → … → depthₙ
69
+ ```
70
+
71
+ Each level reads **only** the prior attempt plus the critic's verdict —
72
+ never the full history — mirroring the read-your-own-output-and-decide
73
+ pattern. Depth `n` is the tunable compute knob, hard-capped by
74
+ `verification.max_depth`.
75
+
76
+ ## Deterministic stop conditions
77
+
78
+ The loop stops at the first of:
79
+
80
+ 1. **`accept`** — the critic accepts the attempt.
81
+ 2. **`max_depth` reached** — `verification.max_depth` (default `1`).
82
+ 3. **`verify-budget` exhausted** — each re-attempt is one budgeted unit
83
+ per [`verify-budget`](../../contexts/execution/verify-budget.md); a
84
+ required-but-unrun verification is a surfaced safety gap, never a
85
+ silent pass.
86
+ 4. **No-progress floor** — two consecutive attempts score identical on
87
+ the deterministic scorer; further depth cannot help, so stop.
88
+
89
+ Stop conditions are deterministic so the loop can never run unbounded —
90
+ there is no open-ended "keep trying" branch.
91
+
92
+ ## Settings
93
+
94
+ Configured in `.agent-settings.yml`; documented in
95
+ [`agent-settings`](../../templates/agent-settings.md):
96
+
97
+ | Key | Default | Effect |
98
+ |---|---|---|
99
+ | `verification.recursive` | `off` | `off` = inert; `ask` = ask once before looping; `on` = loop silently up to `max_depth`. |
100
+ | `verification.max_depth` | `1` | Hard cap on correction rounds. `1` = a single critic pass (effectively inert beyond one review) until a benchmark gate authorises more. |
101
+
102
+ Ships `off`. The per-host shipped default flips only on a passing
103
+ capability-axis benchmark cell (see Procedure step 4); an honest-null
104
+ keeps it `off`.
105
+
106
+ ## Procedure
107
+
108
+ ### 1. Gate on settings + task shape
109
+
110
+ Resolve `verification.recursive` for the active host. `off` → no-op.
111
+ Confirm the task is non-trivial (above the `verify-budget` change-size
112
+ floor) and that the host plausibly has headroom — skip otherwise.
113
+
114
+ ### 2. Resolve the critic
115
+
116
+ Read `.agent-settings.yml` (`subagents.judge_model`). A cross-model
117
+ critic must satisfy the Iron Law. A same-model depth-1 pass is allowed
118
+ only when explicitly flagged as a discipline pass; surface that framing.
119
+
120
+ ### 3. Run the loop
121
+
122
+ Run `attempt → verdict → conditional re-attempt`, counting each
123
+ re-attempt against `verify-budget`, until a deterministic stop condition
124
+ fires. Under `verification.recursive: on` surface depth + spend in one
125
+ line; under `ask`, ask once before the first re-attempt.
126
+
127
+ ### 4. Honour the benchmark gate
128
+
129
+ The shipped default is set by the `bench:ab` gate
130
+ ([`orchestration-benchmark-gate`](../../contexts/execution/orchestration-benchmark-gate.md),
131
+ `gateVerdict` / `resolveShippedDefault`): `on`/`ask` only on a host whose
132
+ **capability-axis** cell passed; `off` otherwise. A discipline-only lift
133
+ does not authorise a flip — that question is already answered by the
134
+ existing rules. Never flip a default without its own passing cell.
135
+
136
+ ### 5. Report
137
+
138
+ Follow the output format. Never present a recursion result as a
139
+ capability gain or a frontier-model comparison.
140
+
141
+ ## Gotcha
142
+
143
+ * **Recursion as discipline duplicate** — if the only lift is on the
144
+ discipline axis, recursion duplicates rules the package already ships,
145
+ at multiplied cost. Surface it; do not ship a redundant expensive loop.
146
+ * **Unbounded loop** — there is no open-ended branch; the four stop
147
+ conditions are deterministic and the depth cap is hard.
148
+ * **Same-model self-praise** — a same-model critic shares the attempt's
149
+ blind spots and tends to accept; treat depth-1 same-model passes as a
150
+ discipline check only, never as independent verification.
151
+ * **Cost surprise** — depth multiplies the per-pass token cost; confirm
152
+ budget before raising `max_depth` above 1.
153
+ * **Strong-host no-op** — on a host that one-shots the task, every extra
154
+ depth level is pure cost; the benchmark gate keeps the default `off`
155
+ there.
156
+
157
+ ## Output format
158
+
159
+ 1. **Depth reached** — the number of correction rounds run, and which
160
+ stop condition fired (`accept` / `max_depth` / `budget` / `no-progress`).
161
+ 2. **Critic pairing** — attempt model / critic model (resolved), and
162
+ whether it was a cross-model or same-model discipline pass.
163
+ 3. **Verdict** — accepted attempt vs. handed back, with the budget spent.
164
+ 4. **Evidence** — per-depth scorer/verdict trail, never framed as a
165
+ capability or frontier-model comparison.
166
+
167
+ ## Do NOT
168
+
169
+ * NEVER claim recursion makes the host model more capable or "closer to"
170
+ any frontier model — it is a test-time compute pattern, not intelligence.
171
+ * NEVER run an open-ended loop — `max_depth` and the stop conditions are
172
+ hard caps.
173
+ * NEVER treat a same-model self-critique as independent verification.
174
+ * NEVER flip the shipped default without a passing capability-axis gate
175
+ cell for that host.
176
+ * NEVER skip a required verification silently — surface it as a safety gap.
177
+
178
+ ## Handover
179
+
180
+ | Task | Skill / context |
181
+ |---|---|
182
+ | Mode selection, the judge Iron Law | [`subagent-orchestration`](../subagent-orchestration/SKILL.md) |
183
+ | Per-pass cost budgeting | [`verify-budget`](../../contexts/execution/verify-budget.md) |
184
+ | Shipped-default gate mechanism | [`orchestration-benchmark-gate`](../../contexts/execution/orchestration-benchmark-gate.md) |
185
+ | Cross-vendor critic (different vendor) | [`ai-council`](../ai-council/SKILL.md) |
186
+ | Completion evidence | [`verify-completion-evidence`](../verify-completion-evidence/SKILL.md) |
@@ -43,6 +43,23 @@ rule. Batching multiple edits in one response is fine — one final
43
43
  regeneration before replying is enough. But the response must not end
44
44
  without it.
45
45
 
46
+ ### Archival — preferred sweep, untracked-safe manual fallback
47
+
48
+ Robust path: `archive_completed_roadmaps --all` — detects complete
49
+ (`count_open == 0`, `count_deferred == 0`), moves to `agents/roadmaps/archive/`
50
+ (`git mv` tracked, plain `mv` untracked / no-commit), rewrites inbound refs,
51
+ regens dashboard. PR-independent.
52
+
53
+ **Manual fallback (script not vendored)** — same response, never leave a
54
+ 100 %-complete roadmap active because `git mv` failed:
55
+
56
+ 1. `mkdir -p agents/roadmaps/archive`.
57
+ 2. `git mv agents/roadmaps/<x>.md agents/roadmaps/archive/<x>.md` (tracked); plain
58
+ `mv` if untracked / no commits.
59
+ 3. Rewrite inbound `agents/roadmaps/<x>.md` → `agents/roadmaps/archive/<x>.md`
60
+ across the tree (working tree, not just index, when untracked).
61
+ 4. Regenerate `agents/roadmaps-progress.md`.
62
+
46
63
  ## Procedure: Manage a roadmap
47
64
 
48
65
  1. **Identify need** — Is this a multi-step change that spans sessions or agents?
@@ -121,6 +121,24 @@ Then run the Understand → Research → Draft sequence from the
121
121
  rule. Skip only on explicit *"just do it"* bypass or trivial edits
122
122
  (typo, link, single-line clarification).
123
123
 
124
+ ### 0b. Skill-growth gate (new skill only)
125
+
126
+ The skill count keeps climbing; nothing forces *"should this be a new skill at
127
+ all?"*. Before creating a **new** skill, answer these in the PR body — a new
128
+ skill that cannot answer them is a merge / guideline / no-op in disguise:
129
+
130
+ 1. **Family** — which capability family does it join? (engineering, product, …)
131
+ 2. **Capability** — what does it do that no existing skill does? Name the gap.
132
+ 3. **Why not extend / merge** — which nearest skill did you consider folding into, and why is a separate skill better?
133
+ 4. **Why not a guideline** — is this executable workflow (skill) or reference material (guideline)? Guideline-shaped content does not become a skill.
134
+ 5. **Visibility tier** — `core` or `lab`? Which pack?
135
+
136
+ **Surface overlap before deciding** — run `./scripts-run src/scripts/skill_overlap`
137
+ (or `audit_skill_overlap`) and read the nearest matches; a high-overlap hit is a
138
+ merge signal, not a green light. This gate is the authoring-time companion to the
139
+ [capability-boundary matrix](../../../docs/contracts/capability-boundary.md): the
140
+ matrix governs packs, this governs the skills inside them.
141
+
124
142
  ### 1. Define the trigger
125
143
 
126
144
  Write "When to use" first. This is the in-body trigger — it documents the
@@ -56,6 +56,16 @@ parallel subagents **by default** and keep working while they run (async), rathe
56
56
  than blocking on each return — intervene only if one goes off track. Engage per
57
57
  [`rdp-gate`](../../contexts/execution/rdp-gate.md).
58
58
 
59
+ ### Settings-gated auto-dispatch
60
+
61
+ "By default" is governed by the [`delegation-policy`](../../rules/delegation-policy.md)
62
+ rule — the single source of the auto-trigger. It gates on the activation context
63
+ ([`auto-orchestration-activation`](../../contexts/execution/auto-orchestration-activation.md)):
64
+ dispatch only when `subagents.enabled`, `subagents.auto != off`, the host
65
+ manifest reports `subagent_spawn: true`, and the task is classified delegable.
66
+ `auto: ask` → ask once; `auto: on` → surface mode + per-subtask tiers in one
67
+ line; any gate failing → in-session no-op. Never lifts a safety floor.
68
+
59
69
  ## The seven modes
60
70
 
61
71
  Each mode has a decision row: when to use, when not, and the expected
@@ -354,3 +364,4 @@ the judge verdict.
354
364
  | Standalone judge on an existing diff | [`/judge`](../../commands/judge.md) |
355
365
  | External / networked second opinion | [`ai-council`](../ai-council/SKILL.md) |
356
366
  | Verifying completeness | [`verify-before-complete`](../verify-before-complete/SKILL.md) |
367
+ | What a subagent owns vs never owns | [`subagent-boundary`](../../../docs/contracts/subagent-boundary.md) |
@@ -51,11 +51,13 @@ radius, spacing, shadow, font-size to a configured token. If the design hands yo
51
51
  (`bg-[#3B82F6]`, `mt-[17px]`) are a smell — accept only with a
52
52
  one-line comment naming the design source.
53
53
 
54
- Token authoring (DTCG 3-layer, CSS-var/Tailwind generation):
55
- [`design-tokens`](../design-tokens/SKILL.md); its `tokens.py validate
56
- --dir <path>` is the **single token-discipline linter** behind this rule.
57
- Greenfield config: bundled `scripts/tailwind_config_gen.py`
58
- (Apache-2.0-derived, pure templating) scaffolds `tailwind.config.{js,ts}`.
54
+ Token authoring (DTCG 3-layer model, CSS-var/Tailwind generation) lives
55
+ in [`design-tokens`](../design-tokens/SKILL.md); its
56
+ `tokens.py validate --dir <path>` is the **single token-discipline
57
+ linter** — the mechanical check behind this rule (no hardcoded hex / px /
58
+ rem outside the token files). Greenfield Tailwind config: bundled
59
+ `scripts/tailwind_config_gen.py` (Apache-2.0-derived, pure templating)
60
+ scaffolds `tailwind.config.{js,ts}` per framework.
59
61
 
60
62
  ### 2. Compose, don't inline
61
63
 
@@ -127,10 +129,18 @@ Risks: <arbitrary values, !important, dark-mode gaps>
127
129
  break the design system; they accumulate silently.
128
130
  - `@apply` inside component CSS interacts with PurgeCSS — keep it
129
131
  in files Tailwind scans, not in vendor CSS.
132
+ - **Anti-AI-slop catalog.** The bullets below are the Tailwind-specific
133
+ manifestations of the stack-agnostic patterns in
134
+ [`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
135
+ (C1 gradients, T7 fonts, L1/L2 layout, V1 side-stripe). Pull the catalog
136
+ for the full list; the objective subset (contrast, font-size floor,
137
+ reduced-motion) is CI-enforced by
138
+ [`lint_design_quality`](../../../src/scripts/lint_design_quality.ts) for
139
+ consumer projects.
130
140
  - **Anti-AI-slop: gradients.** Unless audit-pinned or brief-explicit,
131
141
  avoid the default purple-to-blue / cyan-to-pink gradients on white —
132
- they read as auto-generated. Reach for a single accent from the
133
- token map, or a duotone built from configured tokens.
142
+ they read as auto-generated (catalog C1/C2). Reach for a single accent
143
+ from the token map, or a duotone built from configured tokens.
134
144
  - **Anti-AI-slop: typography.** Unless audit-pinned, avoid surfacing
135
145
  the system stack (`font-sans` fallback to Arial / Helvetica / Inter
136
146
  via system defaults) as the *visible* body face. If `tailwind.config`
@@ -8,6 +8,7 @@ workspaces:
8
8
  - engineering
9
9
  packs:
10
10
  - frontend-design
11
+ token_budget_class: rich
11
12
  trust:
12
13
  level: professional
13
14
  install:
@@ -136,3 +137,16 @@ brand already registers fonts, use them and skip the filter.
136
137
  consumes the token system produced here.
137
138
  - [`brand`](../brand/SKILL.md) — supplies the archetype → pairing-filter
138
139
  Grounding (`typography` domain) consumed by stage 2.
140
+
141
+ ## Why this skill is rich
142
+
143
+ Typography is one of the highest-leverage design decisions and one of the
144
+ most commonly mis-applied by AI agents (defaulting to Inter + arbitrary sizes).
145
+ The skill carries 73 curated font pairings (heading + body + mono combinations
146
+ with Google Fonts URLs and Tailwind config), 6 worked-through modular-scale
147
+ examples across different use-cases (marketing, dashboard, docs, e-commerce,
148
+ SaaS, editorial), and per-pairing line-height + weight guidance. Condensing
149
+ to "use a 1.25 modular scale" loses the worked examples that teach agents
150
+ the difference between a 14/17.5/21.8/27.2 rounded scale and an invented
151
+ arbitrary scale. Without the worked examples, agents produce: 16, 20, 24, 28
152
+ (arbitrary) instead of a properly grounded typographic system.
@@ -144,6 +144,15 @@ Anti-cases: <combinations the component refuses to support>
144
144
  every render, the child re-renders too. Stabilize via
145
145
  `useCallback` or hoist.
146
146
 
147
+ ## Cross-task design memory
148
+
149
+ Before proposing a component, check the project root for `DESIGN.md`
150
+ (written by `design-system-capture`). If present, apply its captured
151
+ visual conventions (radius/shadow/motion/spacing) to the new component
152
+ rather than deriving them from scratch. Flag any new design decision
153
+ (e.g., a first-use of a new elevation tier) for capture:
154
+ *"Suggest adding to DESIGN.md: [decision]."*
155
+
147
156
  ## Do NOT
148
157
 
149
158
  - Do NOT design a component without running
@@ -59,6 +59,20 @@ made by the user directly or by the agent on request, following the
59
59
  # custom = ignore profile — every matrix value must be set explicitly.
60
60
  rule_loading_tier: balanced
61
61
 
62
+ # --- Per-skill model auto-switch (ADR-035) ---
63
+ # Skills declare a vendor-neutral `model_tier` (lite|medium|high); the generator
64
+ # maps it to a native Claude model (high→opus, medium→sonnet, lite→haiku).
65
+ # suggest = (default) never emit a native Claude `model:` key; the
66
+ # model-recommendation rule names the tier as a one-question
67
+ # suggestion on every surface. Your explicit /model choice is
68
+ # never silently overridden.
69
+ # auto = render a native Claude `model:` into lite/medium/high-tier skills
70
+ # so Claude Code switches automatically for that turn (reverts on
71
+ # the next prompt); suggest on surfaces without a native override.
72
+ # off = inert — no native key, no suggestion.
73
+ model:
74
+ auto_switch: suggest
75
+
62
76
  # --- Personal preferences ---
63
77
  personal:
64
78
  # IDE to use for opening files (code, phpstorm, cursor)
@@ -209,14 +223,20 @@ pipelines:
209
223
  # response — that cadence is governed by `roadmap-progress-sync` and
210
224
  # is non-negotiable. This setting only governs *quality tool runs*.
211
225
  roadmap:
212
- # Skip the /roadmap:process-* pre-run confirmation gate (true, false).
213
- # true = default. Command name names the scope; a discoverable single
214
- # active roadmap (or a named one) starts the loop immediately,
215
- # resolved config surfaced inline so a wrong pick can still be
216
- # aborted mid-stream.
217
- # false = legacy. Shows the pre-run summary with numbered options and
218
- # waits. Gate is still shown regardless when the roadmap is
219
- # ambiguous or a scope / cadence conflict has no default.
226
+ # Skip the pre-run confirmation gate when /roadmap:process-step|phase|full
227
+ # is invoked (true, false).
228
+ # true = default. The command name itself names the scope; if a
229
+ # single active roadmap is discoverable (or the user named
230
+ # one), the loop starts immediately. The resolved roadmap /
231
+ # cadence / council setting are surfaced inline as a one-shot
232
+ # note so an unwanted pick can still be aborted mid-stream.
233
+ # false = legacy. The loop shows the pre-run summary with numbered
234
+ # options (Go / Different roadmap / Different scope / Toggle
235
+ # council / Abort) and waits for input.
236
+ # The gate is still shown — regardless of this flag — when the roadmap
237
+ # is ambiguous (multiple active, none named) or a scope / cadence
238
+ # conflict has no sensible default. The flag suppresses the
239
+ # confirmation, never a genuine "which roadmap?" question.
220
240
  skip_pre_run_gate: true
221
241
 
222
242
  # When to run quality tools during /roadmap:process-step|phase|full.
@@ -257,6 +277,23 @@ subagents:
257
277
  # Set to 1 to serialize. Hard cap enforced by runtime.
258
278
  max_parallel: 3
259
279
 
280
+ # --- Recursive self-verification (see skills/recursive-verification) ---
281
+ verification:
282
+ # off | ask | on (default: off)
283
+ # Depth-bounded self-correction loop (attempt -> critic verdict ->
284
+ # conditional re-attempt) as a tunable test-time compute knob.
285
+ # off = inert; ask = ask once before looping; on = loop up to max_depth.
286
+ # The shipped per-host default flips off -> on/ask ONLY on a passing
287
+ # capability-axis bench:ab gate cell (orchestration-benchmark-gate);
288
+ # a discipline-only or honest-null result keeps it off.
289
+ recursive: off
290
+
291
+ # Hard cap on correction rounds (integer, default 1).
292
+ # 1 = a single critic pass (effectively inert beyond one review) until
293
+ # a benchmark gate authorises deeper recursion. Each level is one
294
+ # verify-budget unit; the loop also stops on accept / no-progress.
295
+ max_depth: 1
296
+
260
297
  # --- Git worktrees ---
261
298
  worktrees:
262
299
  # off | on | ask (default: ask)
@@ -432,18 +469,26 @@ telemetry:
432
469
  path: .agent-engagement.jsonl
433
470
 
434
471
  # --- Linked projects (cross-repo awareness, local-only) ---
435
- # IDE-attached sibling repos in scope for proactive cross-repo awareness.
436
- # BELONGS IN `.agent-settings.local.yml` (in agents/settings/) (per-machine, gitignored) — sibling
437
- # paths differ per developer, never commit them. Each entry: path (absolute,
438
- # auto-filled by detection) + include (true = in scope, false = declined,
439
- # never re-prompted). Detection skips bloat dirs; a sibling over max_files is
440
- # flagged `large` (awareness only), never excluded. See ADR-032 +
441
- # docs/guides/cross-repo-linked-projects.md. Agent never bulk-includes sibling
442
- # files — passive awareness only.
472
+ #
473
+ # Sibling repositories the IDE has attached to this project (PhpStorm
474
+ # .idea/modules.xml + vcs.xml, VS Code *.code-workspace). When a sibling is
475
+ # opted in, the agent proactively considers cross-repo impact (API contract /
476
+ # shared-type changes) and warns — it does NOT bulk-include the sibling's
477
+ # files. See docs/guides/cross-repo-linked-projects.md and ADR-032.
478
+ #
479
+ # THIS KEY BELONGS IN `.agent-settings.local.yml` (in agents/settings/) (the per-machine, gitignored
480
+ # override layer), NOT in the committed `.agent-settings.yml`: sibling paths
481
+ # differ per developer and must never be committed. Each entry:
482
+ # - path: absolute path to the sibling repo root (auto-filled by detection)
483
+ # - include: true = in scope (proactive awareness); false = declined, never
484
+ # re-prompted.
485
+ # Detection auto-skips bloat dirs (node_modules/.git/dist/build/.venv/target);
486
+ # a sibling over `max_files` is flagged `large` (awareness only), never excluded.
443
487
  linked_projects: []
444
488
  # - path: /abs/path/to/sibling-repo
445
489
  # include: true
446
- linked_projects_max_files: 20000 # ceiling for the `large` flag; never excludes
490
+ # Optional ceiling for the `large` flag (does not exclude). Default 20000.
491
+ linked_projects_max_files: 20000
447
492
  ```
448
493
 
449
494
  ## Settings Reference
@@ -468,7 +513,7 @@ the canonical narrative lives in
468
513
  | `personal.minimal_output` | `true`, `false` | `true` | When `true`: short bullet points during work, concise summary at end. When `false`: verbose explanations. |
469
514
  | `personal.play_by_play` | `true`, `false` | `false` | When `true`: share intermediate findings during investigation. When `false`: work silently, report only the conclusion. |
470
515
  | `personal.pr_comment_bot_icon` | `true`, `false` | `false` | Prefix PR comment replies with 🤖 to indicate bot-authored replies. Personal preference — each developer decides. |
471
- | `personal.autonomy` | `on`, `off`, `auto` | `auto` | Suppress trivial workflow questions and act on the obvious next step. `auto` defaults to `off` but flips to `on` after a prose opt-in like "arbeite selbstständig". `on` suppresses trivial questions unconditionally. Blocking decisions (security, scope expansion, push/merge/branch/PR/tag) are never suppressed. See `rules/autonomous-execution.md`. |
516
+ | `personal.autonomy` | `on`, `off`, `auto` | `auto` | Suppress trivial workflow questions and act on the obvious next step. `auto` (default) defaults to `off` but flips to `on` after a prose opt-in like "arbeite selbstständig". `on` suppresses trivial questions unconditionally. `off` is the legacy ask-everything mode. Blocking decisions (security, scope expansion, push/merge/branch/PR/tag) are never suppressed. See `rules/autonomous-execution.md`. |
472
517
  | `project.pr_template` | file path | `.github/pull_request_template.md` | Path to PR template file. Read this instead of searching for it. |
473
518
  | `project.upstream_repo` | `org/repo` | _(empty)_ | Target repository for universal improvement PRs (e.g., `org/agent-config`). |
474
519
  | `project.improvement_pr_branch_prefix` | string | `improve/agent-` | Branch prefix for agent improvement PRs. |
@@ -487,7 +532,7 @@ the canonical narrative lives in
487
532
  | `hooks.chat_history.enabled` | `true`, `false` | `true` | Register the chat-history hooks (`append` on `after_step`, `halt_append` on `on_halt`). Gated by **both** this flag AND `chat_history.enabled`; either off → no chat-history hook registers. Schema v4: every entry self-identifies via a 16-char session fingerprint, no ownership/sidecar layer. |
488
533
  | `hooks.chat_history.script` | path | `scripts/chat_history.py` | Override path to the chat-history CLI. Set only when the script lives outside the standard location. |
489
534
  | `pipelines.skill_improvement` | `true`, `false` | `true` | When `true`: propose learning capture after meaningful tasks. When `false`: silent. Included in every profile except `custom`. |
490
- | `roadmap.skip_pre_run_gate` | `true`, `false` | `true` | When `true` (default): `/roadmap:process-step\|phase\|full` skips the interactive pre-run summary and starts immediately — resolved roadmap / cadence / council surfaced inline so an unwanted pick can still be aborted. When `false`: shows the pre-run summary with numbered options and waits. Gate is always shown — regardless of this flag — when the roadmap is ambiguous (multiple active, none named) or a scope / cadence conflict has no default. |
535
+ | `roadmap.skip_pre_run_gate` | `true`, `false` | `true` | When `true` (default): `/roadmap:process-step\|phase\|full` skips the interactive pre-run summary and starts the loop immediately — the resolved roadmap, cadence, and council are surfaced inline so an unwanted pick can still be aborted. When `false`: the loop shows the pre-run summary with numbered options (Go / Different roadmap / Different scope / Toggle council / Abort) and waits. The gate is always shown — regardless of this flag — when the roadmap is ambiguous (multiple active, none named) or a scope / cadence conflict has no sensible default. |
491
536
  | `roadmap.quality_cadence` | `end_of_roadmap`, `per_phase`, `per_step` | `end_of_roadmap` | When `/roadmap:process-step|phase|full` runs the project's quality pipeline. Default skips per-step / per-phase runs and gates only the final archival. `per_phase` runs once after every phase; `per_step` is the legacy verbose mode. Step checkboxes and the dashboard are always updated regardless. `verify-before-complete` still requires fresh output before any "roadmap complete" claim. |
492
537
  | `quality.local_auto_run` | `true`, `false` | `true` | When `true`: agent runs the project's quality pipeline (`task ci`, `make test`, `npm run check`, PHPStan, ECS, Rector, test suites) autonomously when work is ready for verification. When `false`: agent asks before running locally. **Carve-out**: NEW CI gates / smoke tests / test files MUST run locally regardless of this flag — without execution the new gate is unverified evidence. Iron Law `verify-before-complete` still applies; suppressed runs require the agent to surface the gap before claiming completion. |
493
538
  | `quality.wait_for_remote_ci` | `true`, `false` | `false` | When `true`: after `git push`, the agent polls GitHub check-runs / pipeline status on the PR and reports green / red before handing back. When `false`: agent pushes and hands back immediately; the user inspects CI themselves (default — saves agent runtime and tokens). |
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-06-22T07:13:57Z`
3
+ - Generated: `2026-06-24T20:56:10Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._