@event4u/agent-config 9.7.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 (901) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +314 -190
  3. package/CONTRIBUTING.md +23 -7
  4. package/MIGRATION.md +20 -0
  5. package/README.md +57 -11
  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/commit/in-chunks.md +8 -0
  12. package/dist/agent-src/commands/commit.md +17 -0
  13. package/dist/agent-src/commands/fix/portability.md +2 -2
  14. package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
  15. package/dist/agent-src/commands/fix/refs.md +2 -2
  16. package/dist/agent-src/commands/fix/route.md +4 -3
  17. package/dist/agent-src/commands/fix.md +9 -6
  18. package/dist/agent-src/commands/ghostwriter.md +1 -1
  19. package/dist/agent-src/commands/image.md +1 -1
  20. package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
  21. package/dist/agent-src/commands/optimize/skills.md +2 -2
  22. package/dist/agent-src/commands/post-as.md +1 -1
  23. package/dist/agent-src/commands/pr/create.md +4 -0
  24. package/dist/agent-src/commands/research.md +1 -1
  25. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  26. package/dist/agent-src/commands/security-audit-config.md +1 -1
  27. package/dist/agent-src/commands/team/delegate.md +4 -0
  28. package/dist/agent-src/commands/video.md +1 -1
  29. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
  30. package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
  31. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
  32. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
  33. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
  34. package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
  35. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
  36. package/dist/agent-src/contexts/override-system.md +75 -5
  37. package/dist/agent-src/rules/code-provenance.md +112 -0
  38. package/dist/agent-src/rules/context-hygiene.md +2 -0
  39. package/dist/agent-src/rules/doc-screenshot-hygiene.md +97 -0
  40. package/dist/agent-src/rules/domain-safety-pii.md +1 -0
  41. package/dist/agent-src/rules/external-code-graph-interop.md +13 -3
  42. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
  43. package/dist/agent-src/rules/git-history-discipline.md +2 -0
  44. package/dist/agent-src/rules/history-discipline.md +80 -0
  45. package/dist/agent-src/rules/language-and-tone.md +2 -0
  46. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
  47. package/dist/agent-src/rules/media-governance-routing.md +2 -0
  48. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  49. package/dist/agent-src/rules/no-roadmap-references.md +4 -1
  50. package/dist/agent-src/rules/non-destructive-by-default.md +20 -0
  51. package/dist/agent-src/rules/onboarding-gate.md +2 -0
  52. package/dist/agent-src/rules/output-discipline.md +2 -0
  53. package/dist/agent-src/rules/persona-governance.md +2 -0
  54. package/dist/agent-src/rules/php-coding.md +1 -0
  55. package/dist/agent-src/rules/preservation-guard.md +3 -0
  56. package/dist/agent-src/rules/reviewer-awareness.md +1 -0
  57. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
  58. package/dist/agent-src/rules/roadmap-progress-sync.md +9 -0
  59. package/dist/agent-src/rules/scale-discipline.md +92 -0
  60. package/dist/agent-src/rules/secret-vcs-guard.md +106 -0
  61. package/dist/agent-src/rules/security-sensitive-stop.md +11 -1
  62. package/dist/agent-src/rules/session-canary.md +77 -0
  63. package/dist/agent-src/rules/skill-quality.md +2 -0
  64. package/dist/agent-src/rules/source-confidentiality.md +2 -0
  65. package/dist/agent-src/rules/source-of-truth.md +2 -0
  66. package/dist/agent-src/rules/telegraph-speak.md +2 -0
  67. package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -1
  68. package/dist/agent-src/rules/tool-safety.md +4 -1
  69. package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
  70. package/dist/agent-src/rules/verify-before-complete.md +2 -0
  71. package/dist/agent-src/skills/adr-create/SKILL.md +17 -1
  72. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  73. package/dist/agent-src/skills/code-intelligence/SKILL.md +97 -0
  74. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  75. package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
  76. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  77. package/dist/agent-src/skills/design-review/SKILL.md +5 -6
  78. package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
  79. package/dist/agent-src/skills/gated-reach/SKILL.md +185 -0
  80. package/dist/agent-src/skills/gated-reach/evals/triggers.json +72 -0
  81. package/dist/agent-src/skills/history-design/SKILL.md +101 -0
  82. package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
  83. package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
  84. package/dist/agent-src/skills/image-analyser/SKILL.md +14 -12
  85. package/dist/agent-src/skills/image-editing/SKILL.md +2 -1
  86. package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
  87. package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
  88. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  89. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
  90. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
  91. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
  92. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
  93. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
  94. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
  95. package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
  96. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  97. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
  98. package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
  99. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
  100. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
  101. package/dist/agent-src/skills/readme-writing/SKILL.md +6 -1
  102. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
  103. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
  104. package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
  105. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
  106. package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
  107. package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
  108. package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
  109. package/dist/agent-src/skills/screenshot-hygiene/SKILL.md +171 -0
  110. package/dist/agent-src/skills/secrets-management/SKILL.md +43 -1
  111. package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
  112. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
  113. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
  114. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  115. package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
  116. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
  117. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
  118. package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +29 -0
  119. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +29 -0
  120. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge.md +29 -0
  121. package/dist/agent-src/skills/subagent-orchestration/prompts/do-competitively.md +29 -0
  122. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-parallel.md +29 -0
  123. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +29 -0
  124. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-worktrees.md +29 -0
  125. package/dist/agent-src/skills/subagent-orchestration/prompts/judge-with-debate.md +29 -0
  126. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  127. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
  128. package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
  129. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +4 -0
  130. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
  131. package/dist/agent-src/templates/AGENTS.md +1 -1
  132. package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
  133. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  134. package/dist/agent-src/templates/command.md +3 -3
  135. package/dist/agent-src/templates/github-workflows/secret-scan.yml +65 -0
  136. package/dist/agent-src/templates/persona.md +2 -2
  137. package/dist/agent-src/templates/rule.md +2 -2
  138. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  139. package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
  140. package/dist/cli/commands/doctorShell.js +20 -0
  141. package/dist/cli/commands/doctorShell.js.map +1 -1
  142. package/dist/cli/commands/rtkDetect.js +58 -0
  143. package/dist/cli/commands/rtkDetect.js.map +1 -0
  144. package/dist/cli/configRoot.js +112 -0
  145. package/dist/cli/configRoot.js.map +1 -0
  146. package/dist/cli/configRoot.test.js +97 -0
  147. package/dist/cli/configRoot.test.js.map +1 -0
  148. package/dist/cli/firstRunNotice.js +70 -0
  149. package/dist/cli/firstRunNotice.js.map +1 -0
  150. package/dist/cli/help.js +4 -1
  151. package/dist/cli/help.js.map +1 -1
  152. package/dist/cli/main.js +54 -5
  153. package/dist/cli/main.js.map +1 -1
  154. package/dist/cli/registry.js +8 -1
  155. package/dist/cli/registry.js.map +1 -1
  156. package/dist/discovery/deprecation-report.md +1 -1
  157. package/dist/discovery/discovery-manifest.json +502 -101
  158. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  159. package/dist/discovery/discovery-manifest.summary.md +6 -4
  160. package/dist/discovery/orphan-report.md +1 -1
  161. package/dist/discovery/packs.json +95 -8
  162. package/dist/discovery/trust-report.md +11 -11
  163. package/dist/discovery/workspaces.json +36 -7
  164. package/dist/hooks/dispatch.js +19475 -0
  165. package/dist/install/agentSwitchDetection.js +75 -0
  166. package/dist/install/agentSwitchDetection.js.map +1 -0
  167. package/dist/install/agentSwitchProfile.js +117 -0
  168. package/dist/install/agentSwitchProfile.js.map +1 -0
  169. package/dist/install/atomic.js +1 -1
  170. package/dist/install/detect.js +1 -1
  171. package/dist/install/install.mjs +791 -486
  172. package/dist/install/rtkDetection.js +213 -0
  173. package/dist/install/rtkDetection.js.map +1 -0
  174. package/dist/install/rule_scope.js +2 -1
  175. package/dist/install/rule_scope.js.map +1 -1
  176. package/dist/install/types.js +2 -2
  177. package/dist/install/wizard-plan.js +1 -1
  178. package/dist/install/wizardDismissals.js +58 -0
  179. package/dist/install/wizardDismissals.js.map +1 -0
  180. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  181. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  182. package/dist/mcp/registry-manifest.json +15 -4
  183. package/dist/mcp/server.json +20 -0
  184. package/dist/mcp/server.mjs +44292 -0
  185. package/dist/router.json +1 -1
  186. package/dist/scripts/condense.js +14 -7
  187. package/dist/scripts/condense.js.map +1 -1
  188. package/dist/server/app.js +12 -0
  189. package/dist/server/app.js.map +1 -1
  190. package/dist/server/io/sharedWriteCheck.js +101 -0
  191. package/dist/server/io/sharedWriteCheck.js.map +1 -0
  192. package/dist/server/routes/ping.js +32 -0
  193. package/dist/server/routes/ping.js.map +1 -1
  194. package/dist/server/routes/settings.js +21 -4
  195. package/dist/server/routes/settings.js.map +1 -1
  196. package/dist/server/routes/userMd.js +21 -4
  197. package/dist/server/routes/userMd.js.map +1 -1
  198. package/dist/server/routes/wizard.js +68 -25
  199. package/dist/server/routes/wizard.js.map +1 -1
  200. package/dist/server/schemas/settings.js +12 -2
  201. package/dist/server/schemas/settings.js.map +1 -1
  202. package/dist/server/serverInfo.js +6 -2
  203. package/dist/server/serverInfo.js.map +1 -1
  204. package/dist/server/token.js +11 -4
  205. package/dist/server/token.js.map +1 -1
  206. package/dist/server/writeRoot.js +15 -1
  207. package/dist/server/writeRoot.js.map +1 -1
  208. package/dist/shared/capabilities.js +33 -0
  209. package/dist/shared/capabilities.js.map +1 -0
  210. package/dist/shared/capabilities.test.js +39 -0
  211. package/dist/shared/capabilities.test.js.map +1 -0
  212. package/dist/ui/assets/index-BpSQt5vm.js +40 -0
  213. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
  214. package/dist/ui/assets/index-jSfMW8_t.css +1 -0
  215. package/dist/ui/index.html +15 -6
  216. package/docs/MIGRATION.md +16 -0
  217. package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
  218. package/package.json +22 -9
  219. package/src/agent-src/templates/AGENTS.md +1 -1
  220. package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  221. package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
  222. package/src/config/agent-settings.template.yml +94 -13
  223. package/src/config/discovery/packs.yml +22 -0
  224. package/src/config/discovery/workspaces.yml +1 -1
  225. package/src/config/evaluator-budgets.json +47 -0
  226. package/src/config/hook-latency-budget.json +20 -0
  227. package/src/config/reach-channels.yml +217 -0
  228. package/src/config/reach-prescriptions-intake.yml +200 -0
  229. package/src/install/agentSwitchDetection.ts +90 -0
  230. package/src/install/agentSwitchProfile.ts +131 -0
  231. package/src/install/atomic.ts +1 -1
  232. package/src/install/detect.ts +1 -1
  233. package/src/install/rtkDetection.ts +274 -0
  234. package/src/install/rule_scope.ts +9 -2
  235. package/src/install/types.ts +2 -2
  236. package/src/install/wizard-plan.ts +1 -1
  237. package/src/install/wizardDismissals.ts +60 -0
  238. package/src/scripts/_cli/cmd_doctor.ts +62 -1
  239. package/src/scripts/_cli/cmd_memory_get.ts +197 -0
  240. package/src/scripts/_cli/cmd_refresh.ts +30 -0
  241. package/src/scripts/_dispatch.bash +96 -0
  242. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
  243. package/src/scripts/_lib/auto_dispatch.ts +76 -0
  244. package/src/scripts/_lib/detect_target_license.ts +714 -0
  245. package/src/scripts/_lib/exec_evidence.ts +251 -0
  246. package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +15 -0
  247. package/src/scripts/_lib/fixtures/secret-detector/positives.txt +15 -0
  248. package/src/scripts/_lib/install_drift.ts +194 -0
  249. package/src/scripts/_lib/kernel_rules.ts +46 -0
  250. package/src/scripts/_lib/memory_fts_index.ts +390 -0
  251. package/src/scripts/_lib/orchestration_record.ts +91 -2
  252. package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
  253. package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
  254. package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
  255. package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
  256. package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
  257. package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
  258. package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
  259. package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
  260. package/src/scripts/_lib/persistence/types.ts +109 -0
  261. package/src/scripts/_lib/reddit_thread_parse.ts +598 -0
  262. package/src/scripts/_lib/risk_paths.ts +160 -0
  263. package/src/scripts/_lib/rtk_allowlist.ts +44 -0
  264. package/src/scripts/_lib/secret_detector.test.ts +108 -0
  265. package/src/scripts/_lib/secret_detector.ts +328 -0
  266. package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
  267. package/src/scripts/_lib/spawn_env.ts +7 -0
  268. package/src/scripts/_lib/sqlite_guard.ts +191 -0
  269. package/src/scripts/_lib/subagent_spawn.ts +53 -0
  270. package/src/scripts/_lib/tool_probe.ts +359 -0
  271. package/src/scripts/_lib/worker_budget.ts +107 -0
  272. package/src/scripts/adr/regenerate_index.ts +81 -6
  273. package/src/scripts/ai_council/blind_review.ts +0 -0
  274. package/src/scripts/ai_council/config.ts +12 -6
  275. package/src/scripts/ai_council/orchestrator.ts +73 -3
  276. package/src/scripts/ai_team/review_gate.ts +8 -10
  277. package/src/scripts/ai_team/team_dispatch.ts +48 -0
  278. package/src/scripts/audit_adr_coverage.ts +33 -0
  279. package/src/scripts/audit_initial_context.ts +1 -1
  280. package/src/scripts/bench_cross_source_eval.ts +400 -0
  281. package/src/scripts/bench_honesty_score.ts +1093 -0
  282. package/src/scripts/bench_hook_latency.ts +218 -0
  283. package/src/scripts/build_mcp_catalog.ts +275 -0
  284. package/src/scripts/build_mcp_registry_manifest.ts +46 -0
  285. package/src/scripts/build_proof.ts +207 -0
  286. package/src/scripts/chat_history.ts +8 -5
  287. package/src/scripts/check_adr_frontmatter.ts +195 -0
  288. package/src/scripts/check_artefact_count_messaging.ts +4 -0
  289. package/src/scripts/check_backstop_debt.ts +210 -0
  290. package/src/scripts/check_bundle_path_leakage.ts +343 -0
  291. package/src/scripts/check_claims.ts +188 -8
  292. package/src/scripts/check_comparison.ts +12 -0
  293. package/src/scripts/check_enforcement_coverage.ts +592 -0
  294. package/src/scripts/check_evaluator_budgets.ts +99 -0
  295. package/src/scripts/check_kernel_rule_bundle.ts +16 -12
  296. package/src/scripts/check_knowledge_sharing.ts +12 -1
  297. package/src/scripts/check_no_external_sources.ts +2 -2
  298. package/src/scripts/check_reach_channels.ts +407 -0
  299. package/src/scripts/check_reach_staleness.ts +364 -0
  300. package/src/scripts/check_secret_leak.test.ts +47 -0
  301. package/src/scripts/check_secret_leak.ts +290 -0
  302. package/src/scripts/check_source_pointer_freshness.ts +28 -3
  303. package/src/scripts/code_graph/build.ts +0 -0
  304. package/src/scripts/code_graph/cli.ts +379 -0
  305. package/src/scripts/code_graph/detect.ts +186 -0
  306. package/src/scripts/code_graph/extract.ts +386 -0
  307. package/src/scripts/code_graph/intent.ts +45 -0
  308. package/src/scripts/code_graph/loader.ts +123 -0
  309. package/src/scripts/code_graph/query.ts +290 -0
  310. package/src/scripts/code_graph/sanitize.ts +30 -0
  311. package/src/scripts/code_graph/sqlite_store.ts +174 -0
  312. package/src/scripts/code_graph/types.ts +83 -0
  313. package/src/scripts/code_graph/validate.ts +63 -0
  314. package/src/scripts/condense.ts +14 -6
  315. package/src/scripts/context_hygiene_hook.ts +8 -5
  316. package/src/scripts/council_cli.ts +126 -12
  317. package/src/scripts/detect_target_license.ts +203 -0
  318. package/src/scripts/evaluator_umbrella.sh +145 -0
  319. package/src/scripts/external_sources_denylist.json +8 -4
  320. package/src/scripts/first_run_gate_hook.ts +9 -5
  321. package/src/scripts/generate_subagent_floor.ts +194 -0
  322. package/src/scripts/hermetic-install.sh +3 -3
  323. package/src/scripts/hook_manifest.yaml +65 -16
  324. package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
  325. package/src/scripts/hooks/block_no_verify.ts +9 -9
  326. package/src/scripts/hooks/code_graph_nudge_hook.ts +191 -0
  327. package/src/scripts/hooks/concern_registry.ts +75 -0
  328. package/src/scripts/hooks/design_slop_hook.ts +8 -5
  329. package/src/scripts/hooks/dispatch_entry.ts +37 -0
  330. package/src/scripts/hooks/dispatch_hook.ts +176 -3
  331. package/src/scripts/hooks/hook_stdin.ts +42 -0
  332. package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
  333. package/src/scripts/hot_context_hook.ts +7 -6
  334. package/src/scripts/injection_scan_hook.ts +9 -1
  335. package/src/scripts/install +6 -6
  336. package/src/scripts/install-hooks.sh +4 -4
  337. package/src/scripts/install.sh +5 -4
  338. package/src/scripts/install.ts +264 -23
  339. package/src/scripts/iron_law_sha.ts +3 -12
  340. package/src/scripts/learning_sidecar.ts +0 -0
  341. package/src/scripts/lint_budget_ownership.ts +89 -0
  342. package/src/scripts/lint_command_routing.ts +35 -5
  343. package/src/scripts/lint_command_verbs.ts +42 -9
  344. package/src/scripts/lint_consumer_internal_refs.ts +211 -0
  345. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  346. package/src/scripts/lint_documented_commands.ts +670 -0
  347. package/src/scripts/lint_framework_leakage.ts +17 -3
  348. package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
  349. package/src/scripts/lint_governed_writes.ts +335 -0
  350. package/src/scripts/lint_hidden_unicode.ts +6 -0
  351. package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
  352. package/src/scripts/lint_memory_tripwire.ts +186 -0
  353. package/src/scripts/lint_override_kernel_guard.ts +267 -0
  354. package/src/scripts/lint_persistence.ts +171 -0
  355. package/src/scripts/lint_pre_migration_refs.ts +106 -0
  356. package/src/scripts/lint_provenance.ts +547 -0
  357. package/src/scripts/lint_provenance_vocabulary.ts +437 -0
  358. package/src/scripts/lint_spawn_payload.ts +283 -0
  359. package/src/scripts/lint_store_boundary.ts +152 -0
  360. package/src/scripts/lint_versioned_cache.ts +7 -1
  361. package/src/scripts/mcp_server/__main__.ts +7 -2
  362. package/src/scripts/mcp_server/catalog.ts +23 -1
  363. package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
  364. package/src/scripts/mcp_server/prompts.ts +6 -0
  365. package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
  366. package/src/scripts/mcp_server/tools.ts +56 -5
  367. package/src/scripts/mcp_telemetry_query.ts +2 -33
  368. package/src/scripts/mcp_telemetry_store.ts +64 -34
  369. package/src/scripts/measure_rule_budget.ts +3 -12
  370. package/src/scripts/memory_learn_hook.ts +126 -0
  371. package/src/scripts/memory_lookup.ts +0 -0
  372. package/src/scripts/memory_replay_24.ts +312 -0
  373. package/src/scripts/memory_report.ts +16 -3
  374. package/src/scripts/memory_signal.ts +48 -0
  375. package/src/scripts/memory_status.ts +6 -0
  376. package/src/scripts/minimal_safe_diff_hook.ts +8 -5
  377. package/src/scripts/onboarding_gate_hook.ts +8 -5
  378. package/src/scripts/orchestration_record.ts +16 -0
  379. package/src/scripts/pr_url_reminder_hook.ts +8 -1
  380. package/src/scripts/prepack-check.mjs +17 -0
  381. package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
  382. package/src/scripts/prepack_lifecycle_check.mjs +82 -0
  383. package/src/scripts/profile_staleness_hook.ts +8 -7
  384. package/src/scripts/reach_doctor.ts +1651 -0
  385. package/src/scripts/release.ts +24 -3
  386. package/src/scripts/report_install_drift.ts +109 -0
  387. package/src/scripts/risk_escalation_shadow.ts +160 -0
  388. package/src/scripts/roadmap_progress_hook.ts +8 -5
  389. package/src/scripts/schemas/agent-settings.schema.json +23 -0
  390. package/src/scripts/schemas/license-policy.schema.json +89 -0
  391. package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
  392. package/src/scripts/schemas/reach-channels.schema.json +134 -0
  393. package/src/scripts/schemas/reach-doctor-payload.schema.json +220 -0
  394. package/src/scripts/schemas/rule.schema.json +20 -0
  395. package/src/scripts/self_review_gate.test.ts +173 -1
  396. package/src/scripts/self_review_gate.ts +155 -15
  397. package/src/scripts/session_canary_hook.ts +182 -0
  398. package/src/scripts/skill_linter.ts +55 -0
  399. package/src/scripts/smoke_quickstart.ts +2 -2
  400. package/src/scripts/surface_probe_hook.ts +8 -7
  401. package/src/scripts/sync_gitattributes.ts +310 -0
  402. package/src/scripts/team_review_gate_hook.ts +13 -16
  403. package/src/scripts/validate_reach_prescriptions.ts +751 -0
  404. package/src/scripts/verify_before_complete_hook.ts +8 -5
  405. package/src/scripts/wrapper_freshness_hook.ts +8 -7
  406. package/src/server/schemas/settings.ts +24 -2
  407. package/src/shared/capabilities.test.ts +43 -0
  408. package/src/shared/capabilities.ts +75 -0
  409. package/src/templates/minimal/agents-overrides-readme.md +20 -0
  410. package/dist/ui/assets/index-BPFMZWUs.css +0 -1
  411. package/dist/ui/assets/index-BiEZiZ31.js +0 -40
  412. package/dist/ui/assets/index-BiEZiZ31.js.map +0 -1
  413. package/docs/CLAIMS.md +0 -261
  414. package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
  415. package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
  416. package/docs/SKILL_CENSUS.md +0 -352
  417. package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
  418. package/docs/adrs/cost/README.md +0 -9
  419. package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
  420. package/docs/adrs/memory/README.md +0 -10
  421. package/docs/adrs/router/0001-three-tier-routing.md +0 -119
  422. package/docs/adrs/router/README.md +0 -9
  423. package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
  424. package/docs/adrs/schema/README.md +0 -9
  425. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
  426. package/docs/adrs/smoke/README.md +0 -9
  427. package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
  428. package/docs/adrs/telegraph/README.md +0 -9
  429. package/docs/announcements/2026-05-non-dev-launch.md +0 -79
  430. package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
  431. package/docs/anti-reskin-gate.md +0 -60
  432. package/docs/architecture/augment-projection.md +0 -70
  433. package/docs/architecture/claude-bundle.md +0 -77
  434. package/docs/architecture/current-onboard-baseline.md +0 -126
  435. package/docs/architecture/current-safety-behavior.md +0 -137
  436. package/docs/architecture/multi-tool-projection.md +0 -125
  437. package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
  438. package/docs/architecture/source-projection.md +0 -85
  439. package/docs/architecture.md +0 -390
  440. package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
  441. package/docs/archive/CHANGELOG-7.0.0.md +0 -419
  442. package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
  443. package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
  444. package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
  445. package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
  446. package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
  447. package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
  448. package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
  449. package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
  450. package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
  451. package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
  452. package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
  453. package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
  454. package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
  455. package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
  456. package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
  457. package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
  458. package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
  459. package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
  460. package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
  461. package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
  462. package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
  463. package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
  464. package/docs/artefact-census.md +0 -71
  465. package/docs/benchmark.md +0 -648
  466. package/docs/benchmark.pinned.yml +0 -31
  467. package/docs/benchmarks.md +0 -85
  468. package/docs/capability-matrix.md +0 -33
  469. package/docs/case-studies/_template.md +0 -60
  470. package/docs/case-studies/frontend-design-positioning.md +0 -86
  471. package/docs/catalog.md +0 -721
  472. package/docs/command-flows.md +0 -272
  473. package/docs/command-naming-audit.md +0 -60
  474. package/docs/comparison.yaml +0 -45
  475. package/docs/contracts/CHANGELOG-conventions.md +0 -149
  476. package/docs/contracts/STABILITY.md +0 -188
  477. package/docs/contracts/adoption-signal-floor.md +0 -127
  478. package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
  479. package/docs/contracts/adr-chat-history-split.md +0 -140
  480. package/docs/contracts/adr-command-suggestion.md +0 -144
  481. package/docs/contracts/adr-forecast-construction-shape.md +0 -90
  482. package/docs/contracts/adr-gtm-context-spine.md +0 -116
  483. package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
  484. package/docs/contracts/adr-install-user-type-axis.md +0 -107
  485. package/docs/contracts/adr-layout.md +0 -107
  486. package/docs/contracts/adr-level-6-productization.md +0 -145
  487. package/docs/contracts/adr-mcp-runtime.md +0 -128
  488. package/docs/contracts/adr-product-ui-track.md +0 -381
  489. package/docs/contracts/adr-prompt-driven-execution.md +0 -186
  490. package/docs/contracts/adr-settings-sync-engine.md +0 -128
  491. package/docs/contracts/adr-user-types-axis.md +0 -127
  492. package/docs/contracts/adr-wing4-context-spine.md +0 -126
  493. package/docs/contracts/agent-user-schema.md +0 -170
  494. package/docs/contracts/agents-layout.md +0 -148
  495. package/docs/contracts/agents-md-tech-stack.md +0 -75
  496. package/docs/contracts/ai-council-config.md +0 -829
  497. package/docs/contracts/ai-team-config.md +0 -224
  498. package/docs/contracts/analysis-memory-loop.md +0 -149
  499. package/docs/contracts/at-rest-encryption.md +0 -191
  500. package/docs/contracts/audit-log-v1.md +0 -150
  501. package/docs/contracts/auto-orchestration-v1.md +0 -70
  502. package/docs/contracts/benchmark-ab-contract.md +0 -106
  503. package/docs/contracts/benchmark-corpus-spec.md +0 -125
  504. package/docs/contracts/benchmark-report-schema.md +0 -113
  505. package/docs/contracts/branch-protection-policy.md +0 -139
  506. package/docs/contracts/brand-token-consumption.md +0 -74
  507. package/docs/contracts/capability-boundary.md +0 -69
  508. package/docs/contracts/capability-packs.md +0 -217
  509. package/docs/contracts/ci-cost-budget.md +0 -111
  510. package/docs/contracts/ci-green-floor.md +0 -141
  511. package/docs/contracts/command-category-governance.md +0 -84
  512. package/docs/contracts/command-clusters.md +0 -399
  513. package/docs/contracts/command-surface-tiers.md +0 -176
  514. package/docs/contracts/command-taxonomy.md +0 -137
  515. package/docs/contracts/condensation-default-kill-criterion.md +0 -116
  516. package/docs/contracts/config-presets.md +0 -144
  517. package/docs/contracts/conformance.md +0 -84
  518. package/docs/contracts/consumer-bridge.md +0 -73
  519. package/docs/contracts/context-paths.md +0 -101
  520. package/docs/contracts/context-spine.md +0 -179
  521. package/docs/contracts/cost-dashboard.md +0 -143
  522. package/docs/contracts/cost-enforcement.md +0 -134
  523. package/docs/contracts/cost-profile-defaults.md +0 -110
  524. package/docs/contracts/cost-summary-schema.md +0 -107
  525. package/docs/contracts/creative-pack-boundary.md +0 -63
  526. package/docs/contracts/cross-repo-retrieval.md +0 -64
  527. package/docs/contracts/cross-wing-handoff.md +0 -134
  528. package/docs/contracts/daily-workspace.md +0 -147
  529. package/docs/contracts/decision-engine-gates.md +0 -120
  530. package/docs/contracts/decision-trace-v1.md +0 -177
  531. package/docs/contracts/design-artifact-lifecycle.md +0 -93
  532. package/docs/contracts/design-artifact-verification.md +0 -153
  533. package/docs/contracts/discovery-manifest.md +0 -209
  534. package/docs/contracts/discovery-manifest.schema.json +0 -254
  535. package/docs/contracts/evidence-based-pruning.md +0 -102
  536. package/docs/contracts/explain-modes.md +0 -187
  537. package/docs/contracts/explain-trace.schema.json +0 -144
  538. package/docs/contracts/file-ownership-matrix.json +0 -13941
  539. package/docs/contracts/file-ownership-matrix.md +0 -135
  540. package/docs/contracts/frontmatter-contract.md +0 -140
  541. package/docs/contracts/ghostwriter-schema.md +0 -337
  542. package/docs/contracts/governance-enforcement-projection.md +0 -159
  543. package/docs/contracts/gui-wizard.md +0 -350
  544. package/docs/contracts/harness-expectations.md +0 -128
  545. package/docs/contracts/hook-architecture-v1.md +0 -325
  546. package/docs/contracts/host-agent-protocol.md +0 -110
  547. package/docs/contracts/implement-ticket-flow.md +0 -625
  548. package/docs/contracts/init-telemetry.md +0 -132
  549. package/docs/contracts/injected-block-authenticity-model.md +0 -66
  550. package/docs/contracts/install-layout.md +0 -249
  551. package/docs/contracts/install-scopes.md +0 -82
  552. package/docs/contracts/installed-tools-lockfile.md +0 -144
  553. package/docs/contracts/installer-agent-mode.md +0 -137
  554. package/docs/contracts/iron-law-overrides.txt +0 -26
  555. package/docs/contracts/kernel-membership.md +0 -339
  556. package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
  557. package/docs/contracts/linear-ai-three-layers.md +0 -130
  558. package/docs/contracts/linter-structural-model.md +0 -181
  559. package/docs/contracts/load-context-budget-model.md +0 -259
  560. package/docs/contracts/load-context-schema.md +0 -220
  561. package/docs/contracts/local-analytics.md +0 -160
  562. package/docs/contracts/local-knowledge-ingestion.md +0 -96
  563. package/docs/contracts/local-server-api.md +0 -134
  564. package/docs/contracts/low-impact-corpus-format.md +0 -95
  565. package/docs/contracts/mcp-beta-criteria.md +0 -130
  566. package/docs/contracts/mcp-cloud-scope.md +0 -355
  567. package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
  568. package/docs/contracts/mcp-phase-1-scope.md +0 -272
  569. package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
  570. package/docs/contracts/mcp-tool-inventory.md +0 -64
  571. package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
  572. package/docs/contracts/measurement-baseline.md +0 -103
  573. package/docs/contracts/memory-visibility-v1.md +0 -160
  574. package/docs/contracts/mental-models.md +0 -336
  575. package/docs/contracts/migrate-command.md +0 -233
  576. package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
  577. package/docs/contracts/namespace.md +0 -125
  578. package/docs/contracts/no-runtime-boundary.md +0 -61
  579. package/docs/contracts/one-off-script-lifecycle.md +0 -110
  580. package/docs/contracts/orchestration-dsl-v1.md +0 -153
  581. package/docs/contracts/package-self-orientation.md +0 -163
  582. package/docs/contracts/pilot/agent-authority.md +0 -24
  583. package/docs/contracts/pilot/direct-answers.md +0 -70
  584. package/docs/contracts/pilot/language-and-tone.md +0 -63
  585. package/docs/contracts/plain-language-surface.md +0 -117
  586. package/docs/contracts/prelaunch-diagnostics.md +0 -151
  587. package/docs/contracts/profile-system.md +0 -167
  588. package/docs/contracts/reasoning-discipline-protocol.md +0 -83
  589. package/docs/contracts/release-pr-gating.md +0 -151
  590. package/docs/contracts/release-sizing.md +0 -107
  591. package/docs/contracts/release-trunk-sync.md +0 -105
  592. package/docs/contracts/review-lens-schema.md +0 -64
  593. package/docs/contracts/roadmap-complexity-standard.md +0 -138
  594. package/docs/contracts/role-experience.md +0 -125
  595. package/docs/contracts/router-blending.md +0 -71
  596. package/docs/contracts/rule-classification.md +0 -171
  597. package/docs/contracts/rule-interactions.md +0 -132
  598. package/docs/contracts/rule-interactions.yml +0 -260
  599. package/docs/contracts/rule-priority-hierarchy.md +0 -88
  600. package/docs/contracts/rule-router.md +0 -287
  601. package/docs/contracts/safety-model.md +0 -129
  602. package/docs/contracts/session-profile-overlay.md +0 -157
  603. package/docs/contracts/settings-api.md +0 -264
  604. package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
  605. package/docs/contracts/settings-sync-yaml-subset.md +0 -139
  606. package/docs/contracts/skill-bundled-assets.md +0 -62
  607. package/docs/contracts/skill-discovery.md +0 -80
  608. package/docs/contracts/skill-distribution-channels.md +0 -66
  609. package/docs/contracts/skill-domains.md +0 -144
  610. package/docs/contracts/skill-dry-run.md +0 -47
  611. package/docs/contracts/skill-family-map.yml +0 -915
  612. package/docs/contracts/smoke-contracts.md +0 -144
  613. package/docs/contracts/subagent-boundary.md +0 -59
  614. package/docs/contracts/surface-agent-contracts.md +0 -153
  615. package/docs/contracts/surface-matrix.md +0 -108
  616. package/docs/contracts/surface-tiers.md +0 -81
  617. package/docs/contracts/telegraph-telemetry.md +0 -83
  618. package/docs/contracts/ticket-bundle-format.md +0 -233
  619. package/docs/contracts/tier-3-contrib-plugin.md +0 -137
  620. package/docs/contracts/trust-and-safety.md +0 -144
  621. package/docs/contracts/ui-stack-extension.md +0 -237
  622. package/docs/contracts/ui-track-flow.md +0 -329
  623. package/docs/contracts/universal-skills.md +0 -91
  624. package/docs/contracts/user-type-schema.md +0 -146
  625. package/docs/contracts/value-dashboard-spec.md +0 -378
  626. package/docs/contracts/value-report-schema.md +0 -168
  627. package/docs/contracts/workflow-packs.md +0 -121
  628. package/docs/contracts/workspace-boundary.md +0 -84
  629. package/docs/contracts/workspace-documents.md +0 -144
  630. package/docs/contracts/write-engine.md +0 -182
  631. package/docs/cookbook.md +0 -152
  632. package/docs/customization.md +0 -685
  633. package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
  634. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
  635. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
  636. package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
  637. package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
  638. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
  639. package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
  640. package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
  641. package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
  642. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
  643. package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
  644. package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
  645. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
  646. package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
  647. package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
  648. package/docs/decisions/ADR-016-installer-architecture.md +0 -189
  649. package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
  650. package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
  651. package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
  652. package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
  653. package/docs/decisions/ADR-021-deployment-shape.md +0 -153
  654. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
  655. package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
  656. package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
  657. package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
  658. package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
  659. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
  660. package/docs/decisions/ADR-028-root-layout.md +0 -147
  661. package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
  662. package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
  663. package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
  664. package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
  665. package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
  666. package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
  667. package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
  668. package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
  669. package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
  670. package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
  671. package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
  672. package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
  673. package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
  674. package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
  675. package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
  676. package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
  677. package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
  678. package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
  679. package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
  680. package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
  681. package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
  682. package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
  683. package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
  684. package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
  685. package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
  686. package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
  687. package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
  688. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
  689. package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
  690. package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
  691. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
  692. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
  693. package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
  694. package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
  695. package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
  696. package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
  697. package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
  698. package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
  699. package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
  700. package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
  701. package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
  702. package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
  703. package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
  704. package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
  705. package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
  706. package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
  707. package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
  708. package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
  709. package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
  710. package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
  711. package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
  712. package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
  713. package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
  714. package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
  715. package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
  716. package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
  717. package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
  718. package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
  719. package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
  720. package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
  721. package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
  722. package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
  723. package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
  724. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
  725. package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
  726. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
  727. package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
  728. package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
  729. package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
  730. package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
  731. package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
  732. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
  733. package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
  734. package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
  735. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
  736. package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
  737. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
  738. package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
  739. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
  740. package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
  741. package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -246
  742. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -110
  743. package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
  744. package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
  745. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -201
  746. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
  747. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
  748. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
  749. package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
  750. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
  751. package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
  752. package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
  753. package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
  754. package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
  755. package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
  756. package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
  757. package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
  758. package/docs/decisions/INDEX.md +0 -136
  759. package/docs/deploy/connector-setup.md +0 -129
  760. package/docs/deploy/env-vars.md +0 -70
  761. package/docs/deploy/policy-cookbook.md +0 -130
  762. package/docs/deploy/quickstart.md +0 -112
  763. package/docs/deploy/small-team-recipe.md +0 -148
  764. package/docs/deploy/team-deployment-posture.md +0 -111
  765. package/docs/design/adversarial-council-eval.md +0 -106
  766. package/docs/design/council-vs-solo-baseline.md +0 -92
  767. package/docs/design/cross-model-parity-eval.md +0 -82
  768. package/docs/design/length-neutral-judge-rerun.md +0 -92
  769. package/docs/design/utilization-window-criteria.md +0 -51
  770. package/docs/development.md +0 -230
  771. package/docs/distribution/awesome-list-submission.md +0 -46
  772. package/docs/distribution/consumer-matrix.md +0 -96
  773. package/docs/distribution/launch-story-draft.md +0 -58
  774. package/docs/distribution/mcp-submission-checklist.md +0 -95
  775. package/docs/distribution/public-install-smoke.md +0 -68
  776. package/docs/distribution/registries.md +0 -117
  777. package/docs/distribution/registry-submissions.md +0 -85
  778. package/docs/distribution/telemetry-privacy.md +0 -128
  779. package/docs/distribution/telemetry-schema.md +0 -174
  780. package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
  781. package/docs/end-to-end-walkthroughs.md +0 -165
  782. package/docs/enforcement-by-host.md +0 -44
  783. package/docs/examples/agent-user.example.md +0 -22
  784. package/docs/experiences/agency.md +0 -49
  785. package/docs/experiences/content_creator.md +0 -49
  786. package/docs/experiences/developer.md +0 -49
  787. package/docs/experiences/finance.md +0 -50
  788. package/docs/experiences/founder.md +0 -49
  789. package/docs/experiences/ops.md +0 -49
  790. package/docs/featured-commands.md +0 -27
  791. package/docs/featured-skills.md +0 -95
  792. package/docs/flows.md +0 -67
  793. package/docs/getting-started-by-role.md +0 -190
  794. package/docs/getting-started-laravel.md +0 -72
  795. package/docs/getting-started-local-stdio.md +0 -77
  796. package/docs/getting-started.md +0 -254
  797. package/docs/github-topics.md +0 -93
  798. package/docs/governance-advantage.md +0 -72
  799. package/docs/governance.md +0 -96
  800. package/docs/guides/cross-repo-linked-projects.md +0 -93
  801. package/docs/guides/cross-repo-retrieval.md +0 -61
  802. package/docs/guides/frontend-design-corpus-refresh.md +0 -83
  803. package/docs/guides/local-analytics.md +0 -125
  804. package/docs/guides/local-knowledge.md +0 -127
  805. package/docs/guides/skill-discovery.md +0 -71
  806. package/docs/guides/skill-preview.md +0 -71
  807. package/docs/hook-payload-capture.md +0 -221
  808. package/docs/install-friction-report.md +0 -66
  809. package/docs/installation.md +0 -959
  810. package/docs/maintainers/branch-protection.md +0 -105
  811. package/docs/maintainers/dev-mode.md +0 -106
  812. package/docs/maintainers/optional-media-deps.md +0 -50
  813. package/docs/maintainers/system-map.md +0 -85
  814. package/docs/mcp-registries.md +0 -94
  815. package/docs/mcp-server.md +0 -175
  816. package/docs/mcp.md +0 -147
  817. package/docs/media/proof-demo.cast +0 -14
  818. package/docs/media/proof-demo.gif +0 -0
  819. package/docs/migration/consumer-template-consumption-model.md +0 -145
  820. package/docs/migration/divergences/README.md +0 -55
  821. package/docs/migration/divergences/_template.md +0 -50
  822. package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
  823. package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
  824. package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
  825. package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
  826. package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
  827. package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
  828. package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
  829. package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
  830. package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
  831. package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
  832. package/docs/migration/node-floor.md +0 -86
  833. package/docs/migration/v1-to-v2.md +0 -156
  834. package/docs/migration/yaml-roundtrip-spike.md +0 -163
  835. package/docs/migrations/commands-1.15.0.md +0 -117
  836. package/docs/parity/bench-external.json +0 -58
  837. package/docs/parity/bench.json +0 -41
  838. package/docs/parity/command-frontmatter.md +0 -60
  839. package/docs/parity/external-runtime.md +0 -46
  840. package/docs/personas.md +0 -178
  841. package/docs/positioning-evidence.md +0 -86
  842. package/docs/profiles.md +0 -108
  843. package/docs/proof.md +0 -176
  844. package/docs/quality.md +0 -98
  845. package/docs/readme-split-plan.md +0 -102
  846. package/docs/recruits/_template.md +0 -81
  847. package/docs/release-runbook.md +0 -141
  848. package/docs/role-experiences.md +0 -19
  849. package/docs/safety.md +0 -30
  850. package/docs/second-brain-scope.md +0 -116
  851. package/docs/self-review-gate.md +0 -65
  852. package/docs/setup/enterprise-and-offline.md +0 -201
  853. package/docs/setup/mcp-client-config.md +0 -358
  854. package/docs/setup/mcp-cloud-endpoints.md +0 -116
  855. package/docs/setup/mcp-cloud-registry-listing.md +0 -99
  856. package/docs/setup/mcp-cloud-setup.md +0 -183
  857. package/docs/setup/mcp-r2-bootstrap.md +0 -82
  858. package/docs/setup/mcp-server-docker.md +0 -101
  859. package/docs/setup/per-ide/aider.md +0 -48
  860. package/docs/setup/per-ide/antigravity.md +0 -68
  861. package/docs/setup/per-ide/augment.md +0 -89
  862. package/docs/setup/per-ide/claude-code.md +0 -97
  863. package/docs/setup/per-ide/claude-desktop.md +0 -207
  864. package/docs/setup/per-ide/cline.md +0 -43
  865. package/docs/setup/per-ide/codebuddy.md +0 -63
  866. package/docs/setup/per-ide/codex.md +0 -46
  867. package/docs/setup/per-ide/continue.md +0 -68
  868. package/docs/setup/per-ide/copilot.md +0 -80
  869. package/docs/setup/per-ide/cursor.md +0 -125
  870. package/docs/setup/per-ide/droid.md +0 -65
  871. package/docs/setup/per-ide/gemini-cli.md +0 -45
  872. package/docs/setup/per-ide/jetbrains.md +0 -76
  873. package/docs/setup/per-ide/kilocode.md +0 -66
  874. package/docs/setup/per-ide/kiro.md +0 -72
  875. package/docs/setup/per-ide/opencode.md +0 -62
  876. package/docs/setup/per-ide/qoder.md +0 -63
  877. package/docs/setup/per-ide/roocode.md +0 -68
  878. package/docs/setup/per-ide/trae.md +0 -63
  879. package/docs/setup/per-ide/warp.md +0 -63
  880. package/docs/setup/per-ide/windsurf.md +0 -109
  881. package/docs/setup/per-ide/zed.md +0 -73
  882. package/docs/showcase.md +0 -209
  883. package/docs/skill-duplication-findings.md +0 -91
  884. package/docs/skills-catalog.md +0 -265
  885. package/docs/skills-taxonomy.md +0 -90
  886. package/docs/spawn-site-policy.md +0 -72
  887. package/docs/succession.md +0 -80
  888. package/docs/threat-model.md +0 -29
  889. package/docs/troubleshooting.md +0 -155
  890. package/docs/ui-track-mental-model.md +0 -121
  891. package/docs/us-vs-the-category.md +0 -38
  892. package/docs/value.md +0 -86
  893. package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
  894. package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
  895. package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
  896. package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
  897. package/docs/walkthroughs/daily-workspace.md +0 -127
  898. package/docs/wedge/production-validator/README.md +0 -81
  899. package/docs/wedge/production-validator/first-run-check.sh +0 -42
  900. package/docs/wedge/production-validator/production-validator.md +0 -83
  901. package/docs/wizard.md +0 -173
