@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,423 @@
1
+ /**
2
+ * SPIKE S0.4 — audit-coverage detection (F8 "missing audit history",
3
+ * rule R-B1, tier: gate) for the persistence-lint substrate.
4
+ * Falsification question (agents/roadmaps/archive/road-to-scale-and-history-discipline.md):
5
+ * given a DECLARED audit scope (audit-scope.json listing audit-scoped models),
6
+ * can mutation call sites lacking audit emission be detected deterministically?
7
+ * PASS bar: recall >= 0.9 at precision >= 0.8 against the labeled fixture repo.
8
+ *
9
+ * Tier-1 (Laravel-flavored) coverage model:
10
+ * (a) model — or an ancestor — uses a recognized auditing trait
11
+ * (OwenIt\Auditing\Auditable, Spatie\Activitylog\Traits\LogsActivity,
12
+ * or a project-local `Auditable` trait);
13
+ * (b) a REGISTERED observer (Model::observe(...) in a provider, or
14
+ * #[ObservedBy(...)] on the model) whose class writes an audit record;
15
+ * (c) an explicit inline audit write (AuditLog::create / activity())
16
+ * in the same function as the mutation.
17
+ *
18
+ * Event semantics matter: mass mutations (Model::query()->update/delete,
19
+ * DB::table(...)->update/insert/delete) bypass Eloquent model events, so
20
+ * mechanisms (a)/(b) do NOT cover them — only (c) does. Event-firing
21
+ * mutations (::create, ->save, ->update, ->delete, ::destroy) are covered
22
+ * by any of (a)/(b)/(c).
23
+ *
24
+ * Deterministic PATTERN detection (see types.ts): regex + brace-scope
25
+ * heuristics, no PHP AST. Variable→model resolution is heuristic
26
+ * (type hints, `$x = Model::…` / `new Model` assignments, then the
27
+ * `$invoice` → `Invoice` naming convention); unresolvable receivers are
28
+ * skipped rather than guessed, biasing toward precision.
29
+ */
30
+
31
+ import { readFileSync, readdirSync, lstatSync } from 'node:fs';
32
+ import { join, relative } from 'node:path';
33
+ import type { Finding } from './types.ts';
34
+
35
+ export interface AuditScope {
36
+ audit_scoped_models: string[];
37
+ }
38
+
39
+ export interface AuditCoverageResult {
40
+ findings: Finding[];
41
+ mutations_total: number;
42
+ covered: number;
43
+ uncovered: number;
44
+ }
45
+
46
+ interface ModelInfo {
47
+ name: string;
48
+ file: string;
49
+ extends_class: string | null;
50
+ body_traits: string[]; // resolved (full) trait names used in the class body
51
+ observed_by: string[]; // observer class short names from #[ObservedBy]
52
+ table: string; // explicit $table or snake_case+'s' convention
53
+ }
54
+
55
+ interface FunctionSpan {
56
+ name: string;
57
+ start: number; // 0-indexed line of the `function` keyword
58
+ end: number; // 0-indexed line of the closing brace
59
+ signature: string;
60
+ }
61
+
62
+ const AUDIT_TRAIT_FULL = new Set([
63
+ 'OwenIt\\Auditing\\Auditable',
64
+ 'Spatie\\Activitylog\\Traits\\LogsActivity',
65
+ ]);
66
+ const AUDIT_TRAIT_SHORT = new Set(['Auditable', 'LogsActivity']);
67
+ const INLINE_AUDIT_RE = /\bAuditLog::create\s*\(|\bactivity\s*\(\s*\)/;
68
+
69
+ // ---------------------------------------------------------------- helpers
70
+
71
+ function list_php_files(dir: string): string[] {
72
+ const out: string[] = [];
73
+ const walk = (d: string): void => {
74
+ for (const entry of readdirSync(d)) {
75
+ const full = join(d, entry);
76
+ let st;
77
+ try {
78
+ st = lstatSync(full); // never follow symlinks; broken links must not crash
79
+ } catch {
80
+ continue;
81
+ }
82
+ if (st.isSymbolicLink()) continue;
83
+ if (st.isDirectory()) {
84
+ if (entry === 'vendor' || entry === 'node_modules' || entry.startsWith('.')) continue;
85
+ walk(full);
86
+ } else if (entry.endsWith('.php')) {
87
+ out.push(full);
88
+ }
89
+ }
90
+ };
91
+ walk(dir);
92
+ return out;
93
+ }
94
+
95
+ /** Map of short name -> fully-qualified name from top-of-file `use` imports. */
96
+ function parse_imports(lines: string[], class_line: number): Map<string, string> {
97
+ const imports = new Map<string, string>();
98
+ for (let i = 0; i < class_line; i++) {
99
+ const m = lines[i]!.match(/^\s*use\s+([\w\\]+)(?:\s+as\s+(\w+))?\s*;/);
100
+ if (!m) continue;
101
+ const full = m[1]!;
102
+ const short = m[2] ?? full.split('\\').pop()!;
103
+ imports.set(short, full);
104
+ }
105
+ return imports;
106
+ }
107
+
108
+ function snake_case(name: string): string {
109
+ return name.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();
110
+ }
111
+
112
+ /** Naive Laravel table convention: snake_case + 's' (fixture-sufficient). */
113
+ function default_table(model: string): string {
114
+ return `${snake_case(model)}s`;
115
+ }
116
+
117
+ /** Brace-tracked function spans (regex-level; fixture PHP is simple). */
118
+ function parse_function_spans(lines: string[]): FunctionSpan[] {
119
+ const spans: FunctionSpan[] = [];
120
+ for (let i = 0; i < lines.length; i++) {
121
+ const m = lines[i]!.match(/\bfunction\s+(\w+)\s*\(/);
122
+ if (!m) continue;
123
+ // Find the opening brace, then track depth to the matching close.
124
+ let depth = 0;
125
+ let started = false;
126
+ let end = lines.length - 1;
127
+ outer: for (let j = i; j < lines.length; j++) {
128
+ for (const ch of lines[j]!) {
129
+ if (ch === '{') {
130
+ depth++;
131
+ started = true;
132
+ } else if (ch === '}') {
133
+ depth--;
134
+ if (started && depth === 0) {
135
+ end = j;
136
+ break outer;
137
+ }
138
+ }
139
+ }
140
+ }
141
+ spans.push({ name: m[1]!, start: i, end, signature: lines[i]! });
142
+ }
143
+ return spans;
144
+ }
145
+
146
+ function enclosing_span(spans: FunctionSpan[], line0: number): FunctionSpan | null {
147
+ // Innermost span containing the line (closures nest inside methods).
148
+ let best: FunctionSpan | null = null;
149
+ for (const s of spans) {
150
+ if (line0 >= s.start && line0 <= s.end) {
151
+ if (!best || s.start > best.start) best = s;
152
+ }
153
+ }
154
+ return best;
155
+ }
156
+
157
+ // ---------------------------------------------------------------- model map
158
+
159
+ function parse_models(dir: string): Map<string, ModelInfo> {
160
+ const models = new Map<string, ModelInfo>();
161
+ const models_dir = join(dir, 'app', 'Models');
162
+ let files: string[] = [];
163
+ try {
164
+ files = list_php_files(models_dir);
165
+ } catch {
166
+ return models;
167
+ }
168
+ for (const file of files) {
169
+ const lines = readFileSync(file, 'utf8').split('\n');
170
+ let class_line = -1;
171
+ let name = '';
172
+ let extends_class: string | null = null;
173
+ for (let i = 0; i < lines.length; i++) {
174
+ const m = lines[i]!.match(/^\s*(?:abstract\s+|final\s+)?class\s+(\w+)(?:\s+extends\s+([\w\\]+))?/);
175
+ if (m) {
176
+ class_line = i;
177
+ name = m[1]!;
178
+ extends_class = m[2] ? m[2].split('\\').pop()! : null;
179
+ break;
180
+ }
181
+ }
182
+ if (class_line < 0) continue;
183
+ const imports = parse_imports(lines, class_line);
184
+
185
+ // Trait uses inside the class body.
186
+ const body_traits: string[] = [];
187
+ for (let i = class_line + 1; i < lines.length; i++) {
188
+ const m = lines[i]!.match(/^\s*use\s+([\w\\,\s]+);/);
189
+ if (!m) continue;
190
+ for (const raw of m[1]!.split(',')) {
191
+ const short = raw.trim().split('\\').pop()!;
192
+ body_traits.push(imports.get(raw.trim()) ?? imports.get(short) ?? raw.trim());
193
+ }
194
+ }
195
+
196
+ // #[ObservedBy(FooObserver::class)] attribute (may list several).
197
+ const observed_by: string[] = [];
198
+ for (let i = 0; i < class_line; i++) {
199
+ const attr = lines[i]!.match(/#\[\s*ObservedBy\s*\(([^)]*)\)\s*\]/);
200
+ if (!attr) continue;
201
+ for (const cm of attr[1]!.matchAll(/([\w\\]+)::class/g)) {
202
+ observed_by.push(cm[1]!.split('\\').pop()!);
203
+ }
204
+ }
205
+
206
+ // Explicit $table override, else convention.
207
+ let table = default_table(name);
208
+ const tm = lines.join('\n').match(/protected\s+\$table\s*=\s*['"](\w+)['"]/);
209
+ if (tm) table = tm[1]!;
210
+
211
+ models.set(name, { name, file, extends_class, body_traits, observed_by, table });
212
+ }
213
+ return models;
214
+ }
215
+
216
+ /** Mechanism (a): recognized auditing trait on the model or any ancestor. */
217
+ function has_audit_trait(model: string, models: Map<string, ModelInfo>, seen = new Set<string>()): boolean {
218
+ if (seen.has(model)) return false;
219
+ seen.add(model);
220
+ const info = models.get(model);
221
+ if (!info) return false;
222
+ for (const t of info.body_traits) {
223
+ if (AUDIT_TRAIT_FULL.has(t)) return true;
224
+ if (AUDIT_TRAIT_SHORT.has(t.split('\\').pop()!)) return true;
225
+ }
226
+ if (info.extends_class) return has_audit_trait(info.extends_class, models, seen);
227
+ return false;
228
+ }
229
+
230
+ // ------------------------------------------------------------ observer map
231
+
232
+ /** Observer registrations: Model::observe(FooObserver::class) in providers. */
233
+ function parse_provider_registrations(dir: string): Map<string, string[]> {
234
+ const reg = new Map<string, string[]>();
235
+ let files: string[] = [];
236
+ try {
237
+ files = list_php_files(join(dir, 'app', 'Providers'));
238
+ } catch {
239
+ return reg;
240
+ }
241
+ for (const file of files) {
242
+ const src = readFileSync(file, 'utf8');
243
+ for (const m of src.matchAll(/(\w+)::observe\s*\(\s*([\w\\]+)::class\s*\)/g)) {
244
+ const model = m[1]!;
245
+ const observer = m[2]!.split('\\').pop()!;
246
+ reg.set(model, [...(reg.get(model) ?? []), observer]);
247
+ }
248
+ }
249
+ return reg;
250
+ }
251
+
252
+ /** Does the observer class file write an audit record anywhere? */
253
+ function observer_emits_audit(dir: string, observer: string): boolean {
254
+ const file = join(dir, 'app', 'Observers', `${observer}.php`);
255
+ try {
256
+ const src = readFileSync(file, 'utf8');
257
+ // Require lifecycle hooks AND an audit write.
258
+ const has_hook = /function\s+(created|updated|deleted|saved)\s*\(/.test(src);
259
+ return has_hook && INLINE_AUDIT_RE.test(src);
260
+ } catch {
261
+ return false;
262
+ }
263
+ }
264
+
265
+ // ---------------------------------------------------------- mutation sites
266
+
267
+ interface MutationSite {
268
+ file: string; // absolute
269
+ line0: number;
270
+ model: string;
271
+ kind: 'event' | 'mass'; // 'mass' bypasses model events
272
+ snippet: string;
273
+ }
274
+
275
+ const RECEIVER_BLOCKLIST = new Set(['this', 'request', 'query', 'response']);
276
+
277
+ function resolve_receiver(
278
+ varname: string,
279
+ lines: string[],
280
+ span: FunctionSpan | null,
281
+ line0: number,
282
+ known_models: Set<string>,
283
+ ): string | null {
284
+ const start = span ? span.start : 0;
285
+ // 1. Parameter type hint in the enclosing signature: `Invoice $invoice`.
286
+ if (span) {
287
+ const sig = span.signature.match(new RegExp(String.raw`(\w+)\s+\$${varname}\b`));
288
+ if (sig && sig[1] && known_models.has(sig[1])) return sig[1];
289
+ }
290
+ // 2. Assignment earlier in the function: `$x = Model::…` / `$x = new Model`.
291
+ for (let i = line0; i >= start; i--) {
292
+ const a = lines[i]!.match(new RegExp(String.raw`\$${varname}\s*=\s*(?:new\s+)?(\w+)(?:::|\s*\()`));
293
+ if (a && a[1] && known_models.has(a[1])) return a[1];
294
+ }
295
+ // 3. Naming convention: $invoice -> Invoice, $auditLog -> AuditLog.
296
+ const conv = varname.charAt(0).toUpperCase() + varname.slice(1);
297
+ if (known_models.has(conv)) return conv;
298
+ return null;
299
+ }
300
+
301
+ function scan_mutations(dir: string, models: Map<string, ModelInfo>): MutationSite[] {
302
+ const sites: MutationSite[] = [];
303
+ const known = new Set(models.keys());
304
+ const table_to_model = new Map<string, string>();
305
+ for (const m of models.values()) table_to_model.set(m.table, m.name);
306
+
307
+ // Model/trait/observer internals emit TO the audit sink; scanning them is
308
+ // harmless (AuditLog is never audit-scoped) but Traits register closures
309
+ // that would resolve oddly — scan everything under app/ and let scoping
310
+ // plus receiver resolution filter.
311
+ const files = list_php_files(join(dir, 'app'));
312
+ for (const file of files) {
313
+ const lines = readFileSync(file, 'utf8').split('\n');
314
+ const spans = parse_function_spans(lines);
315
+ for (let i = 0; i < lines.length; i++) {
316
+ const line = lines[i]!;
317
+ if (/^\s*(\/\/|\*|\/\*)/.test(line)) continue; // pure comment lines
318
+
319
+ // (1) DB::table('x')->…->update/insert/delete(…) [mass]
320
+ const db = line.match(/DB::table\s*\(\s*['"](\w+)['"]\s*\)[^;]*->\s*(update|insert|delete|upsert)\s*\(/);
321
+ if (db) {
322
+ const model = table_to_model.get(db[1]!);
323
+ if (model) sites.push({ file, line0: i, model, kind: 'mass', snippet: line.trim() });
324
+ continue;
325
+ }
326
+
327
+ // (2) Model::query()->…->update/delete(…) [mass]
328
+ const massq = line.match(/(\w+)::query\s*\(\s*\)[^;]*->\s*(update|delete)\s*\(/);
329
+ if (massq && massq[1] && known.has(massq[1])) {
330
+ sites.push({ file, line0: i, model: massq[1], kind: 'mass', snippet: line.trim() });
331
+ continue;
332
+ }
333
+
334
+ // (3) Model::create(…) / Model::destroy(…) [event-firing]
335
+ const stat = line.match(/(\w+)::(create|destroy|forceCreate)\s*\(/);
336
+ if (stat && stat[1] && known.has(stat[1]) && stat[1] !== 'AuditLog') {
337
+ sites.push({ file, line0: i, model: stat[1], kind: 'event', snippet: line.trim() });
338
+ continue;
339
+ }
340
+
341
+ // (4) $var->save()/update()/delete() [event-firing]
342
+ const inst = line.match(/\$(\w+)->(save|update|delete|forceDelete)\s*\(/);
343
+ if (inst && inst[1] && !RECEIVER_BLOCKLIST.has(inst[1])) {
344
+ const span = enclosing_span(spans, i);
345
+ const model = resolve_receiver(inst[1], lines, span, i, known);
346
+ if (model && model !== 'AuditLog') {
347
+ sites.push({ file, line0: i, model, kind: 'event', snippet: line.trim() });
348
+ }
349
+ }
350
+ }
351
+ }
352
+ return sites;
353
+ }
354
+
355
+ // ---------------------------------------------------------------- analyze
356
+
357
+ export function analyze_repo(dir: string, scope: AuditScope): AuditCoverageResult {
358
+ const scoped = new Set(scope.audit_scoped_models);
359
+ const models = parse_models(dir);
360
+ const registrations = parse_provider_registrations(dir);
361
+ const sites = scan_mutations(dir, models);
362
+
363
+ // Per-model event coverage: trait (a) or registered audit-emitting observer (b).
364
+ const event_covered = new Map<string, boolean>();
365
+ for (const name of models.keys()) {
366
+ let cov = has_audit_trait(name, models);
367
+ if (!cov) {
368
+ const observers = [
369
+ ...(registrations.get(name) ?? []),
370
+ ...(models.get(name)?.observed_by ?? []),
371
+ ];
372
+ cov = observers.some((o) => observer_emits_audit(dir, o));
373
+ }
374
+ event_covered.set(name, cov);
375
+ }
376
+
377
+ const findings: Finding[] = [];
378
+ let mutations_total = 0;
379
+ let covered = 0;
380
+
381
+ for (const site of sites) {
382
+ if (!scoped.has(site.model)) continue; // out of declared audit scope
383
+ mutations_total++;
384
+
385
+ let is_covered = false;
386
+ if (site.kind === 'event' && event_covered.get(site.model)) {
387
+ is_covered = true;
388
+ } else {
389
+ // Mechanism (c): inline audit write in the same function.
390
+ const lines = readFileSync(site.file, 'utf8').split('\n');
391
+ const spans = parse_function_spans(lines);
392
+ const span = enclosing_span(spans, site.line0);
393
+ const from = span ? span.start : 0;
394
+ const to = span ? span.end : lines.length - 1;
395
+ for (let i = from; i <= to; i++) {
396
+ if (i === site.line0) continue; // the mutation itself
397
+ if (INLINE_AUDIT_RE.test(lines[i]!)) {
398
+ is_covered = true;
399
+ break;
400
+ }
401
+ }
402
+ }
403
+
404
+ if (is_covered) {
405
+ covered++;
406
+ continue;
407
+ }
408
+ const why =
409
+ site.kind === 'mass'
410
+ ? 'mass mutation bypasses model events; no inline audit write in the same function'
411
+ : 'model has no auditing trait, no registered audit-emitting observer, and no inline audit write';
412
+ findings.push({
413
+ failure_class: 'F8',
414
+ rule: 'R-B1',
415
+ file: relative(dir, site.file),
416
+ line: site.line0 + 1,
417
+ message: `Mutation on audit-scoped model ${site.model} lacks audit emission (${why}): ${site.snippet.slice(0, 120)}`,
418
+ tier: 'gate',
419
+ });
420
+ }
421
+
422
+ return { findings, mutations_total, covered, uncovered: findings.length };
423
+ }
@@ -0,0 +1,154 @@
1
+ /**
2
+ * R-A3 bounded-reads (F3) + R-A9 event-decoupling heuristic (F10, ADVICE) —
3
+ * road-to-scale-and-history-discipline Phase 2.
4
+ *
5
+ * R-A3 (gate) fires on two narrow, pattern-detectable shapes:
6
+ * 1. `SELECT *` inside a raw query string in production PHP paths.
7
+ * 2. A list-shaped controller method (`index` / `list*` / `all*`) that
8
+ * returns an UNBOUNDED Eloquent read — `Model::all()` or a builder
9
+ * chain ending in `->get()` with no `paginate` / `simplePaginate` /
10
+ * `cursorPaginate` / `limit` / `take` in the chain — directly in the
11
+ * response path.
12
+ *
13
+ * Anything wider (a bounded `get()` fed from a filtered scope, collections
14
+ * post-processed in memory) is contextual and NOT flagged — the waiver
15
+ * model applies (`// unbounded-ok` is intentionally NOT offered; bound the
16
+ * read or paginate).
17
+ *
18
+ * R-A9 (advice, never gate): a handler body touching ≥3 distinct
19
+ * side-effect domains (mail, http, notification, cache, log, storage,
20
+ * event-dispatch) suggests the mutating call site is enumerating its
21
+ * consumers — recommend observer/event + queued listeners.
22
+ */
23
+ import * as fs from 'node:fs';
24
+ import * as path from 'node:path';
25
+
26
+ import type { Finding } from './types.js';
27
+ import { is_ignored_dir } from './types.js';
28
+
29
+ interface Span {
30
+ start: number;
31
+ end: number;
32
+ }
33
+
34
+ function brace_span(lines: string[], from: number): Span | null {
35
+ let depth = 0;
36
+ let opened = false;
37
+ for (let i = from; i < lines.length; i += 1) {
38
+ for (const ch of lines[i]!) {
39
+ if (ch === '{') {
40
+ depth += 1;
41
+ opened = true;
42
+ } else if (ch === '}') {
43
+ depth -= 1;
44
+ if (opened && depth === 0) return { start: from, end: i };
45
+ }
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+
51
+ const LIST_METHOD_RE = /function\s+(index|list\w*|all\w*)\s*\(/;
52
+ const UNBOUNDED_ALL_RE = /\b[A-Z]\w+::all\s*\(\s*\)/;
53
+ const GET_CHAIN_RE = /->\s*get\s*\(\s*\)/;
54
+ const BOUND_RE = /paginate|simplePaginate|cursorPaginate|->\s*limit\s*\(|->\s*take\s*\(|->\s*first\s*\(/;
55
+
56
+ const SIDE_EFFECT_DOMAINS: Array<[string, RegExp]> = [
57
+ ['mail', /\bMail::|\bNotification(Facade)?::send/],
58
+ ['http', /\bHttp::/],
59
+ ['cache', /\bCache::(put|forget|forever)/],
60
+ ['log', /\bLog::(info|warning|error|debug)/],
61
+ ['storage', /\bStorage::(put|delete|move)/],
62
+ ['event', /\bevent\s*\(|\bEvent::dispatch/],
63
+ ['sms', /\bTwilio|\bVonage/],
64
+ ];
65
+
66
+ export function detect_bounded_reads(files: Array<{ path: string; content: string }>): Finding[] {
67
+ const findings: Finding[] = [];
68
+ for (const f of files) {
69
+ const lines = f.content.split('\n');
70
+ const is_controller =
71
+ /Http[\\/]Controllers/.test(f.path) || /extends\s+Controller\b/.test(f.content);
72
+
73
+ for (let i = 0; i < lines.length; i += 1) {
74
+ const l = lines[i]!;
75
+
76
+ // R-A3.1 — SELECT * in raw SQL strings (any production PHP file).
77
+ if (/['"]\s*SELECT\s+\*\s+FROM\b/i.test(l) && !/limit\s+\d/i.test(l)) {
78
+ findings.push({
79
+ failure_class: 'F3',
80
+ rule: 'R-A3',
81
+ file: f.path,
82
+ line: i + 1,
83
+ message: 'SELECT * in raw query — select the needed columns and bound the read',
84
+ tier: 'gate',
85
+ });
86
+ continue;
87
+ }
88
+
89
+ if (!is_controller) continue;
90
+
91
+ // R-A3.2 — unbounded reads in list-shaped controller methods.
92
+ const m = l.match(LIST_METHOD_RE);
93
+ if (!m) continue;
94
+ const span = brace_span(lines, i);
95
+ if (!span) continue;
96
+ for (let j = span.start; j <= span.end; j += 1) {
97
+ const body_line = lines[j]!;
98
+ if (BOUND_RE.test(body_line)) continue;
99
+ if (UNBOUNDED_ALL_RE.test(body_line) || (GET_CHAIN_RE.test(body_line) && !BOUND_RE.test(body_line))) {
100
+ // The chain may be bounded on an earlier line of the same statement.
101
+ const stmt_window = lines.slice(Math.max(span.start, j - 3), j + 1).join(' ');
102
+ if (BOUND_RE.test(stmt_window)) continue;
103
+ findings.push({
104
+ failure_class: 'F3',
105
+ rule: 'R-A3',
106
+ file: f.path,
107
+ line: j + 1,
108
+ message: `unbounded read in list endpoint \`${m[1]}\` — paginate or declare a bound`,
109
+ tier: 'gate',
110
+ });
111
+ }
112
+ }
113
+ }
114
+
115
+ // R-A9 — side-effect fan-out heuristic (advice tier, controllers only).
116
+ if (is_controller) {
117
+ for (let i = 0; i < lines.length; i += 1) {
118
+ const fn = lines[i]!.match(/function\s+(\w+)\s*\(/);
119
+ if (!fn) continue;
120
+ const span = brace_span(lines, i);
121
+ if (!span) continue;
122
+ const body = lines.slice(span.start, span.end + 1).join('\n');
123
+ const domains = SIDE_EFFECT_DOMAINS.filter(([, re]) => re.test(body)).map(([d]) => d);
124
+ if (domains.length >= 3) {
125
+ findings.push({
126
+ failure_class: 'F3', // reported under the pack umbrella; message names F10
127
+ rule: 'R-A9',
128
+ file: f.path,
129
+ line: i + 1,
130
+ message: `handler \`${fn[1]}\` fans out to ${domains.length} side-effect domains (${domains.join(', ')}) — consider a domain event + queued listeners (F10 heuristic)`,
131
+ tier: 'advice',
132
+ });
133
+ }
134
+ i = span.end;
135
+ }
136
+ }
137
+ }
138
+ return findings;
139
+ }
140
+
141
+ export function scan_dir(dir: string): Finding[] {
142
+ const files: Array<{ path: string; content: string }> = [];
143
+ const walk = (d: string): void => {
144
+ for (const e of fs.readdirSync(d, { withFileTypes: true })) {
145
+ const p = path.join(d, e.name);
146
+ if (e.isDirectory()) {
147
+ if (!is_ignored_dir(e.name)) walk(p);
148
+ }
149
+ else if (p.endsWith('.php')) files.push({ path: p, content: fs.readFileSync(p, 'utf8') });
150
+ }
151
+ };
152
+ walk(dir);
153
+ return detect_bounded_reads(files);
154
+ }