@event4u/agent-config 9.9.0 → 9.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 (479) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +212 -194
  3. package/README.md +13 -16
  4. package/agents/templates/.ai-council.yml.example +481 -0
  5. package/agents/templates/.ai-video.xml.example +247 -0
  6. package/dist/agent-src/commands/agent-status.md +12 -11
  7. package/dist/agent-src/commands/agents/user/accept.md +115 -30
  8. package/dist/agent-src/commands/agents/user/delete.md +147 -0
  9. package/dist/agent-src/commands/agents/user/review.md +65 -28
  10. package/dist/agent-src/commands/agents/user/show.md +82 -29
  11. package/dist/agent-src/commands/agents/user/update.md +2 -2
  12. package/dist/agent-src/commands/agents/user.md +16 -3
  13. package/dist/agent-src/commands/check-current-md.md +0 -10
  14. package/dist/agent-src/commands/condense.md +28 -97
  15. package/dist/agent-src/commands/cost/report.md +7 -0
  16. package/dist/agent-src/commands/fix/portability.md +0 -8
  17. package/dist/agent-src/commands/fix/refs.md +0 -8
  18. package/dist/agent-src/commands/humanize.md +2 -2
  19. package/dist/agent-src/commands/jira-ticket.md +1 -1
  20. package/dist/agent-src/commands/memory/load.md +11 -0
  21. package/dist/agent-src/commands/optimize/skills.md +1 -1
  22. package/dist/agent-src/commands/pr/create.md +4 -4
  23. package/dist/agent-src/commands/profile/show.md +3 -3
  24. package/dist/agent-src/commands/rule-compliance-audit.md +5 -4
  25. package/dist/agent-src/commands/security-audit-config.md +1 -1
  26. package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
  27. package/dist/agent-src/commands/tdd.md +21 -0
  28. package/dist/agent-src/commands/team/delegate.md +2 -2
  29. package/dist/agent-src/commands/team-knowledge/bootstrap.md +9 -8
  30. package/dist/agent-src/commands/team-knowledge/consolidate.md +8 -7
  31. package/dist/agent-src/commands/team.md +4 -1
  32. package/dist/agent-src/commands/upstream-contribute.md +0 -1
  33. package/dist/agent-src/contexts/authority/commit-mechanics.md +7 -0
  34. package/dist/agent-src/contexts/authority/destructive-mechanics.md +16 -0
  35. package/dist/agent-src/contexts/authority/scope-mechanics.md +61 -0
  36. package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +20 -18
  37. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  38. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -1
  39. package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +9 -10
  40. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +1 -1
  41. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +11 -0
  42. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +26 -15
  43. package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +3 -0
  44. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +67 -37
  45. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
  46. package/dist/agent-src/contexts/execution/autonomy-examples.md +1 -1
  47. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +7 -6
  48. package/dist/agent-src/contexts/execution/evidence-discipline.md +92 -77
  49. package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +22 -21
  50. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +24 -0
  51. package/dist/agent-src/contexts/execution/project-intelligence.md +122 -103
  52. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +23 -21
  53. package/dist/agent-src/contexts/execution/subagent-response-contract.md +5 -5
  54. package/dist/agent-src/contexts/execution/subagent-routing.md +11 -0
  55. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +13 -13
  56. package/dist/agent-src/contexts/execution/subagent-steering.md +36 -34
  57. package/dist/agent-src/contexts/execution/toolchain-resolver.md +1 -1
  58. package/dist/agent-src/contexts/execution/user-memory-channels.md +189 -0
  59. package/dist/agent-src/contexts/execution/verification-mechanics.md +9 -0
  60. package/dist/agent-src/contexts/model-recommendations.md +3 -2
  61. package/dist/agent-src/contexts/subagent-configuration.md +3 -3
  62. package/dist/agent-src/ghostwriter/README.md +2 -2
  63. package/dist/agent-src/packs/README.md +1 -1
  64. package/dist/agent-src/personas/README.md +5 -5
  65. package/dist/agent-src/personas/_template-specialist/persona.md +3 -3
  66. package/dist/agent-src/personas/backend-architect.md +24 -23
  67. package/dist/agent-src/personas/eloquent-tamer.md +30 -30
  68. package/dist/agent-src/personas/frontend-engineer.md +30 -30
  69. package/dist/agent-src/personas/product-owner.md +41 -38
  70. package/dist/agent-src/personas/qa.md +13 -13
  71. package/dist/agent-src/personas/security-engineer.md +22 -22
  72. package/dist/agent-src/presets/README.md +3 -3
  73. package/dist/agent-src/profiles/README.md +3 -3
  74. package/dist/agent-src/rules/active-remediation.md +2 -2
  75. package/dist/agent-src/rules/artifact-engagement-recording.md +4 -4
  76. package/dist/agent-src/rules/ask-when-uncertain.md +0 -4
  77. package/dist/agent-src/rules/augment-edit-discipline.md +1 -1
  78. package/dist/agent-src/rules/broken-access-control.md +4 -4
  79. package/dist/agent-src/rules/code-comment-discipline.md +1 -1
  80. package/dist/agent-src/rules/code-provenance.md +2 -2
  81. package/dist/agent-src/rules/commit-policy.md +4 -9
  82. package/dist/agent-src/rules/communication-through-line.md +5 -5
  83. package/dist/agent-src/rules/decision-revisit-gate.md +1 -1
  84. package/dist/agent-src/rules/design-fidelity.md +1 -1
  85. package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
  86. package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
  87. package/dist/agent-src/rules/domain-safety-pii.md +1 -1
  88. package/dist/agent-src/rules/external-code-graph-interop.md +1 -1
  89. package/dist/agent-src/rules/fast-path-marker-visibility.md +43 -7
  90. package/dist/agent-src/rules/finance-safety-floor.md +1 -1
  91. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -3
  92. package/dist/agent-src/rules/history-discipline.md +1 -1
  93. package/dist/agent-src/rules/legal-safety-floor.md +1 -1
  94. package/dist/agent-src/rules/lethal-trifecta-guard.md +5 -5
  95. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +10 -8
  96. package/dist/agent-src/rules/media-governance-routing.md +13 -13
  97. package/dist/agent-src/rules/media-sync-ground-truth.md +29 -11
  98. package/dist/agent-src/rules/no-cheap-questions.md +7 -7
  99. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +29 -18
  100. package/dist/agent-src/rules/non-destructive-by-default.md +5 -23
  101. package/dist/agent-src/rules/onboarding-gate.md +14 -4
  102. package/dist/agent-src/rules/persona-governance.md +2 -2
  103. package/dist/agent-src/rules/prefer-enums-over-literals.md +9 -9
  104. package/dist/agent-src/rules/preservation-guard.md +10 -2
  105. package/dist/agent-src/rules/question-not-instruction.md +1 -1
  106. package/dist/agent-src/rules/roadmap-progress-sync.md +6 -6
  107. package/dist/agent-src/rules/rule-type-governance.md +1 -1
  108. package/dist/agent-src/rules/scale-discipline.md +1 -1
  109. package/dist/agent-src/rules/scope-control.md +1 -1
  110. package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
  111. package/dist/agent-src/rules/security-sensitive-stop.md +17 -11
  112. package/dist/agent-src/rules/senior-engineering-discipline.md +17 -17
  113. package/dist/agent-src/rules/session-canary.md +1 -1
  114. package/dist/agent-src/rules/skill-quality.md +1 -1
  115. package/dist/agent-src/rules/source-confidentiality.md +21 -19
  116. package/dist/agent-src/rules/source-of-truth.md +6 -5
  117. package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -2
  118. package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
  119. package/dist/agent-src/rules/think-before-action.md +5 -5
  120. package/dist/agent-src/rules/token-budget-discipline.md +5 -3
  121. package/dist/agent-src/rules/token-efficiency.md +2 -2
  122. package/dist/agent-src/rules/untrusted-input-defense.md +4 -4
  123. package/dist/agent-src/rules/user-interaction.md +12 -0
  124. package/dist/agent-src/rules/verify-before-complete.md +4 -24
  125. package/dist/agent-src/skills/adversarial-review/SKILL.md +2 -2
  126. package/dist/agent-src/skills/agent-security-review/SKILL.md +52 -45
  127. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
  128. package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +20 -20
  129. package/dist/agent-src/skills/ai-council/SKILL.md +185 -128
  130. package/dist/agent-src/skills/analysis-skill-router/SKILL.md +3 -3
  131. package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
  132. package/dist/agent-src/skills/artisan-commands/SKILL.md +2 -2
  133. package/dist/agent-src/skills/async-python-patterns/SKILL.md +8 -7
  134. package/dist/agent-src/skills/authz-review/SKILL.md +16 -15
  135. package/dist/agent-src/skills/aws-infrastructure/SKILL.md +5 -5
  136. package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
  137. package/dist/agent-src/skills/bug-analyzer/SKILL.md +30 -12
  138. package/dist/agent-src/skills/code-intelligence/SKILL.md +0 -1
  139. package/dist/agent-src/skills/code-intelligence/evals/triggers.json +52 -0
  140. package/dist/agent-src/skills/code-review/SKILL.md +6 -6
  141. package/dist/agent-src/skills/command-routing/SKILL.md +5 -4
  142. package/dist/agent-src/skills/composer-packages/SKILL.md +2 -2
  143. package/dist/agent-src/skills/condense-memory/SKILL.md +43 -41
  144. package/dist/agent-src/skills/context-document/SKILL.md +23 -21
  145. package/dist/agent-src/skills/copilot-config/SKILL.md +6 -1
  146. package/dist/agent-src/skills/decision-record/SKILL.md +20 -18
  147. package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
  148. package/dist/agent-src/skills/design-review/SKILL.md +15 -14
  149. package/dist/agent-src/skills/design-system-capture/reference/design-system-json.md +28 -25
  150. package/dist/agent-src/skills/devcontainer/SKILL.md +2 -2
  151. package/dist/agent-src/skills/docker/SKILL.md +1 -1
  152. package/dist/agent-src/skills/docx-authoring/evals/triggers.json +52 -0
  153. package/dist/agent-src/skills/emit-tickets/SKILL.md +2 -2
  154. package/dist/agent-src/skills/error-handling-patterns/SKILL.md +1 -1
  155. package/dist/agent-src/skills/estimate-ticket/SKILL.md +2 -2
  156. package/dist/agent-src/skills/evaluate-llm-feature/SKILL.md +0 -1
  157. package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +52 -0
  158. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +21 -7
  159. package/dist/agent-src/skills/fe-design/SKILL.md +10 -0
  160. package/dist/agent-src/skills/feature-planning/SKILL.md +2 -2
  161. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +3 -3
  162. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  163. package/dist/agent-src/skills/frontend-render-security/SKILL.md +13 -13
  164. package/dist/agent-src/skills/git-workflow/SKILL.md +33 -33
  165. package/dist/agent-src/skills/grafana/SKILL.md +5 -0
  166. package/dist/agent-src/skills/humanizer/SKILL.md +83 -66
  167. package/dist/agent-src/skills/humanizer/data/patterns.md +14 -14
  168. package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +4 -4
  169. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +82 -37
  170. package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +17 -5
  171. package/dist/agent-src/skills/judge-injection-defense/SKILL.md +63 -25
  172. package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -0
  173. package/dist/agent-src/skills/judge-synthesis/SKILL.md +72 -28
  174. package/dist/agent-src/skills/laravel-horizon/SKILL.md +5 -0
  175. package/dist/agent-src/skills/laravel-mail/SKILL.md +5 -4
  176. package/dist/agent-src/skills/laravel-middleware/SKILL.md +5 -4
  177. package/dist/agent-src/skills/laravel-notifications/SKILL.md +10 -9
  178. package/dist/agent-src/skills/laravel-pennant/SKILL.md +1 -1
  179. package/dist/agent-src/skills/laravel-pulse/SKILL.md +9 -8
  180. package/dist/agent-src/skills/laravel-reverb/SKILL.md +6 -5
  181. package/dist/agent-src/skills/laravel-scheduling/SKILL.md +6 -1
  182. package/dist/agent-src/skills/laravel-validation/SKILL.md +12 -0
  183. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  184. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +7 -7
  185. package/dist/agent-src/skills/learning-tutor/SKILL.md +44 -43
  186. package/dist/agent-src/skills/learning-tutor/evals/triggers.json +52 -0
  187. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +7 -7
  188. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +3 -3
  189. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +4 -4
  190. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +0 -1
  191. package/dist/agent-src/skills/memory-consolidation/SKILL.md +69 -64
  192. package/dist/agent-src/skills/motion-choreographer/SKILL.md +6 -6
  193. package/dist/agent-src/skills/pdf-tools/evals/triggers.json +52 -0
  194. package/dist/agent-src/skills/performance-analysis/SKILL.md +7 -3
  195. package/dist/agent-src/skills/persona-improvement/SKILL.md +0 -2
  196. package/dist/agent-src/skills/persona-improvement/evals/triggers.json +52 -0
  197. package/dist/agent-src/skills/php-coder/SKILL.md +10 -0
  198. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +129 -120
  199. package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +36 -35
  200. package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +45 -41
  201. package/dist/agent-src/skills/project-analysis-core/SKILL.md +4 -4
  202. package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
  203. package/dist/agent-src/skills/project-analysis-react/SKILL.md +1 -1
  204. package/dist/agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
  205. package/dist/agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
  206. package/dist/agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -1
  207. package/dist/agent-src/skills/prompt-validator/SKILL.md +39 -39
  208. package/dist/agent-src/skills/quality-tools/SKILL.md +15 -15
  209. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +55 -19
  210. package/dist/agent-src/skills/react-shadcn-ui/reference/registry.md +29 -27
  211. package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -2
  212. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +25 -25
  213. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -5
  214. package/dist/agent-src/skills/refine-prompt/SKILL.md +1 -1
  215. package/dist/agent-src/skills/refine-ticket/SKILL.md +20 -2
  216. package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
  217. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  218. package/dist/agent-src/skills/roadmap-management/SKILL.md +80 -66
  219. package/dist/agent-src/skills/roadmap-writing/SKILL.md +84 -77
  220. package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
  221. package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +52 -0
  222. package/dist/agent-src/skills/security-audit/SKILL.md +26 -9
  223. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +38 -16
  224. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +14 -11
  225. package/dist/agent-src/skills/skill-writing/SKILL.md +9 -8
  226. package/dist/agent-src/skills/song-to-script/SKILL.md +93 -85
  227. package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
  228. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +4 -3
  229. package/dist/agent-src/skills/standards-from-config/SKILL.md +61 -43
  230. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +22 -8
  231. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +28 -2
  232. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +13 -13
  233. package/dist/agent-src/skills/systematic-debugging/SKILL.md +22 -21
  234. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
  235. package/dist/agent-src/skills/technical-specification/SKILL.md +5 -0
  236. package/dist/agent-src/skills/terraform/SKILL.md +2 -2
  237. package/dist/agent-src/skills/terragrunt/SKILL.md +8 -8
  238. package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +1 -1
  239. package/dist/agent-src/skills/threat-modeling/SKILL.md +19 -13
  240. package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  241. package/dist/agent-src/skills/upstream-contribute/SKILL.md +0 -1
  242. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +9 -9
  243. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -1
  244. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +4 -6
  245. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +67 -61
  246. package/dist/agent-src/skills/video-director/SKILL.md +7 -7
  247. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +3 -3
  248. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  249. package/dist/agent-src/templates/contexts/knowledge-pages.md +47 -45
  250. package/dist/agent-src/templates/contexts/lesson-card.md +2 -2
  251. package/dist/agent-src/templates/contexts/tenant-boundaries.md +2 -2
  252. package/dist/agent-src/templates/contexts.md +1 -1
  253. package/dist/agent-src/templates/features.md +1 -1
  254. package/dist/agent-src/templates/roadmaps.md +125 -116
  255. package/dist/agent-src/templates/rule.md +2 -1
  256. package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  257. package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  258. package/dist/agent-src/templates/scripts/tier_usage_report.ts +2 -2
  259. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +30 -30
  260. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +88 -33
  261. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +22 -2
  262. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +21 -2
  263. package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +179 -0
  264. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +155 -4
  265. package/dist/agent-src/templates/scripts/work_engine/state.ts +21 -4
  266. package/dist/agent-src/user-types/README.md +8 -8
  267. package/dist/agent-src/user-types/galabau-field-crew.md +34 -33
  268. package/dist/agent-src/user-types/metalworking-shop.md +35 -34
  269. package/dist/agent-src/user-types/truck-driver.md +22 -20
  270. package/dist/cli/initRouting.js +74 -11
  271. package/dist/cli/initRouting.js.map +1 -1
  272. package/dist/cli/main.js +14 -3
  273. package/dist/cli/main.js.map +1 -1
  274. package/dist/cli/python/workspace_roles.js +2 -2
  275. package/dist/cli/python/workspace_roles.js.map +1 -1
  276. package/dist/cli-delegate/chunk-4SV3XGFA.js +6910 -0
  277. package/dist/cli-delegate/chunk-736JCWLM.js +1104 -0
  278. package/dist/cli-delegate/chunk-7DSAMZFU.js +356 -0
  279. package/dist/cli-delegate/chunk-7HQ52DHU.js +74 -0
  280. package/dist/cli-delegate/chunk-BJGXZNPM.js +266 -0
  281. package/dist/cli-delegate/chunk-FTAISGDQ.js +117 -0
  282. package/dist/cli-delegate/chunk-GME3Q44L.js +82 -0
  283. package/dist/cli-delegate/chunk-GRRPEPRN.js +336 -0
  284. package/dist/cli-delegate/chunk-HJ6DAJHR.js +502 -0
  285. package/dist/cli-delegate/chunk-IR7P7JWA.js +872 -0
  286. package/dist/cli-delegate/chunk-J55WI3RR.js +47 -0
  287. package/dist/cli-delegate/chunk-MCJYCQPF.js +35 -0
  288. package/dist/cli-delegate/chunk-NDJLNC6Q.js +169 -0
  289. package/dist/cli-delegate/chunk-OMIVVCG2.js +26 -0
  290. package/dist/cli-delegate/chunk-OY53J6II.js +7336 -0
  291. package/dist/cli-delegate/chunk-RDGRHAAB.js +259 -0
  292. package/dist/cli-delegate/chunk-TFG57JJM.js +1969 -0
  293. package/dist/cli-delegate/chunk-XX6TOPD7.js +715 -0
  294. package/dist/cli-delegate/chunk-YMFO6FDN.js +10603 -0
  295. package/dist/cli-delegate/cmd_analyze_session.js +294 -0
  296. package/dist/cli-delegate/cmd_conformance.js +646 -0
  297. package/dist/cli-delegate/cmd_converge.js +326 -0
  298. package/dist/cli-delegate/cmd_doctor.js +144 -0
  299. package/dist/cli-delegate/cmd_explain.js +2508 -0
  300. package/dist/cli-delegate/cmd_export.js +296 -0
  301. package/dist/cli-delegate/cmd_fleet.js +332 -0
  302. package/dist/cli-delegate/cmd_memory_get.js +3878 -0
  303. package/dist/cli-delegate/cmd_migrate.js +11 -0
  304. package/dist/cli-delegate/cmd_preflight.js +270 -0
  305. package/dist/cli-delegate/cmd_prune.js +444 -0
  306. package/dist/cli-delegate/cmd_refresh.js +28 -0
  307. package/dist/cli-delegate/cmd_settings_check.js +574 -0
  308. package/dist/cli-delegate/cmd_settings_migrate.js +223 -0
  309. package/dist/cli-delegate/cmd_sync.js +264 -0
  310. package/dist/cli-delegate/cmd_uninstall.js +656 -0
  311. package/dist/cli-delegate/cmd_update.js +425 -0
  312. package/dist/cli-delegate/cmd_upgrade.js +444 -0
  313. package/dist/cli-delegate/cmd_validate.js +305 -0
  314. package/dist/cli-delegate/cmd_versions.js +370 -0
  315. package/dist/discovery/deprecation-report.md +1 -1
  316. package/dist/discovery/discovery-manifest.json +100 -67
  317. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  318. package/dist/discovery/discovery-manifest.summary.md +4 -4
  319. package/dist/discovery/orphan-report.md +1 -1
  320. package/dist/discovery/packs.json +16 -10
  321. package/dist/discovery/trust-report.md +2 -2
  322. package/dist/discovery/workspaces.json +7 -5
  323. package/dist/hooks/dispatch.js +186 -12
  324. package/dist/install/emit_host_rules_cli.js +2 -1
  325. package/dist/install/emit_host_rules_cli.js.map +1 -1
  326. package/dist/install/install.mjs +418 -378
  327. package/dist/install/rule_scope.js +5 -1
  328. package/dist/install/rule_scope.js.map +1 -1
  329. package/dist/install/toolDetection.js +40 -12
  330. package/dist/install/toolDetection.js.map +1 -1
  331. package/dist/install/wizard-plan.js +2 -2
  332. package/dist/install/wizard-plan.js.map +1 -1
  333. package/dist/mcp/registry-manifest.json +3 -3
  334. package/dist/mcp/server.json +2 -2
  335. package/dist/mcp/server.mjs +2194 -1003
  336. package/dist/router.json +1 -1
  337. package/dist/scripts/_lib/compile_time_toggles.js +48 -0
  338. package/dist/scripts/_lib/compile_time_toggles.js.map +1 -0
  339. package/dist/scripts/condense.js +234 -217
  340. package/dist/scripts/condense.js.map +1 -1
  341. package/dist/server/schemas/settings.js +4 -0
  342. package/dist/server/schemas/settings.js.map +1 -1
  343. package/dist/shared/userMd/utils.js +30 -0
  344. package/dist/shared/userMd/utils.js.map +1 -1
  345. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -1
  346. package/docs/guidelines/agent-infra/api-cost-levers.md +56 -5
  347. package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +93 -33
  348. package/package.json +4 -2
  349. package/src/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  350. package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  351. package/src/agent-src/templates/scripts/tier_usage_report.ts +2 -2
  352. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +30 -30
  353. package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +88 -33
  354. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +22 -2
  355. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +21 -2
  356. package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +179 -0
  357. package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +155 -4
  358. package/src/agent-src/templates/scripts/work_engine/state.ts +21 -4
  359. package/src/config/agent-settings.template.yml +32 -2
  360. package/src/config/ci-local-parity.yml +142 -0
  361. package/src/config/discovery/packs.yml +7 -0
  362. package/src/config/evaluator-budgets.json +1 -1
  363. package/src/config/gate-coverage.yml +127 -0
  364. package/src/config/pack-size-budget.json +27 -0
  365. package/src/config/preamble-payload-budget.json +44 -0
  366. package/src/install/emit_host_rules_cli.ts +2 -1
  367. package/src/install/rule_scope.ts +5 -1
  368. package/src/install/toolDetection.ts +39 -8
  369. package/src/install/wizard-plan.ts +2 -2
  370. package/src/scripts/_cli/cmd_conformance.ts +2 -1
  371. package/src/scripts/_cli/cmd_converge.ts +2 -1
  372. package/src/scripts/_cli/cmd_doctor.ts +292 -15
  373. package/src/scripts/_cli/cmd_export.ts +2 -1
  374. package/src/scripts/_cli/cmd_fleet.ts +2 -1
  375. package/src/scripts/_cli/cmd_migrate.ts +2 -1
  376. package/src/scripts/_cli/cmd_preflight.ts +2 -1
  377. package/src/scripts/_cli/cmd_refresh.ts +2 -1
  378. package/src/scripts/_cli/cmd_update.ts +2 -1
  379. package/src/scripts/_cli/cmd_upgrade.ts +2 -1
  380. package/src/scripts/_cli/cmd_versions.ts +2 -1
  381. package/src/scripts/_cli/detection_report.ts +480 -0
  382. package/src/scripts/_dispatch.bash +52 -14
  383. package/src/scripts/_lib/agent_user_profile.ts +381 -0
  384. package/src/scripts/_lib/agents_overlay.ts +9 -0
  385. package/src/scripts/_lib/anchor_eval.ts +311 -0
  386. package/src/scripts/_lib/cc_transcript.ts +316 -0
  387. package/src/scripts/_lib/changelog_eras.ts +103 -9
  388. package/src/scripts/_lib/compile_time_toggles.ts +79 -0
  389. package/src/scripts/_lib/confusables.ts +101 -0
  390. package/src/scripts/_lib/duplicate_scope_census.ts +77 -0
  391. package/src/scripts/_lib/environment_detector.ts +441 -0
  392. package/src/scripts/_lib/managed_agents_folder.ts +181 -0
  393. package/src/scripts/_lib/package_root.ts +72 -0
  394. package/src/scripts/_lib/payload_hash_drift.ts +126 -0
  395. package/src/scripts/_lib/preservation_migration.ts +291 -0
  396. package/src/scripts/_lib/retrieval_sanitize.ts +166 -2
  397. package/src/scripts/_lib/scan_scope.ts +115 -0
  398. package/src/scripts/_lib/user_global_memory_audit.ts +187 -0
  399. package/src/scripts/_lib/user_global_observations.ts +830 -0
  400. package/src/scripts/_lib/user_global_revocations.ts +110 -0
  401. package/src/scripts/_lib/user_memory_gate_counters.ts +291 -0
  402. package/src/scripts/ai_council/blind_review.ts +0 -0
  403. package/src/scripts/ai_council/budget_guard.ts +90 -11
  404. package/src/scripts/ai_council/bundler.ts +2 -2
  405. package/src/scripts/ai_council/clients.ts +59 -3
  406. package/src/scripts/ai_council/config.ts +53 -7
  407. package/src/scripts/ai_council/modes.ts +68 -2
  408. package/src/scripts/ai_council/orchestrator.ts +54 -9
  409. package/src/scripts/ai_council/transport_resolver.ts +331 -0
  410. package/src/scripts/ai_team/team_dispatch.ts +17 -6
  411. package/src/scripts/anchor_eval_falsify.ts +198 -0
  412. package/src/scripts/anchor_scoring_run.ts +239 -0
  413. package/src/scripts/annotate_discovery.ts +1 -65
  414. package/src/scripts/bench_quality_run.ts +168 -4
  415. package/src/scripts/cache_realization_report.ts +782 -0
  416. package/src/scripts/check_artefact_count_messaging.ts +5 -1
  417. package/src/scripts/check_augment_description_cap.ts +15 -4
  418. package/src/scripts/check_bundle_path_leakage.ts +10 -4
  419. package/src/scripts/check_ci_local_parity.ts +317 -0
  420. package/src/scripts/check_condensation.ts +96 -191
  421. package/src/scripts/check_context_paths.ts +38 -9
  422. package/src/scripts/check_dependency_floors.ts +153 -0
  423. package/src/scripts/check_gate_coverage.ts +299 -0
  424. package/src/scripts/check_iron_law_prominence.ts +22 -1
  425. package/src/scripts/check_kernel_prefix_stability.ts +0 -0
  426. package/src/scripts/check_no_new_legacy_path.ts +16 -6
  427. package/src/scripts/check_no_roadmap_refs.ts +22 -9
  428. package/src/scripts/check_originality_freshness.ts +167 -0
  429. package/src/scripts/check_pack_size.ts +188 -0
  430. package/src/scripts/check_preamble_payload_budget.ts +130 -0
  431. package/src/scripts/check_proposal.ts +0 -0
  432. package/src/scripts/check_references.ts +0 -1
  433. package/src/scripts/check_safety_floor_untouched.ts +171 -24
  434. package/src/scripts/check_site_links.ts +62 -3
  435. package/src/scripts/ci_status.ts +0 -0
  436. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  437. package/src/scripts/code_graph/build.ts +0 -0
  438. package/src/scripts/command_suggester/types.ts +0 -0
  439. package/src/scripts/compile_router.ts +10 -14
  440. package/src/scripts/condense.sh +3 -4
  441. package/src/scripts/condense.ts +247 -228
  442. package/src/scripts/cost/track.mjs +168 -33
  443. package/src/scripts/cost_summary.ts +33 -1
  444. package/src/scripts/council_cli.ts +51 -5
  445. package/src/scripts/discovery_graph.ts +0 -0
  446. package/src/scripts/encoding_corpus.ts +500 -0
  447. package/src/scripts/encoding_corpus_report.ts +216 -0
  448. package/src/scripts/evaluator_umbrella.sh +34 -1
  449. package/src/scripts/generate_index.ts +19 -2
  450. package/src/scripts/install-hooks.sh +2 -2
  451. package/src/scripts/learning_sidecar.ts +0 -0
  452. package/src/scripts/lint_confusables.ts +10 -72
  453. package/src/scripts/lint_eval_fixture_citations.ts +113 -0
  454. package/src/scripts/lint_featured_skills.ts +0 -0
  455. package/src/scripts/lint_hidden_unicode.ts +208 -0
  456. package/src/scripts/lint_load_context.ts +17 -5
  457. package/src/scripts/lint_new_skill_gate.ts +9 -3
  458. package/src/scripts/lint_no_python_twin_rationale.ts +17 -2
  459. package/src/scripts/lint_originality.ts +1 -1
  460. package/src/scripts/lint_skill_originality.ts +1 -1
  461. package/src/scripts/lint_ticket_buildable.ts +1 -1
  462. package/src/scripts/lint_ui_stack_bundles.ts +170 -0
  463. package/src/scripts/mcp_server/tools.ts +4 -4
  464. package/src/scripts/measure_scope_dedup.ts +224 -0
  465. package/src/scripts/memory_lookup.ts +0 -0
  466. package/src/scripts/mine_session.ts +98 -0
  467. package/src/scripts/orchestration_payload_hash_drift.ts +145 -0
  468. package/src/scripts/preamble_byte_census.ts +574 -0
  469. package/src/scripts/probe_skill_registration.ts +2 -2
  470. package/src/scripts/redact_hook_capture.ts +13 -0
  471. package/src/scripts/release.ts +65 -10
  472. package/src/scripts/router_telemetry.ts +1 -1
  473. package/src/scripts/second_brain_retrieval.ts +14 -4
  474. package/src/scripts/skill_linter.ts +5 -0
  475. package/src/scripts/surface-tiers.yml +2 -0
  476. package/src/scripts/validate_pack_yaml.ts +0 -0
  477. package/src/server/schemas/settings.ts +8 -0
  478. package/src/shared/userMd/utils.ts +31 -0
  479. package/dist/agent-src/rules/telegraph-speak.md +0 -87