@@ -148,19 +148,19 @@ const CROSS_STACK_HINTS: Record<string, string[]> = {
148
148
  ruby: ['\\bRails\\b', '\\bbin/rails\\b', '\\bGemfile\\b', '\\bbundle exec\\b'],
149
149
  python: ['\\bDjango\\b', '\\bFastAPI\\b', '\\bFlask\\b', '\\bpoetry\\b',
150
150
  '\\buv (add|sync|run|pip)\\b', '\\bvenv\\b', '\\bPydantic\\b', '\\bJinja\\b',
151
- 'docs\\.python\\.org'],
151
+ 'docs\\.python\\.org', '\\bPython\\b'],
152
152
  node: ['\\bExpress\\b', '\\bNext\\.?js\\b', '\\bNode\\.?js\\b', '\\bnpx\\b',
153
153
  '\\bvitest\\b', '\\bjest\\b', '\\beslint\\b', '\\bprettier\\b',
154
154
  '\\bReact\\b', '\\bVue\\b', '\\bNestJS\\b', '\\bTypeScript\\b',
155
155
  '\\btsc\\b', '\\bzod\\b', '\\bPrisma\\b', '\\bTailwind\\b',
156
156
  '\\bTurborepo\\b', '\\bclass-validator\\b', '\\bInertia\\b',
157
157
  '\\bJSX\\b', '\\bNx\\b',
158
- '\\.tsx?\\b', 'typescriptlang\\.org'],
158
+ '\\.tsx?\\b', 'typescriptlang\\.org', '\\bTS\\b', '\\bJS\\b'],
159
159
  go: ['\\bgo (test|build|run|mod)\\b', '\\bgolangci-lint\\b', '\\bGoLand\\b',
160
160
  '\\bGolang\\b', '\\bgo\\.dev\\b'],
