@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
@@ -7,34 +7,77 @@
7
7
 
8
8
  ## Indexing
9
9
 
10
+ Three separate things get conflated here, and keeping them apart is what makes
11
+ the rest of this section decidable:
12
+
13
+ 1. **Declaring an integrity constraint** — a uniqueness or foreign-key
14
+ constraint. This is a correctness decision about the data model.
15
+ 2. **Indexing the referencing column** — the child side of a foreign key, which
16
+ is what makes the lookup and the constraint check fast.
17
+ 3. **Adding an optional query-performance index** — everything else.
18
+
19
+ The row-count guidance below governs **(3) only**. It has never governed (1),
20
+ and it must not be read as governing (2).
21
+
10
22
  ### When to add indexes
11
23
 
12
24
  - Columns in `WHERE` clauses
13
25
  - Columns in `JOIN` conditions
14
26
  - Columns in `ORDER BY` (especially with pagination)
15
27
  - Foreign key columns (Laravel adds with `foreignId()`)
28
+ - Columns carrying a declared uniqueness constraint
16
29
 
17
30
  ### When NOT to add indexes
18
31
 
32
+ These apply to **optional performance indexes** — category (3) above:
33
+
19
34
  - Boolean columns with low selectivity (99% same value)
20
- - Small tables (< 1000 rows)
35
+ - Tables that are both small (< 1000 rows) **and rarely accessed**
21
36
  - Frequently updated columns (indexes slow writes)
22
37
 
38
+ **Row count decides nothing on its own.** A 40-row lookup table joined in every
39
+ report query and a 40-row config table read twice a week are the same size and
40
+ not the same decision — index the first on its observed access pattern, leave
41
+ the second alone. "Small" without "rarely accessed" is the folklore half of this
42
+ rule.
43
+
44
+ **Foreign-key and uniqueness indexes are created regardless of table size.**
45
+ They serve integrity and lookup latency, and a row count bears on neither. A
46
+ 40-row child table pointing at a customers table gets its foreign-key column
47
+ indexed like any other. Omit one only on the strength of inspected schema
48
+ behavior plus a representative workload measurement showing it serves no access
49
+ path — never on an anticipated write cost.
50
+
23
51
  ### Composite indexes
24
52
 
25
- Order matters — most selective column first:
53
+ Order matters, and what decides it is the **predicate shape**, not selectivity:
54
+
55
+ 1. Columns compared with **equality** (`=`, `IN`) come first.
56
+ 2. Then the column compared with a **range** (`<`, `>`, `BETWEEN`, `LIKE 'x%'`).
57
+ 3. Then columns the query only **orders by**.
58
+
59
+ Selectivity is a tie-break *within* a group, never the primary key of the
60
+ decision. An index cannot use any column after the first range predicate for
61
+ lookup, so a highly selective range column placed first throws away every column
62
+ behind it.
26
63
 
27
64
  ```php
65
+ // WHERE customer_id = ? AND created_at > ? ORDER BY created_at
28
66
  $table->index(['customer_id', 'created_at']);
29
67
  ```
30
68
 
69
+ `customer_id` leads because it is the **equality** predicate — not because it is
70
+ more selective. Reverse the order and the equality column sits behind a range,
71
+ where the index can no longer seek on it. That holds even when `created_at` is
72
+ the more selective of the two, which is exactly the case the folklore rule gets
73
+ wrong.
74
+
31
75
  ## Query Optimization
32
76
 
33
77
  ### EXPLAIN analysis
34
78
 
35
- | Column | Bad value | Meaning |
79
+ | Column | Value worth a second look | The question it raises |
36
80
  |---|---|---|
37
- | `type` | `ALL` | Full table scan — needs index |
38
81
  | `rows` | High number | Too many rows examined |
39
82
  | `Extra` | `Using filesort` | Sorting without index |
40
83
  | `Extra` | `Using temporary` | Temp table — optimize GROUP BY/DISTINCT |
@@ -42,6 +85,22 @@ $table->index(['customer_id', 'created_at']);
42
85
 
43
86
  Good values: `type` = `ref`, `eq_ref`, `const`; `Extra` = `Using index`.