@@ -109,18 +109,69 @@ different model.
109
109
 
110
110
  ## Claude Code note
111
111
 
112
- In Claude Code, prompt caching is automatic — resending the same context prefix
113
- is cheap, so keeping a stable prefix pays off without any explicit
114
- `cache_control`. The session-level hygiene levers are `/clear` and `/compact` to
115
- shed accumulated context, plus subagent delegation for verbose output so it
116
- never lands in the main context window.
112
+ In Claude Code, prompt caching is automatic for the **main loop** — resending
113
+ the same context prefix is cheap, so keeping a stable prefix pays off without
114
+ any explicit `cache_control`. The session-level hygiene levers are `/clear`
115
+ and `/compact` to shed accumulated context, plus subagent delegation for
116
+ verbose output so it never lands in the main context window.
117
+
118
+ **Subagents and forks pay a different cache economy — verified against host
119
+ version 2.1.220 (2026-07-30), re-check on drift:**
120
+
121
+ - A **named subagent** starts its own conversation with its own system
122
+ prompt and tool set. It builds its own cache from scratch, so its **first
123
+ call has no cache hit** — the entire per-spawn preamble (rules, tools,
124
+ dispatch prompt) is a cold write. Subagents use the **five-minute TTL**
125
+ even on a subscription; there is no per-agent setting to change that (see
126
+ `## Known upstream costs` below).
127
+ - A **fork** inherits the parent's system prompt, tools, and conversation
128
+ history exactly, so its first request **reads the parent's cache** instead
129
+ of writing a fresh one — the only documented mechanism that shares a cache
130
+ across a dispatch boundary. Forking forces background mode, which changes
131
+ the tool set and therefore invalidates the very prefix that motivated the
132
+ fork; weigh that cost before reaching for it — see the fork-vs-subagent
133
+ ordering rule in See also.
134
+ - Either way, the **cold-start preamble is re-written on every spawn** — the
135
+ always-loaded rule set, the tool definitions, and the dispatch prompt are
136
+ not shared across separate subagent instances. Fan-out (many subagents
137
+ from one parent) multiplies this cost by cohort size; see
138
+ `## Known upstream costs` below for the fan-out re-prefill issue this
139
+ package cannot fix.
140
+
141
+ ## Known upstream costs
142
+
143
+ Host-controlled behaviour this package has confirmed but cannot change at
144
+ any layer. Each entry carries the host version observed and the command to
145
+ re-verify it — a stale entry degrades into a dated observation, never a
146
+ false promise, when Anthropic changes the behaviour underneath it.
147
+
148
+ | Cost | Observed on | Re-verify |
149
+ |---|---|---|
150
+ | Fan-out (`do-in-parallel`-shaped dispatch) re-prefills the parent-accumulated context **per child** — the waste scales linearly with fan-out width, worst exactly where fan-out is most valuable (anthropics/claude-code#81389, open). No fix at any layer. | Claude Code 2.1.220, 2026-07-30 | `claude --version`; re-check the linked issue for a status change |
151
+ | Host-dispatched subagents are pinned to the **five-minute** cache TTL regardless of subscription tier or any environment variable; `ENABLE_PROMPT_CACHING_1H` does not apply to them. | Claude Code 2.1.220, 2026-07-30 | `claude --version`; re-check the official caching docs for a subagent-TTL setting |
152
+
153
+ Neither entry implies a package-side fix exists or is planned — both are
154
+ request-construction facts inside the host binary, outside this package's
155
+ reach. This package's own scope is measurement and payload size (what it
156
+ authors), never subagent request construction (what the host authors).
117
157
 
