@event4u/agent-config 8.9.0 → 8.11.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 (267) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +189 -0
  3. package/README.md +5 -5
  4. package/dist/agent-src/commands/challenge-me/vision.md +121 -32
  5. package/dist/agent-src/commands/challenge-me/with-docs.md +21 -8
  6. package/dist/agent-src/commands/commit/in-chunks.md +1 -1
  7. package/dist/agent-src/commands/commit.md +2 -1
  8. package/dist/agent-src/commands/cost/report.md +14 -3
  9. package/dist/agent-src/commands/feature/dev.md +4 -4
  10. package/dist/agent-src/commands/humanize.md +101 -0
  11. package/dist/agent-src/commands/jira-ticket.md +2 -2
  12. package/dist/agent-src/commands/memory/load.md +15 -0
  13. package/dist/agent-src/commands/optimize/project.md +12 -0
  14. package/dist/agent-src/commands/roadmap/create.md +12 -11
  15. package/dist/agent-src/commands/tests/create.md +29 -7
  16. package/dist/agent-src/commands/work.md +33 -0
  17. package/dist/agent-src/commands/worktree/cleanup.md +83 -0
  18. package/dist/agent-src/commands/worktree/create.md +64 -0
  19. package/dist/agent-src/commands/worktree/status.md +75 -0
  20. package/dist/agent-src/commands/worktree/verify.md +70 -0
  21. package/dist/agent-src/commands/worktree.md +85 -0
  22. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +66 -0
  23. package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +1 -0
  24. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +91 -34
  25. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +14 -0
  26. package/dist/agent-src/contexts/execution/roadmap-writing-source-derived.md +65 -0
  27. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +84 -0
  28. package/dist/agent-src/rules/autonomous-execution.md +7 -37
  29. package/dist/agent-src/rules/broken-access-control.md +7 -45
  30. package/dist/agent-src/rules/code-comment-discipline.md +148 -0
  31. package/dist/agent-src/rules/context-hygiene.md +14 -0
  32. package/dist/agent-src/rules/delegation-policy.md +10 -8
  33. package/dist/agent-src/rules/design-fidelity.md +44 -0
  34. package/dist/agent-src/rules/git-history-discipline.md +4 -79
  35. package/dist/agent-src/rules/legal-safety-floor.md +11 -55
  36. package/dist/agent-src/rules/roadmap-progress-sync.md +5 -56
  37. package/dist/agent-src/rules/spreadsheet-source-quality.md +61 -0
  38. package/dist/agent-src/rules/think-before-action.md +10 -0
  39. package/dist/agent-src/rules/verify-before-complete.md +12 -0
  40. package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +15 -0
  41. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +13 -12
  42. package/dist/agent-src/skills/ai-council/SKILL.md +19 -9
  43. package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +13 -0
  44. package/dist/agent-src/skills/api-design/SKILL.md +7 -5
  45. package/dist/agent-src/skills/api-testing/SKILL.md +16 -2
  46. package/dist/agent-src/skills/authz-review/SKILL.md +59 -2
  47. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  48. package/dist/agent-src/skills/bug-analyzer/SKILL.md +19 -16
  49. package/dist/agent-src/skills/character-consistency/evals/evals.json +16 -0
  50. package/dist/agent-src/skills/code-refactoring/SKILL.md +9 -9
  51. package/dist/agent-src/skills/command-routing/evals/evals.json +14 -0
  52. package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -0
  53. package/dist/agent-src/skills/dashboard-design/evals/evals.json +16 -0
  54. package/dist/agent-src/skills/data-flow-mapper/SKILL.md +1 -1
  55. package/dist/agent-src/skills/dcf-modeling/evals/evals.json +20 -0
  56. package/dist/agent-src/skills/decision-record/evals/evals.json +20 -0
  57. package/dist/agent-src/skills/defense-in-depth/SKILL.md +2 -2
  58. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +7 -7
  59. package/dist/agent-src/skills/design-intelligence/SKILL.md +8 -8
  60. package/dist/agent-src/skills/design-intelligence/evals/evals.json +14 -0
  61. package/dist/agent-src/skills/design-review/SKILL.md +29 -2
  62. package/dist/agent-src/skills/design-system-capture/SKILL.md +21 -0
  63. package/dist/agent-src/skills/design-system-capture/evals/evals.json +15 -0
  64. package/dist/agent-src/skills/developer-like-execution/evals/evals.json +16 -0
  65. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +29 -0
  66. package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +16 -0
  67. package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -0
  68. package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +16 -0
  69. package/dist/agent-src/skills/editorial-calendar/evals/evals.json +16 -0
  70. package/dist/agent-src/skills/estimate-ticket/evals/evals.json +16 -0
  71. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +30 -0
  72. package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +47 -0
  73. package/dist/agent-src/skills/fe-design/SKILL.md +43 -14
  74. package/dist/agent-src/skills/fe-design/evals/triggers.json +47 -0
  75. package/dist/agent-src/skills/forecasting/evals/evals.json +20 -0
  76. package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +16 -0
  77. package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +16 -0
  78. package/dist/agent-src/skills/git-workflow/SKILL.md +86 -0
  79. package/dist/agent-src/skills/html-deck/SKILL.md +27 -0
  80. package/dist/agent-src/skills/humanizer/SKILL.md +147 -0
  81. package/dist/agent-src/skills/humanizer/data/patterns.md +190 -0
  82. package/dist/agent-src/skills/humanizer/evals/triggers.json +17 -0
  83. package/dist/agent-src/skills/iconography/SKILL.md +24 -0
  84. package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +16 -0
  85. package/dist/agent-src/skills/incident-commander/evals/evals.json +20 -0
  86. package/dist/agent-src/skills/laravel/SKILL.md +14 -1
  87. package/dist/agent-src/skills/launch-readiness/SKILL.md +20 -19
  88. package/dist/agent-src/skills/launch-readiness/evals/evals.json +21 -0
  89. package/dist/agent-src/skills/legal-practice-profile/SKILL.md +126 -0
  90. package/dist/agent-src/skills/logging-monitoring/SKILL.md +1 -1
  91. package/dist/agent-src/skills/logging-monitoring/evals/evals.json +16 -0
  92. package/dist/agent-src/skills/mcp/SKILL.md +1 -1
  93. package/dist/agent-src/skills/memory-consolidation/SKILL.md +14 -1
  94. package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +16 -0
  95. package/dist/agent-src/skills/messaging-architecture/evals/evals.json +16 -0
  96. package/dist/agent-src/skills/migration-architect/SKILL.md +2 -1
  97. package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +16 -0
  98. package/dist/agent-src/skills/performance/SKILL.md +1 -1
  99. package/dist/agent-src/skills/pest-testing/SKILL.md +1 -1
  100. package/dist/agent-src/skills/php-debugging/SKILL.md +17 -0
  101. package/dist/agent-src/skills/playwright-testing/SKILL.md +16 -0
  102. package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +16 -0
  103. package/dist/agent-src/skills/readme-writing/SKILL.md +2 -0
  104. package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -0
  105. package/dist/agent-src/skills/refine-prompt/evals/evals.json +16 -0
  106. package/dist/agent-src/skills/refine-ticket/evals/evals.json +16 -0
  107. package/dist/agent-src/skills/release-comms/SKILL.md +2 -0
  108. package/dist/agent-src/skills/release-comms/evals/evals.json +16 -0
  109. package/dist/agent-src/skills/rice-prioritization/evals/evals.json +20 -0
  110. package/dist/agent-src/skills/roadmap-writing/SKILL.md +22 -51
  111. package/dist/agent-src/skills/runway-cognition/evals/evals.json +20 -0
  112. package/dist/agent-src/skills/scenario-modeling/evals/evals.json +20 -0
  113. package/dist/agent-src/skills/security-audit/SKILL.md +6 -9
  114. package/dist/agent-src/skills/sentry-integration/SKILL.md +2 -2
  115. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +8 -0
  116. package/dist/agent-src/skills/source-discovery/SKILL.md +26 -24
  117. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +98 -0
  118. package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +47 -0
  119. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +55 -46
  120. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +42 -0
  121. package/dist/agent-src/skills/systematic-debugging/SKILL.md +10 -0
  122. package/dist/agent-src/skills/systematic-debugging/evals/evals.json +20 -0
  123. package/dist/agent-src/skills/test-case-discovery/SKILL.md +118 -0
  124. package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +52 -0
  125. package/dist/agent-src/skills/test-driven-development/SKILL.md +32 -6
  126. package/dist/agent-src/skills/test-driven-development/evals/evals.json +16 -0
  127. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +7 -6
  128. package/dist/agent-src/skills/threat-modeling/evals/evals.json +21 -0
  129. package/dist/agent-src/skills/typography-system/evals/evals.json +14 -0
  130. package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +24 -0
  131. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +10 -0
  132. package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +16 -0
  133. package/dist/agent-src/skills/vision-articulation/evals/evals.json +16 -0
  134. package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +16 -0
  135. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +187 -0
  136. package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +38 -0
  137. package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +52 -0
  138. package/dist/agent-src/templates/agent-settings.md +3 -2
  139. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +15 -1
  140. package/dist/agent-src/templates/roadmaps.md +14 -0
  141. package/dist/cli/commands/recordTriggerEval.js +4 -14
  142. package/dist/cli/commands/recordTriggerEval.js.map +1 -1
  143. package/dist/discovery/deprecation-report.md +1 -1
  144. package/dist/discovery/discovery-manifest.json +374 -88
  145. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  146. package/dist/discovery/discovery-manifest.summary.md +9 -9
  147. package/dist/discovery/orphan-report.md +1 -1
  148. package/dist/discovery/packs.json +30 -18
  149. package/dist/discovery/trust-report.md +5 -5
  150. package/dist/discovery/workspaces.json +31 -15
  151. package/dist/install/install.mjs +12 -7
  152. package/dist/mcp/registry-manifest.json +4 -4
  153. package/dist/router.json +1 -1
  154. package/dist/scripts/_lib/claude_settings_hooks.js +8 -0
  155. package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -1
  156. package/dist/scripts/_lib/trigger_eval_floors.js +24 -0
  157. package/dist/scripts/_lib/trigger_eval_floors.js.map +1 -0
  158. package/dist/scripts/condense.js +12 -2
  159. package/dist/scripts/condense.js.map +1 -1
  160. package/dist/server/schemas/settings.js +5 -2
  161. package/dist/server/schemas/settings.js.map +1 -1
  162. package/docs/CLAIMS.md +24 -3
  163. package/docs/architecture.md +3 -3
  164. package/docs/benchmark.md +51 -0
  165. package/docs/catalog.md +23 -9
  166. package/docs/command-flows.md +7 -1
  167. package/docs/contracts/CHANGELOG-conventions.md +6 -0
  168. package/docs/contracts/ai-council-config.md +92 -0
  169. package/docs/contracts/command-clusters.md +1 -0
  170. package/docs/contracts/design-artifact-lifecycle.md +93 -0
  171. package/docs/contracts/design-artifact-verification.md +30 -1
  172. package/docs/contracts/evidence-based-pruning.md +1 -0
  173. package/docs/contracts/hook-architecture-v1.md +25 -0
  174. package/docs/contracts/kernel-membership.md +35 -0
  175. package/docs/contracts/measurement-baseline.md +1 -0
  176. package/docs/contracts/release-pr-gating.md +26 -0
  177. package/docs/contracts/release-sizing.md +107 -0
  178. package/docs/contracts/surface-agent-contracts.md +153 -0
  179. package/docs/contracts/write-engine.md +38 -1
  180. package/docs/customization.md +12 -0
  181. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -0
  182. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +11 -0
  183. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +1 -1
  184. package/docs/decisions/ADR-028-root-layout.md +1 -1
  185. package/docs/decisions/ADR-038-canonical-settings-path.md +10 -0
  186. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +29 -5
  187. package/docs/decisions/ADR-093-ai-council-config-user-global.md +1 -1
  188. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +7 -0
  189. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +2 -2
  190. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +1 -1
  191. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +11 -0
  192. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +1 -1
  193. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +11 -1
  194. package/docs/decisions/ADR-117-subagents-auto-default-on.md +2 -1
  195. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +162 -0
  196. package/docs/decisions/ADR-119-global-knowledge-default-on.md +104 -0
  197. package/docs/decisions/ADR-200-python-to-typescript-migration.md +11 -1
  198. package/docs/decisions/ADR-rule-kernel-and-router.md +11 -0
  199. package/docs/decisions/INDEX.md +11 -9
  200. package/docs/design/cross-model-parity-eval.md +82 -0
  201. package/docs/design/length-neutral-judge-rerun.md +92 -0
  202. package/docs/distribution/consumer-matrix.md +96 -0
  203. package/docs/featured-skills.md +2 -2
  204. package/docs/getting-started-by-role.md +1 -1
  205. package/docs/getting-started.md +2 -2
  206. package/docs/governance-advantage.md +1 -1
  207. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +80 -5
  208. package/docs/guidelines/code-clarity.md +106 -1
  209. package/docs/guidelines/design-antipatterns.md +20 -0
  210. package/docs/guidelines/php/php-coding-patterns.md +12 -2
  211. package/docs/proof.md +21 -15
  212. package/docs/release-runbook.md +3 -0
  213. package/docs/self-review-gate.md +51 -0
  214. package/docs/wedge/production-validator/production-validator.md +27 -0
  215. package/package.json +1 -1
  216. package/src/config/agent-settings.template.yml +29 -9
  217. package/src/scripts/_cli/cmd_doctor.ts +34 -1
  218. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +87 -0
  219. package/src/scripts/_lib/claude_settings_hooks.ts +8 -0
  220. package/src/scripts/_lib/knowledge_global.ts +6 -2
  221. package/src/scripts/_lib/knowledge_global_redaction.ts +42 -4
  222. package/src/scripts/_lib/lexical_index.ts +15 -2
  223. package/src/scripts/_lib/orchestration_record.ts +27 -0
  224. package/src/scripts/_lib/orchestration_savings.ts +52 -0
  225. package/src/scripts/_lib/trigger_eval_floors.ts +31 -0
  226. package/src/scripts/ai_council/chairman.ts +90 -0
  227. package/src/scripts/ai_council/clients.ts +18 -3
  228. package/src/scripts/ai_council/config.ts +157 -0
  229. package/src/scripts/ai_council/debate_gates.ts +89 -0
  230. package/src/scripts/ai_council/orchestrator.ts +65 -2
  231. package/src/scripts/ai_council/prompts.ts +121 -11
  232. package/src/scripts/ai_council/replay.ts +17 -0
  233. package/src/scripts/ai_council/stance_tally.ts +184 -0
  234. package/src/scripts/ai_tells_rules.ts +433 -0
  235. package/src/scripts/bench_humanizer_eval.ts +240 -0
  236. package/src/scripts/build_discovery_manifest.ts +6 -0
  237. package/src/scripts/build_proof.ts +21 -9
  238. package/src/scripts/check_claims.ts +40 -0
  239. package/src/scripts/check_release_adjacent_health.ts +121 -0
  240. package/src/scripts/check_rule_invariants.ts +282 -0
  241. package/src/scripts/condense.ts +16 -2
  242. package/src/scripts/consumer_matrix.ts +392 -0
  243. package/src/scripts/council_cli.ts +147 -0
  244. package/src/scripts/detect_ai_tells.ts +312 -0
  245. package/src/scripts/generate_index.ts +3 -2
  246. package/src/scripts/install.ts +12 -0
  247. package/src/scripts/knowledge_global_cli.ts +1 -1
  248. package/src/scripts/lint_changelog_rollback.ts +293 -0
  249. package/src/scripts/lint_framework_leakage.ts +88 -7
  250. package/src/scripts/lint_framework_leakage_allowlist.json +59 -572
  251. package/src/scripts/lint_knowledge_scale.ts +30 -0
  252. package/src/scripts/lint_originality_shingles.ts +210 -0
  253. package/src/scripts/orchestration_record.ts +17 -0
  254. package/src/scripts/orchestration_savings_report.ts +36 -3
  255. package/src/scripts/schemas/agent-settings.schema.json +11 -0
  256. package/src/scripts/second_brain_retrieval.ts +44 -2
  257. package/src/scripts/self_review_gate.test.ts +65 -0
  258. package/src/scripts/self_review_gate.ts +298 -0
  259. package/src/scripts/skill_eval_coverage.ts +71 -3
  260. package/src/scripts/skill_linter.ts +1 -0
  261. package/src/scripts/trigger_eval_grandfather.json +223 -224
  262. package/src/scripts/trigger_eval_rotation.ts +344 -0
  263. package/src/scripts/update_counts.ts +5 -17
  264. package/src/scripts/worktree_cleanup_check.ts +263 -0
  265. package/src/server/schemas/settings.ts +8 -3
  266. package/src/scripts/analysis_freshness.ts +0 -362
  267. package/src/scripts/export_replay_corpus.ts +0 -208
