@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
@@ -0,0 +1,576 @@
1
+ /**
2
+ * detect_index_parity — falsification spike S0.2 (static index parity).
3
+ *
4
+ * Part of the persistence-lint substrate defined by the roadmap
5
+ * `road-to-scale-and-history-discipline.md` (rule R-A2, failure class F2,
6
+ * tier `gate`, waiver kind `no-index`).
7
+ *
8
+ * Question the spike answers: can we statically join the query surface
9
+ * (WHERE / ORDER BY columns in Eloquent + Prisma client code) to the schema
10
+ * surface (Laravel migrations + schema.prisma) and check index presence?
11
+ *
12
+ * Classification per extracted column reference:
13
+ * - resolved + indexed -> ok (no output)
14
+ * - resolved + NOT indexed -> Finding F2/R-A2, unless a `no-index`
15
+ * waiver is on the line or the line above
16
+ * (waived findings are emitted with
17
+ * `waived: true` for auditability)
18
+ * - unresolvable (dynamic arg, raw SQL, unknown table/column)
19
+ * -> counted as unresolved, NEVER a Finding
20
+ *
21
+ * All functions are pure; the only I/O is the directory walk in `analyze`.
22
+ */
23
+
24
+ import { readFileSync, readdirSync, lstatSync } from 'node:fs';
25
+ import { join, relative } from 'node:path';
26
+ import { type Finding, parse_waiver, is_ignored_dir } from './types';
27
+
28
+ // ---------------------------------------------------------------------------
29
+ // Public result types
30
+ // ---------------------------------------------------------------------------
31
+
32
+ export interface TableSchema {
33
+ columns: Set<string>;
34
+ indexed: Set<string>;
35
+ /** Composite index column lists, in declared order (leftmost first). */
36
+ composites: string[][];
37
+ }
38
+
39
+ /** table (Laravel) or model name (Prisma) -> schema */
40
+ export type SchemaMap = Map<string, TableSchema>;
41
+
42
+ export interface ColumnRef {
43
+ file: string; // relative to the analyzed dir
44
+ line: number; // 1-indexed
45
+ table: string | null; // null when the owning table/model is unknown
46
+ column: string | null; // null when the column is dynamic / raw SQL
47
+ kind: 'where' | 'orderBy';
48
+ note?: string; // 'dynamic-arg' | 'raw-sql' | 'unknown-table' | 'unknown-column'
49
+ }
50
+
51
+ export interface IndexParityResult {
52
+ findings: Finding[];
53
+ /** WHERE columns resolved to a schema column. */
54
+ resolved: number;
55
+ /** WHERE columns that could not be resolved (dynamic, raw, unknown). */
56
+ unresolved: number;
57
+ /** resolved / (resolved + unresolved); 1 when there are no WHERE columns. */
58
+ resolution_rate: number;
59
+ /** Every extracted reference (where + orderBy), for auditing. */
60
+ refs: ColumnRef[];
61
+ }
62
+
63
+ // ---------------------------------------------------------------------------
64
+ // Small helpers
65
+ // ---------------------------------------------------------------------------
66
+
67
+ function line_of(text: string, offset: number): number {
68
+ let line = 1;
69
+ for (let i = 0; i < offset && i < text.length; i++) {
70
+ if (text[i] === '\n') line++;
71
+ }
72
+ return line;
73
+ }
74
+
75
+ /** Extract the balanced-delimiter span starting at `open` (index of the opener). */
76
+ function balanced_span(text: string, open: number, opener: string, closer: string): string {
77
+ let depth = 0;
78
+ for (let i = open; i < text.length; i++) {
79
+ const c = text[i];
80
+ if (c === opener) depth++;
81
+ else if (c === closer) {
82
+ depth--;
83
+ if (depth === 0) return text.slice(open, i + 1);
84
+ }
85
+ }
86
+ return text.slice(open); // unbalanced — return the rest; callers stay tolerant
87
+ }
88
+
89
+ function snake_case(name: string): string {
90
+ return name.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();
91
+ }
92
+
93
+ /** Naive pluralization matching Laravel's common cases (User -> users). */
94
+ function pluralize(word: string): string {
95
+ if (/[^aeiou]y$/.test(word)) return `${word.slice(0, -1)}ies`;
96
+ if (/(s|x|z|ch|sh)$/.test(word)) return `${word}es`;
97
+ return `${word}s`;
98
+ }
99
+
100
+ function model_to_table(model: string): string {
101
+ return pluralize(snake_case(model));
102
+ }
103
+
104
+ function ensure_table(schema: SchemaMap, table: string): TableSchema {
105
+ let t = schema.get(table);
106
+ if (!t) {
107
+ t = { columns: new Set(), indexed: new Set(), composites: [] };
108
+ schema.set(table, t);
109
+ }
110
+ return t;
111
+ }
112
+
113
+ // ---------------------------------------------------------------------------
114
+ // Schema parsing — Laravel migrations
115
+ // ---------------------------------------------------------------------------
116
+
117
+ const LARAVEL_COLUMN_TYPES = [
118
+ 'string', 'text', 'mediumText', 'longText', 'char', 'enum', 'uuid', 'ulid',
119
+ 'integer', 'bigInteger', 'unsignedInteger', 'unsignedBigInteger', 'tinyInteger',
120
+ 'smallInteger', 'decimal', 'float', 'double', 'boolean', 'json', 'jsonb',
121
+ 'date', 'dateTime', 'dateTimeTz', 'timestamp', 'timestampTz', 'time', 'year',
122
+ 'ipAddress', 'macAddress', 'binary',
123
+ ];
124
+
125
+ export function parse_laravel_migrations(text: string, schema: SchemaMap): void {
126
+ // Matches Schema::create / Schema::table and the Schema::connection(...)
127
+ // variants — ALTER migrations add indexes too (real-world FP source).
128
+ const create_re = /Schema::(?:connection\([^)]*\)\s*->\s*)?(?:create|table)\(\s*['"](\w+)['"]/g;
129
+ let m: RegExpExecArray | null;
130
+ while ((m = create_re.exec(text)) !== null) {
131
+ const table = ensure_table(schema, m[1]!);
132
+ const paren = m.index + m[0].lastIndexOf('(');
133
+ const body = balanced_span(text, paren, '(', ')');
134
+
135
+ // $table->id() / ->bigIncrements('id') / ->increments(...) — primary, indexed.
136
+ for (const im of body.matchAll(/\$table->(?:id|(?:big|small|medium|tiny)?[iI]ncrements)\(\s*(?:['"](\w+)['"])?\s*\)/g)) {
137
+ const col = im[1] ?? 'id';
138
+ table.columns.add(col);
139
+ table.indexed.add(col);
140
+ }
141
+
142
+ // $table->foreignId('user_id')->constrained(...) — FK, indexed by the constraint.
143
+ for (const im of body.matchAll(/\$table->foreignId\(\s*['"](\w+)['"]\s*\)((?:->\w+\([^)]*\))*)/g)) {
144
+ const col = im[1]!;
145
+ table.columns.add(col);
146
+ if (/->constrained\b/.test(im[2] ?? '')) table.indexed.add(col);
147
+ }
148
+
149
+ // Plain typed columns, with inline ->index()/->unique()/->primary() modifiers.
150
+ const type_re = new RegExp(
151
+ String.raw`\$table->(${LARAVEL_COLUMN_TYPES.join('|')})\(\s*['"](\w+)['"][^;]*?\)((?:->\w+\([^)]*\))*)`,
152
+ 'g',
153
+ );
154
+ for (const im of body.matchAll(type_re)) {
155
+ const col = im[2]!;
156
+ table.columns.add(col);
157
+ if (/->(index|unique|primary)\(\s*\)/.test(im[0])) table.indexed.add(col);
158
+ }
159
+
160
+ // Timestamp / soft-delete helpers.
161
+ if (/\$table->timestamps\(\)/.test(body)) {
162
+ table.columns.add('created_at');
163
+ table.columns.add('updated_at');
164
+ }
165
+ if (/\$table->softDeletes\(\)/.test(body)) table.columns.add('deleted_at');
166
+
167
+ // Standalone index declarations: $table->index('col') / index(['a','b']).
168
+ // Leftmost-prefix rule: only the FIRST column of a composite counts.
169
+ for (const im of body.matchAll(/\$table->(index|unique|primary|fullText)\(\s*(\[[^\]]*\]|['"]\w+['"])/g)) {
170
+ const arg = im[2]!;
171
+ const cols = [...arg.matchAll(/['"](\w+)['"]/g)].map((c) => c[1]!);
172
+ if (cols.length > 0) {
173
+ for (const c of cols) table.columns.add(c);
174
+ table.indexed.add(cols[0]!); // leftmost column is always usable alone
175
+ table.composites.push(cols);
176
+ }
177
+ }
178
+
179
+ // $table->foreign('col')->references(...) — FK index.
180
+ for (const im of body.matchAll(/\$table->foreign\(\s*['"](\w+)['"]\s*\)/g)) {
181
+ table.columns.add(im[1]!);
182
+ table.indexed.add(im[1]!);
183
+ }
184
+ }
185
+ }
186
+
187
+ // ---------------------------------------------------------------------------
188
+ // Schema parsing — schema.prisma
189
+ // ---------------------------------------------------------------------------
190
+
191
+ const PRISMA_SCALARS = new Set([
192
+ 'Int', 'BigInt', 'String', 'Boolean', 'DateTime', 'Decimal', 'Float', 'Json', 'Bytes',
193
+ ]);
194
+
195
+ export function parse_prisma_schema(text: string, schema: SchemaMap): void {
196
+ const model_re = /model\s+(\w+)\s*\{/g;
197
+ let m: RegExpExecArray | null;
198
+ while ((m = model_re.exec(text)) !== null) {
199
+ const table = ensure_table(schema, m[1]!);
200
+ const brace = text.indexOf('{', m.index);
201
+ const body = balanced_span(text, brace, '{', '}');
202
+
203
+ for (const raw of body.split('\n')) {
204
+ const line = raw.trim();
205
+
206
+ // Block attributes: @@index([a, b]) / @@unique([a, b]) — full order
207
+ // recorded; leftmost usable alone.
208
+ const block_full = line.match(/^@@(index|unique)\(\s*\[([^\]]*)\]/);
209
+ if (block_full) {
210
+ const cols = [...block_full[2]!.matchAll(/(\w+)/g)].map((c) => c[1]!);
211
+ if (cols.length > 0) table.composites.push(cols);
212
+ }
213
+ const block = line.match(/^@@(index|unique)\(\s*\[\s*(\w+)/);
214
+ if (block) {
215
+ table.columns.add(block[2]!);
216
+ table.indexed.add(block[2]!);
217
+ continue;
218
+ }
219
+ if (line.startsWith('@@') || line.startsWith('//') || line === '' || line === '{' || line === '}') {
220
+ continue;
221
+ }
222
+
223
+ // Field lines: `name Type ...attributes`. Scalar and enum-ish types are
224
+ // columns; relation object fields (type == another model, or @relation
225
+ // with a list type) are not columns themselves.
226
+ const field = line.match(/^(\w+)\s+(\w+)(\[\])?(\?)?\s*(.*)$/);
227
+ if (!field) continue;
228
+ const [, name, type, is_list, , rest] = field;
229
+ if (is_list) continue; // relation list — not a column
230
+ if (!PRISMA_SCALARS.has(type!) && /@relation\b/.test(rest ?? '')) continue;
231
+ if (!PRISMA_SCALARS.has(type!)) continue; // unknown/model type without scalar — skip
232
+
233
+ table.columns.add(name!);
234
+ if (/@id\b/.test(rest ?? '') || /@unique\b/.test(rest ?? '')) table.indexed.add(name!);
235
+ }
236
+ }
237
+ }
238
+
239
+ // ---------------------------------------------------------------------------
240
+ // Query surface — PHP (Eloquent / query builder)
241
+ // ---------------------------------------------------------------------------
242
+
243
+ const PHP_QUERY_METHODS = /(::|->)\s*(whereRaw|orderByRaw|whereNotIn|whereIn|where|orderBy)\s*\(/g;
244
+
245
+ /** Extract WHERE / ORDER BY refs from a single PHP statement chain. */
246
+ function extract_php_chain_refs(
247
+ text: string,
248
+ chain_start: number,
249
+ table: string | null,
250
+ file: string,
251
+ refs: ColumnRef[],
252
+ ): void {
253
+ const end = text.indexOf(';', chain_start);
254
+ const stmt = text.slice(chain_start, end === -1 ? text.length : end);
255
+ PHP_QUERY_METHODS.lastIndex = 0;
256
+ let m: RegExpExecArray | null;
257
+ while ((m = PHP_QUERY_METHODS.exec(stmt)) !== null) {
258
+ const method = m[2]!;
259
+ const arg_at = chain_start + m.index + m[0].length;
260
+ const line = line_of(text, chain_start + m.index);
261
+ const kind: ColumnRef['kind'] = method.startsWith('orderBy') ? 'orderBy' : 'where';
262
+
263
+ if (method === 'whereRaw' || method === 'orderByRaw') {
264
+ refs.push({ file, line, table, column: null, kind, note: 'raw-sql' });
265
+ continue;
266
+ }
267
+
268
+ const rest = text.slice(arg_at).replace(/^\s*/, '');
269
+ if (rest.startsWith("'") || rest.startsWith('"')) {
270
+ const lit = rest.match(/^['"]([\w.]+)['"]/);
271
+ // `table.col` qualified names: keep the column part.
272
+ const column = lit ? lit[1]!.split('.').pop()! : null;
273
+ refs.push({ file, line, table, column, kind, ...(column ? {} : { note: 'dynamic-arg' }) });
274
+ } else if (rest.startsWith('[')) {
275
+ // where(['a' => .., 'b' => ..]) — every key is a WHERE column.
276
+ const arr = balanced_span(text, arg_at + (text.slice(arg_at).length - rest.length), '[', ']');
277
+ for (const key of arr.matchAll(/['"](\w+)['"]\s*=>/g)) {
278
+ refs.push({ file, line, table, column: key[1]!, kind });
279
+ }
280
+ } else {
281
+ // where($var, ...) / closures / expressions — dynamic, unresolvable.
282
+ refs.push({ file, line, table, column: null, kind, note: 'dynamic-arg' });
283
+ }
284
+ }
285
+ }
286
+
287
+ export function extract_php_refs(
288
+ text: string,
289
+ file: string,
290
+ model_table_map: Record<string, string>,
291
+ ): ColumnRef[] {
292
+ const refs: ColumnRef[] = [];
293
+
294
+ // Model static chains: User::where(...), Post::whereIn(...), Model::query()->...
295
+ for (const m of text.matchAll(/\b([A-Z]\w*)::(?=query\(\)|where|orderBy)/g)) {
296
+ const model = m[1]!;
297
+ if (model === 'DB' || model === 'Schema') continue;
298
+ const table = model_table_map[model] ?? model_to_table(model);
299
+ extract_php_chain_refs(text, m.index, table, file, refs);
300
+ }
301
+
302
+ // Query-builder chains: DB::table('orders')->where(...)
303
+ for (const m of text.matchAll(/\bDB::table\(\s*['"](\w+)['"]\s*\)/g)) {
304
+ extract_php_chain_refs(text, m.index, m[1]!, file, refs);
305
+ }
306
+
307
+ // Relation chains: $user->posts()->where(...) — the relation method name is
308
+ // taken as the related table name (Laravel convention: hasMany posts()).
309
+ for (const m of text.matchAll(/\$\w+->([a-z]\w*)\(\)\s*->\s*(?=where|orderBy)/g)) {
310
+ extract_php_chain_refs(text, m.index, snake_case(m[1]!), file, refs);
311
+ }
312
+
313
+ return refs;
314
+ }
315
+
316
+ // ---------------------------------------------------------------------------
317
+ // Query surface — TypeScript (Prisma client)
318
+ // ---------------------------------------------------------------------------
319
+
320
+ /** Depth-1 keys of an object literal `{ ... }`, recursing into AND/OR/NOT. */
321
+ function object_depth1_keys(obj: string): { keys: string[]; dynamic: boolean } {
322
+ const keys: string[] = [];
323
+ let dynamic = false;
324
+ let depth = 0;
325
+ for (let i = 0; i < obj.length; i++) {
326
+ const c = obj[i]!;
327
+ if (c === '{' || c === '[' || c === '(') { depth++; continue; }
328
+ if (c === '}' || c === ']' || c === ')') { depth--; continue; }
329
+ if (depth !== 1) continue;
330
+ if (c === '.' && obj.slice(i, i + 3) === '...') { dynamic = true; i += 2; continue; }
331
+ const rest = obj.slice(i);
332
+ const key = rest.match(/^(\w+)\s*:/);
333
+ if (key) {
334
+ if (key[1] === 'AND' || key[1] === 'OR' || key[1] === 'NOT') {
335
+ // Recurse into each object of the boolean-operator array/object.
336
+ const val_at = i + key[0].length;
337
+ const val = obj.slice(val_at).replace(/^\s*/, '');
338
+ const open = val[0];
339
+ if (open === '[' || open === '{') {
340
+ const span = balanced_span(obj, val_at + (obj.slice(val_at).length - val.length), open, open === '[' ? ']' : '}');
341
+ if (open === '[') {
342
+ for (const inner of span.matchAll(/\{/g)) {
343
+ const sub = balanced_span(span, inner.index, '{', '}');
344
+ const r = object_depth1_keys(sub);
345
+ keys.push(...r.keys);
346
+ dynamic = dynamic || r.dynamic;
347
+ }
348
+ } else {
349
+ const r = object_depth1_keys(span);
350
+ keys.push(...r.keys);
351
+ dynamic = dynamic || r.dynamic;
352
+ }
353
+ i = val_at + span.length - 1;
354
+ // Depth bookkeeping was skipped for the recursed span; rebalance
355
+ // by continuing the outer scan after it (depth unchanged: the
356
+ // span is balanced).
357
+ continue;
358
+ }
359
+ }
360
+ keys.push(key[1]!);
361
+ i += key[0].length - 1;
362
+ continue;
363
+ }
364
+ // Bare identifier at depth 1 not followed by ':' → shorthand property
365
+ // ({ email } is fine — it IS the key) handled below via lookahead.
366
+ const short = rest.match(/^(\w+)\s*[,}]/);
367
+ if (short) {
368
+ keys.push(short[1]!);
369
+ i += short[1]!.length - 1;
370
+ }
371
+ }
372
+ return { keys, dynamic };
373
+ }
374
+
375
+ export function extract_prisma_refs(text: string, file: string, schema: SchemaMap): ColumnRef[] {
376
+ const refs: ColumnRef[] = [];
377
+
378
+ // Model resolution: client property is the camelCase model name.
379
+ const models = [...schema.keys()];
380
+ const model_for = (prop: string): string | null =>
381
+ models.find((mm) => mm[0]!.toLowerCase() + mm.slice(1) === prop) ?? null;
382
+
383
+ // Raw SQL escape hatches — always unresolved.
384
+ for (const m of text.matchAll(/\$(queryRaw|executeRaw|queryRawUnsafe|executeRawUnsafe)\b/g)) {
385
+ refs.push({ file, line: line_of(text, m.index), table: null, column: null, kind: 'where', note: 'raw-sql' });
386
+ }
387
+
388
+ const call_re = /\b(?:prisma|db|client)\.(\w+)\.(findMany|findFirst|findUnique|findFirstOrThrow|findUniqueOrThrow|count|aggregate|groupBy|updateMany|deleteMany|update|delete)\s*\(/g;
389
+ let m: RegExpExecArray | null;
390
+ while ((m = call_re.exec(text)) !== null) {
391
+ const table = model_for(m[1]!);
392
+ const args_open = m.index + m[0].length - 1;
393
+ const args = balanced_span(text, args_open, '(', ')');
394
+
395
+ for (const clause of ['where', 'orderBy'] as const) {
396
+ const kind: ColumnRef['kind'] = clause;
397
+ const c_re = new RegExp(String.raw`\b${clause}\s*(:)?`, 'g');
398
+ let cm: RegExpExecArray | null;
399
+ while ((cm = c_re.exec(args)) !== null) {
400
+ // Only consider depth-1 occurrences within the args object; a crude
401
+ // but adequate guard: require the match to be followed by ':' or be
402
+ // a shorthand (`where,` / `where }`).
403
+ const after = args.slice(cm.index + cm[0].length).replace(/^\s*/, '');
404
+ const line = line_of(text, args_open + cm.index);
405
+ if (!cm[1]) {
406
+ // Shorthand `{ where }` — a dynamic variable.
407
+ if (/^[,}]/.test(after)) {
408
+ refs.push({ file, line, table, column: null, kind, note: 'dynamic-arg' });
409
+ }
410
+ continue;
411
+ }
412
+ if (after.startsWith('{')) {
413
+ const at = args_open + (args.length - args.slice(cm.index + cm[0].length).replace(/^\s*/, '').length) + cm.index + cm[0].length;
414
+ // Simpler: locate the '{' within args relative to cm.
415
+ const brace_in_args = args.indexOf('{', cm.index + cm[0].length);
416
+ const obj = balanced_span(args, brace_in_args, '{', '}');
417
+ const { keys, dynamic } = object_depth1_keys(obj);
418
+ for (const key of keys) {
419
+ refs.push({ file, line, table, column: key, kind });
420
+ }
421
+ if (dynamic) refs.push({ file, line, table, column: null, kind, note: 'dynamic-arg' });
422
+ void at;
423
+ } else if (after.startsWith('[')) {
424
+ // orderBy: [{ a: 'asc' }, { b: 'desc' }]
425
+ const brack_in_args = args.indexOf('[', cm.index + cm[0].length);
426
+ const arr = balanced_span(args, brack_in_args, '[', ']');
427
+ for (const om of arr.matchAll(/(\w+)\s*:/g)) {
428
+ if (om[1] === 'asc' || om[1] === 'desc') continue;
429
+ refs.push({ file, line, table, column: om[1]!, kind });
430
+ }
431
+ } else {
432
+ // where: someVariable — dynamic.
433
+ refs.push({ file, line, table, column: null, kind, note: 'dynamic-arg' });
434
+ }
435
+ }
436
+ }
437
+ }
438
+
439
+ return refs;
440
+ }
441
+
442
+ // ---------------------------------------------------------------------------
443
+ // Classification + entry point
444
+ // ---------------------------------------------------------------------------
445
+
446
+ export function classify_refs(
447
+ refs: ColumnRef[],
448
+ schema: SchemaMap,
449
+ file_lines: Map<string, string[]>,
450
+ ): IndexParityResult {
451
+ const findings: Finding[] = [];
452
+ let resolved = 0;
453
+ let unresolved = 0;
454
+
455
+ for (const ref of refs) {
456
+ const table = ref.table ? schema.get(ref.table) : undefined;
457
+ const is_resolved = !!(ref.column && table && table.columns.has(ref.column));
458
+
459
+ if (!is_resolved) {
460
+ if (!ref.note) {
461
+ ref.note = !ref.column ? 'dynamic-arg' : !table ? 'unknown-table' : 'unknown-column';
462
+ }
463
+ if (ref.kind === 'where') unresolved++;
464
+ continue;
465
+ }
466
+ if (ref.kind === 'where') resolved++;
467
+
468
+ // Composite support: a non-leftmost column of a composite index is
469
+ // covered when every column left of it in that index appears in the
470
+ // same query chain (same file, within a ±3-line window) — the
471
+ // real-world WHERE a AND b shape a composite (a, b) fully serves.
472
+ const chain_cols = new Set(
473
+ refs
474
+ .filter(
475
+ (r) =>
476
+ r.file === ref.file &&
477
+ r.table === ref.table &&
478
+ r.column &&
479
+ Math.abs(r.line - ref.line) <= 3,
480
+ )
481
+ .map((r) => r.column as string),
482
+ );
483
+ const composite_covered = table!.composites.some((idx) => {
484
+ const pos = idx.indexOf(ref.column!);
485
+ if (pos < 0) return false;
486
+ return idx.slice(0, pos).every((c) => chain_cols.has(c));
487
+ });
488
+
489
+ if (!table!.indexed.has(ref.column!) && !composite_covered) {
490
+ const lines = file_lines.get(ref.file) ?? [];
491
+ const waiver = parse_waiver(lines, ref.line - 1);
492
+ const waived = waiver !== null && waiver.kind === 'no-index';
493
+ findings.push({
494
+ failure_class: 'F2',
495
+ rule: 'R-A2',
496
+ file: ref.file,
497
+ line: ref.line,
498
+ message: `${ref.kind === 'where' ? 'WHERE' : 'ORDER BY'} on ${ref.table}.${ref.column} has no supporting index`,
499
+ tier: 'gate',
500
+ ...(waived ? { waived: true, waiver_reason: waiver.reason } : {}),
501
+ });
502
+ }
503
+ }
504
+
505
+ const total = resolved + unresolved;
506
+ return {
507
+ findings,
508
+ resolved,
509
+ unresolved,
510
+ resolution_rate: total === 0 ? 1 : resolved / total,
511
+ refs,
512
+ };
513
+ }
514
+
515
+ function walk(dir: string): string[] {
516
+ const out: string[] = [];
517
+ for (const entry of readdirSync(dir)) {
518
+ const p = join(dir, entry);
519
+ let st;
520
+ try {
521
+ // lstat: never FOLLOW symlinks — a hostile tree could link outside
522
+ // the scanned root (council PR-review finding); broken links must
523
+ // not crash the walk either.
524
+ st = lstatSync(p);
525
+ } catch {
526
+ continue;
527
+ }
528
+ if (st.isSymbolicLink()) continue;
529
+ if (st.isDirectory()) {
530
+ if (!is_ignored_dir(entry)) out.push(...walk(p));
531
+ } else out.push(p);
532
+ }
533
+ return out;
534
+ }
535
+
536
+ export interface AnalyzeOptions {
537
+ /** Explicit Model -> table overrides (else snake_case + pluralize). */
538
+ model_table_map?: Record<string, string>;
539
+ }
540
+
541
+ /**
542
+ * Analyze a fixture/source directory: build the schema map from migrations and
543
+ * schema.prisma files, extract the query surface from .php and .ts files, and
544
+ * classify every WHERE / ORDER BY column reference.
545
+ */
546
+ export function analyze(dir: string, opts: AnalyzeOptions = {}): IndexParityResult {
547
+ const files = walk(dir);
548
+ const schema: SchemaMap = new Map();
549
+ const query_files: Array<{ rel: string; text: string; lang: 'php' | 'ts' }> = [];
550
+
551
+ for (const f of files) {
552
+ const rel = relative(dir, f);
553
+ if (f.endsWith('.prisma')) {
554
+ parse_prisma_schema(readFileSync(f, 'utf8'), schema);
555
+ } else if (f.endsWith('.php')) {
556
+ const text = readFileSync(f, 'utf8');
557
+ if (/Schema::(?:connection\([^)]*\)\s*->\s*)?(?:create|table)\(/.test(text)) parse_laravel_migrations(text, schema);
558
+ else query_files.push({ rel, text, lang: 'php' });
559
+ } else if (f.endsWith('.ts')) {
560
+ query_files.push({ rel, text: readFileSync(f, 'utf8'), lang: 'ts' });
561
+ }
562
+ }
563
+
564
+ const refs: ColumnRef[] = [];
565
+ const file_lines = new Map<string, string[]>();
566
+ for (const qf of query_files) {
567
+ file_lines.set(qf.rel, qf.text.split('\n'));
568
+ if (qf.lang === 'php') {
569
+ refs.push(...extract_php_refs(qf.text, qf.rel, opts.model_table_map ?? {}));
570
+ } else {
571
+ refs.push(...extract_prisma_refs(qf.text, qf.rel, schema));
572
+ }
573
+ }
574
+
575
+ return classify_refs(refs, schema, file_lines);
576
+ }