118
158
  ## See also
119
159
 
160
+ - [`cache-economy-refusals`](../../../agents/settings/contexts/cache-economy-refusals.md) —
161
+ the measured cache figures behind the Claude Code note above, plus the
162
+ refusals (no interception proxy, no blanket 1h TTL, no cache-hit auto-tuning)
163
+ recorded so they are not rebuilt.
164
+
120
165
  - [`model-recommendation.md`](model-recommendation.md) — tier routing (the
121
166
  capability band behind lever 3).
122
167
  - [`size-and-scope.md`](size-and-scope.md) — token discipline for the artifacts
123
168
  that become the cached prefix.
169
+ - [`subagent-orchestration/prompts/README.md`](../../../src/skills/subagent-orchestration/prompts/README.md)
170
+ § Prompt-cache discipline — sibling-uniformity rules and the
171
+ fork-vs-subagent dispatch ordering that follow from this cache economy.
172
+ - [`docs/contracts/ai-council-config.md`](../../contracts/ai-council-config.md)
173
+ § `prompt_cache.ttl` — the one surface where this package DOES control a
174
+ cache-control TTL (the council's own Anthropic calls, never host subagents).
124
175
  - The Claude Code `claude-api` plugin skill (external, not vendored here) — the
125
176
  authoritative, versioned API reference these figures derive from; re-check it
126
177
  when Anthropic pricing or the caching/batch surface changes.
@@ -1,3 +1,13 @@
1
+ ---
2
+ demo_for: minimal-safe-diff, think-before-action
3
+ layer: pattern-memory
4
+ prose_delta:
5
+ rule_chars_before: 5927
6
+ rule_chars_after: 6903
7
+ measured_at: lint-examples-shape-conformance-pass
8
+ note: "Counts are of THIS demo file, measured with wc -c before and after the pass. The delta is frontmatter plus the Demo / Wrong shape / Right shape / Failure mode / Why it works headings required by lint_examples — no prose was migrated out of a rule and none was removed; every code block is byte-identical."
9
+ ---
10
+
1
11
  # Simplicity and Goal Discipline — wrong/right demos
2
12
 
3
13
  Recognition surface for [`minimal-safe-diff § Anti-over-engineering`](../../src/rules/minimal-safe-diff.md)
@@ -7,11 +17,13 @@ execution clause in `think-before-action`. Per council convergence
7
17
  the violation cannot recognize it, no matter how crisp the checklist question.
8
18
  Match your diff against the *right* column before presenting.
9
19
 
10
- ## 1. Over-abstraction vs. one function
20
+ ## Demo 1 — Over-abstraction vs. one function
11
21
 
12
22
  **Ask:** "Add a function to calculate a percentage discount."
13
23
 
14
- **Wrong — Strategy pattern for a single caller (PHP):**
24
+ ### Wrong shape
25
+
26
+ Strategy pattern for a single caller (PHP):
15
27
 
16
28
  ```php
17
29
  interface DiscountStrategy { public function calculate(float $amount): float; }
@@ -21,7 +33,13 @@ final readonly class DiscountConfig { /* strategy, minPurchase, maxDiscount */ }
21
33
  final class DiscountCalculator { /* 30+ lines of orchestration */ }
22
34
  ```
23
35
 
24
- **Right — one function until the second discount type is real:**
36
+ **Failure mode:** the wrong version is not "bad code" — it is *premature*
37
+ code: harder to read, more surface to test, and speculative until the
38
+ requirement exists.
39
+
40
+ ### Right shape
41
+
42
+ One function until the second discount type is real:
25
43
 
26
44
  ```php
27
45
  function calculateDiscount(float $amount, float $percent): float
@@ -30,17 +48,19 @@ function calculateDiscount(float $amount, float $percent): float
30
48
  }
31
49
  ```
32
50
 
33
- **Why:** No second caller, no second strategy → no abstraction. When the
51
+ ### Why it works
52
+
53
+ No second caller, no second strategy → no abstraction. When the
34
54
  second type genuinely arrives, refactor then (`prefer-enums-over-literals` /
35
- Strategy sniff test governs that moment). The wrong version is not "bad
36
- code" — it is *premature* code: harder to read, more surface to test, and
37
- speculative until the requirement exists.
55
+ Strategy sniff test governs that moment).
38
56
 
