@event4u/agent-config 14.10.0 → 14.12.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 (667) 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 +161 -208
  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/evidence-discipline.md +26 -0
  16. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
  17. package/dist/agent-src/rules/active-remediation.md +3 -3
  18. package/dist/agent-src/rules/code-provenance.md +2 -2
  19. package/dist/agent-src/rules/context-hygiene.md +13 -33
  20. package/dist/agent-src/rules/council-availability.md +2 -2
  21. package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
  22. package/dist/agent-src/rules/design-fidelity.md +18 -0
  23. package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
  24. package/dist/agent-src/rules/evaluator-independence.md +56 -44
  25. package/dist/agent-src/rules/fix-what-you-see.md +9 -1
  26. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  27. package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
  28. package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
  29. package/dist/agent-src/rules/playbook-precedence.md +105 -0
  30. package/dist/agent-src/rules/recurring-criticism.md +3 -1
  31. package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
  32. package/dist/agent-src/rules/scale-discipline.md +24 -0
  33. package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
  34. package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
  35. package/dist/agent-src/rules/ui-audit-gate.md +27 -15
  36. package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
  37. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
  38. package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
  39. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
  40. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
  41. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
  42. package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
  43. package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -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-refactoring/SKILL.md +45 -1
  54. package/dist/agent-src/skills/code-review/SKILL.md +75 -5
  55. package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
  56. package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
  57. package/dist/agent-src/skills/condense-memory/SKILL.md +3 -0
  58. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  59. package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +3 -0
  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 +79 -1
  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/estimate-ticket/SKILL.md +3 -0
  73. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +28 -4
  74. package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
  75. package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
  76. package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
  77. package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
  78. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  79. package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
  80. package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
  81. package/dist/agent-src/skills/iconography/SKILL.md +3 -0
  82. package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
  83. package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
  84. package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
  85. package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
  86. package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -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/motion-choreographer/SKILL.md +6 -0
  97. package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
  98. package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
  99. package/dist/agent-src/skills/override-management/SKILL.md +3 -0
  100. package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
  101. package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
  102. package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
  103. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
  104. package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
  105. package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
  106. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
  107. package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
  108. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +81 -33
  109. package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
  110. package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
  111. package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
  112. package/dist/agent-src/skills/receiving-code-review/SKILL.md +2 -2
  113. package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
  114. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
  115. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  116. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  117. package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
  118. package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
  119. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
  120. package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
  121. package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
  122. package/dist/agent-src/skills/secrets-management/SKILL.md +4 -0
  123. package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
  124. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
  125. package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
  126. package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
  127. package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
  128. package/dist/agent-src/skills/skill-writing/references/procedure.md +24 -2
  129. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
  130. package/dist/agent-src/skills/storybook-workshop/SKILL.md +203 -0
  131. package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
  132. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  133. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
  134. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
  135. package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
  136. package/dist/agent-src/skills/terraform/SKILL.md +3 -0
  137. package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
  138. package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
  139. package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
  140. package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
  141. package/dist/agent-src/skills/ui-component-architect/SKILL.md +17 -1
  142. package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
  143. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
  144. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
  145. package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
  146. package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
  147. package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
  148. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  149. package/dist/agent-src/templates/playbook.md +75 -0
  150. package/dist/agent-src/templates/roadmaps.md +37 -0
  151. package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  152. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  153. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  154. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  155. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  156. package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  157. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  158. package/dist/cli/commands/uiAudit.js +221 -0
  159. package/dist/cli/commands/uiRender.js +206 -0
  160. package/dist/cli/main.js +22 -1
  161. package/dist/cli/mcp/content.js +64 -1
  162. package/dist/cli/mcp/dispatch.js +175 -10
  163. package/dist/cli/registry.js +3 -0
  164. package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
  165. package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
  166. package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-JCW7ZLHK.js} +10 -0
  167. package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-JJA2QEWA.js} +413 -391
  168. package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
  169. package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
  170. package/dist/cli-delegate/cmd_brand_status.js +8 -6
  171. package/dist/cli-delegate/cmd_conformance.js +3 -3
  172. package/dist/cli-delegate/cmd_doctor.js +3 -3
  173. package/dist/cli-delegate/cmd_export.js +4 -4
  174. package/dist/cli-delegate/cmd_handoff.js +1 -1
  175. package/dist/cli-delegate/cmd_preflight.js +2 -2
  176. package/dist/cli-delegate/cmd_prune.js +4 -4
  177. package/dist/cli-delegate/cmd_session_recycle.js +70 -9
  178. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  179. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  180. package/dist/cli-delegate/cmd_sync.js +4 -4
  181. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  182. package/dist/cli-delegate/cmd_validate.js +4 -4
  183. package/dist/discovery/deprecation-report.md +1 -1
  184. package/dist/discovery/discovery-manifest.json +362 -127
  185. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  186. package/dist/discovery/discovery-manifest.summary.md +4 -4
  187. package/dist/discovery/dormancy-report.md +1 -1
  188. package/dist/discovery/orphan-report.md +1 -1
  189. package/dist/discovery/packs.json +18 -8
  190. package/dist/discovery/trust-report.md +3 -3
  191. package/dist/discovery/workspaces.json +16 -6
  192. package/dist/hooks/dispatch.js +2575 -1472
  193. package/dist/install/install.mjs +800 -708
  194. package/dist/mcp/registry-manifest.json +3 -3
  195. package/dist/mcp/server.json +2 -2
  196. package/dist/mcp/server.mjs +1685 -1250
  197. package/dist/router.json +1 -1
  198. package/dist/scripts/_lib/lean_projection_mode.js +40 -0
  199. package/dist/scripts/_lib/scoped_projection.js +84 -0
  200. package/dist/scripts/_lib/ui_surface.js +89 -0
  201. package/dist/scripts/condense.js +6 -10
  202. package/dist/scripts/project_thin_rules.js +40 -2
  203. package/dist/server/schemas/settings.js +6 -0
  204. package/dist/shared/skillRanking.js +159 -0
  205. package/docs/contracts/provider-lifecycle.md +47 -18
  206. package/docs/contracts/settings-classes.md +35 -5
  207. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
  208. package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
  209. package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  210. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
  211. package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  212. package/docs/guidelines/code-clarity.md +21 -0
  213. package/docs/guidelines/design-antipatterns.md +4 -2
  214. package/docs/guidelines/design-asset-discipline.md +38 -0
  215. package/docs/guidelines/design-fidelity-mechanics.md +45 -29
  216. package/docs/guidelines/design-handover-extraction.md +35 -5
  217. package/docs/guidelines/design-modes.md +41 -1
  218. package/docs/guidelines/monorepo-antipatterns.md +141 -0
  219. package/docs/guidelines/redundancy-taxonomy.md +180 -0
  220. package/llms.txt +50 -39
  221. package/package.json +6 -2
  222. package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  223. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  224. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  225. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  226. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  227. package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  228. package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  229. package/src/config/agent-settings.template.yml +44 -0
  230. package/src/config/assurance-capability-registry.json +223 -0
  231. package/src/config/assurance-threshold-budget.json +65 -0
  232. package/src/config/budgets.yml +19 -0
  233. package/src/config/ci-local-parity.yml +29 -0
  234. package/src/config/discovery/prompt-patterns.yml +56 -0
  235. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  236. package/src/config/dispatch-economy-metrics.json +4 -2
  237. package/src/config/estate-count-budget.json +8 -3
  238. package/src/config/evaluator-budgets.json +14 -14
  239. package/src/config/gate-coverage.yml +392 -8
  240. package/src/config/gate-violation-baselines.json +76 -72
  241. package/src/config/hook-latency-budget.json +1 -0
  242. package/src/config/hook-token-budget.json +137 -125
  243. package/src/config/pack-size-budget.json +39 -10
  244. package/src/config/preamble-payload-budget.json +97 -71
  245. package/src/config/quorum-attendance-budget.json +12 -4
  246. package/src/config/routing-coverage-seed.json +29 -0
  247. package/src/config/rule-activation-census.json +7 -3
  248. package/src/config/rule-enforcement-baseline.json +0 -1
  249. package/src/config/rule-stub-ceilings.json +112 -91
  250. package/src/config/suggestion-capture.json +28 -0
  251. package/src/config/surface-matrix.yml +21 -2
  252. package/src/config/web-launch-readiness.json +188 -0
  253. package/src/scripts/_cli/cmd_doctor.ts +15 -16
  254. package/src/scripts/_cli/doctor_install_mode.ts +49 -0
  255. package/src/scripts/_cli/doctor_overrides.ts +154 -0
  256. package/src/scripts/_dispatch.bash +17 -0
  257. package/src/scripts/_lib/as_of.ts +412 -0
  258. package/src/scripts/_lib/exec_evidence.ts +7 -0
  259. package/src/scripts/_lib/gate_baseline.ts +150 -1
  260. package/src/scripts/_lib/hook_settings.ts +33 -0
  261. package/src/scripts/_lib/host_listing_model.ts +192 -0
  262. package/src/scripts/_lib/lean_projection_mode.ts +44 -0
  263. package/src/scripts/_lib/mcp_bridge.ts +199 -0
  264. package/src/scripts/_lib/review_independence.ts +62 -10
  265. package/src/scripts/_lib/rule_injection.ts +239 -0
  266. package/src/scripts/_lib/run_checkpoint.ts +54 -1
  267. package/src/scripts/_lib/scoped_projection.ts +96 -0
  268. package/src/scripts/_lib/session_register.ts +44 -2
  269. package/src/scripts/_lib/skill_catalogue.ts +38 -2
  270. package/src/scripts/_lib/skill_estate.ts +115 -0
  271. package/src/scripts/_lib/transcript_reads.ts +207 -0
  272. package/src/scripts/_lib/ui_authority.ts +343 -0
  273. package/src/scripts/ai-video/adapters/fal.sh +8 -3
  274. package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
  275. package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
  276. package/src/scripts/ai-video/adapters/kling.sh +10 -0
  277. package/src/scripts/ai-video/adapters/sora.sh +10 -0
  278. package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
  279. package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
  280. package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
  281. package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
  282. package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
  283. package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
  284. package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
  285. package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
  286. package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
  287. package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
  288. package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
  289. package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
  290. package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
  291. package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
  292. package/src/scripts/ai-video/smoke-trace.sh +450 -2
  293. package/src/scripts/ai-video/stitch.sh +191 -10
  294. package/src/scripts/ai-video/test-pipeline.sh +84 -6
  295. package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
  296. package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
  297. package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
  298. package/src/scripts/ai_council/clients.ts +3 -2
  299. package/src/scripts/ai_council/consensus.ts +63 -6
  300. package/src/scripts/ai_council/events_log.ts +46 -1
  301. package/src/scripts/ai_council/orchestrator.ts +103 -108
  302. package/src/scripts/ai_council/orchestrator_results.ts +166 -0
  303. package/src/scripts/ai_council/prompts.ts +12 -5
  304. package/src/scripts/ai_council/quorum.ts +82 -1
  305. package/src/scripts/ai_council/quorum_wiring.ts +82 -5
  306. package/src/scripts/ai_council/stance_tally.ts +22 -0
  307. package/src/scripts/bench_hook_latency.ts +62 -0
  308. package/src/scripts/build_proof.ts +12 -1
  309. package/src/scripts/capture_skill_catalogue.ts +21 -0
  310. package/src/scripts/check_always_budget.ts +2 -1
  311. package/src/scripts/check_augmentignore.ts +2 -1
  312. package/src/scripts/check_beta_review_markers.ts +2 -1
  313. package/src/scripts/check_bundle_path_leakage.ts +162 -7
  314. package/src/scripts/check_command_examples.ts +557 -0
  315. package/src/scripts/check_composite_arming.ts +364 -0
  316. package/src/scripts/check_corpus_staleness.ts +2 -1
  317. package/src/scripts/check_council_pin_staleness.ts +3 -1
  318. package/src/scripts/check_enforcement_coverage.ts +116 -3
  319. package/src/scripts/check_enforcement_denominator.ts +365 -0
  320. package/src/scripts/check_estate_count.ts +122 -3
  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_preamble_payload_budget.ts +30 -3
  329. package/src/scripts/check_proposal.ts +2 -1
  330. package/src/scripts/check_reach_staleness.ts +2 -1
  331. package/src/scripts/check_release_adjacent_health.ts +2 -1
  332. package/src/scripts/check_release_pr_shape.ts +5 -0
  333. package/src/scripts/check_review_schema.ts +34 -1
  334. package/src/scripts/check_roadmap_trackable.ts +48 -3
  335. package/src/scripts/check_routing_coverage.ts +352 -0
  336. package/src/scripts/check_score_contract.ts +505 -0
  337. package/src/scripts/check_skill_admissions.ts +514 -0
  338. package/src/scripts/check_source_size_budget.ts +2 -1
  339. package/src/scripts/check_standing_payload_delta.ts +505 -0
  340. package/src/scripts/check_trigger_evals.ts +2 -1
  341. package/src/scripts/check_web_launch_readiness.ts +705 -0
  342. package/src/scripts/classify_change_risk.ts +281 -0
  343. package/src/scripts/compute_skill_tiers.ts +186 -0
  344. package/src/scripts/condense.ts +8 -13
  345. package/src/scripts/council_attendance_metrics.ts +183 -0
  346. package/src/scripts/council_cli.ts +10 -8
  347. package/src/scripts/council_parse_rate.ts +116 -0
  348. package/src/scripts/derive_playbooks.ts +406 -0
  349. package/src/scripts/description_route_check.ts +494 -0
  350. package/src/scripts/design_slop_rules.ts +56 -2
  351. package/src/scripts/dispatch_r2_reviewer.ts +16 -0
  352. package/src/scripts/frontend_corpus_hash.ts +116 -0
  353. package/src/scripts/grade_target_readiness.ts +478 -0
  354. package/src/scripts/hook_manifest.json +1 -1
  355. package/src/scripts/hook_manifest.yaml +124 -16
  356. package/src/scripts/hooks/concern_registry.ts +6 -0
  357. package/src/scripts/hooks/design_pass_hook.ts +356 -0
  358. package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
  359. package/src/scripts/hooks/rule_inject_hook.ts +318 -0
  360. package/src/scripts/hooks/suggestion_capture_hook.ts +368 -0
  361. package/src/scripts/hot_context_hook.ts +74 -7
  362. package/src/scripts/install.ts +40 -89
  363. package/src/scripts/lint_adapter_tier.ts +663 -0
  364. package/src/scripts/lint_archived_skills.ts +93 -0
  365. package/src/scripts/lint_budget_ownership.ts +56 -5
  366. package/src/scripts/lint_deterministic_time.ts +470 -0
  367. package/src/scripts/lint_framework_leakage.ts +5 -0
  368. package/src/scripts/lint_handoffs.ts +525 -1
  369. package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
  370. package/src/scripts/lint_marketplace.ts +88 -0
  371. package/src/scripts/lint_media_policy_linkage.ts +140 -1
  372. package/src/scripts/lint_one_off_age.ts +6 -1
  373. package/src/scripts/lint_override_kernel_guard.ts +87 -5
  374. package/src/scripts/lint_roadmap_complexity.ts +56 -0
  375. package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
  376. package/src/scripts/lint_rule_norm_pin.ts +321 -0
  377. package/src/scripts/lint_skill_trigger_corpus.ts +349 -0
  378. package/src/scripts/lint_spawn_payload.ts +42 -5
  379. package/src/scripts/lint_symptom_intake.ts +2 -1
  380. package/src/scripts/mcp_parity_smoke.ts +30 -4
  381. package/src/scripts/mcp_render.ts +66 -1
  382. package/src/scripts/mcp_tool_fingerprint.ts +241 -0
  383. package/src/scripts/measure_risk_class_drift.ts +140 -0
  384. package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
  385. package/src/scripts/media/lib/adapter-common.sh +211 -1
  386. package/src/scripts/media/lib/adapter-contract.md +74 -6
  387. package/src/scripts/model_rule_injection.ts +907 -0
  388. package/src/scripts/pack_install_smoke.ts +363 -0
  389. package/src/scripts/pr_conflict_census.ts +187 -0
  390. package/src/scripts/project_thin_rules.ts +45 -2
  391. package/src/scripts/release.ts +66 -860
  392. package/src/scripts/release_drill.ts +59 -3
  393. package/src/scripts/release_env.ts +298 -0
  394. package/src/scripts/release_publication.ts +720 -0
  395. package/src/scripts/report_pack_delta.ts +204 -0
  396. package/src/scripts/roadmap_context.ts +778 -0
  397. package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
  398. package/src/scripts/schemas/rule.schema.json +24 -2
  399. package/src/scripts/schemas/skill.schema.json +39 -0
  400. package/src/scripts/schemas/ui-authority.schema.json +114 -0
  401. package/src/scripts/select_analysis_mode.ts +112 -0
  402. package/src/scripts/session_register_hook.ts +29 -3
  403. package/src/scripts/sessions_cli.ts +67 -3
  404. package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
  405. package/src/scripts/sync_pr_branch.ts +40 -1
  406. package/src/scripts/token_sink_report.ts +239 -0
  407. package/src/scripts/trigger_coverage.ts +122 -3
  408. package/src/scripts/update_counts.ts +7 -3
  409. package/src/scripts/validate_frontmatter.ts +66 -0
  410. package/src/server/schemas/settings.ts +10 -0
  411. package/src/shared/skillRanking.ts +183 -0
  412. package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
  413. package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
  414. package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
  415. package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
  416. package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
  417. package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
  418. package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
  419. package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
  420. package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
  421. package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
  422. package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
  423. package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
  424. package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
  425. package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
  426. package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
  427. package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
  428. package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
  429. package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
  430. package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
  431. package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
  432. package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
  433. package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
  434. package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
  435. package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
  436. package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
  437. package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
  438. package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
  439. package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
  440. package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
  441. package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
  442. package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
  443. package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
  444. package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
  445. package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
  446. package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
  447. package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
  448. package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
  449. package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
  450. package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
  451. package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
  452. package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
  453. package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
  454. package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
  455. package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
  456. package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
  457. package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -55
  458. package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
  459. package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
  460. package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
  461. package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
  462. package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
  463. package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
  464. package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
  465. package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
  466. package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
  467. package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
  468. package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
  469. package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
  470. package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
  471. package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
  472. package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
  473. package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
  474. package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
  475. package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
  476. package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
  477. package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
  478. package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
  479. package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
  480. package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
  481. package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
  482. package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
  483. package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
  484. package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
  485. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
  486. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
  487. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
  488. package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
  489. package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
  490. package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
  491. package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
  492. package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
  493. package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
  494. package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
  495. package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
  496. package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
  497. package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
  498. package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
  499. package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
  500. package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
  501. package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
  502. package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
  503. package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
  504. package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
  505. package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
  506. package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
  507. package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
  508. package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
  509. package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
  510. package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
  511. package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
  512. package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
  513. package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
  514. package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
  515. package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
  516. package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
  517. package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
  518. package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
  519. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
  520. package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
  521. package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
  522. package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
  523. package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
  524. package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
  525. package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
  526. package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
  527. package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
  528. package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
  529. package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
  530. package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
  531. package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
  532. package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
  533. package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
  534. package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
  535. package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
  536. package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
  537. package/dist/cli/agent-config.js.map +0 -1
  538. package/dist/cli/bash/runBash.js.map +0 -1
  539. package/dist/cli/commands/commands.js.map +0 -1
  540. package/dist/cli/commands/config.js.map +0 -1
  541. package/dist/cli/commands/doctorShell.js.map +0 -1
  542. package/dist/cli/commands/mcpServer.js.map +0 -1
  543. package/dist/cli/commands/packs.js.map +0 -1
  544. package/dist/cli/commands/profiles.js.map +0 -1
  545. package/dist/cli/commands/recordTriggerEval.js.map +0 -1
  546. package/dist/cli/commands/rtkDetect.js.map +0 -1
  547. package/dist/cli/commands/settings.js.map +0 -1
  548. package/dist/cli/commands/uiServe.js.map +0 -1
  549. package/dist/cli/commands/versions.js.map +0 -1
  550. package/dist/cli/commands/workspaces.js.map +0 -1
  551. package/dist/cli/configRoot.js.map +0 -1
  552. package/dist/cli/discovery/loadManifest.js.map +0 -1
  553. package/dist/cli/firstRunNotice.js.map +0 -1
  554. package/dist/cli/help.js.map +0 -1
  555. package/dist/cli/initRouting.js.map +0 -1
  556. package/dist/cli/log/logger.js.map +0 -1
  557. package/dist/cli/main.js.map +0 -1
  558. package/dist/cli/mcp/content.js.map +0 -1
  559. package/dist/cli/mcp/dispatch.js.map +0 -1
  560. package/dist/cli/mcp/stdio.js.map +0 -1
  561. package/dist/cli/paths.js.map +0 -1
  562. package/dist/cli/python/knowledge_ingest.js.map +0 -1
  563. package/dist/cli/python/workspace_analytics.js.map +0 -1
  564. package/dist/cli/python/workspace_crypto.js.map +0 -1
  565. package/dist/cli/python/workspace_documents.js.map +0 -1
  566. package/dist/cli/python/workspace_drive.js.map +0 -1
  567. package/dist/cli/python/workspace_drive_health.js.map +0 -1
  568. package/dist/cli/python/workspace_explain.js.map +0 -1
  569. package/dist/cli/python/workspace_hosts.js.map +0 -1
  570. package/dist/cli/python/workspace_inbox.js.map +0 -1
  571. package/dist/cli/python/workspace_render.js.map +0 -1
  572. package/dist/cli/python/workspace_roles.js.map +0 -1
  573. package/dist/cli/python/workspace_secrets.js.map +0 -1
  574. package/dist/cli/python/workspace_sessions.js.map +0 -1
  575. package/dist/cli/python/workspace_skills.js.map +0 -1
  576. package/dist/cli/registry.js.map +0 -1
  577. package/dist/install/agentSwitchDetection.js.map +0 -1
  578. package/dist/install/agentSwitchProfile.js.map +0 -1
  579. package/dist/install/atomic.js.map +0 -1
  580. package/dist/install/claudePathsPlan.js.map +0 -1
  581. package/dist/install/conflict.js.map +0 -1
  582. package/dist/install/detect.js.map +0 -1
  583. package/dist/install/emit_host_rules_cli.js.map +0 -1
  584. package/dist/install/globalRuleLayers.js.map +0 -1
  585. package/dist/install/hostLayerFingerprint.js.map +0 -1
  586. package/dist/install/partitionEligibility.js.map +0 -1
  587. package/dist/install/paths.js.map +0 -1
  588. package/dist/install/plan.js.map +0 -1
  589. package/dist/install/preflight.js.map +0 -1
  590. package/dist/install/rtkDetection.js.map +0 -1
  591. package/dist/install/ruleInScope.js.map +0 -1
  592. package/dist/install/ruleLayerPartition.js.map +0 -1
  593. package/dist/install/rule_scope.js.map +0 -1
  594. package/dist/install/rule_scope_cli.js.map +0 -1
  595. package/dist/install/selectedTools.js.map +0 -1
  596. package/dist/install/toolDetection.js.map +0 -1
  597. package/dist/install/txlog.js.map +0 -1
  598. package/dist/install/types.js.map +0 -1
  599. package/dist/install/wizard-plan.js.map +0 -1
  600. package/dist/install/wizardDismissals.js.map +0 -1
  601. package/dist/scripts/_lib/agent_settings.js.map +0 -1
  602. package/dist/scripts/_lib/agent_src.js.map +0 -1
  603. package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
  604. package/dist/scripts/_lib/claude_plugin.js.map +0 -1
  605. package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
  606. package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
  607. package/dist/scripts/_lib/environment_detector.js.map +0 -1
  608. package/dist/scripts/_lib/host_launch.js.map +0 -1
  609. package/dist/scripts/_lib/install_layout.js.map +0 -1
  610. package/dist/scripts/_lib/installed_lock.js.map +0 -1
  611. package/dist/scripts/_lib/model_tier.js.map +0 -1
  612. package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
  613. package/dist/scripts/_lib/scoped_projection.js.map +0 -1
  614. package/dist/scripts/_lib/script_output.js.map +0 -1
  615. package/dist/scripts/_lib/spawn_env.js.map +0 -1
  616. package/dist/scripts/_lib/surface_tiers.js.map +0 -1
  617. package/dist/scripts/_lib/token_count.js.map +0 -1
  618. package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
  619. package/dist/scripts/_lib/user_global_paths.js.map +0 -1
  620. package/dist/scripts/ai_council/modes.js.map +0 -1
  621. package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
  622. package/dist/scripts/condense.js.map +0 -1
  623. package/dist/scripts/project_thin_rules.js.map +0 -1
  624. package/dist/server/app.js.map +0 -1
  625. package/dist/server/io/atomicMultiWrite.js.map +0 -1
  626. package/dist/server/io/atomicWrite.js.map +0 -1
  627. package/dist/server/io/sharedWriteCheck.js.map +0 -1
  628. package/dist/server/io/substituteTemplate.js.map +0 -1
  629. package/dist/server/io/yamlIO.js.map +0 -1
  630. package/dist/server/nicknameResolver.js.map +0 -1
  631. package/dist/server/port.js.map +0 -1
  632. package/dist/server/routes/discovery.js.map +0 -1
  633. package/dist/server/routes/install.js.map +0 -1
  634. package/dist/server/routes/ping.js.map +0 -1
  635. package/dist/server/routes/schema.js.map +0 -1
  636. package/dist/server/routes/settings.js.map +0 -1
  637. package/dist/server/routes/settingsChanges.js.map +0 -1
  638. package/dist/server/routes/userMd.js.map +0 -1
  639. package/dist/server/routes/wizard.js.map +0 -1
  640. package/dist/server/routes/workspace.js.map +0 -1
  641. package/dist/server/schemas/settings.js.map +0 -1
  642. package/dist/server/serverInfo.js.map +0 -1
  643. package/dist/server/token.js.map +0 -1
  644. package/dist/server/writeRoot.js.map +0 -1
  645. package/dist/shared/capabilities.js.map +0 -1
  646. package/dist/shared/interactiveContext.js.map +0 -1
  647. package/dist/shared/nicknamePrefill.js.map +0 -1
  648. package/dist/shared/settingsAsks.js.map +0 -1
  649. package/dist/shared/settingsCarveOut.js.map +0 -1
  650. package/dist/shared/settingsClasses.js.map +0 -1
  651. package/dist/shared/settingsConsent.js.map +0 -1
  652. package/dist/shared/settingsSurface.js.map +0 -1
  653. package/dist/shared/userMd/formAdapter.js.map +0 -1
  654. package/dist/shared/userMd/schema.js.map +0 -1
  655. package/dist/shared/userMd/utils.js.map +0 -1
  656. package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
  657. package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
  658. package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
  659. package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
  660. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
  661. package/src/scripts/_lib/secret_detector.test.ts +0 -108
  662. package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
  663. package/src/scripts/_lib/untrusted_content.test.ts +0 -175
  664. package/src/scripts/check_secret_leak.test.ts +0 -90
  665. package/src/scripts/design_slop_rules.test.ts +0 -239
  666. package/src/scripts/self_review_gate.test.ts +0 -296
  667. package/src/shared/capabilities.test.ts +0 -43
