@event4u/agent-config 14.9.0 → 14.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +384 -0
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/design.md +88 -0
  7. package/dist/agent-src/commands/project/analyze.md +47 -0
  8. package/dist/agent-src/commands/review/changes.md +67 -6
  9. package/dist/agent-src/commands/roadmap/create.md +49 -0
  10. package/dist/agent-src/commands/roadmap/next.md +27 -11
  11. package/dist/agent-src/commands/roadmap/process-full.md +14 -0
  12. package/dist/agent-src/commands/video/from-script.md +60 -3
  13. package/dist/agent-src/commands/video/stitch.md +14 -0
  14. package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
  15. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
  16. package/dist/agent-src/rules/active-remediation.md +3 -3
  17. package/dist/agent-src/rules/code-provenance.md +2 -2
  18. package/dist/agent-src/rules/context-hygiene.md +13 -33
  19. package/dist/agent-src/rules/council-availability.md +2 -2
  20. package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
  21. package/dist/agent-src/rules/design-fidelity.md +18 -0
  22. package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
  23. package/dist/agent-src/rules/evaluator-independence.md +56 -44
  24. package/dist/agent-src/rules/fix-what-you-see.md +9 -1
  25. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  26. package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
  27. package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
  28. package/dist/agent-src/rules/playbook-precedence.md +105 -0
  29. package/dist/agent-src/rules/recurring-criticism.md +3 -1
  30. package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
  31. package/dist/agent-src/rules/scale-discipline.md +24 -0
  32. package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
  33. package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
  34. package/dist/agent-src/rules/ui-audit-gate.md +27 -15
  35. package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
  36. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
  37. package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
  38. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
  39. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
  40. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
  41. package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
  42. package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -0
  43. package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +17 -0
  44. package/dist/agent-src/skills/async-python-patterns/SKILL.md +1 -1
  45. package/dist/agent-src/skills/authz-review/SKILL.md +0 -1
  46. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
  47. package/dist/agent-src/skills/brand/SKILL.md +3 -0
  48. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
  49. package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
  50. package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
  51. package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
  52. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
  53. package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
  54. package/dist/agent-src/skills/code-refactoring/SKILL.md +1 -1
  55. package/dist/agent-src/skills/code-review/SKILL.md +11 -0
  56. package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
  57. package/dist/agent-src/skills/condense-memory/SKILL.md +4 -1
  58. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  59. package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +4 -1
  60. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
  61. package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
  62. package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
  63. package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
  64. package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
  65. package/dist/agent-src/skills/design-review/SKILL.md +80 -2
  66. package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
  67. package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
  68. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
  69. package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
  70. package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
  71. package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
  72. package/dist/agent-src/skills/discovery-interview/SKILL.md +1 -1
  73. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
  74. package/dist/agent-src/skills/docx-authoring/SKILL.md +1 -1
  75. package/dist/agent-src/skills/editorial-calendar/SKILL.md +1 -1
  76. package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
  77. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +20 -3
  78. package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
  79. package/dist/agent-src/skills/fe-design/evals/triggers.json +65 -53
  80. package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
  81. package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
  82. package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
  83. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  84. package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
  85. package/dist/agent-src/skills/github-ci/SKILL.md +1 -1
  86. package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
  87. package/dist/agent-src/skills/iconography/SKILL.md +3 -0
  88. package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
  89. package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
  90. package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
  91. package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
  92. package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
  93. package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +17 -0
  94. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
  95. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
  96. package/dist/agent-src/skills/judge-injection-defense/SKILL.md +1 -1
  97. package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
  98. package/dist/agent-src/skills/laravel-validation/SKILL.md +1 -1
  99. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
  100. package/dist/agent-src/skills/legal-intake-triage/SKILL.md +1 -1
  101. package/dist/agent-src/skills/legal-practice-profile/SKILL.md +1 -1
  102. package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
  103. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
  104. package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
  105. package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
  106. package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
  107. package/dist/agent-src/skills/messaging-architecture/SKILL.md +1 -1
  108. package/dist/agent-src/skills/migration-architect/SKILL.md +1 -1
  109. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +1 -1
  110. package/dist/agent-src/skills/module-management/SKILL.md +1 -1
  111. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
  112. package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +17 -0
  113. package/dist/agent-src/skills/motion-choreographer/SKILL.md +7 -1
  114. package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
  115. package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
  116. package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
  117. package/dist/agent-src/skills/operational-readiness/evals/triggers.json +17 -0
  118. package/dist/agent-src/skills/override-management/SKILL.md +3 -0
  119. package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
  120. package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
  121. package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
  122. package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
  123. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
  124. package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
  125. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
  126. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +1 -1
  127. package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
  128. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +52 -21
  129. package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
  130. package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
  131. package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
  132. package/dist/agent-src/skills/receiving-code-review/SKILL.md +3 -3
  133. package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
  134. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
  135. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  136. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  137. package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
  138. package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
  139. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
  140. package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
  141. package/dist/agent-src/skills/scene-expander/SKILL.md +1 -1
  142. package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
  143. package/dist/agent-src/skills/secrets-management/SKILL.md +5 -1
  144. package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
  145. package/dist/agent-src/skills/server-hardening/evals/triggers.json +17 -0
  146. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
  147. package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
  148. package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
  149. package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
  150. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
  151. package/dist/agent-src/skills/storybook-workshop/SKILL.md +194 -0
  152. package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +17 -0
  153. package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
  154. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  155. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
  156. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
  157. package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
  158. package/dist/agent-src/skills/terraform/SKILL.md +3 -0
  159. package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
  160. package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
  161. package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
  162. package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
  163. package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -1
  164. package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
  165. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
  166. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
  167. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
  168. package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
  169. package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
  170. package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
  171. package/dist/agent-src/skills/workspace-link/evals/triggers.json +17 -0
  172. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  173. package/dist/agent-src/templates/playbook.md +75 -0
  174. package/dist/agent-src/templates/roadmaps.md +37 -0
  175. package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  176. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  177. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  178. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  179. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  180. package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  181. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  182. package/dist/cli/commands/uiAudit.js +221 -0
  183. package/dist/cli/commands/uiAudit.js.map +1 -0
  184. package/dist/cli/commands/uiRender.js +206 -0
  185. package/dist/cli/commands/uiRender.js.map +1 -0
  186. package/dist/cli/main.js +22 -1
  187. package/dist/cli/main.js.map +1 -1
  188. package/dist/cli/mcp/content.js +64 -1
  189. package/dist/cli/mcp/content.js.map +1 -1
  190. package/dist/cli/mcp/dispatch.js +175 -10
  191. package/dist/cli/mcp/dispatch.js.map +1 -1
  192. package/dist/cli/registry.js +3 -0
  193. package/dist/cli/registry.js.map +1 -1
  194. package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-236PNQZK.js} +413 -391
  195. package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
  196. package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
  197. package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
  198. package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-L43NCYPB.js} +5 -0
  199. package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
  200. package/dist/cli-delegate/cmd_brand_status.js +8 -6
  201. package/dist/cli-delegate/cmd_conformance.js +3 -3
  202. package/dist/cli-delegate/cmd_doctor.js +3 -3
  203. package/dist/cli-delegate/cmd_export.js +4 -4
  204. package/dist/cli-delegate/cmd_handoff.js +1 -1
  205. package/dist/cli-delegate/cmd_preflight.js +2 -2
  206. package/dist/cli-delegate/cmd_prune.js +4 -4
  207. package/dist/cli-delegate/cmd_session_recycle.js +70 -9
  208. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  209. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  210. package/dist/cli-delegate/cmd_sync.js +4 -4
  211. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  212. package/dist/cli-delegate/cmd_validate.js +4 -4
  213. package/dist/discovery/deprecation-report.md +1 -1
  214. package/dist/discovery/discovery-manifest.json +380 -145
  215. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  216. package/dist/discovery/discovery-manifest.summary.md +4 -4
  217. package/dist/discovery/dormancy-report.md +1 -1
  218. package/dist/discovery/orphan-report.md +1 -1
  219. package/dist/discovery/packs.json +18 -8
  220. package/dist/discovery/trust-report.md +3 -3
  221. package/dist/discovery/workspaces.json +16 -6
  222. package/dist/hooks/dispatch.js +2337 -1436
  223. package/dist/install/install.mjs +795 -708
  224. package/dist/mcp/registry-manifest.json +3 -3
  225. package/dist/mcp/server.json +2 -2
  226. package/dist/mcp/server.mjs +1685 -1250
  227. package/dist/router.json +1 -1
  228. package/dist/scripts/_lib/lean_projection_mode.js +40 -0
  229. package/dist/scripts/_lib/lean_projection_mode.js.map +1 -0
  230. package/dist/scripts/_lib/scoped_projection.js +84 -0
  231. package/dist/scripts/_lib/scoped_projection.js.map +1 -1
  232. package/dist/scripts/_lib/ui_surface.js +89 -0
  233. package/dist/scripts/_lib/ui_surface.js.map +1 -0
  234. package/dist/scripts/condense.js +6 -10
  235. package/dist/scripts/condense.js.map +1 -1
  236. package/dist/scripts/project_thin_rules.js +40 -2
  237. package/dist/scripts/project_thin_rules.js.map +1 -1
  238. package/dist/server/schemas/settings.js +3 -0
  239. package/dist/server/schemas/settings.js.map +1 -1
  240. package/dist/shared/skillRanking.js +159 -0
  241. package/dist/shared/skillRanking.js.map +1 -0
  242. package/docs/contracts/provider-lifecycle.md +47 -18
  243. package/docs/contracts/settings-classes.md +14 -4
  244. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
  245. package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  246. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
  247. package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  248. package/docs/guidelines/design-antipatterns.md +4 -2
  249. package/docs/guidelines/design-asset-discipline.md +38 -0
  250. package/docs/guidelines/design-fidelity-mechanics.md +45 -29
  251. package/docs/guidelines/design-handover-extraction.md +35 -5
  252. package/docs/guidelines/design-modes.md +41 -1
  253. package/docs/guidelines/monorepo-antipatterns.md +141 -0
  254. package/llms.txt +50 -39
  255. package/package.json +1 -1
  256. package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  257. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  258. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  259. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  260. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  261. package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  262. package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  263. package/src/config/agent-settings.template.yml +28 -0
  264. package/src/config/assurance-capability-registry.json +223 -0
  265. package/src/config/assurance-threshold-budget.json +65 -0
  266. package/src/config/ci-local-parity.yml +14 -0
  267. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  268. package/src/config/dispatch-economy-metrics.json +4 -2
  269. package/src/config/evaluator-budgets.json +14 -14
  270. package/src/config/gate-coverage.yml +227 -8
  271. package/src/config/gate-violation-baselines.json +76 -72
  272. package/src/config/hook-latency-budget.json +1 -0
  273. package/src/config/hook-token-budget.json +137 -125
  274. package/src/config/pack-size-budget.json +4 -2
  275. package/src/config/preamble-payload-budget.json +71 -67
  276. package/src/config/quorum-attendance-budget.json +12 -4
  277. package/src/config/rule-activation-census.json +7 -3
  278. package/src/config/rule-enforcement-baseline.json +0 -1
  279. package/src/config/rule-stub-ceilings.json +112 -91
  280. package/src/scripts/_cli/cmd_doctor.ts +15 -16
  281. package/src/scripts/_cli/doctor_install_mode.ts +49 -0
  282. package/src/scripts/_cli/doctor_overrides.ts +154 -0
  283. package/src/scripts/_dispatch.bash +17 -0
  284. package/src/scripts/_lib/as_of.ts +412 -0
  285. package/src/scripts/_lib/exec_evidence.ts +7 -0
  286. package/src/scripts/_lib/hook_settings.ts +33 -0
  287. package/src/scripts/_lib/host_listing_model.ts +192 -0
  288. package/src/scripts/_lib/lean_projection_mode.ts +44 -0
  289. package/src/scripts/_lib/mcp_bridge.ts +199 -0
  290. package/src/scripts/_lib/review_independence.ts +62 -10
  291. package/src/scripts/_lib/rule_injection.ts +239 -0
  292. package/src/scripts/_lib/run_checkpoint.ts +54 -1
  293. package/src/scripts/_lib/scoped_projection.ts +96 -0
  294. package/src/scripts/_lib/session_register.ts +44 -2
  295. package/src/scripts/_lib/skill_catalogue.ts +38 -2
  296. package/src/scripts/_lib/transcript_reads.ts +207 -0
  297. package/src/scripts/_lib/ui_authority.test.ts +251 -0
  298. package/src/scripts/_lib/ui_authority.ts +343 -0
  299. package/src/scripts/ai-video/adapters/fal.sh +8 -3
  300. package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
  301. package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
  302. package/src/scripts/ai-video/adapters/kling.sh +10 -0
  303. package/src/scripts/ai-video/adapters/sora.sh +10 -0
  304. package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
  305. package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
  306. package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
  307. package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
  308. package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
  309. package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
  310. package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
  311. package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
  312. package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
  313. package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
  314. package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
  315. package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
  316. package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
  317. package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
  318. package/src/scripts/ai-video/smoke-trace.sh +450 -2
  319. package/src/scripts/ai-video/stitch.sh +191 -10
  320. package/src/scripts/ai-video/test-pipeline.sh +84 -6
  321. package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
  322. package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
  323. package/src/scripts/ai_council/clients.ts +3 -2
  324. package/src/scripts/ai_council/consensus.ts +63 -6
  325. package/src/scripts/ai_council/events_log.ts +46 -1
  326. package/src/scripts/ai_council/orchestrator.ts +103 -108
  327. package/src/scripts/ai_council/orchestrator_results.ts +166 -0
  328. package/src/scripts/ai_council/prompts.ts +12 -5
  329. package/src/scripts/ai_council/quorum.ts +82 -1
  330. package/src/scripts/ai_council/quorum_wiring.ts +82 -5
  331. package/src/scripts/ai_council/seating.ts +211 -0
  332. package/src/scripts/ai_council/stance_tally.ts +22 -0
  333. package/src/scripts/bench_hook_latency.ts +62 -0
  334. package/src/scripts/build_proof.ts +12 -1
  335. package/src/scripts/capture_skill_catalogue.ts +21 -0
  336. package/src/scripts/check_always_budget.ts +2 -1
  337. package/src/scripts/check_augmentignore.ts +2 -1
  338. package/src/scripts/check_beta_review_markers.ts +2 -1
  339. package/src/scripts/check_composite_arming.ts +364 -0
  340. package/src/scripts/check_corpus_staleness.ts +2 -1
  341. package/src/scripts/check_council_pin_staleness.ts +3 -1
  342. package/src/scripts/check_enforcement_coverage.ts +116 -3
  343. package/src/scripts/check_enforcement_denominator.ts +365 -0
  344. package/src/scripts/check_gate_coverage.ts +2 -1
  345. package/src/scripts/check_hook_bundle_freshness.ts +13 -1
  346. package/src/scripts/check_knowledge_cards.ts +2 -1
  347. package/src/scripts/check_knowledge_pages.ts +3 -2
  348. package/src/scripts/check_memory.ts +2 -1
  349. package/src/scripts/check_no_automerge_key.ts +287 -0
  350. package/src/scripts/check_pack_conformance_fixture.ts +565 -0
  351. package/src/scripts/check_pack_passport_reconciliation.ts +274 -0
  352. package/src/scripts/check_proposal.ts +2 -1
  353. package/src/scripts/check_reach_staleness.ts +2 -1
  354. package/src/scripts/check_release_adjacent_health.ts +2 -1
  355. package/src/scripts/check_release_pr_shape.ts +5 -0
  356. package/src/scripts/check_review_schema.ts +34 -1
  357. package/src/scripts/check_roadmap_trackable.ts +48 -3
  358. package/src/scripts/check_source_size_budget.ts +2 -1
  359. package/src/scripts/check_standing_payload_delta.ts +505 -0
  360. package/src/scripts/check_trigger_evals.ts +2 -1
  361. package/src/scripts/classify_change_risk.ts +281 -0
  362. package/src/scripts/compute_skill_tiers.ts +186 -0
  363. package/src/scripts/condense.ts +8 -13
  364. package/src/scripts/council_attendance_metrics.ts +183 -0
  365. package/src/scripts/council_cli.ts +10 -8
  366. package/src/scripts/council_parse_rate.ts +116 -0
  367. package/src/scripts/derive_playbooks.ts +406 -0
  368. package/src/scripts/design_slop_rules.test.ts +7 -0
  369. package/src/scripts/design_slop_rules.ts +56 -2
  370. package/src/scripts/dispatch_r2_reviewer.ts +16 -0
  371. package/src/scripts/frontend_corpus_hash.ts +116 -0
  372. package/src/scripts/generate_pack_manifests.ts +78 -0
  373. package/src/scripts/grade_target_readiness.ts +478 -0
  374. package/src/scripts/hook_manifest.json +1 -1
  375. package/src/scripts/hook_manifest.yaml +97 -16
  376. package/src/scripts/hooks/concern_registry.ts +4 -0
  377. package/src/scripts/hooks/design_pass_hook.ts +356 -0
  378. package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
  379. package/src/scripts/hooks/rule_inject_hook.ts +318 -0
  380. package/src/scripts/hot_context_hook.ts +74 -7
  381. package/src/scripts/install.ts +40 -89
  382. package/src/scripts/lint_adapter_tier.ts +663 -0
  383. package/src/scripts/lint_archived_skills.ts +93 -0
  384. package/src/scripts/lint_budget_ownership.ts +2 -1
  385. package/src/scripts/lint_deterministic_time.ts +470 -0
  386. package/src/scripts/lint_framework_leakage.ts +5 -0
  387. package/src/scripts/lint_handoffs.ts +525 -1
  388. package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
  389. package/src/scripts/lint_marketplace.ts +88 -0
  390. package/src/scripts/lint_media_policy_linkage.ts +140 -1
  391. package/src/scripts/lint_one_off_age.ts +6 -1
  392. package/src/scripts/lint_override_kernel_guard.ts +87 -5
  393. package/src/scripts/lint_roadmap_complexity.ts +56 -0
  394. package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
  395. package/src/scripts/lint_rule_norm_pin.ts +321 -0
  396. package/src/scripts/lint_spawn_payload.ts +42 -5
  397. package/src/scripts/lint_symptom_intake.ts +2 -1
  398. package/src/scripts/mcp_parity_smoke.ts +30 -4
  399. package/src/scripts/mcp_render.ts +66 -1
  400. package/src/scripts/mcp_tool_fingerprint.ts +241 -0
  401. package/src/scripts/measure_risk_class_drift.ts +140 -0
  402. package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
  403. package/src/scripts/media/lib/adapter-common.sh +211 -1
  404. package/src/scripts/media/lib/adapter-contract.md +74 -6
  405. package/src/scripts/model_rule_injection.ts +907 -0
  406. package/src/scripts/project_thin_rules.ts +45 -2
  407. package/src/scripts/release.ts +66 -860
  408. package/src/scripts/release_drill.ts +59 -3
  409. package/src/scripts/release_env.ts +298 -0
  410. package/src/scripts/release_publication.ts +720 -0
  411. package/src/scripts/roadmap_context.ts +778 -0
  412. package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
  413. package/src/scripts/schemas/pack.schema.json +62 -4
  414. package/src/scripts/schemas/rule.schema.json +24 -2
  415. package/src/scripts/schemas/skill.schema.json +41 -2
  416. package/src/scripts/schemas/ui-authority.schema.json +114 -0
  417. package/src/scripts/session_register_hook.ts +29 -3
  418. package/src/scripts/sessions_cli.ts +67 -3
  419. package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
  420. package/src/scripts/tighten_skill_descriptions.ts +264 -0
  421. package/src/scripts/token_sink_report.ts +239 -0
  422. package/src/scripts/trigger_coverage.ts +122 -3
  423. package/src/scripts/update_counts.ts +7 -3
  424. package/src/scripts/validate_frontmatter.ts +66 -0
  425. package/src/server/schemas/settings.ts +5 -0
  426. package/src/shared/skillRanking.ts +183 -0