39
- ## 2. Speculative features vs. just-what-was-asked
57
+ ## Demo 2 — Speculative features vs. just-what-was-asked
40
58
 
41
59
  **Ask:** "Save user preferences to the database."
42
60
 
43
- **Wrong — options nobody requested (TypeScript):**
61
+ ### Wrong shape
62
+
63
+ Options nobody requested (TypeScript):
44
64
 
45
65
  ```ts
46
66
  class PreferenceManager {
@@ -52,7 +72,13 @@ class PreferenceManager {
52
72
  }
53
73
  ```
54
74
 
55
- **Right — the ask, nothing else:**
75
+ **Failure mode:** every optional parameter with one call site, every
76
+ "flexibility" flag, and every handler for a scenario that cannot occur is
77
+ speculative complexity.
78
+
79
+ ### Right shape
80
+
81
+ The ask, nothing else:
56
82
 
57
83
  ```ts
58
84
  async function savePreferences(db: Db, userId: number, prefs: Prefs) {
@@ -61,66 +87,94 @@ async function savePreferences(db: Db, userId: number, prefs: Prefs) {
61
87
  }
62
88
  ```
63
89
 
64
- **Why:** Every optional parameter with one call site, every "flexibility"
65
- flag, and every handler for a scenario that cannot occur is speculative
66
- complexity. Add caching when performance data demands it, validation when bad
90
+ ### Why it works
91
+
92
+ Add caching when performance data demands it, validation when bad
67
93
  data appears, merging when the requirement lands.
