@event4u/agent-config 7.5.0 → 8.0.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 (428) hide show
  1. package/.claude-plugin/marketplace.json +8 -1
  2. package/AGENTS.md +9 -9
  3. package/CHANGELOG.md +325 -0
  4. package/README.md +35 -5
  5. package/dist/agent-src/commands/analytics/prune.md +1 -1
  6. package/dist/agent-src/commands/analytics/show.md +1 -1
  7. package/dist/agent-src/commands/analyze/decision.md +2 -2
  8. package/dist/agent-src/commands/analyze/incident.md +2 -2
  9. package/dist/agent-src/commands/analyze/near-miss.md +2 -2
  10. package/dist/agent-src/commands/analyze/postmortem.md +2 -2
  11. package/dist/agent-src/commands/analyze/premortem.md +2 -2
  12. package/dist/agent-src/commands/cost-report.md +25 -0
  13. package/dist/agent-src/commands/evals/analyze.json +30 -0
  14. package/dist/agent-src/commands/evals/mission-upgrade.json +30 -0
  15. package/dist/agent-src/commands/implement-ticket.md +1 -1
  16. package/dist/agent-src/commands/knowledge/forget.md +1 -1
  17. package/dist/agent-src/commands/knowledge/ingest.md +1 -1
  18. package/dist/agent-src/commands/knowledge/list.md +1 -1
  19. package/dist/agent-src/commands/memory/load.md +12 -11
  20. package/dist/agent-src/commands/memory/promote.md +30 -0
  21. package/dist/agent-src/commands/memory/propose.md +16 -2
  22. package/dist/agent-src/commands/mission/upgrade.md +1 -1
  23. package/dist/agent-src/commands/module/explore.md +11 -7
  24. package/dist/agent-src/commands/optimize-project.md +243 -0
  25. package/dist/agent-src/commands/optimize.md +5 -0
  26. package/dist/agent-src/commands/pr/create.md +37 -8
  27. package/dist/agent-src/commands/prediction-pool.md +2 -2
  28. package/dist/agent-src/commands/profile/activate.md +3 -3
  29. package/dist/agent-src/commands/profile/deactivate.md +2 -2
  30. package/dist/agent-src/commands/profile/show.md +3 -3
  31. package/dist/agent-src/commands/research/deep.md +5 -0
  32. package/dist/agent-src/commands/research/report.md +2 -1
  33. package/dist/agent-src/commands/roadmap/create.md +88 -10
  34. package/dist/agent-src/commands/roadmap/materialize.md +1 -1
  35. package/dist/agent-src/commands/roadmap/process-full.md +15 -2
  36. package/dist/agent-src/commands/roadmap/process-phase.md +18 -6
  37. package/dist/agent-src/commands/roadmap/process-step.md +4 -0
  38. package/dist/agent-src/commands/roadmap.md +1 -1
  39. package/dist/agent-src/commands/security-audit-config.md +1 -1
  40. package/dist/agent-src/commands/sync-agent-settings.md +1 -1
  41. package/dist/agent-src/commands/sync-gitignore/fix.md +42 -6
  42. package/dist/agent-src/commands/team-knowledge/bootstrap.md +106 -0
  43. package/dist/agent-src/commands/team-knowledge/consolidate.md +105 -0
  44. package/dist/agent-src/commands/team-knowledge.md +64 -0
  45. package/dist/agent-src/contexts/authority/commit-mechanics.md +8 -0
  46. package/dist/agent-src/contexts/authority/destructive-mechanics.md +11 -0
  47. package/dist/agent-src/contexts/authority/scope-mechanics.md +25 -0
  48. package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +43 -0
  49. package/dist/agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
  50. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +2 -2
  51. package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -0
  52. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +14 -4
  53. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +11 -0
  54. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +32 -8
  55. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +107 -0
  56. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +71 -15
  57. package/dist/agent-src/contexts/execution/subagent-steering.md +41 -1
  58. package/dist/agent-src/contexts/override-system.md +1 -1
  59. package/dist/agent-src/personas/brand-strategist.md +0 -1
  60. package/dist/agent-src/personas/data-integrity.md +66 -0
  61. package/dist/agent-src/personas/design-director.md +0 -1
  62. package/dist/agent-src/personas/performance-engineer.md +66 -0
  63. package/dist/agent-src/personas/production-validator.md +73 -0
  64. package/dist/agent-src/rules/agent-authority.md +3 -4
  65. package/dist/agent-src/rules/analysis-skill-routing.md +3 -5
  66. package/dist/agent-src/rules/architecture.md +2 -4
  67. package/dist/agent-src/rules/artifact-drafting-protocol.md +35 -6
  68. package/dist/agent-src/rules/artifact-engagement-recording.md +2 -4
  69. package/dist/agent-src/rules/ask-when-uncertain.md +10 -14
  70. package/dist/agent-src/rules/augment-edit-discipline.md +3 -5
  71. package/dist/agent-src/rules/autonomous-execution.md +3 -5
  72. package/dist/agent-src/rules/brand-consistency.md +3 -5
  73. package/dist/agent-src/rules/brand-source-of-truth.md +3 -5
  74. package/dist/agent-src/rules/cli-output-handling.md +4 -6
  75. package/dist/agent-src/rules/command-suggestion-policy.md +3 -5
  76. package/dist/agent-src/rules/commit-conventions.md +3 -5
  77. package/dist/agent-src/rules/commit-policy.md +8 -10
  78. package/dist/agent-src/rules/content-quoting-floor.md +88 -0
  79. package/dist/agent-src/rules/context-hygiene.md +3 -5
  80. package/dist/agent-src/rules/copilot-routing.md +4 -6
  81. package/dist/agent-src/rules/decision-revisit-gate.md +120 -0
  82. package/dist/agent-src/rules/delegation-policy.md +10 -6
  83. package/dist/agent-src/rules/design-fidelity.md +3 -5
  84. package/dist/agent-src/rules/devcontainer-routing.md +4 -6
  85. package/dist/agent-src/rules/direct-answers.md +13 -17
  86. package/dist/agent-src/rules/docker-commands.md +3 -5
  87. package/dist/agent-src/rules/domain-adoption-policy.md +3 -5
  88. package/dist/agent-src/rules/domain-safety-disclaimer.md +3 -5
  89. package/dist/agent-src/rules/domain-safety-pii.md +3 -5
  90. package/dist/agent-src/rules/domain-safety-retention.md +3 -5
  91. package/dist/agent-src/rules/downstream-changes.md +3 -4
  92. package/dist/agent-src/rules/engineering-safety-floor.md +3 -5
  93. package/dist/agent-src/rules/external-reference-deep-dive.md +3 -5
  94. package/dist/agent-src/rules/fast-path-marker-visibility.md +3 -5
  95. package/dist/agent-src/rules/finance-safety-floor.md +3 -6
  96. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -5
  97. package/dist/agent-src/rules/git-history-discipline.md +3 -5
  98. package/dist/agent-src/rules/guidelines.md +2 -4
  99. package/dist/agent-src/rules/icon-consistency.md +3 -5
  100. package/dist/agent-src/rules/image-likeness-and-rights.md +3 -5
  101. package/dist/agent-src/rules/improve-before-implement.md +5 -5
  102. package/dist/agent-src/rules/invite-challenge.md +3 -5
  103. package/dist/agent-src/rules/language-and-tone.md +13 -15
  104. package/dist/agent-src/rules/laravel-routing.md +3 -5
  105. package/dist/agent-src/rules/laravel-translations.md +3 -5
  106. package/dist/agent-src/rules/legal-safety-floor.md +3 -5
  107. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -5
  108. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +4 -7
  109. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -5
  110. package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -4
  111. package/dist/agent-src/rules/media-governance-routing.md +3 -5
  112. package/dist/agent-src/rules/media-sync-ground-truth.md +3 -5
  113. package/dist/agent-src/rules/minimal-safe-diff.md +5 -5
  114. package/dist/agent-src/rules/missing-tool-handling.md +3 -5
  115. package/dist/agent-src/rules/model-recommendation.md +4 -6
  116. package/dist/agent-src/rules/no-attribution-footers.md +3 -5
  117. package/dist/agent-src/rules/no-cheap-questions.md +5 -8
  118. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +3 -6
  119. package/dist/agent-src/rules/no-pr-progress-comments.md +3 -6
  120. package/dist/agent-src/rules/no-roadmap-references.md +3 -5
  121. package/dist/agent-src/rules/non-destructive-by-default.md +11 -13
  122. package/dist/agent-src/rules/notes-first-reasoning.md +3 -5
  123. package/dist/agent-src/rules/onboarding-gate.md +4 -6
  124. package/dist/agent-src/rules/output-discipline.md +3 -5
  125. package/dist/agent-src/rules/package-ci-checks.md +3 -5
  126. package/dist/agent-src/rules/persona-governance.md +2 -4
  127. package/dist/agent-src/rules/php-coding.md +3 -5
  128. package/dist/agent-src/rules/preservation-guard.md +2 -4
  129. package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -5
  130. package/dist/agent-src/rules/reviewer-awareness.md +5 -6
  131. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +3 -5
  132. package/dist/agent-src/rules/roadmap-progress-sync.md +5 -5
  133. package/dist/agent-src/rules/role-mode-adherence.md +2 -4
  134. package/dist/agent-src/rules/rule-type-governance.md +3 -5
  135. package/dist/agent-src/rules/runtime-safety.md +2 -4
  136. package/dist/agent-src/rules/scope-control.md +10 -11
  137. package/dist/agent-src/rules/security-sensitive-stop.md +4 -5
  138. package/dist/agent-src/rules/size-enforcement.md +2 -4
  139. package/dist/agent-src/rules/skill-improvement-trigger.md +3 -5
  140. package/dist/agent-src/rules/skill-quality.md +3 -5
  141. package/dist/agent-src/rules/slash-command-routing-policy.md +3 -5
  142. package/dist/agent-src/rules/source-confidentiality.md +3 -5
  143. package/dist/agent-src/rules/source-discovery-gate.md +3 -5
  144. package/dist/agent-src/rules/source-of-truth.md +3 -5
  145. package/dist/agent-src/rules/strategy-safety-floor.md +3 -5
  146. package/dist/agent-src/rules/symfony-routing.md +4 -6
  147. package/dist/agent-src/rules/telegraph-speak.md +4 -5
  148. package/dist/agent-src/rules/think-before-action.md +7 -4
  149. package/dist/agent-src/rules/token-budget-discipline.md +29 -5
  150. package/dist/agent-src/rules/token-efficiency.md +3 -5
  151. package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -5
  152. package/dist/agent-src/rules/tool-safety.md +2 -4
  153. package/dist/agent-src/rules/ui-audit-gate.md +3 -6
  154. package/dist/agent-src/rules/untrusted-input-defense.md +3 -5
  155. package/dist/agent-src/rules/upstream-proposal.md +4 -6
  156. package/dist/agent-src/rules/user-interaction.md +7 -5
  157. package/dist/agent-src/rules/user-interrupt-priority.md +17 -8
  158. package/dist/agent-src/rules/verify-before-complete.md +12 -22
  159. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +3 -3
  160. package/dist/agent-src/scripts/update_roadmap_progress.ts +197 -7
  161. package/dist/agent-src/skills/adr-create/SKILL.md +48 -42
  162. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +18 -0
  163. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  164. package/dist/agent-src/skills/ai-council/SKILL.md +14 -1
  165. package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +0 -3
  166. package/dist/agent-src/skills/brand/SKILL.md +1 -1
  167. package/dist/agent-src/skills/brand-identity/SKILL.md +3 -3
  168. package/dist/agent-src/skills/brand-strategy/SKILL.md +1 -1
  169. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -3
  170. package/dist/agent-src/skills/canvas-design/SKILL.md +6 -0
  171. package/dist/agent-src/skills/check-refs/SKILL.md +7 -4
  172. package/dist/agent-src/skills/code-review/SKILL.md +1 -0
  173. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +6 -5
  174. package/dist/agent-src/skills/condense-memory/SKILL.md +11 -11
  175. package/dist/agent-src/skills/context-document/SKILL.md +17 -0
  176. package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -3
  177. package/dist/agent-src/skills/decision-record/SKILL.md +6 -0
  178. package/dist/agent-src/skills/decision-review/SKILL.md +5 -3
  179. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +6 -1
  180. package/dist/agent-src/skills/design-intelligence/SKILL.md +5 -2
  181. package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
  182. package/dist/agent-src/skills/design-tokens/SKILL.md +10 -4
  183. package/dist/agent-src/skills/design-variations/SKILL.md +127 -0
  184. package/dist/agent-src/skills/design-variations/evals/triggers.json +17 -0
  185. package/dist/agent-src/skills/emit-tickets/SKILL.md +4 -4
  186. package/dist/agent-src/skills/fe-design/SKILL.md +20 -0
  187. package/dist/agent-src/skills/html-deck/SKILL.md +123 -0
  188. package/dist/agent-src/skills/html-deck/evals/triggers.json +17 -0
  189. package/dist/agent-src/skills/html-deck/templates/deck-shell.html +77 -0
  190. package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
  191. package/dist/agent-src/skills/laravel/SKILL.md +0 -1
  192. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +46 -0
  193. package/dist/agent-src/skills/lint-skills/SKILL.md +6 -6
  194. package/dist/agent-src/skills/md-language-check/SKILL.md +3 -3
  195. package/dist/agent-src/skills/memory-consolidation/SKILL.md +66 -1
  196. package/dist/agent-src/skills/migration-architect/SKILL.md +1 -0
  197. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +2 -2
  198. package/dist/agent-src/skills/performance-analysis/SKILL.md +2 -0
  199. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +4 -4
  200. package/dist/agent-src/skills/premortem/SKILL.md +0 -3
  201. package/dist/agent-src/skills/project-analysis-core/SKILL.md +16 -0
  202. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +3 -1
  203. package/dist/agent-src/skills/release-comms/SKILL.md +46 -45
  204. package/dist/agent-src/skills/roadmap-management/SKILL.md +21 -0
  205. package/dist/agent-src/skills/roadmap-writing/SKILL.md +32 -2
  206. package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +0 -3
  207. package/dist/agent-src/skills/security-audit/SKILL.md +1 -0
  208. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +4 -0
  209. package/dist/agent-src/skills/source-discovery/SKILL.md +22 -3
  210. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +33 -14
  211. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
  212. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +8 -0
  213. package/dist/agent-src/skills/systematic-debugging/SKILL.md +29 -0
  214. package/dist/agent-src/skills/threat-modeling/SKILL.md +2 -2
  215. package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
  216. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -0
  217. package/dist/agent-src/skills/wireframe/SKILL.md +118 -0
  218. package/dist/agent-src/skills/wireframe/evals/triggers.json +17 -0
  219. package/dist/agent-src/templates/agent-settings.md +22 -1
  220. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  221. package/dist/agent-src/templates/command.md +2 -2
  222. package/dist/agent-src/templates/contexts/knowledge-pages.md +116 -0
  223. package/dist/agent-src/templates/hooks/pre-commit-frontmatter +1 -1
  224. package/dist/agent-src/templates/roadmaps.md +70 -2
  225. package/dist/agent-src/templates/rule.md +1 -1
  226. package/dist/agent-src/templates/scripts/README.md +3 -3
  227. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +109 -0
  228. package/dist/agent-src/templates/tickets.md +8 -8
  229. package/dist/cli/commands/recordTriggerEval.test.js +1 -1
  230. package/dist/cli/commands/recordTriggerEval.test.js.map +1 -1
  231. package/dist/cli/initRouting.js +4 -2
  232. package/dist/cli/initRouting.js.map +1 -1
  233. package/dist/cli/registry.js +1 -0
  234. package/dist/cli/registry.js.map +1 -1
  235. package/dist/discovery/deprecation-report.md +1 -1
  236. package/dist/discovery/discovery-manifest.json +718 -240
  237. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  238. package/dist/discovery/discovery-manifest.summary.md +8 -8
  239. package/dist/discovery/orphan-report.md +1 -1
  240. package/dist/discovery/packs.json +43 -28
  241. package/dist/discovery/trust-report.md +12 -11
  242. package/dist/discovery/workspaces.json +29 -18
  243. package/dist/install/preflight.js +173 -0
  244. package/dist/install/preflight.js.map +1 -0
  245. package/dist/mcp/registry-manifest.json +4 -4
  246. package/dist/router.json +1 -1
  247. package/dist/server/routes/settings.js +4 -0
  248. package/dist/server/routes/settings.js.map +1 -1
  249. package/dist/server/schemas/settings.js +3 -1
  250. package/dist/server/schemas/settings.js.map +1 -1
  251. package/docs/CLAIMS.md +108 -0
  252. package/docs/MIGRATION.md +3 -3
  253. package/docs/architecture.md +5 -5
  254. package/docs/benchmark.md +133 -2
  255. package/docs/benchmark.pinned.yml +31 -0
  256. package/docs/capability-matrix.md +1 -0
  257. package/docs/catalog.md +70 -60
  258. package/docs/command-flows.md +15 -3
  259. package/docs/comparison.yaml +35 -0
  260. package/docs/contracts/agents-layout.md +148 -0
  261. package/docs/contracts/brand-token-consumption.md +5 -0
  262. package/docs/contracts/capability-boundary.md +5 -0
  263. package/docs/contracts/command-category-governance.md +5 -0
  264. package/docs/contracts/command-clusters.md +1 -0
  265. package/docs/contracts/command-surface-tiers.md +1 -1
  266. package/docs/contracts/conformance.md +84 -0
  267. package/docs/contracts/creative-pack-boundary.md +5 -0
  268. package/docs/contracts/discovery-manifest.schema.json +5 -4
  269. package/docs/contracts/file-ownership-matrix.json +4605 -985
  270. package/docs/contracts/governance-enforcement-projection.md +5 -0
  271. package/docs/contracts/gui-wizard.md +1 -1
  272. package/docs/contracts/hook-architecture-v1.md +2 -2
  273. package/docs/contracts/implement-ticket-flow.md +1 -1
  274. package/docs/contracts/kernel-membership.md +13 -0
  275. package/docs/contracts/mcp-tool-inventory.md +23 -23
  276. package/docs/contracts/no-runtime-boundary.md +6 -1
  277. package/docs/contracts/review-lens-schema.md +5 -0
  278. package/docs/contracts/rule-router.md +102 -8
  279. package/docs/contracts/skill-bundled-assets.md +1 -1
  280. package/docs/contracts/skill-dry-run.md +1 -1
  281. package/docs/contracts/subagent-boundary.md +5 -0
  282. package/docs/contracts/ticket-bundle-format.md +9 -4
  283. package/docs/contracts/tier-3-contrib-plugin.md +2 -2
  284. package/docs/contracts/write-engine.md +3 -0
  285. package/docs/customization.md +87 -15
  286. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +1 -1
  287. package/docs/decisions/ADR-109-subagent-v1-contract.md +246 -0
  288. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +105 -0
  289. package/docs/decisions/INDEX.md +2 -0
  290. package/docs/distribution/awesome-list-submission.md +46 -0
  291. package/docs/distribution/launch-story-draft.md +58 -0
  292. package/docs/end-to-end-walkthroughs.md +2 -2
  293. package/docs/getting-started.md +2 -2
  294. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +24 -0
  295. package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +1 -1
  296. package/docs/guidelines/agent-infra/linked-projects-onboarding-gate.md +2 -2
  297. package/docs/guidelines/agent-infra/missing-tool-handling.md +3 -3
  298. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
  299. package/docs/guidelines/augment-portability-patterns.md +1 -1
  300. package/docs/guidelines/code-clarity.md +19 -0
  301. package/docs/guidelines/design-antipatterns-triggers.json +2 -1
  302. package/docs/guidelines/design-antipatterns.md +10 -1
  303. package/docs/guidelines/design-modes.md +6 -0
  304. package/docs/guidelines/php/general.md +9 -1
  305. package/docs/guidelines/php/php-coding-patterns.md +7 -0
  306. package/docs/guides/cross-repo-retrieval.md +1 -1
  307. package/docs/guides/frontend-design-corpus-refresh.md +2 -2
  308. package/docs/guides/local-analytics.md +4 -4
  309. package/docs/guides/skill-discovery.md +1 -1
  310. package/docs/guides/skill-preview.md +1 -1
  311. package/docs/hook-payload-capture.md +6 -6
  312. package/docs/install-friction-report.md +66 -0
  313. package/docs/installation.md +1 -1
  314. package/docs/maintainers/optional-media-deps.md +50 -0
  315. package/docs/mcp-server.md +11 -12
  316. package/docs/media/proof-demo.cast +14 -0
  317. package/docs/media/proof-demo.gif +0 -0
  318. package/docs/migration/consumer-template-consumption-model.md +1 -1
  319. package/docs/migration/divergences/bench-stats-float-precision.md +1 -1
  320. package/docs/migration/node-floor.md +1 -1
  321. package/docs/migration/yaml-roundtrip-spike.md +1 -1
  322. package/docs/personas.md +16 -5
  323. package/docs/positioning-evidence.md +86 -0
  324. package/docs/proof.md +86 -0
  325. package/docs/skills-catalog.md +1 -1
  326. package/docs/troubleshooting.md +8 -8
  327. package/docs/wedge/production-validator/README.md +57 -0
  328. package/docs/wedge/production-validator/production-validator.md +56 -0
  329. package/docs/wizard.md +2 -2
  330. package/package.json +1 -1
  331. package/src/config/agent-settings.template.yml +59 -4
  332. package/src/config/agents-paths.yml +254 -0
  333. package/src/config/budgets.yml +16 -0
  334. package/src/config/discovery/packs.yml +1 -0
  335. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  336. package/src/config/gitignore-block.txt +25 -0
  337. package/src/config/host-capabilities.yml +31 -0
  338. package/src/config/profiles/balanced.ini +4 -0
  339. package/src/config/profiles/full.ini +4 -0
  340. package/src/config/profiles/minimal.ini +4 -0
  341. package/src/scripts/_cli/cmd_conformance.ts +716 -0
  342. package/src/scripts/_cli/cmd_doctor.ts +23 -2
  343. package/src/scripts/_cli/cmd_fleet.ts +401 -0
  344. package/src/scripts/_cli/cmd_preflight.ts +159 -0
  345. package/src/scripts/_dispatch.bash +10 -0
  346. package/src/scripts/_lib/knowledge_events.ts +193 -0
  347. package/src/scripts/_lib/subagent_steering.ts +115 -3
  348. package/src/scripts/_lib/text_similarity.ts +75 -0
  349. package/src/scripts/ai-video/test-pipeline.sh +1 -1
  350. package/src/scripts/ai_council/clients.ts +19 -3
  351. package/src/scripts/append_contested.ts +112 -0
  352. package/src/scripts/audit_auto_rules.ts +11 -1
  353. package/src/scripts/audit_mcp_tools.ts +25 -11
  354. package/src/scripts/bench_ab_v2_run.ts +527 -40
  355. package/src/scripts/bench_ab_v2_stats.ts +6 -0
  356. package/src/scripts/bench_matrix.ts +266 -0
  357. package/src/scripts/bootstrap_knowledge.ts +267 -0
  358. package/src/scripts/build_discovery_manifest.ts +42 -2
  359. package/src/scripts/build_proof.ts +214 -0
  360. package/src/scripts/check_always_budget.ts +3 -0
  361. package/src/scripts/check_augment_description_cap.ts +2 -2
  362. package/src/scripts/check_claims.ts +270 -0
  363. package/src/scripts/check_comparison.ts +79 -0
  364. package/src/scripts/check_generated_artefact_headers.ts +109 -0
  365. package/src/scripts/check_generator_output_coverage.ts +142 -0
  366. package/src/scripts/check_gitignore_freshness.ts +127 -0
  367. package/src/scripts/check_knowledge_pages.ts +210 -0
  368. package/src/scripts/check_knowledge_sharing.ts +162 -0
  369. package/src/scripts/check_media_deps.ts +91 -0
  370. package/src/scripts/check_memory_contradiction.ts +280 -0
  371. package/src/scripts/check_memory_similarity.ts +134 -0
  372. package/src/scripts/check_quality_regression.ts +56 -10
  373. package/src/scripts/check_references.ts +3 -1
  374. package/src/scripts/check_release_pr_shape.ts +4 -0
  375. package/src/scripts/check_site_links.ts +135 -0
  376. package/src/scripts/check_skill_gaps.ts +99 -0
  377. package/src/scripts/check_token_quality_golden.ts +197 -11
  378. package/src/scripts/check_tracked_but_ignored.ts +67 -0
  379. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  380. package/src/scripts/compile_router.ts +30 -3
  381. package/src/scripts/condense.ts +350 -14
  382. package/src/scripts/consolidate_knowledge_events.ts +192 -0
  383. package/src/scripts/degrade_to_pointer.ts +136 -0
  384. package/src/scripts/design_slop_rules.test.ts +15 -0
  385. package/src/scripts/design_slop_rules.ts +28 -0
  386. package/src/scripts/emit_knowledge_event.ts +158 -0
  387. package/src/scripts/export_replay_corpus.ts +187 -0
  388. package/src/scripts/external_sources_denylist.json +7 -2
  389. package/src/scripts/fold_intake.ts +281 -0
  390. package/src/scripts/generate_capability_matrix.ts +9 -1
  391. package/src/scripts/generate_knowledge_index.ts +222 -0
  392. package/src/scripts/hook_manifest.yaml +26 -14
  393. package/src/scripts/hooks/dispatch_hook.ts +18 -0
  394. package/src/scripts/hot_context_hook.ts +372 -0
  395. package/src/scripts/install +47 -0
  396. package/src/scripts/install-hooks.sh +17 -0
  397. package/src/scripts/inventory_meta_layers.ts +11 -0
  398. package/src/scripts/janitor.ts +258 -0
  399. package/src/scripts/lint_agents_layout.ts +74 -15
  400. package/src/scripts/lint_bench_ab.ts +4 -1
  401. package/src/scripts/lint_featured_skills.ts +0 -0
  402. package/src/scripts/lint_framework_leakage_allowlist.json +26 -3
  403. package/src/scripts/lint_knowledge_scale.ts +250 -0
  404. package/src/scripts/lint_legal_pack.ts +67 -0
  405. package/src/scripts/lint_persona_governance.ts +8 -3
  406. package/src/scripts/lint_regression.ts +15 -0
  407. package/src/scripts/lint_roadmap_blockers.ts +202 -0
  408. package/src/scripts/lint_roadmap_complexity.ts +81 -2
  409. package/src/scripts/lint_subagent_determinism.ts +125 -0
  410. package/src/scripts/measure_augment_budget.ts +46 -6
  411. package/src/scripts/measure_patterns.ts +4 -3
  412. package/src/scripts/measure_skill_reduction.ts +6 -6
  413. package/src/scripts/migration_status.ts +6 -2
  414. package/src/scripts/mine_missing_guardrails.ts +189 -0
  415. package/src/scripts/parity/phase_gate.ts +1 -1
  416. package/src/scripts/parity/replay.ts +21 -0
  417. package/src/scripts/project_thin_rules.ts +120 -16
  418. package/src/scripts/release.ts +39 -1
  419. package/src/scripts/render_benchmark_composite.ts +378 -0
  420. package/src/scripts/roadmap_progress_hook.ts +101 -43
  421. package/src/scripts/schemas/skill.schema.json +27 -0
  422. package/src/scripts/schemas/subagent.schema.json +106 -0
  423. package/src/scripts/skill_linter.ts +1 -0
  424. package/src/scripts/smoke/kernel.sh +5 -4
  425. package/src/scripts/surface-tiers.yml +1 -0
  426. package/src/scripts/sync_gitignore.ts +4 -0
  427. package/src/scripts/update_skill_candidates.ts +172 -0
  428. package/src/scripts/validate_frontmatter.ts +1 -0