@@ -0,0 +1,54 @@
1
+ ---
2
+ title: Roadmap deferred-item resolution — provenance
3
+ description: Why the preservation test routes a preserving disposition to the council and a dropping one to the owner, what it deliberately does not fix, and the two council decisions behind it.
4
+ type: guideline
5
+ ---
6
+
7
+ # Roadmap deferred-item resolution — provenance
8
+
9
+ Migrated from [`roadmap-progress-sync`](../../../src/rules/roadmap-progress-sync.md)
10
+ § *Who resolves it — the preservation test* under the P4 pattern
11
+ (`road-to-standing-payload-diet` step 1.3). The rule keeps the Iron Law, the
12
+ route table, the fail-closed clause and the recorded-or-it-did-not-happen
13
+ clause — everything an agent must act on. What moved here is the provenance and
14
+ the argument: read once, not on every session.
15
+
16
+ It lives in its own file rather than in
17
+ [`roadmap-progress-mechanics`](roadmap-progress-mechanics.md), which is the
18
+ topical home, for a mechanical reason worth stating so the next migration does
19
+ not repeat the attempt: that file sits ~134 characters under the 16,000-char
20
+ `check_depth_budget` ceiling, so appending this block — or even a stub pointing
21
+ at it — turns a green ratchet red. The ceiling is a growth ratchet rather than a
22
+ measured quality threshold, and the fix it asks for is a smaller destination,
23
+ not a raised baseline.
24
+
25
+ ## The residual hole, stated not papered over
26
+
27
+ Both authoring seats named it in their own strongest counter: a carried
28
+ follow-up can still become an indefinite deferral, so the preservation test
29
+ bounds *who decides*, not *whether the work happens*. Only fix-now discharges
30
+ it. A carried item untouched at the next task boundary is raised again per
31
+ [`active-remediation`](../../../src/rules/active-remediation.md).
32
+
33
+ ## Why the routing changed
34
+
35
+ Adopted 2026-08-19, unanimous 2/2 council (blind peer review). The prior text —
36
+ *"Wait for the user"* — handed back a fully analysed choice carrying four costed
37
+ options, which is the low-value interruption
38
+ [`no-cheap-questions`](../../../src/rules/no-cheap-questions.md) forbids. The
39
+ gate exists to protect the item, not the maintainer's attention; routing a
40
+ preserving disposition to the council keeps the protection and drops the
41
+ interruption.
42
+
43
+ ## `deferred_policy` provenance
44
+
45
+ The declared-contract branch that removes the options round without moving the
46
+ route is `decision 2026-08-20`, AI council 2/2. It is reversible by
47
+ construction: `wait` is the default, so removing the field restores always-wait.
48
+ A declared field never moves a row from owner to council — it changes only
49
+ *when* the round happens.
50
+
51
+ ## See also
52
+
53
+ - [`roadmap-progress-sync`](../../../src/rules/roadmap-progress-sync.md) — the live obligation, Iron Law 3 and the route table.
54
+ - [`roadmap-progress-mechanics`](roadmap-progress-mechanics.md) — glyph semantics, regen cadence, the deferred-resolution menu.
@@ -107,8 +107,8 @@ Within-project invariants + repetition caps. Override = declare the value in
107
107
  | T4 | Eyebrow / ALL-CAPS label above every section heading | Overuse collapses the emphasis; maximum is 1 eyebrow per 3 sections (countable: grep tracking classes) | Used for genuine section-type differentiation with meaningful vocabulary (not just "FEATURES", "PRICING") |