68
94
 
69
- ## 3. Drive-by refactor vs. surgical diff
95
+ ## Demo 3 — Drive-by refactor vs. surgical diff
70
96
 
71
97
  **Ask:** "Fix the bug where an empty email crashes the validator."
72
98
 
73
- **Wrong:** the fix PLUS improved email regex, new username length checks,
99
+ ### Wrong shape
100
+
101
+ The fix PLUS improved email regex, new username length checks,
74
102
  rewritten comments, and a fresh docstring — four changes, one was asked.
75
103
 
76
- **Right:** only the lines that make the empty-email case safe change; every
104
+ **Failure mode:** the "improvements" belong in a follow-up proposed via
105
+ `active-remediation`'s note-and-ask ladder — not smuggled into the bug fix.
106
+
107
+ ### Right shape
108
+
109
+ Only the lines that make the empty-email case safe change; every
77
110
  other line of the function is byte-identical.
78
111
 
79
- **Why:** Every changed line must trace to the stated task
80
- (`minimal-safe-diff`). The "improvements" belong in a follow-up proposed via
81
- `active-remediation`'s note-and-ask ladder — not smuggled into the bug fix.
112
+ ### Why it works
82
113
 
83
- ## 4. Style drift vs. match-existing-style
114
+ Every changed line must trace to the stated task
115
+ (`minimal-safe-diff`).
116
+
117
+ ## Demo 4 — Style drift vs. match-existing-style
84
118
 
