@event4u/agent-config 9.8.0 → 9.9.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 (817) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +278 -298
  3. package/CONTRIBUTING.md +23 -7
  4. package/MIGRATION.md +20 -0
  5. package/README.md +55 -9
  6. package/dist/agent-src/commands/agents/audit.md +1 -1
  7. package/dist/agent-src/commands/agents/optimize.md +2 -2
  8. package/dist/agent-src/commands/agents/user.md +1 -1
  9. package/dist/agent-src/commands/agents.md +1 -1
  10. package/dist/agent-src/commands/check-current-md.md +3 -3
  11. package/dist/agent-src/commands/fix/portability.md +2 -2
  12. package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
  13. package/dist/agent-src/commands/fix/refs.md +2 -2
  14. package/dist/agent-src/commands/fix/route.md +4 -3
  15. package/dist/agent-src/commands/fix.md +9 -6
  16. package/dist/agent-src/commands/ghostwriter.md +1 -1
  17. package/dist/agent-src/commands/image.md +1 -1
  18. package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
  19. package/dist/agent-src/commands/optimize/skills.md +2 -2
  20. package/dist/agent-src/commands/post-as.md +1 -1
  21. package/dist/agent-src/commands/research.md +1 -1
  22. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  23. package/dist/agent-src/commands/security-audit-config.md +1 -1
  24. package/dist/agent-src/commands/team/delegate.md +4 -0
  25. package/dist/agent-src/commands/video.md +1 -1
  26. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
  27. package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
  28. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
  29. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
  30. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
  31. package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
  32. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
  33. package/dist/agent-src/rules/code-provenance.md +112 -0
  34. package/dist/agent-src/rules/external-code-graph-interop.md +4 -4
  35. package/dist/agent-src/rules/history-discipline.md +80 -0
  36. package/dist/agent-src/rules/no-roadmap-references.md +1 -1
  37. package/dist/agent-src/rules/php-coding.md +1 -0
  38. package/dist/agent-src/rules/reviewer-awareness.md +1 -0
  39. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
  40. package/dist/agent-src/rules/roadmap-progress-sync.md +7 -0
  41. package/dist/agent-src/rules/scale-discipline.md +92 -0
  42. package/dist/agent-src/rules/security-sensitive-stop.md +10 -0
  43. package/dist/agent-src/rules/session-canary.md +77 -0
  44. package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
  45. package/dist/agent-src/rules/tool-safety.md +3 -1
  46. package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
  47. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  48. package/dist/agent-src/skills/code-intelligence/SKILL.md +17 -14
  49. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  50. package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
  51. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  52. package/dist/agent-src/skills/design-review/SKILL.md +5 -6
  53. package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
  54. package/dist/agent-src/skills/history-design/SKILL.md +101 -0
  55. package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
  56. package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
  57. package/dist/agent-src/skills/image-editing/SKILL.md +1 -1
  58. package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
  59. package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
  60. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  61. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
  62. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
  63. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
  64. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
  65. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
  66. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
  67. package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
  68. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  69. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
  70. package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
  71. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
  72. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
  73. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
  74. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
  75. package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
  76. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
  77. package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
  78. package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
  79. package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
  80. package/dist/agent-src/skills/secrets-management/SKILL.md +3 -4
  81. package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
  82. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
  83. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
  84. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  85. package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
  86. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
  87. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
  88. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  89. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
  90. package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
  91. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
  92. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
  93. package/dist/agent-src/templates/AGENTS.md +1 -1
  94. package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
  95. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  96. package/dist/agent-src/templates/command.md +3 -3
  97. package/dist/agent-src/templates/persona.md +2 -2
  98. package/dist/agent-src/templates/rule.md +2 -2
  99. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  100. package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
  101. package/dist/cli/commands/doctorShell.js +20 -0
  102. package/dist/cli/commands/doctorShell.js.map +1 -1
  103. package/dist/cli/commands/rtkDetect.js +58 -0
  104. package/dist/cli/commands/rtkDetect.js.map +1 -0
  105. package/dist/cli/firstRunNotice.js +70 -0
  106. package/dist/cli/firstRunNotice.js.map +1 -0
  107. package/dist/cli/main.js +35 -3
  108. package/dist/cli/main.js.map +1 -1
  109. package/dist/cli/registry.js +7 -1
  110. package/dist/cli/registry.js.map +1 -1
  111. package/dist/discovery/deprecation-report.md +1 -1
  112. package/dist/discovery/discovery-manifest.json +362 -78
  113. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  114. package/dist/discovery/discovery-manifest.summary.md +6 -4
  115. package/dist/discovery/orphan-report.md +1 -1
  116. package/dist/discovery/packs.json +90 -8
  117. package/dist/discovery/trust-report.md +11 -11
  118. package/dist/discovery/workspaces.json +31 -7
  119. package/dist/hooks/dispatch.js +19475 -0
  120. package/dist/install/agentSwitchDetection.js +75 -0
  121. package/dist/install/agentSwitchDetection.js.map +1 -0
  122. package/dist/install/agentSwitchProfile.js +117 -0
  123. package/dist/install/agentSwitchProfile.js.map +1 -0
  124. package/dist/install/atomic.js +1 -1
  125. package/dist/install/detect.js +1 -1
  126. package/dist/install/install.mjs +775 -486
  127. package/dist/install/rtkDetection.js +213 -0
  128. package/dist/install/rtkDetection.js.map +1 -0
  129. package/dist/install/rule_scope.js +2 -1
  130. package/dist/install/rule_scope.js.map +1 -1
  131. package/dist/install/types.js +2 -2
  132. package/dist/install/wizard-plan.js +1 -1
  133. package/dist/install/wizardDismissals.js +58 -0
  134. package/dist/install/wizardDismissals.js.map +1 -0
  135. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  136. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  137. package/dist/mcp/registry-manifest.json +15 -4
  138. package/dist/mcp/server.json +20 -0
  139. package/dist/mcp/server.mjs +44292 -0
  140. package/dist/router.json +1 -1
  141. package/dist/scripts/condense.js +14 -7
  142. package/dist/scripts/condense.js.map +1 -1
  143. package/dist/server/app.js +4 -2
  144. package/dist/server/app.js.map +1 -1
  145. package/dist/server/io/sharedWriteCheck.js +101 -0
  146. package/dist/server/io/sharedWriteCheck.js.map +1 -0
  147. package/dist/server/routes/ping.js +14 -0
  148. package/dist/server/routes/ping.js.map +1 -1
  149. package/dist/server/routes/settings.js +21 -4
  150. package/dist/server/routes/settings.js.map +1 -1
  151. package/dist/server/routes/userMd.js +21 -4
  152. package/dist/server/routes/userMd.js.map +1 -1
  153. package/dist/server/routes/wizard.js +68 -25
  154. package/dist/server/routes/wizard.js.map +1 -1
  155. package/dist/server/schemas/settings.js +4 -2
  156. package/dist/server/schemas/settings.js.map +1 -1
  157. package/dist/ui/assets/index-BpSQt5vm.js +40 -0
  158. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
  159. package/dist/ui/assets/index-jSfMW8_t.css +1 -0
  160. package/dist/ui/index.html +2 -2
  161. package/docs/MIGRATION.md +16 -0
  162. package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
  163. package/package.json +21 -11
  164. package/src/agent-src/templates/AGENTS.md +1 -1
  165. package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  166. package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
  167. package/src/config/agent-settings.template.yml +52 -14
  168. package/src/config/discovery/packs.yml +22 -0
  169. package/src/config/discovery/workspaces.yml +1 -1
  170. package/src/config/evaluator-budgets.json +47 -0
  171. package/src/config/hook-latency-budget.json +20 -0
  172. package/src/install/agentSwitchDetection.ts +90 -0
  173. package/src/install/agentSwitchProfile.ts +131 -0
  174. package/src/install/atomic.ts +1 -1
  175. package/src/install/detect.ts +1 -1
  176. package/src/install/rtkDetection.ts +274 -0
  177. package/src/install/rule_scope.ts +9 -2
  178. package/src/install/types.ts +2 -2
  179. package/src/install/wizard-plan.ts +1 -1
  180. package/src/install/wizardDismissals.ts +60 -0
  181. package/src/scripts/_cli/cmd_doctor.ts +62 -1
  182. package/src/scripts/_cli/cmd_memory_get.ts +197 -0
  183. package/src/scripts/_cli/cmd_refresh.ts +30 -0
  184. package/src/scripts/_dispatch.bash +81 -0
  185. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
  186. package/src/scripts/_lib/auto_dispatch.ts +76 -0
  187. package/src/scripts/_lib/detect_target_license.ts +714 -0
  188. package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +5 -0
  189. package/src/scripts/_lib/fixtures/secret-detector/positives.txt +4 -0
  190. package/src/scripts/_lib/install_drift.ts +194 -0
  191. package/src/scripts/_lib/memory_fts_index.ts +390 -0
  192. package/src/scripts/_lib/orchestration_record.ts +91 -2
  193. package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
  194. package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
  195. package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
  196. package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
  197. package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
  198. package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
  199. package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
  200. package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
  201. package/src/scripts/_lib/persistence/types.ts +109 -0
  202. package/src/scripts/_lib/rtk_allowlist.ts +44 -0
  203. package/src/scripts/_lib/secret_detector.test.ts +5 -0
  204. package/src/scripts/_lib/secret_detector.ts +9 -0
  205. package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
  206. package/src/scripts/_lib/spawn_env.ts +7 -0
  207. package/src/scripts/_lib/sqlite_guard.ts +191 -0
  208. package/src/scripts/_lib/subagent_spawn.ts +53 -0
  209. package/src/scripts/_lib/worker_budget.ts +107 -0
  210. package/src/scripts/ai_council/blind_review.ts +0 -0
  211. package/src/scripts/ai_council/config.ts +12 -6
  212. package/src/scripts/ai_council/orchestrator.ts +73 -3
  213. package/src/scripts/ai_team/review_gate.ts +8 -10
  214. package/src/scripts/ai_team/team_dispatch.ts +48 -0
  215. package/src/scripts/audit_initial_context.ts +1 -1
  216. package/src/scripts/bench_cross_source_eval.ts +400 -0
  217. package/src/scripts/bench_honesty_score.ts +1093 -0
  218. package/src/scripts/bench_hook_latency.ts +218 -0
  219. package/src/scripts/build_mcp_catalog.ts +275 -0
  220. package/src/scripts/build_mcp_registry_manifest.ts +46 -0
  221. package/src/scripts/build_proof.ts +45 -0
  222. package/src/scripts/chat_history.ts +8 -5
  223. package/src/scripts/check_backstop_debt.ts +23 -13
  224. package/src/scripts/check_bundle_path_leakage.ts +343 -0
  225. package/src/scripts/check_evaluator_budgets.ts +99 -0
  226. package/src/scripts/check_knowledge_sharing.ts +12 -1
  227. package/src/scripts/check_no_external_sources.ts +2 -2
  228. package/src/scripts/check_source_pointer_freshness.ts +28 -3
  229. package/src/scripts/code_graph/build.ts +0 -0
  230. package/src/scripts/code_graph/cli.ts +181 -9
  231. package/src/scripts/code_graph/detect.ts +52 -0
  232. package/src/scripts/code_graph/intent.ts +45 -0
  233. package/src/scripts/code_graph/query.ts +143 -29
  234. package/src/scripts/code_graph/sqlite_store.ts +174 -0
  235. package/src/scripts/condense.ts +14 -6
  236. package/src/scripts/context_hygiene_hook.ts +8 -5
  237. package/src/scripts/council_cli.ts +126 -12
  238. package/src/scripts/detect_target_license.ts +203 -0
  239. package/src/scripts/evaluator_umbrella.sh +145 -0
  240. package/src/scripts/external_sources_denylist.json +5 -3
  241. package/src/scripts/first_run_gate_hook.ts +9 -5
  242. package/src/scripts/hermetic-install.sh +3 -3
  243. package/src/scripts/hook_manifest.yaml +55 -16
  244. package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
  245. package/src/scripts/hooks/block_no_verify.ts +9 -9
  246. package/src/scripts/hooks/code_graph_nudge_hook.ts +11 -4
  247. package/src/scripts/hooks/concern_registry.ts +75 -0
  248. package/src/scripts/hooks/design_slop_hook.ts +8 -5
  249. package/src/scripts/hooks/dispatch_entry.ts +37 -0
  250. package/src/scripts/hooks/dispatch_hook.ts +176 -3
  251. package/src/scripts/hooks/hook_stdin.ts +42 -0
  252. package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
  253. package/src/scripts/hot_context_hook.ts +7 -6
  254. package/src/scripts/injection_scan_hook.ts +9 -1
  255. package/src/scripts/install +6 -6
  256. package/src/scripts/install-hooks.sh +4 -4
  257. package/src/scripts/install.sh +5 -4
  258. package/src/scripts/install.ts +264 -23
  259. package/src/scripts/learning_sidecar.ts +0 -0
  260. package/src/scripts/lint_budget_ownership.ts +89 -0
  261. package/src/scripts/lint_command_routing.ts +35 -5
  262. package/src/scripts/lint_command_verbs.ts +42 -9
  263. package/src/scripts/lint_consumer_internal_refs.ts +211 -0
  264. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  265. package/src/scripts/lint_documented_commands.ts +670 -0
  266. package/src/scripts/lint_framework_leakage.ts +17 -3
  267. package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
  268. package/src/scripts/lint_governed_writes.ts +335 -0
  269. package/src/scripts/lint_hidden_unicode.ts +6 -0
  270. package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
  271. package/src/scripts/lint_memory_tripwire.ts +186 -0
  272. package/src/scripts/lint_override_kernel_guard.ts +74 -26
  273. package/src/scripts/lint_persistence.ts +171 -0
  274. package/src/scripts/lint_pre_migration_refs.ts +106 -0
  275. package/src/scripts/lint_provenance.ts +547 -0
  276. package/src/scripts/lint_provenance_vocabulary.ts +437 -0
  277. package/src/scripts/lint_spawn_payload.ts +283 -0
  278. package/src/scripts/lint_store_boundary.ts +152 -0
  279. package/src/scripts/lint_versioned_cache.ts +7 -1
  280. package/src/scripts/mcp_server/__main__.ts +7 -2
  281. package/src/scripts/mcp_server/catalog.ts +23 -1
  282. package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
  283. package/src/scripts/mcp_server/prompts.ts +6 -0
  284. package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
  285. package/src/scripts/mcp_server/tools.ts +56 -5
  286. package/src/scripts/mcp_telemetry_query.ts +2 -33
  287. package/src/scripts/mcp_telemetry_store.ts +64 -34
  288. package/src/scripts/memory_learn_hook.ts +126 -0
  289. package/src/scripts/memory_lookup.ts +0 -0
  290. package/src/scripts/memory_replay_24.ts +312 -0
  291. package/src/scripts/memory_report.ts +16 -3
  292. package/src/scripts/memory_signal.ts +48 -0
  293. package/src/scripts/memory_status.ts +6 -0
  294. package/src/scripts/minimal_safe_diff_hook.ts +8 -5
  295. package/src/scripts/onboarding_gate_hook.ts +8 -5
  296. package/src/scripts/orchestration_record.ts +16 -0
  297. package/src/scripts/pr_url_reminder_hook.ts +8 -1
  298. package/src/scripts/prepack-check.mjs +17 -0
  299. package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
  300. package/src/scripts/prepack_lifecycle_check.mjs +82 -0
  301. package/src/scripts/profile_staleness_hook.ts +8 -7
  302. package/src/scripts/report_install_drift.ts +109 -0
  303. package/src/scripts/roadmap_progress_hook.ts +8 -5
  304. package/src/scripts/schemas/license-policy.schema.json +89 -0
  305. package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
  306. package/src/scripts/schemas/rule.schema.json +10 -0
  307. package/src/scripts/self_review_gate.test.ts +173 -1
  308. package/src/scripts/self_review_gate.ts +155 -15
  309. package/src/scripts/session_canary_hook.ts +182 -0
  310. package/src/scripts/smoke_quickstart.ts +2 -2
  311. package/src/scripts/surface_probe_hook.ts +8 -7
  312. package/src/scripts/sync_gitattributes.ts +310 -0
  313. package/src/scripts/team_review_gate_hook.ts +13 -16
  314. package/src/scripts/verify_before_complete_hook.ts +8 -5
  315. package/src/scripts/wrapper_freshness_hook.ts +8 -7
  316. package/src/server/schemas/settings.ts +8 -2
  317. package/dist/ui/assets/index-BPFMZWUs.css +0 -1
  318. package/dist/ui/assets/index-CrmZ34Rg.js +0 -40
  319. package/dist/ui/assets/index-CrmZ34Rg.js.map +0 -1
  320. package/docs/CLAIMS.md +0 -286
  321. package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
  322. package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
  323. package/docs/SKILL_CENSUS.md +0 -352
  324. package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
  325. package/docs/adrs/cost/README.md +0 -9
  326. package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
  327. package/docs/adrs/memory/README.md +0 -10
  328. package/docs/adrs/router/0001-three-tier-routing.md +0 -119
  329. package/docs/adrs/router/README.md +0 -9
  330. package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
  331. package/docs/adrs/schema/README.md +0 -9
  332. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
  333. package/docs/adrs/smoke/README.md +0 -9
  334. package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
  335. package/docs/adrs/telegraph/README.md +0 -9
  336. package/docs/announcements/2026-05-non-dev-launch.md +0 -79
  337. package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
  338. package/docs/anti-reskin-gate.md +0 -60
  339. package/docs/architecture/augment-projection.md +0 -70
  340. package/docs/architecture/claude-bundle.md +0 -77
  341. package/docs/architecture/current-onboard-baseline.md +0 -126
  342. package/docs/architecture/current-safety-behavior.md +0 -137
  343. package/docs/architecture/multi-tool-projection.md +0 -125
  344. package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
  345. package/docs/architecture/source-projection.md +0 -85
  346. package/docs/architecture.md +0 -390
  347. package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
  348. package/docs/archive/CHANGELOG-7.0.0.md +0 -419
  349. package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
  350. package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
  351. package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
  352. package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
  353. package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
  354. package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
  355. package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
  356. package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
  357. package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
  358. package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
  359. package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
  360. package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
  361. package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
  362. package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
  363. package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
  364. package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
  365. package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
  366. package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
  367. package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
  368. package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
  369. package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
  370. package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
  371. package/docs/artefact-census.md +0 -71
  372. package/docs/benchmark.md +0 -785
  373. package/docs/benchmark.pinned.yml +0 -31
  374. package/docs/benchmarks.md +0 -85
  375. package/docs/capability-matrix.md +0 -33
  376. package/docs/case-studies/_template.md +0 -60
  377. package/docs/case-studies/frontend-design-positioning.md +0 -86
  378. package/docs/catalog.md +0 -726
  379. package/docs/command-flows.md +0 -272
  380. package/docs/command-naming-audit.md +0 -60
  381. package/docs/comparison.yaml +0 -87
  382. package/docs/contracts/CHANGELOG-conventions.md +0 -149
  383. package/docs/contracts/STABILITY.md +0 -188
  384. package/docs/contracts/adoption-signal-floor.md +0 -127
  385. package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
  386. package/docs/contracts/adr-chat-history-split.md +0 -140
  387. package/docs/contracts/adr-command-suggestion.md +0 -144
  388. package/docs/contracts/adr-forecast-construction-shape.md +0 -90
  389. package/docs/contracts/adr-gtm-context-spine.md +0 -116
  390. package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
  391. package/docs/contracts/adr-install-user-type-axis.md +0 -107
  392. package/docs/contracts/adr-layout.md +0 -107
  393. package/docs/contracts/adr-level-6-productization.md +0 -145
  394. package/docs/contracts/adr-mcp-runtime.md +0 -128
  395. package/docs/contracts/adr-product-ui-track.md +0 -381
  396. package/docs/contracts/adr-prompt-driven-execution.md +0 -186
  397. package/docs/contracts/adr-settings-sync-engine.md +0 -128
  398. package/docs/contracts/adr-user-types-axis.md +0 -127
  399. package/docs/contracts/adr-wing4-context-spine.md +0 -126
  400. package/docs/contracts/agent-user-schema.md +0 -170
  401. package/docs/contracts/agents-layout.md +0 -148
  402. package/docs/contracts/agents-md-tech-stack.md +0 -75
  403. package/docs/contracts/ai-council-config.md +0 -829
  404. package/docs/contracts/ai-team-config.md +0 -224
  405. package/docs/contracts/analysis-memory-loop.md +0 -149
  406. package/docs/contracts/at-rest-encryption.md +0 -191
  407. package/docs/contracts/audit-log-v1.md +0 -150
  408. package/docs/contracts/auto-orchestration-v1.md +0 -70
  409. package/docs/contracts/benchmark-ab-contract.md +0 -106
  410. package/docs/contracts/benchmark-corpus-spec.md +0 -125
  411. package/docs/contracts/benchmark-report-schema.md +0 -113
  412. package/docs/contracts/branch-protection-policy.md +0 -139
  413. package/docs/contracts/brand-token-consumption.md +0 -74
  414. package/docs/contracts/capability-boundary.md +0 -69
  415. package/docs/contracts/capability-packs.md +0 -217
  416. package/docs/contracts/ci-cost-budget.md +0 -111
  417. package/docs/contracts/ci-green-floor.md +0 -141
  418. package/docs/contracts/command-category-governance.md +0 -84
  419. package/docs/contracts/command-clusters.md +0 -399
  420. package/docs/contracts/command-surface-tiers.md +0 -176
  421. package/docs/contracts/command-taxonomy.md +0 -137
  422. package/docs/contracts/condensation-default-kill-criterion.md +0 -116
  423. package/docs/contracts/config-presets.md +0 -144
  424. package/docs/contracts/conformance.md +0 -84
  425. package/docs/contracts/consumer-bridge.md +0 -73
  426. package/docs/contracts/context-paths.md +0 -101
  427. package/docs/contracts/context-spine.md +0 -179
  428. package/docs/contracts/cost-dashboard.md +0 -143
  429. package/docs/contracts/cost-enforcement.md +0 -134
  430. package/docs/contracts/cost-profile-defaults.md +0 -110
  431. package/docs/contracts/cost-summary-schema.md +0 -107
  432. package/docs/contracts/creative-pack-boundary.md +0 -63
  433. package/docs/contracts/cross-repo-retrieval.md +0 -64
  434. package/docs/contracts/cross-wing-handoff.md +0 -134
  435. package/docs/contracts/daily-workspace.md +0 -147
  436. package/docs/contracts/decision-engine-gates.md +0 -120
  437. package/docs/contracts/decision-trace-v1.md +0 -177
  438. package/docs/contracts/design-artifact-lifecycle.md +0 -93
  439. package/docs/contracts/design-artifact-verification.md +0 -153
  440. package/docs/contracts/discovery-manifest.md +0 -209
  441. package/docs/contracts/discovery-manifest.schema.json +0 -254
  442. package/docs/contracts/evidence-based-pruning.md +0 -102
  443. package/docs/contracts/explain-modes.md +0 -187
  444. package/docs/contracts/explain-trace.schema.json +0 -144
  445. package/docs/contracts/file-ownership-matrix.json +0 -13941
  446. package/docs/contracts/file-ownership-matrix.md +0 -135
  447. package/docs/contracts/frontmatter-contract.md +0 -140
  448. package/docs/contracts/ghostwriter-schema.md +0 -337
  449. package/docs/contracts/governance-enforcement-projection.md +0 -159
  450. package/docs/contracts/gui-wizard.md +0 -350
  451. package/docs/contracts/harness-expectations.md +0 -128
  452. package/docs/contracts/hook-architecture-v1.md +0 -325
  453. package/docs/contracts/host-agent-protocol.md +0 -110
  454. package/docs/contracts/implement-ticket-flow.md +0 -625
  455. package/docs/contracts/init-telemetry.md +0 -132
  456. package/docs/contracts/injected-block-authenticity-model.md +0 -66
  457. package/docs/contracts/install-layout.md +0 -249
  458. package/docs/contracts/install-scopes.md +0 -82
  459. package/docs/contracts/installed-tools-lockfile.md +0 -144
  460. package/docs/contracts/installer-agent-mode.md +0 -137
  461. package/docs/contracts/iron-law-overrides.txt +0 -26
  462. package/docs/contracts/kernel-membership.md +0 -339
  463. package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
  464. package/docs/contracts/linear-ai-three-layers.md +0 -130
  465. package/docs/contracts/linter-structural-model.md +0 -181
  466. package/docs/contracts/load-context-budget-model.md +0 -259
  467. package/docs/contracts/load-context-schema.md +0 -220
  468. package/docs/contracts/local-analytics.md +0 -160
  469. package/docs/contracts/local-knowledge-ingestion.md +0 -96
  470. package/docs/contracts/local-server-api.md +0 -134
  471. package/docs/contracts/local-server-ports.md +0 -53
  472. package/docs/contracts/low-impact-corpus-format.md +0 -95
  473. package/docs/contracts/mcp-beta-criteria.md +0 -130
  474. package/docs/contracts/mcp-cloud-scope.md +0 -355
  475. package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
  476. package/docs/contracts/mcp-phase-1-scope.md +0 -272
  477. package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
  478. package/docs/contracts/mcp-tool-inventory.md +0 -64
  479. package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
  480. package/docs/contracts/measurement-baseline.md +0 -103
  481. package/docs/contracts/memory-visibility-v1.md +0 -160
  482. package/docs/contracts/mental-models.md +0 -336
  483. package/docs/contracts/migrate-command.md +0 -233
  484. package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
  485. package/docs/contracts/namespace.md +0 -125
  486. package/docs/contracts/no-runtime-boundary.md +0 -61
  487. package/docs/contracts/one-off-script-lifecycle.md +0 -110
  488. package/docs/contracts/orchestration-dsl-v1.md +0 -153
  489. package/docs/contracts/package-self-orientation.md +0 -163
  490. package/docs/contracts/pilot/agent-authority.md +0 -24
  491. package/docs/contracts/pilot/direct-answers.md +0 -70
  492. package/docs/contracts/pilot/language-and-tone.md +0 -63
  493. package/docs/contracts/plain-language-surface.md +0 -117
  494. package/docs/contracts/prelaunch-diagnostics.md +0 -151
  495. package/docs/contracts/profile-system.md +0 -167
  496. package/docs/contracts/reasoning-discipline-protocol.md +0 -83
  497. package/docs/contracts/release-pr-gating.md +0 -151
  498. package/docs/contracts/release-sizing.md +0 -107
  499. package/docs/contracts/release-trunk-sync.md +0 -105
  500. package/docs/contracts/review-lens-schema.md +0 -64
  501. package/docs/contracts/roadmap-complexity-standard.md +0 -138
  502. package/docs/contracts/role-experience.md +0 -125
  503. package/docs/contracts/router-blending.md +0 -71
  504. package/docs/contracts/rule-classification.md +0 -171
  505. package/docs/contracts/rule-interactions.md +0 -132
  506. package/docs/contracts/rule-interactions.yml +0 -260
  507. package/docs/contracts/rule-priority-hierarchy.md +0 -88
  508. package/docs/contracts/rule-router.md +0 -287
  509. package/docs/contracts/safety-model.md +0 -129
  510. package/docs/contracts/session-profile-overlay.md +0 -157
  511. package/docs/contracts/settings-api.md +0 -264
  512. package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
  513. package/docs/contracts/settings-sync-yaml-subset.md +0 -139
  514. package/docs/contracts/skill-bundled-assets.md +0 -62
  515. package/docs/contracts/skill-discovery.md +0 -80
  516. package/docs/contracts/skill-distribution-channels.md +0 -66
  517. package/docs/contracts/skill-domains.md +0 -144
  518. package/docs/contracts/skill-dry-run.md +0 -47
  519. package/docs/contracts/skill-family-map.yml +0 -915
  520. package/docs/contracts/smoke-contracts.md +0 -144
  521. package/docs/contracts/subagent-boundary.md +0 -74
  522. package/docs/contracts/surface-agent-contracts.md +0 -153
  523. package/docs/contracts/surface-matrix.md +0 -108
  524. package/docs/contracts/surface-tiers.md +0 -81
  525. package/docs/contracts/telegraph-telemetry.md +0 -83
  526. package/docs/contracts/ticket-bundle-format.md +0 -233
  527. package/docs/contracts/tier-3-contrib-plugin.md +0 -137
  528. package/docs/contracts/trust-and-safety.md +0 -144
  529. package/docs/contracts/ui-stack-extension.md +0 -237
  530. package/docs/contracts/ui-track-flow.md +0 -329
  531. package/docs/contracts/universal-skills.md +0 -91
  532. package/docs/contracts/user-type-schema.md +0 -146
  533. package/docs/contracts/value-dashboard-spec.md +0 -378
  534. package/docs/contracts/value-report-schema.md +0 -168
  535. package/docs/contracts/workflow-packs.md +0 -121
  536. package/docs/contracts/workspace-boundary.md +0 -84
  537. package/docs/contracts/workspace-documents.md +0 -144
  538. package/docs/contracts/write-engine.md +0 -182
  539. package/docs/cookbook.md +0 -152
  540. package/docs/customization.md +0 -696
  541. package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
  542. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
  543. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
  544. package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
  545. package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
  546. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
  547. package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
  548. package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
  549. package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
  550. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
  551. package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
  552. package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
  553. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
  554. package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
  555. package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
  556. package/docs/decisions/ADR-016-installer-architecture.md +0 -191
  557. package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
  558. package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
  559. package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
  560. package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
  561. package/docs/decisions/ADR-021-deployment-shape.md +0 -153
  562. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
  563. package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
  564. package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
  565. package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
  566. package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
  567. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
  568. package/docs/decisions/ADR-028-root-layout.md +0 -147
  569. package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
  570. package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
  571. package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
  572. package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
  573. package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
  574. package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
  575. package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
  576. package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
  577. package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
  578. package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
  579. package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
  580. package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
  581. package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
  582. package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
  583. package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
  584. package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
  585. package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
  586. package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
  587. package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
  588. package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
  589. package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
  590. package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
  591. package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
  592. package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
  593. package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
  594. package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
  595. package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
  596. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
  597. package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
  598. package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
  599. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
  600. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
  601. package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
  602. package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
  603. package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
  604. package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
  605. package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
  606. package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
  607. package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
  608. package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
  609. package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
  610. package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
  611. package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
  612. package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
  613. package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
  614. package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
  615. package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
  616. package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
  617. package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
  618. package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
  619. package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
  620. package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
  621. package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
  622. package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
  623. package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
  624. package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
  625. package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
  626. package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
  627. package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
  628. package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
  629. package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
  630. package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
  631. package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
  632. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
  633. package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
  634. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
  635. package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
  636. package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
  637. package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
  638. package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
  639. package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
  640. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
  641. package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
  642. package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
  643. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
  644. package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
  645. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
  646. package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
  647. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
  648. package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
  649. package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -248
  650. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -112
  651. package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
  652. package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
  653. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -209
  654. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
  655. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
  656. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
  657. package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
  658. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
  659. package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
  660. package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
  661. package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
  662. package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
  663. package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
  664. package/docs/decisions/ADR-124-embedded-engine-doctrine.md +0 -255
  665. package/docs/decisions/ADR-125-doc-screenshot-anonymization.md +0 -131
  666. package/docs/decisions/ADR-126-internet-reach-operator-tooling.md +0 -254
  667. package/docs/decisions/ADR-127-enforcement-claims-must-resolve.md +0 -150
  668. package/docs/decisions/ADR-128-executable-evidence-and-measured-escalation.md +0 -201
  669. package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
  670. package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
  671. package/docs/decisions/INDEX.md +0 -157
  672. package/docs/decisions/engine-reclassification-2026-07.md +0 -104
  673. package/docs/deploy/connector-setup.md +0 -129
  674. package/docs/deploy/env-vars.md +0 -70
  675. package/docs/deploy/policy-cookbook.md +0 -130
  676. package/docs/deploy/quickstart.md +0 -112
  677. package/docs/deploy/small-team-recipe.md +0 -148
  678. package/docs/deploy/team-deployment-posture.md +0 -111
  679. package/docs/design/adversarial-council-eval.md +0 -106
  680. package/docs/design/council-vs-solo-baseline.md +0 -92
  681. package/docs/design/cross-model-parity-eval.md +0 -82
  682. package/docs/design/length-neutral-judge-rerun.md +0 -92
  683. package/docs/design/utilization-window-criteria.md +0 -51
  684. package/docs/development.md +0 -230
  685. package/docs/distribution/awesome-list-submission.md +0 -46
  686. package/docs/distribution/consumer-matrix.md +0 -96
  687. package/docs/distribution/launch-story-draft.md +0 -58
  688. package/docs/distribution/mcp-submission-checklist.md +0 -95
  689. package/docs/distribution/public-install-smoke.md +0 -68
  690. package/docs/distribution/registries.md +0 -126
  691. package/docs/distribution/registry-submissions.md +0 -85
  692. package/docs/distribution/telemetry-privacy.md +0 -128
  693. package/docs/distribution/telemetry-schema.md +0 -174
  694. package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
  695. package/docs/end-to-end-walkthroughs.md +0 -165
  696. package/docs/enforcement-by-host.md +0 -51
  697. package/docs/examples/agent-user.example.md +0 -22
  698. package/docs/experiences/agency.md +0 -49
  699. package/docs/experiences/content_creator.md +0 -49
  700. package/docs/experiences/developer.md +0 -49
  701. package/docs/experiences/finance.md +0 -50
  702. package/docs/experiences/founder.md +0 -49
  703. package/docs/experiences/ops.md +0 -49
  704. package/docs/featured-commands.md +0 -27
  705. package/docs/featured-skills.md +0 -95
  706. package/docs/flows.md +0 -67
  707. package/docs/getting-started-by-role.md +0 -190
  708. package/docs/getting-started-laravel.md +0 -72
  709. package/docs/getting-started-local-stdio.md +0 -77
  710. package/docs/getting-started.md +0 -254
  711. package/docs/github-topics.md +0 -93
  712. package/docs/governance-advantage.md +0 -72
  713. package/docs/governance.md +0 -96
  714. package/docs/guides/cross-repo-linked-projects.md +0 -93
  715. package/docs/guides/cross-repo-retrieval.md +0 -61
  716. package/docs/guides/frontend-design-corpus-refresh.md +0 -83
  717. package/docs/guides/gated-platform-reads.md +0 -221
  718. package/docs/guides/local-analytics.md +0 -125
  719. package/docs/guides/local-knowledge.md +0 -127
  720. package/docs/guides/skill-discovery.md +0 -71
  721. package/docs/guides/skill-preview.md +0 -71
  722. package/docs/hook-payload-capture.md +0 -221
  723. package/docs/install-friction-report.md +0 -66
  724. package/docs/installation.md +0 -959
  725. package/docs/maintainers/branch-protection.md +0 -105
  726. package/docs/maintainers/dev-mode.md +0 -106
  727. package/docs/maintainers/optional-media-deps.md +0 -50
  728. package/docs/maintainers/system-map.md +0 -85
  729. package/docs/mcp-registries.md +0 -94
  730. package/docs/mcp-server.md +0 -175
  731. package/docs/mcp.md +0 -147
  732. package/docs/media/proof-demo.cast +0 -14
  733. package/docs/media/proof-demo.gif +0 -0
  734. package/docs/migration/consumer-template-consumption-model.md +0 -145
  735. package/docs/migration/divergences/README.md +0 -55
  736. package/docs/migration/divergences/_template.md +0 -50
  737. package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
  738. package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
  739. package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
  740. package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
  741. package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
  742. package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
  743. package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
  744. package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
  745. package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
  746. package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
  747. package/docs/migration/node-floor.md +0 -86
  748. package/docs/migration/v1-to-v2.md +0 -156
  749. package/docs/migration/yaml-roundtrip-spike.md +0 -163
  750. package/docs/migrations/commands-1.15.0.md +0 -117
  751. package/docs/parity/bench-external.json +0 -58
  752. package/docs/parity/bench.json +0 -41
  753. package/docs/parity/command-frontmatter.md +0 -60
  754. package/docs/parity/external-runtime.md +0 -46
  755. package/docs/personas.md +0 -178
  756. package/docs/positioning-evidence.md +0 -86
  757. package/docs/profiles.md +0 -108
  758. package/docs/proof.md +0 -252
  759. package/docs/quality.md +0 -98
  760. package/docs/readme-split-plan.md +0 -102
  761. package/docs/recruits/_template.md +0 -81
  762. package/docs/release-runbook.md +0 -141
  763. package/docs/role-experiences.md +0 -19
  764. package/docs/safety.md +0 -30
  765. package/docs/second-brain-scope.md +0 -116
  766. package/docs/self-review-gate.md +0 -65
  767. package/docs/setup/enterprise-and-offline.md +0 -201
  768. package/docs/setup/mcp-client-config.md +0 -358
  769. package/docs/setup/mcp-cloud-endpoints.md +0 -116
  770. package/docs/setup/mcp-cloud-registry-listing.md +0 -99
  771. package/docs/setup/mcp-cloud-setup.md +0 -183
  772. package/docs/setup/mcp-r2-bootstrap.md +0 -82
  773. package/docs/setup/mcp-server-docker.md +0 -101
  774. package/docs/setup/per-ide/aider.md +0 -48
  775. package/docs/setup/per-ide/antigravity.md +0 -68
  776. package/docs/setup/per-ide/augment.md +0 -89
  777. package/docs/setup/per-ide/claude-code.md +0 -97
  778. package/docs/setup/per-ide/claude-desktop.md +0 -207
  779. package/docs/setup/per-ide/cline.md +0 -43
  780. package/docs/setup/per-ide/codebuddy.md +0 -63
  781. package/docs/setup/per-ide/codex.md +0 -46
  782. package/docs/setup/per-ide/continue.md +0 -68
  783. package/docs/setup/per-ide/copilot.md +0 -80
  784. package/docs/setup/per-ide/cursor.md +0 -125
  785. package/docs/setup/per-ide/droid.md +0 -65
  786. package/docs/setup/per-ide/gemini-cli.md +0 -45
  787. package/docs/setup/per-ide/jetbrains.md +0 -76
  788. package/docs/setup/per-ide/kilocode.md +0 -66
  789. package/docs/setup/per-ide/kiro.md +0 -72
  790. package/docs/setup/per-ide/opencode.md +0 -62
  791. package/docs/setup/per-ide/qoder.md +0 -63
  792. package/docs/setup/per-ide/roocode.md +0 -68
  793. package/docs/setup/per-ide/trae.md +0 -63
  794. package/docs/setup/per-ide/warp.md +0 -63
  795. package/docs/setup/per-ide/windsurf.md +0 -109
  796. package/docs/setup/per-ide/zed.md +0 -73
  797. package/docs/showcase.md +0 -209
  798. package/docs/skill-duplication-findings.md +0 -91
  799. package/docs/skills-catalog.md +0 -265
  800. package/docs/skills-taxonomy.md +0 -90
  801. package/docs/spawn-site-policy.md +0 -72
  802. package/docs/succession.md +0 -80
  803. package/docs/threat-model.md +0 -30
  804. package/docs/troubleshooting.md +0 -155
  805. package/docs/ui-track-mental-model.md +0 -121
  806. package/docs/us-vs-the-category.md +0 -38
  807. package/docs/value.md +0 -86
  808. package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
  809. package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
  810. package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
  811. package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
  812. package/docs/walkthroughs/daily-workspace.md +0 -127
  813. package/docs/wedge/production-validator/README.md +0 -81
  814. package/docs/wedge/production-validator/first-run-check.sh +0 -42
  815. package/docs/wedge/production-validator/production-validator.md +0 -83
  816. package/docs/wizard.md +0 -173
  817. package/src/scripts/postinstall_gui.ts +0 -129