108
108
  | T5 | Repeated section kickers ("Our mission", "What we offer", "Why choose us") | Filler vocabulary; every AI-generated page has the same three section titles | Every kicker is substantive and uses brand-specific vocabulary, not generic marketing speak |
109
109
  | T6 | Crushed letter-spacing on display text (`letter-spacing` < −0.04em) | Below −0.04em glyphs collide optically; reads as "designer-ish effect" with no grounding | Intentional tight display treatment with a documented minimum floor; verify at the actual render size |
110
- | T7 | Overused fonts without a brand reason: Inter, Roboto, DM Sans, Geist, Space Grotesk, Instrument Serif | These are the default AI-coding-tool font picks; every generated UI uses one of them | Brand has explicitly adopted one of these AND there is a documented reason (e.g., Inter for its variable metrics in a data-dense dashboard) |
111
- | T8 | Single typeface for everything | Missed typographic contrast opportunity; all-Inter reads as "I did not think about fonts" | Intentional mono-typeface aesthetic (e.g., terminal-inspired); must be stated in the brief |
110
+ | T7 | Overused fonts without a stated reason: Inter, Roboto, DM Sans, Geist, Space Grotesk, Instrument Serif | These are the default AI-coding-tool font picks; every generated UI uses one of them | **Register-scoped.** In the **brand** register: the brand has explicitly adopted one of these AND there is a documented reason. In the **product** register: a single reliable family is the sanctioned strategy ([`design-modes`](design-modes.md) § The two registers), so one of these is legitimate on a **stated** product-register choice — the register itself is the reason, and it must be stated (DESIGN.md, the surface brief, or `design-slop-disable`). Neither register admits an *undeclared* pick. |
111
+ | T8 | Single typeface for everything | Missed typographic contrast opportunity; in the **brand** register an unexamined single family reads as "I did not think about fonts" | **Register-scoped like T7.** Intentional mono-typeface aesthetic (e.g., terminal-inspired), stated in the brief — *or* the **product** register, where one reliable family is the sanctioned strategy ([`design-modes`](design-modes.md) § The two registers) and contrast is carried by weight and scale rather than by a second family. |
112
112
  | T9 | All-caps body paragraphs or field labels | Reduces legibility below WCAG AA for sustained reading; reads as flair over function | Short UI labels (e.g., button text in a brutalist layout); never for body paragraphs |