44
87
 
88
+ **`type = ALL` is a full table scan, and a full table scan is often the correct
89
+ plan.** It belongs in no "bad value" column, because the row itself does not
90
+ decide:
91
+
92
+ - On a table small enough to sit in a page or two, the scan is **cheaper** than
93
+ an index lookup — the index costs a second read plus a row fetch per hit.
94
+ - On a predicate that matches a large fraction of the table, the planner picks
95
+ the scan **on purpose**; forcing an index there is slower, and many planners
96
+ will ignore the hint.
97
+ - On a table with hundreds of thousands of rows and a predicate matching a
98
+ handful, `ALL` is the defect.
99
+
100
+ The question to answer is *how many rows the predicate matches, out of how
101
+ many* — not whether `type` reads `ALL`. Compare the planner's `rows` estimate
102
+ against the table's size before concluding anything.
103
+
45
104
  ### Anti-patterns
46
105
 
47
106
  | Anti-pattern | Fix |
@@ -49,9 +108,20 @@ Good values: `type` = `ref`, `eq_ref`, `const`; `Extra` = `Using index`.
49
108
  | `SELECT *` in production | Select only needed columns |
50
109
  | `LIKE '%search%'` | Fulltext search or `LIKE 'search%'` |
51
110
  | `OFFSET` on large tables | Cursor pagination |
52
- | Subquery in WHERE | Rewrite as JOIN |
53
111
  | `ORDER BY RAND()` | Application-level randomization |
54
112
 
113
+ **Subqueries in `WHERE` are not on that list**, and the unconditional "rewrite
114
+ as a JOIN" they used to carry here was wrong more often than it was right:
115
+
116
+ | The subquery is | Do |
117
+ |---|---|
118
+ | **correlated** — it references the outer row, so it re-executes per row | rewrite as a JOIN, or as a derived table joined once. This is the case the folklore rule was built for |
119
+ | an **uncorrelated `IN` / `EXISTS`** | leave it. Planners flatten these into a semi-join already, and the hand-written JOIN often introduces the duplicate rows a semi-join was avoiding |
120
+ | a **bound on the driving set** — it produces a small list the outer query then filters on | leave it. Rewriting widens the driving set, which is the opposite of the intent |
121
+
122
+ Check the plan before rewriting: if the subquery already shows as a semi-join or
123
+ a materialized derived table executed once, the rewrite buys nothing and costs
124
+ correctness.
55
125
  ### Pagination
56
126
 
57
127
  Always paginate list endpoints — never `get()` on unbounded queries:
@@ -68,10 +138,23 @@ $users = User::query()->orderBy('id')->cursorPaginate(15);
68
138
 
69
139
  - Use `php artisan make:migration` to generate.
70
140
  - Use `decimal` for money — never `float`.
71
- - Add foreign keys with `constrained()` + proper `onDelete()`.
141
+ - Add foreign keys with `constrained()`, and **choose** the `onDelete()` action
142
+ rather than copying one: `cascade` when the child is expendable without its
143
+ parent, `restrict` when the child is a record in its own right (an invoice, an
144
+ audit row, a payment), `set null` when it survives the parent with the link
145
+ removed — which needs a nullable column. The decision table lives in
146
+ [`laravel-migration`](../../../src/skills/laravel-migration/SKILL.md)
147
+ § Referential action is a decision.
72
148
  - Always add indexes for searchable/filterable columns.
73
149
  - One logical change per migration.
74
- - Make reversible when possible (`down()` method).
150
+ - **Declare recovery, always.** Either a `down()` that restores the prior state,
151
+ or — when restoration is genuinely impossible — a roll-forward plan written in
152
+ the migration file itself, naming why restoration is impossible with the
153
+ evidence, the ordered recovery steps and their inputs, the criteria that say
154
+ recovery succeeded, and the responsible owner. Silence is the violation, not
155
+ the absence of `down()`. Full contract:
156
+ [`laravel-migration`](../../../src/skills/laravel-migration/SKILL.md)
157
+ § The recovery contract.
75
158
 
76
159
  ### Multi-connection migrations