package/docs/benchmark.md CHANGED
@@ -112,6 +112,22 @@
112
112
  Residual of the full package over `rules-kernel-dc`: Δ=+0.083, Wilcoxon p=0.37
113
113
  (only 2 discordant pairs) — **not significant**.
114
114
 
115
+ ### `full` discipline-tier disposition (council 2026-07-10)
116
+
117
+ The `full` tier (~11.7×) stays **experimental, opt-in only, never surfaced as a
118
+ recommendation**. Council (claude-sonnet-4-5 + gpt-4o, 2-round debate,
119
+ 2026-07-10) converged on **keep-and-relabel over drop**: round 1 favoured
120
+ dropping `full`, but the rebuttal round reversed it — `p=0.37` is *absence of
121
+ evidence*, not *evidence of absence* (an underpowered n=24 compounded by an
122
+ `essential` ceiling effect), and removing an enum value is an **irreversible
123
+ breaking change** for anyone pinning the tier string. An experimental opt-in
124
+ does not violate "measured, not asserted"; an unlabeled *recommendation* would.
125
+ **Revisit-if (drop only when):** a high-powered Claude sweep (n≥100,
126
+ ceiling-adjusted) shows `p>0.20 AND effect <5%` **and** an open-source-host
127
+ adapter sweep returns a null — i.e. `full` is shown *actively* useless, not
128
+ merely unproven. Until then the experimental label stands everywhere `full` is
129
+ documented.
130
+
115
131
  Three findings:
