@event4u/agent-config 14.9.0 → 14.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 (426) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +384 -0
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/design.md +88 -0
  7. package/dist/agent-src/commands/project/analyze.md +47 -0
  8. package/dist/agent-src/commands/review/changes.md +67 -6
  9. package/dist/agent-src/commands/roadmap/create.md +49 -0
  10. package/dist/agent-src/commands/roadmap/next.md +27 -11
  11. package/dist/agent-src/commands/roadmap/process-full.md +14 -0
  12. package/dist/agent-src/commands/video/from-script.md +60 -3
  13. package/dist/agent-src/commands/video/stitch.md +14 -0
  14. package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
  15. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
  16. package/dist/agent-src/rules/active-remediation.md +3 -3
  17. package/dist/agent-src/rules/code-provenance.md +2 -2
  18. package/dist/agent-src/rules/context-hygiene.md +13 -33
  19. package/dist/agent-src/rules/council-availability.md +2 -2
  20. package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
  21. package/dist/agent-src/rules/design-fidelity.md +18 -0
  22. package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
  23. package/dist/agent-src/rules/evaluator-independence.md +56 -44
  24. package/dist/agent-src/rules/fix-what-you-see.md +9 -1
  25. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  26. package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
  27. package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
  28. package/dist/agent-src/rules/playbook-precedence.md +105 -0
  29. package/dist/agent-src/rules/recurring-criticism.md +3 -1
  30. package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
  31. package/dist/agent-src/rules/scale-discipline.md +24 -0
  32. package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
  33. package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
  34. package/dist/agent-src/rules/ui-audit-gate.md +27 -15
  35. package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
  36. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
  37. package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
  38. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
  39. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
  40. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
  41. package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
  42. package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -0
  43. package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +17 -0
  44. package/dist/agent-src/skills/async-python-patterns/SKILL.md +1 -1
  45. package/dist/agent-src/skills/authz-review/SKILL.md +0 -1
  46. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
  47. package/dist/agent-src/skills/brand/SKILL.md +3 -0
  48. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
  49. package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
  50. package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
  51. package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
  52. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
  53. package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
  54. package/dist/agent-src/skills/code-refactoring/SKILL.md +1 -1
  55. package/dist/agent-src/skills/code-review/SKILL.md +11 -0
  56. package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
  57. package/dist/agent-src/skills/condense-memory/SKILL.md +4 -1
  58. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  59. package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +4 -1
  60. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
  61. package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
  62. package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
  63. package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
  64. package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
  65. package/dist/agent-src/skills/design-review/SKILL.md +80 -2
  66. package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
  67. package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
  68. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
  69. package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
  70. package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
  71. package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
  72. package/dist/agent-src/skills/discovery-interview/SKILL.md +1 -1
  73. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
  74. package/dist/agent-src/skills/docx-authoring/SKILL.md +1 -1
  75. package/dist/agent-src/skills/editorial-calendar/SKILL.md +1 -1
  76. package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
  77. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +20 -3
  78. package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
  79. package/dist/agent-src/skills/fe-design/evals/triggers.json +65 -53
  80. package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
  81. package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
  82. package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
  83. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  84. package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
  85. package/dist/agent-src/skills/github-ci/SKILL.md +1 -1
  86. package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
  87. package/dist/agent-src/skills/iconography/SKILL.md +3 -0
  88. package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
  89. package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
  90. package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
  91. package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
  92. package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
  93. package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +17 -0
  94. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
  95. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
  96. package/dist/agent-src/skills/judge-injection-defense/SKILL.md +1 -1
  97. package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
  98. package/dist/agent-src/skills/laravel-validation/SKILL.md +1 -1
  99. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
  100. package/dist/agent-src/skills/legal-intake-triage/SKILL.md +1 -1
  101. package/dist/agent-src/skills/legal-practice-profile/SKILL.md +1 -1
  102. package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
  103. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
  104. package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
  105. package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
  106. package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
  107. package/dist/agent-src/skills/messaging-architecture/SKILL.md +1 -1
  108. package/dist/agent-src/skills/migration-architect/SKILL.md +1 -1
  109. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +1 -1
  110. package/dist/agent-src/skills/module-management/SKILL.md +1 -1
  111. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
  112. package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +17 -0
  113. package/dist/agent-src/skills/motion-choreographer/SKILL.md +7 -1
  114. package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
  115. package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
  116. package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
  117. package/dist/agent-src/skills/operational-readiness/evals/triggers.json +17 -0
  118. package/dist/agent-src/skills/override-management/SKILL.md +3 -0
  119. package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
  120. package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
  121. package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
  122. package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
  123. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
  124. package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
  125. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
  126. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +1 -1
  127. package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
  128. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +52 -21
  129. package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
  130. package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
  131. package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
  132. package/dist/agent-src/skills/receiving-code-review/SKILL.md +3 -3
  133. package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
  134. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
  135. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  136. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  137. package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
  138. package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
  139. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
  140. package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
  141. package/dist/agent-src/skills/scene-expander/SKILL.md +1 -1
  142. package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
  143. package/dist/agent-src/skills/secrets-management/SKILL.md +5 -1
  144. package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
  145. package/dist/agent-src/skills/server-hardening/evals/triggers.json +17 -0
  146. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
  147. package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
  148. package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
  149. package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
  150. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
  151. package/dist/agent-src/skills/storybook-workshop/SKILL.md +194 -0
  152. package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +17 -0
  153. package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
  154. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  155. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
  156. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
  157. package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
  158. package/dist/agent-src/skills/terraform/SKILL.md +3 -0
  159. package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
  160. package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
  161. package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
  162. package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
  163. package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -1
  164. package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
  165. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
  166. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
  167. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
  168. package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
  169. package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
  170. package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
  171. package/dist/agent-src/skills/workspace-link/evals/triggers.json +17 -0
  172. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  173. package/dist/agent-src/templates/playbook.md +75 -0
  174. package/dist/agent-src/templates/roadmaps.md +37 -0
  175. package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  176. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  177. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  178. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  179. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  180. package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  181. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  182. package/dist/cli/commands/uiAudit.js +221 -0
  183. package/dist/cli/commands/uiAudit.js.map +1 -0
  184. package/dist/cli/commands/uiRender.js +206 -0
  185. package/dist/cli/commands/uiRender.js.map +1 -0
  186. package/dist/cli/main.js +22 -1
  187. package/dist/cli/main.js.map +1 -1
  188. package/dist/cli/mcp/content.js +64 -1
  189. package/dist/cli/mcp/content.js.map +1 -1
  190. package/dist/cli/mcp/dispatch.js +175 -10
  191. package/dist/cli/mcp/dispatch.js.map +1 -1
  192. package/dist/cli/registry.js +3 -0
  193. package/dist/cli/registry.js.map +1 -1
  194. package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-236PNQZK.js} +413 -391
  195. package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
  196. package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
  197. package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
  198. package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-L43NCYPB.js} +5 -0
  199. package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
  200. package/dist/cli-delegate/cmd_brand_status.js +8 -6
  201. package/dist/cli-delegate/cmd_conformance.js +3 -3
  202. package/dist/cli-delegate/cmd_doctor.js +3 -3
  203. package/dist/cli-delegate/cmd_export.js +4 -4
  204. package/dist/cli-delegate/cmd_handoff.js +1 -1
  205. package/dist/cli-delegate/cmd_preflight.js +2 -2
  206. package/dist/cli-delegate/cmd_prune.js +4 -4
  207. package/dist/cli-delegate/cmd_session_recycle.js +70 -9
  208. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  209. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  210. package/dist/cli-delegate/cmd_sync.js +4 -4
  211. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  212. package/dist/cli-delegate/cmd_validate.js +4 -4
  213. package/dist/discovery/deprecation-report.md +1 -1
  214. package/dist/discovery/discovery-manifest.json +380 -145
  215. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  216. package/dist/discovery/discovery-manifest.summary.md +4 -4
  217. package/dist/discovery/dormancy-report.md +1 -1
  218. package/dist/discovery/orphan-report.md +1 -1
  219. package/dist/discovery/packs.json +18 -8
  220. package/dist/discovery/trust-report.md +3 -3
  221. package/dist/discovery/workspaces.json +16 -6
  222. package/dist/hooks/dispatch.js +2337 -1436
  223. package/dist/install/install.mjs +795 -708
  224. package/dist/mcp/registry-manifest.json +3 -3
  225. package/dist/mcp/server.json +2 -2
  226. package/dist/mcp/server.mjs +1685 -1250
  227. package/dist/router.json +1 -1
  228. package/dist/scripts/_lib/lean_projection_mode.js +40 -0
  229. package/dist/scripts/_lib/lean_projection_mode.js.map +1 -0
  230. package/dist/scripts/_lib/scoped_projection.js +84 -0
  231. package/dist/scripts/_lib/scoped_projection.js.map +1 -1
  232. package/dist/scripts/_lib/ui_surface.js +89 -0
  233. package/dist/scripts/_lib/ui_surface.js.map +1 -0
  234. package/dist/scripts/condense.js +6 -10
  235. package/dist/scripts/condense.js.map +1 -1
  236. package/dist/scripts/project_thin_rules.js +40 -2
  237. package/dist/scripts/project_thin_rules.js.map +1 -1
  238. package/dist/server/schemas/settings.js +3 -0
  239. package/dist/server/schemas/settings.js.map +1 -1
  240. package/dist/shared/skillRanking.js +159 -0
  241. package/dist/shared/skillRanking.js.map +1 -0
  242. package/docs/contracts/provider-lifecycle.md +47 -18
  243. package/docs/contracts/settings-classes.md +14 -4
  244. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
  245. package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  246. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
  247. package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  248. package/docs/guidelines/design-antipatterns.md +4 -2
  249. package/docs/guidelines/design-asset-discipline.md +38 -0
  250. package/docs/guidelines/design-fidelity-mechanics.md +45 -29
  251. package/docs/guidelines/design-handover-extraction.md +35 -5
  252. package/docs/guidelines/design-modes.md +41 -1
  253. package/docs/guidelines/monorepo-antipatterns.md +141 -0
  254. package/llms.txt +50 -39
  255. package/package.json +1 -1
  256. package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  257. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  258. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  259. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  260. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  261. package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  262. package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  263. package/src/config/agent-settings.template.yml +28 -0
  264. package/src/config/assurance-capability-registry.json +223 -0
  265. package/src/config/assurance-threshold-budget.json +65 -0
  266. package/src/config/ci-local-parity.yml +14 -0
  267. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  268. package/src/config/dispatch-economy-metrics.json +4 -2
  269. package/src/config/evaluator-budgets.json +14 -14
  270. package/src/config/gate-coverage.yml +227 -8
  271. package/src/config/gate-violation-baselines.json +76 -72
  272. package/src/config/hook-latency-budget.json +1 -0
  273. package/src/config/hook-token-budget.json +137 -125
  274. package/src/config/pack-size-budget.json +4 -2
  275. package/src/config/preamble-payload-budget.json +71 -67
  276. package/src/config/quorum-attendance-budget.json +12 -4
  277. package/src/config/rule-activation-census.json +7 -3
  278. package/src/config/rule-enforcement-baseline.json +0 -1
  279. package/src/config/rule-stub-ceilings.json +112 -91
  280. package/src/scripts/_cli/cmd_doctor.ts +15 -16
  281. package/src/scripts/_cli/doctor_install_mode.ts +49 -0
  282. package/src/scripts/_cli/doctor_overrides.ts +154 -0
  283. package/src/scripts/_dispatch.bash +17 -0
  284. package/src/scripts/_lib/as_of.ts +412 -0
  285. package/src/scripts/_lib/exec_evidence.ts +7 -0
  286. package/src/scripts/_lib/hook_settings.ts +33 -0
  287. package/src/scripts/_lib/host_listing_model.ts +192 -0
  288. package/src/scripts/_lib/lean_projection_mode.ts +44 -0
  289. package/src/scripts/_lib/mcp_bridge.ts +199 -0
  290. package/src/scripts/_lib/review_independence.ts +62 -10
  291. package/src/scripts/_lib/rule_injection.ts +239 -0
  292. package/src/scripts/_lib/run_checkpoint.ts +54 -1
  293. package/src/scripts/_lib/scoped_projection.ts +96 -0
  294. package/src/scripts/_lib/session_register.ts +44 -2
  295. package/src/scripts/_lib/skill_catalogue.ts +38 -2
  296. package/src/scripts/_lib/transcript_reads.ts +207 -0
  297. package/src/scripts/_lib/ui_authority.test.ts +251 -0
  298. package/src/scripts/_lib/ui_authority.ts +343 -0
  299. package/src/scripts/ai-video/adapters/fal.sh +8 -3
  300. package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
  301. package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
  302. package/src/scripts/ai-video/adapters/kling.sh +10 -0
  303. package/src/scripts/ai-video/adapters/sora.sh +10 -0
  304. package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
  305. package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
  306. package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
  307. package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
  308. package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
  309. package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
  310. package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
  311. package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
  312. package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
  313. package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
  314. package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
  315. package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
  316. package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
  317. package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
  318. package/src/scripts/ai-video/smoke-trace.sh +450 -2
  319. package/src/scripts/ai-video/stitch.sh +191 -10
  320. package/src/scripts/ai-video/test-pipeline.sh +84 -6
  321. package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
  322. package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
  323. package/src/scripts/ai_council/clients.ts +3 -2
  324. package/src/scripts/ai_council/consensus.ts +63 -6
  325. package/src/scripts/ai_council/events_log.ts +46 -1
  326. package/src/scripts/ai_council/orchestrator.ts +103 -108
  327. package/src/scripts/ai_council/orchestrator_results.ts +166 -0
  328. package/src/scripts/ai_council/prompts.ts +12 -5
  329. package/src/scripts/ai_council/quorum.ts +82 -1
  330. package/src/scripts/ai_council/quorum_wiring.ts +82 -5
  331. package/src/scripts/ai_council/seating.ts +211 -0
  332. package/src/scripts/ai_council/stance_tally.ts +22 -0
  333. package/src/scripts/bench_hook_latency.ts +62 -0
  334. package/src/scripts/build_proof.ts +12 -1
  335. package/src/scripts/capture_skill_catalogue.ts +21 -0
  336. package/src/scripts/check_always_budget.ts +2 -1
  337. package/src/scripts/check_augmentignore.ts +2 -1
  338. package/src/scripts/check_beta_review_markers.ts +2 -1
  339. package/src/scripts/check_composite_arming.ts +364 -0
  340. package/src/scripts/check_corpus_staleness.ts +2 -1
  341. package/src/scripts/check_council_pin_staleness.ts +3 -1
  342. package/src/scripts/check_enforcement_coverage.ts +116 -3
  343. package/src/scripts/check_enforcement_denominator.ts +365 -0
  344. package/src/scripts/check_gate_coverage.ts +2 -1
  345. package/src/scripts/check_hook_bundle_freshness.ts +13 -1
  346. package/src/scripts/check_knowledge_cards.ts +2 -1
  347. package/src/scripts/check_knowledge_pages.ts +3 -2
  348. package/src/scripts/check_memory.ts +2 -1
  349. package/src/scripts/check_no_automerge_key.ts +287 -0
  350. package/src/scripts/check_pack_conformance_fixture.ts +565 -0
  351. package/src/scripts/check_pack_passport_reconciliation.ts +274 -0
  352. package/src/scripts/check_proposal.ts +2 -1
  353. package/src/scripts/check_reach_staleness.ts +2 -1
  354. package/src/scripts/check_release_adjacent_health.ts +2 -1
  355. package/src/scripts/check_release_pr_shape.ts +5 -0
  356. package/src/scripts/check_review_schema.ts +34 -1
  357. package/src/scripts/check_roadmap_trackable.ts +48 -3
  358. package/src/scripts/check_source_size_budget.ts +2 -1
  359. package/src/scripts/check_standing_payload_delta.ts +505 -0
  360. package/src/scripts/check_trigger_evals.ts +2 -1
  361. package/src/scripts/classify_change_risk.ts +281 -0
  362. package/src/scripts/compute_skill_tiers.ts +186 -0
  363. package/src/scripts/condense.ts +8 -13
  364. package/src/scripts/council_attendance_metrics.ts +183 -0
  365. package/src/scripts/council_cli.ts +10 -8
  366. package/src/scripts/council_parse_rate.ts +116 -0
  367. package/src/scripts/derive_playbooks.ts +406 -0
  368. package/src/scripts/design_slop_rules.test.ts +7 -0
  369. package/src/scripts/design_slop_rules.ts +56 -2
  370. package/src/scripts/dispatch_r2_reviewer.ts +16 -0
  371. package/src/scripts/frontend_corpus_hash.ts +116 -0
  372. package/src/scripts/generate_pack_manifests.ts +78 -0
  373. package/src/scripts/grade_target_readiness.ts +478 -0
  374. package/src/scripts/hook_manifest.json +1 -1
  375. package/src/scripts/hook_manifest.yaml +97 -16
  376. package/src/scripts/hooks/concern_registry.ts +4 -0
  377. package/src/scripts/hooks/design_pass_hook.ts +356 -0
  378. package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
  379. package/src/scripts/hooks/rule_inject_hook.ts +318 -0
  380. package/src/scripts/hot_context_hook.ts +74 -7
  381. package/src/scripts/install.ts +40 -89
  382. package/src/scripts/lint_adapter_tier.ts +663 -0
  383. package/src/scripts/lint_archived_skills.ts +93 -0
  384. package/src/scripts/lint_budget_ownership.ts +2 -1
  385. package/src/scripts/lint_deterministic_time.ts +470 -0
  386. package/src/scripts/lint_framework_leakage.ts +5 -0
  387. package/src/scripts/lint_handoffs.ts +525 -1
  388. package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
  389. package/src/scripts/lint_marketplace.ts +88 -0
  390. package/src/scripts/lint_media_policy_linkage.ts +140 -1
  391. package/src/scripts/lint_one_off_age.ts +6 -1
  392. package/src/scripts/lint_override_kernel_guard.ts +87 -5
  393. package/src/scripts/lint_roadmap_complexity.ts +56 -0
  394. package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
  395. package/src/scripts/lint_rule_norm_pin.ts +321 -0
  396. package/src/scripts/lint_spawn_payload.ts +42 -5
  397. package/src/scripts/lint_symptom_intake.ts +2 -1
  398. package/src/scripts/mcp_parity_smoke.ts +30 -4
  399. package/src/scripts/mcp_render.ts +66 -1
  400. package/src/scripts/mcp_tool_fingerprint.ts +241 -0
  401. package/src/scripts/measure_risk_class_drift.ts +140 -0
  402. package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
  403. package/src/scripts/media/lib/adapter-common.sh +211 -1
  404. package/src/scripts/media/lib/adapter-contract.md +74 -6
  405. package/src/scripts/model_rule_injection.ts +907 -0
  406. package/src/scripts/project_thin_rules.ts +45 -2
  407. package/src/scripts/release.ts +66 -860
  408. package/src/scripts/release_drill.ts +59 -3
  409. package/src/scripts/release_env.ts +298 -0
  410. package/src/scripts/release_publication.ts +720 -0
  411. package/src/scripts/roadmap_context.ts +778 -0
  412. package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
  413. package/src/scripts/schemas/pack.schema.json +62 -4
  414. package/src/scripts/schemas/rule.schema.json +24 -2
  415. package/src/scripts/schemas/skill.schema.json +41 -2
  416. package/src/scripts/schemas/ui-authority.schema.json +114 -0
  417. package/src/scripts/session_register_hook.ts +29 -3
  418. package/src/scripts/sessions_cli.ts +67 -3
  419. package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
  420. package/src/scripts/tighten_skill_descriptions.ts +264 -0
  421. package/src/scripts/token_sink_report.ts +239 -0
  422. package/src/scripts/trigger_coverage.ts +122 -3
  423. package/src/scripts/update_counts.ts +7 -3
  424. package/src/scripts/validate_frontmatter.ts +66 -0
  425. package/src/server/schemas/settings.ts +5 -0
  426. package/src/shared/skillRanking.ts +183 -0
@@ -46,6 +46,8 @@ INDEXES SHIP WITH THE QUERIES THAT NEED THEM. READS ARE BOUNDED.
46
46
  MIGRATIONS ARE REVERSIBLE. APPEND-ONLY TABLES DECLARE RETENTION.
47
47
  THE SYNC HANDLER DOES ONLY: VALIDATE → PERSIST → DISPATCH → RESPOND.
48
48
  MUST-NOT-LOSE WORK GOES THROUGH A DURABLE QUEUE, AFTER COMMIT.
49
+ EVERY FINITE RESOURCE ON A PRODUCTION PATH HAS A KNOWN CEILING AND
50
+ QUANTIFIED HEADROOM. AN UNQUANTIFIED CEILING IS NOT HEADROOM.
49
51
  A HEURISTIC FINDING IS ADVICE, NEVER A CI FAILURE.
50
52
  EVERY WAIVER CARRIES A NON-EMPTY REASON.
51
53
  ```
@@ -81,6 +83,22 @@ EVERY WAIVER CARRIES A NON-EMPTY REASON.
81
83
  - **R-A11 commit-ordering** — async dispatch that reads mutated state
82
84
  fires after commit (Laravel `afterCommit` / `ShouldDispatchAfterCommit`;
83
85
  generic: transactional outbox).
86
+ - **R-A12 finite-resource readiness** — a change that consumes a
87
+ **finite, exhaustible** resource on a production path names that
88
+ resource's **ceiling** and its **headroom at expected peak**. R-A7
89
+ covers unbounded *growth* of append-only tables; this covers *exhaustion*
90
+ of a fixed budget, which fails differently: growth degrades, exhaustion
91
+ stops. In scope — connection-pool slots, worker/thread slots, file
92
+ descriptors, disk, memory, inode count, third-party API quota and
93
+ rate-limit budget, per-plan managed-service caps. A ceiling that cannot
94
+ be stated is `unknown`, never "probably fine", and an unquantified
95
+ ceiling is not headroom — *advice tier* (no spike; `lint_persistence`
96
+ cannot read a third-party quota).
97
+
98
+ **Saturation is the readiness question.** Utilisation against a known
99
+ ceiling is the one predictive signal — the other three Golden Signals
100
+ report what already happened. Where the ceiling belongs to an upstream
101
+ provider, its rate-limit headers are the source, not an estimate.
84
102
 
85
103
  ## When NOT to fire
86
104
 
@@ -96,4 +114,10 @@ EVERY WAIVER CARRIES A NON-EMPTY REASON.
96
114
  audit tables fall under R-A7 here.
97
115
  - [`architecture`](architecture.md) — thin handlers; this rule is its
98
116
  persistence-shaped enforcement.
117
+ - [`logging-monitoring`](../skills/logging-monitoring/SKILL.md) — defines
118
+ saturation as a Golden Signal; R-A12 is where that signal is asked for at
119
+ review time rather than after an incident.
120
+ - [`operational-readiness`](../skills/operational-readiness/SKILL.md) —
121
+ consumes R-A12 as one typed input; a resource with no known ceiling is a
122
+ red there, never an amber.
99
123
  - `src/scripts/lint_persistence.ts` — the deterministic backstop.
@@ -23,7 +23,7 @@ self_contained: true
23
23
  workspaces: [engineering]
24
24
  packs: [engineering-base]
25
25
  enforced_by:
26
- - "none"
26
+ - "instruction-only: threat-model-before-you-edit is a pre-edit reasoning step only the model observes"
27
27
  collision_ok:
28
28
  "tenant": "tenancy is a threat-model-before-edit surface"
29
29
  # obligation: line 36
@@ -118,7 +118,7 @@ Authorization and tenancy bugs are often invisible in logs and fire silently
118
118
  until an auditor or attacker finds them. The cheapest moment to catch them
119
119
  is before the first edit — this rule makes that the default path.
120
120
 
121
- ## Enforcement — stated honestly (`enforced_by: none`)
121
+ ## Enforcement — stated honestly (`instruction-only`)
122
122
 
123
123
  No script can enforce "threat-model before you edit": the obligation is a
124
124
  pre-edit reasoning step only the model observes (ADR-135 classifies it HIGH —
@@ -21,7 +21,7 @@ packs: [meta]
21
21
  routes_to:
22
22
  - "contract:settings-classes"
23
23
  enforced_by:
24
- - "none"
24
+ - "instruction-only: no gate counts the questions in a chat turn; settings:set fences the illegal WRITE, never the badly-shaped ask"
25
25
  collision_ok:
26
26
  "canary_name": "the nickname ask is this protocol's canonical B-class instance — session-canary owns what the NAME then does and which layers already supply it, this rule owns how it is asked for and where the answer goes"
27
27
  # obligation: line 39
@@ -164,7 +164,7 @@ by `settings:set` and only *displayed* by the GUI.
164
164
  - **The `ask` is code, not agent-carried.** `decision_engine.on_block: ask` is a
165
165
  TTY prompt in `work_engine/hooks/builtin/decision_gate.ts`.
166
166
 
167
- ## Honest enforcement — `enforced_by: none`
167
+ ## Honest enforcement — `instruction-only`
168
168
 
169
169
  No gate counts the questions in a chat turn, and no B key currently gates an
170
170
  action through a guard: the two that gate behaviour
@@ -28,7 +28,7 @@ routes_to:
28
28
  workspaces: [agent-config-maintainer, engineering]
29
29
  packs: [frontend-design]
30
30
  enforced_by:
31
- - "none"
31
+ - "hook:design-pass"
32
32
  collision_ok:
33
33
  # The "component" and "design token" entries were removed with their triggers
34
34
  # (2026-08-17): a collision note for a trigger that no longer exists is an
@@ -100,20 +100,32 @@ OUTSIDE THE WORK ENGINE, THE AUDIT OBLIGATION IS MODEL-CARRIED.
100
100
  NEVER CLAIM THE AUDIT RAN AS IF IT WERE VERIFIED.
101
101
  ```
102
102
 
103
- `state.ui_audit` exists only inside the work-engine dispatcher, so only there
104
- is "the audit ran" a *checked* fact. A chat session cannot verify it: "I ran
105
- `existing-ui-audit` first" is self-report, and self-report is not enforcement —
106
- the same honesty boundary `security-sensitive-stop` and
107
- `untrusted-input-defense` state for their own obligations. So this rule ships
108
- `enforced_by: none` outside the dispatcher, deliberately, rather than pretending
109
- a satisfiable-by-assertion condition is a gate.
110
-
111
- What that leaves, and it is the useful part: run
112
- [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md) before adding a
113
- component because reuse beats duplication — not because a check will catch you.
114
- Full enforcement requires the dispatcher (or the `frontend-design` pack once
115
- pack-scoped rule projection is enabled; that flip is a maintainer decision,
116
- never an automated one).
103
+ `agent-config ui:audit` now writes `agents/runtime/state/ui-audit.json`, so the
104
+ artefact this rule used to lack exists, and `design_pass_hook.ts` reads it —
105
+ which is why `enforced_by:` names `hook:design-pass` instead of `none`. Three
106
+ limits, because naming a script is not the same as closing the gap:
107
+
108
+ 1. **Freshness, not existence.** The check is "an artefact newer than the
109
+ target". A stale artefact is worse than a missing one — it looks like
110
+ evidence.
111
+ 2. **Default-OFF, and the stop verdict is REPORTED, not enforced.**
112
+ `hooks.design_pass.enabled` ships `false`. When on, a missing artefact warns
113
+ on `post_tool_use` and is reported at `stop` as *would block*. It does not
114
+ refuse: the concern is `severity: advisory`, and an advisory EXIT_BLOCK is
115
+ downgraded by the dispatcher — so claiming a refusal would be inert. Making
116
+ it real needs an entry in `concern_severity.test.ts`'s blocking allowlist,
117
+ which that file calls a security-relevant decision; it is transferred with
118
+ the default flip.
119
+ 3. **The greenfield asymmetry stays open.** `_lib/ui_surface.ts` is a PATH
120
+ predicate — measured recall 20/23, all three misses being a UI *request*
121
+ with no UI *file* yet — so this gate cannot fire on the first write of a new
122
+ surface. After the write it can, which is why the carrier is on
123
+ `post_tool_use`.
124
+
125
+ Run [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md) before adding a
126
+ component because reuse beats duplication. What changed is that a check can now
127
+ catch you — on a host that binds the slot, with the setting on, and not on the
128
+ very first file of a new surface.
117
129
 
118
130
  **A runtime carrier now exists, and it does not change the verdict.** The
119
131
  `ui-route-nudge` PreToolUse concern warns once on a UI write with no design
@@ -18,7 +18,7 @@ routes_to:
18
18
  workspaces: [engineering]
19
19
  packs: [engineering-base]
20
20
  enforced_by:
21
- - "none"
21
+ - "instruction-only: no deterministic gate inspects fetched content for injected instructions; injection_scan_hook is warn-only and default-OFF"
22
22
  # obligation: line 38
23
23
  obligation_frequency: "per-event"
24
24
  ---
@@ -65,7 +65,7 @@ Scope boundary: this is where delegation authority ends — cross-linked with
65
65
  [`delegation-policy`](delegation-policy.md). Delegating a task is not
66
66
  delegating unbounded execution of everything the task's data happens to say.
67
67
 
68
- ## Enforcement — stated honestly (`enforced_by: none`)
68
+ ## Enforcement — stated honestly (`instruction-only`)
69
69
 
70
70
  No deterministic gate inspects fetched/tool/RAG content for injected
71
71
  instructions — the quarantine is carried by the model (ADR-135 lists it in the
@@ -80,6 +80,25 @@ on `<html>`, predictable navigation across pages.
80
80
  `<footer>`), heading order without skips, ARIA only when no native
81
81
  element exists, custom widgets follow ARIA-APG patterns.
82
82
 
83
+ **Reduced motion — audit the PRESENTATION, not the presence of the
84
+ query.** A `prefers-reduced-motion` block is easy to grep and proves
85
+ nothing: `animation: none` on a scroll-revealed section leaves the
86
+ content invisible, and a scrubbed sequence with its motion removed
87
+ leaves the story untold. So the finding is about what the surface
88
+ shows **instead**:
89
+
90
+ | Motion carries | Reduced-motion presentation | Failure |
91
+ |---|---|---|
92
+ | A reveal (content fades/slides in) | The content at its **final** state, visible from the start | `opacity: 0` left standing — the content never appears |
93
+ | A scrubbed sequence (scroll drives progress) | Each beat at its **resting** state, reachable by ordinary scrolling | Motion disabled and the beats collapse onto each other |
94
+ | A transition between states | An instant state change, still announced | The state changes with no perceivable feedback |
95
+ | Decoration (parallax, drift, ambient) | Nothing — removal is the correct presentation | — |
96
+
97
+ Decoration is the only case where removal is the answer, which is why
98
+ `animation: none` reads as correct so often and is wrong so often. Ask
99
+ per block: *if the motion never plays, is the content still there and
100
+ still understandable?* Record the answer, not the query.
101
+
83
102
  ### 3. Run the keyboard pass
84
103
 
85
104
  `Tab` from page start: every interactive element receives focus,
@@ -3,6 +3,13 @@ model_tier: high
3
3
  name: adr-create
4
4
  description: "Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'."
5
5
  domain: process
6
+ scope:
7
+ write:
8
+ - pattern: "docs/decisions/ADR-*.md"
9
+ access: "create"
10
+ - pattern: "docs/decisions/INDEX.md"
11
+ access: "write"
12
+ verification_command: "./scripts-run src/scripts/adr/regenerate_index --dir docs/decisions"
6
13
  execution:
7
14
  type: assisted
8
15
  handler: shell
@@ -3,6 +3,9 @@ model_tier: inherit
3
3
  name: agents-md-thin-root
4
4
  description: "Use when editing AGENTS.md (package root) or templates/AGENTS.md (consumer) — enforces Thin-Root contract: hard char ceilings, ≥40% pointer ratio, mandatory emergency-triage block."
5
5
  domain: process
6
+ scope:
7
+ write: []
8
+ verification_reason: "execution.handler is internal, so this skill spawns no subprocess — writes happen through the agent's declared allowed_tools. No command can prove a scope the skill never executes."
6
9
  execution:
7
10
  type: assisted
8
11
  handler: internal
@@ -83,6 +86,36 @@ Every substantive pointer specifies, on the same line or the immediately followi
83
86
  ✅ **Right** — anchor optional when target is short:
84
87
  > Mirror the user's language every reply, single Iron Law that overrides any momentum: [`language-and-tone`](dist/agent-src/rules/language-and-tone.md).
85
88
 
89
+ ## Workspace files — `packages/<n>/AGENTS.md`
90
+
91
+ A per-workspace `AGENTS.md` is **allowed**, and it is subject to the same pointer-ratio rule
92
+ as the root file. Its primary content is a **pointer list to the playbooks whose `scope` is
93
+ that workspace** ([ADR-244](../../../docs/decisions/ADR-244-playbook-is-a-sixth-context-type.md)) —
94
+ not a second copy of their steps.
95
+
96
+ ```
97
+ A WORKSPACE FILE POINTS AT ITS PLAYBOOKS. IT NEVER RESTATES THEIR STEPS.
98
+ TWO COPIES OF A PROCEDURE DISAGREE THE FIRST TIME ONE IS EDITED,
99
+ AND A READER CANNOT TELL WHICH ONE THE REPOSITORY ACTUALLY FOLLOWS.
100
+ ```
101
+
102
+ The restatement is detected on the **invoked id**, not the step title: titles are generic by
103
+ construction (*"Run the repository's own generator"*), so a title match reports one hit per
104
+ playbook and names none of them. A line carrying a playbook's `invokes` id **outside** a
105
+ link is a restatement; the same id inside a link label is the pointer the contract wants.
106
+ `findRestatedSteps` in `src/scripts/derive_playbooks.ts` is the detector; the negative
107
+ control is `tests/fixtures/playbooks/mono-with-generator/packages/ui/AGENTS.md`.
108
+
109
+ ### Before writing one — inventory the playbooks
110
+
111
+ List the playbooks whose `scope` is that workspace and read each one **before** the file
112
+ exists. A workspace file written first and reconciled later is how the restatement arrives:
113
+ the steps are fresh in mind, the pointer feels like an extra hop, and both copies ship. If
114
+ the inventory is empty, the workspace does not need the file yet.
115
+
116
+ No new caps: a workspace file is small by construction if it only points, and the root
117
+ caps above bind the root file alone.
118
+
86
119
  ## The contract — emergency-triage block
87
120
 
88
121
  Every Thin-Root AGENTS.md MUST contain an **Emergency Triage** section verbatim from `src/agent-src/contexts/contracts/emergency-triage-block.md` (Phase 6.4 will create that file as the canonical source). The block lists the five questions a host agent answers from the root file alone when network / tool access is degraded:
@@ -140,9 +140,23 @@ Activation — two equivalent paths:
140
140
  Mechanics:
141
141
 
142
142
  1. The final deliberation round's outputs are anonymised into
143
- `Response-A`, `Response-B`, … in stable input order. Provider /
144
- model identity is stripped (Iron-Law neutrality holds); empty or
145
- errored deliberation responses are skipped.
143
+ `Response-A`, `Response-B`, … in a **seeded** order — the seed is the
144
+ original ask plus the deliberation bodies, so the order is replayable
145
+ from the artefact and is **not** config order. Corrected 2026-08-23: this
146
+ paragraph previously described the order as stable and input-derived, which
147
+ was accurate until the shuffle landed and would then have made position
148
+ alone a leak — a reader could infer which member said what from where it
149
+ appeared. The old wording is described rather than quoted, because step
150
+ 1.5's verify greps for its absence and prose that trips a grep-shaped
151
+ verify is a trap for the next reader. Provider / model identity
152
+ is stripped (Iron-Law neutrality holds); empty or errored deliberation
153
+ responses are skipped.
154
+
155
+ The mapping is recorded **per reviewer**, not once per run: each member
156
+ sees a different N−1 subset, so `Response-A` denotes a different member
157
+ for each of them. A single run-wide map cannot express that, and the one
158
+ that used to be returned was the last reviewer's — which is what made a
159
+ quote in the artefact resolve to the wrong source for everyone else.
146
160
  2. Each member receives an N−1 view (its own response filtered out)
147
161
  plus the Karpathy prompt: *strongest response*, *weakest blind
148
162
  spot*, *what did everyone miss*, *refinement*.
@@ -59,6 +59,37 @@ matching `road-to-<topic-slug>` roadmap under `agents/roadmaps/`).
59
59
  output path convention — wire it into the package's CI pipeline so
60
60
  violations break the build.
61
61
 
62
+ ## Certainty vocabulary — one scale for evidence, and what the survivors measure
63
+
64
+ ```
65
+ ONE SCALE DESCRIBES EVIDENCE QUALITY: confirmed | inferred | speculative.
66
+ EVERY OTHER SURVIVING TERM MEASURES A DIFFERENT PROPERTY AND SAYS WHICH.
67
+ NEVER INVENT A LENS-LOCAL SYNONYM FOR EVIDENCE QUALITY.
68
+ ```
69
+
70
+ Six vocabularies described overlapping properties across `prompts.ts` and this
71
+ skill, and the fix is deliberately **not** to collapse them into one: evidence
72
+ quality and a member's certainty in a pick are different properties, and merging
73
+ them would destroy information the stance line exists to carry. So one scale wins
74
+ for evidence quality, and each survivor is named with the property it measures.
75
+
76
+ | Term | Property it measures | Where |
77
+ |---|---|---|
78
+ | `confirmed` / `inferred` / `speculative` | **evidence quality** — how well a finding is supported (`confirmed` cites file:line or a metric; `inferred` is plausible from stated context; `speculative` has no citation) | every lens's finding metadata |
79
+ | `CONFIDENCE: high\|med\|low` | **a member's certainty in its own pick** — not how good the evidence is, but how strongly that member backs the option it chose | the stance line |
80
+ | `DEALBREAKER: yes\|no` | **whether the member would block on the alternative** — a veto, not a certainty | the stance line |
81
+ | `roadmap-ready` / `needs-discovery` | **actionability** — is the finding concrete enough to land as a phase step | Top-10 / Supporting |
82
+ | `needs-verification` | **provenance of the host agent's OWN inference** — the item was reasoned from context rather than read from a member response | Blind spots |
83
+ | `unverified:` | **probe coverage of a mechanism claim** — argued, not measured. An authoring convention with no reader; see `procedure.md` | artefact prose |
84
+
85
+ **Collapsed, and why.** `unverified-by-council` is gone: it described
86
+ *corroboration* (how many reviewers engaged), which the `### Outliers` heading
87
+ already states by construction — everything under it was raised by one reviewer
88
+ and engaged with by none. A separate word for that invited it to be read as a
89
+ fourth point on the evidence scale. `hypothesis` (the optimize lens's local
90
+ synonym for `speculative`) is gone for the same reason: a lens-local synonym for
91
+ a scale term is the mechanism by which one scale becomes four.
92
+
62
93
  ## Synthesis templates (lens-aware)
63
94
 
64
95
  The **Convergence / Divergence** slot in `council:render` output is
@@ -96,6 +96,25 @@ so it has no way to falsify one. Marking such a claim `unverified:` in the artef
96
96
  keeps the reader from mistaking a well-argued mechanism for a measured one, and the
97
97
  non-binding clause means the fix for a wrong claim is a probe, not a re-vote.
98
98
 
99
+ **`unverified:` is an authoring convention with no reader, and that is stated
100
+ rather than left to be discovered.** Nothing in `src/scripts/` parses the marker:
101
+ a repo-wide grep finds `procedure.md` (this file, twice) and one unrelated object
102
+ key in `check_branch_freshness.ts:300`. No render consequence follows from writing
103
+ it, and none follows from omitting it.
104
+
105
+ The machinery to enforce a section exists and is deliberately not pointed here.
106
+ `prompts.ts::assert_synthesis_sections` validates `### Kill criteria` and
107
+ `### Concrete next step` — and its own docstring records that it has **zero
108
+ production call sites**, because the templated render path emits
109
+ `*to be summarised by the host agent*`, which carries neither section, so wiring
110
+ it unconditionally would throw on every default render. Adding a second unwired
111
+ validator for this marker would reproduce exactly that state and let a reader
112
+ believe the marker is checked.
113
+
114
+ So: write it because a reader of the artefact needs to know a mechanism claim was
115
+ argued rather than measured. Do not cite it as enforcement, and do not read its
116
+ absence as evidence the claim was probed.
117
+
99
118
  **Case zero (2026-07-29).** An accepted ADR claimed a compile-time toggle gave
100
119
  "zero-cost dormancy" because the rule was dropped from `dist/router.json`. Two
101
120
  council members praised the reasoning; neither could check it. A one-line `grep`