77
160
 
@@ -1,8 +1,8 @@
1
1
  # Prompt Templates
2
2
 
3
- Reference catalogue of prompt structures the [`prompt-optimizer`](../../.agent-src.uncondensed/skills/prompt-optimizer/SKILL.md)
3
+ Reference catalogue of prompt structures the [`prompt-optimizer`](../../src/skills/prompt-optimizer/SKILL.md)
4
4
  skill picks from during the **Develop** step of the 4-D methodology.
5
- Cited by the [`refine-prompt`](../../.agent-src.uncondensed/skills/refine-prompt/SKILL.md)
5
+ Cited by the [`refine-prompt`](../../src/skills/refine-prompt/SKILL.md)
6
6
  skill in `mini` mode for stack-aware shaping.
7
7
 
8
8
  Templates are tools, not dogma. Pick by request type, not by upstream
@@ -108,7 +108,7 @@ warrants either reaction. The stance slot makes the honest-when-warranted
108
108
  contract explicit.
109
109
 
110
110
  **Package equivalents** — inside this agent-config, the
111
- [`adversarial-review`](../../.agent-src.uncondensed/skills/adversarial-review/SKILL.md)
111
+ [`adversarial-review`](../../src/skills/adversarial-review/SKILL.md)
112
112
  skill implements the same stance via an Attack-Defend-Revise loop and is
113
113
  the right tool when the user submits finished work for a critical take.
