@event4u/agent-config 14.10.0 โ†’ 14.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +161 -208
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/design.md +88 -0
  7. package/dist/agent-src/commands/project/analyze.md +47 -0
  8. package/dist/agent-src/commands/review/changes.md +67 -6
  9. package/dist/agent-src/commands/roadmap/create.md +49 -0
  10. package/dist/agent-src/commands/roadmap/next.md +27 -11
  11. package/dist/agent-src/commands/roadmap/process-full.md +14 -0
  12. package/dist/agent-src/commands/video/from-script.md +60 -3
  13. package/dist/agent-src/commands/video/stitch.md +14 -0
  14. package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
  15. package/dist/agent-src/contexts/execution/evidence-discipline.md +26 -0
  16. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
  17. package/dist/agent-src/rules/active-remediation.md +3 -3
  18. package/dist/agent-src/rules/code-provenance.md +2 -2
  19. package/dist/agent-src/rules/context-hygiene.md +13 -33
  20. package/dist/agent-src/rules/council-availability.md +2 -2
  21. package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
  22. package/dist/agent-src/rules/design-fidelity.md +18 -0
  23. package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
  24. package/dist/agent-src/rules/evaluator-independence.md +56 -44
  25. package/dist/agent-src/rules/fix-what-you-see.md +9 -1
  26. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  27. package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
  28. package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
  29. package/dist/agent-src/rules/playbook-precedence.md +105 -0
  30. package/dist/agent-src/rules/recurring-criticism.md +3 -1
  31. package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
  32. package/dist/agent-src/rules/scale-discipline.md +24 -0
  33. package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
  34. package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
  35. package/dist/agent-src/rules/ui-audit-gate.md +27 -15
  36. package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
  37. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
  38. package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
  39. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
  40. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
  41. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
  42. package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
  43. package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -0
  44. package/dist/agent-src/skills/authz-review/SKILL.md +0 -1
  45. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
  46. package/dist/agent-src/skills/brand/SKILL.md +3 -0
  47. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
  48. package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
  49. package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
  50. package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
  51. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
  52. package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
  53. package/dist/agent-src/skills/code-refactoring/SKILL.md +45 -1
  54. package/dist/agent-src/skills/code-review/SKILL.md +75 -5
  55. package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
  56. package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
  57. package/dist/agent-src/skills/condense-memory/SKILL.md +3 -0
  58. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  59. package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +3 -0
  60. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
  61. package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
  62. package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
  63. package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
  64. package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
  65. package/dist/agent-src/skills/design-review/SKILL.md +79 -1
  66. package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
  67. package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
  68. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
  69. package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
  70. package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
  71. package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
  72. package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
  73. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +28 -4
  74. package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
  75. package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
  76. package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
  77. package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
  78. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  79. package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
  80. package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
  81. package/dist/agent-src/skills/iconography/SKILL.md +3 -0
  82. package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
  83. package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
  84. package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
  85. package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
  86. package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
  87. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
  88. package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
  89. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
  90. package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
  91. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
  92. package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
  93. package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
  94. package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
  95. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
  96. package/dist/agent-src/skills/motion-choreographer/SKILL.md +6 -0
  97. package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
  98. package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
  99. package/dist/agent-src/skills/override-management/SKILL.md +3 -0
  100. package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
  101. package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
  102. package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
  103. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
  104. package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
  105. package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
  106. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
  107. package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
  108. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +81 -33
  109. package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
  110. package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
  111. package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
  112. package/dist/agent-src/skills/receiving-code-review/SKILL.md +2 -2
  113. package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
  114. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
  115. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  116. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  117. package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
  118. package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
  119. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
  120. package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
  121. package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
  122. package/dist/agent-src/skills/secrets-management/SKILL.md +4 -0
  123. package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
  124. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
  125. package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
  126. package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
  127. package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
  128. package/dist/agent-src/skills/skill-writing/references/procedure.md +24 -2
  129. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
  130. package/dist/agent-src/skills/storybook-workshop/SKILL.md +203 -0
  131. package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
  132. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  133. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
  134. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
  135. package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
  136. package/dist/agent-src/skills/terraform/SKILL.md +3 -0
  137. package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
  138. package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
  139. package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
  140. package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
  141. package/dist/agent-src/skills/ui-component-architect/SKILL.md +17 -1
  142. package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
  143. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
  144. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
  145. package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
  146. package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
  147. package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
  148. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  149. package/dist/agent-src/templates/playbook.md +75 -0
  150. package/dist/agent-src/templates/roadmaps.md +37 -0
  151. package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  152. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  153. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  154. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  155. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  156. package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  157. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  158. package/dist/cli/commands/uiAudit.js +221 -0
  159. package/dist/cli/commands/uiRender.js +206 -0
  160. package/dist/cli/main.js +22 -1
  161. package/dist/cli/mcp/content.js +64 -1
  162. package/dist/cli/mcp/dispatch.js +175 -10
  163. package/dist/cli/registry.js +3 -0
  164. package/dist/cli-delegate/{chunk-G23AT6GD.js โ†’ chunk-DMSZHXZS.js} +57 -1
  165. package/dist/cli-delegate/{chunk-77GR3VD4.js โ†’ chunk-FF7WAFMR.js} +58 -3
  166. package/dist/cli-delegate/{chunk-YM4GZDJG.js โ†’ chunk-JCW7ZLHK.js} +10 -0
  167. package/dist/cli-delegate/{chunk-H4VIVD4C.js โ†’ chunk-JJA2QEWA.js} +413 -391
  168. package/dist/cli-delegate/{chunk-PLSG6UL5.js โ†’ chunk-K4FFODTS.js} +341 -204
  169. package/dist/cli-delegate/{chunk-B2ERU2VA.js โ†’ chunk-WOKWX5PL.js} +1 -1
  170. package/dist/cli-delegate/cmd_brand_status.js +8 -6
  171. package/dist/cli-delegate/cmd_conformance.js +3 -3
  172. package/dist/cli-delegate/cmd_doctor.js +3 -3
  173. package/dist/cli-delegate/cmd_export.js +4 -4
  174. package/dist/cli-delegate/cmd_handoff.js +1 -1
  175. package/dist/cli-delegate/cmd_preflight.js +2 -2
  176. package/dist/cli-delegate/cmd_prune.js +4 -4
  177. package/dist/cli-delegate/cmd_session_recycle.js +70 -9
  178. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  179. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  180. package/dist/cli-delegate/cmd_sync.js +4 -4
  181. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  182. package/dist/cli-delegate/cmd_validate.js +4 -4
  183. package/dist/discovery/deprecation-report.md +1 -1
  184. package/dist/discovery/discovery-manifest.json +362 -127
  185. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  186. package/dist/discovery/discovery-manifest.summary.md +4 -4
  187. package/dist/discovery/dormancy-report.md +1 -1
  188. package/dist/discovery/orphan-report.md +1 -1
  189. package/dist/discovery/packs.json +18 -8
  190. package/dist/discovery/trust-report.md +3 -3
  191. package/dist/discovery/workspaces.json +16 -6
  192. package/dist/hooks/dispatch.js +2575 -1472
  193. package/dist/install/install.mjs +800 -708
  194. package/dist/mcp/registry-manifest.json +3 -3
  195. package/dist/mcp/server.json +2 -2
  196. package/dist/mcp/server.mjs +1685 -1250
  197. package/dist/router.json +1 -1
  198. package/dist/scripts/_lib/lean_projection_mode.js +40 -0
  199. package/dist/scripts/_lib/scoped_projection.js +84 -0
  200. package/dist/scripts/_lib/ui_surface.js +89 -0
  201. package/dist/scripts/condense.js +6 -10
  202. package/dist/scripts/project_thin_rules.js +40 -2
  203. package/dist/server/schemas/settings.js +6 -0
  204. package/dist/shared/skillRanking.js +159 -0
  205. package/docs/contracts/provider-lifecycle.md +47 -18
  206. package/docs/contracts/settings-classes.md +35 -5
  207. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
  208. package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
  209. package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  210. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
  211. package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  212. package/docs/guidelines/code-clarity.md +21 -0
  213. package/docs/guidelines/design-antipatterns.md +4 -2
  214. package/docs/guidelines/design-asset-discipline.md +38 -0
  215. package/docs/guidelines/design-fidelity-mechanics.md +45 -29
  216. package/docs/guidelines/design-handover-extraction.md +35 -5
  217. package/docs/guidelines/design-modes.md +41 -1
  218. package/docs/guidelines/monorepo-antipatterns.md +141 -0
  219. package/docs/guidelines/redundancy-taxonomy.md +180 -0
  220. package/llms.txt +50 -39
  221. package/package.json +6 -2
  222. package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  223. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  224. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  225. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  226. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  227. package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  228. package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  229. package/src/config/agent-settings.template.yml +44 -0
  230. package/src/config/assurance-capability-registry.json +223 -0
  231. package/src/config/assurance-threshold-budget.json +65 -0
  232. package/src/config/budgets.yml +19 -0
  233. package/src/config/ci-local-parity.yml +29 -0
  234. package/src/config/discovery/prompt-patterns.yml +56 -0
  235. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  236. package/src/config/dispatch-economy-metrics.json +4 -2
  237. package/src/config/estate-count-budget.json +8 -3
  238. package/src/config/evaluator-budgets.json +14 -14
  239. package/src/config/gate-coverage.yml +392 -8
  240. package/src/config/gate-violation-baselines.json +76 -72
  241. package/src/config/hook-latency-budget.json +1 -0
  242. package/src/config/hook-token-budget.json +137 -125
  243. package/src/config/pack-size-budget.json +39 -10
  244. package/src/config/preamble-payload-budget.json +97 -71
  245. package/src/config/quorum-attendance-budget.json +12 -4
  246. package/src/config/routing-coverage-seed.json +29 -0
  247. package/src/config/rule-activation-census.json +7 -3
  248. package/src/config/rule-enforcement-baseline.json +0 -1
  249. package/src/config/rule-stub-ceilings.json +112 -91
  250. package/src/config/suggestion-capture.json +28 -0
  251. package/src/config/surface-matrix.yml +21 -2
  252. package/src/config/web-launch-readiness.json +188 -0
  253. package/src/scripts/_cli/cmd_doctor.ts +15 -16
  254. package/src/scripts/_cli/doctor_install_mode.ts +49 -0
  255. package/src/scripts/_cli/doctor_overrides.ts +154 -0
  256. package/src/scripts/_dispatch.bash +17 -0
  257. package/src/scripts/_lib/as_of.ts +412 -0
  258. package/src/scripts/_lib/exec_evidence.ts +7 -0
  259. package/src/scripts/_lib/gate_baseline.ts +150 -1
  260. package/src/scripts/_lib/hook_settings.ts +33 -0
  261. package/src/scripts/_lib/host_listing_model.ts +192 -0
  262. package/src/scripts/_lib/lean_projection_mode.ts +44 -0
  263. package/src/scripts/_lib/mcp_bridge.ts +199 -0
  264. package/src/scripts/_lib/review_independence.ts +62 -10
  265. package/src/scripts/_lib/rule_injection.ts +239 -0
  266. package/src/scripts/_lib/run_checkpoint.ts +54 -1
  267. package/src/scripts/_lib/scoped_projection.ts +96 -0
  268. package/src/scripts/_lib/session_register.ts +44 -2
  269. package/src/scripts/_lib/skill_catalogue.ts +38 -2
  270. package/src/scripts/_lib/skill_estate.ts +115 -0
  271. package/src/scripts/_lib/transcript_reads.ts +207 -0
  272. package/src/scripts/_lib/ui_authority.ts +343 -0
  273. package/src/scripts/ai-video/adapters/fal.sh +8 -3
  274. package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
  275. package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
  276. package/src/scripts/ai-video/adapters/kling.sh +10 -0
  277. package/src/scripts/ai-video/adapters/sora.sh +10 -0
  278. package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
  279. package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
  280. package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
  281. package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
  282. package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
  283. package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
  284. package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
  285. package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
  286. package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
  287. package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
  288. package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
  289. package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
  290. package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
  291. package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
  292. package/src/scripts/ai-video/smoke-trace.sh +450 -2
  293. package/src/scripts/ai-video/stitch.sh +191 -10
  294. package/src/scripts/ai-video/test-pipeline.sh +84 -6
  295. package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
  296. package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
  297. package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
  298. package/src/scripts/ai_council/clients.ts +3 -2
  299. package/src/scripts/ai_council/consensus.ts +63 -6
  300. package/src/scripts/ai_council/events_log.ts +46 -1
  301. package/src/scripts/ai_council/orchestrator.ts +103 -108
  302. package/src/scripts/ai_council/orchestrator_results.ts +166 -0
  303. package/src/scripts/ai_council/prompts.ts +12 -5
  304. package/src/scripts/ai_council/quorum.ts +82 -1
  305. package/src/scripts/ai_council/quorum_wiring.ts +82 -5
  306. package/src/scripts/ai_council/stance_tally.ts +22 -0
  307. package/src/scripts/bench_hook_latency.ts +62 -0
  308. package/src/scripts/build_proof.ts +12 -1
  309. package/src/scripts/capture_skill_catalogue.ts +21 -0
  310. package/src/scripts/check_always_budget.ts +2 -1
  311. package/src/scripts/check_augmentignore.ts +2 -1
  312. package/src/scripts/check_beta_review_markers.ts +2 -1
  313. package/src/scripts/check_bundle_path_leakage.ts +162 -7
  314. package/src/scripts/check_command_examples.ts +557 -0
  315. package/src/scripts/check_composite_arming.ts +364 -0
  316. package/src/scripts/check_corpus_staleness.ts +2 -1
  317. package/src/scripts/check_council_pin_staleness.ts +3 -1
  318. package/src/scripts/check_enforcement_coverage.ts +116 -3
  319. package/src/scripts/check_enforcement_denominator.ts +365 -0
  320. package/src/scripts/check_estate_count.ts +122 -3
  321. package/src/scripts/check_gate_coverage.ts +2 -1
  322. package/src/scripts/check_hook_bundle_freshness.ts +13 -1
  323. package/src/scripts/check_knowledge_cards.ts +2 -1
  324. package/src/scripts/check_knowledge_pages.ts +3 -2
  325. package/src/scripts/check_memory.ts +2 -1
  326. package/src/scripts/check_no_automerge_key.ts +287 -0
  327. package/src/scripts/check_pack_conformance_fixture.ts +565 -0
  328. package/src/scripts/check_preamble_payload_budget.ts +30 -3
  329. package/src/scripts/check_proposal.ts +2 -1
  330. package/src/scripts/check_reach_staleness.ts +2 -1
  331. package/src/scripts/check_release_adjacent_health.ts +2 -1
  332. package/src/scripts/check_release_pr_shape.ts +5 -0
  333. package/src/scripts/check_review_schema.ts +34 -1
  334. package/src/scripts/check_roadmap_trackable.ts +48 -3
  335. package/src/scripts/check_routing_coverage.ts +352 -0
  336. package/src/scripts/check_score_contract.ts +505 -0
  337. package/src/scripts/check_skill_admissions.ts +514 -0
  338. package/src/scripts/check_source_size_budget.ts +2 -1
  339. package/src/scripts/check_standing_payload_delta.ts +505 -0
  340. package/src/scripts/check_trigger_evals.ts +2 -1
  341. package/src/scripts/check_web_launch_readiness.ts +705 -0
  342. package/src/scripts/classify_change_risk.ts +281 -0
  343. package/src/scripts/compute_skill_tiers.ts +186 -0
  344. package/src/scripts/condense.ts +8 -13
  345. package/src/scripts/council_attendance_metrics.ts +183 -0
  346. package/src/scripts/council_cli.ts +10 -8
  347. package/src/scripts/council_parse_rate.ts +116 -0
  348. package/src/scripts/derive_playbooks.ts +406 -0
  349. package/src/scripts/description_route_check.ts +494 -0
  350. package/src/scripts/design_slop_rules.ts +56 -2
  351. package/src/scripts/dispatch_r2_reviewer.ts +16 -0
  352. package/src/scripts/frontend_corpus_hash.ts +116 -0
  353. package/src/scripts/grade_target_readiness.ts +478 -0
  354. package/src/scripts/hook_manifest.json +1 -1
  355. package/src/scripts/hook_manifest.yaml +124 -16
  356. package/src/scripts/hooks/concern_registry.ts +6 -0
  357. package/src/scripts/hooks/design_pass_hook.ts +356 -0
  358. package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
  359. package/src/scripts/hooks/rule_inject_hook.ts +318 -0
  360. package/src/scripts/hooks/suggestion_capture_hook.ts +368 -0
  361. package/src/scripts/hot_context_hook.ts +74 -7
  362. package/src/scripts/install.ts +40 -89
  363. package/src/scripts/lint_adapter_tier.ts +663 -0
  364. package/src/scripts/lint_archived_skills.ts +93 -0
  365. package/src/scripts/lint_budget_ownership.ts +56 -5
  366. package/src/scripts/lint_deterministic_time.ts +470 -0
  367. package/src/scripts/lint_framework_leakage.ts +5 -0
  368. package/src/scripts/lint_handoffs.ts +525 -1
  369. package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
  370. package/src/scripts/lint_marketplace.ts +88 -0
  371. package/src/scripts/lint_media_policy_linkage.ts +140 -1
  372. package/src/scripts/lint_one_off_age.ts +6 -1
  373. package/src/scripts/lint_override_kernel_guard.ts +87 -5
  374. package/src/scripts/lint_roadmap_complexity.ts +56 -0
  375. package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
  376. package/src/scripts/lint_rule_norm_pin.ts +321 -0
  377. package/src/scripts/lint_skill_trigger_corpus.ts +349 -0
  378. package/src/scripts/lint_spawn_payload.ts +42 -5
  379. package/src/scripts/lint_symptom_intake.ts +2 -1
  380. package/src/scripts/mcp_parity_smoke.ts +30 -4
  381. package/src/scripts/mcp_render.ts +66 -1
  382. package/src/scripts/mcp_tool_fingerprint.ts +241 -0
  383. package/src/scripts/measure_risk_class_drift.ts +140 -0
  384. package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
  385. package/src/scripts/media/lib/adapter-common.sh +211 -1
  386. package/src/scripts/media/lib/adapter-contract.md +74 -6
  387. package/src/scripts/model_rule_injection.ts +907 -0
  388. package/src/scripts/pack_install_smoke.ts +363 -0
  389. package/src/scripts/pr_conflict_census.ts +187 -0
  390. package/src/scripts/project_thin_rules.ts +45 -2
  391. package/src/scripts/release.ts +66 -860
  392. package/src/scripts/release_drill.ts +59 -3
  393. package/src/scripts/release_env.ts +298 -0
  394. package/src/scripts/release_publication.ts +720 -0
  395. package/src/scripts/report_pack_delta.ts +204 -0
  396. package/src/scripts/roadmap_context.ts +778 -0
  397. package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
  398. package/src/scripts/schemas/rule.schema.json +24 -2
  399. package/src/scripts/schemas/skill.schema.json +39 -0
  400. package/src/scripts/schemas/ui-authority.schema.json +114 -0
  401. package/src/scripts/select_analysis_mode.ts +112 -0
  402. package/src/scripts/session_register_hook.ts +29 -3
  403. package/src/scripts/sessions_cli.ts +67 -3
  404. package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
  405. package/src/scripts/sync_pr_branch.ts +40 -1
  406. package/src/scripts/token_sink_report.ts +239 -0
  407. package/src/scripts/trigger_coverage.ts +122 -3
  408. package/src/scripts/update_counts.ts +7 -3
  409. package/src/scripts/validate_frontmatter.ts +66 -0
  410. package/src/server/schemas/settings.ts +10 -0
  411. package/src/shared/skillRanking.ts +183 -0
  412. package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
  413. package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
  414. package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
  415. package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
  416. package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
  417. package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
  418. package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
  419. package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
  420. package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
  421. package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
  422. package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
  423. package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
  424. package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
  425. package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
  426. package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
  427. package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
  428. package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
  429. package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
  430. package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
  431. package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
  432. package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
  433. package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
  434. package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
  435. package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
  436. package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
  437. package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
  438. package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
  439. package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
  440. package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
  441. package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
  442. package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
  443. package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
  444. package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
  445. package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
  446. package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
  447. package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
  448. package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
  449. package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
  450. package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
  451. package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
  452. package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
  453. package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
  454. package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
  455. package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
  456. package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
  457. package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -55
  458. package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
  459. package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
  460. package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
  461. package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
  462. package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
  463. package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
  464. package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
  465. package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
  466. package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
  467. package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
  468. package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
  469. package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
  470. package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
  471. package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
  472. package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
  473. package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
  474. package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
  475. package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
  476. package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
  477. package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
  478. package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
  479. package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
  480. package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
  481. package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
  482. package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
  483. package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
  484. package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
  485. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
  486. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
  487. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
  488. package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
  489. package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
  490. package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
  491. package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
  492. package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
  493. package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
  494. package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
  495. package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
  496. package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
  497. package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
  498. package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
  499. package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
  500. package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
  501. package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
  502. package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
  503. package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
  504. package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
  505. package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
  506. package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
  507. package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
  508. package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
  509. package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
  510. package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
  511. package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
  512. package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
  513. package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
  514. package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
  515. package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
  516. package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
  517. package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
  518. package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
  519. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
  520. package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
  521. package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
  522. package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
  523. package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
  524. package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
  525. package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
  526. package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
  527. package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
  528. package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
  529. package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
  530. package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
  531. package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
  532. package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
  533. package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
  534. package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
  535. package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
  536. package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
  537. package/dist/cli/agent-config.js.map +0 -1
  538. package/dist/cli/bash/runBash.js.map +0 -1
  539. package/dist/cli/commands/commands.js.map +0 -1
  540. package/dist/cli/commands/config.js.map +0 -1
  541. package/dist/cli/commands/doctorShell.js.map +0 -1
  542. package/dist/cli/commands/mcpServer.js.map +0 -1
  543. package/dist/cli/commands/packs.js.map +0 -1
  544. package/dist/cli/commands/profiles.js.map +0 -1
  545. package/dist/cli/commands/recordTriggerEval.js.map +0 -1
  546. package/dist/cli/commands/rtkDetect.js.map +0 -1
  547. package/dist/cli/commands/settings.js.map +0 -1
  548. package/dist/cli/commands/uiServe.js.map +0 -1
  549. package/dist/cli/commands/versions.js.map +0 -1
  550. package/dist/cli/commands/workspaces.js.map +0 -1
  551. package/dist/cli/configRoot.js.map +0 -1
  552. package/dist/cli/discovery/loadManifest.js.map +0 -1
  553. package/dist/cli/firstRunNotice.js.map +0 -1
  554. package/dist/cli/help.js.map +0 -1
  555. package/dist/cli/initRouting.js.map +0 -1
  556. package/dist/cli/log/logger.js.map +0 -1
  557. package/dist/cli/main.js.map +0 -1
  558. package/dist/cli/mcp/content.js.map +0 -1
  559. package/dist/cli/mcp/dispatch.js.map +0 -1
  560. package/dist/cli/mcp/stdio.js.map +0 -1
  561. package/dist/cli/paths.js.map +0 -1
  562. package/dist/cli/python/knowledge_ingest.js.map +0 -1
  563. package/dist/cli/python/workspace_analytics.js.map +0 -1
  564. package/dist/cli/python/workspace_crypto.js.map +0 -1
  565. package/dist/cli/python/workspace_documents.js.map +0 -1
  566. package/dist/cli/python/workspace_drive.js.map +0 -1
  567. package/dist/cli/python/workspace_drive_health.js.map +0 -1
  568. package/dist/cli/python/workspace_explain.js.map +0 -1
  569. package/dist/cli/python/workspace_hosts.js.map +0 -1
  570. package/dist/cli/python/workspace_inbox.js.map +0 -1
  571. package/dist/cli/python/workspace_render.js.map +0 -1
  572. package/dist/cli/python/workspace_roles.js.map +0 -1
  573. package/dist/cli/python/workspace_secrets.js.map +0 -1
  574. package/dist/cli/python/workspace_sessions.js.map +0 -1
  575. package/dist/cli/python/workspace_skills.js.map +0 -1
  576. package/dist/cli/registry.js.map +0 -1
  577. package/dist/install/agentSwitchDetection.js.map +0 -1
  578. package/dist/install/agentSwitchProfile.js.map +0 -1
  579. package/dist/install/atomic.js.map +0 -1
  580. package/dist/install/claudePathsPlan.js.map +0 -1
  581. package/dist/install/conflict.js.map +0 -1
  582. package/dist/install/detect.js.map +0 -1
  583. package/dist/install/emit_host_rules_cli.js.map +0 -1
  584. package/dist/install/globalRuleLayers.js.map +0 -1
  585. package/dist/install/hostLayerFingerprint.js.map +0 -1
  586. package/dist/install/partitionEligibility.js.map +0 -1
  587. package/dist/install/paths.js.map +0 -1
  588. package/dist/install/plan.js.map +0 -1
  589. package/dist/install/preflight.js.map +0 -1
  590. package/dist/install/rtkDetection.js.map +0 -1
  591. package/dist/install/ruleInScope.js.map +0 -1
  592. package/dist/install/ruleLayerPartition.js.map +0 -1
  593. package/dist/install/rule_scope.js.map +0 -1
  594. package/dist/install/rule_scope_cli.js.map +0 -1
  595. package/dist/install/selectedTools.js.map +0 -1
  596. package/dist/install/toolDetection.js.map +0 -1
  597. package/dist/install/txlog.js.map +0 -1
  598. package/dist/install/types.js.map +0 -1
  599. package/dist/install/wizard-plan.js.map +0 -1
  600. package/dist/install/wizardDismissals.js.map +0 -1
  601. package/dist/scripts/_lib/agent_settings.js.map +0 -1
  602. package/dist/scripts/_lib/agent_src.js.map +0 -1
  603. package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
  604. package/dist/scripts/_lib/claude_plugin.js.map +0 -1
  605. package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
  606. package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
  607. package/dist/scripts/_lib/environment_detector.js.map +0 -1
  608. package/dist/scripts/_lib/host_launch.js.map +0 -1
  609. package/dist/scripts/_lib/install_layout.js.map +0 -1
  610. package/dist/scripts/_lib/installed_lock.js.map +0 -1
  611. package/dist/scripts/_lib/model_tier.js.map +0 -1
  612. package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
  613. package/dist/scripts/_lib/scoped_projection.js.map +0 -1
  614. package/dist/scripts/_lib/script_output.js.map +0 -1
  615. package/dist/scripts/_lib/spawn_env.js.map +0 -1
  616. package/dist/scripts/_lib/surface_tiers.js.map +0 -1
  617. package/dist/scripts/_lib/token_count.js.map +0 -1
  618. package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
  619. package/dist/scripts/_lib/user_global_paths.js.map +0 -1
  620. package/dist/scripts/ai_council/modes.js.map +0 -1
  621. package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
  622. package/dist/scripts/condense.js.map +0 -1
  623. package/dist/scripts/project_thin_rules.js.map +0 -1
  624. package/dist/server/app.js.map +0 -1
  625. package/dist/server/io/atomicMultiWrite.js.map +0 -1
  626. package/dist/server/io/atomicWrite.js.map +0 -1
  627. package/dist/server/io/sharedWriteCheck.js.map +0 -1
  628. package/dist/server/io/substituteTemplate.js.map +0 -1
  629. package/dist/server/io/yamlIO.js.map +0 -1
  630. package/dist/server/nicknameResolver.js.map +0 -1
  631. package/dist/server/port.js.map +0 -1
  632. package/dist/server/routes/discovery.js.map +0 -1
  633. package/dist/server/routes/install.js.map +0 -1
  634. package/dist/server/routes/ping.js.map +0 -1
  635. package/dist/server/routes/schema.js.map +0 -1
  636. package/dist/server/routes/settings.js.map +0 -1
  637. package/dist/server/routes/settingsChanges.js.map +0 -1
  638. package/dist/server/routes/userMd.js.map +0 -1
  639. package/dist/server/routes/wizard.js.map +0 -1
  640. package/dist/server/routes/workspace.js.map +0 -1
  641. package/dist/server/schemas/settings.js.map +0 -1
  642. package/dist/server/serverInfo.js.map +0 -1
  643. package/dist/server/token.js.map +0 -1
  644. package/dist/server/writeRoot.js.map +0 -1
  645. package/dist/shared/capabilities.js.map +0 -1
  646. package/dist/shared/interactiveContext.js.map +0 -1
  647. package/dist/shared/nicknamePrefill.js.map +0 -1
  648. package/dist/shared/settingsAsks.js.map +0 -1
  649. package/dist/shared/settingsCarveOut.js.map +0 -1
  650. package/dist/shared/settingsClasses.js.map +0 -1
  651. package/dist/shared/settingsConsent.js.map +0 -1
  652. package/dist/shared/settingsSurface.js.map +0 -1
  653. package/dist/shared/userMd/formAdapter.js.map +0 -1
  654. package/dist/shared/userMd/schema.js.map +0 -1
  655. package/dist/shared/userMd/utils.js.map +0 -1
  656. package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
  657. package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
  658. package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
  659. package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
  660. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
  661. package/src/scripts/_lib/secret_detector.test.ts +0 -108
  662. package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
  663. package/src/scripts/_lib/untrusted_content.test.ts +0 -175
  664. package/src/scripts/check_secret_leak.test.ts +0 -90
  665. package/src/scripts/design_slop_rules.test.ts +0 -239
  666. package/src/scripts/self_review_gate.test.ts +0 -296
  667. package/src/shared/capabilities.test.ts +0 -43