161
161
  rust: ['\\bcargo (test|build|run|check|fmt|clippy|add|update)\\b',
162
162
  '\\bClippy\\b', '\\brustfmt\\b', '\\bCargo\\.toml\\b',
163
- 'rust-lang\\.org'],
163
+ 'rust-lang\\.org', '\\bRust\\b'],
164
164
  dotnet: ['\\bdotnet (test|build|run|add|restore)\\b', '\\b\\.NET\\b'],
165
165
  java: ['\\bSpring\\b', '\\bmvn (test|clean|install|package)\\b',
166
166
  '\\bgradle\\b', '\\bMaven\\b'],
@@ -168,6 +168,20 @@ const CROSS_STACK_HINTS: Record<string, string[]> = {
168
168
  // are hit patterns; these are window-only hints so a JS/Python hit next
169
169
  // to plain-language PHP mentions self-suppresses as cross-stack docs.
170
170
  php: ['\\bvendor/', '\\bPHP\\b'],
171
+ // Bare LANGUAGE names (Python / Rust / TS / JS above) are the same class of
172
+ // window-only hint the `php` family already had, and their absence was an
173
+ // asymmetry, not a policy: a checklist row naming "PHP typed properties +
174
+ // declare(strict_types=1), TS strict, Python type hints, Go / Rust" — five
175
+ // ecosystems on ONE line, the rule's textbook "multi-stack peers" case —
176
+ // matched the PHP hit pattern and found no cross-stack hint, because only
177
+ // PHP had a plain-language entry. So the linter flagged the exact shape
178
+ // framework-neutrality documents as allowed.
179
+ //
180
+ // `\bGo\b` is deliberately NOT added. These hints SUPPRESS, so an
181
+ // over-broad one hides real leakage — and "go to" / "go ahead" would fire
182
+ // constantly in prose. Golang / `go test|build|run|mod` / go.dev stay the
183
+ // Go signals; a Go-only line with none of those is not self-evidently
184
+ // cross-stack anyway.
171
185
  // Polyglot-runner pseudo-family: a Taskfile/Makefile mention marks the
172
186
  // window as multi-stack tooling documentation (runner files are
173
187
  // ecosystem-neutral by definition).
@@ -116,6 +116,38 @@
116
116
  185
117
117
  ],
