@event4u/agent-config 14.11.0 → 14.13.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 (762) 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 +368 -516
  5. package/CONTRIBUTING.md +38 -0
  6. package/CREDITS.md +135 -0
  7. package/NOTICE +13 -0
  8. package/README.md +8 -6
  9. package/dist/agent-src/commands/analyze/inbox.md +109 -2
  10. package/dist/agent-src/commands/feature/dev.md +7 -2
  11. package/dist/agent-src/commands/ghostwriter/write.md +5 -1
  12. package/dist/agent-src/commands/implement-ticket.md +1 -1
  13. package/dist/agent-src/commands/mission/upgrade.md +1 -1
  14. package/dist/agent-src/commands/orchestrate.md +2 -2
  15. package/dist/agent-src/commands/post-as/me.md +5 -1
  16. package/dist/agent-src/commands/pr/merge.md +19 -6
  17. package/dist/agent-src/commands/roadmap/process-full.md +19 -5
  18. package/dist/agent-src/commands/tdd/red.md +12 -2
  19. package/dist/agent-src/commands/work.md +1 -1
  20. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +40 -0
  21. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -2
  22. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +21 -0
  23. package/dist/agent-src/contexts/execution/evidence-discipline.md +26 -0
  24. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -0
  25. package/dist/agent-src/contexts/execution/subagent-response-contract.md +40 -0
  26. package/dist/agent-src/contexts/execution/subagent-steering.md +13 -1
  27. package/dist/agent-src/contexts/execution/terminal-states.md +96 -0
  28. package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
  29. package/dist/agent-src/rules/broken-access-control.md +4 -0
  30. package/dist/agent-src/rules/code-provenance.md +4 -0
  31. package/dist/agent-src/rules/design-fidelity.md +1 -1
  32. package/dist/agent-src/rules/domain-safety-pii.md +4 -0
  33. package/dist/agent-src/rules/domain-safety-retention.md +4 -0
  34. package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
  35. package/dist/agent-src/rules/external-code-graph-interop.md +14 -12
  36. package/dist/agent-src/rules/improve-before-implement.md +6 -8
  37. package/dist/agent-src/rules/laravel-routing.md +1 -1
  38. package/dist/agent-src/rules/lethal-trifecta-guard.md +4 -0
  39. package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
  40. package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
  41. package/dist/agent-src/rules/source-confidentiality.md +12 -34
  42. package/dist/agent-src/rules/symfony-routing.md +1 -1
  43. package/dist/agent-src/rules/token-efficiency.md +14 -0
  44. package/dist/agent-src/rules/tool-safety.md +4 -0
  45. package/dist/agent-src/rules/untrusted-input-defense.md +4 -0
  46. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
  47. package/dist/agent-src/scripts/guarded_baseline.ts +328 -0
  48. package/dist/agent-src/scripts/roadmap_set_step.ts +253 -0
  49. package/dist/agent-src/scripts/stub_queue.ts +82 -0
  50. package/dist/agent-src/scripts/stubs_due.ts +400 -0
  51. package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
  52. package/dist/agent-src/scripts/update_roadmap_progress.ts +8 -4
  53. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +17 -4
  54. package/dist/agent-src/skills/brand-audit/SKILL.md +33 -0
  55. package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -0
  56. package/dist/agent-src/skills/code-refactoring/SKILL.md +45 -1
  57. package/dist/agent-src/skills/code-review/SKILL.md +65 -6
  58. package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
  59. package/dist/agent-src/skills/database/SKILL.md +8 -0
  60. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
  61. package/dist/agent-src/skills/design-review/SKILL.md +1 -1
  62. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
  63. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +25 -2
  64. package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
  65. package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
  66. package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
  67. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
  68. package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
  69. package/dist/agent-src/skills/laravel/SKILL.md +35 -0
  70. package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
  71. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
  72. package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
  73. package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
  74. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +30 -13
  75. package/dist/agent-src/skills/skill-writing/references/procedure.md +29 -7
  76. package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
  77. package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
  78. package/dist/agent-src/skills/storybook-workshop/SKILL.md +9 -0
  79. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
  80. package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
  81. package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
  82. package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
  83. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
  84. package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
  85. package/dist/agent-src/skills/ui-component-architect/SKILL.md +53 -2
  86. package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
  87. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
  88. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  89. package/dist/agent-src/templates/roadmaps.md +97 -3
  90. package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
  91. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
  92. package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
  93. package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
  94. package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
  95. package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
  96. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
  97. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
  98. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
  99. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
  100. package/dist/cli/commands/uiAudit.js +124 -5
  101. package/dist/cli/registry.js +2 -0
  102. package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
  103. package/dist/cli-delegate/{chunk-L43NCYPB.js → chunk-4FS4WRXP.js} +10 -0
  104. package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
  105. package/dist/cli-delegate/{chunk-236PNQZK.js → chunk-AKJGUQNO.js} +466 -285
  106. package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
  107. package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
  108. package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
  109. package/dist/cli-delegate/cmd_adr_effective.js +102 -0
  110. package/dist/cli-delegate/cmd_conformance.js +42 -10
  111. package/dist/cli-delegate/cmd_doctor.js +3 -3
  112. package/dist/cli-delegate/cmd_export.js +3 -2
  113. package/dist/cli-delegate/cmd_fleet.js +2 -2
  114. package/dist/cli-delegate/cmd_handoff.js +1 -1
  115. package/dist/cli-delegate/cmd_preflight.js +2 -2
  116. package/dist/cli-delegate/cmd_prune.js +3 -2
  117. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  118. package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
  119. package/dist/cli-delegate/cmd_settings_set.js +2 -2
  120. package/dist/cli-delegate/cmd_sync.js +3 -2
  121. package/dist/cli-delegate/cmd_uninstall.js +3 -2
  122. package/dist/cli-delegate/cmd_validate.js +3 -2
  123. package/dist/discovery/deprecation-report.md +1 -1
  124. package/dist/discovery/discovery-manifest.json +62 -62
  125. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  126. package/dist/discovery/discovery-manifest.summary.md +1 -1
  127. package/dist/discovery/dormancy-report.md +1 -1
  128. package/dist/discovery/orphan-report.md +1 -1
  129. package/dist/discovery/packs.json +2 -2
  130. package/dist/discovery/trust-report.md +1 -1
  131. package/dist/discovery/workspaces.json +2 -2
  132. package/dist/hooks/dispatch.js +2413 -1087
  133. package/dist/install/claudeRuleRewrite.js +254 -0
  134. package/dist/install/detect.js +29 -16
  135. package/dist/install/detect_php_shape.js +159 -0
  136. package/dist/install/install.mjs +639 -428
  137. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  138. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  139. package/dist/mcp/registry-manifest.json +3 -3
  140. package/dist/mcp/server.json +3 -3
  141. package/dist/mcp/server.mjs +4818 -2645
  142. package/dist/server/schemas/settings.js +6 -0
  143. package/dist/ui/assets/index-D0jaCRPM.js +29 -0
  144. package/dist/ui/index.html +1 -1
  145. package/docs/MIGRATION.md +1 -1
  146. package/docs/THIRD-PARTY-NOTICES.md +25 -0
  147. package/docs/contracts/provider-lifecycle.md +1 -1
  148. package/docs/contracts/settings-classes.md +30 -4
  149. package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
  150. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
  151. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
  152. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
  153. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
  154. package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
  155. package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
  156. package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
  157. package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
  158. package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
  159. package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
  160. package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
  161. package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
  162. package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
  163. package/docs/guidelines/agent-infra/first-principles.md +2 -2
  164. package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
  165. package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
  166. package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
  167. package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
  168. package/docs/guidelines/agent-infra/layered-settings.md +10 -10
  169. package/docs/guidelines/agent-infra/memory-access.md +1 -1
  170. package/docs/guidelines/agent-infra/mental-models.md +3 -3
  171. package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
  172. package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
  173. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
  174. package/docs/guidelines/agent-infra/role-contracts.md +2 -2
  175. package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
  176. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  177. package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
  178. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
  179. package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
  180. package/docs/guidelines/agent-infra/six-hats.md +3 -3
  181. package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
  182. package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
  183. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  184. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
  185. package/docs/guidelines/augment-portability-patterns.md +6 -4
  186. package/docs/guidelines/code-clarity.md +21 -0
  187. package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
  188. package/docs/guidelines/cross-role-handoff.md +2 -2
  189. package/docs/guidelines/design-fidelity-mechanics.md +1 -1
  190. package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
  191. package/docs/guidelines/php/database.md +90 -7
  192. package/docs/guidelines/prompt-templates.md +7 -7
  193. package/docs/guidelines/redundancy-taxonomy.md +180 -0
  194. package/llms.txt +2 -2
  195. package/package.json +10 -3
  196. package/src/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
  197. package/src/agent-src/scripts/guarded_baseline.ts +328 -0
  198. package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
  199. package/src/agent-src/scripts/stub_queue.ts +82 -0
  200. package/src/agent-src/scripts/stubs_due.ts +400 -0
  201. package/src/agent-src/scripts/ticket_bundles.ts +84 -0
  202. package/src/agent-src/scripts/update_roadmap_progress.ts +8 -4
  203. package/src/agent-src/templates/scripts/check_memory.ts +258 -17
  204. package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
  205. package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
  206. package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
  207. package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
  208. package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
  209. package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
  210. package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
  211. package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
  212. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
  213. package/src/config/agent-settings.template.yml +48 -3
  214. package/src/config/assurance-capability-registry.json +21 -9
  215. package/src/config/budgets.yml +19 -0
  216. package/src/config/canonical-terms.yml +119 -0
  217. package/src/config/capability-native-outcome-bars.json +81 -0
  218. package/src/config/ci-local-parity.yml +95 -0
  219. package/src/config/discovery/prompt-patterns.yml +56 -0
  220. package/src/config/drafting-channels.yml +43 -0
  221. package/src/config/estate-count-budget.json +38 -31
  222. package/src/config/evaluator-budgets.json +14 -14
  223. package/src/config/gate-coverage.yml +731 -30
  224. package/src/config/gate-reachability-exemptions.json +21 -0
  225. package/src/config/gate-violation-baselines.json +38 -20
  226. package/src/config/harness-evolution-budget.json +25 -0
  227. package/src/config/lapsed-beta-baseline.json +96 -0
  228. package/src/config/memory-twin-verdicts.yml +129 -0
  229. package/src/config/metric-registry.yml +124 -0
  230. package/src/config/pack-size-budget.json +35 -7
  231. package/src/config/preamble-payload-budget.json +97 -71
  232. package/src/config/profiles/balanced.ini +27 -0
  233. package/src/config/profiles/full.ini +27 -0
  234. package/src/config/profiles/minimal.ini +27 -0
  235. package/src/config/publish-surface.json +9 -2
  236. package/src/config/routing-coverage-seed.json +43 -0
  237. package/src/config/rule-stub-ceilings.json +126 -112
  238. package/src/config/suggestion-capture.json +28 -0
  239. package/src/config/surface-matrix.yml +21 -2
  240. package/src/config/turnaround-budget.json +66 -0
  241. package/src/config/web-launch-readiness.json +188 -0
  242. package/src/install/claudeRuleRewrite.ts +288 -0
  243. package/src/install/detect.ts +60 -17
  244. package/src/install/detect_php_shape.ts +191 -0
  245. package/src/scripts/_cli/cmd_doctor.ts +27 -112
  246. package/src/scripts/_dispatch.bash +27 -0
  247. package/src/scripts/_lib/activation_ladder.ts +211 -0
  248. package/src/scripts/_lib/activation_states.ts +88 -0
  249. package/src/scripts/_lib/adherence_detectors.ts +143 -0
  250. package/src/scripts/_lib/arith_claims.ts +181 -0
  251. package/src/scripts/_lib/arm_ranking.ts +62 -0
  252. package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
  253. package/src/scripts/_lib/audit_field_provenance.ts +54 -0
  254. package/src/scripts/_lib/auto_dispatch.ts +32 -3
  255. package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
  256. package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
  257. package/src/scripts/_lib/candidate_proposer.ts +402 -0
  258. package/src/scripts/_lib/candidate_record.ts +601 -0
  259. package/src/scripts/_lib/capture_rate.ts +319 -0
  260. package/src/scripts/_lib/collector_denominator.ts +771 -0
  261. package/src/scripts/_lib/collector_record.ts +340 -0
  262. package/src/scripts/_lib/collector_store.ts +664 -0
  263. package/src/scripts/_lib/collector_supervision.ts +827 -0
  264. package/src/scripts/_lib/concern_estate.ts +77 -0
  265. package/src/scripts/_lib/config_chain.ts +477 -0
  266. package/src/scripts/_lib/config_cost.ts +209 -0
  267. package/src/scripts/_lib/council_settings_block.ts +6 -0
  268. package/src/scripts/_lib/curator_ops.ts +172 -0
  269. package/src/scripts/_lib/delivery_arm_experiment.ts +266 -0
  270. package/src/scripts/_lib/delivery_criticality.ts +126 -0
  271. package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
  272. package/src/scripts/_lib/empty_cycles.ts +88 -0
  273. package/src/scripts/_lib/eval_publication.ts +354 -0
  274. package/src/scripts/_lib/evaluation_vector.ts +283 -0
  275. package/src/scripts/_lib/evaluator_promotion.ts +225 -0
  276. package/src/scripts/_lib/evidence_basis.ts +118 -0
  277. package/src/scripts/_lib/exec_evidence.ts +8 -0
  278. package/src/scripts/_lib/experience_card.ts +272 -0
  279. package/src/scripts/_lib/experience_report.ts +151 -0
  280. package/src/scripts/_lib/experiment_freeze.ts +112 -0
  281. package/src/scripts/_lib/gate_baseline.ts +150 -1
  282. package/src/scripts/_lib/generated_by.ts +66 -0
  283. package/src/scripts/_lib/harness_evolution_guards.ts +229 -0
  284. package/src/scripts/_lib/hook_effect_probe.ts +141 -0
  285. package/src/scripts/_lib/host_denominator.ts +687 -0
  286. package/src/scripts/_lib/host_projection_reach.ts +157 -0
  287. package/src/scripts/_lib/ignored_blocker.ts +148 -0
  288. package/src/scripts/_lib/install_reach_checks.ts +495 -0
  289. package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
  290. package/src/scripts/_lib/judge_hygiene.ts +228 -0
  291. package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
  292. package/src/scripts/_lib/loop_guards.ts +299 -0
  293. package/src/scripts/_lib/loss_class.ts +129 -0
  294. package/src/scripts/_lib/machine_wake.ts +51 -0
  295. package/src/scripts/_lib/md_prose_lines.ts +177 -0
  296. package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
  297. package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
  298. package/src/scripts/_lib/orchestration_record.ts +253 -5
  299. package/src/scripts/_lib/outcome_envelope.ts +227 -0
  300. package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
  301. package/src/scripts/_lib/paired_stats.ts +245 -0
  302. package/src/scripts/_lib/paired_verdict.ts +226 -0
  303. package/src/scripts/_lib/prefix_stable_surfaces.ts +123 -0
  304. package/src/scripts/_lib/privacy_class.ts +47 -0
  305. package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
  306. package/src/scripts/_lib/repeated_failure.ts +105 -0
  307. package/src/scripts/_lib/repo_root.ts +111 -0
  308. package/src/scripts/_lib/review_skipped_record.ts +37 -0
  309. package/src/scripts/_lib/role_split.ts +338 -0
  310. package/src/scripts/_lib/runtime_journal.ts +1499 -0
  311. package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
  312. package/src/scripts/_lib/skill_catalogue.ts +11 -1
  313. package/src/scripts/_lib/skill_estate.ts +115 -0
  314. package/src/scripts/_lib/source_digest.ts +200 -0
  315. package/src/scripts/_lib/source_redact.ts +260 -0
  316. package/src/scripts/_lib/source_shape.ts +502 -0
  317. package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
  318. package/src/scripts/_lib/strip_comments.d.mts +8 -0
  319. package/src/scripts/_lib/strip_comments.mjs +65 -0
  320. package/src/scripts/_lib/test_red_state.ts +154 -0
  321. package/src/scripts/_lib/trigger_shift.ts +144 -0
  322. package/src/scripts/_lib/untrusted_content.ts +82 -7
  323. package/src/scripts/adoption_report.ts +1 -1
  324. package/src/scripts/adr/evidence_census.ts +1 -1
  325. package/src/scripts/adr/regenerate_index.ts +26 -2
  326. package/src/scripts/adr_cite_check.ts +164 -1
  327. package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
  328. package/src/scripts/ai_council/blind_review.ts +11 -1
  329. package/src/scripts/ai_council/clients.ts +4 -0
  330. package/src/scripts/ai_council/config.ts +3 -0
  331. package/src/scripts/ai_council/consensus.ts +28 -8
  332. package/src/scripts/ai_council/consensus_round.ts +226 -0
  333. package/src/scripts/ai_council/disagreement_signal.ts +338 -0
  334. package/src/scripts/ai_council/inline_findings.ts +340 -0
  335. package/src/scripts/ai_council/judge_position_bias.ts +197 -0
  336. package/src/scripts/ai_council/orchestrator.ts +16 -203
  337. package/src/scripts/ai_council/orchestrator_results.ts +23 -3
  338. package/src/scripts/ai_council/pricing.ts +106 -0
  339. package/src/scripts/ai_council/prompts.ts +74 -7
  340. package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
  341. package/src/scripts/ai_council/py_format.ts +14 -3
  342. package/src/scripts/ai_council/recouncil_guard.ts +293 -0
  343. package/src/scripts/ai_council/response_record.ts +50 -0
  344. package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
  345. package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
  346. package/src/scripts/asset_delivery_ledger.ts +157 -0
  347. package/src/scripts/attest_artifact.ts +193 -0
  348. package/src/scripts/audit_auto_rules.ts +2 -1
  349. package/src/scripts/audit_command_surface.ts +1 -1
  350. package/src/scripts/audit_mcp_tools.ts +2 -2
  351. package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
  352. package/src/scripts/audit_user_type_axis.ts +2 -1
  353. package/src/scripts/bench_ab_clone.ts +215 -10
  354. package/src/scripts/bench_ab_integrity.ts +119 -5
  355. package/src/scripts/bench_ab_v2_stats.ts +40 -213
  356. package/src/scripts/build_archive_index.ts +1 -1
  357. package/src/scripts/build_linear_digest.ts +1 -1
  358. package/src/scripts/build_proof.ts +11 -4
  359. package/src/scripts/build_rule_trigger_matrix.ts +1 -1
  360. package/src/scripts/build_source_digests.ts +157 -0
  361. package/src/scripts/cache_realization_report.ts +103 -0
  362. package/src/scripts/check_adr_frontmatter.ts +126 -0
  363. package/src/scripts/check_benchmark_report_fields.ts +207 -0
  364. package/src/scripts/check_beta_review_markers.ts +235 -6
  365. package/src/scripts/check_bundle_path_leakage.ts +195 -7
  366. package/src/scripts/check_claims.ts +576 -6
  367. package/src/scripts/check_command_examples.ts +557 -0
  368. package/src/scripts/check_composite_arming.ts +35 -0
  369. package/src/scripts/check_concern_admissions.ts +365 -0
  370. package/src/scripts/check_enforcement_coverage.ts +28 -0
  371. package/src/scripts/check_estate_count.ts +263 -3
  372. package/src/scripts/check_gate_reachability.ts +383 -0
  373. package/src/scripts/check_host_loadability.ts +104 -0
  374. package/src/scripts/check_loss_class_declared.ts +308 -0
  375. package/src/scripts/check_md_language.ts +15 -98
  376. package/src/scripts/check_memory_proposal.ts +18 -11
  377. package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
  378. package/src/scripts/check_no_external_sources.ts +281 -6
  379. package/src/scripts/check_pack_conformance_fixture.ts +11 -1
  380. package/src/scripts/check_pack_size.ts +59 -2
  381. package/src/scripts/check_preamble_payload_budget.ts +144 -6
  382. package/src/scripts/check_prefix_stable_mutation.ts +372 -0
  383. package/src/scripts/check_publish_surface.ts +10 -1
  384. package/src/scripts/check_references.ts +24 -1
  385. package/src/scripts/check_routing_coverage.ts +352 -0
  386. package/src/scripts/check_rule_evidence_declaration.ts +316 -0
  387. package/src/scripts/check_rule_projection_integrity.ts +14 -4
  388. package/src/scripts/check_score_contract.ts +528 -0
  389. package/src/scripts/check_skill_admissions.ts +514 -0
  390. package/src/scripts/check_static_parity.ts +285 -0
  391. package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
  392. package/src/scripts/check_suppression_hygiene.ts +15 -0
  393. package/src/scripts/check_web_launch_readiness.ts +705 -0
  394. package/src/scripts/ci_settle.ts +39 -2
  395. package/src/scripts/code_graph/build.ts +60 -3
  396. package/src/scripts/code_graph/extract.ts +44 -0
  397. package/src/scripts/code_graph/types.ts +24 -0
  398. package/src/scripts/collector_daemon.ts +714 -0
  399. package/src/scripts/config_cost_report.ts +302 -0
  400. package/src/scripts/consumer_matrix.ts +74 -1
  401. package/src/scripts/cost/budget.mjs +10 -3
  402. package/src/scripts/cost/track.mjs +10 -3
  403. package/src/scripts/council_cli.ts +37 -54
  404. package/src/scripts/description_route_check.ts +494 -0
  405. package/src/scripts/dispatch_r2_reviewer.ts +46 -5
  406. package/src/scripts/evolution_lab.ts +980 -0
  407. package/src/scripts/external_sources_denylist.json +5 -18
  408. package/src/scripts/extract_audit_patterns.ts +21 -0
  409. package/src/scripts/fold_intake.ts +12 -1
  410. package/src/scripts/gen_discovery_baseline.ts +1 -1
  411. package/src/scripts/generate_capabilities_index.ts +12 -5
  412. package/src/scripts/generate_capability_matrix.ts +3 -3
  413. package/src/scripts/generate_command_flows.ts +2 -2
  414. package/src/scripts/generate_cookbook.ts +2 -2
  415. package/src/scripts/generate_index.ts +8 -1
  416. package/src/scripts/generate_knowledge_index.ts +2 -1
  417. package/src/scripts/generate_ownership_matrix.ts +2 -1
  418. package/src/scripts/generate_pack_manifests.ts +10 -2
  419. package/src/scripts/generate_role_experiences_catalog.ts +2 -2
  420. package/src/scripts/generate_settings_reference.ts +1 -1
  421. package/src/scripts/git_authorization_hook.ts +22 -1
  422. package/src/scripts/grade_target_readiness.ts +48 -5
  423. package/src/scripts/hook_effect_doctor.ts +261 -0
  424. package/src/scripts/hook_manifest.json +1 -1
  425. package/src/scripts/hook_manifest.yaml +125 -11
  426. package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
  427. package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
  428. package/src/scripts/hooks/concern_registry.ts +6 -0
  429. package/src/scripts/hooks/dispatch_hook.ts +32 -0
  430. package/src/scripts/hooks/journal_record_hook.ts +345 -0
  431. package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
  432. package/src/scripts/hooks/run_continuation_hook.ts +44 -9
  433. package/src/scripts/hooks/shims/install.sh +61 -0
  434. package/src/scripts/hooks/shims/php +101 -0
  435. package/src/scripts/hooks/suggestion_capture_hook.ts +378 -0
  436. package/src/scripts/hot_context_hook.ts +16 -0
  437. package/src/scripts/install-hooks.sh +20 -5
  438. package/src/scripts/install.ts +17 -35
  439. package/src/scripts/inventory_frontmatter.ts +2 -1
  440. package/src/scripts/lint_adr_sweep_routing.ts +12 -0
  441. package/src/scripts/lint_budget_ownership.ts +54 -4
  442. package/src/scripts/lint_canonical_terms.ts +604 -0
  443. package/src/scripts/lint_composition_review.ts +619 -0
  444. package/src/scripts/lint_consolidation_lineage.ts +666 -0
  445. package/src/scripts/lint_eval_specs.ts +593 -0
  446. package/src/scripts/lint_hook_manifest.ts +19 -0
  447. package/src/scripts/lint_host_portability.ts +373 -0
  448. package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
  449. package/src/scripts/lint_memory_twin_parity.ts +335 -0
  450. package/src/scripts/lint_metric_consumers.ts +355 -0
  451. package/src/scripts/lint_skill_descriptions.ts +18 -1
  452. package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
  453. package/src/scripts/lint_skill_link_reach.ts +252 -0
  454. package/src/scripts/lint_skill_trigger_corpus.ts +752 -0
  455. package/src/scripts/lint_ticket_buildable.ts +17 -1
  456. package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
  457. package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
  458. package/src/scripts/measure_docs_dead_links.ts +348 -0
  459. package/src/scripts/measure_host_capture.ts +461 -0
  460. package/src/scripts/migration_status.ts +3 -3
  461. package/src/scripts/model_rule_injection.ts +60 -0
  462. package/src/scripts/orchestration_record.ts +14 -0
  463. package/src/scripts/pack_install_smoke.ts +363 -0
  464. package/src/scripts/pr_conflict_census.ts +187 -0
  465. package/src/scripts/preamble_byte_census.ts +139 -10
  466. package/src/scripts/prepack-check.mjs +4 -1
  467. package/src/scripts/probe_turnaround.ts +384 -0
  468. package/src/scripts/probe_unblocked_ask.ts +279 -0
  469. package/src/scripts/render_benchmark_md.ts +1 -1
  470. package/src/scripts/report_pack_delta.ts +204 -0
  471. package/src/scripts/rule_activation_census.ts +70 -9
  472. package/src/scripts/rule_backlinks.ts +1 -1
  473. package/src/scripts/run_lifecycle_suite.ts +208 -0
  474. package/src/scripts/run_skill_evals.ts +40 -0
  475. package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
  476. package/src/scripts/schemas/drafting-channels.schema.json +43 -0
  477. package/src/scripts/schemas/evals.schema.json +24 -1
  478. package/src/scripts/schemas/rule.schema.json +52 -1
  479. package/src/scripts/schemas/skill.schema.json +17 -2
  480. package/src/scripts/select_analysis_mode.ts +112 -0
  481. package/src/scripts/skill_overlap.ts +7 -1
  482. package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
  483. package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
  484. package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
  485. package/src/scripts/skill_usage_report.ts +2 -1
  486. package/src/scripts/stubs_due.ts +211 -0
  487. package/src/scripts/sweep_source_surfaces.ts +678 -0
  488. package/src/scripts/sync_pr_branch.ts +40 -1
  489. package/src/scripts/trigger_eval_grandfather.json +202 -222
  490. package/src/scripts/utilization_report.ts +22 -2
  491. package/src/server/schemas/settings.ts +10 -0
  492. package/src/templates/marketing-copy.yml +1 -1
  493. package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
  494. package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
  495. package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
  496. package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +0 -17
  497. package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
  498. package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
  499. package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
  500. package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
  501. package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
  502. package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
  503. package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
  504. package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
  505. package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
  506. package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
  507. package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
  508. package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
  509. package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
  510. package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
  511. package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
  512. package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
  513. package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
  514. package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
  515. package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
  516. package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
  517. package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
  518. package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
  519. package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
  520. package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
  521. package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
  522. package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
  523. package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
  524. package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
  525. package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
  526. package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
  527. package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
  528. package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
  529. package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
  530. package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
  531. package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
  532. package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
  533. package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
  534. package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
  535. package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
  536. package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
  537. package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
  538. package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
  539. package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -67
  540. package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
  541. package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
  542. package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
  543. package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
  544. package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
  545. package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
  546. package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
  547. package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
  548. package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
  549. package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
  550. package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
  551. package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
  552. package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
  553. package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
  554. package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
  555. package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
  556. package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
  557. package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
  558. package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
  559. package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
  560. package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +0 -17
  561. package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
  562. package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
  563. package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
  564. package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
  565. package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
  566. package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
  567. package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
  568. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
  569. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
  570. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
  571. package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
  572. package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
  573. package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
  574. package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
  575. package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
  576. package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +0 -17
  577. package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
  578. package/dist/agent-src/skills/operational-readiness/evals/triggers.json +0 -17
  579. package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
  580. package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
  581. package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
  582. package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
  583. package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
  584. package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
  585. package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
  586. package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
  587. package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
  588. package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
  589. package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
  590. package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
  591. package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
  592. package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
  593. package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
  594. package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
  595. package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
  596. package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
  597. package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
  598. package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
  599. package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
  600. package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
  601. package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
  602. package/dist/agent-src/skills/server-hardening/evals/triggers.json +0 -17
  603. package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
  604. package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
  605. package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +0 -17
  606. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
  607. package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
  608. package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
  609. package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
  610. package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
  611. package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
  612. package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
  613. package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
  614. package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
  615. package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
  616. package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
  617. package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
  618. package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
  619. package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
  620. package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
  621. package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
  622. package/dist/agent-src/skills/workspace-link/evals/triggers.json +0 -17
  623. package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
  624. package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
  625. package/dist/cli/agent-config.js.map +0 -1
  626. package/dist/cli/bash/runBash.js.map +0 -1
  627. package/dist/cli/commands/commands.js.map +0 -1
  628. package/dist/cli/commands/config.js.map +0 -1
  629. package/dist/cli/commands/doctorShell.js.map +0 -1
  630. package/dist/cli/commands/mcpServer.js.map +0 -1
  631. package/dist/cli/commands/packs.js.map +0 -1
  632. package/dist/cli/commands/profiles.js.map +0 -1
  633. package/dist/cli/commands/recordTriggerEval.js.map +0 -1
  634. package/dist/cli/commands/rtkDetect.js.map +0 -1
  635. package/dist/cli/commands/settings.js.map +0 -1
  636. package/dist/cli/commands/uiAudit.js.map +0 -1
  637. package/dist/cli/commands/uiRender.js.map +0 -1
  638. package/dist/cli/commands/uiServe.js.map +0 -1
  639. package/dist/cli/commands/versions.js.map +0 -1
  640. package/dist/cli/commands/workspaces.js.map +0 -1
  641. package/dist/cli/configRoot.js.map +0 -1
  642. package/dist/cli/discovery/loadManifest.js.map +0 -1
  643. package/dist/cli/firstRunNotice.js.map +0 -1
  644. package/dist/cli/help.js.map +0 -1
  645. package/dist/cli/initRouting.js.map +0 -1
  646. package/dist/cli/log/logger.js.map +0 -1
  647. package/dist/cli/main.js.map +0 -1
  648. package/dist/cli/mcp/content.js.map +0 -1
  649. package/dist/cli/mcp/dispatch.js.map +0 -1
  650. package/dist/cli/mcp/stdio.js.map +0 -1
  651. package/dist/cli/paths.js.map +0 -1
  652. package/dist/cli/python/knowledge_ingest.js.map +0 -1
  653. package/dist/cli/python/workspace_analytics.js.map +0 -1
  654. package/dist/cli/python/workspace_crypto.js.map +0 -1
  655. package/dist/cli/python/workspace_documents.js.map +0 -1
  656. package/dist/cli/python/workspace_drive.js.map +0 -1
  657. package/dist/cli/python/workspace_drive_health.js.map +0 -1
  658. package/dist/cli/python/workspace_explain.js.map +0 -1
  659. package/dist/cli/python/workspace_hosts.js.map +0 -1
  660. package/dist/cli/python/workspace_inbox.js.map +0 -1
  661. package/dist/cli/python/workspace_render.js.map +0 -1
  662. package/dist/cli/python/workspace_roles.js.map +0 -1
  663. package/dist/cli/python/workspace_secrets.js.map +0 -1
  664. package/dist/cli/python/workspace_sessions.js.map +0 -1
  665. package/dist/cli/python/workspace_skills.js.map +0 -1
  666. package/dist/cli/registry.js.map +0 -1
  667. package/dist/install/agentSwitchDetection.js.map +0 -1
  668. package/dist/install/agentSwitchProfile.js.map +0 -1
  669. package/dist/install/atomic.js.map +0 -1
  670. package/dist/install/claudePathsPlan.js.map +0 -1
  671. package/dist/install/conflict.js.map +0 -1
  672. package/dist/install/detect.js.map +0 -1
  673. package/dist/install/emit_host_rules_cli.js.map +0 -1
  674. package/dist/install/globalRuleLayers.js.map +0 -1
  675. package/dist/install/hostLayerFingerprint.js.map +0 -1
  676. package/dist/install/partitionEligibility.js.map +0 -1
  677. package/dist/install/paths.js.map +0 -1
  678. package/dist/install/plan.js.map +0 -1
  679. package/dist/install/preflight.js.map +0 -1
  680. package/dist/install/rtkDetection.js.map +0 -1
  681. package/dist/install/ruleInScope.js.map +0 -1
  682. package/dist/install/ruleLayerPartition.js.map +0 -1
  683. package/dist/install/rule_scope.js.map +0 -1
  684. package/dist/install/rule_scope_cli.js.map +0 -1
  685. package/dist/install/selectedTools.js.map +0 -1
  686. package/dist/install/toolDetection.js.map +0 -1
  687. package/dist/install/txlog.js.map +0 -1
  688. package/dist/install/types.js.map +0 -1
  689. package/dist/install/wizard-plan.js.map +0 -1
  690. package/dist/install/wizardDismissals.js.map +0 -1
  691. package/dist/scripts/_lib/agent_settings.js.map +0 -1
  692. package/dist/scripts/_lib/agent_src.js.map +0 -1
  693. package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
  694. package/dist/scripts/_lib/claude_plugin.js.map +0 -1
  695. package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
  696. package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
  697. package/dist/scripts/_lib/environment_detector.js.map +0 -1
  698. package/dist/scripts/_lib/host_launch.js.map +0 -1
  699. package/dist/scripts/_lib/install_layout.js.map +0 -1
  700. package/dist/scripts/_lib/installed_lock.js.map +0 -1
  701. package/dist/scripts/_lib/lean_projection_mode.js.map +0 -1
  702. package/dist/scripts/_lib/model_tier.js.map +0 -1
  703. package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
  704. package/dist/scripts/_lib/scoped_projection.js.map +0 -1
  705. package/dist/scripts/_lib/script_output.js.map +0 -1
  706. package/dist/scripts/_lib/spawn_env.js.map +0 -1
  707. package/dist/scripts/_lib/surface_tiers.js.map +0 -1
  708. package/dist/scripts/_lib/token_count.js.map +0 -1
  709. package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
  710. package/dist/scripts/_lib/ui_surface.js.map +0 -1
  711. package/dist/scripts/_lib/user_global_paths.js.map +0 -1
  712. package/dist/scripts/ai_council/modes.js.map +0 -1
  713. package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
  714. package/dist/scripts/condense.js.map +0 -1
  715. package/dist/scripts/project_thin_rules.js.map +0 -1
  716. package/dist/server/app.js.map +0 -1
  717. package/dist/server/io/atomicMultiWrite.js.map +0 -1
  718. package/dist/server/io/atomicWrite.js.map +0 -1
  719. package/dist/server/io/sharedWriteCheck.js.map +0 -1
  720. package/dist/server/io/substituteTemplate.js.map +0 -1
  721. package/dist/server/io/yamlIO.js.map +0 -1
  722. package/dist/server/nicknameResolver.js.map +0 -1
  723. package/dist/server/port.js.map +0 -1
  724. package/dist/server/routes/discovery.js.map +0 -1
  725. package/dist/server/routes/install.js.map +0 -1
  726. package/dist/server/routes/ping.js.map +0 -1
  727. package/dist/server/routes/schema.js.map +0 -1
  728. package/dist/server/routes/settings.js.map +0 -1
  729. package/dist/server/routes/settingsChanges.js.map +0 -1
  730. package/dist/server/routes/userMd.js.map +0 -1
  731. package/dist/server/routes/wizard.js.map +0 -1
  732. package/dist/server/routes/workspace.js.map +0 -1
  733. package/dist/server/schemas/settings.js.map +0 -1
  734. package/dist/server/serverInfo.js.map +0 -1
  735. package/dist/server/token.js.map +0 -1
  736. package/dist/server/writeRoot.js.map +0 -1
  737. package/dist/shared/capabilities.js.map +0 -1
  738. package/dist/shared/interactiveContext.js.map +0 -1
  739. package/dist/shared/nicknamePrefill.js.map +0 -1
  740. package/dist/shared/settingsAsks.js.map +0 -1
  741. package/dist/shared/settingsCarveOut.js.map +0 -1
  742. package/dist/shared/settingsClasses.js.map +0 -1
  743. package/dist/shared/settingsConsent.js.map +0 -1
  744. package/dist/shared/settingsSurface.js.map +0 -1
  745. package/dist/shared/skillRanking.js.map +0 -1
  746. package/dist/shared/userMd/formAdapter.js.map +0 -1
  747. package/dist/shared/userMd/schema.js.map +0 -1
  748. package/dist/shared/userMd/utils.js.map +0 -1
  749. package/dist/ui/assets/index-Cxgy63kz.js +0 -26
  750. package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
  751. package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
  752. package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
  753. package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
  754. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
  755. package/src/scripts/_lib/secret_detector.test.ts +0 -108
  756. package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
  757. package/src/scripts/_lib/ui_authority.test.ts +0 -251
  758. package/src/scripts/_lib/untrusted_content.test.ts +0 -175
  759. package/src/scripts/check_secret_leak.test.ts +0 -90
  760. package/src/scripts/design_slop_rules.test.ts +0 -246
  761. package/src/scripts/self_review_gate.test.ts +0 -296
  762. package/src/shared/capabilities.test.ts +0 -43
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env sh
2
+ # Container-only tooling shim — road-to-skill-ecosystem-runtime-enforcement
3
+ # Phase 1 Steps 2-4. AI council 2/2 (2026-08-25) scoped Phase 1 to THIS shim
4
+ # alone; the hook-bypass-flag and package-manager candidates are recorded as
5
+ # out of scope at `blocker: shim-scope-decision`.
6
+ #
7
+ # WHAT IT DOES. Refuses a host invocation of a tool the container-only rule
8
+ # reserves for the project container, and prints the sanctioned in-container
9
+ # form with the caller's own arguments re-quoted, so the alternative is
10
+ # directly runnable rather than a template to adapt.
11
+ #
12
+ # WHY SHELL AND NOT AN INTERPRETED RUNTIME. Startup dominates: this runs on
13
+ # every invocation of the shimmed names, most of which are legitimate, so a
14
+ # node or python start would be paid constantly to say nothing. Same reason the
15
+ # fast-pass below is a case statement rather than a parse.
16
+ #
17
+ # WHY A PATH PREPEND AND NOT A PER-TOOL-CALL HOOK. A prepend costs nothing per
18
+ # call and works for any process the session starts, including ones no hook
19
+ # surface observes. It is also session-scoped and reversible by construction --
20
+ # the installer never writes a profile.
21
+ #
22
+ # EXIT CODE. Non-zero (2) on refusal. Never 0 on a refusal: a shim that exits 0
23
+ # has told the caller nothing the caller must act on, and the recorded trap on
24
+ # this host is the opposite mistake -- an ADVISORY exit 2 read as a hard block.
25
+ # This one is not advisory; the refusal is the point.
26
+
27
+ set -eu
28
+
29
+ # --- The global kill switch (Step 7) -------------------------------------
30
+ #
31
+ # One variable disables every hook for one invocation. It is checked FIRST so
32
+ # the escape hatch cannot be shadowed by anything below, and it re-execs the
33
+ # real binary rather than exiting, so `AGENT_CONFIG_DISABLE_HOOKS=1 php -v`
34
+ # does what it says instead of merely not refusing.
35
+ #
36
+ # Finding the real binary: strip this shim's own directory out of PATH and look
37
+ # again. Without that the re-exec finds the shim and loops.
38
+ if [ "${AGENT_CONFIG_DISABLE_HOOKS:-}" = "1" ]; then
39
+ _shim_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
40
+ _clean_path=$(printf '%s' "${PATH:-}" | tr ':' '\n' | while IFS= read -r _p; do
41
+ [ -n "$_p" ] || continue
42
+ _rp=$(CDPATH= cd -- "$_p" 2>/dev/null && pwd -P) || continue
43
+ [ "$_rp" = "$_shim_dir" ] && continue
44
+ printf '%s:' "$_p"
45
+ done)
46
+ _real=$(PATH="${_clean_path%:}" command -v "$(basename -- "$0")" 2>/dev/null || true)
47
+ if [ -n "$_real" ]; then
48
+ exec "$_real" "$@"
49
+ fi
50
+ # Disabled, and there is no real binary to fall through to. Say so rather
51
+ # than exiting 0: the caller asked for the tool, not for silence.
52
+ printf '%s: hooks disabled, but no %s found outside the shim directory\n' \
53
+ "shims/php" "$(basename -- "$0")" >&2
54
+ exit 127
55
+ fi
56
+
57
+ # The basename this was invoked as. Dispatch on it so one script serves several
58
+ # names (Step 3) -- today the set is deliberately one entry wide.
59
+ INVOKED="$(basename -- "$0")"
60
+
61
+ case "$INVOKED" in
62
+ php) ;;
63
+ *)
64
+ # Invoked under a name this shim does not claim. Say so rather than
65
+ # guessing: a silent pass-through would make the shim look installed and
66
+ # inert, which is worse than an error.
67
+ printf '%s: shim invoked under an unclaimed basename %s\n' "shims/php" "$INVOKED" >&2
68
+ exit 2
69
+ ;;
70
+ esac
71
+
72
+ # --- Re-quote the received arguments -------------------------------------
73
+ #
74
+ # Single-quote each argument and escape embedded single quotes as '\'' so the
75
+ # printed line survives copy-paste through a shell unchanged. Without this a
76
+ # suggestion containing a space or a quote is a suggestion that silently does
77
+ # something else when run.
78
+ quoted=''
79
+ for arg in "$@"; do
80
+ esc=$(printf '%s' "$arg" | sed "s/'/'\\\\''/g")
81
+ quoted="$quoted '$esc'"
82
+ done
83
+
84
+ SERVICE="${AGENT_CONFIG_PHP_SERVICE:-php}"
85
+
86
+ cat >&2 <<EOF
87
+ ❌ \`$INVOKED\` was run on the HOST. This project's tooling is container-only.
88
+
89
+ Run it in the container instead:
90
+
91
+ docker compose exec -T $SERVICE $INVOKED$quoted
92
+
93
+ Why: the container-only tooling rule reserves php / artisan / composer /
94
+ phpstan / rector / ecs / phpunit for the project container, because a host
95
+ run picks up the host's PHP version and extensions and produces results
96
+ that do not match CI.
97
+
98
+ Override for one command: AGENT_CONFIG_DISABLE_HOOKS=1 $INVOKED ...
99
+ Service name: AGENT_CONFIG_PHP_SERVICE=<name> (default: php)
100
+ EOF
101
+ exit 2
@@ -0,0 +1,378 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Suggestion-block capture — a two-slot latch, counts only.
4
+ *
5
+ * ## What it measures and why it exists
6
+ *
7
+ * `command_suggester/render.ts` emits a numbered-options block with exactly one
8
+ * `Recommendation: N — …` line and the as-is option always last. Nothing records
9
+ * whether those blocks are ever *answered*, so no roadmap can cite a selection
10
+ * rate — and the model-carried alternative is measured and dead:
11
+ * `orchestration_record` captured 1 of 369 dispatches. This instrument exists so
12
+ * that figure is not repeated by construction.
13
+ *
14
+ * ## Two slots, not one — and the probe is why
15
+ *
16
+ * `road-to-suggestion-block-capture` planned a single `user_prompt_submit` hook
17
+ * reading the transcript tail. A live probe
18
+ * (`agents/evidence/analysis/suggestion-capture-probe.md`) found something
19
+ * cheaper: **`stop` carries `last_assistant_message` in the payload**, so the
20
+ * "was a block emitted" half needs no file read at all, and the turn-1 blind
21
+ * spot (`transcript_path` present but the file not yet written) does not arise.
22
+ *
23
+ * stop → detect the signature in `last_assistant_message`,
24
+ * write a latch keyed by `prompt_id`
25
+ * user_prompt_submit → CONSUME the latch, classify `prompt`, append one line
26
+ *
27
+ * ## The misclassification guard, which is the whole correctness argument
28
+ *
29
+ * A bare `1` three turns later must never read as a pick. So the latch is
30
+ * **consumed exactly once**: `user_prompt_submit` deletes it after reading, and
31
+ * a prompt arriving with no latch is `other`, never `option_n`. A latch older
32
+ * than `LATCH_TTL_MS` is `stale_block`. An unparseable latch is `stale_block`
33
+ * too — never a guess.
34
+ *
35
+ * ## Privacy is a property of the schema, not of a scrubber
36
+ *
37
+ * `src/config/suggestion-capture.json` registers five fields and **none can hold
38
+ * free text**: a timestamp, a boolean, an options COUNT, and two closed enums.
39
+ * `option_n` records THAT a numbered option was chosen and out of how many —
40
+ * deliberately not WHICH, because the block's option order is content and the
41
+ * capture-rate question does not need it. A type with no field able to carry a
42
+ * prompt cannot leak one; a scrubber can fail.
43
+ *
44
+ * Default-OFF (`hooks.suggestion_capture.enabled: true`). `fail_closed: false`,
45
+ * always exit 0: an instrument must never break a turn it is only observing.
46
+ */
47
+ import fs from 'node:fs';
48
+ import path from 'node:path';
49
+ import { fileURLToPath, pathToFileURL } from 'node:url';
50
+
51
+ import { unwrap } from './envelope.js';
52
+ import { readHookStdin } from './hook_stdin.js';
53
+ import { humanTypedThisTurn } from '../_lib/machine_wake.js';
54
+
55
+ const EXIT_ALLOW = 0;
56
+ const SETTINGS_FILE = '.agent-settings.yml';
57
+ const SINK_REL = path.join('agents', 'runtime', 'state', 'audit', 'suggestion-capture.jsonl');
58
+ const LATCH_REL = path.join('agents', 'runtime', 'state', 'suggestion-latch.json');
59
+ /** A block older than this cannot be what the current prompt is answering. */
60
+ export const LATCH_TTL_MS = 15 * 60 * 1000;
61
+
62
+ export type Classification = 'option_n' | 'as_is' | 'other' | 'stale_block';
63
+ export type EvidenceClass = 'render-signature' | 'latch-consumed' | 'latch-stale' | 'no-latch';
64
+
65
+ type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
66
+ type JsonObject = { [k: string]: JsonValue };
67
+
68
+ const isObject = (v: unknown): v is JsonObject =>
69
+ typeof v === 'object' && v !== null && !Array.isArray(v);
70
+
71
+ const str = (v: JsonValue | undefined): string => (typeof v === 'string' ? v : '');
72
+
73
+ /* ── the render signature ──────────────────────────────────────────────────── */
74
+
75
+ /**
76
+ * Exactly one `Recommendation:`/`Empfehlung:` line, plus at least two numbered
77
+ * options. Both halves are required: a numbered list alone is ordinary prose,
78
+ * and a `Recommendation:` line alone is a sentence.
79
+ *
80
+ * The label is matched in both languages because `user-interaction`'s Iron Law 1
81
+ * makes a wrong-language label a rule violation, not a variant — so a German
82
+ * session's block carries `Empfehlung:` and a single-language matcher would
83
+ * under-count exactly the sessions the mirror rule produces.
84
+ */
85
+ export function detectBlock(text: string): { emitted: boolean; optionsCount: number } {
86
+ if (text === '') return { emitted: false, optionsCount: 0 };
87
+ const lines = text.split('\n');
88
+ const recommendation = lines.filter((l) => /^\s*(?:\*\*)?(?:Recommendation|Empfehlung)\s*:/i.test(l)).length;
89
+ const numbered = new Set<string>();
90
+ for (const l of lines) {
91
+ const m = /^\s*(\d{1,2})[.)]\s+\S/.exec(l);
92
+ if (m?.[1] !== undefined) numbered.add(m[1]);
93
+ }
94
+ const emitted = recommendation === 1 && numbered.size >= 2;
95
+ return { emitted, optionsCount: emitted ? numbered.size : 0 };
96
+ }
97
+
98
+ /* ── classification ────────────────────────────────────────────────────────── */
99
+
100
+ /**
101
+ * The as-is escape hatch, matched by intent rather than by an exact string:
102
+ * `command-suggestion-policy` requires it present and last but fixes no wording,
103
+ * so a literal matcher would silently classify every as-is pick as `other`.
104
+ */
105
+ const AS_IS_RE = /\b(as[- ]is|as is|unver(?:ä|ae)ndert|so lassen|wie es ist|keep it|leave it|no change)\b/i;
106
+
107
+ export function classify(prompt: string, optionsCount: number): Classification {
108
+ const t = prompt.trim();
109
+ if (t === '') return 'other';
110
+ if (AS_IS_RE.test(t)) return 'as_is';
111
+ // A bare number, or a number with trailing punctuation — the shape a pick
112
+ // actually takes. `1. do the thing` is NOT a pick: it is an instruction that
113
+ // happens to start with a digit, and counting it would inflate the rate.
114
+ const bare = /^(\d{1,2})\s*[.)]?\s*$/.exec(t);
115
+ if (bare?.[1] !== undefined) {
116
+ const n = Number(bare[1]);
117
+ // Out-of-range is `other`: a "7" against a 3-option block is answering
118
+ // something else, and recording it as a pick would corrupt the metric
119
+ // the whole instrument exists to produce.
120
+ if (n >= 1 && (optionsCount === 0 || n <= optionsCount)) return 'option_n';
121
+ }
122
+ return 'other';
123
+ }
124
+
125
+ /* ── settings, latch, sink ─────────────────────────────────────────────────── */
126
+
127
+ /** `hooks.suggestion_capture.enabled: true` — the same mini-parse siblings use. */
128
+ export function enabled(root: string): boolean {
129
+ let raw: string;
130
+ try {
131
+ raw = fs.readFileSync(path.join(root, SETTINGS_FILE), 'utf8');
132
+ } catch {
133
+ return false;
134
+ }
135
+ let inHooks = false;
136
+ let inSection = false;
137
+ for (const line of raw.split('\n')) {
138
+ if (/^hooks:\s*$/.test(line)) {
139
+ inHooks = true;
140
+ inSection = false;
141
+ continue;
142
+ }
143
+ if (/^\S/.test(line)) {
144
+ inHooks = false;
145
+ inSection = false;
146
+ continue;
147
+ }
148
+ if (!inHooks) continue;
149
+ if (/^\s{2}suggestion_capture:\s*$/.test(line)) {
150
+ inSection = true;
151
+ continue;
152
+ }
153
+ if (/^\s{2}\S/.test(line)) {
154
+ inSection = false;
155
+ continue;
156
+ }
157
+ if (inSection && /^\s{4}enabled:\s*true\s*$/.test(line)) return true;
158
+ }
159
+ return false;
160
+ }
161
+
162
+ export interface Latch {
163
+ readonly prompt_id: string;
164
+ readonly options_count: number;
165
+ readonly at: number;
166
+ }
167
+
168
+ export function writeLatch(root: string, latch: Latch): void {
169
+ const p = path.join(root, LATCH_REL);
170
+ fs.mkdirSync(path.dirname(p), { recursive: true });
171
+ fs.writeFileSync(p, `${JSON.stringify(latch)}\n`, 'utf8');
172
+ }
173
+
174
+ /** Read AND delete. Consume-once is the misclassification guard, not a detail. */
175
+ export function consumeLatch(root: string): Latch | null {
176
+ const p = path.join(root, LATCH_REL);
177
+ let raw: string;
178
+ try {
179
+ raw = fs.readFileSync(p, 'utf8');
180
+ } catch {
181
+ return null;
182
+ }
183
+ try {
184
+ fs.rmSync(p, { force: true });
185
+ } catch {
186
+ /* a latch we cannot delete is still consumed for this turn */
187
+ }
188
+ try {
189
+ const v = JSON.parse(raw) as unknown;
190
+ if (!isObject(v)) return null;
191
+ const at = v['at'];
192
+ const oc = v['options_count'];
193
+ const pid = v['prompt_id'];
194
+ if (typeof at !== 'number' || typeof oc !== 'number' || typeof pid !== 'string') return null;
195
+ return { prompt_id: pid, options_count: oc, at };
196
+ } catch {
197
+ return null; // unparseable → stale_block, never a guess
198
+ }
199
+ }
200
+
201
+ export interface Record_ {
202
+ readonly ts: string;
203
+ readonly block_emitted: boolean;
204
+ readonly options_count: number;
205
+ readonly evidence_class: EvidenceClass;
206
+ readonly turn_classification: Classification;
207
+ }
208
+
209
+ /** The exact key set `src/config/suggestion-capture.json` registers. */
210
+ export const RECORD_KEYS: readonly string[] = [
211
+ 'ts',
212
+ 'block_emitted',
213
+ 'options_count',
214
+ 'evidence_class',
215
+ 'turn_classification',
216
+ ];
217
+
218
+ export function appendRecord(root: string, rec: Record_, now: Date): void {
219
+ const p = path.join(root, SINK_REL);
220
+ fs.mkdirSync(path.dirname(p), { recursive: true });
221
+ const line = {
222
+ ts: now.toISOString().replace(/\.\d{3}Z$/, 'Z'),
223
+ block_emitted: rec.block_emitted,
224
+ options_count: rec.options_count,
225
+ evidence_class: rec.evidence_class,
226
+ turn_classification: rec.turn_classification,
227
+ };
228
+ fs.appendFileSync(p, `${JSON.stringify(line)}\n`, 'utf8');
229
+ }
230
+
231
+ /* ── the two slots ─────────────────────────────────────────────────────────── */
232
+
233
+ /** Decide what a prompt turn should record. Pure, so the tests drive it directly. */
234
+ export function classifyTurn(
235
+ prompt: string,
236
+ latch: Latch | null,
237
+ nowMs: number,
238
+ ): { record: boolean; evidence_class: EvidenceClass; turn_classification: Classification; options_count: number } {
239
+ if (latch === null) {
240
+ // No block preceded this turn. Recording every ordinary turn would make
241
+ // the sink a prompt log with the volume of one, so nothing is written.
242
+ return { record: false, evidence_class: 'no-latch', turn_classification: 'other', options_count: 0 };
243
+ }
244
+ if (nowMs - latch.at > LATCH_TTL_MS) {
245
+ return {
246
+ record: true,
247
+ evidence_class: 'latch-stale',
248
+ turn_classification: 'stale_block',
249
+ options_count: latch.options_count,
250
+ };
251
+ }
252
+ return {
253
+ record: true,
254
+ evidence_class: 'latch-consumed',
255
+ turn_classification: classify(prompt, latch.options_count),
256
+ options_count: latch.options_count,
257
+ };
258
+ }
259
+
260
+ /**
261
+ * Canonical event name, from either invocation shape.
262
+ *
263
+ * The dispatcher supplies `envelope.event` (`stop`, `user_prompt_submit`); a
264
+ * direct/legacy invocation carries only the host's own `hook_event_name`
265
+ * (`Stop`, `UserPromptSubmit`). Reading just the second one is how the first
266
+ * version of this concern became a silent no-op under the dispatcher: it ran,
267
+ * matched nothing, and exited 0 — indistinguishable from a disabled hook.
268
+ */
269
+ export function eventOf(envelope: JsonObject, payload: JsonObject): string {
270
+ const canonical = str(envelope['event'] as JsonValue | undefined);
271
+ const native = str(
272
+ (envelope['native_event'] ?? payload['hook_event_name']) as JsonValue | undefined,
273
+ );
274
+ const raw = (canonical !== '' ? canonical : native).toLowerCase();
275
+ if (raw === 'stop') return 'stop';
276
+ if (raw === 'userpromptsubmit' || raw === 'user_prompt_submit') return 'user_prompt_submit';
277
+ return raw;
278
+ }
279
+
280
+ /**
281
+ * The dispatcher calls every in-process concern as `main(argv)` — see
282
+ * `_run_concern_inproc` in `hooks/dispatch_hook.ts`, and the `ConcernMain`
283
+ * signature in `hooks/concern_registry.ts`.
284
+ *
285
+ * This used to be `main(now: Date = new Date())`, and the mismatch made the
286
+ * concern a SILENT NO-OP on every live dispatch: argv arrived where a Date was
287
+ * expected, `now.getTime()` threw `TypeError: now.getTime is not a function`,
288
+ * and the outer catch — "an instrument never breaks the turn it observes" —
289
+ * swallowed it and returned EXIT_ALLOW. The dispatcher recorded exit 0 and no
290
+ * output, which is indistinguishable from a disabled hook. Three earlier
291
+ * isolation attempts read that silence as a `--project-dir` problem; it was
292
+ * this.
293
+ *
294
+ * The clock stays injectable because the TTL and the timestamp need to be
295
+ * driven from a test, but it is now the SECOND parameter, where the dispatcher
296
+ * cannot land on it.
297
+ */
298
+ export function main(_argv: readonly string[] = [], now: Date = new Date()): number {
299
+ let envelope: JsonObject;
300
+ let payload: JsonObject;
301
+ try {
302
+ [envelope, payload] = unwrap(readHookStdin(), 'claude');
303
+ } catch {
304
+ return EXIT_ALLOW;
305
+ }
306
+
307
+ // `workspace_root` is the dispatcher's; `cwd` is the host payload's. Both
308
+ // are read because the concern must work under either invocation.
309
+ const root =
310
+ str(envelope['workspace_root'] as JsonValue | undefined) ||
311
+ str(payload['cwd'] as JsonValue | undefined) ||
312
+ str(envelope['project_root'] as JsonValue | undefined) ||
313
+ '.';
314
+ if (!enabled(root)) return EXIT_ALLOW;
315
+
316
+ const event = eventOf(envelope, payload);
317
+ try {
318
+ if (event === 'stop') {
319
+ const { emitted, optionsCount } = detectBlock(
320
+ str(payload['last_assistant_message'] as JsonValue | undefined),
321
+ );
322
+ if (emitted) {
323
+ writeLatch(root, {
324
+ prompt_id: str(payload['prompt_id'] as JsonValue | undefined),
325
+ options_count: optionsCount,
326
+ at: now.getTime(),
327
+ });
328
+ }
329
+ return EXIT_ALLOW;
330
+ }
331
+ if (event === 'user_prompt_submit') {
332
+ // A machine wake is not a user turn. Without this, a background task
333
+ // notification arriving between the block and the user's "1"
334
+ // consumes the latch, and the real pick then classifies as `other`
335
+ // — the instrument records a miss that never happened. Same defect,
336
+ // same predicate, as the git-authorization ledger; see
337
+ // `_lib/machine_wake.ts` for the captured discriminator.
338
+ if (!humanTypedThisTurn(str(payload['prompt'] as JsonValue | undefined))) {
339
+ return EXIT_ALLOW;
340
+ }
341
+ const latch = consumeLatch(root);
342
+ const v = classifyTurn(str(payload['prompt'] as JsonValue | undefined), latch, now.getTime());
343
+ if (v.record) {
344
+ appendRecord(
345
+ root,
346
+ {
347
+ ts: '',
348
+ block_emitted: true,
349
+ options_count: v.options_count,
350
+ evidence_class: v.evidence_class,
351
+ turn_classification: v.turn_classification,
352
+ },
353
+ now,
354
+ );
355
+ }
356
+ return EXIT_ALLOW;
357
+ }
358
+ } catch {
359
+ return EXIT_ALLOW; // an instrument never breaks the turn it observes
360
+ }
361
+ return EXIT_ALLOW;
362
+ }
363
+
364
+ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
365
+ function isCliEntry(): boolean {
366
+ if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) return false;
367
+ if (process.argv[1] === undefined) return false;
368
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
369
+ if (import.meta.url === argvUrl) return true;
370
+ try {
371
+ return fs.realpathSync(fileURLToPath(import.meta.url)) === fs.realpathSync(path.resolve(process.argv[1]));
372
+ } catch {
373
+ return false;
374
+ }
375
+ }
376
+ if (isCliEntry()) process.exit(main());
377
+
378
+ export { SINK_REL, LATCH_REL };
@@ -10,6 +10,22 @@
10
10
  * Contract (per the verdict):
11
11
  * - `agents/runtime/state/hot-context.md`, gitignored, OVERWRITTEN on every
12
12
  * `stop` (cache, not journal). 400-word hard cap.
13
+ *
14
+ * loss_class: ephemeral-lossy
15
+ *
16
+ * Named, not changed (`road-to-runtime-context-floors` step 3.1). The two losses
17
+ * here are both deliberate and both unrecoverable, which is exactly what the
18
+ * class asserts: the 400-word cap discards the older half of the window, and
19
+ * `_redact_lines` DROPS any line the low-impact redactor refuses — including on
20
+ * a redactor error, which is fail-closed per line. Neither is retrievable from
21
+ * the output, and neither should be: this file is a privacy-floored cache whose
22
+ * source of truth is the transcript it was built from, and storing a recovery
23
+ * for a line dropped for privacy would defeat the reason it was dropped.
24
+ *
25
+ * `recoverable-lossy` would be the WRONG class here even though the transcript
26
+ * still exists, and the distinction is the point of the vocabulary: the class
27
+ * describes what THIS transform guarantees to its consumer, and this one
28
+ * guarantees nothing about the dropped content on purpose.
13
29
  * - Written by DETERMINISTIC extraction from the chat-history JSONL
14
30
  * (`agents/runtime/.agent-chat-history`) — never LLM summarization.
15
31
  * - Every extracted line passes the low-impact privacy floor
@@ -32,8 +32,12 @@ cat > "$HOOKS_DIR/pre-push" << 'EOF'
32
32
  # outputs (e.g. a new guideline bumping the count in README + docs/architecture).
33
33
  # `task consistency` is the EXACT CI mirror (sync-check + sync + generate-tools
34
34
  # + compile-router + compile-corpus + `git diff --quiet`),
35
- # so any derived-output drift blocks the push here. Runtime ~15-40s (it
36
- # regenerates the tool trees) — cheaper than a red CI run and a fixup re-push.
35
+ # so any derived-output drift blocks the push here. Runtime ~10s: three
36
+ # consecutive timed runs on 2026-08-30 measured 9.79s / 10.19s / 10.26s
37
+ # (road-to-agent-turnaround 3.2). The header said "~15-40s" until then, which
38
+ # over-stated this half of the hook by 1.5-4x while the hook AS A WHOLE was far
39
+ # more expensive than either number — see the preflight block below. Still
40
+ # cheaper than a red CI run and a fixup re-push.
37
41
 
38
42
  # A delete-only push has no content to gate, so every check below is answering
39
43
  # a question nobody asked. Measured 2026-08-18 during the 14.0.0 release:
@@ -83,9 +87,20 @@ fi
83
87
  # preflight gates read that tree, so on a FRESH worktree (this repo's standard
84
88
  # workflow) running preflight first would fail with "produced by regeneration
85
89
  # but absent before" — red for a reason the contributor did not cause, which is
86
- # exactly the anti-pattern this gate set exists to avoid. Measured 15s against
87
- # the 25s `pre_push_budget_seconds` ceiling in src/config/ci-local-parity.yml.
88
- # `check_enforcement_coverage` (30.7s) stays out of preflight by design.
90
+ # exactly the anti-pattern this gate set exists to avoid.
91
+ #
92
+ # BUDGET: measured 36.05s on 2026-08-30 (road-to-agent-turnaround 3.2, a clean
93
+ # exit-0 run), against the 25s `pre_push_budget_seconds` ceiling in
94
+ # src/config/ci-local-parity.yml. That is 44% OVER, and the header claimed 15s
95
+ # until this measurement. The ceiling's own comment calls it "a real budget, not
96
+ # a wish" — and nothing measures the hook, so the gate set grew past it with no
97
+ # signal. Recorded rather than fixed here: narrowing preflight to the pushed
98
+ # paths is one edit away from turning a push-blocking mirror into a partial one,
99
+ # which is how drift reaches CI instead of the developer.
100
+ #
101
+ # The hook's local cost is therefore ~46s (10s consistency + 36s preflight),
102
+ # which is what the 67s median `git push` in the ten-session corpus is mostly
103
+ # made of. `check_enforcement_coverage` (30.7s) stays out of preflight by design.
89
104
  echo "🔍 Preflight — the CI-only repo-content gates..."
90
105
  if [ "${AGENT_CONFIG_SKIP_PREPUSH_PREFLIGHT:-}" = "1" ]; then
91
106
  echo "⏭️ skipped via AGENT_CONFIG_SKIP_PREPUSH_PREFLIGHT=1"
@@ -98,6 +98,7 @@ import {
98
98
  type RuleScope,
99
99
  } from '../install/rule_scope.js';
100
100
  import { isExclusivelyPackageOnly, stampHostLayerFingerprint } from '../install/partitionEligibility.js'; // ADR-236
101
+ import * as claude_rule_rewrite from '../install/claudeRuleRewrite.js';
101
102
  import { RULE_SOURCE_REL } from '../install/wizard-plan.js';
102
103
  import { flattenSurface, computeSurfaceDelta, type SettingsSurface } from '../shared/settingsSurface.js';
103
104
  import { settingsSchema } from '../server/schemas/settings.js';
@@ -109,6 +110,7 @@ import {
109
110
  render_native_model_md,
110
111
  } from './_lib/model_tier.js';
111
112
  import { main as cmdMigrateMain } from './_cli/cmd_migrate.js';
113
+ import { SCOPE_DETECT_AI_DIRS, SCOPE_DETECT_MANIFESTS } from '../install/detect.js';
112
114
 
113
115
  // ---------------------------------------------------------------------------
114
116
  // Python-runtime parity helpers
@@ -2328,28 +2330,12 @@ function _run_scope_prompt(opts: Options, reason: string, custom_path: string |
2328
2330
  return 'project';
2329
2331
  }
2330
2332
 
2331
- const SCOPE_DETECT_MANIFESTS: readonly string[] = [
2332
- 'package.json',
2333
- 'composer.json',
2334
- 'pyproject.toml',
2335
- 'Cargo.toml',
2336
- 'go.mod',
2337
- 'Gemfile',
2338
- ];
2339
- const SCOPE_DETECT_AI_DIRS: readonly string[] = [
2340
- '.claude',
2341
- '.cursor',
2342
- '.windsurf',
2343
- '.augment',
2344
- '.clinerules',
2345
- '.copilot',
2346
- '.gemini',
2347
- '.codex',
2348
- '.aider',
2349
- '.continue',
2350
- '.roo',
2351
- '.kilocode',
2352
- ];
2333
+ // SCOPE_DETECT_MANIFESTS and SCOPE_DETECT_AI_DIRS were duplicated here, byte
2334
+ // for byte, alongside their definitions in `src/install/detect.ts`. Two copies
2335
+ // of a detection constant is the shape that makes divergence invisible: the
2336
+ // test pinned ONE of them exactly, so a change to the other would have passed
2337
+ // CI. De-duplicated 2026-08-26 (road-to-internal-estate-fit 2.3) — one exported
2338
+ // definition, imported here.
2353
2339
  const SCOPE_DETECT_AI_FILES: readonly string[] = [
2354
2340
  'CLAUDE.md',
2355
2341
  'AGENTS.md',
@@ -3246,20 +3232,16 @@ function _deploy_global_content(
3246
3232
  // Runs before the postcheck + inventory record so `current_files`
3247
3233
  // reflects the transformed tree and reaping stays consistent.
3248
3234
  if (tool_id === 'claude-code') {
3235
+ // Rules land verbatim from the copy above; see the module. It also
3236
+ // renders the flat-command wrapper report, unchanged.
3249
3237
  const res = _apply_claude_flat_command_wrappers(anchor, package_root, current_files);
3250
- if (res.wrapped.length > 0 && !state.QUIET) {
3251
- info(
3252
- ` claude-code: ${res.wrapped.length} visible flat command(s) projected as ` +
3253
- 'skill wrappers (Claude Code flat-command discovery workaround)',
3254
- );
3255
- }
3256
- if (res.reserved.length > 0 && !state.QUIET) {
3257
- info(
3258
- ` claude-code: ${res.reserved.length} flat command(s) withheld — name is a ` +
3259
- `Claude Code built-in (${res.reserved.join(', ')}); nested /cluster:sub ` +
3260
- 'commands remain available',
3261
- );
3262
- }
3238
+ claude_rule_rewrite.rewriteAndReport(
3239
+ path.join(anchor, 'rules'),
3240
+ state.QUIET,
3241
+ info,
3242
+ warn,
3243
+ res,
3244
+ );
3263
3245
  }
3264
3246
 
3265
3247
  const missing_targets = _verify_deploy_targets(anchor, plan);
@@ -28,6 +28,7 @@
28
28
  import * as fs from 'node:fs';
29
29
  import * as path from 'node:path';
30
30
  import { fileURLToPath, pathToFileURL } from 'node:url';
31
+ import { generatedBy } from './_lib/generated_by.js';
31
32
 
32
33
  const _HERE = fileURLToPath(import.meta.url);
33
34
  // src/scripts/inventory_frontmatter.ts → parents[2] is the repo root.
@@ -266,7 +267,7 @@ function _mostCommon(counter: Map<string, number>): [string, number][] {
266
267
  export function main(): number {
267
268
  _OUT.length = 0;
268
269
  emit('# Frontmatter inventory (generated)\n');
269
- emit('Generated by `scripts/inventory_frontmatter.py`. Raw material for');
270
+ emit(generatedBy('inventory_frontmatter', 'Raw material for'));
270
271
  emit('Phase 1 of the frontmatter-schema roadmap. Do not edit by hand.\n');
271
272
 
272
273
  inventory_type('skills', gather_files(path.join(SRC, 'skills'), (b) => b === 'SKILL.md'));
@@ -43,6 +43,7 @@ import * as path from 'node:path';
43
43
  import { fileURLToPath, pathToFileURL } from 'node:url';
44
44
 
45
45
  import { runGateCli, runSelfTest, type SelfTestCase } from './_lib/gate_self_test.js';
46
+ import { GateLedger } from './_lib/gate_ledger.js';
46
47
  import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
47
48
 
48
49
  const _HERE = fileURLToPath(import.meta.url);
@@ -317,6 +318,13 @@ export function main(argv: string[] = process.argv.slice(2)): number {
317
318
  names = [];
318
319
  }
319
320
 
321
+ // Per-artifact accounting. `scanned` counts candidate ROWS, so a sweep
322
+ // artifact whose table the parser walked past contributes zero rows and is
323
+ // indistinguishable from one with no candidates — exactly the "looked at
324
+ // almost nothing" reading the ledger exists to separate from "found
325
+ // nothing".
326
+ const ledger = new GateLedger('lint_adr_sweep_routing');
327
+ ledger.plan(names);
320
328
  const violations: Violation[] = [];
321
329
  let scanned = 0;
322
330
  for (const name of names) {
@@ -325,7 +333,11 @@ export function main(argv: string[] = process.argv.slice(2)): number {
325
333
  const [v, n] = lintSweep(rel, fs.readFileSync(abs, 'utf-8'));
326
334
  violations.push(...v);
327
335
  scanned += n;
336
+ if (v.length > 0) ledger.fail(name, `${String(v.length)} unrouted candidate row(s)`);
337
+ else if (n === 0) ledger.skip(name, 'no_applicable_files');
338
+ else ledger.complete(name);
328
339
  }
340
+ ledger.report(json ? () => undefined : undefined);
329
341
 
330
342
  process.stdout.write(`scanned: ${scanned}\n`);
331
343
  try {