116
132
 
117
133
  1. **~95% of the lift survives at ~3× cost.** The kernel + `downstream-changes`
@@ -213,6 +229,41 @@ strong = ceiling null · GPT weak = failed replication (confounded surface).
213
229
 
214
230
  - Report: `internal/bench/reports/ab-v2/2026-07-07T10-33-53Z-ab-v2-paired.json`.
215
231
 
232
+ ## Two-host matrix (flow-learnings Phase 3, `claude-haiku-4-5`) — Gate verdict: **HONEST-NULL**
233
+
234
+ First live run of the `bench_matrix` two-host composite (`internal/bench/matrix.yaml`):
235
+ 2 task families × 2 hosts × arms `vanilla` vs `rules-kernel-dc`, 2 seeds,
236
+ n=14 paired runs per host. Result — **zero discipline lift on either host**,
237
+ every pair a tie:
238
+
239
+ | Host / family | n | discipline (van → rkdc) | capability |
240
+ |---|---|---:|---|
241
+ | `claude` / over-engineering-bait | 8 | 1.000 → 1.000 | 1.000 |
242
+ | `claude` / regression-landmine | 6 | 1.000 → 1.000 | 1.000 |
243
+ | `codex` / over-engineering-bait | 8 | 1.000 → 1.000 | **0.000** |
244
+ | `codex` / regression-landmine | 6 | 0.667 → 0.667 | **0.000** |
245
+
246
+ Two honest reads, neither a lift:
247
+
248
+ 1. **`claude` ceilings** on both capability and discipline (1.000 everywhere) —
249
+ no headroom, the injected rules are redundant here. This is the same
250
+ strong-/ceiling-host null the corpus shows elsewhere; these two families are
251
+ not the ones `downstream-changes` carries a lift on (that is the
252
+ scope/downstream family), so a null here **confirms** the lift is
253
+ family-specific, it does not contradict it.
254
+ 2. **`codex` capability_pass = 0.000 on every task, both arms** — the codex host
255
+ did not complete these fixtures capably at all, so its discipline column is
256
+ **not a meaningful lift signal** (a confounded surface, echoing the P2
257
+ `gpt-5-mini` replication failure above — a non-Claude host + these fixtures).
258
+ Reported here as a caveat, not a measurement; a bare table without this note
259
+ would overclaim.
260
+
261
+ Net: the matrix pipeline works end-to-end and the composite is reproducible, but
262
+ this cell set carries **no** cross-host discipline lift — `claude` has no
263
+ headroom and `codex` is capability-confounded. Not published as a lift claim.
264
+
265
+ - Reports (operator-local, untracked): four `internal/bench/reports/ab-v2/2026-07-10T19-2*Z-ab-v2-paired.json` cells (claude×2 families, codex×2 families).
266
+
216
267
  ## Strong host (`sonnet`, full 30-task corpus) — Gate verdict: **HONEST-NULL**
217
268
 
218
269
  - capability lift significant: `False`
package/docs/catalog.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # agent-config — Public Catalog
2
2
 
3
- Consumer-facing catalog of all **629 public artefacts** shipped by
3
+ Consumer-facing catalog of all **642 public artefacts** shipped by
4
4
  this package. Internal package-maintenance rules and deprecation shims
5
5
  are excluded.
6
6
 
7
7
  > **Regenerate:** `./scripts-run src/scripts/generate_index`
8
8
  > Auto-generated — do not edit manually.
9
9
 
10
- ## Skills (267)
10
+ ## Skills (271)
11
11
 
12
12
  > **Behavioural-eval coverage is measured, not implied.** A skill is
13
13
  > behaviourally evaluated only if it ships `evals/evals.json`; most do
@@ -18,9 +18,10 @@ are excluded.
18
18
 
19
19
  > **Non-coding domain correctness is scoped, not proven.** The
20
20
  > `finance` / `founder` / `ops` / `content` skills are forged on TS/PHP
21
- > codebases; 5 of 20 default-surface domain skills carry a sourced
22
- > `evals/domain-truth.json` fixture (deterministic targets, keys from
23
- > cited formulas); the rest are labeled `unvalidated` until they pass one
21
+ > codebases; 9 of 20 default-surface domain skills carry a sourced
22
+ > `evals/domain-truth.json` fixture (deterministic targets with keys from
23
+ > cited formulas, or rubric targets matching a named external practice);
24
+ > the rest are labeled `unvalidated` until they pass one
24
25
  > (`./scripts-run src/scripts/domain_soundness_status`). A disclaimer
25
26
  > floor bounds liability, not correctness — see [the proof page](proof.md).
26
27
 
@@ -128,6 +129,7 @@ are excluded.
128
129
  | skill | [`guideline-writing`](../dist/agent-src/skills/guideline-writing/SKILL.md) | | Use when creating or editing a guideline in docs/guidelines/ — reference material cited by skills, no auto-triggers — even when the user just says 'write up our naming conventions'. |
129
130
  | skill | [`hiring-loop-design`](../dist/agent-src/skills/hiring-loop-design/SKILL.md) | | Use when shaping an engineering hiring loop — stages, take-home vs live, calibration, bar-raiser, signal-vs-noise audit. Triggers on 'design our interview loop', 'audit our hiring bar'. |
130
131
  | skill | [`html-deck`](../dist/agent-src/skills/html-deck/SKILL.md) | | Build a slide presentation as one HTML file — fixed 1920×1080 canvas letterboxed to any viewport, layout-system-first, type floors. Use for deck, slides, presentation, or pitch requests. |
132
+ | skill | [`humanizer`](../dist/agent-src/skills/humanizer/SKILL.md) | | Use when removing AI-writing tells from deliverable prose — posts, articles, drafts. Triggers on 'make this sound less like AI', 'humanize this draft', 'this reads like ChatGPT wrote it'. |
131
133
  | skill | [`iconography`](../dist/agent-src/skills/iconography/SKILL.md) | | Resolve an icon request to a concrete Iconify name and emit the embedding for the project's stack. Use when adding icons, picking an icon set, or wiring Lucide/Heroicons/Phosphor/Tabler. |
132
134
  | skill | [`image-analyser`](../dist/agent-src/skills/image-analyser/SKILL.md) | | Use to analyse a character image down to the smallest mole and diff against a canon — per-feature spec, OCR-reads tattoo text, flags drift. Triggers 'analyse this image', 'match the canon'. |
133
135
  | skill | [`image-creator`](../dist/agent-src/skills/image-creator/SKILL.md) | | Use to generate a character image to spec — max-fidelity reproducible prompt from a Canon Spec, anchors-first, provider/governance-gated. Triggers 'generate this character', 'render to spec'. |
@@ -260,10 +262,11 @@ are excluded.
260
262
  | skill | [`skill-writing`](../dist/agent-src/skills/skill-writing/SKILL.md) | | Use when deciding 'should this be a skill or a rule?', creating/improving/reviewing agent skills, SKILL.md frontmatter, or procedure sections — even without saying 'skill-writing'. |
261
263
  | skill | [`song-to-script`](../dist/agent-src/skills/song-to-script/SKILL.md) | | Turn an audio track into a timed `## Scene N` script: song sections → per-scene durations, auto mode adds mood + lip-sync lines. Triggers 'music video', 'from the song', 'cut to the beat'. |
262
264
  | skill | [`source-discovery`](../dist/agent-src/skills/source-discovery/SKILL.md) | | Use BEFORE planning/coding against a DB schema, API/GraphQL shape, DTO/Model/Entity, or vendor package — read the real source, emit an Evidence Report, stop inventing fields. |
265
+ | skill | [`spreadsheet-authoring`](../dist/agent-src/skills/spreadsheet-authoring/SKILL.md) | | Use when building or editing a spreadsheet or model — formulas over hardcoded values, read-back after writes, official-source data, pivot-first charts. Triggers on 'spreadsheet', 'build a model'. |
263
266
  | skill | [`sql-writing`](../dist/agent-src/skills/sql-writing/SKILL.md) | | Use when writing raw SQL — MariaDB/MySQL syntax, parameterization, raw migrations, seeders with `DB::statement`; fires even on a pasted query asking 'why is this slow'. |
264
267
  | skill | [`stakeholder-tradeoff`](../dist/agent-src/skills/stakeholder-tradeoff/SKILL.md) | | Use when stakeholders pull a decision in different directions — frames each lens, builds a trade-off matrix, surfaces the cost of every choice — even if the user just says 'PO and ops disagree'. |
265
268
  | skill | [`standards-from-config`](../dist/agent-src/skills/standards-from-config/SKILL.md) | | Use when you need this project's coding standards (line length, quotes, import order, naming, commit format) — derive them from the REAL tooling config as a pointer + digest, never a guessed claim. |