85
119
  **Ask:** "Add logging to the upload function."
86
120
 
87
- **Wrong:** the diff adds logging AND flips quote style, adds type hints,
121
+ ### Wrong shape
122
+
123
+ The diff adds logging AND flips quote style, adds type hints,
88
124
  reshapes the boolean return, reflows whitespace — the reviewer can no longer
89
125
  see the logging change.
90
126
 
91
- **Right:** logger import + three log lines, inserted in the file's existing
127
+ **Failure mode:** a diff that reformats while changing behavior hides the
128
+ behavior change.
129
+
130
+ ### Right shape
131
+
132
+ Logger import + three log lines, inserted in the file's existing
92
133
  style (its quoting, its spacing, its return pattern), even where you would
93
134
  personally write it differently.
94
135
 
95
- **Why:** Style consistency is a repo property, not a per-diff taste decision.
96
- A diff that reformats while changing behavior hides the behavior change.
136
+ ### Why it works
97
137
 
98
- ## 5. Own-orphan vs. pre-existing dead code
138
+ Style consistency is a repo property, not a per-diff taste decision.
139
+
140
+ ## Demo 5 — Own-orphan vs. pre-existing dead code
99
141
 
100
142
  **Ask:** "Replace the legacy formatter call in `processA` with the new one."
101
143
 
102
- **Wrong (too little):** `processA` no longer calls `legacyFormat()`, but the
144
+ ### Wrong shape
145
+
146
+ **Too little:** `processA` no longer calls `legacyFormat()`, but the
103
147
  now-unused import and the helper it alone referenced stay behind — the diff
104
148
  shipped its own litter.
105
149
 
106
- **Wrong (too much):** while in the file, the agent also deletes
150
+ **Too much:** while in the file, the agent also deletes
107
151
  `oldHelper()`, which `processB` — untouched by this diff — still references
108
152
  in another module, or which was already orphaned *before* this task.
109
153
 
110
- **Right:** remove exactly the imports/variables/functions whose **last
154
+ **Failure mode:** two directions of the same error — the diff shipped its own
155
+ litter (too little), or it deleted code that untouched files still reference,
156
+ or that was already orphaned before this task (too much).
157
+
158
+ ### Right shape
159
+
160
+ Remove exactly the imports/variables/functions whose **last
111
161
  reference disappeared in a file this diff touched**; anything still
112
162
  referenced from untouched files — or orphaned before the task — is
113
163
  pre-existing debt: mention it, don't delete it.
114
164
 
115
- **Why:** The boundary is mechanical (grep after editing), so there is no
165
+ ### Why it works
166
+
167
+ The boundary is mechanical (grep after editing), so there is no
116
168
  judgment call to rationalize — see
