@event4u/agent-config 14.12.0 → 14.14.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 (521) 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 +118 -155
  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 +145 -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/orchestration-telemetry.md +1 -0
  24. package/dist/agent-src/contexts/execution/subagent-response-contract.md +40 -0
  25. package/dist/agent-src/contexts/execution/subagent-steering.md +13 -1
  26. package/dist/agent-src/contexts/execution/terminal-states.md +96 -0
  27. package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
  28. package/dist/agent-src/rules/broken-access-control.md +4 -0
  29. package/dist/agent-src/rules/code-comment-discipline.md +6 -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 +252 -8
  47. package/dist/agent-src/scripts/guarded_baseline.ts +343 -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 +516 -0
  51. package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
  52. package/dist/agent-src/scripts/update_roadmap_progress.ts +16 -12
  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/database/SKILL.md +8 -0
  57. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
  58. package/dist/agent-src/skills/design-review/SKILL.md +1 -1
  59. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
  60. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +17 -1
  61. package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
  62. package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
  63. package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
  64. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
  65. package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
  66. package/dist/agent-src/skills/laravel/SKILL.md +35 -0
  67. package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
  68. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
  69. package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
  70. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  71. package/dist/agent-src/skills/skill-writing/references/procedure.md +5 -5
  72. package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
  73. package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
  74. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
  75. package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
  76. package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
  77. package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
  78. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
  79. package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
  80. package/dist/agent-src/skills/ui-component-architect/SKILL.md +45 -2
  81. package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
  82. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
  83. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  84. package/dist/agent-src/templates/roadmaps.md +97 -3
  85. package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
  86. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
  87. package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
  88. package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
  89. package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
  90. package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
  91. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
  92. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
  93. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
  94. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
  95. package/dist/cli/commands/uiAudit.js +124 -5
  96. package/dist/cli/registry.js +2 -0
  97. package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
  98. package/dist/cli-delegate/{chunk-JCW7ZLHK.js → chunk-4FS4WRXP.js} +5 -0
  99. package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
  100. package/dist/cli-delegate/{chunk-JJA2QEWA.js → chunk-AKJGUQNO.js} +466 -285
  101. package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
  102. package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
  103. package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
  104. package/dist/cli-delegate/cmd_adr_effective.js +102 -0
  105. package/dist/cli-delegate/cmd_conformance.js +80 -11
  106. package/dist/cli-delegate/cmd_doctor.js +3 -3
  107. package/dist/cli-delegate/cmd_export.js +3 -2
  108. package/dist/cli-delegate/cmd_fleet.js +2 -2
  109. package/dist/cli-delegate/cmd_handoff.js +1 -1
  110. package/dist/cli-delegate/cmd_preflight.js +2 -2
  111. package/dist/cli-delegate/cmd_prune.js +3 -2
  112. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  113. package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
  114. package/dist/cli-delegate/cmd_settings_set.js +2 -2
  115. package/dist/cli-delegate/cmd_sync.js +3 -2
  116. package/dist/cli-delegate/cmd_uninstall.js +3 -2
  117. package/dist/cli-delegate/cmd_validate.js +3 -2
  118. package/dist/discovery/deprecation-report.md +1 -1
  119. package/dist/discovery/discovery-manifest.json +58 -58
  120. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  121. package/dist/discovery/discovery-manifest.summary.md +1 -1
  122. package/dist/discovery/dormancy-report.md +1 -1
  123. package/dist/discovery/orphan-report.md +1 -1
  124. package/dist/discovery/packs.json +2 -2
  125. package/dist/discovery/trust-report.md +1 -1
  126. package/dist/discovery/workspaces.json +2 -2
  127. package/dist/hooks/dispatch.js +2900 -1049
  128. package/dist/install/claudeRuleRewrite.js +254 -0
  129. package/dist/install/detect.js +29 -16
  130. package/dist/install/detect_php_shape.js +159 -0
  131. package/dist/install/install.mjs +634 -428
  132. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  133. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  134. package/dist/mcp/registry-manifest.json +3 -3
  135. package/dist/mcp/server.json +3 -3
  136. package/dist/mcp/server.mjs +4895 -2627
  137. package/dist/server/schemas/settings.js +3 -0
  138. package/dist/ui/assets/index-D0jaCRPM.js +29 -0
  139. package/dist/ui/index.html +1 -1
  140. package/docs/MIGRATION.md +1 -1
  141. package/docs/THIRD-PARTY-NOTICES.md +25 -0
  142. package/docs/contracts/provider-lifecycle.md +1 -1
  143. package/docs/contracts/settings-classes.md +10 -4
  144. package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
  145. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
  146. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
  147. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
  148. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
  149. package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
  150. package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
  151. package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
  152. package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
  153. package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
  154. package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
  155. package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
  156. package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
  157. package/docs/guidelines/agent-infra/first-principles.md +2 -2
  158. package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
  159. package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
  160. package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
  161. package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
  162. package/docs/guidelines/agent-infra/layered-settings.md +10 -10
  163. package/docs/guidelines/agent-infra/memory-access.md +1 -1
  164. package/docs/guidelines/agent-infra/mental-models.md +3 -3
  165. package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
  166. package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
  167. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
  168. package/docs/guidelines/agent-infra/role-contracts.md +2 -2
  169. package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
  170. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  171. package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
  172. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
  173. package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
  174. package/docs/guidelines/agent-infra/six-hats.md +3 -3
  175. package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
  176. package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
  177. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  178. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
  179. package/docs/guidelines/augment-portability-patterns.md +6 -4
  180. package/docs/guidelines/code-clarity.md +18 -0
  181. package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
  182. package/docs/guidelines/cross-role-handoff.md +2 -2
  183. package/docs/guidelines/design-fidelity-mechanics.md +1 -1
  184. package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
  185. package/docs/guidelines/php/database.md +90 -7
  186. package/docs/guidelines/prompt-templates.md +7 -7
  187. package/llms.txt +2 -2
  188. package/package.json +5 -2
  189. package/src/agent-src/scripts/archive_completed_roadmaps.ts +252 -8
  190. package/src/agent-src/scripts/guarded_baseline.ts +343 -0
  191. package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
  192. package/src/agent-src/scripts/stub_queue.ts +82 -0
  193. package/src/agent-src/scripts/stubs_due.ts +516 -0
  194. package/src/agent-src/scripts/ticket_bundles.ts +84 -0
  195. package/src/agent-src/scripts/update_roadmap_progress.ts +16 -12
  196. package/src/agent-src/templates/scripts/check_memory.ts +258 -17
  197. package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
  198. package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
  199. package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
  200. package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
  201. package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
  202. package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
  203. package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
  204. package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
  205. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
  206. package/src/config/agent-settings.template.yml +32 -3
  207. package/src/config/assurance-capability-registry.json +21 -9
  208. package/src/config/canonical-terms.yml +119 -0
  209. package/src/config/capability-native-outcome-bars.json +81 -0
  210. package/src/config/ci-local-parity.yml +80 -0
  211. package/src/config/drafting-channels.yml +43 -0
  212. package/src/config/estate-count-budget.json +57 -36
  213. package/src/config/evaluator-budgets.json +14 -14
  214. package/src/config/gate-coverage.yml +729 -63
  215. package/src/config/gate-reachability-exemptions.json +21 -0
  216. package/src/config/gate-violation-baselines.json +42 -19
  217. package/src/config/harness-evolution-budget.json +25 -0
  218. package/src/config/lapsed-beta-baseline.json +96 -0
  219. package/src/config/memory-twin-verdicts.yml +129 -0
  220. package/src/config/metric-registry.yml +124 -0
  221. package/src/config/pack-size-budget.json +16 -15
  222. package/src/config/preamble-payload-budget.json +12 -4
  223. package/src/config/profiles/balanced.ini +27 -0
  224. package/src/config/profiles/full.ini +27 -0
  225. package/src/config/profiles/minimal.ini +27 -0
  226. package/src/config/publish-surface.json +9 -2
  227. package/src/config/routing-coverage-seed.json +16 -2
  228. package/src/config/rule-stub-ceilings.json +133 -112
  229. package/src/config/turnaround-budget.json +66 -0
  230. package/src/install/claudeRuleRewrite.ts +288 -0
  231. package/src/install/detect.ts +60 -17
  232. package/src/install/detect_php_shape.ts +191 -0
  233. package/src/scripts/_cli/cmd_doctor.ts +27 -112
  234. package/src/scripts/_dispatch.bash +23 -0
  235. package/src/scripts/_lib/activation_ladder.ts +255 -0
  236. package/src/scripts/_lib/activation_receipt_producer.ts +341 -0
  237. package/src/scripts/_lib/activation_states.ts +88 -0
  238. package/src/scripts/_lib/adherence_detectors.ts +143 -0
  239. package/src/scripts/_lib/adr_frontmatter.ts +26 -0
  240. package/src/scripts/_lib/arith_claims.ts +181 -0
  241. package/src/scripts/_lib/arm_ranking.ts +62 -0
  242. package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
  243. package/src/scripts/_lib/audit_field_provenance.ts +54 -0
  244. package/src/scripts/_lib/auto_dispatch.ts +32 -3
  245. package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
  246. package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
  247. package/src/scripts/_lib/candidate_pair_delta.ts +349 -0
  248. package/src/scripts/_lib/candidate_proposer.ts +402 -0
  249. package/src/scripts/_lib/candidate_record.ts +601 -0
  250. package/src/scripts/_lib/capture_rate.ts +319 -0
  251. package/src/scripts/_lib/carrier_status.ts +118 -0
  252. package/src/scripts/_lib/cascade_stage_enumeration.ts +92 -0
  253. package/src/scripts/_lib/collector_denominator.ts +771 -0
  254. package/src/scripts/_lib/collector_record.ts +340 -0
  255. package/src/scripts/_lib/collector_store.ts +664 -0
  256. package/src/scripts/_lib/collector_supervision.ts +827 -0
  257. package/src/scripts/_lib/concern_estate.ts +77 -0
  258. package/src/scripts/_lib/config_chain.ts +477 -0
  259. package/src/scripts/_lib/config_cost.ts +209 -0
  260. package/src/scripts/_lib/corpus_manifest.ts +726 -0
  261. package/src/scripts/_lib/council_settings_block.ts +6 -0
  262. package/src/scripts/_lib/curator_ops.ts +172 -0
  263. package/src/scripts/_lib/delivery_arm_experiment.ts +282 -0
  264. package/src/scripts/_lib/delivery_criticality.ts +126 -0
  265. package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
  266. package/src/scripts/_lib/empty_cycles.ts +88 -0
  267. package/src/scripts/_lib/estate_carrier_cases.ts +72 -0
  268. package/src/scripts/_lib/eval_publication.ts +354 -0
  269. package/src/scripts/_lib/evaluation_cascade.ts +452 -0
  270. package/src/scripts/_lib/evaluation_vector.ts +283 -0
  271. package/src/scripts/_lib/evaluator_promotion.ts +225 -0
  272. package/src/scripts/_lib/evidence_basis.ts +118 -0
  273. package/src/scripts/_lib/evolution_roi.ts +562 -0
  274. package/src/scripts/_lib/exec_evidence.ts +8 -0
  275. package/src/scripts/_lib/experience_card.ts +272 -0
  276. package/src/scripts/_lib/experience_report.ts +151 -0
  277. package/src/scripts/_lib/experiment_freeze.ts +112 -0
  278. package/src/scripts/_lib/generated_by.ts +66 -0
  279. package/src/scripts/_lib/harness_evolution_guards.ts +239 -0
  280. package/src/scripts/_lib/hook_effect_probe.ts +141 -0
  281. package/src/scripts/_lib/host_denominator.ts +687 -0
  282. package/src/scripts/_lib/host_projection_reach.ts +157 -0
  283. package/src/scripts/_lib/ignored_blocker.ts +148 -0
  284. package/src/scripts/_lib/install_reach_checks.ts +495 -0
  285. package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
  286. package/src/scripts/_lib/judge_hygiene.ts +228 -0
  287. package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
  288. package/src/scripts/_lib/lexical_shortlist.ts +215 -0
  289. package/src/scripts/_lib/llm_candidate_proposer.ts +461 -0
  290. package/src/scripts/_lib/llm_proposer_transport.ts +153 -0
  291. package/src/scripts/_lib/loop_guards.ts +299 -0
  292. package/src/scripts/_lib/loss_class.ts +129 -0
  293. package/src/scripts/_lib/machine_wake.ts +51 -0
  294. package/src/scripts/_lib/md_prose_lines.ts +177 -0
  295. package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
  296. package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
  297. package/src/scripts/_lib/orchestration_record.ts +253 -5
  298. package/src/scripts/_lib/outcome_envelope.ts +227 -0
  299. package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
  300. package/src/scripts/_lib/paired_stats.ts +245 -0
  301. package/src/scripts/_lib/paired_verdict.ts +226 -0
  302. package/src/scripts/_lib/pathology_archive.ts +393 -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/promotion_capability.ts +315 -0
  306. package/src/scripts/_lib/promotion_evidence.ts +414 -0
  307. package/src/scripts/_lib/promotion_review.ts +294 -0
  308. package/src/scripts/_lib/prompt_shape.ts +92 -0
  309. package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
  310. package/src/scripts/_lib/release_highlights.ts +70 -1
  311. package/src/scripts/_lib/release_material.ts +125 -2
  312. package/src/scripts/_lib/repeated_failure.ts +105 -0
  313. package/src/scripts/_lib/repo_root.ts +111 -0
  314. package/src/scripts/_lib/review_skipped_record.ts +37 -0
  315. package/src/scripts/_lib/role_split.ts +338 -0
  316. package/src/scripts/_lib/routing_corpus.ts +307 -0
  317. package/src/scripts/_lib/routing_index_input.ts +104 -0
  318. package/src/scripts/_lib/rule_injection.ts +22 -1
  319. package/src/scripts/_lib/runtime_journal.ts +1499 -0
  320. package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
  321. package/src/scripts/_lib/semantic_noop.ts +167 -0
  322. package/src/scripts/_lib/skill_catalogue.ts +11 -1
  323. package/src/scripts/_lib/source_digest.ts +200 -0
  324. package/src/scripts/_lib/source_redact.ts +260 -0
  325. package/src/scripts/_lib/source_shape.ts +502 -0
  326. package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
  327. package/src/scripts/_lib/strip_comments.d.mts +8 -0
  328. package/src/scripts/_lib/strip_comments.mjs +65 -0
  329. package/src/scripts/_lib/test_red_state.ts +154 -0
  330. package/src/scripts/_lib/trigger_shift.ts +144 -0
  331. package/src/scripts/_lib/untrusted_content.ts +82 -7
  332. package/src/scripts/activation_receipt.ts +258 -0
  333. package/src/scripts/adoption_report.ts +1 -1
  334. package/src/scripts/adr/evidence_census.ts +1 -1
  335. package/src/scripts/adr/regenerate_index.ts +26 -2
  336. package/src/scripts/adr_cite_check.ts +164 -1
  337. package/src/scripts/ai_council/blind_review.ts +11 -1
  338. package/src/scripts/ai_council/clients.ts +4 -0
  339. package/src/scripts/ai_council/config.ts +3 -0
  340. package/src/scripts/ai_council/consensus.ts +28 -8
  341. package/src/scripts/ai_council/consensus_round.ts +226 -0
  342. package/src/scripts/ai_council/cross_exam.ts +128 -0
  343. package/src/scripts/ai_council/disagreement_signal.ts +338 -0
  344. package/src/scripts/ai_council/explain_route.ts +157 -0
  345. package/src/scripts/ai_council/information_gain.ts +293 -0
  346. package/src/scripts/ai_council/inline_findings.ts +340 -0
  347. package/src/scripts/ai_council/judge_position_bias.ts +197 -0
  348. package/src/scripts/ai_council/leakage_corpus.ts +385 -0
  349. package/src/scripts/ai_council/leakage_patterns.ts +453 -0
  350. package/src/scripts/ai_council/minority_retention.ts +171 -0
  351. package/src/scripts/ai_council/orchestrator.ts +16 -203
  352. package/src/scripts/ai_council/orchestrator_results.ts +23 -3
  353. package/src/scripts/ai_council/pricing.ts +106 -0
  354. package/src/scripts/ai_council/prompts.ts +74 -7
  355. package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
  356. package/src/scripts/ai_council/py_format.ts +14 -3
  357. package/src/scripts/ai_council/recouncil_guard.ts +293 -0
  358. package/src/scripts/ai_council/recouncil_savings.ts +299 -0
  359. package/src/scripts/ai_council/replay_route.ts +223 -0
  360. package/src/scripts/ai_council/response_record.ts +50 -0
  361. package/src/scripts/ai_council/reviewer_assignment.ts +279 -0
  362. package/src/scripts/ai_council/routing_training_row.ts +197 -0
  363. package/src/scripts/ai_council/synthesis_strategy.ts +159 -0
  364. package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
  365. package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
  366. package/src/scripts/asset_delivery_ledger.ts +157 -0
  367. package/src/scripts/attest_artifact.ts +193 -0
  368. package/src/scripts/audit_auto_rules.ts +2 -1
  369. package/src/scripts/audit_command_surface.ts +1 -1
  370. package/src/scripts/audit_mcp_tools.ts +2 -2
  371. package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
  372. package/src/scripts/audit_user_type_axis.ts +2 -1
  373. package/src/scripts/bench_ab_clone.ts +215 -10
  374. package/src/scripts/bench_ab_integrity.ts +119 -5
  375. package/src/scripts/bench_ab_v2_stats.ts +40 -213
  376. package/src/scripts/build_archive_index.ts +1 -1
  377. package/src/scripts/build_linear_digest.ts +1 -1
  378. package/src/scripts/build_proof.ts +11 -4
  379. package/src/scripts/build_rule_trigger_matrix.ts +1 -1
  380. package/src/scripts/build_source_digests.ts +157 -0
  381. package/src/scripts/cache_realization_report.ts +103 -0
  382. package/src/scripts/check_adr_frontmatter.ts +131 -10
  383. package/src/scripts/check_benchmark_report_fields.ts +207 -0
  384. package/src/scripts/check_beta_review_markers.ts +235 -6
  385. package/src/scripts/check_bundle_path_leakage.ts +34 -1
  386. package/src/scripts/check_claims.ts +576 -6
  387. package/src/scripts/check_composite_arming.ts +35 -0
  388. package/src/scripts/check_concern_admissions.ts +365 -0
  389. package/src/scripts/check_enforcement_coverage.ts +28 -0
  390. package/src/scripts/check_estate_count.ts +347 -25
  391. package/src/scripts/check_gate_reachability.ts +383 -0
  392. package/src/scripts/check_host_loadability.ts +104 -0
  393. package/src/scripts/check_loss_class_declared.ts +308 -0
  394. package/src/scripts/check_md_language.ts +15 -98
  395. package/src/scripts/check_memory_proposal.ts +18 -11
  396. package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
  397. package/src/scripts/check_no_external_sources.ts +281 -6
  398. package/src/scripts/check_pack_conformance_fixture.ts +11 -1
  399. package/src/scripts/check_pack_size.ts +59 -2
  400. package/src/scripts/check_preamble_payload_budget.ts +114 -3
  401. package/src/scripts/check_prefix_stable_mutation.ts +372 -0
  402. package/src/scripts/check_publish_surface.ts +10 -1
  403. package/src/scripts/check_references.ts +24 -1
  404. package/src/scripts/check_release_highlights.ts +96 -13
  405. package/src/scripts/check_roadmap_trackable.ts +17 -2
  406. package/src/scripts/check_rule_evidence_declaration.ts +316 -0
  407. package/src/scripts/check_rule_projection_integrity.ts +14 -4
  408. package/src/scripts/check_score_contract.ts +26 -3
  409. package/src/scripts/check_static_parity.ts +285 -0
  410. package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
  411. package/src/scripts/check_suppression_hygiene.ts +15 -0
  412. package/src/scripts/ci_settle.ts +39 -2
  413. package/src/scripts/code_graph/build.ts +60 -3
  414. package/src/scripts/code_graph/extract.ts +44 -0
  415. package/src/scripts/code_graph/types.ts +24 -0
  416. package/src/scripts/collector_daemon.ts +714 -0
  417. package/src/scripts/config_cost_report.ts +302 -0
  418. package/src/scripts/consumer_matrix.ts +74 -1
  419. package/src/scripts/corpus_manifest.ts +235 -0
  420. package/src/scripts/cost/budget.mjs +10 -3
  421. package/src/scripts/cost/track.mjs +10 -3
  422. package/src/scripts/council_cli.ts +37 -54
  423. package/src/scripts/dispatch_r2_reviewer.ts +46 -5
  424. package/src/scripts/evolution_lab.ts +1153 -0
  425. package/src/scripts/external_sources_denylist.json +5 -18
  426. package/src/scripts/extract_audit_patterns.ts +21 -0
  427. package/src/scripts/fold_intake.ts +12 -1
  428. package/src/scripts/gen_discovery_baseline.ts +1 -1
  429. package/src/scripts/generate_capabilities_index.ts +12 -5
  430. package/src/scripts/generate_capability_matrix.ts +3 -3
  431. package/src/scripts/generate_command_flows.ts +2 -2
  432. package/src/scripts/generate_cookbook.ts +2 -2
  433. package/src/scripts/generate_index.ts +8 -1
  434. package/src/scripts/generate_knowledge_index.ts +2 -1
  435. package/src/scripts/generate_ownership_matrix.ts +2 -1
  436. package/src/scripts/generate_pack_manifests.ts +10 -2
  437. package/src/scripts/generate_role_experiences_catalog.ts +2 -2
  438. package/src/scripts/generate_settings_reference.ts +1 -1
  439. package/src/scripts/git_authorization_hook.ts +22 -1
  440. package/src/scripts/grade_target_readiness.ts +48 -5
  441. package/src/scripts/hook_effect_doctor.ts +261 -0
  442. package/src/scripts/hook_manifest.json +1 -1
  443. package/src/scripts/hook_manifest.yaml +125 -16
  444. package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
  445. package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
  446. package/src/scripts/hooks/comment_discipline_hook.ts +146 -0
  447. package/src/scripts/hooks/concern_registry.ts +6 -0
  448. package/src/scripts/hooks/dispatch_hook.ts +32 -0
  449. package/src/scripts/hooks/journal_record_hook.ts +345 -0
  450. package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
  451. package/src/scripts/hooks/run_continuation_hook.ts +44 -9
  452. package/src/scripts/hooks/shims/install.sh +61 -0
  453. package/src/scripts/hooks/shims/php +101 -0
  454. package/src/scripts/hooks/suggestion_capture_hook.ts +10 -0
  455. package/src/scripts/hooks/turn_end_gate_hook.ts +9 -1
  456. package/src/scripts/hot_context_hook.ts +16 -0
  457. package/src/scripts/install-hooks.sh +20 -5
  458. package/src/scripts/install.ts +17 -35
  459. package/src/scripts/inventory_frontmatter.ts +2 -1
  460. package/src/scripts/language_mirror_hook.ts +14 -2
  461. package/src/scripts/lint_adr_sweep_routing.ts +12 -0
  462. package/src/scripts/lint_canonical_terms.ts +604 -0
  463. package/src/scripts/lint_carrier_integrity.ts +820 -0
  464. package/src/scripts/lint_code_comments.ts +643 -0
  465. package/src/scripts/lint_composition_review.ts +619 -0
  466. package/src/scripts/lint_consolidation_lineage.ts +666 -0
  467. package/src/scripts/lint_eval_specs.ts +593 -0
  468. package/src/scripts/lint_hook_manifest.ts +19 -0
  469. package/src/scripts/lint_host_portability.ts +373 -0
  470. package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
  471. package/src/scripts/lint_memory_twin_parity.ts +335 -0
  472. package/src/scripts/lint_metric_consumers.ts +355 -0
  473. package/src/scripts/lint_plan_risk_register.ts +39 -19
  474. package/src/scripts/lint_promotion_paths.ts +779 -0
  475. package/src/scripts/lint_skill_descriptions.ts +18 -1
  476. package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
  477. package/src/scripts/lint_skill_link_reach.ts +252 -0
  478. package/src/scripts/lint_skill_trigger_corpus.ts +426 -23
  479. package/src/scripts/lint_ticket_buildable.ts +17 -1
  480. package/src/scripts/llm_propose.ts +256 -0
  481. package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
  482. package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
  483. package/src/scripts/measure_delivery_sets.ts +361 -0
  484. package/src/scripts/measure_docs_dead_links.ts +348 -0
  485. package/src/scripts/measure_host_capture.ts +461 -0
  486. package/src/scripts/measure_routing_signal.ts +307 -0
  487. package/src/scripts/migration_status.ts +3 -3
  488. package/src/scripts/model_rule_injection.ts +76 -0
  489. package/src/scripts/orchestration_record.ts +14 -0
  490. package/src/scripts/preamble_byte_census.ts +139 -10
  491. package/src/scripts/prepack-check.mjs +4 -1
  492. package/src/scripts/probe_council_retention.ts +495 -0
  493. package/src/scripts/probe_turnaround.ts +384 -0
  494. package/src/scripts/probe_unblocked_ask.ts +279 -0
  495. package/src/scripts/release.ts +21 -37
  496. package/src/scripts/release_drill.ts +143 -0
  497. package/src/scripts/release_env.ts +35 -0
  498. package/src/scripts/release_publication.ts +84 -0
  499. package/src/scripts/render_benchmark_md.ts +1 -1
  500. package/src/scripts/rule_activation_census.ts +70 -9
  501. package/src/scripts/rule_backlinks.ts +1 -1
  502. package/src/scripts/run_lifecycle_suite.ts +208 -0
  503. package/src/scripts/run_skill_evals.ts +40 -0
  504. package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
  505. package/src/scripts/schemas/drafting-channels.schema.json +43 -0
  506. package/src/scripts/schemas/evals.schema.json +24 -1
  507. package/src/scripts/schemas/rule.schema.json +52 -1
  508. package/src/scripts/schemas/skill.schema.json +17 -2
  509. package/src/scripts/skill_overlap.ts +7 -1
  510. package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
  511. package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
  512. package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
  513. package/src/scripts/skill_usage_report.ts +2 -1
  514. package/src/scripts/stubs_due.ts +211 -0
  515. package/src/scripts/sweep_source_surfaces.ts +678 -0
  516. package/src/scripts/sync_pr_branch.ts +3 -3
  517. package/src/scripts/trigger_eval_grandfather.json +202 -222
  518. package/src/scripts/utilization_report.ts +22 -2
  519. package/src/server/schemas/settings.ts +5 -0
  520. package/src/templates/marketing-copy.yml +1 -1
  521. package/dist/ui/assets/index-Cxgy63kz.js +0 -26