118
118
  "reason": "Multi-ecosystem capture-tools line and skip-marker grep spanning pytest/PHPUnit/JS in one pattern — documentation across stacks."
119
+ },
120
+ {
121
+ "file": "src/skills/test-driven-development/SKILL.md",
122
+ "lines": [
123
+ 228,
124
+ 231,
125
+ 239,
126
+ 243
127
+ ],
128
+ "reason": "Example A of a deliberate A/B pair: '### Example A — PHP / Pest' (L228) sits opposite '### Example B — TypeScript / Vitest' (L259). That is framework-neutrality's textbook 'multi-stack peers' shape, but the two headings are 31 lines apart and the cross-stack window is +/-10, so the heuristic cannot see the sibling. Allowlisted rather than widening the window for a single document — if a second per-stack A/B skill appears, build the section-aware window instead of adding a second entry here."
129
+ },
130
+ {
131
+ "file": "src/skills/image-editing/SKILL.md",
132
+ "lines": [
133
+ 48
134
+ ],
135
+ "reason": "npm install-location path of THIS package's own image-adapter scripts (node_modules/@event4u/agent-config/...) — the factual consumer path after the consumer-internal-ref decoupling (road-to-credible-install Phase 4), not a JS-stack mandate."
136
+ },
137
+ {
138
+ "file": "src/skills/image-generation/SKILL.md",
139
+ "lines": [
140
+ 45
141
+ ],
142
+ "reason": "npm install-location path of THIS package's own image-adapter scripts (node_modules/@event4u/agent-config/...) — the factual consumer path after the consumer-internal-ref decoupling (road-to-credible-install Phase 4), not a JS-stack mandate."
143
+ },
144
+ {
145
+ "file": "src/skills/prompt-engineering-image/SKILL.md",
146
+ "lines": [
147
+ 74,
148
+ 115
149
+ ],
150
+ "reason": "npm install-location path of THIS package's own image-adapter scripts (node_modules/@event4u/agent-config/...) — the factual consumer path after the consumer-internal-ref decoupling (road-to-credible-install Phase 4), not a JS-stack mandate."
119
151
  }