@@ -0,0 +1,231 @@
1
+ /**
2
+ * check_playbook_invokes — a `configured` playbook may not name a procedure the tree no
3
+ * longer has.
4
+ *
5
+ * Ships in the consumer `scripts/` template so it runs in the CONSUMER's CI, over the
6
+ * consumer's own playbooks and the consumer's own configuration. That placement is the
7
+ * whole design: staleness is a fact about their repository, and a gate in this package
8
+ * could only ever check this package.
9
+ *
10
+ * The grade is the contract (ADR-244). `configured` asserts every step invokes something
11
+ * present in the tree; when a generator is renamed, that assertion becomes false silently —
12
+ * the playbook still reads like a procedure and the command no longer exists. This check is
13
+ * what turns that into a failure instead of a surprise at the next `turbo gen`.
14
+ *
15
+ * Three resolvable kinds, and no more: a script name in the package manifest, a declared
16
+ * task in the task file, and a registered generator template. An Nx or Plop id is reported
17
+ * `unsupported` — NEVER as resolved and never as missing, because discovering those needs a
18
+ * binary this check deliberately does not run. Reporting a real id as missing would be the
19
+ * worse error: it would push a correct playbook to `observed`.
20
+ *
21
+ * Usage:
22
+ * check_playbook_invokes [--root <dir>] [--home <dir>] [--quiet]
23
+ *
24
+ * Exit 0 = every `configured` playbook resolves (or there are none).
25
+ * Exit 1 = at least one `configured` step names an id the tree does not have.
26
+ */
27
+
28
+ import * as fs from 'node:fs';
29
+ import * as path from 'node:path';
30
+
31
+ /** Playbooks are a context type (ADR-244), so the home is the contexts home. */
32
+ const DEFAULT_HOME = path.join('agents', 'settings', 'contexts');
33
+
34
+ export interface PlaybookHead {
35
+ readonly file: string;
36
+ readonly grade: string;
37
+ readonly invokes: readonly string[];
38
+ }
39
+
40
+ export type Verdict = 'resolved' | 'missing' | 'unsupported';
41
+
42
+ export interface Check {
43
+ readonly file: string;
44
+ readonly id: string;
45
+ readonly verdict: Verdict;
46
+ /** Where it resolved, for a `resolved` verdict. */
47
+ readonly where: string | null;
48
+ }
49
+
50
+ /** Ids this check cannot resolve without running a consumer binary. */
51
+ const UNSUPPORTED_PREFIXES = ['nx ', 'nx:', 'plop ', 'plop:'] as const;
52
+
53
+ const readJson = (p: string): Record<string, unknown> | null => {
54
+ try {
55
+ return JSON.parse(fs.readFileSync(p, 'utf8')) as Record<string, unknown>;
56
+ } catch {
57
+ return null;
58
+ }
59
+ };
60
+
61
+ const asRecord = (v: unknown): Record<string, unknown> =>
62
+ v !== null && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : {};
63
+
64
+ /**
65
+ * Minimal frontmatter read — `grade` and the `invokes` list only.
66
+ *
67
+ * Deliberately not a YAML dependency: this file ships into a consumer repository, where
68
+ * adding a parser dependency to run one gate is a cost the consumer did not ask for.
69
+ */
70
+ export const parseHead = (file: string, text: string): PlaybookHead | null => {
71
+ if (!text.startsWith('---')) return null;
72
+ const end = text.indexOf('\n---', 3);
73
+ if (end < 0) return null;
74
+ const head = text.slice(3, end);
75
+ const gradeMatch = /^grade:\s*["']?([A-Za-z]+)["']?\s*$/m.exec(head);
76
+ if (!gradeMatch) return null;
77
+
78
+ const invokes: string[] = [];
79
+ const lines = head.split('\n');
80
+ let inList = false;
81
+ for (const line of lines) {
82
+ if (/^invokes:\s*$/.test(line)) {
83
+ inList = true;
84
+ continue;
85
+ }
86
+ if (inList) {
87
+ const item = /^\s+-\s*["']?(.+?)["']?\s*$/.exec(line);
88
+ if (item?.[1] !== undefined) {
89
+ invokes.push(item[1]);
90
+ continue;
91
+ }
92
+ inList = false;
93
+ }
94
+ // An inline list is the other legal shape and a reader that only handled the block
95
+ // form would report a correct playbook as having no ids at all.
96
+ const inline = /^invokes:\s*\[(.*)\]\s*$/.exec(line);
97
+ if (inline?.[1] !== undefined) {
98
+ for (const part of inline[1].split(',')) {
99
+ const v = part.trim().replace(/^["']|["']$/g, '');
100
+ if (v.length > 0) invokes.push(v);
101
+ }
102
+ }
103
+ }
104
+ return { file, grade: gradeMatch[1] as string, invokes };
105
+ };
106
+
107
+ /** Generator templates registered in the tree, as `<runner> gen <name>` ids. */
108
+ export const registeredGenerators = (root: string): Map<string, string> => {
109
+ const out = new Map<string, string>();
110
+ const dir = path.join(root, 'turbo', 'generators');
111
+ if (!fs.existsSync(dir)) return out;
112
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
113
+ const full = path.join(dir, entry.name);
114
+ if (entry.isDirectory()) {
115
+ out.set(entry.name, path.relative(root, full));
116
+ continue;
117
+ }
118
+ const text = fs.readFileSync(full, 'utf8');
119
+ for (const m of text.matchAll(/\.(?:set|add)Generator\(\s*['"]([A-Za-z0-9_-]+)['"]/g)) {
120
+ out.set(m[1] as string, path.relative(root, full));
121
+ }
122
+ }
123
+ return out;
124
+ };
125
+
126
+ export const resolveId = (
127
+ root: string,
128
+ id: string,
129
+ gens: Map<string, string>,
130
+ ): { verdict: Verdict; where: string | null } => {
131
+ const lower = id.toLowerCase();
132
+ if (UNSUPPORTED_PREFIXES.some((p) => lower.startsWith(p))) {
133
+ return { verdict: 'unsupported', where: null };
134
+ }
135
+
136
+ const gen = /^\S+\s+gen\s+([A-Za-z0-9_-]+)/.exec(id);
137
+ if (gen) {
138
+ const name = gen[1] as string;
139
+ return gens.has(name)
140
+ ? { verdict: 'resolved', where: gens.get(name) ?? null }
141
+ : { verdict: 'missing', where: null };
142
+ }
143
+
144
+ const tasks = asRecord(readJson(path.join(root, 'turbo.json'))?.tasks);
145
+ if (Object.prototype.hasOwnProperty.call(tasks, id)) {
146
+ return { verdict: 'resolved', where: 'turbo.json#tasks' };
147
+ }
148
+ const scripts = asRecord(readJson(path.join(root, 'package.json'))?.scripts);
149
+ if (Object.prototype.hasOwnProperty.call(scripts, id)) {
150
+ return { verdict: 'resolved', where: 'package.json#scripts' };
151
+ }
152
+ return { verdict: 'missing', where: null };
153
+ };
154
+
155
+ export const checkAll = (root: string, home: string): Check[] => {
156
+ if (!fs.existsSync(home)) return [];
157
+ const gens = registeredGenerators(root);
158
+ const out: Check[] = [];
159
+ for (const name of fs.readdirSync(home).sort()) {
160
+ if (!name.endsWith('.md')) continue;
161
+ const file = path.join(home, name);
162
+ const head = parseHead(file, fs.readFileSync(file, 'utf8'));
163
+ // Only `configured` is a claim about the tree. An `observed` playbook already says
164
+ // its steps are unverified, so failing it here would punish the honest grade.
165
+ if (head === null || head.grade !== 'configured') continue;
166
+ for (const id of head.invokes) {
167
+ const { verdict, where } = resolveId(root, id, gens);
168
+ out.push({ file, id, verdict, where });
169
+ }
170
+ }
171
+ return out;
172
+ };
173
+
174
+ /**
175
+ * The remediation. BOTH options are printed verbatim on every failure, and neither is
176
+ * "delete the line": a playbook that loses its evidence line stops being checkable, which
177
+ * turns a caught drift into an uncatchable one.
178
+ */
179
+ export const REMEDIATION = [
180
+ 'Two ways to fix this, and only two:',
181
+ ' 1. Fix the `invokes` id — the procedure moved, so point the playbook at where it moved to.',
182
+ ' 2. Downgrade the step to `observed` and cite the commit it was last seen working in.',
183
+ 'Do NOT delete the evidence line. A playbook without it is not a weaker claim, it is an',
184
+ 'unverifiable one — and the next drift goes unnoticed.',
185
+ ].join('\n');
186
+
187
+ const main = (): number => {
188
+ const argv = process.argv.slice(2);
189
+ const arg = (flag: string): string | null => {
190
+ const i = argv.indexOf(flag);
191
+ return i >= 0 && i + 1 < argv.length ? String(argv[i + 1]) : null;
192
+ };
193
+ const quiet = argv.includes('--quiet');
194
+ const root = arg('--root') ?? '.';
195
+ const home = arg('--home') ?? path.join(root, DEFAULT_HOME);
196
+
197
+ const checks = checkAll(root, home);
198
+ const missing = checks.filter((c) => c.verdict === 'missing');
199
+ const unsupported = checks.filter((c) => c.verdict === 'unsupported');
200
+
201
+ if (!quiet) {
202
+ for (const u of unsupported) {
203
+ process.stdout.write(
204
+ `ℹ️ ${u.file}: \`${u.id}\` is unsupported by this check (its discovery needs a ` +
205
+ `consumer binary) — reported, not treated as missing\n`,
206
+ );
207
+ }
208
+ process.stdout.write(
209
+ `scanned: ${String(checks.length)} configured step(s) across ${String(new Set(checks.map((c) => c.file)).size)} playbook(s)\n`,
210
+ );
211
+ }
212
+
213
+ if (missing.length === 0) {
214
+ if (!quiet) {
215
+ process.stdout.write('✅ check_playbook_invokes: every configured step resolves in the tree.\n');
216
+ }
217
+ return 0;
218
+ }
219
+
220
+ for (const m of missing) {
221
+ process.stderr.write(
222
+ `❌ ${m.file}: step invoking \`${m.id}\` does not resolve — no such script, task, or generator in the tree\n`,
223
+ );
224
+ }
225
+ process.stderr.write(`\n${REMEDIATION}\n`);
226
+ return 1;
227
+ };
228
+
229
+ if (process.argv[1] !== undefined && process.argv[1].includes('check_playbook_invokes')) {
230
+ process.exit(main());
231
+ }
@@ -18,13 +18,30 @@ import {
18
18
  agent_directive,
19
19
  } from '../../delivery_state.js';
20
20
  import { has_design_system, placeholder_paths, provided_artifact } from './design.js';
21
+ import { _playbook_lines, _scaffold_playbooks } from './scaffold.js';
21
22
  import {
22
23
  is_ambiguous_stack,
23
24
  bundle_line,
25
+ scope_lines,
24
26
  unsupported_stack_questions,
25
27
  } from './stack_bundles.js';
26
28
 
27
29
  /** Map `state.stack.frontend` → agent-directive skill name. */
30
+ /**
31
+ * Task words that make a playbook relevant to the `apply` verb.
32
+ *
33
+ * Same shape as `scaffold`'s list and deliberately a SEPARATE constant: `apply` implements
34
+ * into an existing surface, so a repository may reasonably carry a playbook for one verb and
35
+ * not the other. One shared list would silently dispatch a scaffold-only procedure here.
36
+ */
37
+ export const APPLY_VERB_TERMS: ReadonlyArray<string> = [
38
+ 'component',
39
+ 'page',
40
+ 'route',
41
+ 'screen',
42
+ 'view',
43
+ ];
44
+
28
45
  export const STACK_DIRECTIVES: Record<string, string> = {
29
46
  'blade-livewire-flux': 'ui-apply-blade-livewire-flux',
30
47
  'blade-livewire': 'ui-apply-blade-livewire',
@@ -267,10 +284,17 @@ function _delegate_to_stack_skill(state: DeliveryState): StepResult {
267
284
  });
268
285
  }
269
286
  const provided = provided_artifact(state.ui_design as Record<string, Any> | null);
287
+ // The repository's own procedure goes ahead of the stack skill when it has one. Empty
288
+ // when it does not, which is what keeps a project with no playbook home byte-identical.
289
+ // Imported from `scaffold` rather than duplicated: two copies of a scope-match rule
290
+ // drift, and the drift would be invisible — both lanes would still emit *something*.
291
+ const playbook_lines = _playbook_lines(_scaffold_playbooks(state, APPLY_VERB_TERMS));
270
292
  const lines: string[] = [
271
293
  agent_directive(directive),
294
+ ...playbook_lines,
272
295
  `> Stack: \`${stack_label}\`. Implementing the locked design brief.`,
273
296
  bundle_line(state.stack, 'build', stack_label),
297
+ ...scope_lines(state.stack),
274
298
  '> Microcopy is locked — every button label, empty-state ' +
275
299
  'message, and validation message must come verbatim from ' +
276
300
  '`state.ui_design.microcopy`.',
@@ -18,6 +18,7 @@ import {
18
18
  import {
19
19
  is_ambiguous_stack,
20
20
  bundle_line,
21
+ scope_lines,
21
22
  unsupported_stack_questions,
22
23
  } from './stack_bundles.js';
23
24
 
@@ -266,6 +267,7 @@ function _delegate_to_polish_skill(
266
267
  agent_directive(directive),
267
268
  `> Stack: \`${stack_label}\`. Polish round ${next_round} of ${ceiling}.`,
268
269
  bundle_line(state.stack, 'build', stack_label),
270
+ ...scope_lines(state.stack),
269
271
  findings_line,
270
272
  '> Fix chart-type / contrast findings against the adopted ' +
271
273
  "corpus rows (design-intelligence § 'Grounding the " +
@@ -19,6 +19,7 @@ import {
19
19
  import {
20
20
  is_ambiguous_stack,
21
21
  bundle_line,
22
+ scope_lines,
22
23
  unsupported_stack_questions,
23
24
  } from './stack_bundles.js';
24
25
 
@@ -50,6 +51,29 @@ export const SEVERITY_ORDER: Record<string, number> = {
50
51
  /** R4 a11y default severity floor. */
51
52
  export const DEFAULT_SEVERITY_FLOOR = 'moderate';
52
53
 
54
+ /**
55
+ * Marker on a review finding that flags a hardcoded design value.
56
+ *
57
+ * Deliberately re-declared rather than imported from `polish.ts`: the two
58
+ * directives are siblings with no dependency edge between them, and
59
+ * `token_violation_kinds_agree` in the Phase 3 test pins the two literals
60
+ * equal so the duplication cannot drift silently.
61
+ */
62
+ export const TOKEN_VIOLATION_KIND = 'token_violation';
63
+
64
+ /** A finding produced by a deterministic check, not by an agent's judgement. */
65
+ export const DETECTOR_CHANNEL = 'detector';
66
+
67
+ /**
68
+ * A finding produced by an agent reading the surface.
69
+ *
70
+ * Named here only so the two channels are readable side by side. The prose
71
+ * channel (`tailwind-engineer` § arbitrary values) is unchanged by the
72
+ * detector — the detector is additive, and a finding that carries no
73
+ * `channel` at all predates the split and is treated as judgement.
74
+ */
75
+ export const JUDGEMENT_CHANNEL = 'judgement';
76
+
53
77
  export const AMBIGUITIES: ReadonlyArray<Record<string, string>> = [
54
78
  {
55
79
  code: 'review_envelope_missing',
@@ -151,11 +175,15 @@ export function run(state: DeliveryState): StepResult {
151
175
  return a11y_halt;
152
176
  }
153
177
 
178
+ _apply_token_detector(state, r);
179
+
154
180
  const preview_halt = _apply_preview_gate(state, r);
155
181
  if (preview_halt !== null) {
156
182
  return preview_halt;
157
183
  }
158
184
 
185
+ _stamp_verdict_scope(r);
186
+
159
187
  return new StepResult({ outcome: Outcome.SUCCESS });
160
188
  }
161
189
 
@@ -210,6 +238,7 @@ function _delegate_to_review_skill(state: DeliveryState): StepResult {
210
238
  `> Stack: \`${stack_label}\`. Reviewing rendered components ` +
211
239
  'against the locked design brief.',
212
240
  bundle_line(state.stack, 'review', stack_label),
241
+ ...scope_lines(state.stack),
213
242
  '> The review pass compares `state.ticket.ui_apply.rendered` ' +
214
243
  'against `state.ui_design` (microcopy, states, a11y, layout) ' +
215
244
  'and produces a structured `findings` list.',
@@ -372,6 +401,193 @@ function _synthesize_a11y_findings(findings: Any[], actionable: Any[]): void {
372
401
  }
373
402
  }
374
403
 
404
+ /**
405
+ * Return the audit token category whose bucket holds `value`, or null.
406
+ *
407
+ * This predicate IS the pre-registered scope of the measured dimension: "a raw
408
+ * literal where the audit found a token". A value the audit holds no token for
409
+ * is outside it and is never emitted — the `F4-unscoped` falsifier
410
+ * (`agents/evidence/analysis/frontend-fidelity-preregistered-falsifiers.md`)
411
+ * fires on a detector that flags every literal instead.
412
+ *
413
+ * Membership is tested with `Object.values(bucket).includes(value)`, the exact
414
+ * predicate `polish._classify_token_violations` uses. Sharing the predicate is
415
+ * what makes every detector-produced finding classify as `matched` downstream,
416
+ * so the detector channel can never trip the token-extraction halt.
417
+ */
418
+ function _audit_token_category(tokens: Record<string, Any>, value: string): string | null {
419
+ for (const category of Object.keys(tokens)) {
420
+ const bucket = tokens[category];
421
+ if (_isDict(bucket) && Object.values(bucket).includes(value)) {
422
+ return category;
423
+ }
424
+ }
425
+ return null;
426
+ }
427
+
428
+ /** Return `state.ui_audit.design_tokens` as a dict, or `{}`. */
429
+ function _audit_design_tokens(state: DeliveryState): Record<string, Any> {
430
+ const audit = _pyTruthy(state.ui_audit) ? state.ui_audit : {};
431
+ if (!_isDict(audit)) {
432
+ return {};
433
+ }
434
+ const tokens = _pyTruthy(audit['design_tokens']) ? audit['design_tokens'] : {};
435
+ return _isDict(tokens) ? tokens : {};
436
+ }
437
+
438
+ /** Dedup key for a detector finding — one per measured site and value. */
439
+ function _tokenKeyOf(file: Any, line: Any, value: Any): string {
440
+ return `${String(file)}\u0000${String(line)}\u0000${String(value)}`;
441
+ }
442
+
443
+ /**
444
+ * Append `token_violation` findings from the detector envelope.
445
+ *
446
+ * Mirrors `_synthesize_a11y_findings`: the review skill writes the raw scan
447
+ * into `state.ui_review.tokens.violations`, and this turns the in-scope subset
448
+ * into findings the polish gate already knows how to act on. Deduped by
449
+ * `(file, line, value)`, so re-running the step is idempotent.
450
+ *
451
+ * Returns the number of findings appended.
452
+ */
453
+ function _synthesize_token_findings(
454
+ findings: Any[],
455
+ violations: Any[],
456
+ tokens: Record<string, Any>,
457
+ ): number {
458
+ const existing = new Set<string>();
459
+ for (const f of findings) {
460
+ if (_isDict(f) && f['kind'] === TOKEN_VIOLATION_KIND) {
461
+ existing.add(_tokenKeyOf(f['file'], f['line'], f['value']));
462
+ }
463
+ }
464
+ let added = 0;
465
+ for (const v of violations) {
466
+ if (!_isDict(v)) {
467
+ continue;
468
+ }
469
+ const value = v['value'];
470
+ if (typeof value !== 'string') {
471
+ continue;
472
+ }
473
+ const category = _audit_token_category(tokens, value);
474
+ if (category === null) {
475
+ continue;
476
+ }
477
+ const key = _tokenKeyOf(v['file'], v['line'], value);
478
+ if (existing.has(key)) {
479
+ continue;
480
+ }
481
+ findings.push({
482
+ kind: TOKEN_VIOLATION_KIND,
483
+ channel: DETECTOR_CHANNEL,
484
+ category,
485
+ value,
486
+ file: v['file'] ?? null,
487
+ line: v['line'] ?? null,
488
+ detector_type: v['type'] ?? null,
489
+ });
490
+ existing.add(key);
491
+ added += 1;
492
+ }
493
+ return added;
494
+ }
495
+
496
+ /**
497
+ * Turn the detector envelope into findings, and take the review off clean.
498
+ *
499
+ * Never halts. An absent envelope is not an error: the detector is one channel
500
+ * of two, and a run that did not scan is a run with nothing measured — which is
501
+ * exactly what the `render_ok` gate below refuses to let pass silently for the
502
+ * render channel, and what a null record covers for a blocked dimension.
503
+ */
504
+ function _apply_token_detector(state: DeliveryState, review: Record<string, Any>): void {
505
+ const raw = review['tokens'];
506
+ if (!_isDict(raw)) {
507
+ return;
508
+ }
509
+ const violations = raw['violations'];
510
+ if (!Array.isArray(violations) || violations.length === 0) {
511
+ return;
512
+ }
513
+ const findings = review['findings'];
514
+ if (!Array.isArray(findings)) {
515
+ return;
516
+ }
517
+ const added = _synthesize_token_findings(
518
+ findings as Any[],
519
+ violations as Any[],
520
+ _audit_design_tokens(state),
521
+ );
522
+ if (added > 0) {
523
+ review['review_clean'] = false;
524
+ }
525
+ }
526
+
527
+ /**
528
+ * Render-dependent checks, and the blocker that gates each of them.
529
+ *
530
+ * Named here so a static-scoped verdict can enumerate what it did NOT do.
531
+ * "Scope the verdict to what was statically checked and say so" is only
532
+ * readable if the unrun half is written down too — an enumerated `checks_run`
533
+ * with no `checks_not_run` beside it reads as a complete review.
534
+ */
535
+ export const RENDER_DEPENDENT_CHECKS: ReadonlyArray<string> = [
536
+ 'viewport-sweep',
537
+ 'touch-target-size',
538
+ 'rendered-contrast',
539
+ 'screenshot-diff',
540
+ ];
541
+
542
+ /** The blocker slug every render-dependent check is gated behind. */
543
+ export const RENDER_BLOCKER = 'b-page-capture-primitive';
544
+
545
+ /**
546
+ * Stamp the verdict scope onto the review envelope.
547
+ *
548
+ * W6: `design-review` makes browser automation a hard prerequisite and, below
549
+ * it, describes a static path in prose with no artefact recording which checks
550
+ * actually ran. This writes that artefact.
551
+ *
552
+ * Every field is DERIVED from the envelope — nothing is invented. A check is
553
+ * listed as run because the envelope carries its evidence, never because a
554
+ * skill said it ran. `scope` is always stamped, so an unscoped verdict is not a
555
+ * shape this step can leave behind.
556
+ */
557
+ function _stamp_verdict_scope(review: Record<string, Any>): void {
558
+ const raw_preview = review['preview'];
559
+ const preview: Record<string, Any> = _isDict(raw_preview) ? raw_preview : {};
560
+ const rendered = preview['render_ok'] === true;
561
+
562
+ const checks_run: string[] = ['findings-review'];
563
+ const a11y = review['a11y'];
564
+ if (_isDict(a11y) && Array.isArray(a11y['violations'])) {
565
+ checks_run.push('a11y-axe');
566
+ }
567
+ const tokens = review['tokens'];
568
+ if (_isDict(tokens) && Array.isArray(tokens['violations'])) {
569
+ checks_run.push('token-detector');
570
+ }
571
+ if (rendered) {
572
+ checks_run.push(...RENDER_DEPENDENT_CHECKS);
573
+ }
574
+
575
+ const scope: Record<string, Any> = {
576
+ scope: rendered ? 'render' : 'static',
577
+ render_available: rendered,
578
+ checks_run,
579
+ };
580
+ if (!rendered) {
581
+ scope['checks_not_run'] = [...RENDER_DEPENDENT_CHECKS];
582
+ scope['blocker'] = RENDER_BLOCKER;
583
+ const reason = preview['skip_reason'];
584
+ scope['skip_reason'] = typeof reason === 'string' && reason.length > 0
585
+ ? reason
586
+ : RENDER_BLOCKER;
587
+ }
588
+ review['verdict_scope'] = scope;
589
+ }
590
+
375
591
  /** BLOCKED halt — audit declared a baseline but review has no a11y. */
376
592
  function _halt_a11y_pending(state: DeliveryState): StepResult {
377
593
  const directive = _resolve_directive(state);