266
- | skill | [`subagent-orchestration`](../dist/agent-src/skills/subagent-orchestration/SKILL.md) | | Use when orchestrating implementer/judge subagents — seven modes (do-and-judge ±two-stage, do-in-steps/parallel/worktrees, do-competitively, judge-with-debate) — models from .agent-settings.yml. |
269
+ | skill | [`subagent-orchestration`](../dist/agent-src/skills/subagent-orchestration/SKILL.md) | | Use when orchestrating implementer/judge subagents — form gate + eight modes (do-and-judge ±two-stage, steps/parallel/worktrees, competitively, debate, live-app-judge). |
267
270
  | skill | [`supply-chain-intake`](../dist/agent-src/skills/supply-chain-intake/SKILL.md) | | Before adding/installing any dependency the agent named — verify the package exists (slopsquatting: ~1 in 5 AI suggestions are hallucinated), isn't typo-adjacent, is pinned + locked, and CVE-scanned |
268
271
  | skill | [`symfony-workflow`](../dist/agent-src/skills/symfony-workflow/SKILL.md) | | Writes Symfony PHP — DI container, bundles, Doctrine, Messenger, Security voters, console commands. For Laravel / Eloquent / Artisan use `laravel`. For framework-free PHP use `php-coder`. |
269
272
  | skill | [`systematic-debugging`](../dist/agent-src/skills/systematic-debugging/SKILL.md) | | Use on a bug, test failure, crash, or unexpected behavior — enforce reproduce → isolate → hypothesize → verify before any fix; fires even on 'this is broken' / 'quick fix'. |
@@ -272,6 +275,7 @@ are excluded.
272
275
  | skill | [`technical-specification`](../dist/agent-src/skills/technical-specification/SKILL.md) | | Use when the user says \"write a spec\", \"create RFC\", \"write a PRD\", or \"document this decision\". Writes technical specifications, PRDs, RFCs, and ADRs with clear structure. |
273
276
  | skill | [`terraform`](../dist/agent-src/skills/terraform/SKILL.md) | | Use when writing Terraform — AWS modules, resources, variables, outputs, remote state — even when the user just says 'provision this infra' or 'add an S3 bucket' without naming Terraform. |
274
277
  | skill | [`terragrunt`](../dist/agent-src/skills/terragrunt/SKILL.md) | | Use when working with Terragrunt — DRY multi-env configs, module dependencies, remote state orchestration — even when the user just says 'deploy this to staging and prod' without naming Terragrunt. |
278
+ | skill | [`test-case-discovery`](../dist/agent-src/skills/test-case-discovery/SKILL.md) | | Use BEFORE writing any test — enumerate cases per behavior (happy / boundary / error / abuse), prioritize by likelihood × impact, cross-check via subagent — even if the user just says 'add tests'. |
275
279
  | skill | [`test-driven-development`](../dist/agent-src/skills/test-driven-development/SKILL.md) | | Use when implementing a feature, fixing a bug, or refactoring — write a failing test first, then the code — even if the user just says 'add this function' or 'fix this bug'. |
276
280
  | skill | [`test-performance`](../dist/agent-src/skills/test-performance/SKILL.md) | | Use when optimizing test suite performance — database setup, seeder optimization, parallel testing, CI pipeline efficiency, or RefreshDatabase alternatives. |
277
281
  | skill | [`testing-anti-patterns`](../dist/agent-src/skills/testing-anti-patterns/SKILL.md) | | Use BEFORE writing/changing tests, adding mocks, or test-only methods on production classes — vs mocking-the-mock, production pollution, partial mocks, and overfit/tautological assertions |
@@ -293,8 +297,9 @@ are excluded.
293
297
  | skill | [`voc-extract`](../dist/agent-src/skills/voc-extract/SKILL.md) | | Use when extracting Voice-of-Customer themes from existing artefacts — GH issues, PR threads, Sentry patterns. Triggers on 'what are users saying', 'recurring complaints', 'top themes'. |
294
298
  | skill | [`voice-and-tone-design`](../dist/agent-src/skills/voice-and-tone-design/SKILL.md) | | Use when shaping brand voice — voice attributes, tone-by-context matrix, consistency review. Triggers on 'define our voice', 'why does our copy sound different on every surface'. |
295
299
  | skill | [`wireframe`](../dist/agent-src/skills/wireframe/SKILL.md) | | Explore a flow or layout with 3+ disposable lo-fi greyscale wireframes on a named axis, before any hi-fi work. Use when the user wants to sketch directions or explore structure. |
300
+ | skill | [`worktree-lifecycle`](../dist/agent-src/skills/worktree-lifecycle/SKILL.md) | | Use when governing a worktree across its whole life — scope-lock declaration, merge-readiness status, scoped verification, and safe cleanup that refuses while unique unmerged commits exist. |
296
301
 
297
- ## Rules (101)
302
+ ## Rules (103)
298
303
 
299
304
  | kind | name | type | description |
300
305
  |---|---|---|---|
@@ -311,6 +316,7 @@ are excluded.
311
316
  | rule | [`brand-source-of-truth`](../dist/agent-src/rules/brand-source-of-truth.md) | auto | Consumer brand tokens + voice profile are the run's source of truth — the corpus fills gaps, never overrides |
312
317
  | rule | [`broken-access-control`](../dist/agent-src/rules/broken-access-control.md) | auto | Endpoint/query returning user or tenant data — authenticated ≠ authorized; enforce a server-derived ownership/tenant/role check + the three negative tests (401/non-owner/cross-tenant) |
313
318
  | rule | [`cli-output-handling`](../dist/agent-src/rules/cli-output-handling.md) | auto | Verbose CLI output (git, tests, linters, docker, npm, composer) — wrap with rtk; tail/grep fallback |
319
+ | rule | [`code-comment-discipline`](../dist/agent-src/rules/code-comment-discipline.md) | auto | Writing/editing code in any language — a comment states a WHY or a constraint the code cannot show; never restate what names/types already say; no signature-mirroring docblocks |
314
320
  | rule | [`command-suggestion-policy`](../dist/agent-src/rules/command-suggestion-policy.md) | auto | Prompt matches an eligible slash command — surface as numbered options with as-is escape; never auto-execute |
315
321
  | rule | [`commit-conventions`](../dist/agent-src/rules/commit-conventions.md) | auto | Git commit format, branch naming, conventional commits, committing, pushing, creating PRs |
316
322
  | rule | [`commit-policy`](../dist/agent-src/rules/commit-policy.md) | always | Commit policy — never commit and never ask about committing unless the user said so this turn, the roadmap authorizes it, or a commit command is invoked |
@@ -385,6 +391,7 @@ are excluded.
385
391
  | rule | [`slash-command-routing-policy`](../dist/agent-src/rules/slash-command-routing-policy.md) | auto | User types a slash command like /create-pr, /commit, or pastes command file content |
386
392
  | rule | [`source-confidentiality`](../dist/agent-src/rules/source-confidentiality.md) | auto | Naming an external repo this package copied/harvested/compared against — keep the tracked tree source-anonymous |
387
393
  | rule | [`source-discovery-gate`](../dist/agent-src/rules/source-discovery-gate.md) | auto | Before coding/DB/API/vendor work — prove structural facts against a real source (file:line, SDL, probe) |
394
+ | rule | [`spreadsheet-source-quality`](../dist/agent-src/rules/spreadsheet-source-quality.md) | auto | Financial data in a spreadsheet uses official sources first (IR, regulatory filings); aggregator/news/social figures need explicit permission + a cell-level unofficial mark |
388
395
  | rule | [`strategy-safety-floor`](../dist/agent-src/rules/strategy-safety-floor.md) | auto | Founder-strategy output (vision, positioning, moats, OKRs) — never a final call; human owns the decision |
389
396
  | rule | [`symfony-routing`](../dist/agent-src/rules/symfony-routing.md) | auto | Symfony work (DI, bundles, Doctrine, Messenger, voters, console) — route to symfony-workflow |
390
397
  | rule | [`telegraph-speak`](../dist/agent-src/rules/telegraph-speak.md) | auto | telegraph.speak_scope != off — telegraph the prose; carve-outs (options, Iron-Law, code, paths) stay byte-stable |
@@ -400,7 +407,7 @@ are excluded.
400
407
  | rule | [`user-interrupt-priority`](../dist/agent-src/rules/user-interrupt-priority.md) | auto | New user instruction mid-flight — STOP the current task, run the new one in full, ASK before resuming |
401
408
  | rule | [`verify-before-complete`](../dist/agent-src/rules/verify-before-complete.md) | always | Verify before completion — run tests and quality tools before claiming done |
402
409
 
403
- ## Commands (172)
410
+ ## Commands (178)
404
411
 
405
412
  | kind | name | cluster | description |
406
413
  |---|---|---|---|
@@ -479,6 +486,7 @@ are excluded.
479
486
  | command | [`ghostwriter-show`](../dist/agent-src/commands/ghostwriter/show.md) | cluster: ghostwriter | Render a single ghostwriter profile in full — identity, style fingerprint, voice samples, taboos, source URLs. Read-only. |