@@ -4,26 +4,73 @@
4
4
  *
5
5
  * build [--root P] [--out P] [--force] (re)build the deterministic graph
6
6
  * validate [--graph P] schema-gate a graph.json
7
+ * detect [--root P] [--format json] three-state freshness verdict
8
+ * refresh [--root P] [--out P] [--budget-seconds N]
9
+ * build --update (STALE) / no-op
10
+ * (FRESH) / full build (ABSENT)
7
11
  *
8
- * Query subcommands (query/path/explain/affected/detect) are added by the
9
- * Phase-3 query tier. Deterministic, LLM-free, no network. Exit codes:
10
- * 0 ok · 1 not-found / validation-failed · 2 usage · 3 internal.
12
+ * `detect --format json` (Phase 2, road-to-reachable-code-memory) emits a
13
+ * single-line, stable-key-order JSON verdict on stdout — no timestamps, safe
14
+ * to diff or pipe to `jq`:
15
+ *
16
+ * { "verdict": "ABSENT" | "STALE" | "FRESH",
17
+ * "behind_commits": <n> | null,
18
+ * "source": { "kind": "consumer" | "scip" | "native", "path": "…" } | null,
19
+ * "sources": [ { "kind": …, "path": "…", "present": true, … }, … ] }
20
+ *
21
+ * `refresh` never blocks on a hung build: it spawns the actual `build` in a
22
+ * CHILD process against a temp `--out` path, under a hard wall-clock
23
+ * `--budget-seconds` (default 60, via SIGKILL). The real cache at `--out` is
24
+ * only ever touched by a same-directory atomic rename of that child's
25
+ * completed temp output — on budget-exceeded, build failure, or the child
26
+ * never producing output, the rename never happens and the OLD cache is left
27
+ * byte-for-byte untouched. The cache itself (default
28
+ * `agents/runtime/state/code-graph-v1.json`) is local-only and disposable —
29
+ * gitignored, rebuildable from source at any time; never a source of truth.
30
+ *
31
+ * Query subcommands (query/path/explain/affected) are added by the Phase-3
32
+ * query tier. Deterministic, LLM-free, no network. Exit codes:
33
+ * 0 ok · 1 not-found / validation-failed / refresh-budget-exceeded ·
34
+ * 2 usage · 3 internal.
35
+ *
36
+ * suggest-verb "<question>" (Phase 9 D3) print the verb
37
+ * (query/affected/path/explain)
38
+ * a regex table thinks best
39
+ * answers a free-text structure
40
+ * question — a standalone hint,
41
+ * never auto-run against a
42
+ * graph.
11
43
  */