113
113
  | T10 | Wide letter-spacing on body text (`letter-spacing` > 0.05em) | Reduces readability for sustained reading; reserved for display use | Display text (headlines, pull quotes) where intentional tracking is a brand element |
114
114
 
@@ -162,6 +162,7 @@ Within-project invariants + repetition caps. Override = declare the value in
162
162
  | CP3 | Aphoristic manufactured contrast ("We don't do X. We do Y." / "Not just A, but B.") | A generated sentence rhythm that sounds like brand writing but carries no specificity | Aphoristic copy is legitimate when the contrast reveals a genuine product distinction; test by asking whether the Y side says something concrete |
163
163
  | CP4 | "Theater" framing — copy that announces what the product does without saying how or why | "The platform for modern teams." communicates nothing; it is content-shaped noise | Every tagline must pass the "so what" test: can a skeptic follow it with "but how?" and get a concrete answer? |
164
164
  | CP5 | Emoji-decoration in UI markup — 🚀/✅/🎉 prepending headings, buttons, list items, or CTAs (`🚀 Get Started`) | Performative-enthusiasm coating; the default-startup-template tell. No emoji is better than decorative emoji | Brand/`DESIGN.md` declares a systematic emoji strategy, or the emoji is functional (status indicator, category marker tied to real meaning) |
