@event4u/agent-config 14.12.0 → 14.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) 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 +234 -0
  5. package/CONTRIBUTING.md +38 -0
  6. package/CREDITS.md +135 -0
  7. package/NOTICE +13 -0
  8. package/README.md +8 -6
  9. package/dist/agent-src/commands/analyze/inbox.md +109 -2
  10. package/dist/agent-src/commands/feature/dev.md +7 -2
  11. package/dist/agent-src/commands/ghostwriter/write.md +5 -1
  12. package/dist/agent-src/commands/implement-ticket.md +1 -1
  13. package/dist/agent-src/commands/mission/upgrade.md +1 -1
  14. package/dist/agent-src/commands/orchestrate.md +2 -2
  15. package/dist/agent-src/commands/post-as/me.md +5 -1
  16. package/dist/agent-src/commands/pr/merge.md +19 -6
  17. package/dist/agent-src/commands/roadmap/process-full.md +19 -5
  18. package/dist/agent-src/commands/tdd/red.md +12 -2
  19. package/dist/agent-src/commands/work.md +1 -1
  20. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +40 -0
  21. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -2
  22. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +21 -0
  23. package/dist/agent-src/contexts/execution/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-provenance.md +4 -0
  30. package/dist/agent-src/rules/design-fidelity.md +1 -1
  31. package/dist/agent-src/rules/domain-safety-pii.md +4 -0
  32. package/dist/agent-src/rules/domain-safety-retention.md +4 -0
  33. package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
  34. package/dist/agent-src/rules/external-code-graph-interop.md +14 -12
  35. package/dist/agent-src/rules/improve-before-implement.md +6 -8
  36. package/dist/agent-src/rules/laravel-routing.md +1 -1
  37. package/dist/agent-src/rules/lethal-trifecta-guard.md +4 -0
  38. package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
  39. package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
  40. package/dist/agent-src/rules/source-confidentiality.md +12 -34
  41. package/dist/agent-src/rules/symfony-routing.md +1 -1
  42. package/dist/agent-src/rules/token-efficiency.md +14 -0
  43. package/dist/agent-src/rules/tool-safety.md +4 -0
  44. package/dist/agent-src/rules/untrusted-input-defense.md +4 -0
  45. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
  46. package/dist/agent-src/scripts/guarded_baseline.ts +328 -0
  47. package/dist/agent-src/scripts/roadmap_set_step.ts +253 -0
  48. package/dist/agent-src/scripts/stub_queue.ts +82 -0
  49. package/dist/agent-src/scripts/stubs_due.ts +400 -0
  50. package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
  51. package/dist/agent-src/scripts/update_roadmap_progress.ts +8 -4
  52. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +17 -4
  53. package/dist/agent-src/skills/brand-audit/SKILL.md +33 -0
  54. package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -0
  55. package/dist/agent-src/skills/database/SKILL.md +8 -0
  56. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
  57. package/dist/agent-src/skills/design-review/SKILL.md +1 -1
  58. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
  59. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +17 -1
  60. package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
  61. package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
  62. package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
  63. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
  64. package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
  65. package/dist/agent-src/skills/laravel/SKILL.md +35 -0
  66. package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
  67. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
  68. package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
  69. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  70. package/dist/agent-src/skills/skill-writing/references/procedure.md +5 -5
  71. package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
  72. package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
  73. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
  74. package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
  75. package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
  76. package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
  77. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
  78. package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
  79. package/dist/agent-src/skills/ui-component-architect/SKILL.md +45 -2
  80. package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
  81. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
  82. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  83. package/dist/agent-src/templates/roadmaps.md +97 -3
  84. package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
  85. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
  86. package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
  87. package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
  88. package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
  89. package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
  90. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
  91. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
  92. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
  93. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
  94. package/dist/cli/commands/uiAudit.js +124 -5
  95. package/dist/cli/registry.js +2 -0
  96. package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
  97. package/dist/cli-delegate/{chunk-JCW7ZLHK.js → chunk-4FS4WRXP.js} +5 -0
  98. package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
  99. package/dist/cli-delegate/{chunk-JJA2QEWA.js → chunk-AKJGUQNO.js} +466 -285
  100. package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
  101. package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
  102. package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
  103. package/dist/cli-delegate/cmd_adr_effective.js +102 -0
  104. package/dist/cli-delegate/cmd_conformance.js +42 -10
  105. package/dist/cli-delegate/cmd_doctor.js +3 -3
  106. package/dist/cli-delegate/cmd_export.js +3 -2
  107. package/dist/cli-delegate/cmd_fleet.js +2 -2
  108. package/dist/cli-delegate/cmd_handoff.js +1 -1
  109. package/dist/cli-delegate/cmd_preflight.js +2 -2
  110. package/dist/cli-delegate/cmd_prune.js +3 -2
  111. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  112. package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
  113. package/dist/cli-delegate/cmd_settings_set.js +2 -2
  114. package/dist/cli-delegate/cmd_sync.js +3 -2
  115. package/dist/cli-delegate/cmd_uninstall.js +3 -2
  116. package/dist/cli-delegate/cmd_validate.js +3 -2
  117. package/dist/discovery/deprecation-report.md +1 -1
  118. package/dist/discovery/discovery-manifest.json +57 -57
  119. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  120. package/dist/discovery/discovery-manifest.summary.md +1 -1
  121. package/dist/discovery/dormancy-report.md +1 -1
  122. package/dist/discovery/orphan-report.md +1 -1
  123. package/dist/discovery/packs.json +2 -2
  124. package/dist/discovery/trust-report.md +1 -1
  125. package/dist/discovery/workspaces.json +2 -2
  126. package/dist/hooks/dispatch.js +1836 -712
  127. package/dist/install/claudeRuleRewrite.js +254 -0
  128. package/dist/install/detect.js +29 -16
  129. package/dist/install/detect_php_shape.js +159 -0
  130. package/dist/install/install.mjs +634 -428
  131. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  132. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  133. package/dist/mcp/registry-manifest.json +3 -3
  134. package/dist/mcp/server.json +3 -3
  135. package/dist/mcp/server.mjs +4818 -2645
  136. package/dist/server/schemas/settings.js +3 -0
  137. package/dist/ui/assets/index-D0jaCRPM.js +29 -0
  138. package/dist/ui/index.html +1 -1
  139. package/docs/MIGRATION.md +1 -1
  140. package/docs/THIRD-PARTY-NOTICES.md +25 -0
  141. package/docs/contracts/provider-lifecycle.md +1 -1
  142. package/docs/contracts/settings-classes.md +10 -4
  143. package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
  144. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
  145. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
  146. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
  147. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
  148. package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
  149. package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
  150. package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
  151. package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
  152. package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
  153. package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
  154. package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
  155. package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
  156. package/docs/guidelines/agent-infra/first-principles.md +2 -2
  157. package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
  158. package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
  159. package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
  160. package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
  161. package/docs/guidelines/agent-infra/layered-settings.md +10 -10
  162. package/docs/guidelines/agent-infra/memory-access.md +1 -1
  163. package/docs/guidelines/agent-infra/mental-models.md +3 -3
  164. package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
  165. package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
  166. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
  167. package/docs/guidelines/agent-infra/role-contracts.md +2 -2
  168. package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
  169. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  170. package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
  171. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
  172. package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
  173. package/docs/guidelines/agent-infra/six-hats.md +3 -3
  174. package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
  175. package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
  176. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  177. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
  178. package/docs/guidelines/augment-portability-patterns.md +6 -4
  179. package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
  180. package/docs/guidelines/cross-role-handoff.md +2 -2
  181. package/docs/guidelines/design-fidelity-mechanics.md +1 -1
  182. package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
  183. package/docs/guidelines/php/database.md +90 -7
  184. package/docs/guidelines/prompt-templates.md +7 -7
  185. package/llms.txt +2 -2
  186. package/package.json +5 -2
  187. package/src/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
  188. package/src/agent-src/scripts/guarded_baseline.ts +328 -0
  189. package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
  190. package/src/agent-src/scripts/stub_queue.ts +82 -0
  191. package/src/agent-src/scripts/stubs_due.ts +400 -0
  192. package/src/agent-src/scripts/ticket_bundles.ts +84 -0
  193. package/src/agent-src/scripts/update_roadmap_progress.ts +8 -4
  194. package/src/agent-src/templates/scripts/check_memory.ts +258 -17
  195. package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
  196. package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
  197. package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
  198. package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
  199. package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
  200. package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
  201. package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
  202. package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
  203. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
  204. package/src/config/agent-settings.template.yml +32 -3
  205. package/src/config/assurance-capability-registry.json +21 -9
  206. package/src/config/canonical-terms.yml +119 -0
  207. package/src/config/capability-native-outcome-bars.json +81 -0
  208. package/src/config/ci-local-parity.yml +80 -0
  209. package/src/config/drafting-channels.yml +43 -0
  210. package/src/config/estate-count-budget.json +38 -36
  211. package/src/config/evaluator-budgets.json +14 -14
  212. package/src/config/gate-coverage.yml +579 -63
  213. package/src/config/gate-reachability-exemptions.json +21 -0
  214. package/src/config/gate-violation-baselines.json +37 -19
  215. package/src/config/harness-evolution-budget.json +25 -0
  216. package/src/config/lapsed-beta-baseline.json +96 -0
  217. package/src/config/memory-twin-verdicts.yml +129 -0
  218. package/src/config/metric-registry.yml +124 -0
  219. package/src/config/pack-size-budget.json +16 -15
  220. package/src/config/preamble-payload-budget.json +8 -8
  221. package/src/config/profiles/balanced.ini +27 -0
  222. package/src/config/profiles/full.ini +27 -0
  223. package/src/config/profiles/minimal.ini +27 -0
  224. package/src/config/publish-surface.json +9 -2
  225. package/src/config/routing-coverage-seed.json +16 -2
  226. package/src/config/rule-stub-ceilings.json +126 -112
  227. package/src/config/turnaround-budget.json +66 -0
  228. package/src/install/claudeRuleRewrite.ts +288 -0
  229. package/src/install/detect.ts +60 -17
  230. package/src/install/detect_php_shape.ts +191 -0
  231. package/src/scripts/_cli/cmd_doctor.ts +27 -112
  232. package/src/scripts/_dispatch.bash +27 -0
  233. package/src/scripts/_lib/activation_ladder.ts +211 -0
  234. package/src/scripts/_lib/activation_states.ts +88 -0
  235. package/src/scripts/_lib/adherence_detectors.ts +143 -0
  236. package/src/scripts/_lib/arith_claims.ts +181 -0
  237. package/src/scripts/_lib/arm_ranking.ts +62 -0
  238. package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
  239. package/src/scripts/_lib/audit_field_provenance.ts +54 -0
  240. package/src/scripts/_lib/auto_dispatch.ts +32 -3
  241. package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
  242. package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
  243. package/src/scripts/_lib/candidate_proposer.ts +402 -0
  244. package/src/scripts/_lib/candidate_record.ts +601 -0
  245. package/src/scripts/_lib/capture_rate.ts +319 -0
  246. package/src/scripts/_lib/collector_denominator.ts +771 -0
  247. package/src/scripts/_lib/collector_record.ts +340 -0
  248. package/src/scripts/_lib/collector_store.ts +664 -0
  249. package/src/scripts/_lib/collector_supervision.ts +827 -0
  250. package/src/scripts/_lib/concern_estate.ts +77 -0
  251. package/src/scripts/_lib/config_chain.ts +477 -0
  252. package/src/scripts/_lib/config_cost.ts +209 -0
  253. package/src/scripts/_lib/council_settings_block.ts +6 -0
  254. package/src/scripts/_lib/curator_ops.ts +172 -0
  255. package/src/scripts/_lib/delivery_arm_experiment.ts +266 -0
  256. package/src/scripts/_lib/delivery_criticality.ts +126 -0
  257. package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
  258. package/src/scripts/_lib/empty_cycles.ts +88 -0
  259. package/src/scripts/_lib/eval_publication.ts +354 -0
  260. package/src/scripts/_lib/evaluation_vector.ts +283 -0
  261. package/src/scripts/_lib/evaluator_promotion.ts +225 -0
  262. package/src/scripts/_lib/evidence_basis.ts +118 -0
  263. package/src/scripts/_lib/exec_evidence.ts +8 -0
  264. package/src/scripts/_lib/experience_card.ts +272 -0
  265. package/src/scripts/_lib/experience_report.ts +151 -0
  266. package/src/scripts/_lib/experiment_freeze.ts +112 -0
  267. package/src/scripts/_lib/generated_by.ts +66 -0
  268. package/src/scripts/_lib/harness_evolution_guards.ts +229 -0
  269. package/src/scripts/_lib/hook_effect_probe.ts +141 -0
  270. package/src/scripts/_lib/host_denominator.ts +687 -0
  271. package/src/scripts/_lib/host_projection_reach.ts +157 -0
  272. package/src/scripts/_lib/ignored_blocker.ts +148 -0
  273. package/src/scripts/_lib/install_reach_checks.ts +495 -0
  274. package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
  275. package/src/scripts/_lib/judge_hygiene.ts +228 -0
  276. package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
  277. package/src/scripts/_lib/loop_guards.ts +299 -0
  278. package/src/scripts/_lib/loss_class.ts +129 -0
  279. package/src/scripts/_lib/machine_wake.ts +51 -0
  280. package/src/scripts/_lib/md_prose_lines.ts +177 -0
  281. package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
  282. package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
  283. package/src/scripts/_lib/orchestration_record.ts +253 -5
  284. package/src/scripts/_lib/outcome_envelope.ts +227 -0
  285. package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
  286. package/src/scripts/_lib/paired_stats.ts +245 -0
  287. package/src/scripts/_lib/paired_verdict.ts +226 -0
  288. package/src/scripts/_lib/prefix_stable_surfaces.ts +123 -0
  289. package/src/scripts/_lib/privacy_class.ts +47 -0
  290. package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
  291. package/src/scripts/_lib/repeated_failure.ts +105 -0
  292. package/src/scripts/_lib/repo_root.ts +111 -0
  293. package/src/scripts/_lib/review_skipped_record.ts +37 -0
  294. package/src/scripts/_lib/role_split.ts +338 -0
  295. package/src/scripts/_lib/runtime_journal.ts +1499 -0
  296. package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
  297. package/src/scripts/_lib/skill_catalogue.ts +11 -1
  298. package/src/scripts/_lib/source_digest.ts +200 -0
  299. package/src/scripts/_lib/source_redact.ts +260 -0
  300. package/src/scripts/_lib/source_shape.ts +502 -0
  301. package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
  302. package/src/scripts/_lib/strip_comments.d.mts +8 -0
  303. package/src/scripts/_lib/strip_comments.mjs +65 -0
  304. package/src/scripts/_lib/test_red_state.ts +154 -0
  305. package/src/scripts/_lib/trigger_shift.ts +144 -0
  306. package/src/scripts/_lib/untrusted_content.ts +82 -7
  307. package/src/scripts/adoption_report.ts +1 -1
  308. package/src/scripts/adr/evidence_census.ts +1 -1
  309. package/src/scripts/adr/regenerate_index.ts +26 -2
  310. package/src/scripts/adr_cite_check.ts +164 -1
  311. package/src/scripts/ai_council/blind_review.ts +11 -1
  312. package/src/scripts/ai_council/clients.ts +4 -0
  313. package/src/scripts/ai_council/config.ts +3 -0
  314. package/src/scripts/ai_council/consensus.ts +28 -8
  315. package/src/scripts/ai_council/consensus_round.ts +226 -0
  316. package/src/scripts/ai_council/disagreement_signal.ts +338 -0
  317. package/src/scripts/ai_council/inline_findings.ts +340 -0
  318. package/src/scripts/ai_council/judge_position_bias.ts +197 -0
  319. package/src/scripts/ai_council/orchestrator.ts +16 -203
  320. package/src/scripts/ai_council/orchestrator_results.ts +23 -3
  321. package/src/scripts/ai_council/pricing.ts +106 -0
  322. package/src/scripts/ai_council/prompts.ts +74 -7
  323. package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
  324. package/src/scripts/ai_council/py_format.ts +14 -3
  325. package/src/scripts/ai_council/recouncil_guard.ts +293 -0
  326. package/src/scripts/ai_council/response_record.ts +50 -0
  327. package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
  328. package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
  329. package/src/scripts/asset_delivery_ledger.ts +157 -0
  330. package/src/scripts/attest_artifact.ts +193 -0
  331. package/src/scripts/audit_auto_rules.ts +2 -1
  332. package/src/scripts/audit_command_surface.ts +1 -1
  333. package/src/scripts/audit_mcp_tools.ts +2 -2
  334. package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
  335. package/src/scripts/audit_user_type_axis.ts +2 -1
  336. package/src/scripts/bench_ab_clone.ts +215 -10
  337. package/src/scripts/bench_ab_integrity.ts +119 -5
  338. package/src/scripts/bench_ab_v2_stats.ts +40 -213
  339. package/src/scripts/build_archive_index.ts +1 -1
  340. package/src/scripts/build_linear_digest.ts +1 -1
  341. package/src/scripts/build_proof.ts +11 -4
  342. package/src/scripts/build_rule_trigger_matrix.ts +1 -1
  343. package/src/scripts/build_source_digests.ts +157 -0
  344. package/src/scripts/cache_realization_report.ts +103 -0
  345. package/src/scripts/check_adr_frontmatter.ts +126 -0
  346. package/src/scripts/check_benchmark_report_fields.ts +207 -0
  347. package/src/scripts/check_beta_review_markers.ts +235 -6
  348. package/src/scripts/check_bundle_path_leakage.ts +34 -1
  349. package/src/scripts/check_claims.ts +576 -6
  350. package/src/scripts/check_composite_arming.ts +35 -0
  351. package/src/scripts/check_concern_admissions.ts +365 -0
  352. package/src/scripts/check_enforcement_coverage.ts +28 -0
  353. package/src/scripts/check_estate_count.ts +142 -1
  354. package/src/scripts/check_gate_reachability.ts +383 -0
  355. package/src/scripts/check_host_loadability.ts +104 -0
  356. package/src/scripts/check_loss_class_declared.ts +308 -0
  357. package/src/scripts/check_md_language.ts +15 -98
  358. package/src/scripts/check_memory_proposal.ts +18 -11
  359. package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
  360. package/src/scripts/check_no_external_sources.ts +281 -6
  361. package/src/scripts/check_pack_conformance_fixture.ts +11 -1
  362. package/src/scripts/check_pack_size.ts +59 -2
  363. package/src/scripts/check_preamble_payload_budget.ts +114 -3
  364. package/src/scripts/check_prefix_stable_mutation.ts +372 -0
  365. package/src/scripts/check_publish_surface.ts +10 -1
  366. package/src/scripts/check_references.ts +24 -1
  367. package/src/scripts/check_rule_evidence_declaration.ts +316 -0
  368. package/src/scripts/check_rule_projection_integrity.ts +14 -4
  369. package/src/scripts/check_score_contract.ts +26 -3
  370. package/src/scripts/check_static_parity.ts +285 -0
  371. package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
  372. package/src/scripts/check_suppression_hygiene.ts +15 -0
  373. package/src/scripts/ci_settle.ts +39 -2
  374. package/src/scripts/code_graph/build.ts +60 -3
  375. package/src/scripts/code_graph/extract.ts +44 -0
  376. package/src/scripts/code_graph/types.ts +24 -0
  377. package/src/scripts/collector_daemon.ts +714 -0
  378. package/src/scripts/config_cost_report.ts +302 -0
  379. package/src/scripts/consumer_matrix.ts +74 -1
  380. package/src/scripts/cost/budget.mjs +10 -3
  381. package/src/scripts/cost/track.mjs +10 -3
  382. package/src/scripts/council_cli.ts +37 -54
  383. package/src/scripts/dispatch_r2_reviewer.ts +46 -5
  384. package/src/scripts/evolution_lab.ts +980 -0
  385. package/src/scripts/external_sources_denylist.json +5 -18
  386. package/src/scripts/extract_audit_patterns.ts +21 -0
  387. package/src/scripts/fold_intake.ts +12 -1
  388. package/src/scripts/gen_discovery_baseline.ts +1 -1
  389. package/src/scripts/generate_capabilities_index.ts +12 -5
  390. package/src/scripts/generate_capability_matrix.ts +3 -3
  391. package/src/scripts/generate_command_flows.ts +2 -2
  392. package/src/scripts/generate_cookbook.ts +2 -2
  393. package/src/scripts/generate_index.ts +8 -1
  394. package/src/scripts/generate_knowledge_index.ts +2 -1
  395. package/src/scripts/generate_ownership_matrix.ts +2 -1
  396. package/src/scripts/generate_pack_manifests.ts +10 -2
  397. package/src/scripts/generate_role_experiences_catalog.ts +2 -2
  398. package/src/scripts/generate_settings_reference.ts +1 -1
  399. package/src/scripts/git_authorization_hook.ts +22 -1
  400. package/src/scripts/grade_target_readiness.ts +48 -5
  401. package/src/scripts/hook_effect_doctor.ts +261 -0
  402. package/src/scripts/hook_manifest.json +1 -1
  403. package/src/scripts/hook_manifest.yaml +98 -11
  404. package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
  405. package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
  406. package/src/scripts/hooks/concern_registry.ts +4 -0
  407. package/src/scripts/hooks/dispatch_hook.ts +32 -0
  408. package/src/scripts/hooks/journal_record_hook.ts +345 -0
  409. package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
  410. package/src/scripts/hooks/run_continuation_hook.ts +44 -9
  411. package/src/scripts/hooks/shims/install.sh +61 -0
  412. package/src/scripts/hooks/shims/php +101 -0
  413. package/src/scripts/hooks/suggestion_capture_hook.ts +10 -0
  414. package/src/scripts/hot_context_hook.ts +16 -0
  415. package/src/scripts/install-hooks.sh +20 -5
  416. package/src/scripts/install.ts +17 -35
  417. package/src/scripts/inventory_frontmatter.ts +2 -1
  418. package/src/scripts/lint_adr_sweep_routing.ts +12 -0
  419. package/src/scripts/lint_canonical_terms.ts +604 -0
  420. package/src/scripts/lint_composition_review.ts +619 -0
  421. package/src/scripts/lint_consolidation_lineage.ts +666 -0
  422. package/src/scripts/lint_eval_specs.ts +593 -0
  423. package/src/scripts/lint_hook_manifest.ts +19 -0
  424. package/src/scripts/lint_host_portability.ts +373 -0
  425. package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
  426. package/src/scripts/lint_memory_twin_parity.ts +335 -0
  427. package/src/scripts/lint_metric_consumers.ts +355 -0
  428. package/src/scripts/lint_skill_descriptions.ts +18 -1
  429. package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
  430. package/src/scripts/lint_skill_link_reach.ts +252 -0
  431. package/src/scripts/lint_skill_trigger_corpus.ts +426 -23
  432. package/src/scripts/lint_ticket_buildable.ts +17 -1
  433. package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
  434. package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
  435. package/src/scripts/measure_docs_dead_links.ts +348 -0
  436. package/src/scripts/measure_host_capture.ts +461 -0
  437. package/src/scripts/migration_status.ts +3 -3
  438. package/src/scripts/model_rule_injection.ts +60 -0
  439. package/src/scripts/orchestration_record.ts +14 -0
  440. package/src/scripts/preamble_byte_census.ts +139 -10
  441. package/src/scripts/prepack-check.mjs +4 -1
  442. package/src/scripts/probe_turnaround.ts +384 -0
  443. package/src/scripts/probe_unblocked_ask.ts +279 -0
  444. package/src/scripts/render_benchmark_md.ts +1 -1
  445. package/src/scripts/rule_activation_census.ts +70 -9
  446. package/src/scripts/rule_backlinks.ts +1 -1
  447. package/src/scripts/run_lifecycle_suite.ts +208 -0
  448. package/src/scripts/run_skill_evals.ts +40 -0
  449. package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
  450. package/src/scripts/schemas/drafting-channels.schema.json +43 -0
  451. package/src/scripts/schemas/evals.schema.json +24 -1
  452. package/src/scripts/schemas/rule.schema.json +52 -1
  453. package/src/scripts/schemas/skill.schema.json +17 -2
  454. package/src/scripts/skill_overlap.ts +7 -1
  455. package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
  456. package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
  457. package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
  458. package/src/scripts/skill_usage_report.ts +2 -1
  459. package/src/scripts/stubs_due.ts +211 -0
  460. package/src/scripts/sweep_source_surfaces.ts +678 -0
  461. package/src/scripts/sync_pr_branch.ts +3 -3
  462. package/src/scripts/trigger_eval_grandfather.json +202 -222
  463. package/src/scripts/utilization_report.ts +22 -2
  464. package/src/server/schemas/settings.ts +5 -0
  465. package/src/templates/marketing-copy.yml +1 -1
  466. package/dist/ui/assets/index-Cxgy63kz.js +0 -26
