@event4u/agent-config 14.11.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 (350) 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 +156 -538
  5. package/README.md +1 -1
  6. package/dist/agent-src/contexts/execution/evidence-discipline.md +26 -0
  7. package/dist/agent-src/skills/code-refactoring/SKILL.md +45 -1
  8. package/dist/agent-src/skills/code-review/SKILL.md +65 -6
  9. package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
  10. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +8 -1
  11. package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
  12. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +29 -12
  13. package/dist/agent-src/skills/skill-writing/references/procedure.md +24 -2
  14. package/dist/agent-src/skills/storybook-workshop/SKILL.md +9 -0
  15. package/dist/agent-src/skills/ui-component-architect/SKILL.md +8 -0
  16. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  17. package/dist/cli-delegate/{chunk-L43NCYPB.js → chunk-JCW7ZLHK.js} +5 -0
  18. package/dist/cli-delegate/{chunk-236PNQZK.js → chunk-JJA2QEWA.js} +1 -1
  19. package/dist/cli-delegate/cmd_export.js +2 -2
  20. package/dist/cli-delegate/cmd_prune.js +2 -2
  21. package/dist/cli-delegate/cmd_settings_migrate.js +2 -2
  22. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  23. package/dist/cli-delegate/cmd_sync.js +2 -2
  24. package/dist/cli-delegate/cmd_uninstall.js +2 -2
  25. package/dist/cli-delegate/cmd_validate.js +2 -2
  26. package/dist/discovery/deprecation-report.md +1 -1
  27. package/dist/discovery/discovery-manifest.json +10 -10
  28. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  29. package/dist/discovery/discovery-manifest.summary.md +1 -1
  30. package/dist/discovery/dormancy-report.md +1 -1
  31. package/dist/discovery/orphan-report.md +1 -1
  32. package/dist/discovery/packs.json +2 -2
  33. package/dist/discovery/trust-report.md +1 -1
  34. package/dist/discovery/workspaces.json +2 -2
  35. package/dist/hooks/dispatch.js +1081 -879
  36. package/dist/install/install.mjs +5 -0
  37. package/dist/mcp/registry-manifest.json +2 -2
  38. package/dist/mcp/server.json +2 -2
  39. package/dist/server/schemas/settings.js +3 -0
  40. package/docs/contracts/settings-classes.md +24 -4
  41. package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
  42. package/docs/guidelines/code-clarity.md +21 -0
  43. package/docs/guidelines/redundancy-taxonomy.md +180 -0
  44. package/package.json +6 -2
  45. package/src/config/agent-settings.template.yml +16 -0
  46. package/src/config/budgets.yml +19 -0
  47. package/src/config/ci-local-parity.yml +15 -0
  48. package/src/config/discovery/prompt-patterns.yml +56 -0
  49. package/src/config/estate-count-budget.json +8 -3
  50. package/src/config/gate-coverage.yml +191 -6
  51. package/src/config/gate-violation-baselines.json +3 -3
  52. package/src/config/pack-size-budget.json +39 -12
  53. package/src/config/preamble-payload-budget.json +97 -71
  54. package/src/config/routing-coverage-seed.json +29 -0
  55. package/src/config/suggestion-capture.json +28 -0
  56. package/src/config/surface-matrix.yml +21 -2
  57. package/src/config/web-launch-readiness.json +188 -0
  58. package/src/scripts/_lib/gate_baseline.ts +150 -1
  59. package/src/scripts/_lib/skill_estate.ts +115 -0
  60. package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
  61. package/src/scripts/check_bundle_path_leakage.ts +162 -7
  62. package/src/scripts/check_command_examples.ts +557 -0
  63. package/src/scripts/check_estate_count.ts +122 -3
  64. package/src/scripts/check_preamble_payload_budget.ts +30 -3
  65. package/src/scripts/check_routing_coverage.ts +352 -0
  66. package/src/scripts/check_score_contract.ts +505 -0
  67. package/src/scripts/check_skill_admissions.ts +514 -0
  68. package/src/scripts/check_web_launch_readiness.ts +705 -0
  69. package/src/scripts/description_route_check.ts +494 -0
  70. package/src/scripts/hook_manifest.json +1 -1
  71. package/src/scripts/hook_manifest.yaml +29 -2
  72. package/src/scripts/hooks/concern_registry.ts +2 -0
  73. package/src/scripts/hooks/suggestion_capture_hook.ts +368 -0
  74. package/src/scripts/lint_budget_ownership.ts +54 -4
  75. package/src/scripts/lint_skill_trigger_corpus.ts +349 -0
  76. package/src/scripts/pack_install_smoke.ts +363 -0
  77. package/src/scripts/pr_conflict_census.ts +187 -0
  78. package/src/scripts/report_pack_delta.ts +204 -0
  79. package/src/scripts/select_analysis_mode.ts +112 -0
  80. package/src/scripts/sync_pr_branch.ts +40 -1
  81. package/src/server/schemas/settings.ts +5 -0
  82. package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
  83. package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
  84. package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
  85. package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +0 -17
  86. package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
  87. package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
  88. package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
  89. package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
  90. package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
  91. package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
  92. package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
  93. package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
  94. package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
  95. package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
  96. package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
  97. package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
  98. package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
  99. package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
  100. package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
  101. package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
  102. package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
  103. package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
  104. package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
  105. package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
  106. package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
  107. package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
  108. package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
  109. package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
  110. package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
  111. package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
  112. package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
  113. package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
  114. package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
  115. package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
  116. package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
  117. package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
  118. package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
  119. package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
  120. package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
  121. package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
  122. package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
  123. package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
  124. package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
  125. package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
  126. package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
  127. package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
  128. package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -67
  129. package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
  130. package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
  131. package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
  132. package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
  133. package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
  134. package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
  135. package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
  136. package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
  137. package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
  138. package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
  139. package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
  140. package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
  141. package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
  142. package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
  143. package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
  144. package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
  145. package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
  146. package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
  147. package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
  148. package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
  149. package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +0 -17
  150. package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
  151. package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
  152. package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
  153. package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
  154. package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
  155. package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
  156. package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
  157. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
  158. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
  159. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
  160. package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
  161. package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
  162. package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
  163. package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
  164. package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
  165. package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +0 -17
  166. package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
  167. package/dist/agent-src/skills/operational-readiness/evals/triggers.json +0 -17
  168. package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
  169. package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
  170. package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
  171. package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
  172. package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
  173. package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
  174. package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
  175. package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
  176. package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
  177. package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
  178. package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
  179. package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
  180. package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
  181. package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
  182. package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
  183. package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
  184. package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
  185. package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
  186. package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
  187. package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
  188. package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
  189. package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
  190. package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
  191. package/dist/agent-src/skills/server-hardening/evals/triggers.json +0 -17
  192. package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
  193. package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
  194. package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +0 -17
  195. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
  196. package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
  197. package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
  198. package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
  199. package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
  200. package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
  201. package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
  202. package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
  203. package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
  204. package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
  205. package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
  206. package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
  207. package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
  208. package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
  209. package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
  210. package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
  211. package/dist/agent-src/skills/workspace-link/evals/triggers.json +0 -17
  212. package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
  213. package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
  214. package/dist/cli/agent-config.js.map +0 -1
  215. package/dist/cli/bash/runBash.js.map +0 -1
  216. package/dist/cli/commands/commands.js.map +0 -1
  217. package/dist/cli/commands/config.js.map +0 -1
  218. package/dist/cli/commands/doctorShell.js.map +0 -1
  219. package/dist/cli/commands/mcpServer.js.map +0 -1
  220. package/dist/cli/commands/packs.js.map +0 -1
  221. package/dist/cli/commands/profiles.js.map +0 -1
  222. package/dist/cli/commands/recordTriggerEval.js.map +0 -1
  223. package/dist/cli/commands/rtkDetect.js.map +0 -1
  224. package/dist/cli/commands/settings.js.map +0 -1
  225. package/dist/cli/commands/uiAudit.js.map +0 -1
  226. package/dist/cli/commands/uiRender.js.map +0 -1
  227. package/dist/cli/commands/uiServe.js.map +0 -1
  228. package/dist/cli/commands/versions.js.map +0 -1
  229. package/dist/cli/commands/workspaces.js.map +0 -1
  230. package/dist/cli/configRoot.js.map +0 -1
  231. package/dist/cli/discovery/loadManifest.js.map +0 -1
  232. package/dist/cli/firstRunNotice.js.map +0 -1
  233. package/dist/cli/help.js.map +0 -1
  234. package/dist/cli/initRouting.js.map +0 -1
  235. package/dist/cli/log/logger.js.map +0 -1
  236. package/dist/cli/main.js.map +0 -1
  237. package/dist/cli/mcp/content.js.map +0 -1
  238. package/dist/cli/mcp/dispatch.js.map +0 -1
  239. package/dist/cli/mcp/stdio.js.map +0 -1
  240. package/dist/cli/paths.js.map +0 -1
  241. package/dist/cli/python/knowledge_ingest.js.map +0 -1
  242. package/dist/cli/python/workspace_analytics.js.map +0 -1
  243. package/dist/cli/python/workspace_crypto.js.map +0 -1
  244. package/dist/cli/python/workspace_documents.js.map +0 -1
  245. package/dist/cli/python/workspace_drive.js.map +0 -1
  246. package/dist/cli/python/workspace_drive_health.js.map +0 -1
  247. package/dist/cli/python/workspace_explain.js.map +0 -1
  248. package/dist/cli/python/workspace_hosts.js.map +0 -1
  249. package/dist/cli/python/workspace_inbox.js.map +0 -1
  250. package/dist/cli/python/workspace_render.js.map +0 -1
  251. package/dist/cli/python/workspace_roles.js.map +0 -1
  252. package/dist/cli/python/workspace_secrets.js.map +0 -1
  253. package/dist/cli/python/workspace_sessions.js.map +0 -1
  254. package/dist/cli/python/workspace_skills.js.map +0 -1
  255. package/dist/cli/registry.js.map +0 -1
  256. package/dist/install/agentSwitchDetection.js.map +0 -1
  257. package/dist/install/agentSwitchProfile.js.map +0 -1
  258. package/dist/install/atomic.js.map +0 -1
  259. package/dist/install/claudePathsPlan.js.map +0 -1
  260. package/dist/install/conflict.js.map +0 -1
  261. package/dist/install/detect.js.map +0 -1
  262. package/dist/install/emit_host_rules_cli.js.map +0 -1
  263. package/dist/install/globalRuleLayers.js.map +0 -1
  264. package/dist/install/hostLayerFingerprint.js.map +0 -1
  265. package/dist/install/partitionEligibility.js.map +0 -1
  266. package/dist/install/paths.js.map +0 -1
  267. package/dist/install/plan.js.map +0 -1
  268. package/dist/install/preflight.js.map +0 -1
  269. package/dist/install/rtkDetection.js.map +0 -1
  270. package/dist/install/ruleInScope.js.map +0 -1
  271. package/dist/install/ruleLayerPartition.js.map +0 -1
  272. package/dist/install/rule_scope.js.map +0 -1
  273. package/dist/install/rule_scope_cli.js.map +0 -1
  274. package/dist/install/selectedTools.js.map +0 -1
  275. package/dist/install/toolDetection.js.map +0 -1
  276. package/dist/install/txlog.js.map +0 -1
  277. package/dist/install/types.js.map +0 -1
  278. package/dist/install/wizard-plan.js.map +0 -1
  279. package/dist/install/wizardDismissals.js.map +0 -1
  280. package/dist/scripts/_lib/agent_settings.js.map +0 -1
  281. package/dist/scripts/_lib/agent_src.js.map +0 -1
  282. package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
  283. package/dist/scripts/_lib/claude_plugin.js.map +0 -1
  284. package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
  285. package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
  286. package/dist/scripts/_lib/environment_detector.js.map +0 -1
  287. package/dist/scripts/_lib/host_launch.js.map +0 -1
  288. package/dist/scripts/_lib/install_layout.js.map +0 -1
  289. package/dist/scripts/_lib/installed_lock.js.map +0 -1
  290. package/dist/scripts/_lib/lean_projection_mode.js.map +0 -1
  291. package/dist/scripts/_lib/model_tier.js.map +0 -1
  292. package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
  293. package/dist/scripts/_lib/scoped_projection.js.map +0 -1
  294. package/dist/scripts/_lib/script_output.js.map +0 -1
  295. package/dist/scripts/_lib/spawn_env.js.map +0 -1
  296. package/dist/scripts/_lib/surface_tiers.js.map +0 -1
  297. package/dist/scripts/_lib/token_count.js.map +0 -1
  298. package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
  299. package/dist/scripts/_lib/ui_surface.js.map +0 -1
  300. package/dist/scripts/_lib/user_global_paths.js.map +0 -1
  301. package/dist/scripts/ai_council/modes.js.map +0 -1
  302. package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
  303. package/dist/scripts/condense.js.map +0 -1
  304. package/dist/scripts/project_thin_rules.js.map +0 -1
  305. package/dist/server/app.js.map +0 -1
  306. package/dist/server/io/atomicMultiWrite.js.map +0 -1
  307. package/dist/server/io/atomicWrite.js.map +0 -1
  308. package/dist/server/io/sharedWriteCheck.js.map +0 -1
  309. package/dist/server/io/substituteTemplate.js.map +0 -1
  310. package/dist/server/io/yamlIO.js.map +0 -1
  311. package/dist/server/nicknameResolver.js.map +0 -1
  312. package/dist/server/port.js.map +0 -1
  313. package/dist/server/routes/discovery.js.map +0 -1
  314. package/dist/server/routes/install.js.map +0 -1
  315. package/dist/server/routes/ping.js.map +0 -1
  316. package/dist/server/routes/schema.js.map +0 -1
  317. package/dist/server/routes/settings.js.map +0 -1
  318. package/dist/server/routes/settingsChanges.js.map +0 -1
  319. package/dist/server/routes/userMd.js.map +0 -1
  320. package/dist/server/routes/wizard.js.map +0 -1
  321. package/dist/server/routes/workspace.js.map +0 -1
  322. package/dist/server/schemas/settings.js.map +0 -1
  323. package/dist/server/serverInfo.js.map +0 -1
  324. package/dist/server/token.js.map +0 -1
  325. package/dist/server/writeRoot.js.map +0 -1
  326. package/dist/shared/capabilities.js.map +0 -1
  327. package/dist/shared/interactiveContext.js.map +0 -1
  328. package/dist/shared/nicknamePrefill.js.map +0 -1
  329. package/dist/shared/settingsAsks.js.map +0 -1
  330. package/dist/shared/settingsCarveOut.js.map +0 -1
  331. package/dist/shared/settingsClasses.js.map +0 -1
  332. package/dist/shared/settingsConsent.js.map +0 -1
  333. package/dist/shared/settingsSurface.js.map +0 -1
  334. package/dist/shared/skillRanking.js.map +0 -1
  335. package/dist/shared/userMd/formAdapter.js.map +0 -1
  336. package/dist/shared/userMd/schema.js.map +0 -1
  337. package/dist/shared/userMd/utils.js.map +0 -1
  338. package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
  339. package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
  340. package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
  341. package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
  342. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
  343. package/src/scripts/_lib/secret_detector.test.ts +0 -108
  344. package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
  345. package/src/scripts/_lib/ui_authority.test.ts +0 -251
  346. package/src/scripts/_lib/untrusted_content.test.ts +0 -175
  347. package/src/scripts/check_secret_leak.test.ts +0 -90
  348. package/src/scripts/design_slop_rules.test.ts +0 -246
  349. package/src/scripts/self_review_gate.test.ts +0 -296
  350. package/src/shared/capabilities.test.ts +0 -43