165
+ | CP6 | Stock render subject named instead of the product's own subject matter — "floating abstract shapes", "gradient mesh", "glowing orb", "particle field", "futuristic HUD" | These name the default thing a render becomes when nobody decided what it is about; same delete-test as CP2, applied to art direction — swap the phrase for what the product actually shows and the brief says more | The subject IS abstract by decision (a generative-art surface, a data-driven field whose data is named), and the brief says which decision and why |
165
166
 
166
167
  ---
167
168
 
@@ -261,6 +262,7 @@ are listed in § Quality floors.
261
262
  | CP3 | judgment-only | copy phrase-list; that mechanism is council-rejected |
262
263
  | CP4 | judgment-only | copy phrase-list; that mechanism is council-rejected |
263
264
  | CP5 | backed | |
265
+ | CP6 | backed | copy-engine phrase list, same mechanism as CP2; a CSS engine cannot see subject matter |
264
266
 
265
267
  ---
266
268
 
@@ -0,0 +1,38 @@
1
+ # Design Assets & Imagery — ownership, delivery, honesty
2
+
3
+ > What a visual artifact may ship as an asset, who delivers it, and what counts as fabricated evidence
4
+
5
+ _Split out of [`design-fidelity-mechanics`](design-fidelity-mechanics.md) § Asset & imagery discipline, which carries the obligation surface and routes here. The split is the per-file depth ceiling doing its job, exactly as it was for [`design-handover-extraction`](design-handover-extraction.md): the mechanics file crossed 16k when the artefact-maturity axis was migrated into it, and compressing this material to fit would have cost the ownership sentence ADR-205 rests on and the fixture ids that make each bullet falsifiable._
6
+
7
+ Visual artifacts carry **real assets or honest placeholders — never fabricated
8
+ brand evidence**. The design-surface instance of the no-invented-facts floor.
9
+
10
+ - **Copy owned assets through the project's accepted path.** Reference or copy
11
+ project-owned assets (logos, icons, fonts, images) via the target project's
12
+ asset directory/pipeline — never hotlink a design-system's internal URL, never
13
+ bulk-copy a huge source folder. (fixtures: `daf-missing-asset`, `daf-external-asset-url`.)
14
+ - **Third-party asset delivery is self-hosted by default — this section owns that
15
+ decision.** An asset whose delivery path crosses a third party (a webfont from
16
+ a font CDN, an icon set from a CDN, a hosted stylesheet) transmits the
17
+ **visitor's IP address** to that third party on every page view. Deliver it
18
+ through the target project's own route instead — the framework's font/asset
19
+ primitive, a bundled package, or a locally-served file. A third-party hotlink
20
+ is emitted **only** on an explicit consumer opt-in, and the opt-in is stated
21
+ with what it transmits — never chosen silently because it is the shorter line.
22
+ A discovery URL is not a delivery URL: keeping a font's browse/share link as
23
+ *where to find it* is fine. Ownership: this bullet is the single owner of the
24
+ third-party delivery decision ([`ADR-205`](../decisions/ADR-205-webfont-delivery-ownership.md));
25
+ emitters (`typography-system`, UI-apply directives, brand-asset paths) are
26
+ consumers and point here rather than restating it. (fixture:
27
+ `daf-webfont-delivery`.)
28
+ - **Real imagery where inspection matters.** On visual pages/decks, use actual
29
+ product / place / object / state imagery where the image IS the proof (a
30
+ product screenshot, a real dashboard state). Decorative atmosphere is not proof
31
+ — never pass a stock-like or invented image off as the real product. An
32
+ invented product screenshot is fabricated evidence. (fixture: `daf-invented-screenshot`.)
33
+ - **Icons follow the iconography floor** — no emoji-as-icon in serious UI, no
34
+ hand-rolled icon when a set exists; see the `iconography` skill § Iconography floor.
35
+ - **Ask before adding material — no unrequested filler.** Never generate copy,
36
+ placeholder sections, or decorative blocks the user did not ask for to "complete"
37
+ a design. Brief silent on a region → surface the gap (`ask-when-uncertain`)
38
+ or leave an honest placeholder; never invent filler to fill space.
@@ -148,35 +148,25 @@ always owed.
148
148
  Visual artifacts carry **real assets or honest placeholders — never fabricated
149
149
  brand evidence**. The design-surface instance of the no-invented-facts floor.
150
150
 