117
169
  [`minimal-safe-diff § Own-orphan cleanup`](../../src/rules/minimal-safe-diff.md#own-orphan-cleanup).
118
170
 
119
- ## 6. Vague plan vs. verifiable per-step plan
171
+ ## Demo 6 — Vague plan vs. verifiable per-step plan
120
172
 
121
173
  **Ask:** "Add rate limiting to the API."
122
174
 
123
- **Wrong — unverifiable narration:**
175
+ ### Wrong shape
176
+
177
+ Unverifiable narration:
124
178
 
125
179
  ```
126
180
  1. Review the code
@@ -129,7 +183,11 @@ judgment call to rationalize — see
129
183
  4. Test the changes
130
184
  ```
131
185
 
132
- **Right — every step carries its check:**
186
+ **Failure mode:** a step without a `verify:` is an assumption.
187
+
188
+ ### Right shape
189
+
190
+ Every step carries its check:
133
191
 
134
192
  ```
135
193
  1. In-memory limit on one endpoint → verify: 11th request in a minute → 429 (test)
@@ -137,7 +195,9 @@ judgment call to rationalize — see
137
195
  3. Shared store backend → verify: counter survives app restart; two instances share the count
138
196
  ```
139
197
 
140
- **Why:** A step without a `verify:` is an assumption. Strong criteria let the
198
+ ### Why it works
199
+
200
+ Strong criteria let the
141
201
  loop run independently (`verify-before-complete` then has something to
142
202
  check); "make it work" guarantees clarification churn after the fact instead
143
203
  of before.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
3
  "mcpName": "io.github.event4u-app/agent-config",
4
- "version": "9.9.0",
4
+ "version": "9.11.0",
5
5
  "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including \"zero runtime daemon\".",
6
6
  "license": "MIT",
7
7
  "private": false,
@@ -34,6 +34,7 @@
34
34
  ".augment-plugin/",
35
35
  ".claude-plugin/",
36
36
  "src/config/",
37
+ "agents/templates/",
37
38
  "dist/",
38
39
  "docs/guidelines/",
39
40
  "docs/contracts/persona-schema.md",
@@ -65,13 +66,14 @@
65
66
  "build:install-bundle": "esbuild src/scripts/install.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/install/install.mjs --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);\"",
66
67
  "build:hooks": "esbuild src/scripts/hooks/dispatch_entry.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/hooks/dispatch.js --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url); const __acPath = require('node:path'); const __acFs = require('node:fs'); const __acUrl = require('node:url'); const __acReal = (p) => { try { return __acFs.realpathSync(p); } catch { return p; } }; const __acSelf = __acReal(__acUrl.fileURLToPath(import.meta.url)); if (process.argv[1] !== undefined && __acReal(__acPath.resolve(process.argv[1])) === __acSelf) { globalThis.__AC_HOOKS_BUNDLE_DIRECT = true; process.argv = [process.argv[0], __acSelf + '.__direct__', ...process.argv.slice(2)]; }\"",
67
68
  "build:mcp-bundle": "esbuild src/scripts/mcp_server/__main__.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/mcp/server.mjs --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url); const __acPath = require('node:path'); const __acFs = require('node:fs'); const __acUrl = require('node:url'); const __acReal = (p) => { try { return __acFs.realpathSync(p); } catch { return p; } }; const __acSelf = __acReal(__acUrl.fileURLToPath(import.meta.url)); if (process.argv[1] !== undefined && __acReal(__acPath.resolve(process.argv[1])) === __acSelf) { globalThis.__AC_MCP_BUNDLE_DIRECT = true; process.argv = [process.argv[0], __acSelf + '.__direct__', ...process.argv.slice(2)]; }\"",
69
+ "build:cli-delegate": "esbuild src/scripts/_cli/cmd_*.ts --bundle --splitting --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outdir=dist/cli-delegate --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);\"",
68
70
  "build:ui": "vite build",
69
71
  "tokens:build": "node tokens/build-ac.mjs && node tokens/build-as.mjs",
70
72
  "tokens:check": "node tokens/build-ac.mjs --check && node tokens/build-as.mjs --check && node tokens/check-contrast.mjs",
71
73
  "build:discovery": "./scripts-run src/scripts/build_discovery_manifest --write --strict",
72
74
  "build:mcp-manifest": "./scripts-run src/scripts/build_mcp_registry_manifest --write --strict",
73
75
  "build:mcp-catalog": "./scripts-run src/scripts/build_mcp_catalog --write --strict",
74
- "build": "npm run build:cli && npm run build:install-bundle && npm run build:hooks && npm run build:mcp-bundle && npm run build:ui",
76
+ "build": "npm run build:cli && npm run build:install-bundle && npm run build:hooks && npm run build:mcp-bundle && npm run build:cli-delegate && npm run build:ui",
75
77
  "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.scripts.json",
76
78
  "lint:ts": "eslint 'src/**/*.ts'",
77
79
  "test:ts": "vitest run",
@@ -234,7 +234,7 @@ function _within_window(ts_bucket: string, window_days: number | null): boolean
234
234
  return ms >= Date.now() - window_days * 24 * 60 * 60 * 1000;
235
235
  }
236
236
 