@@ -0,0 +1,349 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * `lint_skill_trigger_corpus` — the routing-matrix corpus DISCIPLINE, applied
4
+ * to the skill corpus that already exists.
5
+ *
6
+ * `road-to-routing-assurance` Phase 2.1, as re-scoped by the AI council
7
+ * (2/2 convergent, recorded at the step): the roadmap's literal text said "one
8
+ * YAML per skill", which would have created a THIRD corpus surface next to the
9
+ * 74 `queries`-shaped and 2 `should_trigger`-shaped JSON files already in the
10
+ * tree. The step's *verify* condition is format-agnostic — "a corpus file
11
+ * failing the discipline is rejected by a schema check, not by review" — so the
12
+ * discipline is enforced on the existing JSON and the amendment is recorded
13
+ * rather than performed silently.
14
+ *
15
+ * ## Three separate contracts, and this gate owns exactly one
16
+ *
17
+ * The council's sharpest point: serialization, case semantics, and coverage are
18
+ * three different questions and choosing JSON answers only the first.
19
+ *
20
+ * - **Coverage** — how many skills have a corpus at all — is
21
+ * `check_routing_coverage`'s ratio, and stays there.
22
+ * - **Discipline** — is each covered skill's corpus adequate — is this gate.
23
+ * - **Semantics** — is a `trigger: false` case a genuine NEAR-MISS rather
24
+ * than an unrelated negative — is NOT machine-decidable and this gate does
25
+ * not pretend otherwise. It counts negatives; whether they are near enough
26
+ * to be informative stays a human read, and saying so is cheaper than a
27
+ * heuristic that would be wrong quietly.
28
+ *
29
+ * ## Why language is metadata, never detection
30
+ *
31
+ * The discipline asks for at least one German positive. A gate that *detected*
32
+ * German would be a heuristic in a file called a schema check: it would pass a
33
+ * German-looking English sentence and fail a short German one, and its
34
+ * failures would be unactionable. So German is declared — `"language": "de"`
35
+ * on the case — and declaration is checked. Forward-only, because zero of the
36
+ * 76 existing files carry the field: requiring it everywhere today would red
37
+ * 76 files for a field that did not exist when they were written.
38
+ *
39
+ * ## Forward-only, in two different senses
40
+ *
41
+ * The COUNT discipline (>=3 positives, >=2 near-misses) applies to every file
42
+ * today: exactly two files fail it, and both are listed as grandfathered by
43
+ * name rather than by a numeric baseline, so a third failure cannot hide inside
44
+ * a count. The LANGUAGE discipline applies only to files the diff adds or
45
+ * changes.
46
+ *
47
+ * Exit codes: 0 = clean · 1 = a discipline violation · 2 = dead scope.
48
+ */
49
+ import { execFileSync } from 'node:child_process';
50
+ import * as fs from 'node:fs';
51
+ import * as path from 'node:path';
52
+ import process from 'node:process';
53
+ import { fileURLToPath } from 'node:url';
54
+
55
+ import { GateLedger } from './_lib/gate_ledger.js';
56
+ import { type SelfTestCase, runGateCli, runSelfTest } from './_lib/gate_self_test.js';
57
+ import { DeadScopeError, reportScanned } from './_lib/scan_scope.js';
58
+
59
+ const HERE = fileURLToPath(import.meta.url);
60
+ const REAL_REPO_ROOT = path.resolve(path.dirname(HERE), '..', '..');
61
+ const REPO_ROOT = process.env['LINT_SKILL_TRIGGER_CORPUS_ROOT'] ?? REAL_REPO_ROOT;
62
+
63
+ export const MIN_POSITIVES = 3;
64
+ export const MIN_NEAR_MISSES = 2;
65
+
66
+ /**
67
+ * The two corpus files that predate the discipline, named rather than counted.
68
+ *
69
+ * A numeric baseline would let a third failure arrive while the number stayed
70
+ * put if one of these were fixed in the same change. Names cannot do that.
71
+ */
72
+ export const GRANDFATHERED = new Set(['brand-asset-generation', 'estimate-ticket']);
73
+
74
+ export interface CorpusStats {
75
+ unit: string;
76
+ positives: number;
77
+ nearMisses: number;
78
+ germanPositives: number;
79
+ /** True when at least one case declares a language at all. */
80
+ declaresLanguage: boolean;
81
+ }
82
+
83
+ export interface Violation {
84
+ unit: string;
85
+ rule: 'positives' | 'near-misses' | 'german' | 'malformed';
86
+ message: string;
87
+ }
88
+
89
+ interface RawCase {
90
+ q?: string;
91
+ trigger?: boolean;
92
+ language?: string;
93
+ }
94
+
95
+ /** Read one corpus file into counts, across both shapes that exist. */
96
+ export function statsFor(unit: string, file: string): CorpusStats {
97
+ const doc = JSON.parse(fs.readFileSync(file, 'utf-8')) as {
98
+ queries?: RawCase[];
99
+ should_trigger?: string[];
100
+ should_not_trigger?: string[];
101
+ };
102
+ const queries = doc.queries ?? [];
103
+ let positives = queries.filter((q) => q.trigger === true).length;
104
+ let nearMisses = queries.filter((q) => q.trigger === false).length;
105
+ positives += (doc.should_trigger ?? []).length;
106
+ nearMisses += (doc.should_not_trigger ?? []).length;
107
+ return {
108
+ unit,
109
+ positives,
110
+ nearMisses,
111
+ germanPositives: queries.filter((q) => q.trigger === true && q.language === 'de').length,
112
+ declaresLanguage: queries.some((q) => typeof q.language === 'string'),
113
+ };
114
+ }
115
+
116
+ export function judge(s: CorpusStats, requireLanguage: boolean): Violation[] {
117
+ const out: Violation[] = [];
118
+ if (GRANDFATHERED.has(s.unit)) return out;
119
+ if (s.positives < MIN_POSITIVES) {
120
+ out.push({
121
+ unit: s.unit,
122
+ rule: 'positives',
123
+ message: `${String(s.positives)} positive(s), the discipline asks for ${String(MIN_POSITIVES)}`,
124
+ });
125
+ }
126
+ if (s.nearMisses < MIN_NEAR_MISSES) {
127
+ out.push({
128
+ unit: s.unit,
129
+ rule: 'near-misses',
130
+ message: `${String(s.nearMisses)} near-miss(es), the discipline asks for ${String(MIN_NEAR_MISSES)}`,
131
+ });
132
+ }
133
+ if (requireLanguage && s.germanPositives < 1) {
134
+ out.push({
135
+ unit: s.unit,
136
+ rule: 'german',
137
+ message:
138
+ 'no positive declares `"language": "de"`. Declared, never detected — ' +
139
+ 'a detector would pass German-looking English and fail short German',
140
+ });
141
+ }
142
+ return out;
143
+ }
144
+
145
+ /** Corpus files the diff added or modified, relative to a base ref. */
146
+ export function changedUnits(root: string, base: string): Set<string> {
147
+ let out = '';
148
+ try {
149
+ out = execFileSync('git', ['diff', '--name-only', `${base}...HEAD`], {
150
+ cwd: root,
151
+ encoding: 'utf-8',
152
+ // Silenced deliberately: outside a repo (a self-test fixture, a
153
+ // tarball install) git prints its whole usage text to stderr, and
154
+ // a gate that dumps a manual page on a path it already handles is
155
+ // noise a reader has to learn to ignore.
156
+ stdio: ['ignore', 'pipe', 'ignore'],
157
+ });
158
+ } catch {
159
+ return new Set();
160
+ }
161
+ const units = new Set<string>();
162
+ for (const line of out.split('\n')) {
163
+ const m = /^src\/skills\/([^/]+)\/evals\/triggers\.json$/.exec(line.trim());
164
+ if (m?.[1] !== undefined) units.add(m[1]);
165
+ }
166
+ return units;
167
+ }
168
+
169
+ export interface Result {
170
+ violations: Violation[];
171
+ scanned: number;
172
+ ledger: GateLedger;
173
+ }
174
+
175
+ export function evaluate(root = REPO_ROOT, base = 'origin/main'): Result {
176
+ const dir = path.join(root, 'src', 'skills');
177
+ let entries: fs.Dirent[];
178
+ try {
179
+ entries = fs.readdirSync(dir, { withFileTypes: true });
180
+ } catch {
181
+ throw new DeadScopeError(
182
+ 'lint_skill_trigger_corpus',
183
+ 'src/skills is unreadable — a corpus gate with no corpus passes every tree.',
184
+ );
185
+ }
186
+ const changed = changedUnits(root, base);
187
+ const ledger = new GateLedger('lint_skill_trigger_corpus');
188
+ const violations: Violation[] = [];
189
+ let scanned = 0;
190
+ for (const e of entries) {
191
+ if (!e.isDirectory()) continue;
192
+ const file = path.join(dir, e.name, 'evals', 'triggers.json');
193
+ if (!fs.existsSync(file)) continue;
194
+ scanned += 1;
195
+ ledger.plan(e.name);
196
+ let own: Violation[];
197
+ try {
198
+ own = judge(statsFor(e.name, file), changed.has(e.name));
199
+ } catch {
200
+ own = [{ unit: e.name, rule: 'malformed', message: 'is not parseable JSON' }];
201
+ }
202
+ if (own.length === 0) ledger.complete(e.name);
203
+ else ledger.fail(e.name, own.map((v) => `[${v.rule}] ${v.message}`).join(' · '));
204
+ violations.push(...own);
205
+ }
206
+ if (scanned === 0) {
207
+ throw new DeadScopeError(
208
+ 'lint_skill_trigger_corpus',
209
+ 'zero corpus files found under src/skills/*/evals/triggers.json — 76 exist ' +
210
+ 'in the shipped tree, so an empty scan is a moved root, not a clean one.',
211
+ );
212
+ }
213
+ return { violations, scanned, ledger };
214
+ }
215
+
216
+ export function selfTest(): number {
217
+ const os = process.env['TMPDIR'] ?? '/tmp';
218
+ const tmp = fs.mkdtempSync(path.join(os, 'lstc-'));
219
+ const mkRoot = (unit: string, body: unknown): string => {
220
+ const root = fs.mkdtempSync(path.join(tmp, 'repo-'));
221
+ const d = path.join(root, 'src', 'skills', unit, 'evals');
222
+ fs.mkdirSync(d, { recursive: true });
223
+ fs.writeFileSync(path.join(d, 'triggers.json'), JSON.stringify(body));
224
+ return root;
225
+ };
226
+ const run = (root: string): number => {
227
+ process.env['LINT_SKILL_TRIGGER_CORPUS_ROOT'] = root;
228
+ try {
229
+ return runGateCli(REAL_REPO_ROOT, 'src/scripts/lint_skill_trigger_corpus.ts', [], root);
230
+ } finally {
231
+ delete process.env['LINT_SKILL_TRIGGER_CORPUS_ROOT'];
232
+ }
233
+ };
234
+ const good = {
235
+ queries: [
236
+ { q: 'a', trigger: true },
237
+ { q: 'b', trigger: true },
238
+ { q: 'c', trigger: true },
239
+ { q: 'd', trigger: false },
240
+ { q: 'e', trigger: false },
241
+ ],
242
+ };
243
+ const cases: SelfTestCase[] = [
244
+ {
245
+ name: 'a compliant corpus is accepted',
246
+ expect: 'accept',
247
+ run: () => run(mkRoot('probe', good)),
248
+ },
249
+ {
250
+ name: 'the should_trigger shape is read, not silently skipped',
251
+ expect: 'accept',
252
+ run: () =>
253
+ run(
254
+ mkRoot('probe', {
255
+ should_trigger: ['a', 'b', 'c'],
256
+ should_not_trigger: ['d', 'e'],
257
+ }),
258
+ ),
259
+ },
260
+ {
261
+ name: 'a grandfathered unit stays accepted at zero cases',
262
+ expect: 'accept',
263
+ run: () => run(mkRoot('estimate-ticket', { queries: [] })),
264
+ },
265
+ {
266
+ name: 'too few positives is rejected',
267
+ expect: 'reject',
268
+ run: () => run(mkRoot('probe', { queries: good.queries.slice(1) })),
269
+ },
270
+ {
271
+ name: 'too few near-misses is rejected',
272
+ expect: 'reject',
273
+ run: () => run(mkRoot('probe', { queries: good.queries.slice(0, 4) })),
274
+ },
275
+ {
276
+ name: 'a malformed corpus file is rejected, not skipped',
277
+ expect: 'reject',
278
+ run: () => {
279
+ const root = mkRoot('probe', good);
280
+ fs.writeFileSync(
281
+ path.join(root, 'src', 'skills', 'probe', 'evals', 'triggers.json'),
282
+ '{ not json',
283
+ );
284
+ return run(root);
285
+ },
286
+ },
287
+ {
288
+ name: 'a scan root with no corpus at all exits 2 rather than reporting clean',
289
+ expect: 'reject',
290
+ run: () => {
291
+ const root = fs.mkdtempSync(path.join(tmp, 'empty-'));
292
+ fs.mkdirSync(path.join(root, 'src', 'skills'), { recursive: true });
293
+ return run(root);
294
+ },
295
+ },
296
+ ];
297
+ try {
298
+ return runSelfTest({
299
+ gate: 'lint_skill_trigger_corpus',
300
+ cases,
301
+ minCases: 7,
302
+ minRejectCases: 4,
303
+ });
304
+ } finally {
305
+ fs.rmSync(tmp, { recursive: true, force: true });
306
+ }
307
+ }
308
+
309
+ export function main(argv: string[] = process.argv.slice(2), root = REPO_ROOT): number {
310
+ if (argv.includes('--self-test')) return selfTest();
311
+ const quiet = argv.includes('--quiet');
312
+ let r: Result;
313
+ try {
314
+ r = evaluate(root);
315
+ reportScanned({
316
+ gate: 'lint_skill_trigger_corpus',
317
+ scanned: r.scanned,
318
+ units: 'skill corpus file(s)',
319
+ roots: ['src/skills/*/evals/triggers.json'],
320
+ });
321
+ } catch (e) {
322
+ if (e instanceof DeadScopeError) {
323
+ process.stderr.write(`${e.message}\n`);
324
+ return 2;
325
+ }
326
+ throw e;
327
+ }
328
+ r.ledger.report(quiet ? () => undefined : process.stdout.write.bind(process.stdout));
329
+ if (r.violations.length === 0) {
330
+ process.stdout.write(
331
+ `lint_skill_trigger_corpus: ${String(r.scanned)} corpus file(s) hold the discipline ` +
332
+ `(>=${String(MIN_POSITIVES)} positives, >=${String(MIN_NEAR_MISSES)} near-misses; ` +
333
+ `${String(GRANDFATHERED.size)} grandfathered by name).\n`,
334
+ );
335
+ return 0;
336
+ }
337
+ for (const v of r.violations) {
338
+ process.stderr.write(` ${v.unit}: [${v.rule}] ${v.message}\n`);
339
+ }
340
+ process.stderr.write(
341
+ `${String(r.violations.length)} discipline violation(s). Add the missing cases — ` +
342
+ 'widening GRANDFATHERED is a defect, not a fix.\n',
343
+ );
344
+ return 1;
345
+ }
346
+
347
+ if (path.resolve(process.argv[1] ?? '') === path.resolve(HERE)) {
348
+ process.exit(main());
349
+ }