114
114
  This template is for **end-users prompting their own LLM** (ChatGPT,
@@ -155,7 +155,7 @@ are slots the model cannot fill honestly.
155
155
  The catalogue's own position: a template earns its place by making a
156
156
  request *checkable*, not by making it sound authoritative. Where a rough
157
157
  prompt carries one of these three, the
158
- [`prompt-optimizer`](../../.agent-src.uncondensed/skills/prompt-optimizer/SKILL.md)
158
+ [`prompt-optimizer`](../../src/skills/prompt-optimizer/SKILL.md)
159
159
  strips it in its de-inflation sub-step before any template is picked —
160
160
  and strips nothing else, because everything outside these three is a
161
161
  requirement the author meant. This section is own analysis; it records a
@@ -183,7 +183,7 @@ membership.
183
183
 
184
184
  ## See also
185
185
 
186
- - [`prompt-optimizer`](../../.agent-src.uncondensed/skills/prompt-optimizer/SKILL.md) — engine-outbound; cites this catalogue in its Develop step
187
- - [`refine-prompt`](../../.agent-src.uncondensed/skills/refine-prompt/SKILL.md) — engine-inbound; uses templates in `mini` mode for stack-aware shaping
188
- - [`prompt-engineering-patterns`](../../.agent-src.uncondensed/skills/prompt-engineering-patterns/SKILL.md) — production-LLM prompt patterns (sibling skill, not a catalogue)
186
+ - [`prompt-optimizer`](../../src/skills/prompt-optimizer/SKILL.md) — engine-outbound; cites this catalogue in its Develop step
187
+ - [`refine-prompt`](../../src/skills/refine-prompt/SKILL.md) — engine-inbound; uses templates in `mini` mode for stack-aware shaping
188
+ - [`prompt-engineering-patterns`](../../src/skills/prompt-engineering-patterns/SKILL.md) — production-LLM prompt patterns (sibling skill, not a catalogue)
189
189
  - AI Council session: `agents/runtime/council/responses/prompt-master-mini.json` (2026-05-17) <!-- council-ref-allowed: ADR decision trace -->
package/llms.txt CHANGED
@@ -281,9 +281,9 @@ technical-specification: Use when the user says \"write a spec\", \"create RFC\"
281
281
  terraform: Use when writing Terraform — AWS modules, resources, variables, outputs, remote state — even when the user just says 'provision this infra' or 'add an S3 bucket' without naming Terraform.
282
282
  terragrunt: Use when working with Terragrunt — DRY multi-env configs, module dependencies, remote state orchestration — even when the user just says 'deploy this to staging and prod' without naming Terragrunt.
283
283
  test-case-discovery: Use BEFORE writing any test — enumerate cases per behavior (happy / boundary / error / abuse), prioritize by likelihood × impact, cross-check via subagent — even if the user just says 'add tests'.
284
- test-driven-development: Use when implementing a feature, fixing a bug, or refactoring — write a failing test first, then the code — even if the user just says 'add this function' or 'fix this bug'.
284
+ test-driven-development: Use when implementing a feature, fixing a bug, or refactoring — write the failing test first, then the code, even on 'add this function'. Owns the ORDER; test shape is `testing-anti-patterns`.
285
285
  test-performance: Use when optimizing test suite performance — database setup, seeder optimization, parallel testing, CI pipeline efficiency, or RefreshDatabase alternatives.
286
- testing-anti-patterns: Use BEFORE writing/changing tests, adding mocks, or test-only methods on production classes — vs mocking-the-mock, production pollution, partial mocks, and overfit/tautological assertions
286
+ testing-anti-patterns: Use BEFORE writing/changing tests or adding mocks — mocking-the-mock, production pollution, overfit assertions — even on 'is this test any good?'. Test SHAPE; the order is `test-driven-development`.
287
287
  threat-modeling: Use when adding auth, webhooks, uploads, queues, secrets, tenant boundaries, or public endpoints — produces trust boundaries + abuse cases mapped to files, BEFORE implementation.
288
288
  throughput-vs-morale-tradeoff: Use when balancing eng-team velocity vs quality vs burnout — on-call load, focus fragmentation, reorg shock. Triggers on 'team is burning out', 'why is velocity dropping'.
289
289
  token-optimizer: Use BEFORE any verbose CLI run, large file read, doc conversion, or near-context handoff — decision tree keyed by intent citing the canonical token-saving asset.
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
3
  "mcpName": "io.github.event4u-app/agent-config",
4
- "version": "14.12.0",
5
- "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including \"zero runtime daemon\".",
4
+ "version": "14.14.0",
5
+ "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including the counts in these badges.",
6
6
  "license": "MIT",
7
7
  "private": false,
8
8
  "type": "module",
@@ -52,8 +52,11 @@
52
52
  "AGENTS.md",
53
53
  "CHANGELOG.md",
54
54
  "CONTRIBUTING.md",
55
+ "CREDITS.md",
55
56
  "LICENSE",
56
57
  "MIGRATION.md",
58
+ "NOTICE",
59
+ "docs/THIRD-PARTY-NOTICES.md",
57
60
  "README.md",
58
61
  "llms.txt",
59
62
  "!dist/**/*.test.js",
@@ -12,8 +12,8 @@
12
12
  * `urp.collect()` completion criterion, and exit code 0. snake_case kept.
13
13
  *
14
14
  * A roadmap that has reached `count_open == 0` and `count_deferred == 0` is
15
- * **complete**. This sweep moves it to `agents/roadmaps/archive/`, rewrites
16
- * inbound references (`agents/roadmaps/<x>.md` → `agents/roadmaps/archive/<x>.md`)
15
+ * **complete**. This sweep moves it to `agents/roadmaps/archive/`, rewrites code-comment-allow provenance-comment -- the sweep's own operand
16
+ * inbound references (`agents/roadmaps/<x>.md` → `agents/roadmaps/archive/<x>.md`) code-comment-allow provenance-comment -- the rewrite this sweep performs
17
17
  * across tracked files so links never break, and regenerates the dashboard.
18
18
  *
19
19
  * It replaces the old **merge-gate** (keep one item open + a manual post-merge
@@ -59,6 +59,7 @@ import process from 'node:process';
59
59
  import { fileURLToPath, pathToFileURL } from 'node:url';
60
60
 
61
61
  import { collect } from './update_roadmap_progress.js';
62
+ import { guardedBaselineProblems, parseGuardedBaselines } from './guarded_baseline.js';
62
63
 
63
64
  const _HERE = fileURLToPath(import.meta.url);
64
65
 
@@ -135,7 +136,7 @@ function _branch_touched_paths(root: string, base: string): Set<string> | null {
135
136
  *
136
137
  * Two classes, and the second is why this predicate exists at all:
137
138
  *
138
- * - `agents/evidence/**` — a committed record of what was true, or of what a
139
+ * - `agents/evidence/**` — a committed record of what was true, or of what a code-comment-allow provenance-comment -- the predicate's operand set
139
140
  * reviewer was shown, at one point in time. Retroactively editing it makes it
140
141
  * claim something that did not happen, which is the failure
141
142
  * `evaluator-independence` exists to prevent ("the prompt ships with the
@@ -144,8 +145,8 @@ function _branch_touched_paths(root: string, base: string): Set<string> | null {
144
145
  * the payload. Rewriting them detaches the patch from the commit it records
145
146
  * AND makes `git apply` target a path the diff never created.
146
147
  *
147
- * Measured 2026-08-11: archiving one roadmap rewrote four frozen artefacts
148
- * under `agents/evidence/reviews/`, including the `diff.patch` headers of a
148
+ * Measured 2026-08-11: archiving one roadmap rewrote four frozen artifacts
149
+ * under `agents/evidence/reviews/`, including the `diff.patch` headers of a code-comment-allow provenance-comment -- names what the predicate protects
149
150
  * recorded review input. Nothing caught it — the sweep reported it as
150
151
  * "4 ref(s) migrated", which reads like success.
151
152
  */
@@ -311,7 +312,202 @@ interface ArchiveRecord {
311
312
  refs_migrated: string[];
312
313
  }
313
314
 
314
- /** Archive every complete active roadmap (count_open==0, count_deferred==0). */
315
+
316
+ /** One `[~]` step and whatever resolution annotation follows it. */
317
+ export interface DeferredItem {
318
+ /** The step text, trimmed, for the operator message. */
319
+ text: string;
320
+ /** `carried-to` / `merged-into`, or `null` when no annotation was found. */
321
+ kind: 'carried-to' | 'merged-into' | null;
322
+ /** Destination roadmap slug, or `null`. */
323
+ destination: string | null;
324
+ }
325
+
326
+ /**
327
+ * `<!-- deferred-resolution: carried-to=<slug> -->` — the resolved-deferral
328
+ * annotation. `merged-into=<slug>` is the second accepted form.
329
+ */
330
+ const DEFERRED_RESOLUTION_RE = /<!--\s*deferred-resolution:\s*(carried-to|merged-into)\s*=\s*([A-Za-z0-9._-]+)\s*-->/;
331
+
332
+ /** `- [~] …` — a deferred step, at any indent, with `-` or `*`. */
333
+ const DEFERRED_STEP_RE = /^[ \t]*[-*][ \t]+\[~\][ \t]*(.*)$/;
334
+ /** Any other checkbox, or a heading — where a step's block ends. */
335
+ const BLOCK_END_RE = /^[ \t]*[-*][ \t]+\[[ xX~-]\]|^#{1,6}[ \t]/;
336
+
337
+ /** Escape a string for literal use inside a `RegExp`. */
338
+ function _escapeRe(v: string): string {
339
+ return v.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
340
+ }
341
+
342
+ /**
343
+ * Does this frontmatter declare a `relates:` row naming `slug`?
344
+ *
345
+ * Structured, not textual: the slug has to appear as a `- slug: <name>` row or a
346
+ * bare `- <name>` item inside the `relates:` block, which is a declaration the
347
+ * author made deliberately. A mention anywhere else in the file does not count.
348
+ */
349
+ export function _relatesTo(text: string, slug: string): boolean {
350
+ const lines = text.split('\n');
351
+ const start = lines.findIndex((l) => /^relates:/.test(l));
352
+ if (start === -1) return false;
353
+ const re = new RegExp(`^\\s*-\\s*(slug:\\s*)?${_escapeRe(slug)}\\s*$`);
354
+ for (let i = start + 1; i < lines.length; i++) {
355
+ const line = lines[i] as string;
356
+ if (/^\S/.test(line)) break;
357
+ if (re.test(line)) return true;
358
+ }
359
+ return false;
360
+ }
361
+
362
+ /** Every `[~]` step in a roadmap, with the annotation that follows it (if any). */
363
+ export function parseDeferredItems(text: string): DeferredItem[] {
364
+ const lines = text.split('\n');
365
+ const out: DeferredItem[] = [];
366
+ for (let i = 0; i < lines.length; i++) {
367
+ const m = DEFERRED_STEP_RE.exec(lines[i] as string);
368
+ if (m === null) continue;
369
+ // The annotation may sit on the step line itself or anywhere in the
370
+ // step's continuation block, which ends at the next checkbox or heading.
371
+ let block = lines[i] as string;
372
+ for (let j = i + 1; j < lines.length; j++) {
373
+ if (BLOCK_END_RE.test(lines[j] as string)) break;
374
+ block += '\n' + (lines[j] as string);
375
+ }
376
+ const a = DEFERRED_RESOLUTION_RE.exec(block);
377
+ out.push({
378
+ text: (m[1] ?? '').trim().slice(0, 120),
379
+ kind: a === null ? null : (a[1] as 'carried-to' | 'merged-into'),
380
+ destination: a === null ? null : (a[2] as string),
381
+ });
382
+ }
383
+ return out;
384
+ }
385
+
386
+ /**
387
+ * Decide whether a roadmap's `[~]` items are RESOLVED, per the AI council of
388
+ * 2026-08-27 (2 seats, convergent on option (c)).
389
+ *
390
+ * Iron Law 3 says a deferral must be resolved before archival, and the
391
+ * preservation test routes four dispositions to the council — but three of them
392
+ * (carry to a follow-up, merge into existing work, restore to open) leave the
393
+ * `[~]` glyph in place, and this sweep used to require `deferred === 0`
394
+ * unconditionally. So a genuinely UNEXECUTABLE item — one needing elapsed time
395
+ * rather than effort — had no council-reachable path to an archived roadmap, and
396
+ * the only glyph that cleared the gate was `[-]`, which is owner-reserved AND
397
+ * pinned to mean "won't happen at all". Using it for a carried item would make
398
+ * cancellation and transfer indistinguishable to every later reader.
399
+ *
400
+ * **Fail-closed at every step**, which is the condition both seats attached to
401
+ * their verdict: a bare `[~]` blocks, a malformed annotation blocks, a
402
+ * destination that does not exist blocks, a destination that is itself archived
403
+ * or skipped blocks, and a missing back-link blocks. The annotation is cheap to
404
+ * write and must therefore be expensive to satisfy.
405
+ *
406
+ * NOT checked, and named rather than implied: that the destination's copy of the
407
+ * criterion is faithful. Both seats asked for stable item identity over verbatim
408
+ * text matching, and neither a text match nor an id exists today — the back-link
409
+ * plus the source-slug mention is the strongest link this sweep can verify
410
+ * without inventing an identity scheme. The reviewer of the carry still reads it.
411
+ *
412
+ * @returns `problems` empty ⇒ every deferral is resolved and archival may proceed.
413
+ */
414
+ export function deferralProblems(
415
+ root: string,
416
+ rel: string,
417
+ text: string,
418
+ /**
419
+ * Slugs this same sweep is about to archive. A destination in this set is
420
+ * about to become dead, so accepting it would leave the carried item with no
421
+ * live receiver — the exact loss the annotation exists to prevent, produced
422
+ * by the mechanism meant to prevent it. Found by an independent review, with
423
+ * two reproducers: a roadmap naming ITSELF as destination, and two roadmaps
424
+ * both complete in one run where the parent carries to the child.
425
+ *
426
+ * Optional so the unit tests can call this with one roadmap in view; the
427
+ * sweep always passes the real set.
428
+ */
429
+ alsoArchiving: ReadonlySet<string> = new Set(),
430
+ ): string[] {
431
+ const sourceSlug = rel.replace(/\.md$/, '');
432
+ const problems: string[] = [];
433
+ for (const item of parseDeferredItems(text)) {
434
+ const label = item.text === '' ? '(unnamed step)' : item.text;
435
+ if (item.kind === null || item.destination === null) {
436
+ problems.push(
437
+ `deferred step ${JSON.stringify(label)} carries no ` +
438
+ '`<!-- deferred-resolution: carried-to=<slug> -->` annotation',
439
+ );
440
+ continue;
441
+ }
442
+ // Active or parked are both live. Archived and skipped are not: carrying
443
+ // an item into a dead roadmap is the silent loss the annotation exists
444
+ // to prevent, and it is exactly the "broken promise" case one seat asked
445
+ // to be detectable.
446
+ const candidates = [
447
+ path.join(root, 'agents', 'roadmaps', `${item.destination}.md`),
448
+ path.join(root, 'agents', 'roadmaps', 'later', `${item.destination}.md`),
449
+ ];
450
+ // Self-reference is never a carry. It passes every other check — the
451
+ // file exists, and a `parent_roadmap:` naming itself would satisfy the
452
+ // back-link — and then the sweep archives it, so the destination is dead
453
+ // the moment the source is.
454
+ if (item.destination === sourceSlug) {
455
+ problems.push(
456
+ `deferred step ${JSON.stringify(label)} names its OWN roadmap as the destination — ` +
457
+ 'a carry needs a different receiver, or the item is not carried at all',
458
+ );
459
+ continue;
460
+ }
461
+ if (alsoArchiving.has(item.destination)) {
462
+ problems.push(
463
+ `destination \`${item.destination}\` is being archived by this same sweep, so it would be ` +
464
+ 'dead the moment the carry lands — archive it first and re-run, or carry to a roadmap that stays active',
465
+ );
466
+ continue;
467
+ }
468
+ const found = candidates.find((c) => fs.existsSync(c));
469
+ if (found === undefined) {
470
+ const dead = ['archive', 'skipped'].find((d) =>
471
+ fs.existsSync(path.join(root, 'agents', 'roadmaps', d, `${item.destination ?? ''}.md`)),
472
+ );
473
+ problems.push(
474
+ dead === undefined
475
+ ? `deferred step ${JSON.stringify(label)} names destination \`${item.destination}\`, which does not exist`
476
+ : `deferred step ${JSON.stringify(label)} names destination \`${item.destination}\`, which is in \`${dead}/\` — a dead roadmap cannot receive a carried item`,
477
+ );
478
+ continue;
479
+ }
480
+ const destText = fs.readFileSync(found, 'utf-8');
481
+ // ESCAPED. The slug was interpolated raw, so `road.parent` matched
482
+ // `roadXparent` and a slug containing `[` or `(` made `new RegExp` THROW
483
+ // and abort the whole sweep — in a function whose entire contract is
484
+ // failing closed. Found by an independent review; both seats named it.
485
+ const backlink = new RegExp(`^parent_roadmap:[ \t]*${_escapeRe(sourceSlug)}[ \t]*$`, 'm');
486
+ if (item.kind === 'carried-to' && !backlink.test(destText)) {
487
+ problems.push(
488
+ `destination \`${item.destination}\` carries no \`parent_roadmap: ${sourceSlug}\` back-link — ` +
489
+ 'the link must be verifiable from both ends',
490
+ );
491
+ continue;
492
+ }
493
+ // A STRUCTURED link, not a substring. `destText.includes(sourceSlug)` was
494
+ // satisfied by any incidental mention — a filename, an example, an HTML
495
+ // comment — so `merged-into` proved nothing about a merge. Both review
496
+ // seats called it trivially spoofable. The link now has to be a
497
+ // frontmatter declaration: a `relates:` row naming the source, or a
498
+ // `parent_roadmap:` back-link. Prose cannot satisfy it.
499
+ if (item.kind === 'merged-into' && !backlink.test(destText) && !_relatesTo(destText, sourceSlug)) {
500
+ problems.push(
501
+ `destination \`${item.destination}\` carries no structured link back to \`${sourceSlug}\` — ` +
502
+ 'add a `relates:` row naming it (with a `relation:`) or a `parent_roadmap:` line. A mention ' +
503
+ 'in prose is not a link: it is satisfied by a filename or an example.',
504
+ );
505
+ }
506
+ }
507
+ return problems;
508
+ }
509
+
510
+ /** Archive every complete active roadmap: no open steps, and every `[~]` resolved. */
315
511
  function archive_completed(
316
512
  root: string,
317
513
  opts: { changed_only: boolean; base: string; dry_run: boolean },
@@ -331,11 +527,59 @@ function archive_completed(
331
527
  return [];
332
528
  }
333
529
 
530
+ // Every slug this sweep will consider archiving, computed BEFORE any of them
531
+ // is judged. Without it, a deferral carried to another roadmap that is also
532
+ // complete passes validation and then loses its receiver in the same run.
533
+ const sweepSet = new Set(
534
+ collect(roadmap_root)
535
+ .filter((s2) => s2.open_ === 0)
536
+ .map((s2) => s2.rel.replace(/\.md$/, '')),
537
+ );
538
+
334
539
  const archived: ArchiveRecord[] = [];
335
540
  for (const stats of collect(roadmap_root)) {
336
- if (stats.open_ !== 0 || stats.deferred !== 0) {
541
+ // `guarded-baseline` is INCOMPLETE by construction (council 2026-08-31,
542
+ // 2/2 convergent) — checked BEFORE the open-step test on purpose. A
543
+ // well-formed record keeps its box `[ ]` and would be skipped silently as
544
+ // "not complete", which is the right verdict reached for the wrong reason
545
+ // and invisible in a sweep that only reports what it moved; a MALFORMED
546
+ // one on `[x]` would otherwise archive with an annotation claiming the
547
+ // opposite. Both are named here instead.
548
+ const guarded = parseGuardedBaselines(
549
+ fs.readFileSync(path.join(roadmap_root, stats.rel), 'utf-8'),
550
+ );
551
+ if (guarded.length > 0) {
552
+ process.stderr.write(
553
+ ` ⚠️ ${stats.rel}: ${guarded.length} guarded-baseline step(s) — ` +
554
+ 'not archived. Verify against the real mechanism, then flip to ' +
555
+ '`[x]`.\n',
556
+ );
557
+ for (const p of guardedBaselineProblems(guarded)) {
558
+ process.stderr.write(` · ${p}\n`);
559
+ }
560
+ continue;
561
+ }
562
+ if (stats.open_ !== 0) {
337
563
  continue; // not complete
338
564
  }
565
+ // A `[~]` no longer blocks unconditionally: it blocks unless it carries a
566
+ // validated resolution annotation. See `deferralProblems` for why, and
567
+ // for every way that check fails closed.
568
+ if (stats.deferred !== 0) {
569
+ const abs = path.join(roadmap_root, stats.rel);
570
+ // The source's own slug is removed: it is trivially in `sweepSet`,
571
+ // and self-reference is reported by its own, clearer message.
572
+ const others = new Set(sweepSet);
573
+ others.delete(stats.rel.replace(/\.md$/, ''));
574
+ const problems = deferralProblems(root, stats.rel, fs.readFileSync(abs, 'utf-8'), others);
575
+ if (problems.length > 0) {
576
+ process.stderr.write(
577
+ ` ⚠️ ${stats.rel}: ${problems.length} unresolved deferral(s) — not archived.\n`,
578
+ );
579
+ for (const p of problems) process.stderr.write(` · ${p}\n`);
580
+ continue;
581
+ }
582
+ }
339
583
  // An unresolved blocker outlives its steps. Closing every box does not
340
584
  // answer a question the roadmap raised for a human, and archiving on
341
585
  // step-count alone is how `b-highlights-mechanism` left the active tree
@@ -410,7 +654,7 @@ function _regen_dashboard(root: string, dry_run: boolean): void {
410
654
  /**
411
655
  * Rebuild the archive index after a move, when the builder is present.
412
656
  *
413
- * The sweep is the one operation that changes what `agents/roadmaps/archive/`
657
+ * The sweep is the one operation that changes what `agents/roadmaps/archive/` code-comment-allow provenance-comment -- the directory this function writes
414
658
  * contains, so it is the one operation that can leave the generated index
415
659
  * stale — and the drift gate on that index runs in the same PR the sweep runs
416
660
  * in. Regenerating here keeps the two from disagreeing by construction rather