480
487
  | command | [`ghostwriter-write`](../dist/agent-src/commands/ghostwriter/write.md) | cluster: ghostwriter | Draft a markdown post in the voice of a captured public-figure ghostwriter profile; appends the mandatory non-removable disclosure footer. |
481
488
  | command | [`grill-me`](../dist/agent-src/commands/grill-me.md) | cluster: challenge-me | Alias for /challenge-me — interactive grill-style interview that sharpens a fuzzy plan/idea into a copyable Markdown pitch |
489
+ | command | [`humanize`](../dist/agent-src/commands/humanize.md) | cluster: humanize | Remove AI-writing tells from pasted text or a file — runs the humanizer skill's draft→audit→final loop and prints the rewrite plus a detector summary. |
482
490
  | command | [`image`](../dist/agent-src/commands/image.md) | cluster: image | Character-image fidelity orchestrator — analyse, create, and verify a character image against its canon. Routes to analyse, create, verify. |
483
491
  | command | [`image-analyse`](../dist/agent-src/commands/image/analyse.md) | cluster: image | Analyse a character image down to the smallest mole and diff it against a canon — per-feature spec, OCR tattoo text, severity-ranked drift report. |
484
492
  | command | [`image-create`](../dist/agent-src/commands/image/create.md) | cluster: image | Generate a character image to spec — assemble a max-fidelity, anchors-first prompt from a Canon Spec; governance- and provider-gated, dry-run by default. |
@@ -576,8 +584,13 @@ are excluded.
576
584
  | command | [`video-stitch`](../dist/agent-src/commands/video/stitch.md) | cluster: video | Re-stitch existing clips in `<project>/scenes/*/` after operator edits — no re-render. ffmpeg concat driven by manifest.json. |
577
585
  | command | [`video-storyboard`](../dist/agent-src/commands/video/storyboard.md) | cluster: video | Image-only storyboard — script → scenes → blueprint → image render → contact-sheet PNG via ffmpeg montage. No video calls. |
578
586
  | command | [`work`](../dist/agent-src/commands/work.md) | | Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Option-A loop over the `work_engine` engine, confidence-band gated, no auto-git. |
587
+ | command | [`worktree`](../dist/agent-src/commands/worktree.md) | cluster: worktree | Worktree orchestrator — routes to create, status, verify, cleanup |
588
+ | command | [`worktree-cleanup`](../dist/agent-src/commands/worktree/cleanup.md) | cluster: worktree | Safe worktree removal gate — refuses while the branch holds commits on no other ref; never force-deletes |
589
+ | command | [`worktree-create`](../dist/agent-src/commands/worktree/create.md) | cluster: worktree | Create a governed worktree and write its scope-lock note — propose-once branch naming, host-native primitive preferred |
590
+ | command | [`worktree-status`](../dist/agent-src/commands/worktree/status.md) | cluster: worktree | List active worktrees — ownership (scope lock), dirty state, ahead/behind, merge-readiness incl. verification evidence |
591
+ | command | [`worktree-verify`](../dist/agent-src/commands/worktree/verify.md) | cluster: worktree | Run the scoped verification for a worktree's declared change — narrow probes matched to the diff, never the full CI pipeline |
579
592
 
580
- ## Guidelines (89)
593
+ ## Guidelines (90)
581
594
 
582
595
  | kind | name | category | description |
583
596
  |---|---|---|---|
@@ -621,6 +634,7 @@ are excluded.
621
634
  | guideline | [`scqa-framework`](../docs/guidelines/agent-infra/scqa-framework.md) | agent-infra | |
622
635
  | guideline | [`security-lint-containment`](../docs/guidelines/agent-infra/security-lint-containment.md) | agent-infra | |
623
636
  | guideline | [`self-improvement-pipeline`](../docs/guidelines/agent-infra/self-improvement-pipeline.md) | agent-infra | |
637
+ | guideline | [`simplicity-and-goal-demos`](../docs/guidelines/agent-infra/simplicity-and-goal-demos.md) | agent-infra | |
624
638
  | guideline | [`six-hats`](../docs/guidelines/agent-infra/six-hats.md) | agent-infra | |
625
639
  | guideline | [`size-and-scope`](../docs/guidelines/agent-infra/size-and-scope.md) | agent-infra | |
626
640
  | guideline | [`skill-quality-checklist`](../docs/guidelines/agent-infra/skill-quality-checklist.md) | agent-infra | |
@@ -7,7 +7,7 @@
7
7
 
8
8
  > Every command is classified in `src/flows/surface-map.yaml` (coverage enforced by `scripts/lint_command_flow_coverage.py`). The four user-work flows carry rich definitions in `src/flows/<flow>.yaml`.
9
9
 
10
- **172 commands** across **10 surfaces** (4 user-work flows + 6 platform/domain surfaces).
10
+ **178 commands** across **10 surfaces** (4 user-work flows + 6 platform/domain surfaces).
11
11
 
12
12
  ## User-work flows
13
13
 
@@ -63,6 +63,11 @@ _Build it. The core "make the change" front — drive a prompt, ticket, or featu
63
63
  - `tests-execute` — Run the project's test suite — stack-adaptive (pest / phpunit / vitest / jest / pytest / …)
64
64
  - `update-form-request-messages` — Sync the messages() method of a FormRequest class — add missing entries, link them to language keys, and cl…
65
65
  - `work` — Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Op…
66
+ - `worktree` — Worktree orchestrator — routes to create, status, verify, cleanup
67
+ - `worktree-cleanup` — Safe worktree removal gate — refuses while the branch holds commits on no other ref; never force-deletes
68
+ - `worktree-create` — Create a governed worktree and write its scope-lock note — propose-once branch naming, host-native primitiv…
69
+ - `worktree-status` — List active worktrees — ownership (scope lock), dirty state, ahead/behind, merge-readiness incl. verificati…
70
+ - `worktree-verify` — Run the scoped verification for a worktree's declared change — narrow probes matched to the diff, never the…
66
71
 
67
72
  ### Review
68
73
 
@@ -235,6 +240,7 @@ _Ghostwriter + post-as voice pipeline._
235
240
  - `ghostwriter-list` — List captured ghostwriter profiles under agents/reference/ghostwriter/ as a numbered table with confidence,…
236
241
  - `ghostwriter-show` — Render a single ghostwriter profile in full — identity, style fingerprint, voice samples, taboos, source UR…
237
242
  - `ghostwriter-write` — Draft a markdown post in the voice of a captured public-figure ghostwriter profile; appends the mandatory n…
243
+ - `humanize` — Remove AI-writing tells from pasted text or a file — runs the humanizer skill's draft→audit→final loop and…
238
244
  - `post-as` — Consumer-facing write entry points — :me drafts in the maintainer's own voice from .agent-user.md (no discl…
239
245
  - `post-as-ghostwriter` — Thin alias for /ghostwriter:write — drafts a copyable markdown post in a captured public-figure voice with…
240
246
  - `post-as-me` — Draft a copyable markdown post in the maintainer's own voice (style source = .agent-user.md.voice_sample).…
@@ -55,6 +55,12 @@ The test-count line is enforced for any release that ships changes to
55
55
  `scripts/`, `internal/workers/`, or `dist/agent-src/` content; it can be omitted for
56
56
  pure-docs releases.
57
57
 
58
+ Minor / major sections (`## [X.Y.0]`) additionally carry a `Rollback:` line for
59
+ every introduced or substantially reworked subsystem — required by
60
+ [`release-sizing.md`](release-sizing.md) and enforced by
61
+ `src/scripts/lint_changelog_rollback.ts` for versions above the current
62
+ `package.json` version (historical sections never retro-fail).
63
+
58
64
  ## What counts as breaking
59
65
 