237
- type BucketKey = string; // `${tier}${command}` — composite (tier, command) key.
237
+ type BucketKey = string; // `${tier}\0${command}` — composite (tier, command) key.
238
238
  interface RowStats {
239
239
  count: number;
240
240
  distinct_users: number;
@@ -274,7 +274,7 @@ function aggregate(log_path: string, window_days: number): AggregateResult {
274
274
  }
275
275
  kept += 1;
276
276
  const tier = Math.trunc(rec.tier);
277
- const key = `${tier}${rec.command}`;
277
+ const key = `${tier}\0${rec.command}`;
278
278
  if (!keyMeta.has(key)) {
279
279
  keyMeta.set(key, { tier, command: rec.command });
280
280
  counts.set(key, 0);
@@ -17,14 +17,25 @@ import {
17
17
  StepResult,
18
18
  agent_directive,
19
19
  } from '../../delivery_state.js';
20
- import { PLACEHOLDER_PATTERNS } from './design.js';
20
+ import { placeholder_paths } from './design.js';
21
+ import {
22
+ UNSUPPORTED_LANE,
23
+ bundle_line,
24
+ unsupported_stack_questions,
25
+ } from './stack_bundles.js';
21
26
 
22
27
  /** Map `state.stack.frontend` → agent-directive skill name. */
23
28
  export const STACK_DIRECTIVES: Record<string, string> = {
24
29
  'blade-livewire-flux': 'ui-apply-blade-livewire-flux',
30
+ 'blade-livewire': 'ui-apply-blade-livewire',
31
+ filament: 'ui-apply-filament',
25
32
  'react-shadcn': 'ui-apply-react-shadcn',
33
+ react: 'ui-apply-react',
26
34
  vue: 'ui-apply-vue',
27
35
  plain: 'ui-apply-plain',
36
+ // Present so the `keys == KNOWN_STACKS` invariant holds. Never emitted —
37
+ // the step intercepts this lane and refuses instead of dispatching.
38
+ unknown: 'ui-apply-unsupported',
28
39
  };
29
40
 
30
41
  /** Fallback directive when `state.stack` is missing or malformed. */
@@ -104,47 +115,36 @@ function _resolve_directive(state: DeliveryState): string {
104
115
  return DEFAULT_DIRECTIVE;
105
116
  }
106
117
 
107
- /** Return paths into `envelope['rendered']` whose text matches a pattern. */
118
+ /**
119
+ * Return paths into `envelope['rendered']` whose text matches a pattern.
120
+ *
121
+ * Delegates to the walker shared with `design`, so the producer-side and
122
+ * consumer-side gates cannot drift apart. They previously held
123
+ * byte-identical copies of the same array-blind recursion, which meant the
124
+ * contract's "defense-in-depth" framing described two layers that failed on
125
+ * exactly the same inputs.
126
+ */
108
127
  function _placeholder_violations_in_output(envelope: Record<string, Any>): string[] {
109
- const rendered = envelope['rendered'];
110
- if (!_isDict(rendered)) {
111
- return [];
112
- }
113
- const violations: string[] = [];
114
- _walk_rendered(rendered, '', violations);
115
- return violations;
116
- }
117
-
118
- function _walk_rendered(node: Record<string, Any>, prefix: string, violations: string[]): void {
119
- for (const key of Object.keys(node)) {
120
- const value = node[key];
121
- const path = prefix ? `${prefix}.${key}` : String(key);
122
- if (_isDict(value)) {
123
- _walk_rendered(value, path, violations);
124
- continue;
125
- }
126
- if (typeof value !== 'string') {
127
- continue;
128
- }
129
- const lowered = value.toLowerCase();
130
- for (const pattern of PLACEHOLDER_PATTERNS) {
131
- if (lowered.includes(pattern)) {
132
- violations.push(path);
133
- break;
134
- }
135
- }
136
- }
128
+ return placeholder_paths(envelope['rendered']);
137
129
  }
138
130
 
139
131
  /** First-pass halt — emit the stack-specific apply directive. */
140
132
  function _delegate_to_stack_skill(state: DeliveryState): StepResult {
141
133
  const directive = _resolve_directive(state);
142
134
  const stack_label = _stack_label(state);
135
+ if (stack_label === UNSUPPORTED_LANE) {
136
+ return new StepResult({
137
+ outcome: Outcome.BLOCKED,
138
+ questions: unsupported_stack_questions('apply'),
139
+ message: 'UI apply refused: frontend framework not modelled by any lane.',
140
+ });
141
+ }
143
142
  return new StepResult({
144
143
  outcome: Outcome.BLOCKED,
145
144
  questions: [
146
145
  agent_directive(directive),
147
146
  `> Stack: \`${stack_label}\`. Implementing the locked design brief.`,
147
+ bundle_line(stack_label, 'build'),
148
148
  '> Microcopy is locked — every button label, empty-state ' +
149
149
  'message, and validation message must come verbatim from ' +
150
150
  '`state.ui_design.microcopy`.',
@@ -146,7 +146,17 @@ function _missing_required_keys(design: Record<string, Any>): string[] {
146
146
  missing.push(key);
147
147
  continue;
148
148
  }
149
- if (key === 'states' && _isDict(value)) {
149
+ if (key === 'states') {
150
+ // A non-object `states` (a string, a list) used to skip the
151
+ // per-state loop entirely, so `states: "n/a"` satisfied the gate
152
+ // without covering a single state. Report every required key
153
+ // instead — the author gets the same actionable list either way.
154
+ if (!_isDict(value)) {
155
+ for (const state_key of REQUIRED_STATE_KEYS) {
156
+ missing.push(`states.${state_key}`);
157
+ }
158
+ continue;
159
+ }
150
160
  for (const state_key of REQUIRED_STATE_KEYS) {
151
161
  if (!_pyTruthy(value[state_key])) {
152
162
  missing.push(`states.${state_key}`);
@@ -157,37 +167,74 @@ function _missing_required_keys(design: Record<string, Any>): string[] {
157
167
  return missing;
158
168
  }
159
169
 
160
- /** Return microcopy paths whose values match a placeholder pattern. */
170
+ /**
171
+ * Return brief paths whose values match a placeholder pattern.
172
+ *
173
+ * Covers `microcopy` **and** `states`. The five required states were checked
174
+ * for truthiness only, so `states.error: "TBD"` satisfied the gate — the brief
175
+ * looked complete while covering nothing. Both slots carry strings the user
176
+ * signs off on, so both are held to the same bar.
177
+ *
178
+ * An explicit `"n/a"` stays legitimate: a static landing page genuinely has no
179
+ * error or disabled state, and *declaring* that is the opposite of inventing
180
+ * filler. That is why the gate demands all five keys rather than branching on
181
+ * page type — the author states the answer instead of the engine guessing which
182
+ * states a surface ought to have.
183
+ */
161
184
  function _placeholder_violations(design: Record<string, Any>): string[] {
162
- const microcopy = design['microcopy'];
163
- if (!_isDict(microcopy)) return [];
185
+ return [
186
+ ...placeholder_paths(design['microcopy'], 'microcopy'),
187
+ ...placeholder_paths(design['states'], 'states'),
188
+ ];
189
+ }
190
+
191
+ /**
192
+ * Return every path under `node` whose leaf string carries a placeholder.
193
+ *
194
+ * Traverses objects **and arrays**. The array arm is load-bearing, not
195
+ * defensive: a list is the natural shape for the most common microcopy
196
+ * (`nav_items`, `menu`, `steps`) and for a rendered file split into lines,
197
+ * and a walker that recursed into objects only let
198
+ * `{ nav_items: ["Home", "TODO: Link"] }` through both the brief lock and
199
+ * the rendered-output gate.
200
+ *
201
+ * Array elements are addressed `key[i]` so the halt names the exact element
202
+ * the author has to fix, not just the list.
203
+ *
204
+ * Shared by `design` (producer side, on `microcopy`) and `apply` (consumer
205
+ * side, on the rendered envelope). One implementation on purpose: the two
206
+ * call sites previously carried byte-identical copies of the same bug, so
207
+ * duplicating them bought no independence — see
208
+ * `docs/contracts/ui-track-flow.md` § implement → apply.
209
+ */
210
+ export function placeholder_paths(node: Any, prefix = ''): string[] {
164
211
  const violations: string[] = [];
165
- _walk_microcopy(microcopy, '', violations);
212
+ _walk_placeholders(node, prefix, violations);
166
213
  return violations;
167
214
  }
168
215
 
169
- function _walk_microcopy(
170
- node: Record<string, Any>,
171
- prefix: string,
172
- violations: string[],
173
- ): void {
174
- for (const key of Object.keys(node)) {
175
- const value = node[key];
176
- const path = prefix ? `${prefix}.${key}` : String(key);
177
- if (_isDict(value)) {
178
- _walk_microcopy(value, path, violations);
179
- continue;
180
- }
181
- if (typeof value !== 'string') {
182
- continue;
183
- }
184
- const lowered = value.toLowerCase();
216
+ function _walk_placeholders(node: Any, prefix: string, violations: string[]): void {
217
+ if (typeof node === 'string') {
218
+ const lowered = node.toLowerCase();
185
219
  for (const pattern of PLACEHOLDER_PATTERNS) {
186
220
  if (lowered.includes(pattern)) {
187
- violations.push(path);
188
- break;
221
+ violations.push(prefix);
222
+ return;
189
223
  }
190
224
  }
225
+ return;
226
+ }
227
+ if (Array.isArray(node)) {
228
+ node.forEach((value, index) => {
229
+ _walk_placeholders(value, `${prefix}[${index}]`, violations);
230
+ });
231
+ return;
232
+ }
233
+ if (_isDict(node)) {
234
+ for (const key of Object.keys(node)) {
235
+ const path = prefix ? `${prefix}.${key}` : String(key);
236
+ _walk_placeholders(node[key], path, violations);
237
+ }
191
238
  }
192
239
  }
193
240
 
@@ -311,15 +358,23 @@ function _halt_unconfirmed(state: DeliveryState, design: Record<string, Any>): S
311
358
  });
312
359
  }
313
360
 
314
- /** Count leaf string entries in `microcopy` (recursive). */
315
- function _count_microcopy(microcopy: Record<string, Any>): number {
316
- let total = 0;
317
- for (const value of Object.values(microcopy)) {
318
- if (_isDict(value)) {
319
- total += _count_microcopy(value);
320
- } else if (typeof value === 'string') {
321
- total += 1;
322
- }
361
+ /**
362
+ * Count leaf string entries in `microcopy` (recursive, arrays included).
363
+ *
364
+ * The count is shown in the sign-off the user confirms, so it has to agree
365
+ * with what the placeholder walker inspects — an object-only count reported
366
+ * fewer locked strings than were actually locked.
367
+ */
368
+ function _count_microcopy(microcopy: Any): number {
369
+ if (typeof microcopy === 'string') return 1;
370
+ if (Array.isArray(microcopy)) {
371
+ return microcopy.reduce((total: number, value) => total + _count_microcopy(value), 0);
372
+ }
373
+ if (_isDict(microcopy)) {
374
+ return Object.values(microcopy).reduce(
375
+ (total: number, value) => total + _count_microcopy(value),
376
+ 0,
377
+ );
323
378
  }
324
- return total;
379
+ return 0;
325
380
  }