@@ -161,12 +161,28 @@ class RoadmapStats {
161
161
  rel: string;
162
162
  title: string;
163
163
  phases: PhaseStats[];
164
+ blockers: Blocker[];
164
165
 
165
- constructor(p: string, rel: string, title: string, phases: PhaseStats[] = []) {
166
+ constructor(
167
+ p: string,
168
+ rel: string,
169
+ title: string,
170
+ phases: PhaseStats[] = [],
171
+ blockers: Blocker[] = [],
172
+ ) {
166
173
  this.path = p;
167
174
  this.rel = rel;
168
175
  this.title = title;
169
176
  this.phases = phases;
177
+ this.blockers = blockers;
178
+ }
179
+
180
+ get open_blockers(): Blocker[] {
181
+ return this.blockers.filter((b) => b.status !== 'resolved');
182
+ }
183
+
184
+ get resolved_blockers(): Blocker[] {
185
+ return this.blockers.filter((b) => b.status === 'resolved');
170
186
  }
171
187
 
172
188
  get done(): number {
@@ -322,6 +338,136 @@ function count_checkboxes(text: string): CheckboxCounts {
322
338
  return [done, open_, deferred, cancelled, merge_gated, prs];
323
339
  }
324
340
 
341
+ interface Blocker {
342
+ id: string;
343
+ status: string;
344
+ owner: string;
345
+ blocks: string;
346
+ todo: string[];
347
+ resolvedWhen: string;
348
+ }
349
+
350
+ // Strip fenced code blocks before blocker detection — a roadmap that shows the
351
+ // `## Blockers` shape as a documentation example (fenced, indented or not)
352
+ // must not be mistaken for a live blocker on that roadmap.
353
+ const FENCED_CODE_RE = /^[ \t]*```[^\n]*\n[\s\S]*?^[ \t]*```[ \t]*$/gm;
354
+ const BLOCKERS_SECTION_RE = /^##[ \t]+Blockers[ \t]*$/im;
355
+ const BLOCKER_HEADING_RE = /^###[ \t]+blocker:[ \t]*(.+?)[ \t]*$/gim;
356
+ const NEXT_H2_RE = /^##[ \t]+\S/m;
357
+ const LEGACY_BLOCKED_UNTIL_RE = /^>[ \t]*Blocked until:?[ \t]*(.+)$/im;
358
+
359
+ function _stripFencedCode(text: string): string {
360
+ return text.replace(FENCED_CODE_RE, (m) => '\n'.repeat(_splitlines(m).length));
361
+ }
362
+
363
+ const BLOCKER_FIELD_RE = /^-[ \t]*\*\*(Status|Owner|Blocks|Resolved when|What to do):\*\*/i;
364
+
365
+ /** Strip an inline `<!-- comment -->` and trim. */
366
+ function _stripComment(s: string): string {
367
+ return _strip(s.replace(/<!--[\s\S]*?-->/g, ''));
368
+ }
369
+
370
+ /**
371
+ * `- **Label:** value` → trimmed `value`, joined with any wrapped
372
+ * continuation lines (non-bulleted text under the same field, e.g. a long
373
+ * "Blocks" sentence spanning two lines) up to the next `- **Field:**`
374
+ * marker, blank line, or heading.
375
+ */
376
+ function _blockerField(slice: string, label: string): string | null {
377
+ const lines = _splitlines(slice);
378
+ const re = new RegExp(`^-[ \\t]*\\*\\*${label}:\\*\\*[ \\t]*(.*)$`, 'i');
379
+ const startIdx = lines.findIndex((l) => re.test(_strip(l)));
380
+ if (startIdx === -1) {
381
+ return null;
382
+ }
383
+ const m = re.exec(_strip(lines[startIdx] as string));
384
+ const parts: string[] = [];
385
+ const first = _stripComment((m?.[1] as string) ?? '');
386
+ if (first) {
387
+ parts.push(first);
388
+ }
389
+ for (let i = startIdx + 1; i < lines.length; i++) {
390
+ const trimmed = _strip(lines[i] as string);
391
+ if (trimmed === '' || BLOCKER_FIELD_RE.test(trimmed) || trimmed.startsWith('#')) {
392
+ break;
393
+ }
394
+ parts.push(_stripComment(trimmed));
395
+ }
396
+ return parts.length ? parts.join(' ') : null;
397
+ }
398
+
399
+ /** Lines under `- **What to do:**` up to the next `- **Field:**` marker. */
400
+ function _blockerTodo(slice: string): string[] {
401
+ const lines = _splitlines(slice);
402
+ const startIdx = lines.findIndex((l) => /^-[ \t]*\*\*What to do:\*\*/i.test(_strip(l)));
403
+ if (startIdx === -1) {
404
+ return [];
405
+ }
406
+ const out: string[] = [];
407
+ for (let i = startIdx + 1; i < lines.length; i++) {
408
+ const trimmed = _strip(lines[i] as string);
409
+ if (BLOCKER_FIELD_RE.test(trimmed) || trimmed.startsWith('#')) {
410
+ break;
411
+ }
412
+ if (trimmed !== '') {
413
+ out.push(trimmed);
414
+ }
415
+ }
416
+ return out;
417
+ }
418
+
419
+ function parse_blockers(raw_text: string): Blocker[] {
420
+ const text = _stripFencedCode(raw_text);
421
+ const blockers: Blocker[] = [];
422
+ const sectionMatch = BLOCKERS_SECTION_RE.exec(text);
423
+ if (sectionMatch) {
424
+ const sectionStart = sectionMatch.index + sectionMatch[0].length;
425
+ const rest = text.slice(sectionStart);
426
+ const h2 = NEXT_H2_RE.exec(rest);
427
+ const sectionEnd = h2 ? sectionStart + h2.index : text.length;
428
+ const section = text.slice(sectionStart, sectionEnd);
429
+ BLOCKER_HEADING_RE.lastIndex = 0;
430
+ const heads: Array<{ start: number; end: number; id: string }> = [];
431
+ let hm: RegExpExecArray | null;
432
+ while ((hm = BLOCKER_HEADING_RE.exec(section)) !== null) {
433
+ heads.push({
434
+ start: hm.index,
435
+ end: hm.index + hm[0].length,
436
+ id: _strip(hm[1] as string),
437
+ });
438
+ if (hm.index === BLOCKER_HEADING_RE.lastIndex) {
439
+ BLOCKER_HEADING_RE.lastIndex++;
440
+ }
441
+ }
442
+ for (let i = 0; i < heads.length; i++) {
443
+ const cur = heads[i] as { start: number; end: number; id: string };
444
+ const bodyEnd =
445
+ i + 1 < heads.length ? (heads[i + 1] as { start: number }).start : section.length;
446
+ const body = section.slice(cur.end, bodyEnd);
447
+ blockers.push({
448
+ id: cur.id,
449
+ status: (_blockerField(body, 'Status') ?? 'open').toLowerCase(),
450
+ owner: _blockerField(body, 'Owner') ?? 'user',
451
+ blocks: _blockerField(body, 'Blocks') ?? '(unspecified)',
452
+ todo: _blockerTodo(body),
453
+ resolvedWhen: _blockerField(body, 'Resolved when') ?? '(unspecified)',
454
+ });
455
+ }
456
+ }
457
+ const legacyMatch = LEGACY_BLOCKED_UNTIL_RE.exec(text);
458
+ if (legacyMatch) {
459
+ blockers.push({
460
+ id: 'legacy',
461
+ status: 'open',
462
+ owner: 'user',
463
+ blocks: 'entire roadmap',
464
+ todo: [_strip(legacyMatch[1] as string)],
465
+ resolvedWhen: 'condition described above clears',
466
+ });
467
+ }
468
+ return blockers;
469
+ }
470
+
325
471
  function parse_roadmap(p: string, roadmap_root: string): RoadmapStats | null {
326
472
  const text = fs.readFileSync(p, { encoding: 'utf-8' });
327
473
  const phase_matches: Array<{ start: number; end: number; g2: string; g3: string | undefined }> =
@@ -345,7 +491,7 @@ function parse_roadmap(p: string, roadmap_root: string): RoadmapStats | null {
345
491
  const title_match = TITLE_RE.exec(text);
346
492
  const title = title_match ? _strip(title_match[1] as string) : _stem(p);
347
493
  const rel = _relPosix(roadmap_root, p);
348
- const stats = new RoadmapStats(p, rel, title);
494
+ const stats = new RoadmapStats(p, rel, title, [], parse_blockers(text));
349
495
  for (let i = 0; i < phase_matches.length; i++) {
350
496
  const cur = phase_matches[i] as { start: number; end: number; g2: string; g3: string | undefined };
351
497
  const start = cur.end;
@@ -370,6 +516,19 @@ function _relPosix(root: string, p: string): string {
370
516
  return path.relative(root, p).split(path.sep).join('/');
371
517
  }
372
518
 
519
+ /** Deterministic anchor slug for a roadmap's blocker section — explicit
520
+ * anchors (rather than GitHub's auto heading-slug) survive `.md` / brackets. */
521
+ function _blockerAnchor(rel: string): string {
522
+ const stem = rel.endsWith('.md') ? rel.slice(0, -3) : rel;
523
+ return (
524
+ 'blockers-' +
525
+ stem
526
+ .toLowerCase()
527
+ .replace(/[^a-z0-9]+/g, '-')
528
+ .replace(/^-+|-+$/g, '')
529
+ );
530
+ }
531
+
373
532
  function bar(pct: number, width = 10): string {
374
533
  const filled = _pyRound((pct * width) / 100);
375
534
  return '█'.repeat(filled) + '░'.repeat(width - filled);
@@ -512,13 +671,18 @@ function render(roadmaps: RoadmapStats[], bundles: Bundle[] | null = null): stri
512
671
  const overall_pct = total_active ? _pyRound((total_done * 100) / total_active) : 0;
513
672
  const pending = pending_iron_law_3(roadmaps);
514
673
  const gated = merge_gated_pending(roadmaps);
674
+ const total_open_blockers = roadmaps.reduce((s, r) => s + r.open_blockers.length, 0);
515
675
  const lines: string[] = [];
516
676
  lines.push('# Roadmap Progress\n');
517
677
  const header_meta =
518
678
  `> ${roadmaps.length} open roadmap` +
519
679
  `${roadmaps.length !== 1 ? 's' : ''}` +
520
680
  ' · [roadmaps/](roadmaps/) · [archive/](roadmaps/archive/) · ' +
521
- '[skipped/](roadmaps/skipped/) · [later/](roadmaps/later/)\n';
681
+ '[skipped/](roadmaps/skipped/) · [later/](roadmaps/later/)' +
682
+ (total_open_blockers > 0
683
+ ? ` · **${total_open_blockers}** open blocker${total_open_blockers !== 1 ? 's' : ''}`
684
+ : '') +
685
+ '\n';
522
686
  lines.push(
523
687
  // Honest provenance (road-to-roadmap-archival-robustness, gap C): name a
524
688
  // regen path that exists in EVERY install, not a hardcoded
@@ -600,13 +764,18 @@ function render(roadmaps: RoadmapStats[], bundles: Bundle[] | null = null): stri
600
764
  return lines.join('\n') + '\n';
601
765
  }
602
766
  lines.push('## Open roadmaps\n');
603
- lines.push('| # | Roadmap | Phases | Steps | Open | Done | Deferred | Cancelled | Progress |');
604
- lines.push('|---|---|---:|---:|---:|---:|---:|---:|---|');
767
+ lines.push(
768
+ '| # | Roadmap | Phases | Steps | Open | Done | Deferred | Cancelled | Blocker | Progress |',
769
+ );
770
+ lines.push('|---|---|---:|---:|---:|---:|---:|---:|---:|---|');
605
771
  roadmaps.forEach((r, idx) => {
606
772
  const i = idx + 1;
773
+ const openBlockers = r.open_blockers.length;
774
+ const blockerCell =
775
+ openBlockers > 0 ? `[${openBlockers}](#${_blockerAnchor(r.rel)})` : '0';
607
776
  lines.push(
608
777
  `| ${i} | [${r.rel}](roadmaps/${r.rel}) | ${r.phases.length} | ${r.total_all} | ` +
609
- `${r.open_} | ${r.done} | ${r.deferred} | ${r.cancelled} | ` +
778
+ `${r.open_} | ${r.done} | ${r.deferred} | ${r.cancelled} | ${blockerCell} | ` +
610
779
  `${bar(r.percent)} ${r.percent}% |`,
611
780
  );
612
781
  });
@@ -625,6 +794,26 @@ function render(roadmaps: RoadmapStats[], bundles: Bundle[] | null = null): stri
625
794
  );
626
795
  }
627
796
  lines.push('');
797
+ const openBlockers = r.open_blockers;
798
+ if (openBlockers.length) {
799
+ lines.push(`<a id="${_blockerAnchor(r.rel)}"></a>`);
800
+ lines.push('**Blockers**\n');
801
+ for (const b of openBlockers) {
802
+ lines.push(`- **${b.id}** (owner: ${b.owner}) — blocks ${b.blocks}`);
803
+ lines.push(' - **What to do:**');
804
+ for (const step of b.todo) {
805
+ lines.push(` ${step}`);
806
+ }
807
+ lines.push(` - **Resolved when:** ${b.resolvedWhen}`);
808
+ }
809
+ const resolvedCount = r.resolved_blockers.length;
810
+ if (resolvedCount > 0) {
811
+ lines.push(
812
+ `\n_${resolvedCount} blocker${resolvedCount !== 1 ? 's' : ''} resolved._`,
813
+ );
814
+ }
815
+ lines.push('');
816
+ }
628
817
  }
629
818
  if (bundles && bundles.length) {
630
819
  lines.push('---\n');
@@ -855,6 +1044,7 @@ export {
855
1044
  is_draft,
856
1045
  is_roadmap_candidate,
857
1046
  count_checkboxes,
1047
+ parse_blockers,
858
1048
  parse_roadmap,
859
1049
  bar,
860
1050
  collect,
@@ -866,4 +1056,4 @@ export {
866
1056
  main,
867
1057
  _pyRound,
868
1058
  };
869
- export type { Bundle };
1059
+ export type { Bundle, Blocker };
@@ -9,8 +9,8 @@ execution:
9
9
  timeout_seconds: 30
10
10
  allowed_tools: []
11
11
  command:
12
- - python3
13
- - scripts/adr/regenerate_index.py
12
+ - ./scripts-run
13
+ - src/scripts/adr/regenerate_index
14
14
  workspaces:
15
15
  - agent-config-maintainer
16
16
  packs:
@@ -48,16 +48,16 @@ Do NOT use when:
48
48
 
49
49
  ## Preconditions
50
50
 
51
- - ADR directory exists. Two layouts coexist (see
51
+ - An ADR directory exists. Two layouts coexist (see
52
52
  [`docs/contracts/adr-layout.md`](../../../docs/contracts/adr-layout.md)):
53
53
  - **Flat** — `docs/decisions/` (or `docs/adr/` alias): cross-cutting
54
54
  governance ADRs, 3-digit numbering (`ADR-NNN-<slug>.md`).
55
55
  - **Per-area** — `docs/adrs/<area>/`: sub-area ADRs, 4-digit
56
- numbering (`NNNN-<slug>.md`); `<area>` must match canonical
56
+ numbering (`NNNN-<slug>.md`); `<area>` must match the canonical
57
57
  inventory in [`scripts/audit_adr_coverage.py`](../../../scripts/audit_adr_coverage.py).
58
- - Decision **already made** — ADRs record outcomes, not run the
59
- decision process. For unresolved trade-offs, run council or
60
- consult `adversarial-review` first.
58
+ - The decision is **already made** — ADRs record outcomes, they do
59
+ not run the decision process. For unresolved trade-offs, run the
60
+ council or consult `adversarial-review` first.
61
61
 
62
62
  ## Procedure
63
63
 
@@ -65,31 +65,31 @@ Do NOT use when:
65
65
 
66
66
  Ask one question only if both are plausible:
67
67
 
68
- 1. **Flat surface** — decision constrains package's contract with
69
- consumers (kernel composition, rule taxonomy, package-wide
70
- architecture). Directory: `docs/decisions/` (fallback
71
- `docs/adr/`). Filename: `ADR-NNN-<slug>.md`.
72
- 2. **Per-area surface** — decision constrains code inside one area
73
- folder (one runtime module, one contract group, one CLI surface).
74
- Directory: `docs/adrs/<area>/`. Filename: `NNNN-<slug>.md`
75
- (4-digit, no `ADR-` prefix).
76
- 3. **Unknown area** — `<area>` not in inventory: refuse with hint
77
- to add area to `AREAS` in `scripts/audit_adr_coverage.py` in
78
- same PR. Do not invent.
68
+ 1. **Flat surface** — chosen when the decision constrains the
69
+ package's contract with consumers (kernel composition, rule
70
+ taxonomy, package-wide architecture). Directory: `docs/decisions/`
71
+ (fallback `docs/adr/`). Filename: `ADR-NNN-<slug>.md`.
72
+ 2. **Per-area surface** — chosen when the decision constrains code
73
+ inside one area folder (one runtime module, one contract group,
74
+ one CLI surface). Directory: `docs/adrs/<area>/`. Filename:
75
+ `NNNN-<slug>.md` (4-digit, no `ADR-` prefix).
76
+ 3. **Unknown area** — `<area>` not in the inventory: refuse with a
77
+ hint to add the area to `AREAS` in
78
+ `scripts/audit_adr_coverage.py` in the same PR. Do not invent.
79
79
  4. **In doubt** → per-area (cheaper to surface, easier to relocate).
80
80
 
81
81
  ### 2. Pick the next ADR number
82
82
 
83
83
  - **Flat surface** — scan `docs/decisions/` (or `docs/adr/`) for
84
- `ADR-*.md`, parse leading 3-digit number, take `max + 1`
85
- (zero-padded to 3). Empty directory → start at `001`.
84
+ `ADR-*.md`, parse the leading 3-digit number, take `max + 1`
85
+ (zero-padded to 3). For an empty directory, start at `001`.
86
86
  - **Per-area surface** — scan `docs/adrs/<area>/` for
87
- `[0-9][0-9][0-9][0-9]-*.md`, parse leading 4-digit number, take
88
- `max + 1` (zero-padded to 4). Empty area → start at `0001`.
89
- `README.md` is **not** an ADR — skip it.
87
+ `[0-9][0-9][0-9][0-9]-*.md`, parse the leading 4-digit number,
88
+ take `max + 1` (zero-padded to 4). For an empty area, start at
89
+ `0001`. `README.md` is **not** an ADR — skip it.
90
90
 
91
- Reject re-use of existing number — index regeneration treats
92
- duplicates as hard failure on both surfaces.
91
+ Reject re-use of an existing number — index regeneration treats
92
+ duplicates as a hard failure on both surfaces.
93
93
 
94
94
  ### 3. Pick a slug
95
95
 
@@ -100,9 +100,9 @@ directory. Examples: `kernel-swap-deferred`, `flat-cluster-subs`,
100
100
 
101
101
  ### 4. Author the ADR
102
102
 
103
- Use surface-specific template. All sections required; "—" acceptable
104
- for genuinely empty Alternatives or References blocks but never for
105
- Status, Context, Decision, or Consequences.
103
+ Use the surface-specific template. All sections are required; "—"
104
+ is acceptable for genuinely empty Alternatives or References blocks
105
+ but never for Status, Context, Decision, or Consequences.
106
106
 
107
107
  **Flat-surface template** (`docs/decisions/ADR-NNN-<slug>.md`):
108
108
 
@@ -138,7 +138,7 @@ phase: <roadmap> · <phase-id>
138
138
  ## Context / Decision / Considered alternatives / Consequences / References
139
139
  ```
140
140
 
141
- Per-area ADRs use quote-style header (no YAML frontmatter) so
141
+ Per-area ADRs use a quote-style header (no YAML frontmatter) so
142
142
  `audit_adr_coverage.py`'s permissive parser can index them. Cite
143
143
  the area's contract from the README in
144
144
  [`docs/adrs/<area>/README.md`](../../../docs/adrs/).
@@ -156,11 +156,15 @@ the area's contract from the README in
156
156
 
157
157
  - Flat: `./scripts-run src/scripts/adr/regenerate_index --check` exits 0.
158
158
  - Per-area: `./scripts-run src/scripts/audit_adr_coverage --check` exits 0.
159
- - Project's CI / quality pipeline passes locally.
159
+ - The project's CI / quality pipeline passes locally.
160
160
 
161
161
  ## Rubric pass (optional, surfacing-only)
162
162
 
163
- After drafting ADR, run [`judge-artifact-completeness`](../judge-artifact-completeness/SKILL.md) with rubric `architecture-score` to confirm alternatives, consequences, reversibility, risk present. Invoke when user asks for completeness check — not on every ADR.
163
+ After drafting an ADR, run
164
+ [`judge-artifact-completeness`](../judge-artifact-completeness/SKILL.md)
165
+ with rubric `architecture-score` to confirm alternatives, consequences,
166
+ reversibility, and risk are present. Invoke when the user asks for a
167
+ completeness check — not on every ADR by default.
164
168
 
165
169
  ## Output format
166
170
 
@@ -172,17 +176,19 @@ After drafting ADR, run [`judge-artifact-completeness`](../judge-artifact-comple
172
176
  ## Gotchas
173
177
 
174
178
  - **Flat default path** is `docs/decisions/` in this package; some
175
- projects use `docs/adr/`. Pass `--dir` when running outside default.
176
- - **Per-area numbering is 4-digit** (`NNNN-<slug>.md`); flat surface
177
- stays 3-digit (`ADR-NNN-<slug>.md`). Do not mix.
178
- - **Area inventory closed** — `<area>` must already exist in `AREAS`
179
- in `scripts/audit_adr_coverage.py`. Adding new area is separate
180
- PR with explicit reviewer sign-off.
181
- - Frontmatter `adr:` (flat) is canonical number; filename prefix
182
- must match. Flat regenerator fails on mismatch.
183
- - ADRs are append-only history. To revise, write new ADR with
184
- `supersedes: ADR-MMM` (flat) or `Supersedes:` line in header
185
- quote-block (per-area) and flip old one's status to `superseded`.
179
+ projects use `docs/adr/`. Pass `--dir` when running outside the
180
+ default.
181
+ - **Per-area numbering is 4-digit** (`NNNN-<slug>.md`); the flat
182
+ surface stays 3-digit (`ADR-NNN-<slug>.md`). Do not mix.
183
+ - **Area inventory is closed** — `<area>` must already exist in
184
+ `AREAS` in `scripts/audit_adr_coverage.py`. Adding a new area is
185
+ a separate PR with explicit reviewer sign-off.
186
+ - Frontmatter `adr:` (flat) is the canonical number; the filename
187
+ prefix must match. The flat regenerator fails on mismatch.
188
+ - ADRs are append-only history. To revise a decision, write a new
189
+ ADR with `supersedes: ADR-MMM` (flat) or a `Supersedes:` line in
190
+ the header quote-block (per-area) and flip the old one's status
191
+ to `superseded`.
186
192
  - Never delete an ADR file — supersede it. Deletion breaks
187
193
  historical links and round-trips through git history checks.
188
194
 
@@ -253,11 +253,29 @@ to every agent-doc update you author.
253
253
  relevant rule?
254
254
  4. Is German prose present outside `DE: / EN:` anchor blocks?
255
255
 
256
+ ## User inbox workflow (agents/tmp/)
257
+
258
+ Command/skill consumes `agents/tmp/` file as INPUT (roadmap created from it,
259
+ note promoted) → move source to `agents/tmp.old/<original-name>` in the
260
+ **same reply** as the output.
261
+
262
+ ```bash
263
+ mv agents/tmp/<filename> agents/tmp.old/<filename>
264
+ ```
265
+
266
+ - Move only files **explicitly named as input**. Never sweep other `tmp/` files.
267
+ - No confirmation needed — both dirs gitignored, local-only.
268
+ - Never write agent scratch into `agents/tmp/` — use `agents/runtime/tmp/`.
269
+
270
+ See `docs/contracts/agents-layout.md § User Inbox Workflow`.
271
+
256
272
  ## Do NOT
257
273
 
258
274
  - Do NOT create docs unless there's a real need (new module, significant change).
259
275
  - Do NOT duplicate information already in AGENTS.md or copilot-instructions.md.
260
276
  - Do NOT write docs just to document what you did — only document things others need to know.
277
+ - Do NOT write agent scratch into `agents/tmp/` — that is the user's inbox.
278
+ - Regen-only outputs (`agents/evidence/analysis/*`, `agents/reports/*` script-generated): commit only with the work that consumed them; side-effect regens discard via `git checkout --` before session end. See `docs/contracts/agents-layout.md § Session-leftover discipline`.
261
279
 
262
280
  ## Auto-trigger keywords
263
281
 
@@ -42,7 +42,7 @@ Inspect the config the agent loads and check each surface: instruction files
42
42
  scripts, permission/auto-approve settings, persistent memory. Static pass first:
43
43
 
44
44
  ```bash
45
- python3 src/scripts/security_audit_config.py --root <repo> --json
45
+ ./scripts-run src/scripts/security_audit_config --root <repo> --json
46
46
  ```
47
47
 
48
48
  ### 2. Red team (attacker lens)
@@ -4,6 +4,7 @@ name: ai-council
4
4
  description: "Use when polling external AIs (OpenAI, Anthropic) outside the host session for a neutral second opinion on a roadmap, diff, prompt, or file set — or 'cross-check with another model'."
5
5
  domain: process
6
6
  meta_skill: true
7
+ parallelizable: independent
7
8
  workspaces:
8
9
  - agent-config-maintainer
9
10
  packs:
@@ -426,7 +427,19 @@ Every council reply MUST contain, in this order:
426
427
  2. **One section per member**, titled `### <provider> · <model>`,
427
428
  containing the member's verbatim output.
428
429
  3. **Convergence / Divergence summary** — bullet list, every claim
429
- attributed by provider name.
430
+ attributed by provider name. **When the convergence settles a
431
+ question as "don't relitigate" / locked / a durable disposition**,
432
+ the summary MUST record two additional lines, per
433
+ [`decision-revisit-gate`](../../rules/decision-revisit-gate.md):
434
+ `scope:` (exactly which mechanism or question is settled — narrow
435
+ enough that a superficially similar but different proposal is not
436
+ silently covered) and `revisit-if:` (at least one concrete condition
437
+ that reopens it — new evidence class, model-generation or tooling
438
+ change, an N-th blocked encounter, or an age threshold). A lock
439
+ recorded without both lines is an authoring error. Also state
440
+ whether the disposition is **settled-by-evidence** (an eval ran) or
441
+ **settled-by-decision** (a maintainer call) — the latter is cheaper
442
+ to reopen and should say so.
430
443
  4. **Host verdict per finding** — one row per finding with `accept`
431
444
  / `accept-with-modification` / `reject` / `needs-input` plus a
432
445
  one-line reason citing host evidence (file:line, ADR, contract).
@@ -2,7 +2,6 @@
2
2
  model_tier: high
3
3
  name: blameless-post-mortem
4
4
  description: "Use after an incident or outage is resolved — blame-free facilitation, root cause, corrective actions, memory write-back — even for a near-miss. Consumes the incident-commander skeleton."
5
- source: package
6
5
  domain: quality
7
6
  personas:
8
7
  - senior-engineer
@@ -11,11 +10,9 @@ workspaces:
11
10
  - engineering
12
11
  packs:
13
12
  - analysis-workbench
14
- lifecycle: active
15
13
  trust:
16
14
  level: professional
17
15
  confidence: medium
18
- human_review_required: false
19
16
  install:
20
17
  default: false
21
18
  removable: true
@@ -52,7 +52,7 @@ Provenance: [`ATTRIBUTION.md`](ATTRIBUTION.md); manifest:
52
52
  1. **Ground or search** (paths resolve skill-relative; works from any cwd):
53
53
 
54
54
  ```bash
55
- python3 <skills-root>/corpus-grounding/scripts/ground.py search \
55
+ ./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
56
56
  --manifest <skills-root>/brand/data/manifest.json \
57
57
  "<brand brief: sector + intent + audience>" \
58
58
  [--domain archetype|voice|naming|color|logo|messaging|typography] \
@@ -35,7 +35,7 @@ Grounding + Method skill. Turns a confirmed brand strategy into an identity cons
35
35
  2. **Ground the colour story** via the brand corpus:
36
36
 
37
37
  ```bash
38
- python3 <skills-root>/corpus-grounding/scripts/ground.py search \
38
+ ./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
39
39
  --manifest <skills-root>/brand/data/manifest.json \
40
40
  "<archetype + sector>" --domain color --json
41
41
  ```
@@ -45,7 +45,7 @@ python3 <skills-root>/corpus-grounding/scripts/ground.py search \
45
45
  3. **Ground the type story** via:
46
46
 
47
47
  ```bash
48
- python3 <skills-root>/corpus-grounding/scripts/ground.py search \
48
+ ./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
49
49
  --manifest <skills-root>/brand/data/manifest.json \
50
50
  "<archetype + sector>" --domain typography --json
51
51
  ```
@@ -55,7 +55,7 @@ python3 <skills-root>/corpus-grounding/scripts/ground.py search \
55
55
  4. **Ground the logo direction** via:
56
56
 
57
57
  ```bash
58
- python3 <skills-root>/corpus-grounding/scripts/ground.py search \
58
+ ./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
59
59
  --manifest <skills-root>/brand/data/manifest.json \
60
60
  "<archetype + sector>" --domain logo --json
61
61
  ```
@@ -35,7 +35,7 @@ Grounding skill. Consults the brand corpus to surface archetype, positioning, vo
35
35
  2. **Ground via the corpus.** Run the corpus engine for each required domain. Start with archetype, then voice, then messaging:
36
36
 
37
37
  ```bash
38
- python3 <skills-root>/corpus-grounding/scripts/ground.py search \
38
+ ./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
39
39
  --manifest <skills-root>/brand/data/manifest.json \
40
40
  "<sector + audience + intent>" --domain archetype --json
41
41
  ```
@@ -49,13 +49,13 @@ execution:
49
49
  3. **Generate** CSS vars + Tailwind through the toolchain:
50
50
 
51
51
  ```bash
52
- python3 <skills-root>/design-tokens/scripts/tokens.py generate \
52
+ ./scripts-run <skills-root>/design-tokens/scripts/tokens generate \
53
53
  --config .tokens.json -o assets/design-tokens.css
54
- python3 <skills-root>/design-tokens/scripts/tokens.py generate \
54
+ ./scripts-run <skills-root>/design-tokens/scripts/tokens generate \
55
55
  --config .tokens.json --format tailwind
56
56
  ```
57
57
 
58
- 4. **Validate** — `python3 <skills-root>/design-tokens/scripts/tokens.py
58
+ 4. **Validate** — `./scripts-run <skills-root>/design-tokens/scripts/tokens
59
59
  validate --dir src/` until clean (exit 0 is the evidence); convert
60
60
  hardcoded values to `var(--token)`.
61
61
  5. **Export the deck templates** — emit the locked-variable brand deck
@@ -145,3 +145,9 @@ Apply the [Frugality Charter](../../contexts/contracts/frugality-charter.md).
145
145
  * Skip the philosophy file — the artifact without it is just an image
146
146
  * Skip the refinement pass
147
147
  * Write binary artifacts to the repo root or to source-of-truth dirs
148
+
149
+ ## See also
150
+
151
+ - [`html-deck`](../html-deck/SKILL.md) — multi-slide HTML presentations
152
+ (fixed-canvas deck with navigation); this skill owns single-frame static
153
+ art, not decks.
@@ -9,12 +9,15 @@ execution:
9
9
  timeout_seconds: 60
10
10
  allowed_tools: []
11
11
  command:
12
- - python3
13
- - src/scripts/check_references.ts
12
+ - ./scripts-run
13
+ - src/scripts/check_references
14
14
  workspaces:
15
15
  - agent-config-maintainer
16
16
  packs:
17
17
  - meta
18
+ gaps:
19
+ - description: "Only validates references to known-root paths (docs/, skills/, rules/, commands/, contexts/, personas/, …). A relative-path link such as `./sibling.md` or `../foo.md` is not matched, so a broken relative link is never reported."
20
+ witness: tests/scripts/witness/check_refs_relative_gap.test.ts
18
21
  ---
19
22
 
20
23
  # check-refs
@@ -52,7 +55,7 @@ this skill's frontmatter governs the call:
52
55
  ```
53
56
 
54
57
  The dispatcher resolves the request, the shell handler runs
55
- `python3 src/scripts/check_references.ts`, captures stdout/stderr, and returns a
58
+ `./scripts-run src/scripts/check_references`, captures stdout/stderr, and returns a
56
59
  typed `ExecutionResult`.
57
60
 
58
61
  ### 3. Verify the result
@@ -63,7 +66,7 @@ Check the returned `ExecutionResult`:
63
66
  - `exit_code: 1` → at least one broken reference — read `stdout` for file,
64
67
  line, and the offending ref, then fix the source or update the target
65
68
  - `status: timeout` → the checker exceeded `timeout_seconds` — investigate
66
- - `status: error` → interpreter or script missing — confirm `python3` and
69
+ - `status: error` → runner or script missing — confirm `./scripts-run` and
67
70
  `src/scripts/check_references.ts` are available at the repository root
68
71
 
69
72
  ## Output format
@@ -3,6 +3,7 @@ model_tier: high
3
3
  name: code-review
4
4
  description: "Use when the user says \"review this\", \"check my code\", or wants feedback on changes. Reviews for correctness, quality, security, and coding standards."
5
5
  domain: quality
6
+ parallelizable: files
6
7
  workspaces:
7
8
  - engineering
8
9
  packs: