@event4u/agent-config 14.10.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 (399) 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 +335 -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/authz-review/SKILL.md +0 -1
  45. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
  46. package/dist/agent-src/skills/brand/SKILL.md +3 -0
  47. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
  48. package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
  49. package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
  50. package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
  51. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
  52. package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
  53. package/dist/agent-src/skills/code-review/SKILL.md +11 -0
  54. package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
  55. package/dist/agent-src/skills/condense-memory/SKILL.md +3 -0
  56. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  57. package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +3 -0
  58. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
  59. package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
  60. package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
  61. package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
  62. package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
  63. package/dist/agent-src/skills/design-review/SKILL.md +79 -1
  64. package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
  65. package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
  66. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
  67. package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
  68. package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
  69. package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
  70. package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
  71. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +20 -3
  72. package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
  73. package/dist/agent-src/skills/fe-design/evals/triggers.json +65 -53
  74. package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
  75. package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
  76. package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
  77. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  78. package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
  79. package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
  80. package/dist/agent-src/skills/iconography/SKILL.md +3 -0
  81. package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
  82. package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
  83. package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
  84. package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
  85. package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
  86. package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +17 -0
  87. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
  88. package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
  89. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
  90. package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
  91. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
  92. package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
  93. package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
  94. package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
  95. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
  96. package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +17 -0
  97. package/dist/agent-src/skills/motion-choreographer/SKILL.md +6 -0
  98. package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
  99. package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
  100. package/dist/agent-src/skills/operational-readiness/evals/triggers.json +17 -0
  101. package/dist/agent-src/skills/override-management/SKILL.md +3 -0
  102. package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
  103. package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
  104. package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
  105. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
  106. package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
  107. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
  108. package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
  109. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +52 -21
  110. package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
  111. package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
  112. package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
  113. package/dist/agent-src/skills/receiving-code-review/SKILL.md +2 -2
  114. package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
  115. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
  116. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  117. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  118. package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
  119. package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
  120. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
  121. package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
  122. package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
  123. package/dist/agent-src/skills/secrets-management/SKILL.md +4 -0
  124. package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
  125. package/dist/agent-src/skills/server-hardening/evals/triggers.json +17 -0
  126. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
  127. package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
  128. package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
  129. package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
  130. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
  131. package/dist/agent-src/skills/storybook-workshop/SKILL.md +194 -0
  132. package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +17 -0
  133. package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
  134. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  135. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
  136. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
  137. package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
  138. package/dist/agent-src/skills/terraform/SKILL.md +3 -0
  139. package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
  140. package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
  141. package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
  142. package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
  143. package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -1
  144. package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
  145. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
  146. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
  147. package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
  148. package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
  149. package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
  150. package/dist/agent-src/skills/workspace-link/evals/triggers.json +17 -0
  151. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  152. package/dist/agent-src/templates/playbook.md +75 -0
  153. package/dist/agent-src/templates/roadmaps.md +37 -0
  154. package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  155. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  156. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  157. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  158. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  159. package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  160. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  161. package/dist/cli/commands/uiAudit.js +221 -0
  162. package/dist/cli/commands/uiAudit.js.map +1 -0
  163. package/dist/cli/commands/uiRender.js +206 -0
  164. package/dist/cli/commands/uiRender.js.map +1 -0
  165. package/dist/cli/main.js +22 -1
  166. package/dist/cli/main.js.map +1 -1
  167. package/dist/cli/mcp/content.js +64 -1
  168. package/dist/cli/mcp/content.js.map +1 -1
  169. package/dist/cli/mcp/dispatch.js +175 -10
  170. package/dist/cli/mcp/dispatch.js.map +1 -1
  171. package/dist/cli/registry.js +3 -0
  172. package/dist/cli/registry.js.map +1 -1
  173. package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-236PNQZK.js} +413 -391
  174. package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
  175. package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
  176. package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
  177. package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-L43NCYPB.js} +5 -0
  178. package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
  179. package/dist/cli-delegate/cmd_brand_status.js +8 -6
  180. package/dist/cli-delegate/cmd_conformance.js +3 -3
  181. package/dist/cli-delegate/cmd_doctor.js +3 -3
  182. package/dist/cli-delegate/cmd_export.js +4 -4
  183. package/dist/cli-delegate/cmd_handoff.js +1 -1
  184. package/dist/cli-delegate/cmd_preflight.js +2 -2
  185. package/dist/cli-delegate/cmd_prune.js +4 -4
  186. package/dist/cli-delegate/cmd_session_recycle.js +70 -9
  187. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  188. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  189. package/dist/cli-delegate/cmd_sync.js +4 -4
  190. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  191. package/dist/cli-delegate/cmd_validate.js +4 -4
  192. package/dist/discovery/deprecation-report.md +1 -1
  193. package/dist/discovery/discovery-manifest.json +359 -124
  194. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  195. package/dist/discovery/discovery-manifest.summary.md +4 -4
  196. package/dist/discovery/dormancy-report.md +1 -1
  197. package/dist/discovery/orphan-report.md +1 -1
  198. package/dist/discovery/packs.json +18 -8
  199. package/dist/discovery/trust-report.md +3 -3
  200. package/dist/discovery/workspaces.json +16 -6
  201. package/dist/hooks/dispatch.js +2337 -1436
  202. package/dist/install/install.mjs +795 -708
  203. package/dist/mcp/registry-manifest.json +3 -3
  204. package/dist/mcp/server.json +2 -2
  205. package/dist/mcp/server.mjs +1685 -1250
  206. package/dist/router.json +1 -1
  207. package/dist/scripts/_lib/lean_projection_mode.js +40 -0
  208. package/dist/scripts/_lib/lean_projection_mode.js.map +1 -0
  209. package/dist/scripts/_lib/scoped_projection.js +84 -0
  210. package/dist/scripts/_lib/scoped_projection.js.map +1 -1
  211. package/dist/scripts/_lib/ui_surface.js +89 -0
  212. package/dist/scripts/_lib/ui_surface.js.map +1 -0
  213. package/dist/scripts/condense.js +6 -10
  214. package/dist/scripts/condense.js.map +1 -1
  215. package/dist/scripts/project_thin_rules.js +40 -2
  216. package/dist/scripts/project_thin_rules.js.map +1 -1
  217. package/dist/server/schemas/settings.js +3 -0
  218. package/dist/server/schemas/settings.js.map +1 -1
  219. package/dist/shared/skillRanking.js +159 -0
  220. package/dist/shared/skillRanking.js.map +1 -0
  221. package/docs/contracts/provider-lifecycle.md +47 -18
  222. package/docs/contracts/settings-classes.md +14 -4
  223. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
  224. package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  225. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
  226. package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  227. package/docs/guidelines/design-antipatterns.md +4 -2
  228. package/docs/guidelines/design-asset-discipline.md +38 -0
  229. package/docs/guidelines/design-fidelity-mechanics.md +45 -29
  230. package/docs/guidelines/design-handover-extraction.md +35 -5
  231. package/docs/guidelines/design-modes.md +41 -1
  232. package/docs/guidelines/monorepo-antipatterns.md +141 -0
  233. package/llms.txt +50 -39
  234. package/package.json +1 -1
  235. package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  236. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  237. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  238. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  239. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  240. package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  241. package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  242. package/src/config/agent-settings.template.yml +28 -0
  243. package/src/config/assurance-capability-registry.json +223 -0
  244. package/src/config/assurance-threshold-budget.json +65 -0
  245. package/src/config/ci-local-parity.yml +14 -0
  246. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  247. package/src/config/dispatch-economy-metrics.json +4 -2
  248. package/src/config/evaluator-budgets.json +14 -14
  249. package/src/config/gate-coverage.yml +207 -8
  250. package/src/config/gate-violation-baselines.json +76 -72
  251. package/src/config/hook-latency-budget.json +1 -0
  252. package/src/config/hook-token-budget.json +137 -125
  253. package/src/config/pack-size-budget.json +4 -2
  254. package/src/config/quorum-attendance-budget.json +12 -4
  255. package/src/config/rule-activation-census.json +7 -3
  256. package/src/config/rule-enforcement-baseline.json +0 -1
  257. package/src/config/rule-stub-ceilings.json +112 -91
  258. package/src/scripts/_cli/cmd_doctor.ts +15 -16
  259. package/src/scripts/_cli/doctor_install_mode.ts +49 -0
  260. package/src/scripts/_cli/doctor_overrides.ts +154 -0
  261. package/src/scripts/_dispatch.bash +17 -0
  262. package/src/scripts/_lib/as_of.ts +412 -0
  263. package/src/scripts/_lib/exec_evidence.ts +7 -0
  264. package/src/scripts/_lib/hook_settings.ts +33 -0
  265. package/src/scripts/_lib/host_listing_model.ts +192 -0
  266. package/src/scripts/_lib/lean_projection_mode.ts +44 -0
  267. package/src/scripts/_lib/mcp_bridge.ts +199 -0
  268. package/src/scripts/_lib/review_independence.ts +62 -10
  269. package/src/scripts/_lib/rule_injection.ts +239 -0
  270. package/src/scripts/_lib/run_checkpoint.ts +54 -1
  271. package/src/scripts/_lib/scoped_projection.ts +96 -0
  272. package/src/scripts/_lib/session_register.ts +44 -2
  273. package/src/scripts/_lib/skill_catalogue.ts +38 -2
  274. package/src/scripts/_lib/transcript_reads.ts +207 -0
  275. package/src/scripts/_lib/ui_authority.test.ts +251 -0
  276. package/src/scripts/_lib/ui_authority.ts +343 -0
  277. package/src/scripts/ai-video/adapters/fal.sh +8 -3
  278. package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
  279. package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
  280. package/src/scripts/ai-video/adapters/kling.sh +10 -0
  281. package/src/scripts/ai-video/adapters/sora.sh +10 -0
  282. package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
  283. package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
  284. package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
  285. package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
  286. package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
  287. package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
  288. package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
  289. package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
  290. package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
  291. package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
  292. package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
  293. package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
  294. package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
  295. package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
  296. package/src/scripts/ai-video/smoke-trace.sh +450 -2
  297. package/src/scripts/ai-video/stitch.sh +191 -10
  298. package/src/scripts/ai-video/test-pipeline.sh +84 -6
  299. package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
  300. package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
  301. package/src/scripts/ai_council/clients.ts +3 -2
  302. package/src/scripts/ai_council/consensus.ts +63 -6
  303. package/src/scripts/ai_council/events_log.ts +46 -1
  304. package/src/scripts/ai_council/orchestrator.ts +103 -108
  305. package/src/scripts/ai_council/orchestrator_results.ts +166 -0
  306. package/src/scripts/ai_council/prompts.ts +12 -5
  307. package/src/scripts/ai_council/quorum.ts +82 -1
  308. package/src/scripts/ai_council/quorum_wiring.ts +82 -5
  309. package/src/scripts/ai_council/stance_tally.ts +22 -0
  310. package/src/scripts/bench_hook_latency.ts +62 -0
  311. package/src/scripts/build_proof.ts +12 -1
  312. package/src/scripts/capture_skill_catalogue.ts +21 -0
  313. package/src/scripts/check_always_budget.ts +2 -1
  314. package/src/scripts/check_augmentignore.ts +2 -1
  315. package/src/scripts/check_beta_review_markers.ts +2 -1
  316. package/src/scripts/check_composite_arming.ts +364 -0
  317. package/src/scripts/check_corpus_staleness.ts +2 -1
  318. package/src/scripts/check_council_pin_staleness.ts +3 -1
  319. package/src/scripts/check_enforcement_coverage.ts +116 -3
  320. package/src/scripts/check_enforcement_denominator.ts +365 -0
  321. package/src/scripts/check_gate_coverage.ts +2 -1
  322. package/src/scripts/check_hook_bundle_freshness.ts +13 -1
  323. package/src/scripts/check_knowledge_cards.ts +2 -1
  324. package/src/scripts/check_knowledge_pages.ts +3 -2
  325. package/src/scripts/check_memory.ts +2 -1
  326. package/src/scripts/check_no_automerge_key.ts +287 -0
  327. package/src/scripts/check_pack_conformance_fixture.ts +565 -0
  328. package/src/scripts/check_proposal.ts +2 -1
  329. package/src/scripts/check_reach_staleness.ts +2 -1
  330. package/src/scripts/check_release_adjacent_health.ts +2 -1
  331. package/src/scripts/check_release_pr_shape.ts +5 -0
  332. package/src/scripts/check_review_schema.ts +34 -1
  333. package/src/scripts/check_roadmap_trackable.ts +48 -3
  334. package/src/scripts/check_source_size_budget.ts +2 -1
  335. package/src/scripts/check_standing_payload_delta.ts +505 -0
  336. package/src/scripts/check_trigger_evals.ts +2 -1
  337. package/src/scripts/classify_change_risk.ts +281 -0
  338. package/src/scripts/compute_skill_tiers.ts +186 -0
  339. package/src/scripts/condense.ts +8 -13
  340. package/src/scripts/council_attendance_metrics.ts +183 -0
  341. package/src/scripts/council_cli.ts +10 -8
  342. package/src/scripts/council_parse_rate.ts +116 -0
  343. package/src/scripts/derive_playbooks.ts +406 -0
  344. package/src/scripts/design_slop_rules.test.ts +7 -0
  345. package/src/scripts/design_slop_rules.ts +56 -2
  346. package/src/scripts/dispatch_r2_reviewer.ts +16 -0
  347. package/src/scripts/frontend_corpus_hash.ts +116 -0
  348. package/src/scripts/grade_target_readiness.ts +478 -0
  349. package/src/scripts/hook_manifest.json +1 -1
  350. package/src/scripts/hook_manifest.yaml +97 -16
  351. package/src/scripts/hooks/concern_registry.ts +4 -0
  352. package/src/scripts/hooks/design_pass_hook.ts +356 -0
  353. package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
  354. package/src/scripts/hooks/rule_inject_hook.ts +318 -0
  355. package/src/scripts/hot_context_hook.ts +74 -7
  356. package/src/scripts/install.ts +40 -89
  357. package/src/scripts/lint_adapter_tier.ts +663 -0
  358. package/src/scripts/lint_archived_skills.ts +93 -0
  359. package/src/scripts/lint_budget_ownership.ts +2 -1
  360. package/src/scripts/lint_deterministic_time.ts +470 -0
  361. package/src/scripts/lint_framework_leakage.ts +5 -0
  362. package/src/scripts/lint_handoffs.ts +525 -1
  363. package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
  364. package/src/scripts/lint_marketplace.ts +88 -0
  365. package/src/scripts/lint_media_policy_linkage.ts +140 -1
  366. package/src/scripts/lint_one_off_age.ts +6 -1
  367. package/src/scripts/lint_override_kernel_guard.ts +87 -5
  368. package/src/scripts/lint_roadmap_complexity.ts +56 -0
  369. package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
  370. package/src/scripts/lint_rule_norm_pin.ts +321 -0
  371. package/src/scripts/lint_spawn_payload.ts +42 -5
  372. package/src/scripts/lint_symptom_intake.ts +2 -1
  373. package/src/scripts/mcp_parity_smoke.ts +30 -4
  374. package/src/scripts/mcp_render.ts +66 -1
  375. package/src/scripts/mcp_tool_fingerprint.ts +241 -0
  376. package/src/scripts/measure_risk_class_drift.ts +140 -0
  377. package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
  378. package/src/scripts/media/lib/adapter-common.sh +211 -1
  379. package/src/scripts/media/lib/adapter-contract.md +74 -6
  380. package/src/scripts/model_rule_injection.ts +907 -0
  381. package/src/scripts/project_thin_rules.ts +45 -2
  382. package/src/scripts/release.ts +66 -860
  383. package/src/scripts/release_drill.ts +59 -3
  384. package/src/scripts/release_env.ts +298 -0
  385. package/src/scripts/release_publication.ts +720 -0
  386. package/src/scripts/roadmap_context.ts +778 -0
  387. package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
  388. package/src/scripts/schemas/rule.schema.json +24 -2
  389. package/src/scripts/schemas/skill.schema.json +39 -0
  390. package/src/scripts/schemas/ui-authority.schema.json +114 -0
  391. package/src/scripts/session_register_hook.ts +29 -3
  392. package/src/scripts/sessions_cli.ts +67 -3
  393. package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
  394. package/src/scripts/token_sink_report.ts +239 -0
  395. package/src/scripts/trigger_coverage.ts +122 -3
  396. package/src/scripts/update_counts.ts +7 -3
  397. package/src/scripts/validate_frontmatter.ts +66 -0
  398. package/src/server/schemas/settings.ts +5 -0
  399. package/src/shared/skillRanking.ts +183 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  model_tier: medium
3
3
  name: logging-monitoring
4
- description: "Use when working with logging or monitoring — Sentry error tracking, Grafana/Loki log aggregation, structured logging channels, or monitoring helpers."
4
+ description: "Use when establishing what observability a project actually has — the four Golden Signals, required signal to detected implementation to evidence, and SLI/SLO provenance."
5
5
  domain: devops
6
6
  workspaces:
7
7
  - engineering
@@ -13,93 +13,276 @@ packs:
13
13
 
14
14
  ## When to use
15
15
 
16
- Use when adding logging, configuring monitoring stack, or integrating Sentry/Grafana/Loki.
16
+ Use when answering **"what does this project actually have"** for observability:
17
+ which required signal exists, what implements it, and what evidence says so. Also
18
+ when adding logging or wiring a monitoring stack — but the posture question comes
19
+ first, because you cannot add the missing signal until you know which one is
20
+ missing.
17
21
 
18
22
  Do NOT use when:
19
- - Creating Grafana dashboards (use `grafana` skill)
20
- - Dashboard design decisions (use `dashboard-design` skill)
23
+ - Classifying an alert or writing a runbook (use `alerting-doctrine`)
24
+ - Adjudicating a go/no-go readiness verdict (use `operational-readiness`)
25
+ - Creating Grafana dashboards or queries (use `grafana`)
26
+ - Dashboard layout and visualization decisions (use `dashboard-design`)
27
+ - Hardening the host itself (use `server-hardening`)
21
28
 
22
- ## Procedure: Add logging or monitoring
29
+ ## Golden Signals
23
30
 
24
- 1. Read the framework's logging config for available channels (`config/logging.php` in Laravel, `LOGGING` in Django, winston/pino in Node).
25
- 2. Check for Grafana module: `app/Modules/Grafana/`.
26
- 3. Read `agents/` docs for module-specific logging.
31
+ Four signals. The family is named in many places; these are the definitions.
32
+ A posture report covers all four or records why it cannot — never four minus the
33
+ inconvenient ones.
27
34
 
28
- ## Monitoring stack
35
+ ### Golden Signal: Latency
29
36
 
30
- | Tool | Purpose | Integration |
31
- |---|---|---|
32
- | **Sentry** | Error tracking | `sentry/sentry-laravel`, `MonitoringHelper` |
33
- | **Grafana** | Dashboards | Connected to Loki |
34
- | **Loki** | Log aggregation | `itspire/monolog-loki` via Monolog |
35
- | **Slack** | Alert notifications | Webhook for error-level |
37
+ **Measures** how long a served request takes, split by outcome — successful and
38
+ failed latency are different distributions, and averaging them hides both. Read
39
+ it as percentiles (p50 / p95 / p99), never as a mean.
36
40
 
37
- ## Log channels
41
+ **A missing one costs** the ability to see degradation that is not yet an outage.
42
+ The system is up, users are leaving, and every error-rate panel is green.
38
43
 
39
- | Channel | Purpose |
40
- |---|---|
41
- | `stack_without_slack` | Daily file + errorlog (no Slack) |
42
- | `slack` | Error alerts to Slack |
43
- | `loki` | Send logs to Grafana Loki |
44
- | `loki_import_*` | Import-specific Loki with custom labels |
45
- | `daily` | Rotating file logs |
44
+ **Typical detection paths** — APM transaction traces, a request-duration
45
+ histogram, reverse-proxy or load-balancer access logs, a middleware timer.
46
46
 
47
- ### Loki labels
47
+ ### Golden Signal: Traffic
48
48
 
49
- ```php
50
- 'globalLabels' => ['app' => '{project}', 'service' => '{service}', 'env' => $env],
51
- ```
49
+ **Measures** demand on the system — requests per second, jobs enqueued, messages
50
+ consumed, active sessions. The denominator every other signal needs.
51
+
52
+ **A missing one costs** all interpretation of the other three. Errors doubling is
53
+ meaningless without knowing whether traffic doubled; a quiet incident and a quiet
54
+ Sunday are indistinguishable.
55
+
56
+ **Typical detection paths** — a request counter, access-log volume, queue depth
57
+ and enqueue rate, a CDN or gateway request metric.
58
+
59
+ ### Golden Signal: Errors
60
+
61
+ **Measures** the rate of requests that failed — explicitly (a 5xx, a raised
62
+ exception, a dead-lettered job) or implicitly (a 200 carrying a wrong body, a
63
+ policy-violating success). Rate, not count.
64
+
65
+ **A missing one costs** the ability to distinguish a broken deploy from a slow
66
+ one, and it is the signal most often mistaken for complete because an
67
+ error-tracking SDK is installed. An exception tracker is not an error rate: it
68
+ sees raised exceptions, not handled failures or wrong answers.
69
+
70
+ **Typical detection paths** — error-tracking SDK events, HTTP status
71
+ distribution, dead-letter queue depth, log-level counts at `error` and above.
72
+
73
+ ### Golden Signal: Saturation
74
+
75
+ **Measures** how full the constrained resource is — the one that runs out first.
76
+ Connection pool, worker slots, disk, memory, file descriptors, a third-party
77
+ rate-limit budget. Expressed against its ceiling, which means the ceiling has to
78
+ be known.
52
79
 
53
- The `service` label differentiates log types in Grafana queries.
80
+ **A missing one costs** every early warning. Saturation is the only one of the
81
+ four that is predictive: latency, traffic and errors report what already
82
+ happened, saturation reports what is about to. It is also the signal most often
83
+ absent entirely — see `scale-discipline` R-A12, which asks the finite-resource
84
+ question at review time.
54
85
 
55
- ### Config flags
86
+ **Typical detection paths** — pool-utilisation gauges, queue wait time (not
87
+ depth), host memory and disk metrics, rate-limit headers from an upstream
88
+ provider.
56
89
 
57
- | Env Variable | Purpose | Default |
90
+ ## Evidence states — a threshold carries its provenance
91
+
92
+ A number in a posture report is only as good as where it came from, and the
93
+ failure this prevents is an agent-suggested SLO becoming a commitment nobody
94
+ made. Provenance is part of the value, not a footnote.
95
+
96
+ | Provenance | Meaning | May be rendered as operational |
58
97
  |---|---|---|
59
- | `LOG_CLIENT_SOFTWARE_REQUESTS` | Log incoming API requests to DB | `false` |
60
- | `LOG_EXTERNAL_API_REQUESTS` | Log outgoing external API requests | `true` |
61
- | `LOG_WEBHOOK_REQUESTS` | Log webhook requests to DB | `false` |
62
- | `LOG_CHANNEL_IMPORT` | Channel for import logs | `daily` |
98
+ | `measured` | Observed in running telemetry | Yes |
99
+ | `committed` | Stated in a doc, contract or SLA, not yet verified | Yes, marked unverified |
100
+ | `proposed` | The agent suggested it | **Never** |
101
+ | `unknown` | Inspection could not establish a result | **Never** |
102
+
103
+ A `proposed` threshold stays `proposed` through every rendering. There is no
104
+ promotion path — not "it looks right", not "the user did not object". Promotion
105
+ requires a measurement or a stated commitment, which changes the provenance
106
+ first and the rendering second.
63
107
 
64
- ## Grafana/Loki dashboard rules
108
+ Two absences that are not the same thing, and collapsing them is how a gap
109
+ becomes invisible:
65
110
 
66
- - Hide Loki metadata columns: `labelTypes`, `traceID`, `traceID (field)`.
67
- - Use correct Loki service labels: `import_result` for final states, `import_snapshot` for cron.
68
- - Verify column names match data semantics.
111
+ - **`unavailable`** — affirmatively established that the project cannot supply
112
+ this signal. Requires a **non-empty reason**. A recorded null.
113
+ - **`unknown`** — nobody looked, or the look was inconclusive. Never counts as
114
+ compliant, never counts as green, and is not a null — it is unfinished work.
69
115
 
70
- ## Conventions
116
+ Reported signal count equals four minus the recorded `unavailable` nulls.
117
+ `unknown` reduces nothing; it is an open question.
71
118
 
72
- → See guideline `php/logging.md` for log levels, structured context, what to log, Sentry patterns.
119
+ ## Procedure: Establish the observability posture
120
+
121
+ 1. **Take the four signals as the requirement.** Latency, traffic, errors,
122
+ saturation. The list does not shrink to what the project happens to have.
123
+ 2. **Detect what implements each one.** Read the project rather than assuming a
124
+ stack: the logging config (`config/logging.php` in Laravel, `LOGGING` in
125
+ Django, `winston`/`pino` config in Node, `config/environments` in Rails),
126
+ then the metrics and APM wiring, then the dashboards and alert rules that
127
+ already exist. An installed SDK is evidence of a *capability*, never of a
128
+ *signal* — a Sentry integration does not give you latency percentiles.
129
+ 3. **Attach evidence to every claim.** One concrete artefact per signal —
130
+ `file:line`, a dashboard panel, a metric name, a config key. A signal with no
131
+ artefact is `unknown`, not present.
132
+ 4. **Record what is genuinely absent as `unavailable` plus a reason.** "No APM
133
+ configured, so no request-duration distribution exists" is a null. Silence is
134
+ not.
135
+ 5. **Mark every threshold's provenance** per the table above, before the report
136
+ is rendered rather than after.
137
+ 6. **Hand the normalized result on.** `alerting-doctrine` consumes it to decide
138
+ what earns a page; `operational-readiness` consumes it as one input to a
139
+ go/no-go verdict. Neither re-derives it.
73
140
 
74
141
  ### Validate
75
142
 
76
- - Verify log level matches severity (no `Log::error()` for info-level events).
143
+ - Verify all four signals appear in the report — present, `unavailable` with a
144
+ reason, or `unknown`. Four rows, always.
145
+ - Confirm every present signal cites a concrete artefact, not a stack guess.
146
+ - Confirm no `proposed` or `unknown` threshold is rendered as operational.
147
+ - Confirm `unavailable` rows carry a non-empty reason.
148
+ - Verify log level matches severity (no `error` for handled conditions).
77
149
  - Confirm structured context is passed (not string interpolation).
78
150
  - Check that no sensitive data (passwords, tokens, PII) appears in log output.
79
- - Verify Sentry captures include relevant context for debugging.
80
151
 
81
152
  ## Output format
82
153
 
83
- 1. Logging configuration or structured log statements
84
- 2. Sentry integration with proper context and breadcrumbs
154
+ 1. A four-row signal table — signal, status, implementation, evidence artefact.
155
+ 2. Any threshold with its provenance marked.
156
+ 3. The `unavailable` nulls with their reasons, and the `unknown` rows as open
157
+ questions.
158
+
159
+ ## Examples
160
+
161
+ Contract fixtures. Each pair differs **only** in the condition under test, and
162
+ each case states the verdict it must produce. These are contract evidence for
163
+ review, not an executable suite — no parser or runner reads them.
164
+
165
+ ### Missing signal — malformed vs clean
166
+
167
+ ```yaml
168
+ # malformed — logs and error tracking, no saturation anywhere.
169
+ # Scored as missing a signal, NOT as observable.
170
+ signals:
171
+ latency: { status: present, evidence: "APM: http.server.duration p95" }
172
+ traffic: { status: present, evidence: "nginx access log rate" }
173
+ errors: { status: present, evidence: "error-tracker project 41" }
174
+ # saturation omitted entirely
175
+ verdict: "missing-signal: saturation"
176
+ reason: "no pool, memory, disk or rate-limit utilisation metric detected"
177
+ ```
178
+
179
+ ```yaml
180
+ # clean — the same project with the one signal supplied.
181
+ signals:
182
+ latency: { status: present, evidence: "APM: http.server.duration p95" }
183
+ traffic: { status: present, evidence: "nginx access log rate" }
184
+ errors: { status: present, evidence: "error-tracker project 41" }
185
+ saturation: { status: present, evidence: "db_pool_in_use / db_pool_size gauge" }
186
+ verdict: all-signals-detected
187
+ ```
188
+
189
+ ### Provenance — malformed vs clean
190
+
191
+ ```yaml
192
+ # malformed — an agent-suggested number rendered as a commitment.
193
+ slo:
194
+ name: checkout_availability
195
+ threshold: 99.9
196
+ provenance: proposed
197
+ operational: true # <- promotion with no measurement and no commitment
198
+ verdict: invalid-provenance
199
+ ```
200
+
201
+ ```yaml
202
+ # clean — the suggestion stays a suggestion.
203
+ slo:
204
+ name: checkout_availability
205
+ threshold: 99.9
206
+ provenance: proposed
207
+ operational: false
208
+ verdict: valid-proposed-threshold
209
+ ```
210
+
211
+ ### Unavailable signal — malformed vs clean
212
+
213
+ ```yaml
214
+ # malformed — a null with no reason is a silently dropped gap.
215
+ signals:
216
+ saturation: { status: unavailable }
217
+ verdict: invalid-unavailable-signal
218
+ ```
219
+
220
+ ```yaml
221
+ # clean — the null carries why.
222
+ signals:
223
+ saturation:
224
+ status: unavailable
225
+ reason: "managed runtime exposes no pool or host metrics on this plan"
226
+ verdict: valid-unavailable-signal
227
+ ```
228
+
229
+ ## Detected implementation — stack-specific evidence
230
+
231
+ Reached **after** detection, never before it. These are what a detected
232
+ implementation looks like in one common stack; the neutral model above is what
233
+ you reason from. Deep vendor material lives in the specialists, which this skill
234
+ points at rather than absorbing.
235
+
236
+ | Tool | Signal it can carry | Reached by |
237
+ |---|---|---|
238
+ | Error tracker (Sentry) | errors (raised only) | `sentry-integration` |
239
+ | Grafana | any, if the metric exists | `grafana`, `dashboard-design` |
240
+ | Loki | errors and traffic via log volume | `grafana` |
241
+ | Slack webhook | none — a delivery channel | `alerting-doctrine` |
242
+
243
+ A delivery channel is not a signal. Slack carrying error-level messages tells you
244
+ notifications work, not that an error *rate* exists.
245
+
246
+ A channel layout repeats across stacks whatever names it uses: a rotating file
247
+ channel, an error-alert channel, an aggregation channel, and a composite that
248
+ deliberately excludes the alert leg so a noisy job cannot page anyone. Aggregation
249
+ labels carry app, service and environment; the **service** label is what separates
250
+ log types in a query, and a workload needing its own labels gets its own scoped
251
+ channel rather than a shared one. Which categories reach which channel is gated by
252
+ config flags, not by call sites — so read the flags before concluding a category
253
+ is unlogged.
254
+
255
+ → Log levels, structured context, what to log, and error-tracker patterns:
256
+ guideline `php/logging.md`.
85
257
 
86
258
  ## Gotcha
87
259
 
88
- - Sentry has 200KB event size limit — large context gets truncated.
260
+ - An installed SDK is a capability, not a signal — the commonest false green.
261
+ - Queue **depth** is a traffic signal; queue **wait time** is the saturation one.
262
+ - Saturation needs a ceiling. A utilisation number with no known limit is
263
+ `unknown`, not present.
264
+ - Error trackers see raised exceptions, not handled failures or wrong answers.
265
+ - Sentry has a 200KB event size limit — large context gets truncated.
89
266
  - Structured logging keys must be `snake_case`.
90
- - Don't create Loki channels without corresponding Grafana dashboard query.
267
+ - Don't create a log channel without the query or dashboard that reads it.
91
268
 
92
269
  ## Do NOT
93
270
 
94
- - Do NOT use Sentry SDK directly — use `MonitoringHelper`.
95
- - Do NOT interpolate variables into log messages — use context array.
96
- - Do NOT log at `error` level for expected/handled conditions.
271
+ - Do NOT report three signals because the fourth was inconvenient — record it as
272
+ `unavailable` with a reason, or as `unknown`.
273
+ - Do NOT render a `proposed` or `unknown` threshold as operational.
274
+ - Do NOT treat `unknown` as green, compliant, or "probably fine".
275
+ - Do NOT infer a signal from an installed dependency.
276
+ - Do NOT interpolate variables into log messages — use a context array.
277
+ - Do NOT log at `error` level for expected, handled conditions.
97
278
 
98
279
  ## Auto-trigger keywords
99
280
 
100
281
  - logging
101
282
  - monitoring
102
- - Sentry
103
- - Grafana
283
+ - observability
284
+ - Golden Signals
285
+ - SLI
286
+ - SLO
104
287
  - structured logging
105
288
  - log levels
@@ -13,6 +13,9 @@ trust:
13
13
  level: experimental
14
14
  install:
15
15
  removable: true
16
+ scope:
17
+ write: []
18
+ verification_reason: "execution declares no handler, so this skill runs nothing of its own — every write is the calling agent's, under the rules that govern it. No command can prove a scope the skill never executes."
16
19
  execution:
17
20
  type: manual
18
21
  ---
@@ -3,6 +3,9 @@ model_tier: lite
3
3
  name: md-language-check
4
4
  description: "Use BEFORE saving any .md under .augment/, dist/agent-src*/, or agents/ — scans umlauts, German function words, and German phrases outside DE:/EN: anchor blocks. Hard gate per language-and-tone."
5
5
  domain: process
6
+ scope:
7
+ write: []
8
+ verification_reason: "the declared command is a read-only checker: grep -c 'writeFileSync|mkdirSync|appendFileSync' src/scripts/check_md_language.ts returns 0. Absence of a write is not something a command can prove."
6
9
  execution:
7
10
  type: assisted
8
11
  handler: shell
@@ -0,0 +1,149 @@
1
+ ---
2
+ model_tier: medium
3
+ name: monorepo-workspace
4
+ description: "Use to orient in a monorepo — which package manager, which workspaces, which task runner and its tasks — derived from the repository's own config and the runner's own listing, never guessed."
5
+ domain: engineering
6
+ workspaces:
7
+ - engineering
8
+ packs:
9
+ - engineering-base
10
+ ---
11
+
12
+ # Monorepo workspace orientation
13
+
14
+ Read-only. Answers "what is this repository, structurally" before anything
15
+ edits it: the package manager, the workspace list, the task runner, and the
16
+ tasks the runner actually defines.
17
+
18
+ Every answer is a **pointer plus a digest** — the file that states the fact and
19
+ a short quotation of it — never a flattened claim. This is the Class-A shape
20
+ [`standards-from-config`](../standards-from-config/SKILL.md) uses, and for the
21
+ same reason: a digest the reader can check beats a summary they have to trust.
22
+
23
+ ## When to use
24
+
25
+ - Before editing anything in a repository with `apps/`, `packages/`, `libs/`,
26
+ a `pnpm-workspace.yaml`, a `turbo.json`, or an `nx.json`.
27
+ - "Which packages depend on `@org/ui`?", "what does `build` run here?",
28
+ "which workspace owns this file?"
29
+ - Before a cross-workspace change, as the input to
30
+ [`blast-radius-analyzer`](../blast-radius-analyzer/SKILL.md) § Monorepo.
31
+
32
+ **Not** for authoring a component or picking a UI idiom — the stack detector
33
+ already reports the frontend workspace as `state.stack.scope_root`, and the UI
34
+ lane routes on that.
35
+
36
+ ## Procedure
37
+
38
+ ### 1. Package manager — from the declaration, then the lockfile
39
+
40
+ `packageManager` in the root `package.json` is the declaration and wins when
41
+ present (it is what Corepack enforces). Otherwise infer from the lockfile:
42
+ `pnpm-lock.yaml` → pnpm, `yarn.lock` → yarn, `bun.lock` / `bun.lockb` → bun,
43
+ `package-lock.json` → npm. Two lockfiles is a finding, not a tie to break —
44
+ report both and stop.
45
+
46
+ ### 2. Workspaces — from the declarative source
47
+
48
+ In precedence order, and report which one answered:
49
+
50
+ | Source | Field |
51
+ |---|---|
52
+ | `pnpm-workspace.yaml` | `packages:` |
53
+ | `package.json` | `workspaces` (array, or `{ packages: [...] }`) |
54
+ | `nx.json` beside per-project `project.json` | Nx infers; use step 3 |
55
+ | `lerna.json` | `packages` |
56
+
57
+ Globs are globs: `packages/*` means every direct child carrying a manifest, not
58
+ every directory.
59
+
60
+ ### 3. Task runner — ask the runner, do not read its config
61
+
62
+ When a runner is present, its own listing is the source of truth, because a
63
+ runner infers projects that appear in no config file you can read:
64
+
65
+ ```bash
66
+ # Nx — never read project.json by hand for the project list
67
+ npx nx show projects
68
+ npx nx show project <name> # targets for one project
69
+
70
+ # Turborepo
71
+ npx turbo ls
72
+ ```
73
+
74
+ Print the task list **with each task's `description` field when it has one** —
75
+ `turbo.json` tasks carry an optional `description`, and it is the only place the
76
+ repository says what a task is *for* rather than what it depends on.
77
+
78
+ ### 4. No runner on PATH — walk the manifests and say so
79
+
80
+ `turbo` and `nx` are the **consumer project's** binaries, invoked through its
81
+ own `npx` / `pnpm dlx`. This package never installs them. When neither
82
+ resolves, build the graph from the manifests instead: for each workspace, read
83
+ its `dependencies` / `devDependencies` and keep the entries whose names match
84
+ another workspace's `name`. That is the dependency graph, and it is complete
85
+ for `workspace:`-linked packages.
86
+
87
+ State plainly that the listing came from manifests rather than the runner — an
88
+ inferred target list can miss runner-inferred targets. This is the posture
89
+ [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md) already takes for the shadcn
90
+ CLI; the stop condition is `missing-tool-handling` (never install it silently,
91
+ never fake the output).
92
+
93
+ ## Output format
94
+
95
+ An orientation report MUST contain, in order:
96
+
97
+ 1. **The package manager**, with the source that decided it — `packageManager`
98
+ when declared, otherwise the lockfile filename. Two lockfiles is reported as
99
+ a finding, never resolved by picking one.
100
+ 2. **The workspace table** — one row per workspace: directory path, package
101
+ `name`, and its workspace-internal dependencies. Both the path and the name,
102
+ because the graph links on `name` and humans talk in paths.
103
+ 3. **The task runner and its tasks**, each task with its `description` field
104
+ when the config carries one, and its `dependsOn` when it has one.
105
+ 4. **A source line** naming which of the two paths produced the listing — the
106
+ runner's own (`turbo ls` / `nx show projects`) or the manifest walk. When it
107
+ was the manifest walk, the line also says that runner-inferred targets may be
108
+ missing.
109
+ ```
110
+ Package manager: pnpm@9.12.0 [package.json#packageManager]
111
+ Workspaces (2) [pnpm-workspace.yaml#packages: apps/*, packages/*]
112
+ apps/web @fixture/web deps: @fixture/ui
113
+ packages/ui @fixture/ui deps: —
114
+ Task runner: turbo [turbo.json#tasks]
115
+ build "Compile every workspace to its dist/ output." dependsOn: ^build
116
+ lint "Run the workspace linter over its own sources."
117
+ test "Run the workspace unit tests." dependsOn: ^build
118
+ Source: turbo ls (runner listing)
119
+ ```
120
+
121
+ When the runner was absent, the last line reads
122
+ `Source: manifest walk (turbo not on PATH — runner-inferred targets may be missing)`.
123
+
124
+ ## Gotcha
125
+
126
+ - A workspace's directory name and its package `name` are different keys. The
127
+ graph links on `name`; humans talk in paths. Print both.
128
+ - `packages/eslint-config` is a workspace. It is not a frontend, and it is not
129
+ a scope candidate for a UI change.
130
+ - An `nx.json` with no `workspaces` key in `package.json` is normal, not broken.
131
+ - `packageManager` pinning a manager whose lockfile is absent means the install
132
+ was never run with it. Report the mismatch.
133
+
134
+ ## Do NOT
135
+
136
+ - Read `project.json` by hand to enumerate Nx projects — `nx show projects` is
137
+ the source of truth and includes inferred targets.
138
+ - Install `turbo` or `nx` to answer a question. They are the consumer's
139
+ binaries; when absent, walk the manifests and say that is what you did.
140
+ - Flatten the answer into prose without the file that states it.
141
+ - Report a workspace list from the conventional directories when a declarative
142
+ source exists — the declaration is authoritative, and the two can disagree.
143
+
144
+ ## See also
145
+
146
+ - [`standards-from-config`](../standards-from-config/SKILL.md) — the Class-A pointer+digest shape this follows.
147
+ - [`workspace-link`](../workspace-link/SKILL.md) — when a cross-workspace import will not resolve.
148
+ - [`blast-radius-analyzer`](../blast-radius-analyzer/SKILL.md) — § Monorepo consumes this graph.
149
+ - [`monorepo-antipatterns`](../../../docs/guidelines/monorepo-antipatterns.md) — diff-detectable task-graph mistakes.
@@ -0,0 +1,17 @@
1
+ {
2
+ "skill": "monorepo-workspace",
3
+ "last_eval": "2026-08-23",
4
+ "description": "5 should-trigger + 5 should-not-trigger. Should-trigger covers structural orientation in a workspace repository: the dependency graph between workspaces, the task runner's own task list, and which workspace owns a path. Should-not-trigger covers near-miss neighbors: authoring a component (the UI lane routes on state.stack.scope_root, not on this skill), a cross-workspace edit's impact set (blast-radius-analyzer § Monorepo), an unresolved workspace import (workspace-link), single-repo dependency questions, and coding-standards questions (standards-from-config).",
5
+ "queries": [
6
+ {"q": "which packages depend on @org/ui", "trigger": true},
7
+ {"q": "what workspaces are in this monorepo and which package manager does it use", "trigger": true},
8
+ {"q": "what does the build task actually run here", "trigger": true},
9
+ {"q": "list the nx projects in this repo", "trigger": true},
10
+ {"q": "which workspace owns packages/ui/src/button.tsx", "trigger": true},
11
+ {"q": "add a button", "trigger": false, "note": "authoring a component; the UI lane routes on state.stack.scope_root"},
12
+ {"q": "what breaks if I change this shared type in packages/ui", "trigger": false, "note": "impact set of an edit → blast-radius-analyzer § Monorepo"},
13
+ {"q": "cannot find module @org/ui when I import it", "trigger": false, "note": "unresolved workspace import → workspace-link"},
14
+ {"q": "what version of react does this project use", "trigger": false, "note": "a single dependency lookup, no workspace structure involved"},
15
+ {"q": "what line length does this project use", "trigger": false, "note": "coding standards from tooling config → standards-from-config"}
16
+ ]
17
+ }
@@ -59,6 +59,12 @@ Do NOT use when:
59
59
  for Step 3.
60
60
  4. If a `character.json` lock exists, load it verbatim — identity
61
61
  tokens are immutable.
62
+ 5. Continuous take or connector asked for? Read the model's
63
+ `start_frame` / `end_frame` first —
64
+ `scripts/ai-video/adapters/<id>.sh capability --model <m>`. `null` is
65
+ unknown, never `true`. A model that cannot frame-lock is **declined
66
+ with a one-line why**, never substituted in
67
+ ([`adapter-contract.md#end_image`](../../../scripts/media/lib/adapter-contract.md#end_image)).
62
68
 
63
69
  ### Step 1: Camera choreography
64
70
 
@@ -8,6 +8,10 @@ workspaces:
8
8
  - engineering
9
9
  packs:
10
10
  - engineering-base
11
+ triggers:
12
+ - phrase: "tenant isolation"
13
+ - phrase: "cross-tenant"
14
+ - phrase: "tenant scoping"
11
15
  ---
12
16
 
13
17
  <!-- Framework scope: Laravel only. Uses Eloquent model conventions,