12
- import { execFileSync } from 'node:child_process';
44
+ import { execFileSync, spawnSync } from 'node:child_process';
45
+ import { randomBytes } from 'node:crypto';
13
46
  import * as fs from 'node:fs';
14
47
  import * as path from 'node:path';
15
48
  import process from 'node:process';
16
49
  import { fileURLToPath } from 'node:url';
17
50
 
18
51
  import { hardenedSpawnEnv } from '../_lib/spawn_env.js';
19
- import { buildFromRepo } from './build.js';
20
- import { detectSources, pickSource } from './detect.js';
21
- import { affected, explain, loadGraph, type LoadedGraph, path as graphPath, query, type QueryResult } from './query.js';
52
+ import { buildFromRepo, sidecarPath } from './build.js';
53
+ import { computeVerdict, detectSources, pickSource } from './detect.js';
54
+ import { suggestVerb } from './intent.js';
55
+ import {
56
+ affected,
57
+ explain,
58
+ loadGraph,
59
+ type LoadedGraph,
60
+ mergeRecommendedReads,
61
+ path as graphPath,
62
+ query,
63
+ type QueryResult,
64
+ } from './query.js';
22
65
  import { validateGraph } from './validate.js';
23
66
 
24
67
  const _HERE = fileURLToPath(import.meta.url);