@@ -0,0 +1,225 @@
1
+ ---
2
+ model_tier: medium
3
+ name: alerting-doctrine
4
+ description: "Use when deciding what earns a page — the page, action and info classes stated provider-neutrally, and the rule that a page without an owner, a runbook and a first diagnostic step is malformed."
5
+ domain: devops
6
+ workspaces:
7
+ - engineering
8
+ packs:
9
+ - engineering-base
10
+ ---
11
+
12
+ # alerting-doctrine
13
+
14
+ ## When to use
15
+
16
+ Use when classifying an alert, reviewing an alert set, or deciding whether a
17
+ condition should wake a human. Provider-neutral: the classes below hold whichever
18
+ tool evaluates the rule.
19
+
20
+ Do NOT use when:
21
+ - Establishing which signals exist at all (use `logging-monitoring` first — you
22
+ cannot alert on a signal the project does not have)
23
+ - Adjudicating a go/no-go verdict (use `operational-readiness`)
24
+ - Running an incident once it has started (use `incident-commander`)
25
+ - Building the dashboard the alert links to (use `dashboard-design`, `grafana`)
26
+
27
+ ## The three classes
28
+
29
+ Every alert is exactly one of these. The class is decided by **what the recipient
30
+ must do**, never by how alarming the condition sounds.
31
+
32
+ | Class | Condition that earns it | Destination | Latency of response |
33
+ |---|---|---|---|
34
+ | `page` | A human must act **now** or the damage grows | Wakes a named human | Minutes |
35
+ | `action` | A human must act, but the next working day is soon enough | Ticket or queue | Hours to days |
36
+ | `info` | Nobody must act; it is context for when something else fires | Log, channel, dashboard | Never |
37
+
38
+ **What earns a `page`** — all three, as a condition rather than a preference:
39
+
40
+ 1. **User-visible or irreversible.** Users are affected now, or damage
41
+ accumulates while nobody looks (data loss, budget burn, a queue filling
42
+ toward a ceiling).
43
+ 2. **Actionable now.** A named human can do something about it at 3am. "The
44
+ upstream provider is down" is not actionable unless failover is manual.
45
+ 3. **Not self-clearing.** A condition that resolves itself before a human can
46
+ log in is an `info` with a trend, not a page.
47
+
48
+ Fail any one → it is `action` or `info`.
49
+
50
+ **What a misclassification costs.** Too eager: alert fatigue, and the page that
51
+ mattered arrives in a stream of pages that did not. Fatigue is not an
52
+ inconvenience — it is the mechanism by which a real outage is missed, and it is
53
+ caused by pages that were never actionable. Too shy: the condition sits in a
54
+ channel nobody reads until a user reports it. The asymmetry is real but bounded
55
+ in both directions, which is why the three conditions above are stated as a test
56
+ and not as taste.
57
+
58
+ ## A page is malformed without all three fields
59
+
60
+ ```
61
+ A PAGE THAT CANNOT NAME AN OWNER, A RUNBOOK AND A FIRST DIAGNOSTIC STEP
62
+ IS A CONFIGURATION DEFECT, NOT A JUDGEMENT CALL.
63
+ ```
64
+
65
+ | Field | What it must carry | Why it is mandatory |
66
+ |---|---|---|
67
+ | **owner** | A named human or an on-call rotation that resolves to one | An alert owned by "the team" is owned by nobody at 3am |
68
+ | **runbook** | A pointer to the procedure — see the contract below | Waking someone with no procedure transfers the whole diagnosis to the least-prepared moment |
69
+ | **first diagnostic step** | The single concrete first action | The most expensive minutes of an incident are the ones spent deciding where to look |
70
+
71
+ This is checkable from the alert definition alone, which is what makes it a
72
+ defect rather than an opinion. `action` and `info` alerts do not carry the
73
+ obligation — nobody is being woken.
74
+
75
+ ## The runbook contract — deliberately lean
76
+
77
+ A runbook worth paging into carries five things. More than this and it rots
78
+ faster than the system changes; fewer and it is a link that wastes the minutes it
79
+ was supposed to save.
80
+
81
+ 1. **What this alert means** — one sentence, in terms of user impact.
82
+ 2. **First diagnostic step** — the one command, query or dashboard to open. The
83
+ same value the alert definition carries, so the two cannot drift.
84
+ 3. **The two or three most common causes**, each with how to confirm it.
85
+ 4. **Mitigation vs fix** — how to stop the bleeding, marked separately from how
86
+ to repair the cause. Under a page, mitigation is the goal.
87
+ 5. **Escalation** — who is next, and the condition that triggers going to them.
88
+
89
+ Explicitly **not** in a runbook: architecture background, a full topology
90
+ diagram, anything the reader could get later. A runbook is read under time
91
+ pressure by someone who was asleep.
92
+
93
+ → Once an incident is open, `incident-commander` owns the roles, the update
94
+ cadence and the post-mortem obligation. This skill stops at the moment the page
95
+ fires.
96
+
97
+ ## Procedure: Classify and validate an alert
98
+
99
+ 1. **Confirm the signal exists.** An alert on a signal `logging-monitoring`
100
+ scored `unavailable` or `unknown` cannot fire meaningfully. Fix the signal
101
+ first.
102
+ 2. **Apply the three page conditions.** User-visible or irreversible, actionable
103
+ now, not self-clearing. All three → `page`. Otherwise → `action` if a human
104
+ must eventually act, else `info`.
105
+ 3. **For a `page`, check the three mandatory fields.** Any missing → verdict
106
+ `malformed-alert: missing-<field>`. Do not downgrade the class to dodge the
107
+ obligation; a page whose fields cannot be named is either a defect to fix or
108
+ was never a page.
109
+ 4. **For a `page`, check the runbook against the five-item contract**, and
110
+ confirm its first diagnostic step matches the alert's.
111
+ 5. **Record the verdict per alert** — `valid-page-alert`, `valid-action-alert`,
112
+ `valid-info-alert`, or `malformed-alert: <reason>`.
113
+
114
+ ### Validate
115
+
116
+ - Verify every `page` names an owner resolving to a single human.
117
+ - Verify every `page` links a runbook that exists.
118
+ - Verify every `page` carries a first diagnostic step identical to its runbook's.
119
+ - Confirm no alert was reclassified downward purely to avoid the three fields.
120
+ - Confirm every alert's underlying signal is `present`, not `unknown`.
121
+ - Confirm the alert set contains no `page` that is self-clearing.
122
+
123
+ ## Output format
124
+
125
+ 1. One row per alert — name, class, verdict.
126
+ 2. For each `malformed-alert`, the missing field named explicitly.
127
+ 3. The pages, with owner, runbook pointer and first diagnostic step.
128
+
129
+ ## Examples
130
+
131
+ Contract fixtures. Three pairs, one per mandatory field; each pair differs
132
+ **only** in the field under test, and each case states the verdict it must
133
+ produce. Contract evidence for review, not an executable suite.
134
+
135
+ ### Missing owner — malformed vs clean
136
+
137
+ ```yaml
138
+ # malformed
139
+ alert: checkout_error_rate_high
140
+ class: page
141
+ runbook: docs/runbooks/checkout-errors.md
142
+ first_diagnostic_step: "open the checkout error-rate panel, last 30m"
143
+ verdict: "malformed-alert: missing-owner"
144
+ ```
145
+
146
+ ```yaml
147
+ # clean — only the owner is added
148
+ alert: checkout_error_rate_high
149
+ class: page
150
+ owner: payments-on-call
151
+ runbook: docs/runbooks/checkout-errors.md
152
+ first_diagnostic_step: "open the checkout error-rate panel, last 30m"
153
+ verdict: valid-page-alert
154
+ ```
155
+
156
+ ### Missing runbook — malformed vs clean
157
+
158
+ ```yaml
159
+ # malformed
160
+ alert: db_pool_saturation
161
+ class: page
162
+ owner: platform-on-call
163
+ first_diagnostic_step: "check db_pool_in_use / db_pool_size"
164
+ verdict: "malformed-alert: missing-runbook"
165
+ ```
166
+
167
+ ```yaml
168
+ # clean — only the runbook is added
169
+ alert: db_pool_saturation
170
+ class: page
171
+ owner: platform-on-call
172
+ runbook: docs/runbooks/db-pool.md
173
+ first_diagnostic_step: "check db_pool_in_use / db_pool_size"
174
+ verdict: valid-page-alert
175
+ ```
176
+
177
+ ### Missing first diagnostic step — malformed vs clean
178
+
179
+ ```yaml
180
+ # malformed
181
+ alert: queue_wait_time_high
182
+ class: page
183
+ owner: platform-on-call
184
+ runbook: docs/runbooks/queue-wait.md
185
+ verdict: "malformed-alert: missing-diagnostic-step"
186
+ ```
187
+
188
+ ```yaml
189
+ # clean — only the first diagnostic step is added
190
+ alert: queue_wait_time_high
191
+ class: page
192
+ owner: platform-on-call
193
+ runbook: docs/runbooks/queue-wait.md
194
+ first_diagnostic_step: "open the queue wait-time panel; compare to enqueue rate"
195
+ verdict: valid-page-alert
196
+ ```
197
+
198
+ ## Gotcha
199
+
200
+ - Severity labels are not classes. `critical` in a tool's own vocabulary says
201
+ nothing about whether a human must act now.
202
+ - A page nobody can action is the fastest route to ignoring all pages.
203
+ - Reclassifying a page to `action` because the owner is unknown hides the defect
204
+ instead of fixing it.
205
+ - An alert on a threshold with `proposed` provenance is alerting on a guess —
206
+ see `logging-monitoring`.
207
+ - Queue depth alerts fire late; queue wait time fires in time.
208
+
209
+ ## Do NOT
210
+
211
+ - Do NOT ship a `page` without an owner, a runbook and a first diagnostic step.
212
+ - Do NOT page on a self-clearing condition.
213
+ - Do NOT page on a signal scored `unknown`.
214
+ - Do NOT put architecture background in a runbook — it is read under pressure.
215
+ - Do NOT let the alert's first diagnostic step and the runbook's disagree.
216
+
217
+ ## Auto-trigger keywords
218
+
219
+ - alert
220
+ - alerting
221
+ - page
222
+ - on-call
223
+ - runbook
224
+ - alert fatigue
225
+ - what earns a page
@@ -0,0 +1,17 @@
1
+ {
2
+ "skill": "alerting-doctrine",
3
+ "last_eval": "2026-08-23",
4
+ "description": "5 should-trigger + 5 should-not-trigger. Should-trigger covers alert classification and the malformed-page contract. Should-not-trigger covers the near-miss neighbours this skill deliberately does not own: signal existence (logging-monitoring), the go/no-go verdict (operational-readiness), running an open incident (incident-commander), dashboard layout (dashboard-design) and host security (server-hardening).",
5
+ "queries": [
6
+ {"q": "should this condition page someone or just open a ticket?", "trigger": true},
7
+ {"q": "review our alert rules — too many of them wake the on-call", "trigger": true},
8
+ {"q": "what has to be in a runbook for it to be worth paging into?", "trigger": true},
9
+ {"q": "this alert has no owner, is that a problem?", "trigger": true},
10
+ {"q": "define what earns a page versus an info notification", "trigger": true},
11
+ {"q": "does this project even have an error rate metric?", "trigger": false, "note": "signal existence and detection → logging-monitoring"},
12
+ {"q": "are we ready to ship this to production?", "trigger": false, "note": "go/no-go readiness verdict → operational-readiness"},
13
+ {"q": "the outage started 10 minutes ago, what do I do now?", "trigger": false, "note": "running an open incident → incident-commander"},
14
+ {"q": "how should I lay out the panels on this monitoring dashboard?", "trigger": false, "note": "dashboard layout and visualization → dashboard-design"},
15
+ {"q": "harden ssh and set up unattended upgrades on this box", "trigger": false, "note": "host security posture → server-hardening"}
16
+ ]
17
+ }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  model_tier: medium
3
3
  name: async-python-patterns