151
- - **Copy owned assets through the project's accepted path.** Reference or copy
152
- project-owned assets (logos, icons, fonts, images) via the target project's
153
- asset directory/pipeline — never hotlink a design-system's internal URL, never
154
- bulk-copy a huge source folder. (fixtures: `daf-missing-asset`, `daf-external-asset-url`.)
155
- - **Third-party asset delivery is self-hosted by default — this section owns that
156
- decision.** An asset whose delivery path crosses a third party (a webfont from
157
- a font CDN, an icon set from a CDN, a hosted stylesheet) transmits the
158
- **visitor's IP address** to that third party on every page view. Deliver it
159
- through the target project's own route instead — the framework's font/asset
160
- primitive, a bundled package, or a locally-served file. A third-party hotlink
161
- is emitted **only** on an explicit consumer opt-in, and the opt-in is stated
162
- with what it transmits — never chosen silently because it is the shorter line.
163
- A discovery URL is not a delivery URL: keeping a font's browse/share link as
164
- *where to find it* is fine. Ownership: this bullet is the single owner of the
165
- third-party delivery decision ([`ADR-205`](../decisions/ADR-205-webfont-delivery-ownership.md));
166
- emitters (`typography-system`, UI-apply directives, brand-asset paths) are
167
- consumers and point here rather than restating it. (fixture:
168
- `daf-webfont-delivery`.)
169
- - **Real imagery where inspection matters.** On visual pages/decks, use actual
170
- product / place / object / state imagery where the image IS the proof (a
171
- product screenshot, a real dashboard state). Decorative atmosphere is not proof
172
- — never pass a stock-like or invented image off as the real product. An
173
- invented product screenshot is fabricated evidence. (fixture: `daf-invented-screenshot`.)
174
- - **Icons follow the iconography floor** — no emoji-as-icon in serious UI, no
175
- hand-rolled icon when a set exists; see the `iconography` skill § Iconography floor.
176
- - **Ask before adding material — no unrequested filler.** Never generate copy,
177
- placeholder sections, or decorative blocks the user did not ask for to "complete"
178
- a design. Brief silent on a region → surface the gap (`ask-when-uncertain`)
179
- or leave an honest placeholder; never invent filler to fill space.
151
+ Owned-asset paths, the third-party delivery decision this repository pins to
152
+ self-hosting ([`ADR-205`](../decisions/ADR-205-webfont-delivery-ownership.md)),
153
+ the real-imagery-as-proof floor, the iconography floor and the
154
+ no-unrequested-filler clause — each with its `daf-*` fixture:
155
+ [`design-asset-discipline`](design-asset-discipline.md).
156
+
157
+ ## Artefact maturity — the second axis
158
+
159
+ The Iron Law and both discriminator clauses stay in
160
+ [`design-fidelity`](../../src/rules/design-fidelity.md) § Two axes; this is the table.
161
+
162
+ | The artefact declares | The spec is | The spec is NOT |
163
+ |---|---|---|
164
+ | low fidelity — greyscale, box-and-line, placeholder copy | layout · element set · hierarchy · states shown | greys · placeholder text · borders · exact spacing |
165
+ | finished — colour, real copy, real assets | everything visible (the 1:1 floor, unchanged) | — |
166
+
167
+ Grounded in [`wireframe`](../../src/skills/wireframe/SKILL.md) § Gotchas. The near-miss
168
+ class is pinned in `ROUTING_MATRIX`, its rationale beside the assertions in
169
+ `design_fidelity_routing.test.ts`.
180
170
 
181
171
  ## Provided-artifact precedence
182
172
 
@@ -240,6 +230,32 @@ unmarked finding is treated as actionable, so the default failure direction is
240
230
 
241
231
  Regression witness: `daf-slop-vs-provided`.
242
232
 
233
+ ## Value-level provenance — the finer grain beside the flag
234
+
235
+ The block above is finding-level and stays the default: `artifact_covered` is a
236
+ boolean on a **finding**, and every consumer of it — `partition_artifact_covered`
237
+ and the ceiling check it feeds — is unchanged by this section.
238
+
239
+ What a per-finding boolean cannot answer is *"where did this `16px` come from"*.
240
+ The flag says a finding is answered by the artifact; it does not say which value
241
+ carried the expectation, so two rows that disagree about the same element look
242
+ identical to a reviewer.
243
+
244
+ `src/scripts/schemas/fidelity-measurement-sheet.schema.json` adds that grain and
245
+ nothing else: each measurement row carries `expectation_source` — a `kind`
246
+ ordered by authority (`provided_artifact` › `design_token` › `brand_token` ›
247
+ `house_heuristic` › `agent_inference`) plus a `ref` naming the token, `file:line`
248
+ or artefact anchor. `agent_inference` is the row a reviewer filters for.
249
+
250
+ Two boundaries, because this is an addition and not a replacement:
251
+
252
+ - **The coarse flag stays the default channel.** A row's optional
253
+ `expectation_source.artifact_covered` mirrors the flag for one value; it never
254
+ substitutes for setting the flag on the finding, and no gate reads it.
255
+ - **The ordering above is a mirror, not a second source of truth.** Precedence
256
+ is decided in the block above; a `kind` that disagreed with it would be a
257
+ defect in the schema, not a competing chain.
258
+
243
259
  ## Failure modes
244
260
 
245
261
  - Swapping the prototype's font / typeface because another "reads better".
@@ -74,11 +74,41 @@ ladder requires you to **name**, not to pass off as a source-based build.
74
74
  ## Coverage — stated honestly
75
75
 
76
76
  No fixture scores this class yet. `daf-source-over-screenshot` scores the rung
77
- choice on an *attached* artifact, not a URL handover, and it is itself recorded
78
- as SKIPPED on 2026-08-13 for want of a page-reaching capture primitive. Closing
79
- the gap needs a fixture whose host actually has one; claiming a regression
80
- witness before then would be the fabrication this package's evidence discipline
81
- exists to prevent.
77
+ choice on an *attached* artifact, not a URL handover.
78
+
79
+ **Its blocking reason changed on 2026-08-23 and the new one is narrower.** It was
80
+ SKIPPED since 2026-08-13 "for want of a page-reaching capture primitive". That
81
+ primitive now exists — `agent-config ui:render`, a Class-A headless capture at
82
+ desktop / 375 px / 320 px, executed against a real fixture. So the fixture is no
83
+ longer blocked on a missing capability; it is **unscored**, pending a live eval
84
+ run that puts an agent through an artifact port and judges the rung it chose.
85
+
86
+ The discipline is unchanged and still binds: claiming a regression witness before
87
+ that run would be the fabrication this package's evidence discipline exists to
88
+ prevent. What moved is which sentence is true — "we cannot measure this" became
89
+ "we have not measured this yet", and those are different claims.
90
+
91
+ ### The skip register — every fixture gated on the same primitive
92
+
93
+ `daf-source-over-screenshot` is no longer the only one, so the reason string is
94
+ recorded once here rather than restated per fixture. Every row below is
95
+ **SKIPPED** with `b-page-capture-primitive` as its reason, and none is silently
96
+ absent:
97
+
98
+ | Fixture | Registered | Reason |
99
+ |---|---|---|
100
+ | `daf-source-over-screenshot` | 2026-08-13 | `b-page-capture-primitive` |
101
+ | `daf-render-absent-scoped` | 2026-08-23 | `b-page-capture-primitive` — its render-dependent assertions only; the static-scope assertions run and pass |
102
+ | `daf-render-absent-control` | 2026-08-23 | `b-page-capture-primitive` — synthesises `render_ok: true` as state rather than rendering, and says so |
103
+
104
+ **Probed, not assumed** (2026-08-23). The `playwright` library resolves in this
105
+ tree, which reads as a capture primitive until you run it: launching chromium
106
+ fails with *"Executable doesn't exist at
107
+ …/chromium_headless_shell-1234/chrome-headless-shell"*. The library is present
108
+ and **no browser binary is installed**, so the primitive is
109
+ `not-available: headless-browser-binary`. Recorded as execution evidence because
110
+ "playwright is in node_modules" is exactly the inference that would have made a
111
+ fabricated witness look justified.
82
112
 