120
152
  ]
121
153
  }
@@ -0,0 +1,335 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * lint_governed_writes — flag direct filesystem writes to protected
4
+ * ledger/governance surfaces that bypass the sanctioned write path.
5
+ *
6
+ * Scans: src/scripts/**\/*.ts (excluding *.test.ts and the atomic-write
7
+ * primitive itself, _lib/fs_atomic.ts, which is the sanctioned layer this
8
+ * lint measures bypasses of).
9
+ *
10
+ * Protected surfaces (each carries its own write policy):
11
+ * - docs/CLAIMS.md (claims ledger) — `always-forbidden`: ANY direct
12
+ * fs write/append call referencing this path is a violation; the
13
+ * ledger is only ever mutated via `write_atomic` from
14
+ * `src/scripts/_lib/fs_atomic.ts` (which this lint does not scan, and
15
+ * whose call name — `write_atomic` — never matches the banned-call
16
+ * patterns below, so a compliant writer is naturally clean).
17
+ * - agents/memory/intake/ (append-only signal JSONL) — `append-only`:
18
+ * an APPEND call (appendFileSync / fs.promises.appendFile /
19
+ * createWriteStream with an `'a'` flag) is the sanctioned operation;
20
+ * only a REWRITE call is a violation.
21
+ * - agents/runtime/state/audit/ (append-only audit-log-v1 JSONL) —
22
+ * `append-only`, same split as above.
23
+ *
24
+ * Banned call shapes (rewrite family): fs.writeFileSync(),
25
+ * fs.promises.writeFile(), fs.createWriteStream() without an append flag —
26
+ * each also matched via a bare destructured import (writeFileSync(...)).
27
+ * Banned call shapes (append family, sanctioned on append-only surfaces,
28
+ * always a violation on always-forbidden surfaces): fs.appendFileSync(),
29
+ * fs.promises.appendFile(), fs.createWriteStream() with `{ flags: 'a' }`.
30
+ *
31
+ * A call only counts against a surface when the surface's path fragment
32
+ * appears as a string/template literal INSIDE that call's own argument
33
+ * list (matched by balanced-paren scanning, so multi-line call arguments
34
+ * are captured) — a path built up through an unrelated variable (no
35
+ * literal in the call's own arguments) is not flagged; that is a known,
36
+ * deliberate scope limit of a static, zero-runtime-cost lint.
37
+ *
38
+ * Inline-ignore: add a comment on the same or previous line:
39
+ * lint-governed-writes-disable-next-line [-- reason]
40
+ * lint-governed-writes-disable-line [-- reason]
41
+ * lint-governed-writes-disable-file [-- reason] (top of file)
42
+ *
43
+ * Exit codes: 0 = clean, 2 = findings present, 1 = internal error.
44
+ */
45
+ import fs from "node:fs";
46
+ import path from "node:path";
47
+ import { fileURLToPath, pathToFileURL } from "node:url";
48
+
49
+ const _HERE = path.dirname(fileURLToPath(import.meta.url));
50
+ export const REPO_ROOT = path.resolve(_HERE, "..", "..");
51
+ export const SCRIPTS_DIR = path.join(REPO_ROOT, "src", "scripts");
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // Protected surfaces
55
+ // ---------------------------------------------------------------------------
56
+ type SurfacePolicy = "always-forbidden" | "append-only";
57
+
58
+ interface ProtectedSurface {
59
+ id: string;
60
+ fragment: string;
61
+ policy: SurfacePolicy;
62
+ }
63
+
64
+ // No canonical bench-report index file was found under src/scripts at
65
+ // authoring time (no writer builds a single "bench index" registry path) —
66
+ // see the lint's own docstring history / task report. If one is added
67
+ // later, append it here with the matching policy.
68
+ const PROTECTED_SURFACES: ProtectedSurface[] = [
69
+ { id: "claims-ledger", fragment: "docs/CLAIMS.md", policy: "always-forbidden" },
70
+ { id: "memory-intake", fragment: "agents/memory/intake/", policy: "append-only" },
71
+ { id: "audit-log", fragment: "agents/runtime/state/audit/", policy: "append-only" },
72
+ ];
73
+
74
+ // ---------------------------------------------------------------------------
75
+ // Banned call-shape patterns
76
+ // ---------------------------------------------------------------------------
77
+ type CallFamily = "rewrite" | "append" | "stream";
78
+
79
+ interface CallPattern {
80
+ name: string;
81
+ family: CallFamily;
82
+ source: string; // regex source, compiled fresh per exec loop (stateful lastIndex)
83
+ }
84
+
85
+ const CALL_PATTERNS: CallPattern[] = [
86
+ { name: "fs.writeFileSync", family: "rewrite", source: "\\b(?:fs\\.)?writeFileSync\\s*\\(" },
87
+ { name: "fs.promises.writeFile", family: "rewrite", source: "\\bfs\\.promises\\.writeFile\\s*\\(" },
88
+ { name: "fs.appendFileSync", family: "append", source: "\\b(?:fs\\.)?appendFileSync\\s*\\(" },
89
+ { name: "fs.promises.appendFile", family: "append", source: "\\bfs\\.promises\\.appendFile\\s*\\(" },
90
+ { name: "fs.createWriteStream", family: "stream", source: "\\b(?:fs\\.)?createWriteStream\\s*\\(" },
91
+ ];
92
+
93
+ const APPEND_FLAG_RE = /flags\s*:\s*['"]a['"]/;
94
+
95
+ interface Finding {
96
+ file: string;
97
+ line: number;
98
+ surface: string;
99
+ call: string;
100
+ policy: SurfacePolicy;
101
+ snippet: string;
102
+ }
103
+
104
+ // ---------------------------------------------------------------------------
105
+ // Balanced-paren call-argument extraction
106
+ // ---------------------------------------------------------------------------
107
+ /**
108
+ * Given the index of the opening `(` of a call, return the substring from
109
+ * that `(` through its matching `)` (inclusive) — the call's full argument
110
+ * list, spanning multiple lines when the call is formatted that way.
111
+ * String/template literals are tracked so a stray paren inside a quoted
112
+ * value never desyncs the depth count.
113
+ */
114
+ function extractCallArgsRegion(content: string, openParenIdx: number): string {
115
+ let depth = 0;
116
+ let inString: string | null = null;
117
+ let escaped = false;
118
+ for (let i = openParenIdx; i < content.length; i++) {
119
+ const ch = content[i] as string;
120
+ if (inString) {
121
+ if (escaped) {
122
+ escaped = false;
123
+ } else if (ch === "\\") {
124
+ escaped = true;
125
+ } else if (ch === inString) {
126
+ inString = null;
127
+ }
128
+ continue;
129
+ }
130
+ if (ch === '"' || ch === "'" || ch === "`") {
131
+ inString = ch;
132
+ continue;
133
+ }
134
+ if (ch === "(") {
135
+ depth++;
136
+ } else if (ch === ")") {
137
+ depth--;
138
+ if (depth === 0) {
139
+ return content.slice(openParenIdx, i + 1);
140
+ }
141
+ }
142
+ }
143
+ return content.slice(openParenIdx);
144
+ }
145
+
146
+ function lineOfIndex(content: string, idx: number): number {
147
+ let line = 1;
148
+ for (let i = 0; i < idx; i++) {
149
+ if (content[i] === "\n") line++;
150
+ }
151
+ return line;
152
+ }
153
+
154
+ // ---------------------------------------------------------------------------
155
+ // Inline-ignore parsing (mirrors lint_output_slop's convention)
156
+ // ---------------------------------------------------------------------------
157
+ type IgnoreScope = "file" | "line" | "next-line";
158
+ interface Ignore {
159
+ scope: IgnoreScope;
160
+ lineNum?: number;
161
+ }
162
+
163
+ function parseIgnores(lines: string[]): Ignore[] {
164
+ const ignores: Ignore[] = [];
165
+ for (let i = 0; i < lines.length; i++) {
166
+ const line = lines[i] ?? "";
167
+ if (/lint-governed-writes-disable-file/i.test(line)) {
168
+ ignores.push({ scope: "file" });
169
+ }
170
+ if (/lint-governed-writes-disable-line/i.test(line)) {
171
+ ignores.push({ scope: "line", lineNum: i + 1 });
172
+ }
173
+ if (/lint-governed-writes-disable-next-line/i.test(line)) {
174
+ ignores.push({ scope: "next-line", lineNum: i + 2 });
175
+ }
176
+ }
177
+ return ignores;
178
+ }
179
+
180
+ function isIgnored(ignores: Ignore[], lineNum: number): boolean {
181
+ for (const ig of ignores) {
182
+ if (ig.scope === "file") return true;
183
+ if (ig.scope === "line" && ig.lineNum === lineNum) return true;
184
+ if (ig.scope === "next-line" && ig.lineNum === lineNum) return true;
185
+ }
186
+ return false;
187
+ }
188
+
189
+ // ---------------------------------------------------------------------------
190
+ // Per-file scanning
191
+ // ---------------------------------------------------------------------------
192
+ export function scanContent(content: string, relFile: string): Finding[] {
193
+ const findings: Finding[] = [];
194
+ const lines = content.split("\n");
195
+ const ignores = parseIgnores(lines);
196
+
197
+ for (const pat of CALL_PATTERNS) {
198
+ const re = new RegExp(pat.source, "g");
199
+ let m: RegExpExecArray | null;
200
+ while ((m = re.exec(content)) !== null) {
201
+ const openParenIdx = m.index + m[0].length - 1;
202
+ const region = extractCallArgsRegion(content, openParenIdx);
203
+
204
+ let kind: "rewrite" | "append";
205
+ if (pat.family === "stream") {
206
+ kind = APPEND_FLAG_RE.test(region) ? "append" : "rewrite";
207
+ } else {
208
+ kind = pat.family;
209
+ }
210
+
211
+ const lineNum = lineOfIndex(content, m.index);
212
+ if (isIgnored(ignores, lineNum)) continue;
213
+
214
+ for (const surface of PROTECTED_SURFACES) {
215
+ if (!region.includes(surface.fragment)) continue;
216
+ const isViolation =
217
+ surface.policy === "always-forbidden" ||
218
+ (surface.policy === "append-only" && kind === "rewrite");
219
+ if (!isViolation) continue;
220
+
221
+ findings.push({
222
+ file: relFile,
223
+ line: lineNum,
224
+ surface: surface.id,
225
+ call: pat.name,
226
+ policy: surface.policy,
227
+ snippet: (lines[lineNum - 1] ?? "").trim().slice(0, 160),
228
+ });
229
+ }
230
+ }
231
+ }
232
+ return findings;
233
+ }
234
+
235
+ // ---------------------------------------------------------------------------
236
+ // File discovery
237
+ // ---------------------------------------------------------------------------
238
+ const EXCLUDED_RELATIVE_FILES = new Set<string>(["_lib/fs_atomic.ts"]);
239
+
240
+ function* walkTsFiles(dir: string, root: string): Generator<string> {
241
+ if (!fs.existsSync(dir)) return;
242
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
243
+ if (entry.name === "node_modules" || entry.name === "dist") continue;
244
+ const full = path.join(dir, entry.name);
245
+ if (entry.isDirectory()) {
246
+ yield* walkTsFiles(full, root);
247
+ continue;
248
+ }
249
+ if (!entry.name.endsWith(".ts")) continue;
250
+ if (entry.name.endsWith(".test.ts")) continue;
251
+ const rel = path.relative(root, full).split(path.sep).join("/");
252
+ if (EXCLUDED_RELATIVE_FILES.has(rel)) continue;
253
+ yield full;
254
+ }
255
+ }
256
+
257
+ /** Scan every eligible `.ts` file under `scriptsDir`. */
258
+ export function scanScriptsDir(scriptsDir: string): Finding[] {
259
+ const findings: Finding[] = [];
260
+ for (const file of walkTsFiles(scriptsDir, scriptsDir)) {
261
+ let content: string;
262
+ try {
263
+ content = fs.readFileSync(file, "utf-8");
264
+ } catch {
265
+ continue;
266
+ }
267
+ const rel = path.relative(scriptsDir, file).split(path.sep).join("/");
268
+ findings.push(...scanContent(content, rel));
269
+ }
270
+ return findings;
271
+ }
272
+
273
+ // ---------------------------------------------------------------------------
274
+ // Main
275
+ // ---------------------------------------------------------------------------
276
+ export function main(argv: readonly string[] = process.argv.slice(2)): number {
277
+ if (argv.includes("-h") || argv.includes("--help")) {
278
+ process.stdout.write(
279
+ "usage: lint_governed_writes [--json] [--quiet]\n" +
280
+ " Flags direct fs write/append calls to protected ledger/governance\n" +
281
+ " surfaces (docs/CLAIMS.md, agents/memory/intake/, agents/runtime/state/audit/)\n" +
282
+ " that bypass the sanctioned atomic-write layer or the append-only contract.\n" +
283
+ " Exit 2 on any finding, 0 clean.\n",
284
+ );
285
+ return 0;
286
+ }
287
+
288
+ const jsonMode = argv.includes("--json");
289
+ const quiet = argv.includes("--quiet");
290
+
291
+ const findings = scanScriptsDir(SCRIPTS_DIR);
292
+
293
+ if (jsonMode) {
294
+ process.stdout.write(JSON.stringify(findings, null, 2) + "\n");
295
+ return findings.length > 0 ? 2 : 0;
296
+ }
297
+
298
+ if (findings.length === 0) {
299
+ if (!quiet) {
300
+ process.stdout.write(
301
+ "✅ lint_governed_writes: clean — no direct writes to protected surfaces found.\n",
302
+ );
303
+ }
304
+ return 0;
305
+ }
306
+
307
+ for (const f of findings) {
308
+ process.stdout.write(
309
+ `❌ ${f.file}:${f.line} [${f.surface}/${f.policy}] ${f.call} — ${f.snippet}\n`,
310
+ );
311
+ }
312
+ process.stdout.write(
313
+ `\nlint_governed_writes: ${findings.length} finding(s). Route the write through ` +
314
+ "write_atomic (src/scripts/_lib/fs_atomic.ts) or the surface's sanctioned append " +
315
+ "call, or use lint-governed-writes-disable-next-line -- reason.\n",
316
+ );
317
+ return 2;
318
+ }
319
+
320
+ // Main-guard (realpath-compared, mirrors the repo convention — importing this
321
+ // module for its exports, e.g. from a test, never triggers a CLI run).
322
+ if (process.argv[1] !== undefined) {
323
+ try {
324
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
325
+ const argv1 = fs.realpathSync(path.resolve(process.argv[1]));
326
+ if (here === argv1) {
327
+ process.exit(main());
328
+ }
329
+ } catch {
330
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
331
+ if (import.meta.url === argvUrl) {
332
+ process.exit(main());
333
+ }
334
+ }
335
+ }
@@ -342,7 +342,13 @@ export function main(argv: readonly string[] | null = null): number {
342
342
  return sl.report(findings, { check_label: 'hidden-unicode' });
343
343
  }