4
- description: "Use when writing Python asyncio code — picking between gather / TaskGroup / wait, structured concurrency, timeouts, cancellation, sync-bridging — decision framework only, cookbook externalized."
4
+ description: "When writing Python asyncio code — picking between gather / TaskGroup / wait, structured concurrency, timeouts, cancellation, sync-bridging — decision framework only, cookbook externalized."
5
5
  domain: engineering
6
6
  status: active
7
7
  refresh_trigger: "Python ships a new structured-concurrency primitive (post-TaskGroup), OR ≥30% of cited upstream cookbook examples become deprecated, OR the cited libraries (aiohttp, httpx, anyio, trio) cut a major version with breaking async surface changes."
@@ -261,7 +261,6 @@ Runtime confirmation (e.g. *"reproduce the cross-tenant read against staging"*,
261
261
  — rubric for "minimum control" recommendations.
262
262
  [csrc.nist.gov/projects/risk-management/sp800-53-controls](https://csrc.nist.gov/projects/risk-management/sp800-53-controls/release-search#!/800-53)
263
263
  - [`threat-modeling`](../threat-modeling/SKILL.md),
264
- [`data-exposure-review`](../data-exposure-review/SKILL.md),
265
264
  [`judge-security-auditor`](../judge-security-auditor/SKILL.md),
266
265
  [`security`](../security/SKILL.md),
267
266
  [`security-audit`](../security-audit/SKILL.md) — sibling review / implementation skills.
@@ -182,6 +182,38 @@ does not execute code, run tests, or touch the network**.
182
182
  * NEVER claim a dependency without a file:line citation from grep output
183
183
  * NEVER chase dependencies past 2nd order without explicit scope approval — flag and stop
184
184
 
185
+ ## Monorepo
186
+
187
+ In a workspace repository the reach of an edit does not stop at the workspace
188
+ that contains it. A file under `packages/ui` that three apps import has a blast
189
+ radius of four workspaces, and the grep sweep above will not find the edge —
190
+ the importing code says `@org/ui`, not a path.
191
+
192
+ **Before editing a file in a workspace other workspaces depend on, name the
193
+ affected set.** Ask the task runner, which computes it from the real graph:
194
+
195
+ ```bash
196
+ # Turborepo — everything affected by the working tree vs the previous commit
197
+ npx turbo run test --filter=...[HEAD^1]
198
+
199
+ # Nx
200
+ npx nx affected -t test
201
+ ```
202
+
203
+ `...[HEAD^1]` is the dependents form: `...` ahead of the selector means "and
204
+ everything that depends on it". Without it you get the changed package alone,
205
+ which is the answer that looks right and misses the point.
206
+
207
+ **With no runner installed**, walk it in reverse from the manifests: find the
208
+ edited file's owning workspace `name`, then grep every other workspace's
209
+ `package.json` for that name. Those are the first-order dependents; repeat once
210
+ for second order, and stop there per the 2nd-order rule above.
211
+ [`monorepo-workspace`](../monorepo-workspace/SKILL.md) § 4 prints that graph.
212
+
213
+ Report the affected set as workspace names with the manifest that declares each
214
+ edge, exactly as the reach table above reports file:line — an affected set
215
+ without its citing edge is the same unverifiable claim in coarser units.
216
+
185
217
  ## References
186
218
 
187
219
  - **Martin Fowler — "Refactoring: Improving the Design of Existing Code"** (2018)