@@ -99,6 +99,9 @@ import * as global_deploy_inventory from '../_lib/global_deploy_inventory.js';
99
99
  import { censusDuplicateScope } from '../_lib/duplicate_scope_census.js';
100
100
  import * as preamble_byte_census from '../preamble_byte_census.js';
101
101
  import * as dispatch_economy_report from '../dispatch_economy_report.js';
102
+ import * as runtime_wiring from '../_lib/runtime_wiring_checks.js';
103
+ import * as install_reach from '../_lib/install_reach_checks.js';
104
+ import * as runtime_checks from '../_lib/doctor_runtime_checks.js';
102
105
  import { git_common_dir } from '../_lib/git_common_dir.js';
103
106
  import * as sync_gitattributes from '../sync_gitattributes.js';
104
107
  import {
@@ -106,6 +109,7 @@ import {
106
109
  ROOT_OVERRIDE_ENV,
107
110
  ProjectRootError,
108
111
  find_project_root_with_trace,
112
+ iter_setting_overrides,
109
113
  project_settings_path,
110
114
  resolve_project_root,
111
115
  type TraceRecord,
@@ -771,6 +775,8 @@ const CHECK_IDS = [
771
775
  'claude-command-wrappers',
772
776
  'surface-state',
773
777
  'hook-wiring',
778
+ ...runtime_wiring.WIRING_CHECK_IDS,
779
+ ...install_reach.REACH_CHECK_IDS,
774
780
  'stale-orphans',
775
781
  'overrides',
776
782
  'rule-scope-drift',
@@ -802,6 +808,8 @@ const GLOBAL_CHECK_IDS: ReadonlySet<string> = new Set([
802
808
  'claude-command-wrappers',
803
809
  'surface-state',
804
810
  'hook-wiring',
811
+ ...runtime_wiring.WIRING_CHECK_IDS,
812
+ ...install_reach.REACH_CHECK_IDS,
805
813
  'stale-orphans',
806
814
  'overrides',
807
815
  'rule-scope-drift',
@@ -1361,79 +1369,16 @@ function pathExistsAny(p: string): boolean {
1361
1369
  }
1362
1370
 
1363
1371
 
1364
- /**
1365
- * Managed hook wiring (single-surface model): the deterministic hook matrix
1366
- * must be registered in ~/.claude/settings.json AND the dispatch target
1367
- * (`agent-config` binary) must resolve on PATH. Both halves are required —
1368
- * hooks without a binary silently no-op every session.
1369
- */
1372
+ /** Managed hook wiring — moved to `_lib/runtime_wiring_checks.ts` (it IS a runtime-wiring check). */
1370
1373
  function _check_hook_wiring(): Dict {
1371
- const claude = shutilWhich('claude');
1372
- if (claude === null) {
1373
- return {
1374
- id: 'hook-wiring',
1375
- status: 'skipped',
1376
- message: 'Claude Code CLI not on PATH — hook-wiring check not applicable',
1377
- remedy: '',
1378
- };
1379
- }
1380
- const settings_path = path.join(os.homedir(), '.claude', 'settings.json');
1381
- let missing: string[];
1382
- try {
1383
- const matrix = claude_settings_hooks.build_claude_hook_matrix(
1384
- path.join(_package_root(), 'src', 'scripts', 'hook_manifest.yaml'),
1385
- );
1386
- const settings = pathExists(settings_path)
1387
- ? (JSON.parse(fs.readFileSync(settings_path, 'utf8')) as Record<string, unknown>)
1388
- : {};
1389
- const hooks = ((settings['hooks'] ?? {}) as Record<string, unknown>) || {};
1390
- missing = Object.keys(matrix).filter((ev) => {
1391
- const groups = hooks[ev];
1392
- if (!Array.isArray(groups)) return true;
1393
- return !JSON.stringify(groups).includes(claude_settings_hooks.MANAGED_SIGNATURE);
1394
- });
1395
- } catch (e) {
1396
- return {
1397
- id: 'hook-wiring',
1398
- status: 'fail',
1399
- message: `cannot evaluate managed hooks: ${String(e)}`,
1400
- remedy: 'fix ~/.claude/settings.json (invalid JSON?), then agent-config refresh --global',
1401
- };
1402
- }
1403
- const binary_ok = shutilWhich('agent-config') !== null;
1404
- if (missing.length === 0 && binary_ok) {
1405
- return {
1406
- id: 'hook-wiring',
1407
- status: 'ok',
1408
- message: 'managed hooks registered in ~/.claude/settings.json; dispatch binary on PATH',
1409
- remedy: '',
1410
- };
1411
- }
1412
- if (missing.length > 0 && claude_plugin.claude_plugin_installed()) {
1413
- return {
1414
- id: 'hook-wiring',
1415
- status: 'warn',
1416
- message:
1417
- `managed hooks missing for: ${missing.join(', ')} — currently carried by the ` +
1418
- 'installed plugin (deprecated surface)',
1419
- remedy: 'agent-config refresh --global (writes the managed settings.json block)',
1420
- };
1421
- }
1422
- const parts: string[] = [];
1423
- if (missing.length > 0) parts.push(`managed hooks missing for: ${missing.join(', ')}`);
1424
- if (!binary_ok) parts.push('`agent-config` not on PATH (hooks would silently no-op)');
1425
- if (parts.length === 0) {
1426
- // hooks complete, binary missing was the only issue → covered above.
1427
- parts.push('`agent-config` not on PATH');
1428
- }
1429
- return {
1430
- id: 'hook-wiring',
1431
- status: 'fail',
1432
- message: parts.join('; '),
1433
- remedy: binary_ok
1434
- ? 'agent-config refresh --global'
1435
- : 'npm install -g @event4u/agent-config, then agent-config refresh --global',
1436
- };
1374
+ return runtime_wiring.checkHookWiring({
1375
+ which: shutilWhich,
1376
+ packageRoot: _package_root(),
1377
+ homeDir: os.homedir(),
1378
+ buildMatrix: (mp) => claude_settings_hooks.build_claude_hook_matrix(mp) as Record<string, unknown>,
1379
+ managedSignature: claude_settings_hooks.MANAGED_SIGNATURE,
1380
+ pluginInstalled: () => claude_plugin.claude_plugin_installed(),
1381
+ }) as unknown as Dict;
1437
1382
  }
1438
1383
 
1439
1384
  function _check_bridge_drift(
@@ -1811,46 +1756,12 @@ function _check_duplicate_scope_rules(project_root: string, userRulesDirOverride
1811
1756
  };
1812
1757
  }
1813
1758
 
1814
- function _check_python_runtime(): Dict {
1815
- // Post-teardown: the package runtime is TypeScript-on-`tsx`. python3 is no
1816
- // longer a runtime dependency, so this check no longer probes for an
1817
- // interpreter (spawning python3 here would be misleading in a python-free
1818
- // package). The check id is retained for the doctor's stable report shape;
1819
- // it always reports `ok`.
1820
- return {
1821
- id: 'python-runtime',
1822
- status: 'ok',
1823
- message: 'python3 is not a runtime dependency (TS runtime via tsx)',
1824
- remedy: '',
1825
- };
1826
- }
1827
-
1828
- function _check_humanizer_runtime(): Dict {
1829
- // Write-engine step 4b (humanize audit) runs `detect_ai_tells.ts` via a
1830
- // Node/tsx runtime "when available", degrading to a prose-only audit
1831
- // otherwise. This check surfaces which path a consumer install gets so the
1832
- // default-on behavior is not a silent surprise. Either state is healthy —
1833
- // the fallback is graceful by design — so it never fails the run.
1834
- const node = shutilWhich('node');
1835
- if (node === null) {
1836
- return {
1837
- id: 'humanizer-runtime',
1838
- status: 'ok',
1839
- message:
1840
- 'no Node runtime on PATH — write-engine step 4b uses the ' +
1841
- 'prose-only humanize audit (graceful fallback)',
1842
- remedy:
1843
- 'install Node to enable the mechanical detect_ai_tells.ts pass; ' +
1844
- 'the prose audit runs regardless',
1845
- };
1846
- }
1847
- return {
1848
- id: 'humanizer-runtime',
1849
- status: 'ok',
1850
- message: `Node runtime present (${node}) — step 4b runs the mechanical detect_ai_tells.ts pass`,
1851
- remedy: '',
1852
- };
1853
- }
1759
+ // Both bodies moved to `_lib/doctor_runtime_checks.ts` to pay for the Phase-1
1760
+ // install-reach wiring under `check_source_size_budget`. These wrappers keep the
1761
+ // historical names and arity, so the runner map, the export block and the
1762
+ // existing fallback test are untouched by the move.
1763
+ const _check_python_runtime = (): Dict => runtime_checks.checkPythonRuntime();
1764
+ const _check_humanizer_runtime = (): Dict => runtime_checks.checkHumanizerRuntime(shutilWhich);
1854
1765
 
1855
1766
  function _check_mcp_beta_readiness(project_root: string): Dict {
1856
1767
  // Maintainer-scoped gate: the six artefacts live in the agent-config
@@ -2970,6 +2881,8 @@ function _run_checks(
2970
2881
  'claude-command-wrappers': _check_claude_command_wrappers,
2971
2882
  'surface-state': _check_surface_state,
2972
2883
  'hook-wiring': _check_hook_wiring,
2884
+ ...(runtime_wiring.wiringRunners({ packageRoot: _package_root(), iterOverrides: () => iter_setting_overrides({ cwd: project_root }) }) as unknown as Record<string, CheckRunner>),
2885
+ ...(install_reach.reachRunners({ projectRoot: project_root, resolvableVersion: _current_package_version() }) as unknown as Record<string, CheckRunner>),
2973
2886
  'stale-orphans': _check_stale_orphans,
2974
2887
  overrides: () => _check_overrides(project_root),
2975
2888
  'rule-scope-drift': () => _check_rule_scope_drift(project_root),
@@ -3054,6 +2967,8 @@ function _run_checks_no_manifest(
3054
2967
  'claude-command-wrappers': _check_claude_command_wrappers,
3055
2968
  'surface-state': _check_surface_state,
3056
2969
  'hook-wiring': _check_hook_wiring,
2970
+ ...(runtime_wiring.wiringRunners({ packageRoot: _package_root(), iterOverrides: () => iter_setting_overrides({ cwd: project_root }) }) as unknown as Record<string, CheckRunner>),
2971
+ ...(install_reach.reachRunners({ projectRoot: project_root, resolvableVersion: _current_package_version() }) as unknown as Record<string, CheckRunner>),
3057
2972
  'stale-orphans': _check_stale_orphans,
3058
2973
  // BOTH registries need the id. Registering only the first one crashed with
3059
2974
  // `runners[cid] is not a function` on a global-only consumer, which is the
@@ -235,8 +235,14 @@ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
235
235
  roadmap:progress Regenerate agents/roadmaps-progress.md from open roadmaps
236
236
  (archives completed roadmaps; --no-archive to skip)
237
237
  roadmap:progress-check Fail if agents/roadmaps-progress.md is stale (for CI)
238
+ roadmap:set-step Flip ONE checkbox glyph safely (lock + line anchor +
239
+ live invariant + survival check)
238
240
  roadmap:archive Archive completed roadmaps (branch-touched by default;
239
241
  --all for every complete one; --dry-run to preview)
242
+ stubs:due Read-only: roadmap stubs past their `review_by:`
243
+ date, plus the decisions routed to the owner.
244
+ Writes nothing. Flags: --json, --counts,
245
+ --today <ISO> (pin "now")
240
246
  gates Open decisions that need you, rendered as actions —
241
247
  roadmap blockers filtered by owner, most-unblocking
242
248
  first. Flags: --all (include maintainer/external),
@@ -755,6 +761,9 @@ cmd_roadmap_progress() {
755
761
  exec_ts "$script" --archive "$@"
756
762
  }
757
763
 
764
+ # The parked estate's front door — read-only, and deliberately so. It authors
765
+ # nothing under `agents/roadmaps/stubs/`, which is what keeps it clear of the
766
+ # 2026-08-21 council verdict that deleted the hand-maintained index there.
758
767
  cmd_roadmap_progress_check() {
759
768
  local script
760
769
  script="$(resolve_script "dist/agent-src/scripts/update_roadmap_progress.ts" ".augment/scripts/update_roadmap_progress.ts")"
@@ -769,6 +778,18 @@ cmd_roadmap_archive() {
769
778
  exec_ts "$script" "$@"
770
779
  }
771
780
 
781
+ cmd_roadmap_set_step() {
782
+ local script
783
+ script="$(resolve_script "dist/agent-src/scripts/roadmap_set_step.ts" ".augment/scripts/roadmap_set_step.ts")"
784
+ exec_ts "$script" "$@"
785
+ }
786
+
787
+ cmd_stubs_due() {
788
+ local script
789
+ script="$(resolve_script "dist/agent-src/scripts/stubs_due.ts" ".augment/scripts/stubs_due.ts")"
790
+ exec_ts "$script" "$@"
791
+ }
792
+
772
793
  cmd_gates() {
773
794
  local script
774
795
  script="$(resolve_script "dist/agent-src/scripts/roadmap_gates.ts" ".augment/scripts/roadmap_gates.ts")"
@@ -1481,6 +1502,8 @@ main() {
1481
1502
  roadmap:progress) cmd_roadmap_progress "$@" ;;
1482
1503
  roadmap:progress-check) cmd_roadmap_progress_check "$@" ;;
1483
1504
  roadmap:archive) cmd_roadmap_archive "$@" ;;
1505
+ roadmap:set-step) cmd_roadmap_set_step "$@" ;;
1506
+ stubs:due) cmd_stubs_due "$@" ;;
1484
1507
  gates) cmd_gates "$@" ;;
1485
1508
  capabilities:index) cmd_capabilities_index "$@" ;;
1486
1509
  adr:effective) cmd_adr_effective "$@" ;;
@@ -0,0 +1,255 @@
1
+ /**
2
+ * The activation ladder, its precedence receipt, and the unknown invariant.
3
+ *
4
+ * `road-to-governed-harness-evolution` Phase 1, steps 1.1 and 1.2.
5
+ *
6
+ * **E4 + E9 decided 2026-08-30, option B, AI council 2/2** (anthropic +
7
+ * openai): SIX rungs, twelve cascade stages. The argument that carried it was
8
+ * not "more is better" — it was that option A requires EDITING Phase 1's exit
9
+ * criterion in order to fit, and that the distinction A drops is the one the
10
+ * delivery experiment exists to measure. Two independent roadmaps arriving at
11
+ * the same distinction (`road-to-experience-loop-broadening` Phase 5 needs five
12
+ * activation/adherence states of its own) was the strongest evidence available.
13
+ *
14
+ * The cost asymmetry is a ratchet and it points the same way: an
15
+ * under-populated rung can be collapsed later, while a distinction that was
16
+ * never recorded cannot be added to historical data at all.
17
+ *
18
+ * **The openai seat attached a condition, and this module is it.** Before the
19
+ * enums are persisted, every rung must map to a receipt field and an OBSERVABLE
20
+ * PREDICATE, with an explicit `unknown`; see {@link LADDER}. Its `revisit-if`:
21
+ * any rung lacking a distinct observable predicate, or staying `unknown` across
22
+ * representative Phase 1 evaluations — in which case keep six rungs and
23
+ * reconsider the nine-stage cascade independently.
24
+ */
25
+
26
+ /**
27
+ * The six rungs, in order. A run climbs them; the first one it fails to reach
28
+ * is where the receipt points.
29
+ *
30
+ * `projected`, `delivered` and `visible` are three rungs and not one because
31
+ * the shipping substrate already separates them:
32
+ * `_lib/lean_projection_mode.ts:19` defines `eager-all | thin | delivery`, and
33
+ * under `thin`/`delivery` an artefact can be projected without being visible in
34
+ * a given turn. The 4-rung form collapses all three into `injected`.
35
+ */
36
+ export const LADDER_RUNGS = [
37
+ 'eligible',
38
+ 'selected',
39
+ 'projected',
40
+ 'delivered',
41
+ 'visible',
42
+ 'adhered',
43
+ ] as const;
44
+ export type LadderRung = (typeof LADDER_RUNGS)[number];
45
+
46
+ /**
47
+ * The receipt-bearing cascade stage that reads each rung, in ladder order.
48
+ *
49
+ * Derived from {@link LADDER_RUNGS} rather than written out, so a rung cannot
50
+ * exist without its stage and the two orders cannot drift. Named here rather
51
+ * than in the cascade because the RUNGS are this module's, and a second module
52
+ * spelling `receipt-<rung>` would be a second source of truth for the same
53
+ * enum.
54
+ *
55
+ * The cascade consumes these; nothing here imports the cascade. That direction
56
+ * is the one `docs/contracts/activation-receipt-trust-boundary.md` TB-1 fixes.
57
+ */
58
+ export const RECEIPT_STAGES = LADDER_RUNGS.map((r) => `receipt-${r}` as const);
59
+ export type ReceiptStage = (typeof RECEIPT_STAGES)[number];
60
+
61
+ /** The rung a receipt-bearing stage reads. Total over {@link ReceiptStage}. */
62
+ export function rungForReceiptStage(stage: ReceiptStage): LadderRung {
63
+ return stage.slice('receipt-'.length) as LadderRung;
64
+ }
65
+
66
+ /**
67
+ * Which failure family a stall at each rung belongs to.
68
+ *
69
+ * This is what step 1.1's exit criterion asks for: a deliberately failing
70
+ * trigger eval must be classifiable as CONTENT vs ACTIVATION vs ADHERENCE from
71
+ * the recorded receipt alone.
72
+ */
73
+ export type FailureFamily = 'content' | 'activation' | 'adherence' | 'unknown';
74
+
75
+ /** One rung's contract: what it means, what observes it, and what it decides. */
76
+ export interface RungSpec {
77
+ readonly rung: LadderRung;
78
+ /** The receipt field whose value decides this rung. */
79
+ readonly observedBy: string;
80
+ /** How the value is read — the observable predicate the council required. */
81
+ readonly predicate: string;
82
+ /** The family a stall AT this rung belongs to. */
83
+ readonly family: Exclude<FailureFamily, 'unknown'>;
84
+ }
85
+
86
+ /**
87
+ * The evidence matrix — rung → receipt field → predicate → family.
88
+ *
89
+ * Required by the E4+E9 verdict before the enum is persisted. Its purpose is to
90
+ * make "false precision" checkable: a rung whose predicate cannot be evaluated
91
+ * from a receipt is a rung that will read `unknown` forever, which is the
92
+ * council's own stated revisit condition.
93
+ */
94
+ export const LADDER: readonly RungSpec[] = [
95
+ {
96
+ rung: 'eligible',
97
+ observedBy: 'eligible',
98
+ predicate: 'the artefact matched the request at all — its triggers, packs and workspaces admit it',
99
+ family: 'content',
100
+ },
101
+ {
102
+ rung: 'selected',
103
+ observedBy: 'selected',
104
+ predicate: 'the router chose it over competing artefacts at the same trigger',
105
+ family: 'activation',
106
+ },
107
+ {
108
+ rung: 'projected',
109
+ observedBy: 'projected',
110
+ predicate: 'a host tree carries the artefact — the projection wrote a file for this host',
111
+ family: 'activation',
112
+ },
113
+ {
114
+ rung: 'delivered',
115
+ observedBy: 'delivered',
116
+ predicate: 'the host loaded it for this turn under the active lean_projection_mode',
117
+ family: 'activation',
118
+ },
119
+ {
120
+ rung: 'visible',
121
+ observedBy: 'visible',
122
+ predicate: 'it survived the turn\'s context budget rather than being trimmed',
123
+ family: 'activation',
124
+ },
125
+ {
126
+ rung: 'adhered',
127
+ observedBy: 'adhered',
128
+ predicate: 'the reply shows the obligation was followed, not merely present',
129
+ family: 'adherence',
130
+ },
131
+ ];
132
+
133
+ /**
134
+ * Why a rung was not reached.
135
+ *
136
+ * This replaces a flat `rule/skill/hook/router/host/model` attribution, which
137
+ * names a CATEGORY and not a PLACE — you cannot fix "router" and you can fix
138
+ * "lost to a higher-priority rule".
139
+ */
140
+ export const PRECEDENCE_REASONS = [
141
+ 'lost-to-higher-priority-rule',
142
+ 'host-restriction',
143
+ 'pack-filter',
144
+ 'missing-projection',
145
+ 'context-budget',
146
+ 'contradictory-instruction',
147
+ ] as const;
148
+ export type PrecedenceReason = (typeof PRECEDENCE_REASONS)[number];
149
+
150
+ /**
151
+ * A rung's observed state.
152
+ *
153
+ * `'unknown'` is a first-class value and NOT a default that means no: step
154
+ * 1.2's soundness invariant is that a state which was not observed stays
155
+ * unknown and is never silently converted to success. Without it every
156
+ * downstream rate is inflated by exactly the capture gap.
157
+ */
158
+ export type RungState = 'reached' | 'not-reached' | 'unknown';
159
+
160
+ export interface ActivationReceipt {
161
+ readonly artefact: string;
162
+ /** A rung ABSENT from this map is `unknown` — see {@link rungState}. */
163
+ readonly rungs: Readonly<Partial<Record<LadderRung, RungState>>>;
164
+ /** Why the first not-reached rung was not reached. */
165
+ readonly reason?: PrecedenceReason;
166
+ }
167
+
168
+ /**
169
+ * A rung's state, with absence read as `unknown`.
170
+ *
171
+ * ABSENT and `not-reached` are different observations and this is where that is
172
+ * enforced. The audit-log contract already draws the same line for
173
+ * `skills_applied` (`docs/contracts/audit-log-v1.md:88`): the key omitted means
174
+ * *not recorded*, `[]` means *recorded, and none*. A reader that folds the two
175
+ * cannot tell no signal from a negative signal.
176
+ */
177
+ export function rungState(receipt: ActivationReceipt, rung: LadderRung): RungState {
178
+ return receipt.rungs[rung] ?? 'unknown';
179
+ }
180
+
181
+ /**
182
+ * Which family a receipt's failure belongs to — step 1.1's exit criterion.
183
+ *
184
+ * Walks the ladder in order and returns the family of the FIRST rung that was
185
+ * not reached. A rung whose state is `unknown` short-circuits to `'unknown'`
186
+ * rather than being skipped: skipping it would silently attribute the failure
187
+ * to a later rung the run may never have reached, which is the same inflation
188
+ * step 1.2 forbids, wearing a different shape.
189
+ *
190
+ * Every rung reached → `'adherence'` is NOT returned; the receipt did not fail,
191
+ * and the caller gets `null`.
192
+ */
193
+ export function classifyFailure(receipt: ActivationReceipt): FailureFamily | null {
194
+ return firstStall(receipt)?.family ?? null;
195
+ }
196
+
197
+ /** Where a receipt stopped climbing, and the family that stall belongs to. */
198
+ export interface LadderStall {
199
+ /** The rung the walk stopped at. */
200
+ readonly rung: LadderRung;
201
+ /** The receipt-bearing cascade stage that reads {@link rung}. */
202
+ readonly stage: ReceiptStage;
203
+ /** `unknown` when the rung was never observed; the rung's family otherwise. */
204
+ readonly family: FailureFamily;
205
+ }
206
+
207
+ /**
208
+ * The first rung a receipt did not reach, with its stage and its family.
209
+ *
210
+ * {@link classifyFailure} is a projection of this, and delegates to it rather
211
+ * than walking the ladder a second time. Two walks of the same ladder applying
212
+ * the same short-circuit rule is two places to change it — and the cascade needs
213
+ * the STAGE as well as the family, which is the only reason this exists
214
+ * separately at all.
215
+ */
216
+ export function firstStall(receipt: ActivationReceipt): LadderStall | null {
217
+ for (const [i, spec] of LADDER.entries()) {
218
+ const state = rungState(receipt, spec.rung);
219
+ const stage = RECEIPT_STAGES[i] as ReceiptStage;
220
+ if (state === 'unknown') return { rung: spec.rung, stage, family: 'unknown' };
221
+ if (state === 'not-reached') return { rung: spec.rung, stage, family: spec.family };
222
+ }
223
+ return null;
224
+ }
225
+
226
+ /** A rate with its `unknown` bucket kept OUT of the denominator. */
227
+ export interface LadderRate {
228
+ readonly reached: number;
229
+ readonly notReached: number;
230
+ readonly unknown: number;
231
+ /** `reached / (reached + notReached)`, or `null` when that is zero. */
232
+ readonly rate: number | null;
233
+ }
234
+
235
+ /**
236
+ * Aggregate one rung across receipts.
237
+ *
238
+ * The invariant step 1.2 exists for: **no aggregation folds `unknown` into a
239
+ * success denominator.** `unknown` is reported beside the rate, never inside
240
+ * it, and a population that is entirely `unknown` yields `rate: null` rather
241
+ * than `0` — zero is a measurement, and there was none.
242
+ */
243
+ export function ladderRate(receipts: readonly ActivationReceipt[], rung: LadderRung): LadderRate {
244
+ let reached = 0;
245
+ let notReached = 0;
246
+ let unknown = 0;
247
+ for (const r of receipts) {
248
+ const s = rungState(r, rung);
249
+ if (s === 'reached') reached += 1;
250
+ else if (s === 'not-reached') notReached += 1;
251
+ else unknown += 1;
252
+ }
253
+ const denominator = reached + notReached;
254
+ return { reached, notReached, unknown, rate: denominator === 0 ? null : reached / denominator };
255
+ }