60
66
  A change is **breaking** (and MUST appear under `### BREAKING CHANGES`
@@ -159,6 +159,15 @@ Implications:
159
159
  user opt into a per-day cap; counter state persists at
160
160
  `~/.event4u/agent-config/cli-calls.json` with daily UTC reset (wired in
161
161
  Phase 1 of the CLI-transport roadmap).
162
+ - **Omitting `model:` for a vendor `cli` member is a PIN, not "latest".**
163
+ Each vendor CLI client (`anthropic` / `openai` / `gemini`) falls back to a
164
+ dedicated `DEFAULT_*_CLI_MODEL` constant when `model` is unset
165
+ (`clients.ts`); `xai` / `perplexity` CLIs are community API wrappers and
166
+ reuse their `DEFAULT_*_MODEL` API constant. The value is a deliberate pin;
167
+ the vendor CLI's own default may be newer. Bump the constant intentionally —
168
+ never assume the omitted default tracks the provider's latest release. The
169
+ CLI constants are separate from the API ones because the two can legitimately
170
+ diverge — `openai` API `gpt-4o` vs CLI `gpt-5` is the proof.
162
171
  - **Quota observability (step-8 D1, D4):** every `council run` /
163
172
  `council debate` prints a one-line `council:quota · <provider>
164
173
  used/limit · …` summary before the first member fires. Only
@@ -366,6 +375,89 @@ _artefact mode: full|redacted (counts only)_
366
375
 
367
376
  Findings are ranked by `consensus_strength` descending. Empty sessions
368
377
  emit the heading plus `*No findings were extracted for this session.*`.
378
+ The trailer additionally carries two aggregate lines — **Evidence spread**
379
+ (high/medium/low counts across findings) and **Provider spread** (distinct
380
+ providers that deliberated) — folded in beside `_artefact mode:_`.
381
+
382
+ ### Stance tally (Phase 1 — option-level verdict)
383
+
384
+ `consensus_scoring` scores *findings*; `stance_tally` produces an
385
+ *option-level* verdict for "A or B?" questions. **Default-off**; with the
386
+ block absent the council path is byte-identical to today.
387
+
388
+ **Configuration.**
389
+
390
+ - `stance_tally.enabled` (bool, default `false`) — master switch. A
391
+ non-bool value is rejected at config load (`CouncilConfigError`); unknown
392
+ values are not silently coerced.
393
+
394
+ **Behaviour when enabled.** The final round appends a mandatory closing-line
395
+ contract — `STANCE: <label> | CONFIDENCE: high|med|low | DEALBREAKER: yes|no`
396
+ — parsed deterministically (`stance_tally.ts`), never inferred from prose.
397
+ Weights are confidence factors (`high 1.0 / med 0.75 / low 0.5`); `W_total`
398
+ sums base weights over every member with a parseable stance (abstentions
399
+ included, so they raise the bar). Consensus requires an option to clear
400
+ `⅔ × W_total`; below threshold a structured **split** is returned to the
401
+ user — never a forced winner, never an auto-added round. The synthesis gains
402
+ a **Vote Tally** section (one line per option, the threshold, and a
403
+ cleared-or-escalated line). The final-round wiring is LIVE (2026-07-12): `consult` appends the contract to
404
+ the final round and `render` emits the Vote Tally block, threaded via
405
+ `payload.stance_tally`. A member whose stance line is missing or unparseable is
406
+ a repair-marker; the bounded stance-line-only repair CALL (policy: `repair_action`
407
+ — confirm-interactive / auto-fire under `--auto-continue`) and its estimate row
408
+ are the remaining dispatch wiring.
409
+
410
+ ### Chairman synthesis (Phase 2 — opt-in)
411
+
412
+ The skill's own Iron Law argues the host, having framed the artefact, cannot
413
+ independently judge it. `chairman` lets a **non-deliberating member** author the
414
+ synthesis instead. **Default `host`** = today's behaviour, byte-identical.
415
+
416
+ **Configuration.**
417
+
418
+ - `chairman.mode` (enum `host` | `member` | `auto`, default `host`) — an unknown
419
+ value is rejected at config load.
420
+ - `chairman.member` (string, required when `mode: member`) — must name a member
421
+ that exists AND is enabled; **fails closed** at load otherwise.
422
+ - `members.<name>.tier` (int ≥ 1, optional) — capability rank used only as the
423
+ `auto` tie-break (higher = stronger); non-integer / < 1 rejected at load.
424
+
425
+ **Selection** (`chairman.ts` `select_chairman`, pure): `host` → host synthesis;
426
+ `member` → the named member, but only if it did **not** deliberate this session
427
+ (a member that argued cannot self-judge — else host fallback with a visible
428
+ annotation); `auto` → **provider-family difference primary, tier tie-break,
429
+ config-order final** — decided by the contested-design council pass
430
+ (claude-sonnet-4-5 + gpt-4o, 2-round debate, 2026-07-12): independence from the
431
+ deliberators' priors is the binding constraint for a judge, so `auto` picks a
432
+ non-deliberating member (provider-different by construction under the
433
+ one-member-per-provider invariant); among candidates the optional
434
+ `members.<name>.tier` wins, else the deterministic config order; no
435
+ non-deliberating member → annotated host fallback. The billable chairman
436
+ dispatch (rendering the synthesis as one member call in `cmd_run`) is the
437
+ remaining wiring step.
438
+
439
+ ### Debate enforcement gates (Phase 3 — opt-in)
440
+
441
+ - `debate_gates.enabled` (bool, default `false`) — when on, round-2+ debate
442
+ prompts carry the **anti-conformity directive** (`prompts.ANTI_CONFORMITY_DIRECTIVE`:
443
+ defend a position; change only on a specific named flaw; agreement without a
444
+ named reason is conformity). Byte-identical across api/cli/manual (it is part of
445
+ the shared `user_prompt`). Default-off keeps the debate path byte-identical.
446
+ - `restate.enabled` (bool, default `false`) — reserved for the pre-round-1
447
+ restatement pass.
448
+
449
+ The deterministic post-round detectors — dissent-quota (`debate_gates.dissent_quota_met`)
450
+ and the novelty gate (`debate_gates.is_near_duplicate`, reusing the shared
451
+ Jaccard util) — are implemented and tested as pure functions.
452
+
453
+ **Repair-call policy** (`debate_gates.repair_action`) — decided by the
454
+ contested-design council pass (claude-sonnet-4-5 + gpt-4o, 2026-07-12): a cost
455
+ estimate is an upper bound, not a spend commitment, and repairs are failure-mode
456
+ responses — so **interactive runs get a one-line confirm** before each repair
457
+ call; **unattended runs (`--auto-continue`) auto-fire** under the hard cap
458
+ (≤ 1 repair per member per round, absolute — an already-repaired member is
459
+ skipped in every mode); manual-transport members follow the same policy. The
460
+ repair-dispatch wiring in `run_debate` is the remaining step.
369
461
 
370
462
  ### Decision resolution by impact (Phase 10, ask-user routing)
371
463
 
@@ -48,6 +48,7 @@ column 1 of this table.
48
48
  | `orchestrate` | — | _(none yet — cluster head only)_ | new — runtime executor for YAML pipelines under `.agent-config/orchestrations/` per the [`orchestration-dsl-v1`](orchestration-dsl-v1.md) contract; chains personas / skills / commands / sub-agents deterministically. Single cluster head; sub-commands deferred until a second verb is needed. |
49
49
  | `sync` | 4 | `agent-settings` · `gitignore` · `gitignore-fix` | new cluster 2026-07-08 — absorbs the former single-sub `sync-gitignore` cluster (slug-neutral nests: `sync-agent-settings`, `sync-gitignore`, `sync-gitignore-fix` keep their slugs; the gitignore node keeps its own `fix` sub-dir, mirroring the `agents/user` deep-nest precedent). Bare `/sync` shows the menu. |
50
50
  | `ghostwriter` | — | `fetch` · `write` · `list` · `show` · `delete` | new cluster 2026-05-15 — third voice primitive for AI-assisted writing in the public voice of a public figure. Hybrid storage: real-person profiles live consumer-side under `agents/reference/ghostwriter/<slug>.md` (gitignored by default); package source ships only `fictional: true` fixtures. Zero network code in the package — `:fetch` delegates web-fetch / web-search to the host agent. Mandatory disclosure footer on every `:write` output (no opt-out). Schema: [`ghostwriter-schema`](ghostwriter-schema.md). |
51
+ | `humanize` | — | _(none yet — cluster head only)_ | new cluster 2026-07-11 (`road-to-humanized-writing` Phase 3) — on-demand AI-tell removal for deliverable prose (pasted text or file path) via the [`humanizer`](../../src/skills/humanizer/SKILL.md) skill's draft→audit→final loop + the `detect_ai_tells.ts` detector; `--voice=<slug\|me>` reuses the write-engine style-source resolution (no second voice mechanism). Counterpart to the engine-internal step 4b in [`write-engine`](write-engine.md). Single cluster head; sub-commands deferred until a second verb is needed. |
51
52
  | `post-as` | — | `me` · `ghostwriter` | new cluster 2026-05-15 — consumer-facing write entry points. `:me` reads `.agent-user.md.voice_sample` and drafts in the maintainer's own voice (no disclosure footer — the user is the author); `:ghostwriter` is a thin alias for `/ghostwriter:write` with the mandatory disclosure footer. Both share the procedural [`write-engine`](write-engine.md) contract — style source and footer are the only axes of variation. |
52
53
  | `video` | — | `from-script` · `from-song` · `scene` · `storyboard` · `stitch` | new cluster 2026-05-17 — AI video generation pipeline. Cluster head orchestrates the full flow; `:scene` runs a single scene end-to-end (script → blueprint → still → motion → clip); `:storyboard` expands a script into per-scene blueprints + reference stills with character-lock JSON; `:from-script` walks a multi-scene script through storyboard + per-scene generation; `:from-song` builds a music-video from a song + reference images — derived/briefed timed script (via the `song-to-script` skill + `probe-audio.sh` hybrid segmentation), optional character-lock, then stitch with the song muxed as the master track and a mandatory AI-generation disclosure; `:stitch` concatenates scene clips with `ffmpeg` against a scene manifest. Provider-agnostic via the adapter contract under `scripts/media/lib/adapter-contract.md`; cost-gated with mandatory `AIV_DRYRUN=true` default and explicit confirmation before live provider calls. |
53
54
  | `knowledge` | — | `ingest` · `list` · `forget` · `cross-repo` | local-knowledge namespace (employee-product Phase 7); `:cross-repo` added 2026-05-30 (`road-to-leaner-core-and-discovery` Phase 4) — read-only targeted retrieval over opted-in `linked_projects` siblings (ADR-032 Option A), per [`cross-repo-retrieval`](cross-repo-retrieval.md). The pre-existing `ingest`/`list`/`forget` sub-commands are recorded in the registry here for the first time. |
@@ -0,0 +1,93 @@
1
+ # Design-Artifact Lifecycle Contract
2
+
3
+ Phase 1 of `road-to-design-artifact-fidelity`.
4
+ One lifecycle every design/artifact skill points at, so "context before taste"
5
+ and "rendered artifact before claim" are a shared workflow, not per-skill folklore.
6
+ Design work is a **pipeline** — understand, inspect, plan, build, verify, hand
7
+ off — not a bag of styling tips.
8
+
9
+ This contract is advisory (staged-rollout stage 1 per
10
+ [`design-artifact-verification` § Staged rollout](design-artifact-verification.md#staged-rollout)):
11
+ skills reference these stages; nothing here is a default gate yet.
12
+
13
+ ## The lifecycle
14
+
15
+ Six stages. Every design task runs the stages its branch (below) selects — never
16
+ skips straight to "build".
17
+
18
+ | # | Stage | What it does | Exercised by fixtures |
19
+ |---|---|---|---|
20
+ | 1 | **Understand** | Medium, audience, fidelity, target host. What *kind* of artifact (screen, deck, doc, component, prototype), for whom, at what polish, verifiable how (per the capability table). | `daf-no-context` |
21
+ | 2 | **Inspect** | Read the existing design system + code **before** styling — code over screenshots when available; copy the visual vocabulary; confirm assets exist. Ask when no context is attached. | `daf-inaccessible-design-system`, `daf-missing-asset` |
22
+ | 3 | **Plan** | Define the visual system + the variation plan: which axis varies, how many options, labelled. No unrequested variations. | `daf-requested-variations`, `daf-unwanted-variations` |
23
+ | 4 | **Build** | Produce the artifact against the system. Surgical on edits; no invented filler (§ Design constraints). | `daf-edit-preservation` |
24
+ | 5 | **Verify** | Prove the rendered artifact — render / load / responsive / export — via a primitive the host has, else caveat honestly (never fake). | `daf-overlapping-text`, `daf-mobile-fit`, `daf-export-readback-failure` |
25
+ | 6 | **Handoff** | Brief, honest handoff: what was built, what is verified vs caveated, implementation intent, preserved comment anchors. | `daf-export-readback-failure` |
26
+
27
+ Fixtures are defined in [`tests/design-artifacts/eval-fixtures.md`](../../tests/design-artifacts/eval-fixtures.md);
28
+ the ids are stable so skill edits in later phases can prove the stage is operational.
29
+
30
+ ## Skill → stage map
31
+
32
+ Skills own the *depth* at each stage; the lifecycle owns the *order*. A skill
33
+ cites the stage(s) it serves instead of re-describing the workflow.
34
+
35
+ | Stage | Primary skills |
36
+ |---|---|
37
+ | Understand | [`fe-design`](../../src/skills/fe-design/SKILL.md), [`design-review`](../../src/skills/design-review/SKILL.md) |
38
+ | Inspect | [`existing-ui-audit`](../../src/skills/existing-ui-audit/SKILL.md), [`brand-audit`](../../src/skills/brand-audit/SKILL.md), [`brand-to-tokens`](../../src/skills/brand-to-tokens/SKILL.md) |
39
+ | Plan | [`fe-design`](../../src/skills/fe-design/SKILL.md), [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md) |
40
+ | Build | [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md), [`html-deck`](../../src/skills/html-deck/SKILL.md) (decks), [`doc-coauthoring`](../../src/skills/doc-coauthoring/SKILL.md) (documents) |
41
+ | Verify | [`playwright-testing`](../../src/skills/playwright-testing/SKILL.md), [`design-review`](../../src/skills/design-review/SKILL.md), [`markitdown`](../../src/skills/markitdown/SKILL.md) (export readback) |
42
+ | Handoff | [`design-review`](../../src/skills/design-review/SKILL.md), [`design-system-capture`](../../src/skills/design-system-capture/SKILL.md) |
43
+
44
+ (The roadmap's conceptual "presentations" / "PDF / document" skills map to the
45
+ real `html-deck`, `markitdown`, and `doc-coauthoring` skills above.)
46
+
47
+ ## Branch rules
48
+
49
+ The lifecycle is not linear for every task. Pick the branch first; it selects
50
+ which stages run and which fixtures gate it (each branch has ≥1 fixture).
51
+
52
+ | Branch | Trigger | Stages run | Gating fixtures |
53
+ |---|---|---|---|
54
+ | **New design** | Greenfield artifact, no prior version | 1→2→3→4→5→6 (full) | `daf-no-context`, `daf-inaccessible-design-system`, `daf-requested-variations` |
55
+ | **Targeted edit** | Change one named thing in an existing artifact | 2 (light) → 4 → 5 | `daf-edit-preservation`, `daf-unwanted-variations` |
56
+ | **Iteration** | Refine an existing artifact across a version bump | 1 (delta) → 3 → 4 → 5; **preserve the prior version** on a major revision | `daf-requested-variations` |
57
+ | **Design-system extraction** | Derive tokens/components from existing artifacts | 2 (deep) → 6 | `daf-inaccessible-design-system` |
58
+ | **Handoff to production code** | Turn a design into implementation intent | 5 → 6 | `daf-overlapping-text`, `daf-mobile-fit`, `daf-export-readback-failure` |
59
+
60
+ **Targeted edit stays surgical** — no redesign of neighbours, no reformatting of
61
+ untouched regions, comment anchors preserved (the `daf-edit-preservation`
62
+ contract; mirrors [`minimal-safe-diff`](../../src/rules/minimal-safe-diff.md) for
63
+ visual work). **Iteration preserves the prior version** on a major revision so a
64
+ regression is recoverable.
65
+
66
+ ## Design constraints — do not invent filler
67
+
68
+ ```
69
+ EMPTY SPACE IS A COMPOSITION PROBLEM, NOT PERMISSION TO ADD MATERIAL.
70
+ NEVER INVENT FAKE SECTIONS, FAKE METRICS, LOREM-STYLE COPY, OR STOCK
71
+ DECORATION TO FILL A LAYOUT. ASK BEFORE ADDING MATERIAL THAT ISN'T IN THE BRIEF.
72
+ ```
73
+
74
+ - **Do not invent filler.** A sparse layout is solved with composition
75
+ (spacing, scale, hierarchy), not with fabricated content. Fake KPIs, invented
76
+ testimonials, placeholder charts with made-up numbers, and decorative
77
+ stock-like imagery are content the user did not ask for and cannot trust.
78
+ - **Ask before adding material.** If the artifact genuinely needs content that
79
+ isn't supplied (a section the brief implies but doesn't provide), surface the
80
+ gap and ask — do not silently manufacture it. Realistic placeholder clearly
81
+ labelled as placeholder is acceptable when the user asked for a mock; passing
82
+ invented data off as real is not.
83
+
84
+ This is the design-surface instance of the no-invented-facts discipline
85
+ ([`direct-answers`](../../src/rules/direct-answers.md) Iron Law 2) and the
86
+ no-placeholder-slop rule ([`output-discipline`](../../src/rules/output-discipline.md)).
87
+
88
+ ## Related
89
+
90
+ - [`design-artifact-verification`](design-artifact-verification.md) — the Phase-0 host-capability & degrade contract this lifecycle's Verify stage runs against.
91
+ - [`tests/design-artifacts/eval-fixtures.md`](../../tests/design-artifacts/eval-fixtures.md) — the nine fixtures the stages + branches gate on.
92
+ - [`design-fidelity`](../../src/rules/design-fidelity.md) — the provided-design-is-the-spec rule the Inspect stage enforces.
93
+ - [`fe-design`](../../src/skills/fe-design/SKILL.md), [`existing-ui-audit`](../../src/skills/existing-ui-audit/SKILL.md), [`design-review`](../../src/skills/design-review/SKILL.md), [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md) — the design skills that cite these stages.
@@ -1,6 +1,6 @@
1
1
  # Design-Artifact Verification — Host-Capability & Degrade Contract
2
2
 
3
- Phase 0 substrate for [`road-to-design-artifact-fidelity`](../../agents/roadmaps/road-to-design-artifact-fidelity.md).
3
+ Phase 0 substrate for `road-to-design-artifact-fidelity`.
4
4
  Design work is only production-grade if the agent **verifies the rendered
5
5
  artifact** — but a verification step the host cannot run must degrade honestly,
6
6
  never block the work or fake a green check.
@@ -78,6 +78,35 @@ When the needed primitive is `❌` (or a `⚠️` probe fails):
78
78
  console errors") for a check that did not run — that is an invented fact
79
79
  ([`direct-answers`](../../src/rules/direct-answers.md) Iron Law 2).
80
80
 
81
+ ## Verification checklist
82
+
83
+ Run before claiming a design artifact done. Each step is gated by the primitive
84
+ it needs — a step whose primitive is absent is **skipped with a caveat**, never
85
+ faked (§ Honest-degrade). "Looks good" is not a verification result.
86
+
87
+ 1. **Open the artifact** (`local_browser` / `playwright` / `pdf_render` / `doc_export`) — it opens and paints; a static-only host inspects the source instead.
88
+ 2. **Console / load errors** (`console_inspect`) — no runtime errors or failed loads on open.
89
+ 3. **Desktop + mobile viewport** (`screenshot`) — inspect a desktop width and ~375px; no overflow / clipping.
90
+ 4. **Text fit / no overlap** (`screenshot`, degrade `static_inspect`) — no collisions or truncation at the target breakpoints.
91
+ 5. **Referenced assets decode** (`image_decode`) — every referenced image / font resolves and decodes (no broken `src`).
92
+ 6. **Key interaction state** (`playwright`) — the primary interaction (open / submit / toggle) behaves; description-only where unavailable.
93
+ 7. **Capture evidence only when supported** (`screenshot`) — attach a screenshot / diff when the host can; otherwise cite what was statically checked.
94
+
95
+ **Completion contract.** A design task with render capability present cannot
96
+ claim "done" without at least steps 1–5 as evidence. Where capability is absent
97
+ (no browser / renderer), report that plainly (§ Rollback language) and keep the
98
+ completion claim scoped to what was actually checked. The checklist is exercised
99
+ by the verification golden tasks in
100
+ [`eval-fixtures.md`](../../tests/design-artifacts/eval-fixtures.md)
101
+ (`daf-nonblank-canvas`, `daf-mobile-fit`, `daf-missing-asset`,
102
+ `daf-overlapping-text`, `daf-broken-interaction`, `daf-export-readback-failure`).
103
+
104
+ Skills wire this in: [`playwright-testing`](../../src/skills/playwright-testing/SKILL.md)
105
+ runs it when a browser primitive is present; [`design-review`](../../src/skills/design-review/SKILL.md)
106
+ gates its verdict on it; static decks / documents use the deck / PDF / document
107
+ verification path ([`html-deck`](../../src/skills/html-deck/SKILL.md),
108
+ [`markitdown`](../../src/skills/markitdown/SKILL.md) readback).
109
+
81
110
  ## Staged rollout
82
111
 
83
112
  Design-artifact fidelity rolls out in three stages so nothing becomes a hard
@@ -94,6 +94,7 @@ candidate; the human, seeing the evidence, makes the call.
94
94
 
95
95
  ## See also
96
96
 
97
+ - [`ADR-118`](../decisions/ADR-118-loop-engineering-boundaries.md) — engagement counts stay ONE input; the pruning decision is never automated (disposition #2).
97
98
  - [`local-analytics.md`](local-analytics.md) — the measurement events + privacy floor.
98
99
  - [`capability-packs.md`](capability-packs.md) — sibling per-pack budget governance.
99
100
  - [`ADR-041`](../decisions/ADR-041-controlled-command-verbs.md) — sibling command-surface governance.
@@ -192,6 +192,31 @@ Phase 7.4 ships a regression test that spawns two concurrent
192
192
  dispatcher invocations against the same event and asserts no torn
193
193
  writes (file ends with valid JSON, last-writer-wins).
194
194
 
195
+ ## Hook-resilience shim — every registered command degrades silently
196
+
197
+ Every hook command the installer registers (Claude managed block + plugin
198
+ `hooks/hooks.json`, Cursor, Windsurf, Gemini, the Augment trampoline) follows
199
+ one shape (road-to-opt-subagent-harvest P1.4):
200
+
201
+ 1. **Resolve the dispatcher** — project-local binary first, PATH fallback
202
+ where the platform supports it (Claude: `$CLAUDE_PROJECT_DIR/agent-config`
203
+ → `agent-config`).
204
+ 2. **Missing dispatcher → silent `exit 0`.** A hook must never error-spam or
205
+ block the agent loop on a repo where the suite is not (yet) installed.
206
+ This is the honest degrade even for `fail_closed` concerns: an absent
207
+ dispatcher cannot evaluate anything, so there is nothing to fail closed
208
+ ON — the deny power exists only where the suite exists.
209
+ 3. **Present dispatcher → exit code PROPAGATES.** No `|| true` around the
210
+ dispatch call itself: a `fail_closed: true` concern (e.g.
211
+ `block-no-verify`) keeps its deny. Fail-open of crashed concerns is
212
+ handled INSIDE `dispatch_hook.ts` per the manifest's `fail_closed` flag,
213
+ never by the outer shim.
214
+
215
+ The Augment trampoline (`src/scripts/hooks/augment-dispatcher.sh`) is the
216
+ reference implementation of the same contract in shell form (`set -u`,
217
+ silent bails, unconditional `exit 0` — Augment concerns are all
218
+ observe-only, so blanket exit 0 is correct there).
219
+
195
220
  ## Copilot fallback pattern
196
221
 
197
222
  Copilot has no hook surface. Concerns whose source rule cites
@@ -302,3 +302,38 @@ with the trigger-relaxed parameter, lock new value, re-attempt.
302
302
  | 2026-05-06 | `agents/runtime/council/sessions/20260506T044941Z-phase1-cross-check-r2.json` | Council R2 (3500 tokens) — locks median r, splits criterion #3, adds criterion #5, raises per-rule cap to 2.5k, defines abort criteria | <!-- council-ref-allowed: contract decision trace -->
303
303
  | 2026-05-06 | this file | kernel set locked: 9 rules, projected 23 071 chars (median r = 0.712) |
304
304
  | 2026-05-06 | P2.2 condensation + `scripts/iron_law_sha.py --all-kernel` | empirical: 25 590 chars (r_actual = 0.795 across kernel; longer rules condense less than the pilot median) — see `docs/decisions/ADR-002-kernel-bucket-overrides.md` (KERNEL_HARD raised 25k → 26k, 6 per-rule overrides ≤ 4k ceiling, all Iron-Law SHAs preserved) |
305
+
306
+ ## § 10 — Changing a protected invariant
307
+
308
+ The semantic-invariants gate (`src/scripts/check_rule_invariants.ts` over
309
+ `tests/golden/invariants.json`, 19 protected strings across the 9 kernel
310
+ rules) enforces string presence in BOTH `src/rules/` and the
311
+ `dist/agent-src/rules/` projection. String matching is deliberately the
312
+ current enforcement: it is zero-cost and trips on casual edits. Its known
313
+ brittleness — a semantically equivalent rewording breaks the gate — is
314
+ handled by process, not by weakening the gate.
315
+
316
+ **Rewording a protected string is allowed, but never "update the gate
317
+ green".** A PR that changes an entry in `tests/golden/invariants.json`
318
+ MUST:
319
+
320
+ 1. Name WHICH invariant changes and WHY the wording changes (PR body).
321
+ 2. State old/new side-by-side with an explicit assertion-equivalence
322
+ sentence ("the new wording still guarantees X").
323
+ 3. Re-run and quote `check_rule_invariants.ts --mutation-selftest` in the
324
+ PR (the selftest guards the checker against silently-green
325
+ normalisation bugs after the edit).
326
+ 4. Cite the behavioral eval covering the invariant where one exists; where
327
+ none exists, say so explicitly — an uncovered invariant rewording gets
328
+ extra review scrutiny, not less.
329
+
330
+ Kernel-edit slow-rollout rules (own PR, ≥ 24 h soak between kernel merges,
331
+ per `scope-control § kernel-rule-edits`) apply on top — the invariants file
332
+ is part of the kernel surface.
333
+
334
+ **ID migration is gated, not planned.** Migrating string fragments to
335
+ frontmatter invariant IDs happens only after behavioral evals cover ≥ 10
336
+ of the 19 invariants. Until then, IDs would claim guarantees nothing
337
+ verifies — an ID whose text drifted validates nothing, and that failure is
338
+ silent, unlike a string miss (council convergence, anthropic/
339
+ claude-sonnet-4-5 + openai/gpt-4o, 2026-07-10).
@@ -96,6 +96,7 @@ P2 roadmap reads — not the live `internal/bench/reports/` directory.
96
96
 
97
97
  ## Cross-references
98
98
 
99
+ - [`ADR-118`](../decisions/ADR-118-loop-engineering-boundaries.md) · bench-drift stays advisory by decision — never a blocking gate (disposition #4)
99
100
  - [`benchmark-report-schema.md`](benchmark-report-schema.md) · per-report JSON schema
100
101
  - [`benchmark-corpus-spec.md`](benchmark-corpus-spec.md) · corpus YAML schema
101
102
  - [`condensation-default-kill-criterion.md`](condensation-default-kill-criterion.md) · decision table read by step-4 closeout