@@ -0,0 +1,192 @@
1
+ /**
2
+ * host_listing_model โ€” which skill DESCRIPTIONS survive the host's listing budget.
3
+ *
4
+ * WHY THIS EXISTS. This package projects ~290 skills and the host does not
5
+ * deliver ~290 descriptions. Until now that was learned one bare catalogue entry
6
+ * at a time, from a single first-party observation
7
+ * (`agents/evidence/analysis/skill-catalogue-description-delivery.md`, 2026-08-08:
8
+ * five of eight sampled entries arrived bare while all 414 carried a description
9
+ * on disk). The mechanism behind it is documented upstream and was modelled
10
+ * nowhere in this tree โ€” `grep -rn skillListingBudgetFraction src docs agents`
11
+ * returned zero hits before this file.
12
+ *
13
+ * THE MECHANISM, AS DOCUMENTED UPSTREAM (code.claude.com/docs/en/skills and
14
+ * anthropics/claude-code#64606, both read 2026-08-22). Claude Code lists every
15
+ * skill NAME, and keeps DESCRIPTIONS only up to a fraction of the context
16
+ * window โ€” 1% by default, โ‰ˆ8,000 characters on a 200k window โ€” filling by
17
+ * invocation frequency and capping each entry at 1,536 characters. The fraction
18
+ * is consumer-settable as `skillListingBudgetFraction`.
19
+ *
20
+ * WHAT THIS FILE IS AND IS NOT. It is a pure function over a catalogue and a set
21
+ * of numbers. It is NOT a measurement of the host: every input above is upstream
22
+ * PROSE, and three further behaviours the prose leaves open had to be chosen
23
+ * here. Each such choice is returned in `assumptions`, by id, with the reason โ€”
24
+ * so a caller that reports "skill X will arrive bare" can always say which part
25
+ * of that is documented and which part is this repo's guess. The single pinned
26
+ * observation disagrees with the model on two of eight entries, and
27
+ * `tests/scripts/host_listing_model.test.ts` asserts the disagreement rather
28
+ * than tuning it away.
29
+ *
30
+ * Pure โ€” no I/O, no clock, no process state.
31
+ */
32
+
33
+ /** One catalogue entry as the host is offered it. */
34
+ export interface CatalogueEntry {
35
+ /** Skill (or wrapped-command) name, as the host lists it. */
36
+ name: string;
37
+ /** Length of the `description:` frontmatter value, in characters. */
38
+ descriptionChars: number;
39
+ }
40
+
41
+ /** A behaviour this model had to pin down that upstream states as prose. */
42
+ export interface ModelAssumption {
43
+ id:
44
+ | 'budget-unit-is-chars'
45
+ | 'fill-order-is-invocation-frequency'
46
+ | 'names-are-never-dropped'
47
+ | 'stop-at-first-overflow'
48
+ | 'wrapper-overhead-unmodelled';
49
+ /** Always `upstream-prose` today. A value measured in this repo would not be an assumption. */
50
+ provenance: 'upstream-prose';
51
+ why: string;
52
+ }
53
+
54
+ export type FillOrder = 'usage' | 'alphabetical-fallback';
55
+
56
+ export interface HostListingModelInput {
57
+ /** Host context window, in tokens (200_000 for the default Claude Code model). */
58
+ contextWindowTokens: number;
59
+ /** `skillListingBudgetFraction`. */
60
+ fraction?: number;
61
+ /** Per-entry description cap, in characters. */
62
+ perEntryCapChars?: number;
63
+ /** Characters per token used to turn the token-denominated budget into chars. */
64
+ charsPerToken?: number;
65
+ /** Per-entry wrapper cost (name, punctuation, newlines). Unmodelled upstream; default 0. */
66
+ perEntryOverheadChars?: number;
67
+ /** Names in invocation-frequency order, most-invoked first. Empty / omitted โ†’ fallback. */
68
+ usageOrder?: readonly string[];
69
+ }
70
+
71
+ export interface HostListingModelResult {
72
+ /** The description budget for this window, in characters. */
73
+ budgetChars: number;
74
+ /** Which order the fill actually used. */
75
+ fillOrder: FillOrder;
76
+ /** Names whose description is predicted to reach the model. */
77
+ surviving: string[];
78
+ /** Names predicted to arrive listed-but-bare. */
79
+ bare: string[];
80
+ /** Characters the surviving descriptions consume. */
81
+ spentChars: number;
82
+ /** Every behaviour pinned here that upstream leaves as prose. */
83
+ assumptions: readonly ModelAssumption[];
84
+ }
85
+
86
+ /** Documented Claude Code defaults, read 2026-08-22. Not measured in this repo. */
87
+ export const CLAUDE_CODE_LISTING_DEFAULTS = {
88
+ fraction: 0.01,
89
+ perEntryCapChars: 1536,
90
+ charsPerToken: 4,
91
+ perEntryOverheadChars: 0,
92
+ } as const;
93
+
94
+ const ASSUMPTIONS: readonly ModelAssumption[] = [
95
+ {
96
+ id: 'budget-unit-is-chars',
97
+ provenance: 'upstream-prose',
98
+ why:
99
+ 'The docs give the budget as a fraction of the context window (tokens) and then ' +
100
+ 'illustrate it as "โ‰ˆ8,000 characters on 200k", which only reconciles at 4 chars ' +
101
+ 'per token. That ratio is inferred from the illustration, never stated.',
102
+ },
103
+ {
104
+ id: 'fill-order-is-invocation-frequency',
105
+ provenance: 'upstream-prose',
106
+ why:
107
+ 'Upstream says the budget fills by invocation frequency, but does not say what ' +
108
+ 'orders entries when no invocation history exists. This model falls back to ' +
109
+ 'alphabetical, which is this repo\'s choice and not upstream behaviour.',
110
+ },
111
+ {
112
+ id: 'names-are-never-dropped',
113
+ provenance: 'upstream-prose',
114
+ why:
115
+ 'Claude Code lists every name and budgets only descriptions. Another host ' +
116
+ '(codex) drops whole entries instead, so this is a per-host property and is not ' +
117
+ 'transferable to a second host without its own model.',
118
+ },
119
+ {
120
+ id: 'stop-at-first-overflow',
121
+ provenance: 'upstream-prose',
122
+ why:
123
+ 'The docs describe filling a budget, not packing one. A shorter later entry ' +
124
+ 'might in principle still fit after a longer one has overflowed; this model ' +
125
+ 'stops at the first entry that does not fit rather than skipping past it.',
126
+ },
127
+ {
128
+ id: 'wrapper-overhead-unmodelled',
129
+ provenance: 'upstream-prose',
130
+ why:
131
+ 'Each delivered entry also costs its name, separators and newlines. Upstream ' +
132
+ 'quantifies none of that, so the default overhead here is 0 and the budget is ' +
133
+ 'therefore an upper bound on how many descriptions survive.',
134
+ },
135
+ ];
136
+
137
+ /**
138
+ * Predict which descriptions the host delivers.
139
+ *
140
+ * `usageOrder` names are placed first, in the given order; everything else
141
+ * follows alphabetically. Entries not present in the catalogue are ignored.
142
+ */
143
+ export function modelListingBudget(
144
+ catalogue: readonly CatalogueEntry[],
145
+ input: HostListingModelInput,
146
+ ): HostListingModelResult {
147
+ const fraction = input.fraction ?? CLAUDE_CODE_LISTING_DEFAULTS.fraction;
148
+ const perEntryCap = input.perEntryCapChars ?? CLAUDE_CODE_LISTING_DEFAULTS.perEntryCapChars;
149
+ const charsPerToken = input.charsPerToken ?? CLAUDE_CODE_LISTING_DEFAULTS.charsPerToken;
150
+ const overhead = input.perEntryOverheadChars ?? CLAUDE_CODE_LISTING_DEFAULTS.perEntryOverheadChars;
151
+ const usageOrder = input.usageOrder ?? [];
152
+
153
+ const budgetChars = Math.floor(input.contextWindowTokens * fraction * charsPerToken);
154
+ const fillOrder: FillOrder = usageOrder.length > 0 ? 'usage' : 'alphabetical-fallback';
155
+
156
+ const byName = new Map(catalogue.map((e) => [e.name, e]));
157
+ const ordered: CatalogueEntry[] = [];
158
+ const seen = new Set<string>();
159
+ for (const name of usageOrder) {
160
+ const e = byName.get(name);
161
+ if (e && !seen.has(name)) {
162
+ ordered.push(e);
163
+ seen.add(name);
164
+ }
165
+ }
166
+ const rest = catalogue
167
+ .filter((e) => !seen.has(e.name))
168
+ .slice()
169
+ .sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
170
+ ordered.push(...rest);
171
+
172
+ const surviving: string[] = [];
173
+ const bare: string[] = [];
174
+ let spentChars = 0;
175
+ let overflowed = false;
176
+ for (const e of ordered) {
177
+ if (overflowed) {
178
+ bare.push(e.name);
179
+ continue;
180
+ }
181
+ const cost = Math.min(e.descriptionChars, perEntryCap) + overhead;
182
+ if (spentChars + cost <= budgetChars) {
183
+ surviving.push(e.name);
184
+ spentChars += cost;
185
+ } else {
186
+ overflowed = true;
187
+ bare.push(e.name);
188
+ }
189
+ }
190
+
191
+ return { budgetChars, fillOrder, surviving, bare, spentChars, assumptions: ASSUMPTIONS };
192
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `lean_projection.mode` โ€” ONE definition of what the three modes mean.
3
+ *
4
+ * The projector (`condense.ts`) resolves the value with a real YAML parse; the
5
+ * delivery concern (`hooks/rule_inject_hook.ts`) resolves it with an
6
+ * indentation-shaped read, because a hook must never fail a tool call because a
7
+ * parser could not load. Two readers is unavoidable. Two *normalisations* is
8
+ * not, and would be the defect worth preventing: a projector that writes thin
9
+ * files while the concern believes the mode is off delivers pointers and no
10
+ * bodies, which is exactly the 36.2 % arm the delivery mode exists to replace.
11
+ *
12
+ * So each side supplies the raw string from its own reader and this module
13
+ * decides what it means. Anything unrecognised โ€” absent key, typo, `null`,
14
+ * a non-string โ€” is `eager-all`, today's shipped behaviour: a mode nobody can
15
+ * spell must never silently thin the standing corpus.
16
+ */
17
+
18
+ /** The three projection shapes. `eager-all` is the shipped default. */
19
+ export type LeanProjectionMode = 'eager-all' | 'thin' | 'delivery';
20
+
21
+ export const DEFAULT_LEAN_PROJECTION_MODE: LeanProjectionMode = 'eager-all';
22
+
23
+ /** Map a raw settings value onto a mode. Unrecognised โ†’ `eager-all`. */
24
+ export function normalizeLeanProjectionMode(raw: unknown): LeanProjectionMode {
25
+ const v = typeof raw === 'string' ? raw.trim().toLowerCase() : '';
26
+ if (v === 'thin') return 'thin';
27
+ if (v === 'delivery') return 'delivery';
28
+ return DEFAULT_LEAN_PROJECTION_MODE;
29
+ }
30
+
31
+ /**
32
+ * True when the projector writes pointer stubs instead of bodies.
33
+ *
34
+ * `delivery` is a superset of `thin`: it writes the same thin files AND binds
35
+ * the concern that delivers the bodies back on a trigger.
36
+ */
37
+ export function writesThinFiles(mode: LeanProjectionMode): boolean {
38
+ return mode === 'thin' || mode === 'delivery';
39
+ }
40
+
41
+ /** True only in the mode where a hook delivers rule bodies at runtime. */
42
+ export function deliversBodies(mode: LeanProjectionMode): boolean {
43
+ return mode === 'delivery';
44
+ }
@@ -0,0 +1,199 @@
1
+ /**
2
+ * mcp_bridge โ€” `.mcp.json` registration and the skill-tier projection lever.
3
+ *
4
+ * Extracted from `install.ts` by Phase 2.2 of `road-to-skill-delivery-over-mcp`,
5
+ * for a mechanical reason worth stating: `check_source_size_budget` is a ratchet
6
+ * over every line in a file above 1,500, `install.ts` is 5,466 of them, and the
7
+ * gate's own message says a new violation is fixed and never baselined away. So
8
+ * the feature lives here and `install.ts` keeps one-line call sites.
9
+ *
10
+ * Everything here is a pure function of its arguments or of the file system.
11
+ * `ensureMcpBridge` is the one exception and takes its writer by injection โ€”
12
+ * `merge_json_file` lives in `install.ts` (eight other bridges use it) and
13
+ * importing it back would make the cycle.
14
+ */
15
+
16
+ import * as fs from 'node:fs';
17
+ import * as path from 'node:path';
18
+
19
+ /** `install.ts`'s deploy tuple: [written, skipped, status, paths]. */
20
+ export type DeployTuple = [number, number, string, string[]];
21
+
22
+ /** The `merge_json_file` signature this module is handed. */
23
+ export type MergeJsonFile = (
24
+ p: string,
25
+ new_data: Record<string, unknown>,
26
+ force: boolean,
27
+ label: string,
28
+ ) => Record<string, unknown>[];
29
+
30
+ /**
31
+ * The project-scope MCP server entry Claude Code reads from `.mcp.json`.
32
+ *
33
+ * Shape is fixed by `docs/getting-started-local-stdio.md` โ€” the documented
34
+ * end-user path โ€” so a consumer who followed the docs and a consumer who ran the
35
+ * installer end up with the same entry rather than two that drift.
36
+ */
37
+ export const MCP_SERVER_KEY = 'agent-config';
38
+ export const MCP_BRIDGE_ENTRY = {
39
+ mcpServers: {
40
+ [MCP_SERVER_KEY]: {
41
+ command: 'npx',
42
+ args: ['-y', '@event4u/agent-config', 'mcp-server'],
43
+ },
44
+ },
45
+ };
46
+
47
+ /**
48
+ * `.mcp.json` โ€” the project-scope MCP config Claude Code reads.
49
+ *
50
+ * WHY THE INSTALLER OWNS THIS FILE AND `mcp_render` DOES NOT. `mcp_render`
51
+ * projects the consumer's OWN root `mcp.json` onto per-tool configs by
52
+ * overwriting them (`write_target`), which is correct for a file the renderer
53
+ * generates in full and wrong for one the consumer also edits: a render would
54
+ * delete both this entry and any server they added by hand. `merge_json_file`
55
+ * writes only our key, records it as an RFC-6901 pointer in
56
+ * `agents/installed-tools.lock`, and lets uninstall subtract exactly that key.
57
+ * `mcp:check` validates the file without ever writing it.
58
+ *
59
+ * Default ON for `claude-code`, because `rules/missing-skill-recovery.md` makes
60
+ * `suggest_skill_for_task` an Iron Law for every consumer and a rule that is
61
+ * unfulfillable by default is a defect, not a feature. Opting out is the same
62
+ * lever as every other bridge โ€” deselect the tool (`--tools`), which is the gate
63
+ * the caller applies; `.agent-tools.yml` is deliberately NOT that lever, it is a
64
+ * maintainer-side projection-generator allowlist the installer cannot see and
65
+ * whose tool ids differ from `_VALID_TOOLS`.
66
+ */
67
+ export function makeEnsureMcpBridge(
68
+ mergeJsonFile: MergeJsonFile,
69
+ ): (projectRoot: string, force: boolean) => Record<string, unknown>[] {
70
+ return (projectRoot, force) =>
71
+ mergeJsonFile(path.join(projectRoot, '.mcp.json'), MCP_BRIDGE_ENTRY, force, '.mcp.json');
72
+ }
73
+
74
+ /**
75
+ * The three projection modes.
76
+ *
77
+ * `legacy-all` ships everything and stays the default. `scoped` narrows to the
78
+ * active packs. `tiered` narrows to the skills predicted to reach the model WITH
79
+ * their description, on the theory that a skill the host lists bare is better
80
+ * served by the MCP recovery tool than by a catalogue entry nobody can read.
81
+ *
82
+ * `tiered` is OPT-IN and stays opt-in until the roadmap's Phase 4.4 decides on
83
+ * evidence โ€” which it did, at `measured-null`. The reason is stated rather than
84
+ * implied: the split usually comes from an ALPHABETICAL fallback order
85
+ * (`agents/runtime/metrics/skill-usage.jsonl` is absent on most machines), and
86
+ * the one real host observation this repo has disagrees with that fallback on
87
+ * four of eight sampled entries. Defaulting to `tiered` would hide skills on a
88
+ * prediction the tree itself can show to be wrong โ€” strictly worse than the
89
+ * bare-but-listed defect it fixes (roadmap risk 4).
90
+ */
91
+ export type ProjectionMode = 'scoped' | 'legacy-all' | 'tiered';
92
+
93
+ /** Resolve a raw `projection.mode` value. Anything unrecognised is `legacy-all`. */
94
+ export function projectionModeOf(raw: unknown): ProjectionMode {
95
+ return raw === 'scoped' ? 'scoped' : raw === 'tiered' ? 'tiered' : 'legacy-all';
96
+ }
97
+
98
+ /**
99
+ * Tier B skill names, or `null` when no split exists on this machine.
100
+ *
101
+ * `null` is load-bearing: it means "nobody computed a split here", and a
102
+ * `tiered` install that finds it must ship the FULL surface rather than prune on
103
+ * an empty set โ€” pruning on absence would delete the entire catalogue. A
104
+ * malformed file is `null` for the same reason.
105
+ */
106
+ export function resolveTierB(packageRoot: string): ReadonlySet<string> | null {
107
+ const p = path.join(packageRoot, 'agents', 'runtime', 'state', 'skill-tiers.json');
108
+ if (!fs.existsSync(p)) return null;
109
+ try {
110
+ const parsed = JSON.parse(fs.readFileSync(p, 'utf-8')) as { tier_b?: unknown };
111
+ if (!Array.isArray(parsed.tier_b)) return null;
112
+ return new Set(parsed.tier_b.filter((n): n is string => typeof n === 'string'));
113
+ } catch {
114
+ return null;
115
+ }
116
+ }
117
+
118
+ /** Predicate for `_prune_modules_by`: is this SKILL.md a Tier B skill? */
119
+ export function tierBPrunePredicate(
120
+ tierB: ReadonlySet<string>,
121
+ ): (mdPath: string) => boolean {
122
+ return (mdPath) => tierB.has(path.basename(path.dirname(mdPath)));
123
+ }
124
+
125
+ /**
126
+ * The consumer-side alternative to tiering, surfaced as a recommendation only.
127
+ *
128
+ * Claude Code's listing budget is settable: `skillListingBudgetFraction` raises
129
+ * the fraction of the context window spent on skill DESCRIPTIONS, restoring them
130
+ * at a measured token price instead of withholding skills from the catalogue.
131
+ * That is the other lever, and for many consumers the better one โ€” a description
132
+ * they can read beats a tool call they have to make.
133
+ *
134
+ * Returns `null` unless a tier split exists AND Tier B is non-empty: with no
135
+ * split there is nothing to recommend against, and an empty Tier B means the
136
+ * host already describes everything. This NEVER writes the consumer's
137
+ * `settings.json` โ€” the setting is theirs, the token cost is theirs, and an
138
+ * installer that edited a host's own config to buy itself context would be
139
+ * taking that decision in their name.
140
+ */
141
+ export function tierBAdvisory(packageRoot: string): string | null {
142
+ const tierB = resolveTierB(packageRoot);
143
+ if (tierB === null || tierB.size === 0) return null;
144
+ return (
145
+ `โ„น๏ธ ${tierB.size} skill(s) are predicted to reach the model WITHOUT their ` +
146
+ 'description on a default 200k window.\n' +
147
+ ' Two levers, neither applied for you:\n' +
148
+ ' โ€ข raise `skillListingBudgetFraction` in your Claude Code settings โ€” ' +
149
+ 'restores descriptions at a token cost (100% delivery of this catalogue ' +
150
+ 'measures ~13,003 tok)\n' +
151
+ ' โ€ข or set `projection.mode: tiered` to withhold them from the catalogue ' +
152
+ 'and reach them via the MCP server instead (opt-in, still unproven โ€” see ' +
153
+ 'docs/mcp-server.md)'
154
+ );
155
+ }
156
+
157
+ export interface TieredPruneOutcome {
158
+ deployResults: Record<string, DeployTuple>;
159
+ /** One line for the caller to print, or `null` when QUIET. */
160
+ message: string | null;
161
+ /** `warn` when no split exists, `info` when a prune happened. */
162
+ level: 'warn' | 'info';
163
+ }
164
+
165
+ /**
166
+ * Apply the Tier-B prune to a completed deploy.
167
+ *
168
+ * Takes `pruneBy` rather than importing it, so the prune mechanics stay in one
169
+ * place and this module does not become a second implementation of them.
170
+ */
171
+ export function applyTieredPrune(
172
+ deployResults: Record<string, DeployTuple>,
173
+ packageRoot: string,
174
+ pruneBy: (
175
+ dr: Record<string, DeployTuple>,
176
+ isPruned: (mdPath: string) => boolean,
177
+ ) => [number, Record<string, DeployTuple>],
178
+ ): TieredPruneOutcome {
179
+ const tierB = resolveTierB(packageRoot);
180
+ if (tierB === null || tierB.size === 0) {
181
+ return {
182
+ deployResults,
183
+ level: 'warn',
184
+ message:
185
+ 'projection.mode: tiered but no skill-tier split exists ' +
186
+ '(agents/runtime/state/skill-tiers.json) โ€” shipping the full surface. ' +
187
+ 'Compute one with `./scripts-run src/scripts/compute_skill_tiers` first.',
188
+ };
189
+ }
190
+ const [pruned, adjusted] = pruneBy(deployResults, tierBPrunePredicate(tierB));
191
+ return {
192
+ deployResults: adjusted,
193
+ level: 'info',
194
+ message:
195
+ `๐Ÿงน Tiered install: pruned ${pruned} Tier-B skill artefact(s) โ€” still ` +
196
+ "reachable via the MCP server's suggest_skill_for_task / read_skill. " +
197
+ 'Set projection.mode: legacy-all to restore the full surface.',
198
+ };
199
+ }
@@ -27,6 +27,26 @@ const PROVIDER_FAMILY: Readonly<Record<string, string>> = {
27
27
  export type ReviewIndependence = 'cross-family' | 'same-family' | 'single-member' | 'unknown';
28
28
  export type AcceptanceStatus = 'accepted' | 'provisional';
29
29
 
30
+ /**
31
+ * How the reviewer relates to the AUTHOR โ€” a second axis, added 2026-08-23 by
32
+ * `road-to-review-independence` step 2.1.
33
+ *
34
+ * Model family and author relation are different questions, and the type carried only
35
+ * the first. **A cross-family pair that both read the implementer's envelope is not
36
+ * independent in the sense that matters here**: they disagree about the model, and they
37
+ * share the framing of what the change is for and what counts as done.
38
+ *
39
+ * - `fresh` โ€” no implementation context. A separate dispatch that received the diff and
40
+ * the scope, and not the author's envelope.
41
+ * - `same-session` โ€” ran inside the author's session, with the implementation context in
42
+ * scope. The common path today, and the one this axis exists to make visible.
43
+ * - `unknown` โ€” not recorded. Treated as `same-session` for derivation, because an
44
+ * unrecorded relation is not evidence of freshness and the safe direction on an
45
+ * integrity field is the weaker claim (the same reasoning `unknown` already gets on
46
+ * the family axis).
47
+ */
48
+ export type ContextRelation = 'fresh' | 'same-session' | 'unknown';
49
+
30
50
  /**
31
51
  * How much INDEPENDENT evidence backs the verdict โ€” deliberately orthogonal to
32
52
  * how much effort the reviewer spent.
@@ -54,30 +74,56 @@ export function reviewIndependence(memberNames: readonly string[]): ReviewIndepe
54
74
  * is not evidence of independence, and the safe direction on an integrity field
55
75
  * is the weaker claim.
56
76
  */
57
- export function acceptanceStatus(independence: ReviewIndependence): AcceptanceStatus {
58
- return independence === 'cross-family' ? 'accepted' : 'provisional';
77
+ export function acceptanceStatus(
78
+ independence: ReviewIndependence,
79
+ relation: ContextRelation = 'unknown',
80
+ ): AcceptanceStatus {
81
+ if (independence !== 'cross-family') return 'provisional';
82
+ // BOTH axes, and this is the whole point of step 2.1: a cross-family pair that both
83
+ // sat in the author's session shares the framing even though it disagrees about the
84
+ // model. `unknown` falls here too โ€” an unrecorded relation is not evidence of
85
+ // freshness. The parameter defaults to `unknown` so every existing caller keeps
86
+ // compiling and gets the SAFER answer rather than the old one.
87
+ return relation === 'fresh' ? 'accepted' : 'provisional';
59
88
  }
60
89
 
61
- export function assuranceFor(independence: ReviewIndependence): Assurance {
62
- if (independence === 'cross-family') return 'independent';
90
+ export function assuranceFor(
91
+ independence: ReviewIndependence,
92
+ relation: ContextRelation = 'unknown',
93
+ ): Assurance {
63
94
  if (independence === 'unknown') return 'unreviewed';
95
+ // `independent` requires both axes, for the same reason `accepted` does.
96
+ if (independence === 'cross-family' && relation === 'fresh') return 'independent';
64
97
  return 'single-pass';
65
98
  }
66
99
 
67
100
  export interface IndependenceFields {
68
101
  readonly review_independence: ReviewIndependence;
102
+ /** The recorded second axis. Derived fields below follow from BOTH. */
103
+ readonly context_relation: ContextRelation;
69
104
  readonly acceptance_status: AcceptanceStatus;
70
105
  readonly assurance: Assurance;
71
106
  readonly reviewers: readonly string[];
72
107
  }
73
108
 
74
- /** The three fields plus the member set they were derived from. */
75
- export function independenceFields(memberNames: readonly string[]): IndependenceFields {
109
+ /**
110
+ * The recorded axes plus the fields derived from them.
111
+ *
112
+ * `context_relation` defaults to `unknown` so an existing caller that names only its
113
+ * members keeps compiling โ€” and gets `provisional` rather than the `accepted` it used to
114
+ * get. That direction is deliberate: a producer that has not said whether its reviewer
115
+ * was fresh has not earned the stronger claim.
116
+ */
117
+ export function independenceFields(
118
+ memberNames: readonly string[],
119
+ relation: ContextRelation = 'unknown',
120
+ ): IndependenceFields {
76
121
  const independence = reviewIndependence(memberNames);
77
122
  return {
78
123
  review_independence: independence,
79
- acceptance_status: acceptanceStatus(independence),
80
- assurance: assuranceFor(independence),
124
+ context_relation: relation,
125
+ acceptance_status: acceptanceStatus(independence, relation),
126
+ assurance: assuranceFor(independence, relation),
81
127
  reviewers: [...memberNames],
82
128
  };
83
129
  }
@@ -97,13 +143,19 @@ export function independenceViolations(doc: Record<string, unknown>): string[] {
97
143
  out.push('review_independence is absent โ€” an artifact that does not declare its independence reads as acceptance by default');
98
144
  return out;
99
145
  }
100
- const expectedAccept = acceptanceStatus(indep as ReviewIndependence);
146
+ // The recorded relation, not a default: `independenceViolations` judges an artifact
147
+ // that already carries the fields, so reading `unknown` when the artifact says
148
+ // `fresh` would flag a correct producer.
149
+ const relRaw = doc['context_relation'];
150
+ const rel: ContextRelation =
151
+ relRaw === 'fresh' || relRaw === 'same-session' ? relRaw : 'unknown';
152
+ const expectedAccept = acceptanceStatus(indep as ReviewIndependence, rel);
101
153
  if (accept !== expectedAccept) {
102
154
  out.push(
103
155
  `acceptance_status is ${String(accept)} but review_independence ${String(indep)} derives ${expectedAccept}`,
104
156
  );
105
157
  }
106
- const expectedAssur = assuranceFor(indep as ReviewIndependence);
158
+ const expectedAssur = assuranceFor(indep as ReviewIndependence, rel);
107
159
  if (assur !== undefined && assur !== expectedAssur) {
108
160
  out.push(`assurance is ${String(assur)} but review_independence ${String(indep)} derives ${expectedAssur}`);
109
161
  }