83
113
  ## See also
84
114
 
@@ -14,7 +14,7 @@ wrong is the root cause of most AI-generated design failures:
14
14
  | **Primary failure** | Flatness / genericness — looks like every other AI startup | Strangeness without purpose — "clever" choices that obscure the tool |
15
15
  | **The user's question** | "How was this made?" (genuine curiosity) | "Where do I click?" (the tool disappears into the task) |
16
16
  | **Key skill cluster** | `brand-identity`, `iconography`, `fe-design § Aesthetic direction`, `design-intelligence` | `accessibility-auditor`, `ui-component-architect`, `fe-design § Table/Form Design` |
17
- | **Typography strategy** | Distinctive pairing — two contrasting families, deliberate tracking | One reliable family — Inter or equivalent; predictable hierarchy |
17
+ | **Typography strategy** | Distinctive pairing — two contrasting families, deliberate tracking | One reliable family — predictable hierarchy. A default AI font pick (Inter, Roboto, DM Sans, Geist, Space Grotesk, Instrument Serif) is a legitimate product-register choice, and [`design-antipatterns` T7](design-antipatterns.md) scopes itself accordingly — but the register is the reason, so state it: an undeclared Inter is still an undeclared font choice. |
18
18
  | **Color strategy** | Brand identity — often unexpected; the palette IS the differentiator | Semantic function — primary/danger/success/neutral; predictable meaning |
19
19
  | **Motion strategy** | Expressive — motion reinforces the brand's personality | Utilitarian — motion confirms state changes; nothing decorative |
20
20
  | **Spacing strategy** | Breathing room; generous whitespace as a brand signal | Dense/efficient; optimize for information density |
@@ -41,6 +41,46 @@ a product-mode dashboard). The register applies per-surface, not per-product.
41
41
  When unclear: ask — *"Is the user here to be impressed, or to accomplish a
42
42
  task?"*
43
43
 
44
+ ## The second axis — surface job
45
+
46
+ The register answers *how expressive may this be*. It does not answer *what is
47
+ this surface for*, and conflating the two is why a persuade surface inside a
48
+ product repo gets dense, utilitarian defaults. So there are two axes, and they
49
+ are independent.
50
+
51
+ | Surface job | The user's situation | Density | Hierarchy | Expressiveness |
52
+ |---|---|---|---|---|
53
+ | `persuade` | arrived, deciding, will leave in seconds | generous | one dominant claim per viewport | high — this is the job |
54
+ | `operate` | returning, task in mind, wants it done | dense | scannable, predictable, repeated | low — strangeness costs time |
55
+ | `read` | sustained attention on prose or data | measured | typographic, not chrome-led | restrained |
56
+ | `experience` | exploring, no task, willing to be surprised | spacious | narrative, sequential | high, and sequenced |
57
+
58
+ ```
59
+ SURFACE JOB IS PER-SURFACE AND LIVES IN THE SURFACE BRIEF.
60
+ IT IS NEVER READ OFF PRODUCT.md, AND A RUN NEVER WRITES IT THERE.
61
+ ```
62
+
63
+ **Why not in PRODUCT.md.** PRODUCT.md describes the product, and a product has
64
+ many surfaces with different jobs — an investor one-pager and an ops console
65
+ belong to the same product and share no defaults. A run that resolves the job
66
+ from PRODUCT.md flattens the persuade surface into the product register, which
67
+ is the `surface-mode-not-product-mode` near-miss in
68
+ `tests/eval/frontend-corpus/near-miss/`.
69
+
70
+ **Register stays.** The two axes compose: a `persuade` surface in the `brand`
71
+ register and a `persuade` surface in the `product` register are both persuade
72
+ surfaces, and the register decides how far the expressiveness may go.
73
+
74
+ **Quality floors do not vary by either axis.** Density, hierarchy and
75
+ expressiveness defaults move; contrast, minimum font size, line length,
76
+ reduced-motion, heading order and focus visibility do not. A floor that moved
77
+ with the surface job would be a preference wearing a floor's name.
78
+
79
+ The machine-readable form is `surface_mode` in
80
+ [`ui-authority`](../contracts/ui-authority.md), which is also the one place the
81
+ precedence between an explicit instruction, the brief and these defaults is
82
+ written down.
83
+
44
84
  ## Brand-mode failure modes
45
85
 
46
86
  - **Genericness:** Choosing the safe AI-slop palette (cream + brass, purple/violet gradient, three equal cards). The product is invisible in its category. Cross-check with `docs/guidelines/design-antipatterns.md` § Color and Visual.