25
68
  export const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..', '..');
26
69
  export const DEFAULT_CACHE = path.join(REPO_ROOT, 'agents', 'runtime', 'state', 'code-graph-v1.json');
70
+ /** Local `tsx` binary — `refresh` spawns `build` as a child of THIS file
71
+ * through it, so a budget-exceeded kill only ever terminates the child. */
72
+ const TSX_BIN = path.join(REPO_ROOT, 'node_modules', '.bin', process.platform === 'win32' ? 'tsx.cmd' : 'tsx');
73
+ const DEFAULT_BUDGET_SECONDS = 60;
27
74
 
28
75
  function flag(argv: string[], name: string): string | null {
29
76
  const i = argv.indexOf(name);
@@ -93,6 +140,10 @@ function render(r: QueryResult, staleNote: string): number {
93
140
  for (const l of r.lines) process.stdout.write(` ${l}\n`);
94
141
  if (r.truncated) process.stdout.write(' … (budget reached — narrow the seed or raise --budget)\n');
95
142
  if (!r.lines.length) process.stdout.write(' (no matching relations)\n');
143
+ if (r.recommended_reads.length) {
144
+ process.stdout.write('recommended reads (dropped by the budget, or a low-confidence seed match):\n');
145
+ for (const rr of r.recommended_reads) process.stdout.write(` ${rr.path}${rr.lines ? `:${rr.lines[0]}-${rr.lines[1]}` : ''}\n`);
146
+ }
96
147
  return 0;
97
148
  }
98
149
 
@@ -130,12 +181,16 @@ function cmdQuery(kind: 'query' | 'explain' | 'affected' | 'path', argv: string[
130
181
  if (kind === 'affected' && flag(argv, '--since')) {
131
182
  const root = flag(argv, '--root') ?? REPO_ROOT;
132
183
  const seeds = changedNodeSeeds(r.g, root, flag(argv, '--since') as string);
133
- const merged: QueryResult = { source: r.g.source, seeds: [], lines: [], truncated: false };
184
+ const merged: QueryResult = { source: r.g.source, seeds: [], lines: [], truncated: false, recommended_reads: [] };
185
+ const perSeed: QueryResult[] = [];
134
186
  for (const s of seeds) {
135
187
  const one = affected(r.g, s, 2, budget);
136
188
  merged.seeds.push(...one.seeds);
137
189
  merged.lines.push(...one.lines);
190
+ merged.truncated = merged.truncated || one.truncated;
191
+ perSeed.push(one);
138
192
  }
193
+ merged.recommended_reads = mergeRecommendedReads(perSeed);
139
194
  return render(merged, r.note);
140
195
  }
141
196
  const a = positional[0];
@@ -162,6 +217,12 @@ function isFlagValue(argv: string[], token: string): boolean {
162
217
 
163
218
  function cmdDetect(argv: string[]): number {
164
219
  const root = flag(argv, '--root') ?? REPO_ROOT;
220
+ if (flag(argv, '--format') === 'json') {
221
+ // Machine-readable three-state verdict (Phase 2). Existing human-text
222
+ // output below is unchanged for existing consumers.
223
+ process.stdout.write(`${JSON.stringify(computeVerdict(root, DEFAULT_CACHE))}\n`);
224
+ return 0;
225
+ }
165
226
  const verdicts = detectSources(root, DEFAULT_CACHE);
166
227
  if (!verdicts.length) {
167
228
  process.stdout.write('no code-graph source detected\n');
@@ -176,16 +237,127 @@ function cmdDetect(argv: string[]): number {
176
237
  return 0;
177
238
  }
178
239
 
240
+ function budgetSecondsOf(argv: string[]): number {
241
+ const raw = flag(argv, '--budget-seconds');
242
+ if (raw === null) return DEFAULT_BUDGET_SECONDS;
243
+ const n = Number(raw);
244
+ return Number.isFinite(n) ? n : DEFAULT_BUDGET_SECONDS;
245
+ }
246
+
247
+ /** Best-effort removal of a temp build output + its sidecar. Never throws —
248
+ * cleanup failure must not mask the real result (budget-exceeded / error). */
249
+ function cleanupTemp(tmpOut: string): void {
250
+ for (const p of [tmpOut, sidecarPath(tmpOut)]) {
251
+ try {
252
+ fs.unlinkSync(p);
253
+ } catch {
254
+ /* already absent, or never materialised — fine */
255
+ }
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Run `build` (optionally `--update`) as a CHILD process against a temp
261
+ * `--out` path, under a hard wall-clock budget. Only on a clean, in-budget
262
+ * exit does the temp output get promoted into `out` — via a same-directory
263
+ * `renameSync`, atomic at the OS level, exactly the technique `write_atomic`
264
+ * itself uses. Any other outcome (timeout, non-zero exit, missing output)
265
+ * cleans up the temp files and leaves `out` untouched.
266
+ */
267
+ function runBudgetedBuild(root: string, out: string, update: boolean, budgetSeconds: number): number {
268
+ if (!(budgetSeconds > 0)) {
269
+ // Node's own `timeout` option treats 0 as "no limit" — a genuinely
270
+ // zero-or-negative budget is an immediate, deterministic abort
271
+ // instead of silently becoming unlimited.
272
+ process.stderr.write(`code-graph: refresh budget exceeded (${budgetSeconds}s) — old cache kept\n`);
273
+ return 1;
274
+ }
275
+ const dir = path.dirname(out);
276
+ const tmpOut = path.join(dir, `.${path.basename(out)}.refresh-tmp-${process.pid}-${randomBytes(4).toString('hex')}.json`);
277
+ if (update) {
278
+ const realSidecar = sidecarPath(out);
279
+ if (fs.existsSync(realSidecar)) {
280
+ try {
281
+ fs.copyFileSync(realSidecar, sidecarPath(tmpOut));
282
+ } catch {
283
+ /* fall back to a full re-extraction inside the child */
284
+ }
285
+ }
286
+ }
287
+ const args = ['build', '--root', root, '--out', tmpOut, ...(update ? ['--update'] : [])];
288
+ const res = spawnSync(TSX_BIN, [_HERE, ...args], {
289
+ env: hardenedSpawnEnv(),
290
+ stdio: 'ignore',
291
+ timeout: Math.round(budgetSeconds * 1000),
292
+ killSignal: 'SIGKILL',
293
+ });
294
+ const timedOut = res.signal !== null || (res.error !== undefined && (res.error as NodeJS.ErrnoException).code === 'ETIMEDOUT');
295
+ if (timedOut) {
296
+ cleanupTemp(tmpOut);
297
+ process.stderr.write(`code-graph: refresh budget exceeded (${budgetSeconds}s) — old cache kept\n`);
298
+ return 1;
299
+ }
300
+ if (res.status !== 0) {
301
+ cleanupTemp(tmpOut);
302
+ const detail = res.error ? `: ${res.error.message}` : res.status !== null ? ` (exit ${res.status})` : '';
303
+ process.stderr.write(`code-graph: refresh build failed${detail} — old cache kept\n`);
304
+ return 1;
305
+ }
306
+ if (!fs.existsSync(tmpOut)) {
307
+ cleanupTemp(tmpOut);
308
+ process.stderr.write('code-graph: refresh produced no output — old cache kept\n');
309
+ return 3;
310
+ }
311
+ fs.renameSync(tmpOut, out); // same-dir → atomic; real cache only ever changes here
312
+ const tmpSidecar = sidecarPath(tmpOut);
313
+ if (fs.existsSync(tmpSidecar)) fs.renameSync(tmpSidecar, sidecarPath(out));
314
+ process.stdout.write(`✅ code-graph refreshed — cache: ${path.relative(REPO_ROOT, out)}\n`);
315
+ return 0;
316
+ }
317
+
318
+ function cmdRefresh(argv: string[]): number {
319
+ const root = flag(argv, '--root') ?? REPO_ROOT;
320
+ const out = flag(argv, '--out') ?? DEFAULT_CACHE;
321
+ const budgetSeconds = budgetSecondsOf(argv);
322
+ if (!fs.existsSync(root)) {
323
+ process.stderr.write(`code-graph: root not found: ${root}\n`);
324
+ return 1;
325
+ }
326
+ const v = computeVerdict(root, out);
327
+ if (v.verdict === 'FRESH') {
328
+ process.stdout.write('fresh — nothing to do\n');
329
+ return 0;
330
+ }
331
+ return runBudgetedBuild(root, out, v.verdict === 'STALE', budgetSeconds);
332
+ }
333
+
334
+ /**
335
+ * `suggest-verb "<question>"` (Phase 9 D3) — print the `code_graph` verb a
336
+ * pure regex table thinks best answers a free-text structure question. A
337
+ * standalone hint only: never resolves a graph, never runs a query itself.
338
+ */
339
+ function cmdSuggestVerb(argv: string[]): number {
340
+ const question = argv.filter((a) => !a.startsWith('--')).join(' ').trim();
341
+ if (!question) {
342
+ process.stderr.write('usage: code_graph/cli.ts suggest-verb "<question>"\n');
343
+ return 2;
344
+ }
345
+ process.stdout.write(`${suggestVerb(question)}\n`);
346
+ return 0;
347
+ }
348
+
179
349
  export async function main(argv: string[] = process.argv.slice(2)): Promise<number> {
180
350
  const sub = argv[0];
181
351
  try {
182
352
  if (sub === 'build') return await cmdBuild(argv.slice(1));
183
353
  if (sub === 'validate') return cmdValidate(argv.slice(1));
184
354
  if (sub === 'detect') return cmdDetect(argv.slice(1));
355
+ if (sub === 'refresh') return cmdRefresh(argv.slice(1));
185
356
  if (sub === 'query' || sub === 'explain' || sub === 'affected' || sub === 'path')
186
357
  return cmdQuery(sub, argv.slice(1));
358
+ if (sub === 'suggest-verb') return cmdSuggestVerb(argv.slice(1));
187
359
  process.stderr.write(
188
- 'usage: code_graph/cli.ts <build|validate|detect|query|explain|affected|path> [options]\n',
360
+ 'usage: code_graph/cli.ts <build|validate|detect|refresh|query|explain|affected|path|suggest-verb> [options]\n',
189
361
  );
190
362
  return 2;
191
363
  } catch (e) {
@@ -132,3 +132,55 @@ export function pickSource(verdicts: SourceVerdict[]): SourceVerdict | null {
132
132
  if (native) return native;
133
133
  return verdicts.find((v) => v.kind === 'consumer') ?? null;
134
134
  }
135
+
136
+ /** A single detected source, JSON-shaped (only defined fields are emitted —
137
+ * key order fixed by construction so `JSON.stringify` output is stable). */
138
+ export interface DetectedSourceJSON {
139
+ kind: SourceKind;
140
+ path: string;
141
+ present: boolean;
142
+ stale?: boolean;
143
+ commits_behind?: number;
144
+ note?: string;
145
+ }
146
+
147
+ /** The `code-graph detect --format json` verdict shape (Phase 2). Deterministic:
148
+ * fixed key order, no timestamps, paths relative to `root`. */
149
+ export interface VerdictJSON {
150
+ verdict: 'ABSENT' | 'STALE' | 'FRESH';
151
+ /** commits behind, when known from the picked source; else null. */
152
+ behind_commits: number | null;
153
+ /** the source `refresh`/queries would use, or null when ABSENT. */
154
+ source: { kind: SourceKind; path: string } | null;
155
+ /** every detected source (for diagnostics), not just the picked one. */
156
+ sources: DetectedSourceJSON[];
157
+ }
158
+
159
+ /**
160
+ * Three-state freshness verdict for `root`, reusing `detectSources` +
161
+ * `pickSource` (no duplicated precedence logic). ABSENT = no usable source
162
+ * (a bare `scip` presence or nothing at all); STALE = the picked source is
163
+ * stale; FRESH = picked source is fresh, or freshness is unknown (mirrors the
164
+ * nudge hook's `picked.stale ? STALE : FRESH` reading — unknown is not
165
+ * treated as stale).
166
+ */
167
+ export function computeVerdict(root: string, nativeCache: string): VerdictJSON {
168
+ const abs = path.resolve(root);
169
+ const verdicts = detectSources(root, nativeCache);
170
+ const picked = pickSource(verdicts);
171
+ const rel = (p: string): string => path.relative(abs, p).split(path.sep).join('/');
172
+ const verdict: VerdictJSON['verdict'] = picked === null ? 'ABSENT' : picked.stale ? 'STALE' : 'FRESH';
173
+ const sources: DetectedSourceJSON[] = verdicts.map((v) => {
174
+ const s: DetectedSourceJSON = { kind: v.kind, path: rel(v.path), present: v.present };
175
+ if (v.stale !== undefined) s.stale = v.stale;
176
+ if (v.commits_behind !== undefined) s.commits_behind = v.commits_behind;
177
+ if (v.note !== undefined) s.note = v.note;
178
+ return s;
179
+ });
180
+ return {
181
+ verdict,
182
+ behind_commits: picked?.commits_behind ?? null,
183
+ source: picked ? { kind: picked.kind, path: rel(picked.path) } : null,
184
+ sources,
185
+ };
186
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Intent-conditioned verb selection (Phase 9 D3, road-to-reachable-code-memory)
3
+ * — a PURE regex table, no model call. `suggestVerb` maps a natural-language
4
+ * structure question to the `code_graph` subcommand most likely to answer it:
5
+ *
6
+ * affected — "who calls / uses / references this", "what would break",
7
+ * "blast radius" — a reverse (who-depends-on-it) lookup.
8
+ * path — "how does X reach/connect to Y", "is A reachable from B",
9
+ * "trace the route between A and B" — connectivity between
10
+ * two named seeds.
11
+ * explain — "overview", "what's around X", "the neighbourhood of X",
12
+ * "walk me through X" — a broader 2-hop neighbourhood, not a
13
+ * single direct-relations answer.
14
+ * query — the default: a seed's own direct (1-hop) relations.
15
+ *
16
+ * Order matters — first pattern class to match wins: affected → path →
17
+ * explain → query. Ship gate (pre-registered in
18
+ * `tests/fixtures/code-graph-intent/queries.json`, written BEFORE this file):
19
+ * `suggestVerb` must beat the always-`query` baseline's correct-verb rate
20
+ * over that 30-query set, or this module stays unwired (evidence only, per
21
+ * the D3 evidence note in `agents/evidence/reports/`).
22
+ */
23
+
24
+ export type Verb = 'query' | 'affected' | 'path' | 'explain';
25
+
26
+ const AFFECTED_RE =
27
+ /\b(who\s+(calls?|uses?|else|references?)|where\s+(is|are|'s)?\s*.*\bused\b|impact(s|ed|ing)?|blast\s+radius|break(s|ing)?|would\s+break|caller(s)?|referenc(e|es|ed|ing)|touch(es|ed)?)\b/i;
28
+
29
+ const PATH_RE =
30
+ /\b(reach(able|es|ing)?|connect(s|ed|ion|ing)?|\btrace\b|\broute\b|\bpath\b|shortest)\b/i;
31
+
32
+ const EXPLAIN_RE =
33
+ /\b(overview|explain(s|ed|ing)?|\baround\b|surround(ing|s)?|\bcontext\b|big\s+picture|neighbo[u]?rhood|walk\s+me\s+through|summar(y|ize|ise))\b/i;
34
+
35
+ /**
36
+ * Suggest the `code_graph` verb a free-text structure question most likely
37
+ * needs. Deterministic, side-effect-free, no network, no model call.
38
+ */
39
+ export function suggestVerb(question: string): Verb {
40
+ const q = question.trim();
41
+ if (AFFECTED_RE.test(q)) return 'affected';
42
+ if (PATH_RE.test(q)) return 'path';
43
+ if (EXPLAIN_RE.test(q)) return 'explain';
44
+ return 'query';
45
+ }
@@ -9,6 +9,7 @@ import * as fs from 'node:fs';
9
9
 
10
10
  import { LexicalIndex, tokenize } from '../_lib/lexical_index.js';
11
11
  import { sanitizeLabel } from './sanitize.js';
12
+ import { emitSqliteTwin, loadSerializedFromTwin } from './sqlite_store.js';
12
13
  import type { CodeEdge, CodeGraph } from './types.js';
13
14
  import { validateGraph } from './validate.js';
14
15
 
@@ -24,10 +25,19 @@ export interface LoadedGraph {
24
25
  }
25
26
 
26
27
  export function loadGraph(graphPath: string, source = graphPath): LoadedGraph {
27
- const parsed = JSON.parse(fs.readFileSync(graphPath, 'utf-8')) as unknown;
28
+ // Prefer the derived SQLite twin (ADR-129): checksum/stat-verified against
29
+ // the canonical JSON, byte-identical content, ~1/90 the load cost at
30
+ // consumer scale. Fallback = parse the JSON — and best-effort re-emit the
31
+ // twin from it (zero-touch rebuild-on-drift, Phase 7).
32
+ const fromTwin = loadSerializedFromTwin(graphPath);
33
+ const raw = fromTwin ?? fs.readFileSync(graphPath, 'utf-8');
34
+ const parsed = JSON.parse(raw) as unknown;
28
35
  const v = validateGraph(parsed);
29
36
  if (!v.ok) throw new Error(`invalid graph at ${graphPath}: ${v.errors.slice(0, 3).join('; ')}`);
30
37
  const graph = parsed as CodeGraph;
38
+ if (fromTwin === null) {
39
+ emitSqliteTwin(graph, raw, graphPath);
40
+ }
31
41
  const byId = new Map(graph.nodes.map((n) => [n.id, n]));
32
42
  const outM = new Map<string, CodeEdge[]>();
33
43
  const inM = new Map<string, CodeEdge[]>();
@@ -44,13 +54,25 @@ export function loadGraph(graphPath: string, source = graphPath): LoadedGraph {
44
54
  return { graph, source, byId, out: outM, in: inM, lex };
45
55
  }
46
56
 
57
+ interface SeedResolution {
58
+ ids: string[];
59
+ /** true when NEITHER an exact-id nor an exact-label match was found and
60
+ * resolution fell back to BM25 — a best-guess, not a confirmed hit. */
61
+ weak: boolean;
62
+ }
63
+
47
64
  /** Resolve a free-text seed to node ids: exact id → exact label → BM25. */
48
- export function resolveSeeds(g: LoadedGraph, seed: string, limit = 5): string[] {
49
- if (g.byId.has(seed)) return [seed];
65
+ function resolveSeedsTiered(g: LoadedGraph, seed: string, limit = 5): SeedResolution {
66
+ if (g.byId.has(seed)) return { ids: [seed], weak: false };
50
67
  const exactLabel = g.graph.nodes.filter((n) => n.label === seed).map((n) => n.id);
51
- if (exactLabel.length) return exactLabel.slice(0, limit);
68
+ if (exactLabel.length) return { ids: exactLabel.slice(0, limit), weak: false };
52
69
  const ranked = g.lex.rank(tokenize(seed)).filter((r) => r.score > 0);
53
- return ranked.slice(0, limit).map((r) => r.id);
70
+ return { ids: ranked.slice(0, limit).map((r) => r.id), weak: true };
71
+ }
72
+
73
+ /** Resolve a free-text seed to node ids: exact id → exact label → BM25. */
74
+ export function resolveSeeds(g: LoadedGraph, seed: string, limit = 5): string[] {
75
+ return resolveSeedsTiered(g, seed, limit).ids;
54
76
  }
55
77
 
56
78
  function label(g: LoadedGraph, id: string): string {
@@ -61,42 +83,109 @@ function edgeLine(g: LoadedGraph, e: CodeEdge): string {
61
83
  return `${e.confidence} ${sanitizeLabel(e.source)} --${e.relation}--> ${sanitizeLabel(e.target)}${cand}`;
62
84
  }
63
85
 
86
+ /**
87
+ * A file + (when known) a 1-based inclusive line range worth reading directly
88
+ * — surfaced whenever the engine dropped or under-trusted something instead
89
+ * of silently truncating it (Phase 9 D4: "a read plan instead of silent
90
+ * truncation").
91
+ */
92
+ export interface RecommendedRead {
93
+ path: string;
94
+ lines: [number, number] | null;
95
+ }
96
+
64
97
  export interface QueryResult {
65
98
  source: string;
66
99
  seeds: string[];
67
100
  lines: string[];
68
101
  truncated: boolean;
102
+ recommended_reads: RecommendedRead[];
103
+ }
104
+
105
+ function readKey(r: RecommendedRead): string {
106
+ return r.lines ? `${r.path}:${r.lines[0]}-${r.lines[1]}` : r.path;
69
107
  }
70
108
 
71
- function budgetedLines(source: string, seeds: string[], lines: string[], budget: number): QueryResult {
109
+ /** A node's file + line range, or `null` for an unresolved `symbol:*`
110
+ * placeholder (nothing real to read) or a node with no location info. */
111
+ function recommendedReadFor(g: LoadedGraph, id: string): RecommendedRead | null {
112
+ const n = g.byId.get(id);
113
+ if (!n) return null;
114
+ const loc = n.source_location;
115
+ return { path: n.source_file, lines: loc.length >= 3 ? [loc[0] as number, loc[2] as number] : null };
116
+ }
117
+
118
+ /** One relation line plus the node id (if any) a reader should go inspect
119
+ * directly when this line gets dropped by the budget. */
120
+ interface LineEntry {
121
+ text: string;
122
+ focusId?: string;
123
+ }
124
+
125
+ /**
126
+ * Apply the token budget to `entries`, then translate BOTH failure classes
127
+ * this delta targets into a deterministic `recommended_reads` list: every
128
+ * entry the budget dropped, plus every read the caller already flagged as
129
+ * weak (an under-threshold/BM25-fallback seed match) — deduped by
130
+ * path+line-range, insertion-ordered for determinism.
131
+ */
132
+ function budgetedLines(
133
+ g: LoadedGraph,
134
+ source: string,
135
+ seeds: string[],
136
+ entries: LineEntry[],
137
+ budget: number,
138
+ weakSeedReads: RecommendedRead[] = [],
139
+ ): QueryResult {
72
140
  const cap = budget * APPROX_CHARS_PER_TOKEN;
73
141
  const kept: string[] = [];
142
+ const dropped: LineEntry[] = [];
74
143
  let used = 0;
75
144
  let truncated = false;
76
- for (const l of lines) {
77
- if (used + l.length > cap) {
145
+ for (const entry of entries) {
146
+ if (!truncated && used + entry.text.length <= cap) {
147
+ kept.push(entry.text);
148
+ used += entry.text.length + 1;
149
+ } else {
78
150
  truncated = true;
79
- break;
151
+ dropped.push(entry);
80
152
  }
81
- kept.push(l);
82
- used += l.length + 1;
83
153
  }
84
- return { source, seeds, lines: kept, truncated };
154
+ const recommended = new Map<string, RecommendedRead>();
155
+ for (const r of weakSeedReads) recommended.set(readKey(r), r);
156
+ for (const entry of dropped) {
157
+ if (!entry.focusId) continue;
158
+ const r = recommendedReadFor(g, entry.focusId);
159
+ if (r) recommended.set(readKey(r), r);
160
+ }
161
+ return { source, seeds, lines: kept, truncated, recommended_reads: [...recommended.values()] };
162
+ }
163
+
164
+ function weakSeedReads(g: LoadedGraph, resolution: SeedResolution): RecommendedRead[] {
165
+ if (!resolution.weak) return [];
166
+ const out: RecommendedRead[] = [];
167
+ for (const id of resolution.ids) {
168
+ const r = recommendedReadFor(g, id);
169
+ if (r) out.push(r);
170
+ }
171
+ return out;
85
172
  }
86
173
 
87
174
  /** `query <seed>` — the seed's direct (1-hop) outgoing relations. */
88
175
  export function query(g: LoadedGraph, seed: string, budget = 1500): QueryResult {
89
- const seeds = resolveSeeds(g, seed);
90
- const lines: string[] = [];
91
- for (const s of seeds) for (const e of g.out.get(s) ?? []) lines.push(edgeLine(g, e));
92
- return budgetedLines(g.source, seeds.map((s) => label(g, s)), lines, budget);
176
+ const resolution = resolveSeedsTiered(g, seed);
177
+ const seeds = resolution.ids;
178
+ const entries: LineEntry[] = [];
179
+ for (const s of seeds) for (const e of g.out.get(s) ?? []) entries.push({ text: edgeLine(g, e), focusId: e.target });
180
+ return budgetedLines(g, g.source, seeds.map((s) => label(g, s)), entries, budget, weakSeedReads(g, resolution));
93
181
  }
94
182
 
95
183
  /** `explain <seed>` — 2-hop neighbourhood (out-edges of seeds + their targets). */
96
184
  export function explain(g: LoadedGraph, seed: string, budget = 1500): QueryResult {
97
- const seeds = resolveSeeds(g, seed);
185
+ const resolution = resolveSeedsTiered(g, seed);
186
+ const seeds = resolution.ids;
98
187
  const seen = new Set<string>();
99
- const lines: string[] = [];
188
+ const entries: LineEntry[] = [];
100
189
  const frontier = [...seeds];
101
190
  for (let hop = 0; hop < 2 && frontier.length; hop += 1) {
102
191
  const next: string[] = [];
@@ -104,26 +193,30 @@ export function explain(g: LoadedGraph, seed: string, budget = 1500): QueryResul
104
193
  if (seen.has(s)) continue;
105
194
  seen.add(s);
106
195
  for (const e of g.out.get(s) ?? []) {
107
- lines.push(edgeLine(g, e));
196
+ entries.push({ text: edgeLine(g, e), focusId: e.target });
108
197
  next.push(e.target);
109
198
  }
110
199
  }
111
200
  frontier.push(...next);
112
201
  }
113
- return budgetedLines(g.source, seeds.map((s) => label(g, s)), lines, budget);
202
+ return budgetedLines(g, g.source, seeds.map((s) => label(g, s)), entries, budget, weakSeedReads(g, resolution));
114
203
  }
115
204
 
116
205
  /** `affected <target>` — reverse BFS: who calls / references the target. */
117
206
  export function affected(g: LoadedGraph, target: string, depth = 2, budget = 1500): QueryResult {
118
- const seeds = resolveSeeds(g, target);
207
+ const resolution = resolveSeedsTiered(g, target);
208
+ const seeds = resolution.ids;
119
209
  const seen = new Set<string>(seeds);
120
- const lines: string[] = [];
210
+ const entries: LineEntry[] = [];
121
211
  let frontier = [...seeds];
122
212
  for (let d = 0; d < depth && frontier.length; d += 1) {
123
213
  const next: string[] = [];
124
214
  for (const t of frontier) {
125
215
  for (const e of g.in.get(t) ?? []) {
126
- lines.push(edgeLine(g, e));
216
+ // the newly-discovered node here is the CALLER (e.source) —
217
+ // e.target is already a known seed, so that side carries no
218
+ // new read-plan information.
219
+ entries.push({ text: edgeLine(g, e), focusId: e.source });
127
220
  if (!seen.has(e.source)) {
128
221
  seen.add(e.source);
129
222
  next.push(e.source);
@@ -132,14 +225,16 @@ export function affected(g: LoadedGraph, target: string, depth = 2, budget = 150
132
225
  }
133
226
  frontier = next;
134
227
  }
135
- return budgetedLines(g.source, seeds.map((s) => label(g, s)), lines, budget);
228
+ return budgetedLines(g, g.source, seeds.map((s) => label(g, s)), entries, budget, weakSeedReads(g, resolution));
136
229
  }
137
230
 
138
231
  /** `path <a> <b>` — shortest undirected path (direction preserved per edge). */
139
232
  export function path(g: LoadedGraph, a: string, b: string, budget = 1500): QueryResult {
140
- const starts = resolveSeeds(g, a, 1);
141
- const goals = new Set(resolveSeeds(g, b, 1));
142
- if (!starts.length || !goals.size) return { source: g.source, seeds: [], lines: [], truncated: false };
233
+ const startRes = resolveSeedsTiered(g, a, 1);
234
+ const goalRes = resolveSeedsTiered(g, b, 1);
235
+ const starts = startRes.ids;
236
+ const goals = new Set(goalRes.ids);
237
+ if (!starts.length || !goals.size) return { source: g.source, seeds: [], lines: [], truncated: false, recommended_reads: [] };
143
238
  const start = starts[0] as string;
144
239
  const prev = new Map<string, CodeEdge>();
145
240
  const seen = new Set<string>([start]);
@@ -164,7 +259,16 @@ export function path(g: LoadedGraph, a: string, b: string, budget = 1500): Query
164
259
  }
165
260
  frontier = next;
166
261
  }
167
- if (!hit) return { source: g.source, seeds: [label(g, start)], lines: ['(no path found)'], truncated: false };
262
+ const seedReads = [...weakSeedReads(g, startRes), ...weakSeedReads(g, goalRes)];
263
+ if (!hit) {
264
+ return {
265
+ source: g.source,
266
+ seeds: [label(g, start)],
267
+ lines: ['(no path found)'],
268
+ truncated: false,
269
+ recommended_reads: [...new Map(seedReads.map((r) => [readKey(r), r])).values()],
270
+ };
271
+ }
168
272
  const chain: CodeEdge[] = [];
169
273
  let cur = hit;
170
274
  while (prev.has(cur)) {
@@ -172,5 +276,15 @@ export function path(g: LoadedGraph, a: string, b: string, budget = 1500): Query
172
276
  chain.unshift(e);
173
277
  cur = e.source === cur ? e.target : e.source;
174
278
  }
175
- return budgetedLines(g.source, [label(g, start), label(g, hit)], chain.map((e) => edgeLine(g, e)), budget);
279
+ const entries = chain.map((e) => ({ text: edgeLine(g, e), focusId: e.target }));
280
+ return budgetedLines(g, g.source, [label(g, start), label(g, hit)], entries, budget, seedReads);
281
+ }
282
+
283
+ /** Merge several `QueryResult`s (e.g. one per `--since` seed) into one,
284
+ * de-duplicating `recommended_reads` by path+line-range so a read plan never
285
+ * repeats the same file twice across merged seeds. */
286
+ export function mergeRecommendedReads(results: readonly QueryResult[]): RecommendedRead[] {
287
+ const merged = new Map<string, RecommendedRead>();
288
+ for (const r of results) for (const rr of r.recommended_reads) merged.set(readKey(rr), rr);
289
+ return [...merged.values()];
176
290
  }