@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,169 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "fidelity-measurement-sheet.schema.json",
4
+ "title": "Fidelity measurement sheet",
5
+ "description": "The per-element artefact W3 of road-to-frontend-fidelity-calibration records as absent: a tree-wide search for `measurement-sheet` / `measurement_sheet` / `per-element measurement` across src/ and docs/ returned zero hits at 2026-08-22. One row per (selector, dimension) pair carrying the expected value, the observed value, and — the part that makes it a fidelity artefact rather than a diff — WHERE the expectation came from. A reviewer can diff two sheets and a gate can read the `status` column, neither of which is true of an agent comparing two pictures. Deliberately NOT a findings format: `review-findings.schema.json` already owns findings. A sheet is the measurement; a finding is what someone decided about it.",
6
+ "type": "object",
7
+ "required": [
8
+ "schema_version",
9
+ "dimensions",
10
+ "rows"
11
+ ],
12
+ "additionalProperties": true,
13
+ "properties": {
14
+ "schema_version": {
15
+ "enum": [
16
+ 1
17
+ ],
18
+ "description": "Pinned. Spelled as a one-member `enum` rather than `const` because this repo's Draft-07 subset validator (validate_frontmatter.ts) enforces `enum` and silently ignores `const` — a `const` here would be a pin nothing checks."
19
+ },
20
+ "surface": {
21
+ "type": "string",
22
+ "description": "What was measured — a route, a component path, or a fixture id. Free text; no gate reads it."
23
+ },
24
+ "captured_at": {
25
+ "type": "string",
26
+ "description": "ISO-8601 timestamp of the measurement run."
27
+ },
28
+ "dimensions": {
29
+ "type": "array",
30
+ "minItems": 1,
31
+ "description": "Every dimension this sheet accounts for — shipped and cut alike. AC-3 is checked against this list: each entry is either measured by >=1 row or carries a `null_record`. A dimension that appears in neither is the failure the AC exists to catch.",
32
+ "items": {
33
+ "type": "object",
34
+ "required": [
35
+ "id",
36
+ "status"
37
+ ],
38
+ "additionalProperties": true,
39
+ "properties": {
40
+ "id": {
41
+ "type": "string",
42
+ "description": "Stable dimension id, e.g. `token-literal`. Rows reference it."
43
+ },
44
+ "status": {
45
+ "enum": [
46
+ "shipped",
47
+ "null"
48
+ ],
49
+ "description": "`shipped` — at least one row carries a measurement for it. `null` — cut, and `null_record` says which pre-registered falsifier fired."
50
+ },
51
+ "null_record": {
52
+ "type": "object",
53
+ "required": [
54
+ "falsifier",
55
+ "unavailable_capability",
56
+ "affected_claims",
57
+ "reopening_condition"
58
+ ],
59
+ "additionalProperties": true,
60
+ "description": "Required when `status` is `null`. The four parts this roadmap records for every null, so a cut dimension is distinguishable from one nobody thought of.",
61
+ "properties": {
62
+ "falsifier": {
63
+ "type": "string",
64
+ "description": "The pre-registered falsifier id from the Phase 2.3 list that fired."
65
+ },
66
+ "unavailable_capability": {
67
+ "type": "string",
68
+ "description": "What is missing, named as a capability rather than as an excuse."
69
+ },
70
+ "affected_claims": {
71
+ "type": "array",
72
+ "items": { "type": "string" },
73
+ "description": "Inventory row ids (A1..A13) this null covers. A null that enumerates nothing is indistinguishable from a matrix that never had those rows."
74
+ },
75
+ "reopening_condition": {
76
+ "type": "string",
77
+ "description": "The observable event that puts the dimension back in the matrix."
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ },
84
+ "rows": {
85
+ "type": "array",
86
+ "description": "The measurements. May be empty only when every dimension carries `status: null`.",
87
+ "items": {
88
+ "type": "object",
89
+ "required": [
90
+ "selector",
91
+ "dimension",
92
+ "expected",
93
+ "observed",
94
+ "expectation_source",
95
+ "status"
96
+ ],
97
+ "additionalProperties": true,
98
+ "properties": {
99
+ "selector": {
100
+ "type": "string",
101
+ "description": "What was measured — a CSS selector where a page was reached, otherwise a `file:line` anchor. Both are per-element; only one of them needs a browser."
102
+ },
103
+ "dimension": {
104
+ "type": "string",
105
+ "description": "The `dimensions[].id` this row measures."
106
+ },
107
+ "expected": {
108
+ "type": [
109
+ "string",
110
+ "number",
111
+ "null"
112
+ ],
113
+ "description": "The value the expectation source calls for. `null` means the source is silent, which is a legitimate measurement — see `status: unspecified`."
114
+ },
115
+ "observed": {
116
+ "type": [
117
+ "string",
118
+ "number",
119
+ "null"
120
+ ],
121
+ "description": "The value actually present."
122
+ },
123
+ "expectation_source": {
124
+ "type": "object",
125
+ "required": [
126
+ "kind",
127
+ "ref"
128
+ ],
129
+ "additionalProperties": true,
130
+ "description": "VALUE-LEVEL provenance. `docs/guidelines/design-fidelity-mechanics.md` carries the finding-level `artifact_covered` flag; this is the finer grain that answers `where did this 16px come from`, which a per-finding boolean cannot.",
131
+ "properties": {
132
+ "kind": {
133
+ "enum": [
134
+ "provided_artifact",
135
+ "design_token",
136
+ "brand_token",
137
+ "house_heuristic",
138
+ "agent_inference"
139
+ ],
140
+ "description": "Ordered by authority, highest first, mirroring the precedence chain rather than restating it. `agent_inference` is the lowest and is the one a reviewer should be able to find by filtering."
141
+ },
142
+ "ref": {
143
+ "type": "string",
144
+ "description": "Where exactly — a token name, a `file:line`, or an artefact anchor. Never a bare `true`."
145
+ },
146
+ "artifact_covered": {
147
+ "type": "boolean",
148
+ "description": "Mirrors `ARTIFACT_COVERED_KEY` for the row's own value. Optional and defaulted-absent: the coarse per-finding flag stays the default channel, and this field never replaces it."
149
+ }
150
+ }
151
+ },
152
+ "status": {
153
+ "enum": [
154
+ "match",
155
+ "deviation",
156
+ "unspecified",
157
+ "unmeasured"
158
+ ],
159
+ "description": "`match` / `deviation` — expected and observed both known. `unspecified` — the source is silent, so there is nothing to deviate from. `unmeasured` — the dimension is blocked; the row records that it was not skipped silently."
160
+ },
161
+ "blocker": {
162
+ "type": "string",
163
+ "description": "Required in practice when `status` is `unmeasured`: the blocker slug, e.g. `b-page-capture-primitive`. Not schema-required, because a sheet produced outside this roadmap has no blocker file to name."
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
@@ -6,7 +6,10 @@
6
6
  "$comment": "Generated by scripts/generate_pack_manifests.py and validated on load by scripts/validate_pack_yaml.py. Schema introduced in road-to-6.0.0-D Phase 0 Step 2. `dependencies` is the artefact-level include graph (skills/rules the pack's commands reference); `requires` is the pack-level hard-dependency graph (must be acyclic — enforced by scripts/lint_pack_dependencies.py).",
7
7
  "type": "object",
8
8
  "additionalProperties": false,
9
- "required": ["id", "artefact_count"],
9
+ "required": [
10
+ "id",
11
+ "artefact_count"
12
+ ],
10
13
  "properties": {
11
14
  "id": {
12
15
  "type": "string",
@@ -27,7 +30,9 @@
27
30
  },
28
31
  "owner": {
29
32
  "type": "array",
30
- "items": { "type": "string" }
33
+ "items": {
34
+ "type": "string"
35
+ }
31
36
  },
32
37
  "requires": {
33
38
  "type": "array",
@@ -47,12 +52,21 @@
47
52
  },
48
53
  "size_class": {
49
54
  "type": "string",
50
- "enum": ["core", "small", "medium", "large", "platform"],
55
+ "enum": [
56
+ "core",
57
+ "small",
58
+ "medium",
59
+ "large",
60
+ "platform"
61
+ ],
51
62
  "description": "Per-pack visible-command budget input."
52
63
  },
53
64
  "surface_tier": {
54
65
  "type": "string",
55
- "enum": ["core", "lab"],
66
+ "enum": [
67
+ "core",
68
+ "lab"
69
+ ],
56
70
  "description": "Install-layout surface tier (road-to-install-contract-stability Phase 2). `core` = the lean stable multi-host engine that users install (rules + skills + install + condensation); `lab` = experimental / pilot domain tooling that must not destabilise the core install. Default `core`. The core-only install path excludes `lab` packs."
57
71
  },
58
72
  "trust_level_default": {
@@ -92,6 +106,50 @@
92
106
  }
93
107
  }
94
108
  }
109
+ },
110
+ "token_passport": {
111
+ "type": "object",
112
+ "additionalProperties": false,
113
+ "required": [
114
+ "basis",
115
+ "rules_tokens",
116
+ "catalog_tokens",
117
+ "commands_tokens",
118
+ "other_tokens",
119
+ "total_tokens"
120
+ ],
121
+ "description": "GENERATED — what this pack contributes to the STANDING session payload. Derivation, tokenizer and the reconciliation target are fixed by docs/contracts/pack-token-passport.md, written before the first passport existed. Standing cost only: a skill body loaded on invocation is a runtime cost and is not here, and the residual bucket (tool definitions + dispatch prompt) is not attributable to a pack at all. It is a floor on a pack's session cost, never the whole of it.",
122
+ "properties": {
123
+ "basis": {
124
+ "type": "string",
125
+ "enum": [
126
+ "chars/4"
127
+ ],
128
+ "description": "Pinned to an enum on purpose. chars/4 is the basis preamble-payload-budget.json declares for itself; a passport measured with an exact tokenizer could not be compared against a census measured with a proxy without the gap between two METHODS reading as a discrepancy in the packs."
129
+ },
130
+ "rules_tokens": {
131
+ "type": "integer",
132
+ "minimum": 0
133
+ },
134
+ "catalog_tokens": {
135
+ "type": "integer",
136
+ "minimum": 0,
137
+ "description": "Sum of `- <name>: <description>\\n` over the pack's skill artefacts — the SAME construction censusSkillsCatalog uses, not an approximation of it."
138
+ },
139
+ "commands_tokens": {
140
+ "type": "integer",
141
+ "minimum": 0
142
+ },
143
+ "other_tokens": {
144
+ "type": "integer",
145
+ "minimum": 0,
146
+ "description": "Every other claimed artefact — contexts, personas, presets, profiles, user-types. Exists because the three named buckets produced a misleading zero: `core` claimed 47 artefacts and reported 0 tokens, which reads as 'this pack is free'."
147
+ },
148
+ "total_tokens": {
149
+ "type": "integer",
150
+ "minimum": 0
151
+ }
152
+ }
95
153
  }
96
154
  }
97
155
  }
@@ -55,6 +55,28 @@
55
55
  },
56
56
  "description": "Eager auto-loaded context references. Same logical-name rule as `load_context`. Counts against the per-rule char budget; enforced by scripts/lint_load_context.py."
57
57
  },
58
+ "norm": {
59
+ "type": "object",
60
+ "additionalProperties": false,
61
+ "required": ["tokens", "remainder"],
62
+ "description": "The rule's declared NORMATIVE budget, plus where its non-normative remainder went. Optional: a required key would red every existing rule file on the day it lands, which is the gate-that-teaches-you-to-ignore-it failure `src/config/preamble-payload-budget.json` warns about in its own `_comment`. A rule that declares this is asserting that everything left in its body is obligation or routing, and that the rationale a reader may still want is reachable at `remainder`. Measured and enforced by `lint_rule_norm_pin`.",
63
+ "properties": {
64
+ "tokens": {
65
+ "type": "integer",
66
+ "minimum": 1,
67
+ "description": "Exact-BPE ceiling (cl100k_base) for the rule body BELOW the frontmatter. Never a chars/4 proxy - this tree ships an exact tokenizer and a pin measured in the other unit would be enforced against a number nobody can reproduce. Derive it from a real measurement of the rule after its remainder has moved out; a pin invented at authoring time is an invented threshold and the lint would then enforce a guess."
68
+ },
69
+ "remainder": {
70
+ "type": "array",
71
+ "minItems": 1,
72
+ "items": {
73
+ "type": "string",
74
+ "pattern": "^((\\.\\./)*(contexts|docs|skills)/|agents/settings/contexts/|dist/agent-src/(contexts|skills)/)[^\\s]+\\.md$"
75
+ },
76
+ "description": "Where the prose this rule used to carry now lives - one or more guideline, context, or skill paths. REQUIRED alongside `tokens`, deliberately: a pin with no destination is a licence to delete, and `preservation-guard` forbids deletion during a transformation. The rule must also carry an inbound link to each entry so the relocated prose stays reachable (`check_references`)."
77
+ }
78
+ }
79
+ },
58
80
  "tier": {
59
81
  "type": "string",
60
82
  "enum": ["1", "2a", "2b", "3", "safety-floor", "mechanical-already", "kernel", "tier-1", "tier-2"],
@@ -150,9 +172,9 @@
150
172
  "uniqueItems": true,
151
173
  "items": {
152
174
  "type": "string",
153
- "pattern": "^(hook:[a-z0-9_-]+|validator:[A-Za-z0-9_./-]+|test:[A-Za-z0-9_./-]+|observer:[a-z0-9 _-]+|none)$"
175
+ "pattern": "^(hook:[a-z0-9_-]+|validator:[A-Za-z0-9_./-]+|test:[A-Za-z0-9_./-]+|observer:[a-z0-9 _-]+|instruction-only: *[^ ].*|none)$"
154
176
  },
155
- "description": "What mechanically enforces this rule. `validator:<script>` and `test:<path>` must resolve on disk AND be wired into a taskfile, workflow, or the hook manifest — a script that exists but runs nowhere resolves to unwired, not covered. `hook:<name>` must be registered in hook_manifest.yaml with fail_closed: true; a hook that never blocks is `observer:`, not `validator:`. `none` is legal and counted — an honest gap beats a false claim. Resolved, not trusted, by check_enforcement_coverage.ts."
177
+ "description": "What mechanically enforces this rule. `validator:<script>` and `test:<path>` must resolve on disk AND be wired into a taskfile, workflow, or the hook manifest — a script that exists but runs nowhere resolves to unwired, not covered. `hook:<name>` must be registered in hook_manifest.yaml with fail_closed: true; a hook that never blocks is `observer:`, not `validator:`. `instruction-only: <reason>` declares an honestly model-carried obligation and is counted as a recorded gap — the reason is MANDATORY in the pattern, because a bare marker is a claim with no triage record behind it and resolves to `missing`, which the --check ratchet reds on. The bare `none` spelling it replaces stays legal for exactly one reason: `non-destructive-by-default` still carries it and is a kernel rule that block_kernel_rule_writes denies agent writes to, so retiring the value outright would make a CI-green tree unreachable for any agent. Resolved, not trusted, by check_enforcement_coverage.ts."
156
178
  },
157
179
  "obligation_frequency": {
158
180
  "type": "string",
@@ -25,8 +25,8 @@
25
25
  "description": {
26
26
  "type": "string",
27
27
  "minLength": 1,
28
- "maxLength": 220,
29
- "description": "Trigger phrase; ≤ 200 chars recommended, 220 is the ceiling (lean-initial-context: descriptions load eagerly via progressive disclosure). Over-cap is a soft warning, not a hard fail — a warning window so authors adapt."
28
+ "maxLength": 200,
29
+ "description": "Trigger phrase; the ceiling is 200 chars, measured. Lowered from 220 on 2026-08-22 because 220 described no artefact that existed: across all 290 skills the distribution was median 181 / p75 189 / max 200, with ZERO over 200, so the 20 chars above the recommended line were dead headroom a future author could fill with no gate objecting. p75 = 189 is the recorded soft target; 200 is the hard line. Descriptions load eagerly via progressive disclosure, so every char here is standing cost on every spawn."
30
30
  },
31
31
  "compatibility": {
32
32
  "type": "string",
@@ -287,6 +287,45 @@
287
287
  }
288
288
  }
289
289
  },
290
+ "scope": {
291
+ "type": "object",
292
+ "additionalProperties": false,
293
+ "description": "OPTIONAL write-scope declaration. Measured 2026-08-23: 0 of 292 SKILL.md files said WHERE a skill may write — `execution:` carries type / handler / timeout_seconds / allowed_tools and `trust:` carries level / removable / default, and none of them answers that question. This is a DECLARATION and a census, not a runtime control: nothing observes a skill's writes, `skill_linter` validates the SHAPE only, and absence stays legal. Saying so is the point — an optional field described as if it constrained anything would be exactly the coverage inflation this repository's enforcement doctrine forbids. Derive it, never guess it: for `handler: shell` the `command:` array names the script whose writes ARE the scope; for `handler: internal` and for a bare `type: manual` the skill executes nothing itself, so an empty `write` list plus a `verification_reason` is the accurate declaration rather than a placeholder.",
294
+ "properties": {
295
+ "read": {
296
+ "type": "array",
297
+ "items": {"type": "string"},
298
+ "description": "Repo-relative globs the skill reads. Optional — omit rather than guess; an invented read set is worse than an absent one."
299
+ },
300
+ "write": {
301
+ "type": "array",
302
+ "description": "Write paths this skill's OWN execution touches. An empty list is a real statement — \"this skill declares no write path of its own\" — and is falsified by any write its execution performs.",
303
+ "items": {
304
+ "type": "object",
305
+ "additionalProperties": false,
306
+ "required": ["pattern", "access"],
307
+ "properties": {
308
+ "pattern": {"type": "string", "minLength": 1, "description": "Repo-relative glob the skill may write."},
309
+ "access": {
310
+ "type": "string",
311
+ "enum": ["create", "write", "append", "delete"],
312
+ "description": "Closed enum. `create` = new paths only · `write` = create or overwrite · `append` = never rewrites existing bytes · `delete` = removes paths. A value outside the enum is a skill_linter error."
313
+ }
314
+ }
315
+ }
316
+ },
317
+ "verification_command": {
318
+ "type": "string",
319
+ "minLength": 1,
320
+ "description": "The command that proves the declared scope is what the skill actually touches. Exactly one of `verification_command` / `verification_reason` is present when `scope:` is — enforced by skill_linter's `scope_verification` check, not by this schema, because JSON Schema cannot express \"exactly one of these two optional siblings\" in a form this repo's frontmatter validator implements."
321
+ },
322
+ "verification_reason": {
323
+ "type": "string",
324
+ "minLength": 1,
325
+ "description": "An HONEST NULL at declaration level: why no command can prove this scope. The pair is deliberately TWO sibling keys rather than a nested `verification: {command|reason}` map, and the reason is measured rather than stylistic: this repo's frontmatter parser reads map -> list -> map (that is how `triggers[].keyword` works) but flattens map -> map -> scalar, so a nested `verification.reason` parses as `scope.verification = \"\"` plus a stray `scope.reason` and the schema then rejects a correctly-written declaration. A field the parser cannot read is a field nothing validates."
326
+ }
327
+ }
328
+ },
290
329
  "triggers": {
291
330
  "type": "array",
292
331
  "minItems": 1,
@@ -0,0 +1,114 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://event4u.dev/schemas/ui-authority.schema.json",
4
+ "title": "ui_authority",
5
+ "description": "The ONE authority object for a UI surface. Produced once before design and read by every UI phase and by the stop gate. Contract: docs/contracts/ui-authority.md. There is deliberately no second partial decision table anywhere in src/skills/ — A1.1's verify line asserts that.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "surface_mode",
10
+ "register",
11
+ "change_intent",
12
+ "reference_maturity",
13
+ "primary_source",
14
+ "constraints",
15
+ "conflicts",
16
+ "provenance",
17
+ "verification"
18
+ ],
19
+ "properties": {
20
+ "surface_mode": {
21
+ "description": "What the surface is FOR. Per-surface, never inherited from PRODUCT.md.",
22
+ "enum": ["persuade", "operate", "read", "experience"]
23
+ },
24
+ "register": {
25
+ "description": "The design register, unchanged from docs/guidelines/design-modes.md.",
26
+ "enum": ["brand", "product"]
27
+ },
28
+ "change_intent": {
29
+ "description": "What the run is authorised to move. `preserve` is the strongest constraint and drives the intent-aware stop gate.",
30
+ "enum": ["preserve", "extend", "redesign", "new-world"]
31
+ },
32
+ "reference_maturity": {
33
+ "description": "How finished the supplied reference is. `wireframe` declares STRUCTURE and never a pixel mandate. `null` means no reference was supplied.",
34
+ "enum": [
35
+ "wireframe",
36
+ "prototype",
37
+ "finished-comp",
38
+ "runnable-artifact",
39
+ "production-incumbent",
40
+ null
41
+ ]
42
+ },
43
+ "fidelity_mandate": {
44
+ "description": "Carried from road-to-frontend-fidelity-calibration Phase 0. NOT re-derived here — this field holds that phase's output, and null means that phase has not produced one.",
45
+ "type": ["string", "null"]
46
+ },
47
+ "primary_source": {
48
+ "type": "object",
49
+ "additionalProperties": false,
50
+ "required": ["kind"],
51
+ "properties": {
52
+ "kind": {
53
+ "description": "Which authority the run builds from. `incumbent` is the answer when no DESIGN.md exists but a coherent incumbent does.",
54
+ "enum": ["user-instruction", "artifact", "comp", "design-system", "incumbent", "brief", "none"]
55
+ },
56
+ "path": { "type": ["string", "null"] }
57
+ }
58
+ },
59
+ "constraints": {
60
+ "type": "object",
61
+ "additionalProperties": false,
62
+ "properties": {
63
+ "preserve_palette": { "type": "boolean" },
64
+ "preserve_type_family": { "type": "boolean" },
65
+ "preserve_layout": { "type": "boolean" },
66
+ "preserve_copy": { "type": "boolean" }
67
+ }
68
+ },
69
+ "conflicts": {
70
+ "description": "Surfaced disagreements. A conflict is REPORTED, never silently resolved — an operation whose declared dimensions collide with a constraint appends here and performs no write.",
71
+ "type": "array",
72
+ "items": {
73
+ "type": "object",
74
+ "additionalProperties": false,
75
+ "required": ["dimension", "wanted", "blocked_by"],
76
+ "properties": {
77
+ "dimension": { "type": "string" },
78
+ "wanted": { "type": "string" },
79
+ "blocked_by": { "type": "string" }
80
+ }
81
+ }
82
+ },
83
+ "provenance": {
84
+ "description": "Where each resolved value came from. One entry per resolved field, so a wrong resolution is traceable to its signal rather than to the resolver as a whole.",
85
+ "type": "array",
86
+ "items": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["field", "source"],
90
+ "properties": {
91
+ "field": { "type": "string" },
92
+ "source": {
93
+ "enum": ["user-instruction", "surface-brief", "design-md", "product-md", "incumbent-scan", "reference-artifact", "default"]
94
+ },
95
+ "detail": { "type": ["string", "null"] }
96
+ }
97
+ }
98
+ },
99
+ "verification": {
100
+ "description": "Graft 2 of the parent roadmap. A pass that could not fully run says so rather than passing silently.",
101
+ "enum": ["verified", "degraded", "unverified"]
102
+ },
103
+ "degradation_reason": {
104
+ "description": "Required whenever `verification` is not `verified`. The resolver refuses to emit a degraded object without one.",
105
+ "type": ["string", "null"]
106
+ }
107
+ },
108
+ "allOf": [
109
+ {
110
+ "if": { "properties": { "verification": { "enum": ["degraded", "unverified"] } }, "required": ["verification"] },
111
+ "then": { "properties": { "degradation_reason": { "type": "string", "minLength": 1 } }, "required": ["degradation_reason"] }
112
+ }
113
+ ]
114
+ }
@@ -209,6 +209,8 @@ export interface RoadmapClaim {
209
209
  slug: string;
210
210
  written_at?: string;
211
211
  session_id?: string | null;
212
+ /** Repo-relative paths the claiming session declared it owns. */
213
+ paths?: string[];
212
214
  }
213
215
 
214
216
  function _is_replay_mode(): boolean {
@@ -227,9 +229,14 @@ function _read_claim_file(file: string): RoadmapClaim | null {
227
229
  return null;
228
230
  }
229
231
  const sid = rec['session_id'];
232
+ const raw_paths = rec['paths'];
233
+ const paths = Array.isArray(raw_paths)
234
+ ? raw_paths.filter((x): x is string => typeof x === 'string' && x.trim() !== '')
235
+ : [];
230
236
  return {
231
237
  slug: slug.trim(),
232
238
  ...(typeof sid === 'string' && sid.trim() !== '' ? { session_id: sid.trim() } : {}),
239
+ ...(paths.length > 0 ? { paths } : {}),
233
240
  };
234
241
  } catch {
235
242
  return null;
@@ -249,6 +256,8 @@ export interface ResolvedClaim {
249
256
  slug: string;
250
257
  /** Absolute path of the claim file this read came from. */
251
258
  path: string;
259
+ /** Repo-relative paths the claim declared, or absent when it declared none. */
260
+ paths?: string[];
252
261
  }
253
262
 
254
263
  /**
@@ -278,7 +287,13 @@ export function resolve_claim(
278
287
  for (const p of claim_read_paths(workspace_root, session_id)) {
279
288
  if (path.basename(p) === path.basename(ROADMAP_CLAIM_REL)) continue;
280
289
  const mine = _read_claim_file(p);
281
- if (mine !== null) return { slug: mine.slug, path: p };
290
+ if (mine !== null) {
291
+ return {
292
+ slug: mine.slug,
293
+ path: p,
294
+ ...(mine.paths !== undefined ? { paths: mine.paths } : {}),
295
+ };
296
+ }
282
297
  }
283
298
  }
284
299
  // The legacy per-WORKTREE file, in the same two locations. Unchanged in
@@ -313,7 +328,11 @@ export function resolve_claim(
313
328
  if (id !== '') {
314
329
  return null;
315
330
  }
316
- return { slug: legacy.slug, path: legacy_path };
331
+ return {
332
+ slug: legacy.slug,
333
+ path: legacy_path,
334
+ ...(legacy.paths !== undefined ? { paths: legacy.paths } : {}),
335
+ };
317
336
  }
318
337
 
319
338
  /**
@@ -530,12 +549,13 @@ export function build_record(
530
549
  started_at: string,
531
550
  now: Date = new Date(),
532
551
  ): SessionRecord {
552
+ const claim = resolve_claim(workspace_root, session_id);
533
553
  const rec: SessionRecord = {
534
554
  session_id,
535
555
  platform,
536
556
  worktree: workspace_root,
537
557
  branch: current_branch(workspace_root),
538
- roadmap_slug: read_claimed_slug(workspace_root, session_id),
558
+ roadmap_slug: claim?.slug ?? null,
539
559
  started_at,
540
560
  last_seen: iso_now(now),
541
561
  };
@@ -552,6 +572,12 @@ export function build_record(
552
572
  }
553
573
  if (Object.keys(nonZero).length > 0) rec.turn_end_refusals = nonZero;
554
574
  }
575
+ // road-to-roadmap-situational-awareness § 3.1 — the path axis, on exactly the
576
+ // terms above: only ever ADDS a field, so a session that declared no paths
577
+ // writes the record it wrote before this existed, byte for byte.
578
+ if (claim?.paths !== undefined && claim.paths.length > 0) {
579
+ rec.owned_paths = [...claim.paths].sort();
580
+ }
555
581
  return rec;
556
582
  }
557
583