344
344
 
345
+ // Bundle-safety: never auto-run when inlined into an esbuild bundle, where
346
+ // every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
347
+ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
345
348
  function _isCliEntry(): boolean {
349
+ if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
350
+ return false;
351
+ }
346
352
  if (process.argv[1] === undefined) {
347
353
  return false;
348
354
  }
@@ -33,6 +33,8 @@ const SCHEMA = path.join(ROOT, 'docs', 'contracts', 'mcp-registry-manifest.schem
33
33
  const MANIFEST = path.join(ROOT, 'dist', 'mcp', 'registry-manifest.json');
34
34
  const ROW_MD = path.join(ROOT, 'dist', 'mcp', 'awesome-mcp-servers.row.md');
35
35
  const CF_JSON = path.join(ROOT, 'dist', 'mcp', 'mcp-cloudflare-catalogue.json');
36
+ const SERVER_JSON = path.join(ROOT, 'dist', 'mcp', 'server.json');
37
+ const PKG_FILE = path.join(ROOT, 'package.json');
36
38
 
37
39
  function _relToRoot(p: string): string {
38
40
  return path.relative(ROOT, p);
@@ -293,7 +295,7 @@ function main(argv: readonly string[]): number {
293
295
  throw e;
294
296
  }
295
297
 
296
- for (const p of [SCHEMA, MANIFEST, ROW_MD, CF_JSON]) {
298
+ for (const p of [SCHEMA, MANIFEST, ROW_MD, CF_JSON, SERVER_JSON]) {
297
299
  if (!fs.existsSync(p)) {
298
300
  return _fail(`missing: ${_relToRoot(p)}`);
299
301
  }
@@ -324,6 +326,29 @@ function main(argv: readonly string[]): number {
324
326
  return _fail(`mcp-cloudflare-catalogue.json: ${(e as Error).message}`);
325
327
  }
326
328
 
329
+ // Official-registry payload (road-to-credible-install Phase 3): valid
330
+ // JSON, reverse-DNS name matching package.json `mcpName`, and version
331
+ // equal to package.json.version (the CI version-equality gate).
332
+ let server_payload: JsonObject;
333
+ try {
334
+ server_payload = JSON.parse(fs.readFileSync(SERVER_JSON, 'utf-8')) as JsonObject;
335
+ } catch (e) {
336
+ return _fail(`server.json: ${(e as Error).message}`);
337
+ }
338
+ const pkg_for_gate = JSON.parse(fs.readFileSync(PKG_FILE, 'utf-8')) as JsonObject;
339
+ if (server_payload['version'] !== pkg_for_gate['version']) {
340
+ return _fail(
341
+ `server.json version (${String(server_payload['version'])}) != package.json version ` +
342
+ `(${String(pkg_for_gate['version'])}) — re-run build:mcp-manifest`,
343
+ );
344
+ }
345
+ if (server_payload['name'] !== pkg_for_gate['mcpName']) {
346
+ return _fail(
347
+ `server.json name (${String(server_payload['name'])}) != package.json mcpName ` +
348
+ `(${String(pkg_for_gate['mcpName'])})`,
349
+ );
350
+ }
351
+
327
352
  if (!args.quiet) {
328
353
  const registries = (manifest as JsonObject)['registries'];
329
354
  const count = Array.isArray(registries) ? registries.length : 0;
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Personal-context tripwire over TRACKED memory files — invariant 3 of
4
+ * ADR-130 (`subject` axis, road-to-reachable-code-memory Phase 8).
5
+ *
6
+ * Hand-authored first-person / preference vocabulary (DE+EN) that indicates
7
+ * a `subject: user` record leaked into a tracked project artifact. On a hit
8
+ * it HALTS (exit 1) and NEVER rewrites — a human decides.
9
+ *
10
+ * ── Honest-null verdict (pre-registered in the roadmap, applied 2026-07-27):
11
+ * `--history` scanned the FULL git history of agents/memory/** at cut time —
12
+ * see the run record in agents/evidence/reports/spike-reachable-code-memory-s0.md.
13
+ * Per the pre-registration, ZERO fires across the full history means
14
+ * invariant 3 is UNFOUNDED: this script is retained as evidence + an
15
+ * on-demand tool, but it is deliberately NOT wired into CI; invariants 1–2
16
+ * (structural: lint_store_boundary + the memory_signal provenance gate)
17
+ * carry the boundary. A non-zero history result at cut time would have
18
+ * wired it as a vitest gate instead.
19
+ *
20
+ * Exit codes: 0 clean · 1 hits · 2 usage · 3 internal.
21
+ */
22
+ import { execFileSync } from 'node:child_process';
23
+ import fs from 'node:fs';
24
+ import path from 'node:path';
25
+ import { fileURLToPath, pathToFileURL } from 'node:url';
26
+
27
+ const _HERE = fileURLToPath(import.meta.url);
28
+ export const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
29
+
30
+ /** Tracked memory surfaces the tripwire watches. */
31
+ export const TRACKED_GLOB_ROOT = 'agents/memory';
32
+
33
+ /**
34
+ * Hand-authored personal-context vocabulary, DE+EN. Deliberately narrow:
35
+ * first-person preference/identity statements — not every "I" (change-log
36
+ * prose like "I/O" or quoted user feedback in an incident record must not
37
+ * trip). Word-boundary anchored; case-insensitive.
38
+ */
39
+ export const TRIPWIRE_PATTERNS: readonly RegExp[] = [
40
+ // EN — first-person preference / identity
41
+ /\bI (?:prefer|like|dislike|hate|want|always use|never use)\b/i,
42
+ /\bmy (?:name|email|address|phone|password|birthday|salary)\b/i,
43
+ /\bcall me\b/i,
44
+ // DE — first-person preference / identity (Du-form package: user prose)
45
+ /\bich (?:bevorzuge|mag|hasse|will|möchte|nutze immer|nutze nie)\b/i,
46
+ /\bmein[e]? (?:name|e-?mail|adresse|telefonnummer|passwort|geburtstag|gehalt)\b/i,
47
+ /\bnenn mich\b/i,
48
+ ];
49
+
50
+ export interface Hit {
51
+ file: string;
52
+ line: number;
53
+ pattern: string;
54
+ /** commit sha for --history hits; 'worktree' otherwise. */
55
+ ref: string;
56
+ }
57
+
58
+ export function scanText(text: string, file: string, ref: string): Hit[] {
59
+ const hits: Hit[] = [];
60
+ const lines = text.split('\n');
61
+ for (let i = 0; i < lines.length; i++) {
62
+ for (const re of TRIPWIRE_PATTERNS) {
63
+ if (re.test(lines[i]!)) {
64
+ hits.push({ file, line: i + 1, pattern: re.source, ref });
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ return hits;
70
+ }
71
+
72
+ function _git(root: string, args: string[]): string {
73
+ return execFileSync('git', args, { cwd: root, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
74
+ }
75
+
76
+ /** Scan the current worktree's tracked memory files. */
77
+ export function scanWorktree(root: string): Hit[] {
78
+ const out: Hit[] = [];
79
+ let files: string[];
80
+ try {
81
+ files = _git(root, ['ls-files', TRACKED_GLOB_ROOT]).split('\n').filter(Boolean);
82
+ } catch {
83
+ return out;
84
+ }
85
+ for (const f of files) {
86
+ const p = path.join(root, f);
87
+ if (!fs.existsSync(p)) continue;
88
+ out.push(...scanText(fs.readFileSync(p, 'utf8'), f, 'worktree'));
89
+ }
90
+ return out;
91
+ }
92
+
93
+ /** Scan EVERY historical version of every tracked memory file (all commits). */
94
+ export function scanHistory(root: string): { hits: Hit[]; commits: number; blobs: number } {
95
+ const shas = _git(root, ['log', '--all', '--pretty=%H', '--', TRACKED_GLOB_ROOT])
96
+ .split('\n')
97
+ .filter(Boolean);
98
+ const hits: Hit[] = [];
99
+ const seenBlobs = new Set<string>();
100
+ let blobs = 0;
101
+ for (const sha of shas) {
102
+ let listing: string;
103
+ try {
104
+ listing = _git(root, ['ls-tree', '-r', sha, '--', TRACKED_GLOB_ROOT]);
105
+ } catch {
106
+ continue;
107
+ }
108
+ for (const row of listing.split('\n').filter(Boolean)) {
109
+ // <mode> blob <hash>\t<path>
110
+ const m = /^\d+ blob ([0-9a-f]+)\t(.+)$/.exec(row);
111
+ if (!m) continue;
112
+ const [, blob, file] = m;
113
+ if (seenBlobs.has(blob!)) continue;
114
+ seenBlobs.add(blob!);
115
+ blobs++;
116
+ let content: string;
117
+ try {
118
+ content = _git(root, ['cat-file', 'blob', blob!]);
119
+ } catch {
120
+ continue;
121
+ }
122
+ hits.push(...scanText(content, file!, sha.slice(0, 10)));
123
+ }
124
+ }
125
+ return { hits, commits: shas.length, blobs };
126
+ }
127
+
128
+ export function main(argv: string[] = process.argv.slice(2)): number {
129
+ let root = REPO_ROOT;
130
+ let history = false;
131
+ for (let i = 0; i < argv.length; i++) {
132
+ const a = argv[i]!;
133
+ if (a === '--root') root = argv[++i] ?? root;
134
+ else if (a.startsWith('--root=')) root = a.slice('--root='.length);
135
+ else if (a === '--history') history = true;
136
+ else if (a === '-h' || a === '--help') {
137
+ process.stdout.write('usage: lint_memory_tripwire [--root ROOT] [--history]\n');
138
+ return 0;
139
+ } else {
140
+ process.stderr.write(`lint_memory_tripwire: unknown argument ${a}\n`);
141
+ return 2;
142
+ }
143
+ }
144
+ try {
145
+ if (history) {
146
+ const { hits, commits, blobs } = scanHistory(root);
147
+ process.stdout.write(
148
+ `scanned ${commits} commit(s), ${blobs} unique blob(s) under ${TRACKED_GLOB_ROOT}\n`,
149
+ );
150
+ if (hits.length === 0) {
151
+ process.stdout.write('✅ zero tripwire fires across the full history.\n');
152
+ return 0;
153
+ }
154
+ for (const h of hits) {
155
+ process.stdout.write(` 🔴 ${h.ref} ${h.file}:${h.line} (pattern: ${h.pattern})\n`);
156
+ }
157
+ process.stdout.write(`❌ ${hits.length} fire(s). HALT — never rewrite; a human decides.\n`);
158
+ return 1;
159
+ }
160
+ const hits = scanWorktree(root);
161
+ if (hits.length === 0) {
162
+ process.stdout.write('✅ tripwire clean on tracked memory files.\n');
163
+ return 0;
164
+ }
165
+ for (const h of hits) {
166
+ process.stdout.write(` 🔴 ${h.file}:${h.line} (pattern: ${h.pattern})\n`);
167
+ }
168
+ process.stdout.write(`❌ ${hits.length} fire(s). HALT — never rewrite; a human decides.\n`);
169
+ return 1;
170
+ } catch (exc) {
171
+ process.stderr.write(`lint_memory_tripwire: internal error: ${String(exc)}\n`);
172
+ return 3;
173
+ }
174
+ }
175
+
176
+ const _isMain = (() => {
177
+ if (process.argv[1] === undefined) return false;
178
+ try {
179
+ return pathToFileURL(fs.realpathSync(path.resolve(process.argv[1]))).href === import.meta.url;
180
+ } catch {
181
+ return pathToFileURL(path.resolve(process.argv[1])).href === import.meta.url;
182
+ }
183
+ })();
184
+ if (_isMain) {
185
+ process.exit(main());
186
+ }