@@ -0,0 +1,141 @@
1
+ # Monorepo anti-patterns — the diff-detectable set
2
+
3
+ Task-graph mistakes a reviewer can catch by **reading a diff**, with no build
4
+ run and no repository checked out. That is the whole selection criterion: a
5
+ review judge sees a patch, not a running pipeline, so a rule it cannot evaluate
6
+ from the patch is not a rule it can enforce.
7
+
8
+ > **Own analysis, corroboration outstanding.** The six rows below describe
9
+ > publicly documented behaviour of Turborepo and Nx and are stated from that
10
+ > behaviour, not adopted from a third-party artefact — so no
11
+ > `provenance/borrows.jsonl` entry backs them, and none should be read into
12
+ > them. The roadmap that commissioned this file recorded specific source line
13
+ > numbers in an external MIT-licensed reference; that reference is **not
14
+ > reachable from this checkout** (it was never cloned here, and the consumed
15
+ > inbox copy carrying the real identifiers is gitignored), so those line numbers
16
+ > could not be re-read and are deliberately **not** reproduced as citations. A
17
+ > citation nobody in this tree can follow is worse than an honest own-analysis
18
+ > label. See § Not harvested for what that leaves open.
19
+
20
+ ## The six rows
21
+
22
+ ### 1. A root script that bypasses the task runner
23
+
24
+ ```jsonc
25
+ // root package.json — WRONG
26
+ { "scripts": { "build": "tsc -b packages/ui && vite build apps/web" } }
27
+ ```
28
+
29
+ The runner exists to know the graph, cache the results, and parallelise. A root
30
+ script that invokes the underlying tools directly gets none of that, and — worse
31
+ — becomes a second, divergent definition of what "build" means. Route through
32
+ the runner: `"build": "turbo run build"`.
33
+
34
+ **In a diff:** a root `scripts` entry naming a compiler, bundler, or test runner
35
+ directly instead of `turbo run` / `nx run-many`.
36
+
37
+ ### 2. `prebuild` that builds a sibling
38
+
39
+ ```jsonc
40
+ // packages/ui/package.json — WRONG
41
+ { "scripts": { "prebuild": "cd ../tokens && npm run build" } }
42
+ ```
43
+
44
+ npm lifecycle hooks are invisible to the task runner. The dependency is real but
45
+ undeclared, so the runner may build the two in the wrong order, in parallel, or
46
+ skip the sibling entirely on a cache hit. Express it as a dependency
47
+ (`dependsOn: ["^build"]` plus a real `workspace:` dependency) so the graph
48
+ carries it.
49
+
50
+ **In a diff:** a `pre*` / `post*` script containing `cd ..`, a sibling path, or
51
+ another workspace's name.
52
+
53
+ ### 3. `&&`-chained runner tasks
54
+
55
+ ```jsonc
56
+ { "scripts": { "ci": "turbo run lint && turbo run test && turbo run build" } }
57
+ ```
58
+
59
+ Three sequential invocations, each with its own graph walk, forcing full
60
+ serialisation and discarding the parallelism the runner would have found. It
61
+ also makes the cache less effective, because each invocation is scoped to one
62
+ task. Pass the tasks together: `turbo run lint test build`.
63
+
64
+ **In a diff:** two or more `turbo run` / `nx run-many` invocations joined by
65
+ `&&` in one script.
66
+
67
+ ### 4. Shared code inside `apps/`
68
+
69
+ ```
70
+ apps/web/src/shared/format-currency.ts ← imported by apps/admin
71
+ ```
72
+
73
+ `apps/*` are leaves: deployable things nothing else depends on. The moment a
74
+ second app imports from the first, the two are coupled with no declared edge,
75
+ the affected-set calculation is wrong, and neither app can be built or released
76
+ alone. Shared code belongs in a `packages/*` workspace with a real dependency
77
+ declared ([`workspace-link`](../../src/skills/workspace-link/SKILL.md)).
78
+
79
+ **In a diff:** an import whose specifier reaches into `apps/<other>/`, or a new
80
+ `shared/` `common/` `utils/` directory added under `apps/*`.
81
+
82
+ ### 5. `../` traversal in a task's `inputs`
83
+
84
+ ```jsonc
85
+ // turbo.json — WRONG
86
+ { "tasks": { "build": { "inputs": ["src/**", "../tokens/src/**"] } } }
87
+ ```
88
+
89
+ `inputs` are scoped to the workspace on purpose: they define that task's cache
90
+ key. Reaching outside it makes the key depend on files the runner does not
91
+ consider part of this task, which produces both false cache hits (the sibling
92
+ changed in a way the key did not capture) and false misses. The sibling's output
93
+ should be an input *because it is a declared dependency*, not because a glob
94
+ walked up the tree.
95
+
96
+ **In a diff:** a `../` segment inside `inputs`, `outputs`, or a task-scoped glob
97
+ in `turbo.json`.
98
+
99
+ ### 6. A file-producing task with no `outputs`
100
+
101
+ ```jsonc
102
+ { "tasks": { "build": { "dependsOn": ["^build"] } } } // writes dist/, declares nothing
103
+ ```
104
+
105
+ With no `outputs`, the runner caches the task's *logs* and not its artefacts. A
106
+ cache hit then restores nothing, so the next task in the chain runs against a
107
+ missing or stale `dist/` — and the failure is intermittent, because it only
108
+ appears on a hit. Declare what the task writes: `"outputs": ["dist/**"]`.
109
+
110
+ **In a diff:** a task whose command runs a compiler or bundler while its config
111
+ block carries no `outputs` key.
112
+
113
+ ## Not harvested
114
+
115
+ The external reference this file was commissioned from carries a substantially
116
+ longer anti-pattern list. The rows above are the ones whose violation is visible
117
+ in a patch; the classes below were deliberately left out, each for a reason that
118
+ is a property of the *check*, not of the advice:
119
+
120
+ | Class not harvested | Why it cannot be a diff rule |
121
+ |---|---|
122
+ | Cache hit-rate and timing regressions | Needs two runs to compare; a diff has no runtime. |
123
+ | Task-graph cycles | Requires resolving the whole graph, not reading one file. |
124
+ | Over-broad `inputs` causing cache misses | "Too broad" is a judgement against observed hit rates. |
125
+ | Remote-cache and CI configuration mistakes | Lives in CI/runner settings, not in the reviewed diff. |
126
+ | Dependency-order races that only appear under `--parallel` | Needs a running build to observe. |
127
+ | Environment-variable declarations missing from the cache key | Detectable only once a build produces a wrong artefact. |
128
+
129
+ **Honest limit on this table:** it enumerates *classes* reasoned about from what
130
+ such a list contains, not a row-by-row disposition of the source — which, per
131
+ the note above, could not be opened here. So it does not establish that every
132
+ source row is accounted for. Closing that needs the reference reachable in a
133
+ checkout; until then this section states what was decided and on what basis,
134
+ rather than implying a completeness it does not have.
135
+
136
+ ## See also
137
+
138
+ - [`monorepo-workspace`](../../src/skills/monorepo-workspace/SKILL.md) — read the graph and the task list before judging either.
139
+ - [`workspace-link`](../../src/skills/workspace-link/SKILL.md) — the `workspace:` declaration rows 2 and 4 both come back to.
140
+ - [`blast-radius-analyzer`](../../src/skills/blast-radius-analyzer/SKILL.md) — § Monorepo, for the affected set of an edit.
141
+ - [`design-antipatterns.md`](design-antipatterns.md) — sibling diff-detectable catalog for a different surface.