@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
@@ -1,239 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { SLOP_RULES, type DesignContext } from "./design_slop_rules.js";
3
- import { scanFile } from "./lint_design_slop.js";
4
-
5
- // Context with no DESIGN.md → all gates OFF, every rule active.
6
- const NO_CTX: DesignContext = { raw: "", has: () => false };
7
- const ctxWith = (raw: string): DesignContext => ({
8
- raw: raw.toLowerCase(),
9
- has: (...ks: string[]) => ks.some((k) => raw.toLowerCase().includes(k.toLowerCase())),
10
- });
11
-
12
- /**
13
- * Calibration corpus (Phase 4). One positive (must fire) + one negative (must be
14
- * clean) per rule. `ext` drives the engine class. No untested tell — the guard
15
- * below asserts every registry rule appears here.
16
- */
17
- const FIXTURES: Record<string, { ext: string; positive: string; negative: string }> = {
18
- "slop-v1-side-stripe": {
19
- ext: "css",
20
- positive: ".card { border-left: 4px solid #6c5ce7; padding: 16px; }",
21
- negative: ".card { border-left: 1px solid #eee; padding: 16px; }",
22
- },
23
- "slop-v3-ghost-card": {
24
- ext: "css",
25
- positive: ".card { border: 1px solid #ddd; box-shadow: 0 8px 24px rgba(0,0,0,.1); }",
26
- negative: ".card { box-shadow: 0 2px 4px rgba(0,0,0,.1); }",
27
- },
28
- "slop-v6-diagonal-stripes": {
29
- ext: "css",
30
- positive: ".bg { background: repeating-linear-gradient(45deg,#000,#000 10px,#111 10px,#111 20px); }",
31
- negative: ".bg { background: linear-gradient(#fff,#eee); }",
32
- },
33
- "slop-c2-gradient-text": {
34
- ext: "css",
35
- positive: ".h { background: linear-gradient(90deg,#f00,#00f); -webkit-background-clip: text; color: transparent; }",
36
- negative: ".h { color: #111; }",
37
- },
38
- "slop-c5-cream-palette": {
39
- ext: "css",
40
- positive: "body { background: #f5f1ea; } .a { color: #b08947; }",
41
- negative: "body { background: #ffffff; } .a { color: #111111; }",
42
- },
43
- "slop-t4-eyebrow-overuse": {
44
- ext: "html",
45
- positive:
46
- '<section><span class="uppercase">Features</span></section><section><span class="uppercase">Pricing</span></section><section><h2>Contact</h2></section>',
47
- negative:
48
- '<section><span class="uppercase">Features</span></section><section><h2>Pricing</h2></section><section><h2>Contact</h2></section>',
49
- },
50
- "slop-t6-crushed-tracking": {
51
- ext: "css",
52
- positive: ".display { letter-spacing: -0.05em; }",
53
- negative: ".display { letter-spacing: -0.02em; }",
54
- },
55
- "slop-t7-default-fonts": {
56
- ext: "css",
57
- positive: "body { font-family: 'Inter', sans-serif; }",
58
- negative: "body { font-family: 'Söhne', sans-serif; }",
59
- },
60
- "slop-l4-numbered-markers": {
61
- ext: "html",
62
- positive: "<div>01</div><div>02</div><div>03</div>",
63
- negative: "<div>Discover</div><div>Build</div><div>Ship</div>",
64
- },
65
- "slop-l8-zindex-magic": {
66
- ext: "css",
67
- positive: ".modal { z-index: 9999; }",
68
- negative: ".modal { z-index: 400; }",
69
- },
70
- "slop-m4-transition-all": {
71
- ext: "css",
72
- positive: ".x { transition: all 200ms ease-out; }",
73
- negative: ".x { transition: transform 200ms ease-out; }",
74
- },
75
- "slop-m2-animate-layout": {
76
- ext: "css",
77
- positive: ".x { transition: width 200ms ease; }",
78
- negative: ".x { transition: transform 200ms, opacity 200ms; }",
79
- },
80
- "slop-cp1-em-dash": {
81
- ext: "md",
82
- // ≥80 words is the rule floor; positive carries 4 em-dashes (well over the
83
- // ~2-per-500 density), negative carries one across the same length.
84
- positive:
85
- "We build tools — fast, focused tools — that teams genuinely love using every single day of the working week. " +
86
- "The product is calm and clear and useful, and people return to it daily because it respects their time — and their attention — and never wastes a single click of effort or a moment of their busy day, and that quiet reliability is the whole point of the thing we set out to make together, and the team keeps shipping the small improvements that matter most to the people who rely on it.",
87
- negative:
88
- "We build tools, fast and focused tools, that teams genuinely love using every single day of the working week. " +
89
- "The product is calm and clear and useful, and people return to it daily because it respects their time and their attention and never wastes a single click of effort or a moment of their busy day — and that quiet reliability is the whole point of the thing we set out to make together, and the team keeps shipping the small improvements that matter most to the people who rely on it.",
90
- },
91
- "slop-cp2-buzzword": {
92
- ext: "md",
93
- positive: "We streamline and empower your robust, world-class workflow.",
94
- negative: "We cut page load by 40% and remove three steps from checkout.",
95
- },
96
- "slop-cp5-emoji-ui": {
97
- ext: "html",
98
- positive: '<h1>🚀 Get Started</h1><button>✅ Track progress</button>',
99
- // Functional placements stay clean: mid-sentence emoji, status-cell emoji.
100
- negative:
101
- '<h1>Get Started</h1><p>Deploys are marked ✅ when healthy.</p><td>✅</td><button>Track progress</button>',
102
- },
103
- "slop-v8-lock-shape": {
104
- ext: "css",
105
- positive: ".a{border-radius:4px}.b{border-radius:8px}.c{border-radius:12px}.d{border-radius:20px}",
106
- negative: ".a{border-radius:8px}.b{border-radius:12px}",
107
- },
108
- "slop-l9-section-monotony": {
109
- ext: "html",
110
- // 8 identical media+text sections → 1 distinct layout family (< 4)
111
- positive: '<section><div class="grid"><img src="x"><h2>A</h2><p>t</p></div></section>'.repeat(8),
112
- // 8 sections, 4 distinct signatures → not monotonous
113
- negative: (
114
- '<section><div class="grid"><img src="x"><h2>A</h2></div></section>' +
115
- "<section><h2>B</h2><p>t</p></section>" +
116
- '<section><div class="flex"><p>c</p></div></section>' +
117
- '<section><img src="y"></section>'
118
- ).repeat(2),
119
- },
120
- "slop-l10-zigzag": {
121
- ext: "html",
122
- // 3 consecutive media+text two-column sections → run > 2
123
- positive: '<section><div class="grid"><img src="x"><h2>A</h2><p>t</p></div></section>'.repeat(3),
124
- // only 2 consecutive → within cap
125
- negative: '<section><div class="grid"><img src="x"><h2>A</h2><p>t</p></div></section>'.repeat(2),
126
- },
127
- "slop-v4-over-rounded": {
128
- ext: "css",
129
- // 24px radius on an 80px chip — mid-range rounding on a small surface
130
- positive: ".chip{width:80px;border-radius:24px;background:#1f5f9c}",
131
- // a deliberate pill is a shape decision, not over-rounding
132
- negative: ".chip{width:80px;border-radius:9999px;background:#1f5f9c}",
133
- },
134
- "slop-c3-dark-glow": {
135
- ext: "css",
136
- // zero-offset saturated glow inside a declared dark surface
137
- positive: ".dark .btn{background:#0b0f14;box-shadow:0 0 18px #22d3ee}",
138
- // same dark surface, ordinary offset depth — not a glow
139
- negative: ".dark .btn{background:#0b0f14;box-shadow:0 2px 8px #22d3ee}",
140
- },
141
- "slop-t9-uppercase-body": {
142
- ext: "css",
143
- positive: "article p{text-transform:uppercase;font-size:16px}",
144
- // a short field label is the legitimate home of uppercase
145
- negative: ".field-label{text-transform:uppercase;font-size:12px}",
146
- },
147
- "slop-t10-wide-tracking-body": {
148
- ext: "css",
149
- positive: "article p{letter-spacing:0.12em;font-size:16px}",
150
- negative: "article p{letter-spacing:0.01em;font-size:16px}",
151
- },
152
- "slop-m1-bounce-easing": {
153
- ext: "css",
154
- // y1 = 1.56 overshoots the target and returns — the bounce signature
155
- positive: ".card{transition:transform .3s cubic-bezier(.34,1.56,.64,1)}",
156
- negative: ".card{transition:transform .3s cubic-bezier(.4,0,.2,1)}",
157
- },
158
- "slop-m3-img-hover-transform": {
159
- ext: "css",
160
- positive: ".tile:hover img{transform:scale(1.05)}",
161
- negative: ".tile:hover .tile__title{color:#16202b}",
162
- },
163
- };
164
-
165
- function findingsFor(ruleId: string, content: string, ext: string, ctx = NO_CTX) {
166
- return scanFile(content, `fixture.${ext}`, ctx).filter((f) => f.rule === ruleId);
167
- }
168
-
169
- describe("design-slop rule registry", () => {
170
- it("every rule has a unique id + a catalog id", () => {
171
- const ids = SLOP_RULES.map((r) => r.id);
172
- expect(new Set(ids).size).toBe(ids.length);
173
- for (const r of SLOP_RULES) {
174
- expect(r.id).toMatch(/^slop-/);
175
- expect(r.catalogId).toMatch(/^[A-Z]+\d+$/);
176
- expect(r.engines.length).toBeGreaterThan(0);
177
- }
178
- });
179
-
180
- it("no untested tell — every registry rule has a +/- fixture", () => {
181
- for (const r of SLOP_RULES) {
182
- expect(FIXTURES[r.id], `missing fixture for ${r.id}`).toBeDefined();
183
- }
184
- // and no orphan fixtures
185
- const ids = new Set(SLOP_RULES.map((r) => r.id));
186
- for (const k of Object.keys(FIXTURES)) {
187
- expect(ids.has(k), `orphan fixture ${k}`).toBe(true);
188
- }
189
- });
190
-
191
- describe("positive fixtures fire, negative fixtures are clean", () => {
192
- for (const r of SLOP_RULES) {
193
- const fx = FIXTURES[r.id];
194
- if (!fx) continue;
195
- it(`${r.id} (${r.catalogId})`, () => {
196
- expect(findingsFor(r.id, fx.positive, fx.ext).length, "positive must fire").toBeGreaterThan(0);
197
- expect(findingsFor(r.id, fx.negative, fx.ext).length, "negative must be clean").toBe(0);
198
- });
199
- }
200
- });
201
- });
202
-
203
- describe("context gates suppress when DESIGN.md declares intent", () => {
204
- it("t7 default-font is suppressed when DESIGN.md adopts Inter", () => {
205
- const fx = FIXTURES["slop-t7-default-fonts"]!;
206
- expect(findingsFor("slop-t7-default-fonts", fx.positive, "css", NO_CTX).length).toBeGreaterThan(0);
207
- expect(
208
- findingsFor("slop-t7-default-fonts", fx.positive, "css", ctxWith("Body font: Inter (chosen for variable metrics in a data-dense dashboard)")).length,
209
- ).toBe(0);
210
- });
211
-
212
- it("cp5 emoji-ui is suppressed when DESIGN.md declares an emoji strategy", () => {
213
- const fx = FIXTURES["slop-cp5-emoji-ui"]!;
214
- expect(findingsFor("slop-cp5-emoji-ui", fx.positive, "html", NO_CTX).length).toBeGreaterThan(0);
215
- expect(
216
- findingsFor("slop-cp5-emoji-ui", fx.positive, "html", ctxWith("Voice: playful; emoji are part of the brand voice in headings and CTAs")).length,
217
- ).toBe(0);
218
- });
219
-
220
- it("c5 cream-palette is suppressed under a declared warm-neutral language", () => {
221
- const fx = FIXTURES["slop-c5-cream-palette"]!;
222
- expect(findingsFor("slop-c5-cream-palette", fx.positive, "css", NO_CTX).length).toBeGreaterThan(0);
223
- expect(
224
- findingsFor("slop-c5-cream-palette", fx.positive, "css", ctxWith("Palette: warm-neutral, first-party")).length,
225
- ).toBe(0);
226
- });
227
- });
228
-
229
- describe("inline-ignore", () => {
230
- it("design-slop-disable-next-line suppresses the next line", () => {
231
- const css = "/* design-slop-disable-next-line slop-m4-transition-all */\n.x { transition: all 200ms; }";
232
- expect(findingsFor("slop-m4-transition-all", css, "css").length).toBe(0);
233
- });
234
-
235
- it("file-scope design-slop-disable suppresses the whole file", () => {
236
- const css = "/* design-slop-disable slop-l8-zindex-magic */\n.a{z-index:9999}\n.b{z-index:999}";
237
- expect(findingsFor("slop-l8-zindex-magic", css, "css").length).toBe(0);
238
- });
239
- });
@@ -1,296 +0,0 @@
1
- import { spawnSync } from 'node:child_process';
2
- import * as fs from 'node:fs';
3
- import * as os from 'node:os';
4
- import * as path from 'node:path';
5
-
6
- import { afterEach, describe, expect, it } from 'vitest';
7
-
8
- import {
9
- LARGE_DIFF_LINES,
10
- buildPlan,
11
- classifyBlocking,
12
- detectReleaseVersion,
13
- escalationReasons,
14
- gateVerdict,
15
- isReviewablePath,
16
- pickPreviousTag,
17
- renderReview,
18
- type Finding,
19
- } from './self_review_gate.js';
20
-
21
- const f = (severity: Finding['severity'], kind: Finding['kind']): Finding => ({
22
- severity,
23
- kind,
24
- title: `${severity} ${kind}`,
25
- detail: 'x',
26
- });
27
-
28
- describe('classifyBlocking', () => {
29
- it('blocks security + high and claim + critical', () => {
30
- expect(classifyBlocking(f('high', 'security'))).toBe(true);
31
- expect(classifyBlocking(f('critical', 'claim'))).toBe(true);
32
- });
33
- it('does not block low/medium security, or any style/correctness', () => {
34
- expect(classifyBlocking(f('medium', 'security'))).toBe(false);
35
- expect(classifyBlocking(f('low', 'claim'))).toBe(false);
36
- expect(classifyBlocking(f('critical', 'style'))).toBe(false);
37
- expect(classifyBlocking(f('high', 'correctness'))).toBe(false);
38
- });
39
- });
40
-
41
- describe('gateVerdict', () => {
42
- const blocking = [f('high', 'security')];
43
- it('advisory (default shipped mode) never blocks, even with a blocking finding', () => {
44
- expect(gateVerdict(blocking, { enforce: false })).toBe(0);
45
- });
46
- it('enforce blocks only on a merge-blocking finding', () => {
47
- expect(gateVerdict(blocking, { enforce: true })).toBe(2);
48
- expect(gateVerdict([f('critical', 'style')], { enforce: true })).toBe(0);
49
- expect(gateVerdict([], { enforce: true })).toBe(0);
50
- });
51
- });
52
-
53
- describe('isReviewablePath', () => {
54
- it('skips generated projections + lockfiles, keeps source', () => {
55
- expect(isReviewablePath('dist/agent-src/skills/x/SKILL.md')).toBe(false);
56
- expect(isReviewablePath('.augment/rules/x.md')).toBe(false);
57
- expect(isReviewablePath('.windsurfrules')).toBe(false);
58
- expect(isReviewablePath('package-lock.json')).toBe(false);
59
- expect(isReviewablePath('src/rules/x.md')).toBe(true);
60
- expect(isReviewablePath('src/scripts/y.ts')).toBe(true);
61
- });
62
- });
63
-
64
- describe('renderReview', () => {
65
- it('carries the HUMAN REVIEW REQUIRED banner + the floor-not-human-review caveat', () => {
66
- const out = renderReview([], false);
67
- expect(out).toContain('HUMAN REVIEW REQUIRED');
68
- expect(out).toContain('not** independent human review');
69
- });
70
- it('advisory phrasing says WOULD block, enforce phrasing says blocking', () => {
71
- const blocking = [f('high', 'security')];
72
- expect(renderReview(blocking, false)).toContain('WOULD block');
73
- expect(renderReview(blocking, true)).toContain('merge-blocking');
74
- });
75
- it('labels each row (Blocking)/(Advisory) so a critical-but-non-blocking row never reads as inconsistent with the count', () => {
76
- const findings = [f('critical', 'correctness'), f('critical', 'security')];
77
- const out = renderReview(findings, false);
78
- // critical × correctness is NOT blocking → labelled Advisory
79
- expect(out).toContain('| critical (Advisory) | correctness |');
80
- // critical × security IS blocking → labelled Blocking
81
- expect(out).toContain('| critical (Blocking) | security |');
82
- // verdict count matches the number of (Blocking) rows (exactly 1)
83
- expect(out).toContain('1 finding(s) WOULD block');
84
- expect((out.match(/\(Blocking\)/g) ?? []).length).toBe(1);
85
- });
86
- });
87
-
88
- describe('escalationReasons', () => {
89
- it('flags a large diff at or above the threshold', () => {
90
- expect(escalationReasons(['src/a.ts'], LARGE_DIFF_LINES)).toEqual([
91
- `large diff (${LARGE_DIFF_LINES} changed lines ≥ ${LARGE_DIFF_LINES})`,
92
- ]);
93
- });
94
- it('does not flag a small non-claim diff', () => {
95
- expect(escalationReasons(['src/a.ts'], LARGE_DIFF_LINES - 1)).toEqual([]);
96
- });
97
- it('flags a claim-ledger surface regardless of size', () => {
98
- expect(escalationReasons(['docs/CLAIMS.md'], 1)).toEqual([
99
- 'claim-affecting surface touched (docs/CLAIMS.md)',
100
- ]);
101
- expect(escalationReasons(['docs/proof.md'], 1)[0]).toContain('docs/proof.md');
102
- expect(escalationReasons(['docs/comparison.yaml'], 1)[0]).toContain('docs/comparison.yaml');
103
- expect(escalationReasons(['README.md'], 1)[0]).toContain('README.md');
104
- });
105
- it('reports both reasons when a large diff also touches a claim surface', () => {
106
- const r = escalationReasons(['docs/CLAIMS.md', 'src/big.ts'], LARGE_DIFF_LINES + 50);
107
- expect(r).toHaveLength(2);
108
- expect(r[0]).toContain('large diff');
109
- expect(r[1]).toContain('claim-affecting');
110
- });
111
- });
112
-
113
- describe('renderReview — escalation banner', () => {
114
- const f = (severity: Finding['severity'], kind: Finding['kind']): Finding => ({
115
- severity, kind, title: 't', detail: 'd',
116
- });
117
- it('appends the escalation recommendation when reasons are present', () => {
118
- const out = renderReview([], false, ['large diff (500 changed lines ≥ 400)']);
119
- expect(out).toContain('Escalation warranted');
120
- expect(out).toContain('/council:pr');
121
- expect(out).toContain('never');
122
- });
123
- it('omits the escalation block when there are no reasons (byte-identical to no-arg)', () => {
124
- const findings = [f('high', 'security')];
125
- expect(renderReview(findings, false, [])).toBe(renderReview(findings, false));
126
- });
127
- it('recommends escalation even on a clean (no-finding) large diff', () => {
128
- const out = renderReview([], false, ['large diff (500 changed lines ≥ 400)']);
129
- expect(out).toContain('no findings');
130
- expect(out).toContain('Escalation warranted');
131
- });
132
- });
133
-
134
- // ── Release-PR review mode (road-to-feedback-9.2.0-followups Phase 3) ──
135
- // See docs/design/release-pr-review-mode.md — anchored to the PR #957
136
- // false-advisory case (release features reading as "not in the diff").
137
-
138
- describe('detectReleaseVersion', () => {
139
- const changelogAdd = (v: string) =>
140
- `+## [${v}](https://github.com/event4u-app/agent-config/compare/9.1.0...${v}) (2026-07-14)`;
141
- const packageAdd = (v: string) => `+ "version": "${v}",`;
142
-
143
- it('detects a release PR when the changelog heading and the package.json bump agree', () => {
144
- const patch = [
145
- 'diff --git a/CHANGELOG.md b/CHANGELOG.md',
146
- '@@ -14,6 +14,8 @@',
147
- ' ## [Unreleased]',
148
- '+',
149
- changelogAdd('9.2.0'),
150
- 'diff --git a/package.json b/package.json',
151
- '@@ -1,6 +1,6 @@',
152
- '- "version": "9.1.0",',
153
- packageAdd('9.2.0'),
154
- ].join('\n');
155
- expect(detectReleaseVersion(patch)).toBe('9.2.0');
156
- });
157
-
158
- it('is NOT a release PR when only the changelog heading changed (no version bump)', () => {
159
- expect(detectReleaseVersion(changelogAdd('9.2.0'))).toBeNull();
160
- });
161
-
162
- it('is NOT a release PR when only package.json bumped (no changelog heading)', () => {
163
- expect(detectReleaseVersion(packageAdd('9.2.0'))).toBeNull();
164
- });
165
-
166
- it('is NOT a release PR on a normal feature-PR patch (neither signal present)', () => {
167
- const patch = ['+export function foo() {}', '-export function bar() {}'].join('\n');
168
- expect(detectReleaseVersion(patch)).toBeNull();
169
- });
170
-
171
- it('refuses to guess when the changelog and package.json versions disagree', () => {
172
- const patch = [changelogAdd('9.2.0'), packageAdd('9.3.0')].join('\n');
173
- expect(detectReleaseVersion(patch)).toBeNull();
174
- });
175
-
176
- it('ignores removed lines (the old version) and reads only the added one', () => {
177
- const patch = ['- "version": "9.1.0",', packageAdd('9.2.0'), changelogAdd('9.2.0')].join('\n');
178
- expect(detectReleaseVersion(patch)).toBe('9.2.0');
179
- });
180
- });
181
-
182
- describe('pickPreviousTag', () => {
183
- it('picks the highest tag strictly below the release version', () => {
184
- expect(pickPreviousTag('9.2.0', ['9.0.0', '9.1.0', '9.2.0'])).toBe('9.1.0');
185
- });
186
- it('handles a v-prefixed tag naming convention', () => {
187
- expect(pickPreviousTag('9.2.0', ['v9.0.0', 'v9.1.0'])).toBe('v9.1.0');
188
- });
189
- it('returns null when no tag is strictly below the version', () => {
190
- expect(pickPreviousTag('9.2.0', ['9.2.0', '9.3.0'])).toBeNull();
191
- expect(pickPreviousTag('9.2.0', [])).toBeNull();
192
- });
193
- it('ignores non-semver tags (branch-backup names etc.) instead of crashing', () => {
194
- expect(
195
- pickPreviousTag('9.2.0', [
196
- 'backup/pre-rebase-augment-limit-fit',
197
- '9.1.0',
198
- 'local-squashed-tip-2026-05-18',
199
- ]),
200
- ).toBe('9.1.0');
201
- });
202
- });
203
-
204
- describe('buildPlan — release-PR shape (PR #957 reproduction)', () => {
205
- function git(root: string, ...args: string[]) {
206
- return spawnSync('git', args, {
207
- cwd: root,
208
- encoding: 'utf8',
209
- env: {
210
- ...process.env,
211
- GIT_AUTHOR_NAME: 'T',
212
- GIT_AUTHOR_EMAIL: 't@e.test',
213
- GIT_COMMITTER_NAME: 'T',
214
- GIT_COMMITTER_EMAIL: 't@e.test',
215
- },
216
- });
217
- }
218
- function write(root: string, rel: string, content: string): void {
219
- const full = path.join(root, rel);
220
- fs.mkdirSync(path.dirname(full), { recursive: true });
221
- fs.writeFileSync(full, content, 'utf-8');
222
- }
223
- function mkTmp(): string {
224
- return fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'srg-')));
225
- }
226
-
227
- let root: string | undefined;
228
- afterEach(() => {
229
- if (root) fs.rmSync(root, { recursive: true, force: true });
230
- root = undefined;
231
- });
232
-
233
- it('release mode sees the pre-cut feature file; the packaging diff alone does not (PR #957 shape)', () => {
234
- root = mkTmp();
235
- git(root, 'init', '-q', '-b', 'main');
236
- write(root, 'package.json', '{\n "name": "x",\n "version": "9.0.0"\n}\n');
237
- write(root, 'CHANGELOG.md', '# Changelog\n\n## [Unreleased]\n');
238
- git(root, 'add', '-A');
239
- git(root, 'commit', '-q', '-m', 'baseline');
240
- git(root, 'tag', '9.1.0'); // the previous release tag
241
-
242
- // The feature merges into main BEFORE the release cut — the PR #957 shape.
243
- write(root, 'feature.txt', 'new cross-source-consistency rule content\n');
244
- git(root, 'add', '-A');
245
- git(root, 'commit', '-q', '-m', 'feat: cross-source-consistency');
246
-
247
- // Release branch cut from main's current tip — no divergence yet, so
248
- // main...release-branch only shows the release-cut commit below.
249
- git(root, 'checkout', '-q', '-b', 'release-branch');
250
- write(
251
- root,
252
- 'CHANGELOG.md',
253
- '# Changelog\n\n## [Unreleased]\n\n' +
254
- '## [9.2.0](https://github.com/event4u-app/agent-config/compare/9.1.0...9.2.0) (2026-07-14)\n',
255
- );
256
- write(root, 'package.json', '{\n "name": "x",\n "version": "9.2.0"\n}\n');
257
- git(root, 'add', '-A');
258
- git(root, 'commit', '-q', '-m', 'chore(release): 9.2.0');
259
-
260
- const plan = buildPlan('main', root);
261
-
262
- expect(plan.release?.version).toBe('9.2.0');
263
- expect(plan.release?.previousTag).toBe('9.1.0');
264
- // The packaging diff (main...HEAD) alone does NOT show the pre-cut
265
- // feature — the exact false-advisory shape PR #957 hit.
266
- expect(plan.release?.packagingFiles).not.toContain('feature.txt');
267
- expect(plan.release?.packagingFiles).toEqual(
268
- expect.arrayContaining(['CHANGELOG.md', 'package.json']),
269
- );
270
- // Release mode's actual analysis range (previousTag...HEAD) DOES
271
- // include it — this is what stops "feature not in diff" recurring.
272
- expect(plan.files).toContain('feature.txt');
273
- expect(plan.analysisBase).toBe('9.1.0');
274
- });
275
-
276
- it('a normal feature PR (no changelog/version bump) uses the unchanged base', () => {
277
- root = mkTmp();
278
- git(root, 'init', '-q', '-b', 'main');
279
- write(root, 'package.json', '{\n "name": "x",\n "version": "9.1.0"\n}\n');
280
- write(root, 'CHANGELOG.md', '# Changelog\n\n## [Unreleased]\n');
281
- git(root, 'add', '-A');
282
- git(root, 'commit', '-q', '-m', 'baseline');
283
- git(root, 'tag', '9.1.0');
284
-
285
- git(root, 'checkout', '-q', '-b', 'feature-branch');
286
- write(root, 'feature.txt', 'some feature\n');
287
- git(root, 'add', '-A');
288
- git(root, 'commit', '-q', '-m', 'feat: add feature');
289
-
290
- const plan = buildPlan('main', root);
291
-
292
- expect(plan.release).toBeUndefined();
293
- expect(plan.analysisBase).toBe('main');
294
- expect(plan.files).toContain('feature.txt');
295
- });
296
- });
@@ -1,43 +0,0 @@
1
- /**
2
- * Unit tests for the host-facing capability advertisement.
3
- *
4
- * The `configRoot` and `embed` capabilities must appear in the
5
- * `--version --json` readout (and, via the same module, `GET /api/v1/ping`)
6
- * so a spawner can feature-detect support before relying on either.
7
- */
8
- import { describe, expect, it } from 'vitest';
9
- import { CAPABILITIES, buildVersionReadout } from './capabilities.js';
10
-
11
- describe('capabilities', () => {
12
- it('advertises configRoot support', () => {
13
- expect(CAPABILITIES.configRoot).toBe(true);
14
- });
15
-
16
- it('advertises the embed contract (reciprocal-ecosystem Phase 3)', () => {
17
- expect(CAPABILITIES.embed).toEqual({
18
- supported: true,
19
- version: 1,
20
- features: ['theme', 'deepLink'],
21
- });
22
- });
23
-
24
- it('does NOT advertise the accent feature (v2, not v1)', () => {
25
- expect(CAPABILITIES.embed.features).not.toContain('accent');
26
- });
27
-
28
- it('buildVersionReadout carries the version and the full capability block', () => {
29
- const readout = buildVersionReadout('9.7.0');
30
- expect(readout).toEqual({
31
- version: '9.7.0',
32
- capabilities: {
33
- configRoot: true,
34
- embed: { supported: true, version: 1, features: ['theme', 'deepLink'] },
35
- },
36
- });
37
- });
38
-
39
- it('buildVersionReadout copies capabilities (no shared mutable reference)', () => {
40
- const readout = buildVersionReadout('1.2.3');
41
- expect(readout.capabilities).not.toBe(CAPABILITIES);
42
- });
43
- });