@@ -0,0 +1,293 @@
1
+ /**
2
+ * The re-council guard — warn before paying twice for one deliberation.
3
+ *
4
+ * `road-to-inbox-harvest-2026-08-e-council-topology-evidence` Phase 1A. The
5
+ * phase's own framing is the design constraint: *"the cheapest quality
6
+ * improvement is not paying twice for the same deliberation"*, and it sits
7
+ * before any sophisticated routing on purpose.
8
+ *
9
+ * FOUR CONSTRAINTS FROM THE STEPS, EACH LOAD-BEARING:
10
+ *
11
+ * 1A.1 Reuse the EXISTING question hash. `_sha256_hex` is imported from
12
+ * `blind_review.ts`, not reimplemented — two hashes of one question are
13
+ * two answers to "is this the same question", and the second is the one
14
+ * nobody updates.
15
+ * 1A.2 WARN, NEVER PROHIBIT. {@link RecouncilVerdict} carries no field a
16
+ * caller could read as a block, which is stronger than a documented
17
+ * promise not to block: there is nothing to misread.
18
+ * 1A.3 Near-duplicate detection on the ALREADY-IMPORTED similarity
19
+ * mechanism — `trigrams` from `_lib/lexical_index.ts`, the BM25 core
20
+ * ADR-061 already sanctions. No embeddings, no new infrastructure. The
21
+ * threshold is PRE-REGISTERED below, before any tuning on the retained
22
+ * corpus.
23
+ * 1A.4 Three states, distinguishable: exact + same config, exact + stale
24
+ * config, near-duplicate.
25
+ */
26
+ import * as fs from 'node:fs';
27
+ import * as path from 'node:path';
28
+
29
+ import { jaccardSimilarity, MERGE_THRESHOLD } from '../_lib/text_similarity.js';
30
+ import { _sha256_hex } from './blind_review.js';
31
+
32
+ /**
33
+ * The near-duplicate threshold — and it is REUSED, not chosen.
34
+ *
35
+ * Step 1A.3 asks for the threshold to be pre-registered before any tuning on
36
+ * the retained local corpus. `MERGE_THRESHOLD` in `_lib/text_similarity.ts` is
37
+ * already that: fixed by an AI-council verdict of 2026-07-05 as the point at
38
+ * which two texts are treated as duplicates, long before this guard existed and
39
+ * with no knowledge of the council-question corpus it is now applied to. A
40
+ * number nobody could have tuned against this corpus is the strongest form of
41
+ * pre-registration available, and re-declaring `0.8` here would fork it — the
42
+ * same defect 1A.1 forbids for the hash.
43
+ *
44
+ * `revisit-if`: the retained corpus produces a false positive at this value
45
+ * (two questions a human calls different, scored at or above it), or a
46
+ * one-sentence rewrite of a real question scores below it. Either falsifies the
47
+ * number, and the fix then belongs in `text_similarity.ts` where its other
48
+ * consumers can see it move.
49
+ */
50
+ export const NEAR_DUPLICATE_THRESHOLD = MERGE_THRESHOLD;
51
+
52
+ /** The three states step 1A.4 requires the warning to distinguish. */
53
+ export type RepeatState =
54
+ /** Same question text, and the configuration that would run it is unchanged. */
55
+ | 'exact-same-config'
56
+ /** Same question text, but the members or round count have moved since. */
57
+ | 'exact-stale-config'
58
+ /** Not the same text, but above the pre-registered similarity threshold. */
59
+ | 'near-duplicate';
60
+
61
+ /** One prior run, as read from a retained response artefact. */
62
+ export interface PriorRun {
63
+ /** Path of the retained artefact. */
64
+ readonly artifactPath: string;
65
+ /** The question file it ran over, as the artefact recorded it. */
66
+ readonly questionPath: string;
67
+ /** ISO date of the artefact, for the warning's "prior run date". */
68
+ readonly ranAt: string;
69
+ /** Sorted member ids + round count — the "relevant configuration". */
70
+ readonly configFingerprint: string;
71
+ /** `_sha256_hex` of the question text, when the question file still exists. */
72
+ readonly questionHash: string | null;
73
+ /** The question text, for the near-duplicate pass. `null` when the file is gone. */
74
+ readonly questionText: string | null;
75
+ }
76
+
77
+ /**
78
+ * A finding. There is DELIBERATELY no `block`, `refuse` or `severity` field:
79
+ * step 1A.2 requires that no code path can turn this into an unconditional
80
+ * block, and a type that cannot express one is the strongest available form of
81
+ * that guarantee.
82
+ */
83
+ export interface RecouncilVerdict {
84
+ readonly state: RepeatState;
85
+ readonly prior: PriorRun;
86
+ /** Token Jaccard against the prior question, 0..1. Exactly 1 on an exact repeat. */
87
+ readonly similarity: number;
88
+ }
89
+
90
+ /** Sorted members plus rounds — what 1A.4 calls the relevant configuration. */
91
+ export function configFingerprint(members: readonly string[], rounds: number): string {
92
+ return `${[...members].sort().join(',')}|rounds=${String(rounds)}`;
93
+ }
94
+
95
+ /**
96
+ * Read the retained response artefacts into prior runs.
97
+ *
98
+ * Tolerant of every read failure by design: a malformed or half-written
99
+ * artefact must not break a council run. The guard is an advisory, and an
100
+ * advisory that can throw is worse than one that stays quiet.
101
+ */
102
+ export function readPriorRuns(responsesDir: string, repoRoot: string): PriorRun[] {
103
+ let names: string[];
104
+ try {
105
+ names = fs.readdirSync(responsesDir).filter((f) => f.endsWith('.md'));
106
+ } catch {
107
+ return [];
108
+ }
109
+ const out: PriorRun[] = [];
110
+ for (const name of names) {
111
+ const abs = path.join(responsesDir, name);
112
+ let head: Record<string, unknown>;
113
+ let stat: fs.Stats;
114
+ try {
115
+ stat = fs.statSync(abs);
116
+ const text = fs.readFileSync(abs, 'utf8');
117
+ const json = _leadingJson(text);
118
+ // A file with no leading object is not a council artefact at all —
119
+ // skipped rather than admitted as a prior run with empty fields,
120
+ // which would put noise in a warning whose whole value is that it
121
+ // is rare enough to read.
122
+ if (json === null) continue;
123
+ head = JSON.parse(json) as Record<string, unknown>;
124
+ } catch {
125
+ continue;
126
+ }
127
+ const questionPath = typeof head['artefact'] === 'string' ? head['artefact'] : '';
128
+ const members = Array.isArray(head['members']) ? (head['members'] as string[]) : [];
129
+ const rounds = typeof head['rounds'] === 'number' ? head['rounds'] : 0;
130
+ let questionHash: string | null = null;
131
+ let questionText: string | null = null;
132
+ if (questionPath !== '') {
133
+ try {
134
+ const q = fs.readFileSync(path.join(repoRoot, questionPath), 'utf8');
135
+ questionHash = _sha256_hex(q);
136
+ questionText = q;
137
+ } catch {
138
+ // The question file was moved or pruned. The run is still a
139
+ // prior run; it simply cannot be compared by text, and saying
140
+ // that is better than dropping the record.
141
+ }
142
+ }
143
+ out.push({
144
+ artifactPath: abs,
145
+ questionPath,
146
+ ranAt: stat.mtime.toISOString().slice(0, 10),
147
+ configFingerprint: configFingerprint(members, rounds),
148
+ questionHash,
149
+ questionText,
150
+ });
151
+ }
152
+ return out;
153
+ }
154
+
155
+ /** The leading `{...}` object of an artefact, brace-balanced, or `null`. */
156
+ function _leadingJson(text: string): string | null {
157
+ const start = text.indexOf('{');
158
+ if (start === -1) return null;
159
+ let depth = 0;
160
+ let inStr = false;
161
+ let esc = false;
162
+ for (let i = start; i < text.length; i++) {
163
+ const c = text[i] as string;
164
+ if (inStr) {
165
+ if (esc) esc = false;
166
+ else if (c === '\\') esc = true;
167
+ else if (c === '"') inStr = false;
168
+ continue;
169
+ }
170
+ if (c === '"') inStr = true;
171
+ else if (c === '{') depth += 1;
172
+ else if (c === '}') {
173
+ depth -= 1;
174
+ if (depth === 0) return text.slice(start, i + 1);
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+
180
+ /**
181
+ * Is this question already deliberated?
182
+ *
183
+ * Returns the STRONGEST finding, or `null`. Exact beats near-duplicate, and a
184
+ * stale-config exact beats a near-duplicate: a caller shown two findings reads
185
+ * neither, and the exact one carries more information.
186
+ */
187
+ export function checkRecouncil(
188
+ questionText: string,
189
+ currentConfig: string,
190
+ priors: readonly PriorRun[],
191
+ threshold: number = NEAR_DUPLICATE_THRESHOLD,
192
+ ): RecouncilVerdict | null {
193
+ const hash = _sha256_hex(questionText);
194
+
195
+ for (const p of priors) {
196
+ if (p.questionHash === hash) {
197
+ return {
198
+ state: p.configFingerprint === currentConfig ? 'exact-same-config' : 'exact-stale-config',
199
+ prior: p,
200
+ similarity: 1,
201
+ };
202
+ }
203
+ }
204
+ let best: RecouncilVerdict | null = null;
205
+ for (const p of priors) {
206
+ if (p.questionText === null) continue;
207
+ const s = jaccardSimilarity(questionText, p.questionText);
208
+ if (s >= threshold && (best === null || s > best.similarity)) {
209
+ best = { state: 'near-duplicate', prior: p, similarity: s };
210
+ }
211
+ }
212
+ return best;
213
+ }
214
+
215
+ /**
216
+ * The warning text.
217
+ *
218
+ * Every line step 1A.2 names is present — prior run date, prior artifact path,
219
+ * the fact that the question appears already deliberated, and the path to
220
+ * re-run — and 1A.3 requires the SCORE to be printed, so it is, on every state
221
+ * rather than only the near-duplicate one. A score of 1.00 on an exact repeat
222
+ * tells the reader which comparison fired.
223
+ */
224
+ export function renderRecouncilWarning(v: RecouncilVerdict): string {
225
+ const what: Record<RepeatState, string> = {
226
+ 'exact-same-config':
227
+ 'this exact question has already been deliberated, and the configuration that would run it is unchanged',
228
+ 'exact-stale-config':
229
+ 'this exact question has already been deliberated, but the members or round count have moved since — the prior verdict may rest on evidence this configuration would not produce',
230
+ 'near-duplicate':
231
+ 'a question above the pre-registered similarity threshold has already been deliberated',
232
+ };
233
+ return [
234
+ `⚠️ council:re-council — ${what[v.state]}.`,
235
+ ` prior run ${v.prior.ranAt}`,
236
+ ` prior answer ${v.prior.artifactPath}`,
237
+ ` question ${v.prior.questionPath || '(not recorded)'}`,
238
+ ` similarity ${v.similarity.toFixed(2)} (threshold ${String(NEAR_DUPLICATE_THRESHOLD)}, pre-registered)`,
239
+ ' This is a WARNING, never a refusal. Re-run with --confirm to deliberate again.',
240
+ '',
241
+ ].join('\n');
242
+ }
243
+
244
+ /**
245
+ * The whole call site, in one function.
246
+ *
247
+ * Lives here rather than in `council_cli.ts` for a reason the source-size
248
+ * ratchet made concrete: that file is already 2,525 lines over the 1,500-line
249
+ * ceiling, so every line added to it is a line the ratchet counts, and a
250
+ * twenty-line comment explaining a guard belongs beside the guard anyway.
251
+ *
252
+ * IT CANNOT REFUSE, and the signature is where that is guaranteed: it returns
253
+ * `void`. Step 1A.2 requires that no code path turn the warning into an
254
+ * unconditional block, and a function with nothing to return gives a caller
255
+ * nothing to branch on.
256
+ *
257
+ * Every read is wrapped: an advisory that throws is worse than one that stays
258
+ * quiet, because the guard exists to save a duplicate run and never to prevent
259
+ * a legitimate one.
260
+ *
261
+ * `questionFile` is the RAW question file, not the built prompt. Measured on
262
+ * the first live run: the built prompt hashes differently from the file the
263
+ * prior artefact recorded, so the exact-repeat states were unreachable in
264
+ * production and every true repeat reported as a near-duplicate at similarity
265
+ * 1.00. `fallbackText` covers a question that arrived on stdin and has no file.
266
+ */
267
+ export function warnIfRecounciled(
268
+ repoRoot: string,
269
+ questionFile: string,
270
+ fallbackText: string,
271
+ members: readonly { name: string; model: string }[],
272
+ rounds: number,
273
+ write: (s: string) => void,
274
+ ): void {
275
+ try {
276
+ let text = fallbackText;
277
+ try {
278
+ text = fs.readFileSync(path.resolve(repoRoot, questionFile), 'utf8');
279
+ } catch {
280
+ // No file behind this question; the built prompt is the best text
281
+ // available, and a near-duplicate finding is still useful.
282
+ }
283
+ const v = checkRecouncil(
284
+ text,
285
+ // `name/model` — the SAME shape the artefact writer records.
286
+ configFingerprint(members.map((m) => `${m.name}/${m.model}`), rounds),
287
+ readPriorRuns(path.join(repoRoot, 'agents/runtime/council/responses'), repoRoot),
288
+ );
289
+ if (v !== null) write(renderRecouncilWarning(v));
290
+ } catch {
291
+ // See the docstring: quiet beats loud-and-broken for an advisory.
292
+ }
293
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * How a `CouncilResponse` is shaped for the persisted session record.
3
+ *
4
+ * Extracted from `council_cli.ts` on 2026-08-30. It belongs here on its own
5
+ * merits — it is a pure data-shaping function over a type this directory owns,
6
+ * with no CLI concern in it — and it pays for the lines the same change spent
7
+ * in files that are thousands past `check_source_size_budget`'s ceiling. That
8
+ * gate's own convention is that the total falls through extraction and never
9
+ * rises through a baseline edit.
10
+ *
11
+ * `metadata` values are stringified deliberately, and two consumers depend on
12
+ * it: `ai_council/pricing.ts` coerces them back, and `billable_cost.test.ts`
13
+ * pins the behavior.
14
+ *
15
+ * Side-effect-free, no CLI entry, no `process.exit`.
16
+ */
17
+ import type { CouncilResponse } from './clients.js';
18
+
19
+ type Dict = Record<string, unknown>;
20
+
21
+ export function serializeResponses(responses: CouncilResponse[]): Dict[] {
22
+ const out: Dict[] = [];
23
+ for (const r of responses) {
24
+ const metadata: Dict = {};
25
+ for (const [k, v] of Object.entries(r.metadata || {})) {
26
+ metadata[k] = String(v);
27
+ }
28
+ out.push({
29
+ provider: r.provider,
30
+ model: r.model,
31
+ text: r.text,
32
+ // Present ONLY when something rewrote `text` in place — today that
33
+ // is the inline-findings harvest, whose emitted marker promises
34
+ // exactly this retention. Omitted otherwise rather than written as
35
+ // a copy of `text`, so an unmodified reply does not carry a
36
+ // duplicate of itself into every session record. The full account
37
+ // of why the field exists is at its single write site in
38
+ // `inline_findings.ts`.
39
+ ...(r.raw_text === null ? {} : { raw_text: r.raw_text }),
40
+ input_tokens: r.input_tokens,
41
+ output_tokens: r.output_tokens,
42
+ cache_creation_input_tokens: r.cache_creation_input_tokens,
43
+ cache_read_input_tokens: r.cache_read_input_tokens,
44
+ latency_ms: r.latency_ms,
45
+ error: r.error,
46
+ metadata,
47
+ });
48
+ }
49
+ return out;
50
+ }