@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,226 @@
1
+ /**
2
+ * detect_n1_eloquent — deterministic N+1 pattern detection for Laravel/Eloquent PHP.
3
+ *
4
+ * Falsification spike S0.1 of the road-to-scale-and-history-discipline roadmap.
5
+ * Failure class F1 (N+1 queries), rule R-A1, tier gate.
6
+ *
7
+ * Approach: lightweight line/brace scanning, no PHP AST. A foreach loop is
8
+ * suspicious when its iterable derives from an Eloquent/DB query source
9
+ * (::all(), ->get(), ->cursor(), DB::table(...)->get()) WITHOUT eager loading
10
+ * (->with(...) on the source chain, or a ->load(...) call on the variable
11
+ * before the loop). Inside such a loop, we flag:
12
+ * - static query calls (Model::find/where/..., DB::table(...))
13
+ * - lazy relation access on the loop variable (chained property access,
14
+ * count($var->rel), relation-method calls chained into query methods,
15
+ * foreach over $var->rel)
16
+ *
17
+ * NOT flagged (by construction): iterables from ->with()/->load(), constant
18
+ * array literals (bounded loops), chunk() callbacks (unknown-source iterables
19
+ * are skipped), whereIn-prefetch keyed lookups, plain scalar attribute access,
20
+ * and chained access to known non-relation attributes (Carbon dates).
21
+ *
22
+ * Deterministic pattern detection only — instance-level correctness is handled
23
+ * by the waiver process (see types.ts), never by this scanner claiming
24
+ * judgment it does not have.
25
+ */
26
+
27
+ import { readdirSync, readFileSync } from 'node:fs';
28
+ import { join, relative } from 'node:path';
29
+ import { parse_waiver, type Finding } from './types.js';
30
+ import { is_ignored_dir } from './types.js';
31
+
32
+ export interface FileInput {
33
+ path: string;
34
+ content: string;
35
+ }
36
+
37
+ /** Attributes commonly chained without being relations (Carbon casts etc.). */
38
+ const NON_RELATION_ATTRS = new Set([
39
+ 'created_at',
40
+ 'updated_at',
41
+ 'deleted_at',
42
+ 'published_at',
43
+ 'email_verified_at',
44
+ 'pivot',
45
+ ]);
46
+
47
+ /** Query methods that, chained onto a relation method call, execute a query. */
48
+ const QUERY_CHAIN_METHODS = 'get|first|count|pluck|sum|avg|min|max|exists|paginate|value';
49
+
50
+ /** Static entry points on a model class that build/execute a query. */
51
+ const STATIC_QUERY_RE =
52
+ /\b[A-Z]\w*::(?:find|findOrFail|where|whereIn|firstWhere|first|all|query|count|pluck|exists|sum)\s*\(/;
53
+ const DB_TABLE_RE = /\bDB::table\s*\(/;
54
+
55
+ /** Strip line comments and quoted string contents so braces/parens scan cleanly. */
56
+ function strip_noise(line: string): string {
57
+ return line
58
+ .replace(/'(?:[^'\\]|\\.)*'/g, "''")
59
+ .replace(/"(?:[^"\\]|\\.)*"/g, '""')
60
+ .replace(/\/\/.*$/, '');
61
+ }
62
+
63
+ type SourceKind = 'query' | 'eager-query' | 'constant' | 'other';
64
+
65
+ /** Classify a right-hand-side expression as a query source (eager or not). */
66
+ function classify_expr(expr: string): SourceKind {
67
+ const e = expr.trim();
68
+ if (e.startsWith('[')) return 'constant';
69
+ const is_query =
70
+ /\b[A-Z]\w*::(?:all|cursor)\s*\(\s*\)/.test(e) ||
71
+ ((/^[A-Z]\w*::/.test(e) || DB_TABLE_RE.test(e)) && /->(?:get|cursor)\s*\(\s*\)/.test(e));
72
+ if (!is_query) return 'other';
73
+ return /(?:::|->)with\s*\(/.test(e) ? 'eager-query' : 'query';
74
+ }
75
+
76
+ /** Find the line index of the matching close brace for a block opening at open_idx. */
77
+ function find_block_end(lines: string[], open_idx: number): number {
78
+ let depth = 0;
79
+ let opened = false;
80
+ for (let i = open_idx; i < lines.length; i++) {
81
+ const clean = strip_noise(lines[i]!);
82
+ for (const ch of clean) {
83
+ if (ch === '{') {
84
+ depth++;
85
+ opened = true;
86
+ } else if (ch === '}') {
87
+ depth--;
88
+ if (opened && depth === 0) return i;
89
+ }
90
+ }
91
+ }
92
+ return lines.length - 1;
93
+ }
94
+
95
+ interface InnerHit {
96
+ line_idx: number;
97
+ detail: string;
98
+ }
99
+
100
+ /** Scan a loop body for per-iteration query patterns relative to the loop variable. */
101
+ function scan_loop_body(lines: string[], start: number, end: number, loop_var: string): InnerHit[] {
102
+ const hits: InnerHit[] = [];
103
+ const v = loop_var.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
104
+ const lazy_chain_re = new RegExp(`\\$${v}->(\\w+)(?!\\s*\\()->`);
105
+ const count_lazy_re = new RegExp(`\\bcount\\(\\s*\\$${v}->(\\w+)\\s*\\)`);
106
+ const relation_method_query_re = new RegExp(
107
+ `\\$${v}->\\w+\\(\\)\\s*->\\s*(?:${QUERY_CHAIN_METHODS})\\s*\\(`,
108
+ );
109
+ const foreach_lazy_re = new RegExp(`foreach\\s*\\(\\s*\\$${v}->(\\w+)`);
110
+
111
+ for (let i = start; i <= end; i++) {
112
+ const clean = strip_noise(lines[i]!);
113
+
114
+ if (STATIC_QUERY_RE.test(clean) || DB_TABLE_RE.test(clean)) {
115
+ hits.push({ line_idx: i, detail: 'query call inside loop body' });
116
+ continue;
117
+ }
118
+ const chain = clean.match(lazy_chain_re);
119
+ if (chain && chain[1] && !NON_RELATION_ATTRS.has(chain[1])) {
120
+ hits.push({
121
+ line_idx: i,
122
+ detail: `lazy relation access $${loop_var}->${chain[1]} inside loop body`,
123
+ });
124
+ continue;
125
+ }
126
+ const counted = clean.match(count_lazy_re);
127
+ if (counted && counted[1] && !NON_RELATION_ATTRS.has(counted[1])) {
128
+ hits.push({
129
+ line_idx: i,
130
+ detail: `count() over lazy relation $${loop_var}->${counted[1]} inside loop body`,
131
+ });
132
+ continue;
133
+ }
134
+ if (relation_method_query_re.test(clean)) {
135
+ hits.push({
136
+ line_idx: i,
137
+ detail: `relation-method query on $${loop_var} inside loop body`,
138
+ });
139
+ continue;
140
+ }
141
+ const inner_iter = clean.match(foreach_lazy_re);
142
+ if (inner_iter && inner_iter[1] && !NON_RELATION_ATTRS.has(inner_iter[1])) {
143
+ hits.push({
144
+ line_idx: i,
145
+ detail: `iteration over lazy relation $${loop_var}->${inner_iter[1]}`,
146
+ });
147
+ }
148
+ }
149
+ return hits;
150
+ }
151
+
152
+ /** Detect N+1 query patterns in the given PHP files. Returns F1 gate findings. */
153
+ export function detect_n1(files: FileInput[]): Finding[] {
154
+ const findings: Finding[] = [];
155
+
156
+ for (const { path, content } of files) {
157
+ const lines = content.split('\n');
158
+
159
+ // Pass 1 — track variable sources: assignments + ->load() eager upgrades.
160
+ const sources = new Map<string, SourceKind>();
161
+ for (const raw of lines) {
162
+ const clean = strip_noise(raw);
163
+ const assign = clean.match(/^\s*\$(\w+)\s*=\s*(.+);\s*$/);
164
+ if (assign) {
165
+ sources.set(assign[1]!, classify_expr(assign[2]!));
166
+ continue;
167
+ }
168
+ const loaded = clean.match(/^\s*\$(\w+)->load(?:Missing)?\s*\(/);
169
+ if (loaded && sources.get(loaded[1]!) === 'query') {
170
+ sources.set(loaded[1]!, 'eager-query');
171
+ }
172
+ }
173
+
174
+ // Pass 2 — analyze foreach loops whose iterable is a non-eager query source.
175
+ for (let i = 0; i < lines.length; i++) {
176
+ const clean = strip_noise(lines[i]!);
177
+ const fe = clean.match(/foreach\s*\(\s*(.+?)\s+as\s+(?:\$\w+\s*=>\s*)?\$(\w+)\s*\)/);
178
+ if (!fe) continue;
179
+
180
+ const [, src_expr, loop_var] = fe;
181
+ const var_ref = src_expr!.trim().match(/^\$(\w+)$/);
182
+ const kind: SourceKind = var_ref
183
+ ? (sources.get(var_ref[1]!) ?? 'other')
184
+ : classify_expr(src_expr!);
185
+ if (kind !== 'query') continue;
186
+
187
+ const body_end = find_block_end(lines, i);
188
+ for (const hit of scan_loop_body(lines, i + 1, body_end, loop_var!)) {
189
+ const finding: Finding = {
190
+ failure_class: 'F1',
191
+ rule: 'R-A1',
192
+ file: path,
193
+ line: hit.line_idx + 1,
194
+ message: `N+1: ${hit.detail}; iterable ${src_expr!.trim()} is a non-eager query result`,
195
+ tier: 'gate',
196
+ };
197
+ const waiver = parse_waiver(lines, hit.line_idx);
198
+ if (waiver) {
199
+ finding.waived = true;
200
+ finding.waiver_reason = waiver.reason;
201
+ }
202
+ findings.push(finding);
203
+ }
204
+ }
205
+ }
206
+
207
+ return findings;
208
+ }
209
+
210
+ /** Convenience: recursively scan a directory for .php files and run detect_n1. */
211
+ export function scan_dir(dir: string): Finding[] {
212
+ const files: FileInput[] = [];
213
+ const walk = (d: string): void => {
214
+ for (const entry of readdirSync(d, { withFileTypes: true })) {
215
+ const full = join(d, entry.name);
216
+ if (entry.isDirectory()) {
217
+ if (!is_ignored_dir(entry.name)) walk(full);
218
+ }
219
+ else if (entry.name.endsWith('.php')) {
220
+ files.push({ path: relative(process.cwd(), full), content: readFileSync(full, 'utf8') });
221
+ }
222
+ }
223
+ };
224
+ walk(dir);
225
+ return detect_n1(files);
226
+ }
@@ -0,0 +1,441 @@
1
+ /**
2
+ * Offload detection — spike S0.5, road-to-scale-and-history-discipline
3
+ * Phase 0. Deterministic pattern detection for:
4
+ *
5
+ * F9 (R-A8) — offloadable-catalog calls inside a request handler
6
+ * F11 (R-A10) — non-durable async for must-not-lose work (fire-and-forget,
7
+ * sync listeners doing catalog work, dispatchAfterResponse /
8
+ * shutdown hooks carrying must-not-lose jobs)
9
+ *
10
+ * Scope-aware: the same call inside a queued job/listener/worker is the FIX,
11
+ * not the bug, and never fires. Waivers (`// sync-required: <reason>`,
12
+ * `// accepted-loss: <reason>`) mark findings as waived per types.parse_waiver.
13
+ * The catalog itself is config data in offload_catalog.ts.
14
+ */
15
+ import * as fs from 'node:fs';
16
+ import * as path from 'node:path';
17
+
18
+ import type { Finding } from './types.js';
19
+ import { parse_waiver, is_ignored_dir } from './types.js';
20
+ import { ELOQUENT_CATALOG, TS_CATALOG, MUST_NOT_LOSE_NAME_RE, type StackCatalog } from './offload_catalog.js';
21
+
22
+ export type Stack = 'eloquent' | 'ts';
23
+
24
+ export interface SourceFile {
25
+ path: string;
26
+ content: string;
27
+ }
28
+
29
+ interface Span {
30
+ start: number; // 0-indexed inclusive
31
+ end: number; // 0-indexed inclusive
32
+ }
33
+
34
+ // ------------------------------------------------------------ helpers
35
+
36
+ /** Blank comment bodies and string contents, preserving line structure. */
37
+ function mask_code(text: string): string {
38
+ let out = '';
39
+ let i = 0;
40
+ let mode: 'code' | 'line' | 'block' | 's1' | 's2' | 'tpl' = 'code';
41
+ while (i < text.length) {
42
+ const c = text[i];
43
+ const next = text[i + 1];
44
+ if (mode === 'code') {
45
+ if (c === '/' && next === '/') {
46
+ mode = 'line';
47
+ out += '//';
48
+ i += 2;
49
+ continue;
50
+ }
51
+ if (c === '/' && next === '*') {
52
+ mode = 'block';
53
+ out += ' ';
54
+ i += 2;
55
+ continue;
56
+ }
57
+ if (c === "'") mode = 's1';
58
+ else if (c === '"') mode = 's2';
59
+ else if (c === '`') mode = 'tpl';
60
+ out += c;
61
+ i += 1;
62
+ continue;
63
+ }
64
+ if (mode === 'line') {
65
+ if (c === '\n') mode = 'code';
66
+ out += c === '\n' ? c : c; // keep line comments verbatim (waivers live here)
67
+ i += 1;
68
+ continue;
69
+ }
70
+ if (mode === 'block') {
71
+ if (c === '*' && next === '/') {
72
+ mode = 'code';
73
+ out += ' ';
74
+ i += 2;
75
+ continue;
76
+ }
77
+ out += c === '\n' ? '\n' : ' ';
78
+ i += 1;
79
+ continue;
80
+ }
81
+ // strings: keep the protocol prefix visible for URL catalog patterns
82
+ if ((mode === 's1' && c === "'") || (mode === 's2' && c === '"') || (mode === 'tpl' && c === '`')) {
83
+ mode = 'code';
84
+ out += c;
85
+ i += 1;
86
+ continue;
87
+ }
88
+ if (c === '\\') {
89
+ out += '\\' + (next ?? '');
90
+ i += 2;
91
+ continue;
92
+ }
93
+ out += c === '\n' ? '\n' : c;
94
+ i += 1;
95
+ continue;
96
+ }
97
+ return out;
98
+ }
99
+
100
+ /**
101
+ * Blank string CONTENTS (quotes stay) — for brace math only, so a `{id}`
102
+ * inside a route path or template literal cannot corrupt scope spans.
103
+ */
104
+ function blank_strings(text: string): string {
105
+ let out = '';
106
+ let mode: 'code' | 's1' | 's2' | 'tpl' | 'line' | 'block' = 'code';
107
+ for (let i = 0; i < text.length; i += 1) {
108
+ const c = text[i];
109
+ const next = text[i + 1];
110
+ if (mode === 'code') {
111
+ if (c === '/' && next === '/') mode = 'line';
112
+ else if (c === '/' && next === '*') mode = 'block';
113
+ else if (c === "'") mode = 's1';
114
+ else if (c === '"') mode = 's2';
115
+ else if (c === '`') mode = 'tpl';
116
+ out += c;
117
+ continue;
118
+ }
119
+ if (mode === 'line') {
120
+ if (c === '\n') mode = 'code';
121
+ out += c;
122
+ continue;
123
+ }
124
+ if (mode === 'block') {
125
+ if (c === '*' && next === '/') {
126
+ mode = 'code';
127
+ out += '*';
128
+ continue;
129
+ }
130
+ out += c === '\n' ? '\n' : ' ';
131
+ continue;
132
+ }
133
+ if (c === '\\') {
134
+ out += ' ';
135
+ i += 1;
136
+ continue;
137
+ }
138
+ if ((mode === 's1' && c === "'") || (mode === 's2' && c === '"') || (mode === 'tpl' && c === '`')) {
139
+ mode = 'code';
140
+ out += c;
141
+ continue;
142
+ }
143
+ out += c === '\n' ? '\n' : ' ';
144
+ }
145
+ return out;
146
+ }
147
+
148
+ /** Find the span of the brace block opening at/after `from` (0-indexed line). */
149
+ function brace_span(lines: string[], from: number): Span | null {
150
+ let depth = 0;
151
+ let opened = false;
152
+ for (let i = from; i < lines.length; i += 1) {
153
+ for (const ch of lines[i]!) {
154
+ if (ch === '{') {
155
+ depth += 1;
156
+ opened = true;
157
+ } else if (ch === '}') {
158
+ depth -= 1;
159
+ if (opened && depth === 0) return { start: from, end: i };
160
+ }
161
+ }
162
+ if (opened && depth === 0) return { start: from, end: i };
163
+ }
164
+ return opened ? { start: from, end: lines.length - 1 } : null;
165
+ }
166
+
167
+ function in_spans(line0: number, spans: Span[]): boolean {
168
+ return spans.some((s) => line0 >= s.start && line0 <= s.end);
169
+ }
170
+
171
+ // ------------------------------------------------------------ PHP scopes
172
+
173
+ interface PhpScopes {
174
+ handler_spans: Span[];
175
+ queued_spans: Span[]; // ShouldQueue job/listener bodies — never fire
176
+ sync_listener_spans: Span[]; // listener WITHOUT ShouldQueue — F11 on catalog work
177
+ }
178
+
179
+ function php_scopes(file: string, lines: string[]): PhpScopes {
180
+ const text = lines.join('\n');
181
+ const blanked = blank_strings(text).split('\n');
182
+ const handler_spans: Span[] = [];
183
+ const queued_spans: Span[] = [];
184
+ const sync_listener_spans: Span[] = [];
185
+
186
+ const is_controller_file =
187
+ /Http[\\/]Controllers/.test(file) || /extends\s+Controller\b/.test(text);
188
+ const is_listener_file = /namespace\s+App\\Listeners|[\\/]Listeners[\\/]/.test(file + '\n' + text);
189
+ const is_job_file = /namespace\s+App\\Jobs|[\\/]Jobs[\\/]/.test(file + '\n' + text);
190
+
191
+ for (let i = 0; i < lines.length; i += 1) {
192
+ const l = lines[i]!;
193
+ // Class bodies
194
+ const cls = l.match(/\bclass\s+(\w+)/);
195
+ if (cls) {
196
+ const span = brace_span(blanked, i);
197
+ if (!span) continue;
198
+ const head = lines.slice(i, Math.min(i + 3, lines.length)).join(' ');
199
+ const implements_queue = /implements[^{]*\bShouldQueue\b/.test(head);
200
+ if (implements_queue) queued_spans.push(span);
201
+ else if (is_listener_file) sync_listener_spans.push(span);
202
+ else if (is_controller_file || /extends\s+Controller\b/.test(head)) handler_spans.push(span);
203
+ else if (is_job_file) queued_spans.push(span); // non-queued job class: treated as worker context
204
+ }
205
+ // Route closures
206
+ if (/Route::(get|post|put|patch|delete|any)\s*\(/.test(l) && /function\s*\(/.test(lines.slice(i, i + 2).join(' '))) {
207
+ const span = brace_span(blanked, i);
208
+ if (span) handler_spans.push(span);
209
+ }
210
+ }
211
+ return { handler_spans, queued_spans, sync_listener_spans };
212
+ }
213
+
214
+ // ------------------------------------------------------------ TS scopes
215
+
216
+ interface TsScopes {
217
+ handler_spans: Span[];
218
+ worker: boolean; // whole file is worker/queue context
219
+ }
220
+
221
+ function ts_scopes(file: string, lines: string[]): TsScopes {
222
+ const text = lines.join('\n');
223
+ const blanked = blank_strings(text).split('\n');
224
+ const worker =
225
+ /[\\/](workers?|queues?|jobs|consumers?)[\\/]/.test(file) ||
226
+ /new\s+Worker\s*\(/.test(text) ||
227
+ /[\\/]scripts[\\/]/.test(file);
228
+ const handler_spans: Span[] = [];
229
+ if (!worker) {
230
+ for (let i = 0; i < lines.length; i += 1) {
231
+ const l = lines[i]!;
232
+ if (
233
+ /\b(app|router|fastify)\.(get|post|put|patch|delete|all)\s*\(/.test(l) ||
234
+ /export\s+(default\s+)?async\s+function\s+(GET|POST|PUT|PATCH|DELETE)\b/.test(l) ||
235
+ /export\s+const\s+(GET|POST|PUT|PATCH|DELETE)\s*=/.test(l)
236
+ ) {
237
+ const span = brace_span(blanked, i);
238
+ if (span) handler_spans.push(span);
239
+ }
240
+ }
241
+ }
242
+ return { handler_spans, worker };
243
+ }
244
+
245
+ // ------------------------------------------------------------ detection
246
+
247
+ function make_finding(
248
+ file: string,
249
+ lines: string[],
250
+ line0: number,
251
+ failure_class: 'F9' | 'F11',
252
+ rule: 'R-A8' | 'R-A10',
253
+ message: string,
254
+ ): Finding {
255
+ const waiver = parse_waiver(lines, line0);
256
+ return {
257
+ failure_class,
258
+ rule,
259
+ file,
260
+ line: line0 + 1,
261
+ message,
262
+ tier: 'gate',
263
+ ...(waiver ? { waived: true, waiver_reason: waiver.reason } : {}),
264
+ };
265
+ }
266
+
267
+ function detect_php(file: SourceFile, catalog: StackCatalog): Finding[] {
268
+ const lines = file.content.split('\n');
269
+ const masked_lines = mask_code(file.content).split('\n');
270
+ const scopes = php_scopes(file.path, lines);
271
+ const findings: Finding[] = [];
272
+
273
+ const catalog_hit = (l: string): { label: string; must_not_lose: boolean } | null => {
274
+ for (const alt of catalog.allowed_alternatives) {
275
+ if (new RegExp(alt).test(l)) return null;
276
+ }
277
+ for (const entry of catalog.offloadable) {
278
+ if (new RegExp(entry.pattern).test(l)) return entry;
279
+ }
280
+ return null;
281
+ };
282
+
283
+ for (let i = 0; i < masked_lines.length; i += 1) {
284
+ const l = masked_lines[i]!;
285
+ if (in_spans(i, scopes.queued_spans)) continue;
286
+
287
+ const in_handler = in_spans(i, scopes.handler_spans);
288
+ const in_sync_listener = in_spans(i, scopes.sync_listener_spans);
289
+ if (!in_handler && !in_sync_listener) continue;
290
+
291
+ // Notification::send — queued when the notification class (in-file)
292
+ // implements ShouldQueue; conservative skip when the class is unknown.
293
+ if (/Notification(Facade)?::send\s*\(/.test(l)) {
294
+ const cls = l.match(/new\s+(\w+)\s*\(/);
295
+ const queued =
296
+ !cls ||
297
+ new RegExp(String.raw`class\s+${cls[1]}[^{]*implements[^{]*ShouldQueue`).test(
298
+ file.content,
299
+ );
300
+ if (!queued) {
301
+ findings.push(
302
+ make_finding(file.path, lines, i, 'F9', 'R-A8', 'synchronous notification send in request handler — queue it (ShouldQueue)'),
303
+ );
304
+ }
305
+ continue;
306
+ }
307
+
308
+ const hit = catalog_hit(l);
309
+ if (hit) {
310
+ if (in_sync_listener) {
311
+ findings.push(
312
+ make_finding(file.path, lines, i, 'F11', 'R-A10', `${hit.label} in a NON-queued listener — runs synchronously in the firing request; implement ShouldQueue`),
313
+ );
314
+ } else {
315
+ findings.push(
316
+ make_finding(file.path, lines, i, 'F9', 'R-A8', `${hit.label} in request handler — offload to a queued job (validate → persist → dispatch → respond)`),
317
+ );
318
+ }
319
+ continue;
320
+ }
321
+
322
+ if (in_handler) {
323
+ // Unbounded bulk mutation: ::query()->update( without a ->where( in the chain.
324
+ if (/::query\(\)\s*->\s*update\s*\(/.test(l) && !/->\s*where/.test(l)) {
325
+ findings.push(
326
+ make_finding(file.path, lines, i, 'F9', 'R-A8', 'unbounded bulk mutation over a whole table in the handler — offload or bound it'),
327
+ );
328
+ continue;
329
+ }
330
+ // dispatchAfterResponse for must-not-lose job classes.
331
+ const dar = l.match(/\b(\w+)::dispatchAfterResponse\s*\(/);
332
+ if (dar && MUST_NOT_LOSE_NAME_RE.test(dar[1]!)) {
333
+ findings.push(
334
+ make_finding(file.path, lines, i, 'F11', 'R-A10', `dispatchAfterResponse(${dar[1]}) — in-process after-response work is lost on process kill; use a durable queue`),
335
+ );
336
+ continue;
337
+ }
338
+ // register_shutdown_function carrying catalog work.
339
+ if (/register_shutdown_function\s*\(/.test(l)) {
340
+ const span = brace_span(masked_lines, i) ?? { start: i, end: Math.min(i + 10, masked_lines.length - 1) };
341
+ const body = masked_lines.slice(span.start, span.end + 1).join('\n');
342
+ const inner = catalog.offloadable.find((e) => new RegExp(e.pattern).test(body));
343
+ if (inner) {
344
+ findings.push(
345
+ make_finding(file.path, lines, i, 'F11', 'R-A10', `${inner.label} inside a shutdown hook — silently lost on process kill; use a durable queue`),
346
+ );
347
+ }
348
+ }
349
+ }
350
+ }
351
+ return findings;
352
+ }
353
+
354
+ function detect_ts(file: SourceFile, catalog: StackCatalog): Finding[] {
355
+ const lines = file.content.split('\n');
356
+ const masked_lines = mask_code(file.content).split('\n');
357
+ const scopes = ts_scopes(file.path, lines);
358
+ if (scopes.worker) return [];
359
+ const findings: Finding[] = [];
360
+
361
+ for (let i = 0; i < masked_lines.length; i += 1) {
362
+ if (!in_spans(i, scopes.handler_spans)) continue;
363
+ const l = masked_lines[i]!;
364
+
365
+ let allowed = false;
366
+ for (const alt of catalog.allowed_alternatives) {
367
+ if (new RegExp(alt).test(l)) {
368
+ allowed = true;
369
+ break;
370
+ }
371
+ }
372
+ if (allowed) continue;
373
+
374
+ // setTimeout/setImmediate background work carrying catalog calls.
375
+ if (/\b(setTimeout|setImmediate)\s*\(/.test(l)) {
376
+ const span = brace_span(masked_lines, i) ?? { start: i, end: Math.min(i + 10, masked_lines.length - 1) };
377
+ const body = masked_lines.slice(span.start, span.end + 1).join('\n');
378
+ const inner = catalog.offloadable.find(
379
+ (e) => e.must_not_lose && new RegExp(e.pattern).test(body),
380
+ );
381
+ if (inner) {
382
+ findings.push(
383
+ make_finding(file.path, lines, i, 'F11', 'R-A10', `${inner.label} inside setTimeout — in-process fire-and-forget is lost on process kill; use a durable queue`),
384
+ );
385
+ continue;
386
+ }
387
+ }
388
+
389
+ const hit = catalog.offloadable.find((e) => new RegExp(e.pattern).test(l));
390
+ if (!hit) continue;
391
+
392
+ // Unbounded updateMany: no `where` on the same statement line.
393
+ if (hit.label === 'unbounded bulk mutation' && /where\s*:/.test(l)) continue;
394
+
395
+ const fire_and_forget =
396
+ hit.must_not_lose &&
397
+ !/\bawait\b/.test(l) &&
398
+ !/\breturn\b/.test(l) &&
399
+ !/\.then\s*\(/.test(l) &&
400
+ !/=\s*\w/.test(l.split(l.match(new RegExp(hit.pattern))?.[0] ?? '')[0] ?? '');
401
+
402
+ if (fire_and_forget) {
403
+ findings.push(
404
+ make_finding(file.path, lines, i, 'F11', 'R-A10', `un-awaited ${hit.label} in request handler — fire-and-forget must-not-lose work; use a durable queue`),
405
+ );
406
+ } else {
407
+ findings.push(
408
+ make_finding(file.path, lines, i, 'F9', 'R-A8', `${hit.label} in request handler — offload to a queued job (validate → persist → dispatch → respond)`),
409
+ );
410
+ }
411
+ }
412
+ return findings;
413
+ }
414
+
415
+ // ------------------------------------------------------------ public API
416
+
417
+ export function detect_offload(files: SourceFile[], stack: Stack): Finding[] {
418
+ const catalog = stack === 'eloquent' ? ELOQUENT_CATALOG : TS_CATALOG;
419
+ const out: Finding[] = [];
420
+ for (const f of files) {
421
+ out.push(...(stack === 'eloquent' ? detect_php(f, catalog) : detect_ts(f, catalog)));
422
+ }
423
+ return out;
424
+ }
425
+
426
+ export function scan_dir(dir: string, stack: Stack): Finding[] {
427
+ const files: SourceFile[] = [];
428
+ const walk = (d: string): void => {
429
+ for (const e of fs.readdirSync(d, { withFileTypes: true })) {
430
+ const p = path.join(d, e.name);
431
+ if (e.isDirectory()) {
432
+ if (!is_ignored_dir(e.name)) walk(p);
433
+ }
434
+ else if (stack === 'eloquent' ? p.endsWith('.php') : /\.(ts|js|mjs)$/.test(p)) {
435
+ files.push({ path: p, content: fs.readFileSync(p, 'utf8') });
436
+ }
437
+ }
438
+ };
439
+ walk(dir);
440
+ return detect_offload(files, stack);
441
+ }