@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
@@ -1451,9 +1451,30 @@ function execute(
1451
1451
  // publish that already happened.
1452
1452
  if (ci) {
1453
1453
  _step(9, total, 'Dispatch release-guard.yml + publish-npm.yml + cloud-release.yml for the tag');
1454
- run(['gh', 'workflow', 'run', 'release-guard.yml', '--ref', MAIN_BRANCH, '-f', `tag=${plan.target}`]);
1455
- run(['gh', 'workflow', 'run', 'publish-npm.yml', '--ref', MAIN_BRANCH, '-f', `tag=${plan.target}`]);
1456
- run(['gh', 'workflow', 'run', 'cloud-release.yml', '--ref', MAIN_BRANCH, '-f', `tag=${plan.target}`]);
1454
+ // NON-FATAL by design. By this point the release is already complete
1455
+ // — the tag is pushed and the GitHub Release is created above, and
1456
+ // npm publish runs asynchronously. These explicit dispatches are a
1457
+ // FALLBACK for a tag pushed with the default GITHUB_TOKEN, which does
1458
+ // NOT fire tag-triggered workflows (GitHub's recursion guard). When
1459
+ // the tag was pushed with a PAT (RELEASE_PR_TOKEN), those three
1460
+ // workflows already fired on the push and this dispatch is redundant.
1461
+ // Dispatching via the API additionally needs the token's
1462
+ // `actions:write` scope; a 403 here (scope missing) must NOT mark an
1463
+ // already-shipped release as failed — warn and continue.
1464
+ for (const wf of ['release-guard.yml', 'publish-npm.yml', 'cloud-release.yml']) {
1465
+ const r = run(['gh', 'workflow', 'run', wf, '--ref', MAIN_BRANCH, '-f', `tag=${plan.target}`], {
1466
+ check: false,
1467
+ });
1468
+ if (r.returncode !== 0) {
1469
+ process.stderr.write(
1470
+ `⚠️ Could not dispatch ${wf} (exit ${r.returncode}) — the release ${plan.target} is ` +
1471
+ `already complete (tag + GitHub Release created; npm publishes async). If the tag was ` +
1472
+ `pushed with a PAT, ${wf} already fired on the tag push. If you rely on the explicit ` +
1473
+ `dispatch, grant RELEASE_PR_TOKEN the "Actions: read and write" scope (fine-grained PAT) ` +
1474
+ `or the "workflow" scope (classic PAT).\n`,
1475
+ );
1476
+ }
1477
+ }
1457
1478
  }
1458
1479
  }
1459
1480
 
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Installer drift report — measures, never gates.
4
+ *
5
+ * Compares the sha256 hashes recorded in `agents/installed-tools.lock`
6
+ * (`kind: 'deployed'` entries) against the current on-disk content of those
7
+ * same files and reports anything locally modified or deleted since the
8
+ * last install/upgrade. This is telemetry for the "do consumers edit
9
+ * framework-authoritative files" premise — it is NEVER a gate. The drift
10
+ * report itself always exits 0 regardless of what it finds; only a usage
11
+ * error (unknown flag, missing value) exits non-zero, matching the rest of
12
+ * this package's CLI scripts.
13
+ *
14
+ * `install.ts`'s global-install upgrade path calls the same
15
+ * `_lib/install_drift.ts` library directly (not this CLI) and always
16
+ * proceeds with the redeploy regardless of what the report finds.
17
+ *
18
+ * Usage:
19
+ * ./scripts-run src/scripts/report_install_drift
20
+ * ./scripts-run src/scripts/report_install_drift --project <path>
21
+ * ./scripts-run src/scripts/report_install_drift --format json
22
+ *
23
+ * Exit codes: 0 report emitted (clean or drifted) · 2 usage error.
24
+ */
25
+ import * as fs from "node:fs";
26
+ import * as path from "node:path";
27
+ import { fileURLToPath, pathToFileURL } from "node:url";
28
+
29
+ import { collect_drift, format_drift_report } from "./_lib/install_drift.js";
30
+
31
+ interface Options {
32
+ project: string;
33
+ format: "text" | "json";
34
+ }
35
+
36
+ function fail(message: string): never {
37
+ process.stderr.write(`❌ report_install_drift: ${message}\n`);
38
+ process.exit(2);
39
+ }
40
+
41
+ function _parse(argv: string[]): Options {
42
+ const opts: Options = { project: process.cwd(), format: "text" };
43
+ for (let i = 0; i < argv.length; i += 1) {
44
+ const arg = argv[i];
45
+ if (arg === "--help" || arg === "-h") {
46
+ process.stdout.write(
47
+ "usage: report_install_drift [--project <path>] [--format text|json]\n",
48
+ );
49
+ process.exit(0);
50
+ } else if (arg === "--project") {
51
+ const value = argv[i + 1];
52
+ if (value === undefined) fail("--project requires a value");
53
+ opts.project = path.resolve(value);
54
+ i += 1;
55
+ } else if (arg === "--format") {
56
+ const value = argv[i + 1];
57
+ if (value !== "text" && value !== "json") {
58
+ fail(`--format must be 'text' or 'json' (got ${JSON.stringify(value ?? null)})`);
59
+ }
60
+ opts.format = value;
61
+ i += 1;
62
+ } else {
63
+ fail(`unknown argument: ${arg}`);
64
+ }
65
+ }
66
+ return opts;
67
+ }
68
+
69
+ /**
70
+ * Run the report and print it. Always returns 0 — the finding is telemetry,
71
+ * never a build/CI failure signal.
72
+ */
73
+ export function main(argv: string[] = process.argv.slice(2)): number {
74
+ const opts = _parse(argv);
75
+ const entries = collect_drift(opts.project);
76
+
77
+ if (opts.format === "json") {
78
+ process.stdout.write(
79
+ `${JSON.stringify(
80
+ {
81
+ project_root: opts.project,
82
+ manifest_found: entries !== null,
83
+ drift: entries ?? [],
84
+ },
85
+ null,
86
+ 2,
87
+ )}\n`,
88
+ );
89
+ } else {
90
+ process.stdout.write(format_drift_report(entries));
91
+ }
92
+ return 0;
93
+ }
94
+
95
+ // Main-guard (realpath-compared, mirrors the repo convention).
96
+ if (process.argv[1] !== undefined) {
97
+ try {
98
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
99
+ const argv1 = fs.realpathSync(path.resolve(process.argv[1]));
100
+ if (here === argv1) {
101
+ process.exit(main(process.argv.slice(2)));
102
+ }
103
+ } catch {
104
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
105
+ if (import.meta.url === argvUrl) {
106
+ process.exit(main(process.argv.slice(2)));
107
+ }
108
+ }
109
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Risk-escalation shadow report — measure before adding teeth.
3
+ *
4
+ * Walks the last N first-parent merges, classifies each one's touched paths by
5
+ * trust-boundary risk, and writes what *would* have escalated. Nothing is
6
+ * gated. Nothing fails. The output is a number whose only job is to decide
7
+ * whether the gate is worth building.
8
+ *
9
+ * This is the same sequencing ADR-127 used on `exec:` evidence: pre-register a
10
+ * threshold, measure, then decide. The threshold here — >= 5 of ~100 merges
11
+ * landing in a trust-boundary class — was written into
12
+ * `agents/roadmaps/road-to-executable-evidence.md` Phase 2 before this script
13
+ * was first run, so a disappointing number cannot be re-framed into a
14
+ * justification afterwards.
15
+ *
16
+ * Why it must not gate yet: the escalation the reference pairs this with is
17
+ * *non-declinable* — a user's "no" stops counting. That trades away something
18
+ * this package's authority model holds (`agent-authority`, `ask-when-uncertain`),
19
+ * and a trade that size needs evidence that the class it protects is real here,
20
+ * not merely real somewhere.
21
+ *
22
+ * Usage:
23
+ * ./scripts-run src/scripts/risk_escalation_shadow
24
+ * ./scripts-run src/scripts/risk_escalation_shadow --limit 200
25
+ * ./scripts-run src/scripts/risk_escalation_shadow --json
26
+ */
27
+
28
+ import { spawnSync } from 'node:child_process';
29
+ import * as fs from 'node:fs';
30
+ import * as path from 'node:path';
31
+ import { fileURLToPath, pathToFileURL } from 'node:url';
32
+
33
+ import { classify_diff, type RiskClass } from './_lib/risk_paths.js';
34
+
35
+ const _FILE = fileURLToPath(import.meta.url);
36
+ const REPO = path.resolve(path.dirname(_FILE), '..', '..');
37
+ const OUT_REL = 'internal/reports/risk-escalation-shadow.json';
38
+
39
+ /** Pre-registered in the roadmap BEFORE this report was first read. */
40
+ const TEETH_THRESHOLD = 5;
41
+
42
+ interface MergeRow {
43
+ sha: string;
44
+ subject: string;
45
+ files: number;
46
+ risk: RiskClass;
47
+ reasons: string[];
48
+ }
49
+
50
+ function git(args: string[]): string {
51
+ const r = spawnSync('git', args, { cwd: REPO, encoding: 'utf-8', maxBuffer: 64 * 1024 * 1024 });
52
+ if (r.status !== 0) return '';
53
+ return r.stdout ?? '';
54
+ }
55
+
56
+ function parse_limit(argv: string[]): number {
57
+ const i = argv.indexOf('--limit');
58
+ if (i === -1) return 100;
59
+ const n = Number(argv[i + 1]);
60
+ return Number.isFinite(n) && n > 0 ? n : 100;
61
+ }
62
+
63
+ export function main(argv: string[] = process.argv.slice(2)): number {
64
+ const limit = parse_limit(argv);
65
+ const asJson = argv.includes('--json');
66
+
67
+ const log = git(['log', '--first-parent', `-${limit}`, '--format=%H%x00%s']).trim();
68
+ if (!log) {
69
+ process.stderr.write('❌ risk_escalation_shadow: no git history readable\n');
70
+ return 2;
71
+ }
72
+
73
+ const rows: MergeRow[] = [];
74
+ for (const line of log.split('\n')) {
75
+ const [sha, subject] = line.split('\0');
76
+ if (!sha) continue;
77
+ // First-parent diff: what this merge brought to the trunk.
78
+ const files = git(['show', '--first-parent', '--name-only', '--format=', sha])
79
+ .split('\n')
80
+ .map((s) => s.trim())
81
+ .filter((s) => s.length > 0);
82
+ if (files.length === 0) continue;
83
+ const verdict = classify_diff(files);
84
+ rows.push({
85
+ sha: sha.slice(0, 9),
86
+ subject: (subject ?? '').slice(0, 90),
87
+ files: files.length,
88
+ risk: verdict.risk,
89
+ reasons: [...new Set(verdict.reasons.map((r) => r.because))],
90
+ });
91
+ }
92
+
93
+ const counts: Record<RiskClass, number> = {
94
+ none: 0,
95
+ governance: 0,
96
+ auth: 0,
97
+ 'trust-boundary': 0,
98
+ };
99
+ for (const r of rows) counts[r.risk] += 1;
100
+
101
+ const trustBoundary = counts['trust-boundary'];
102
+ const justified = trustBoundary >= TEETH_THRESHOLD;
103
+
104
+ const report = {
105
+ _doc:
106
+ 'Shadow report for trust-boundary risk escalation. NOTHING IS GATED BY THIS FILE. It answers one ' +
107
+ 'question: over recent history, how often did a merge land in a class the reference would have ' +
108
+ 'escalated? The threshold below was pre-registered in the roadmap before this was first read.',
109
+ measured_at_sha: rows[0]?.sha ?? null,
110
+ merges_examined: rows.length,
111
+ pre_registered_teeth_threshold: TEETH_THRESHOLD,
112
+ counts,
113
+ trust_boundary_merges: trustBoundary,
114
+ decision: justified
115
+ ? `JUSTIFIED — ${trustBoundary} of ${rows.length} first-parent merges touched a trust-boundary path, ` +
116
+ `at or above the pre-registered threshold of ${TEETH_THRESHOLD}. A non-declinable escalation for ` +
117
+ 'that class gets its own ADR and its own PR; it is deliberately NOT enabled by this report.'
118
+ : `NOT JUSTIFIED — ${trustBoundary} of ${rows.length} first-parent merges touched a trust-boundary ` +
119
+ `path, below the pre-registered threshold of ${TEETH_THRESHOLD}. The escalation stays unbuilt and ` +
120
+ 'the authority model stays intact. This is the honest-null outcome, published as the answer.',
121
+ note:
122
+ 'Classification is path-based and reproducible from the diff alone — no model judgement. Docs-only ' +
123
+ 'changes are exempt by extension, except on kernel-rule paths, where a markdown file IS the ' +
124
+ 'governed surface.',
125
+ escalating_merges: rows.filter((r) => r.risk !== 'none').slice(0, 40),
126
+ };
127
+
128
+ const abs = path.join(REPO, OUT_REL);
129
+ fs.mkdirSync(path.dirname(abs), { recursive: true });
130
+ fs.writeFileSync(abs, JSON.stringify(report, null, 2) + '\n');
131
+
132
+ if (asJson) {
133
+ process.stdout.write(JSON.stringify(report, null, 2) + '\n');
134
+ return 0;
135
+ }
136
+
137
+ process.stdout.write(
138
+ `risk-escalation shadow · ${rows.length} first-parent merges examined\n` +
139
+ ` trust-boundary ${counts['trust-boundary']} · auth ${counts.auth} · ` +
140
+ `governance ${counts.governance} · none ${counts.none}\n` +
141
+ ` pre-registered threshold: ${TEETH_THRESHOLD} → ${justified ? 'JUSTIFIED' : 'NOT JUSTIFIED'}\n` +
142
+ `✅ wrote ${OUT_REL}\n`,
143
+ );
144
+ return 0;
145
+ }
146
+
147
+ function _isCliEntry(): boolean {
148
+ const a = process.argv[1];
149
+ if (!a) return false;
150
+ if (a === _FILE || pathToFileURL(path.resolve(a)).href === import.meta.url) return true;
151
+ try {
152
+ return fs.realpathSync(a) === fs.realpathSync(_FILE);
153
+ } catch {
154
+ return false;
155
+ }
156
+ }
157
+
158
+ if (_isCliEntry()) process.exit(main());
159
+
160
+ export { REPO, OUT_REL, TEETH_THRESHOLD };
@@ -40,6 +40,7 @@ import { fileURLToPath, pathToFileURL } from "node:url";
40
40
 
41
41
  import { hardenedSpawnEnv } from "./_lib/spawn_env.js";
42
42
  import { log_dispatch_issue } from "./hooks/dispatch_issues.js";
43
+ import { readHookStdin } from "./hooks/hook_stdin.js";
43
44
 
44
45
  export const REPLAY_ENV_VAR = "AGENT_CONFIG_REPLAY";
45
46
 
@@ -458,11 +459,7 @@ function parse_args(argv: string[]): ParsedArgs {
458
459
  }
459
460
 
460
461
  function _readStdin(): string {
461
- try {
462
- return fs.readFileSync(0, "utf-8");
463
- } catch {
464
- return "";
465
- }
462
+ return readHookStdin();
466
463
  }
467
464
 
468
465
  export function main(argv?: string[]): number {
@@ -471,7 +468,13 @@ export function main(argv?: string[]): number {
471
468
  return run(_readStdin(), { consumer_root: root, verbose: args.verbose });
472
469
  }
473
470
 
471
+ // Bundle-safety: never auto-run when inlined into an esbuild bundle, where
472
+ // every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
473
+ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
474
474
  function _isCliEntry(): boolean {
475
+ if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
476
+ return false;
477
+ }
475
478
  if (process.argv[1] === undefined) {
476
479
  return false;
477
480
  }
@@ -95,6 +95,29 @@
95
95
  }
96
96
  }
97
97
  },
98
+ "screenshots": {
99
+ "type": "object",
100
+ "additionalProperties": true,
101
+ "properties": {
102
+ "identity_allowlist": {
103
+ "type": "array",
104
+ "items": { "type": "string" },
105
+ "default": [],
106
+ "description": "Consumed by the doc-screenshot-hygiene rule and screenshot-hygiene skill. Public identity tokens SAFE to show unredacted in a documentation screenshot — the maintainer's own public handles plus well-known fake-data tokens. Not a general fake-data dictionary and not identity-resolution: everything not listed is treated as sensitive by default, and a public handle co-located with a real name does not whitelist the real name. Default [] = nothing auto-allowed."
107
+ },
108
+ "forbid_terminal_capture": {
109
+ "type": "boolean",
110
+ "default": true,
111
+ "description": "Consumed by the doc-screenshot-hygiene rule. true (default) = terminal/CLI/IDE screenshots are forbidden (highest leak vector: absolute local paths, env tokens); use text code blocks with text redaction instead. false = allowed, still subject to the data-bearing human gate."
112
+ },
113
+ "data_bearing_gate": {
114
+ "type": "string",
115
+ "enum": ["on", "off"],
116
+ "default": "on",
117
+ "description": "Consumed by the doc-screenshot-hygiene rule. on (default) = a data-bearing screenshot embed is gated behind this-turn human confirmation; uncertain/unresolved regions redact-or-refuse, never ship-and-hope; illustrative/no-data screenshots may embed with a stated justification. off = no data-bearing gate (the anonymization taxonomy still applies)."
118
+ }
119
+ }
120
+ },
98
121
  "code_style": {
99
122
  "type": "object",
100
123
  "additionalProperties": true,
@@ -0,0 +1,89 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "license-policy.schema.json",
4
+ "title": "license-policy.yaml — derived borrow-compatibility policy",
5
+ "description": "Contract for the S1.2 override surface (road-to-provenance-and-license-governance). `policy.{allow,conditional,deny}` are the closed compatibility-matrix source classes; the top-level `deny` array is a flattened, concrete-SPDX-id view of `policy.deny` — it is the shape `src/scripts/lint_provenance.ts`'s `resolveDenyPolicy()` already reads directly, so this file works as its override surface without any change on that side. `derived_from: manual` marks the file as a consumer override the detector must never silently overwrite (loosening any class below the derived verdict is rejected unless this is set). Enforced by the hand-rolled Draft-07 subset validator in validate_frontmatter.ts (`validate()`/`load_schema()`) — keep to its supported keyword set: type, required, properties, additionalProperties, items, minItems, pattern, minLength, maxLength, enum. No oneOf/const/patternProperties.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "derived_from", "detection", "target_class", "workspace_scope", "policy", "deny", "warnings", "derived_at"],
9
+ "properties": {
10
+ "schema_version": {
11
+ "type": "integer",
12
+ "enum": [1]
13
+ },
14
+ "derived_from": {
15
+ "type": "string",
16
+ "enum": [
17
+ "MIT", "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "ISC", "0BSD",
18
+ "MPL-2.0", "LGPL-2.1", "LGPL-3.0", "GPL-2.0", "GPL-3.0", "AGPL-3.0",
19
+ "SSPL-1.0", "Unlicense", "CC0-1.0",
20
+ "none-detected", "manual"
21
+ ],
22
+ "description": "The SPDX id the policy was derived from; 'none-detected' when no license source resolved; 'manual' when a consumer authored this file directly (never auto-overwritten, and the only value allowed to loosen policy below the derived verdict)."
23
+ },
24
+ "detection": {
25
+ "type": "object",
26
+ "additionalProperties": false,
27
+ "required": ["source", "license_sha256"],
28
+ "properties": {
29
+ "source": {
30
+ "type": "string",
31
+ "enum": ["license-file", "package-json", "composer-json", "none", "manual"]
32
+ },
33
+ "license_sha256": {
34
+ "pattern": "^[a-f0-9]{64}$",
35
+ "description": "SHA-256 hex digest of the detected LICENSE/LICENSE.md/COPYING file content; null when no such file exists. A later change to that file's content changes this hash, which is the invalidation trigger (re-derive on mismatch, escalate on downgrade)."
36
+ }
37
+ }
38
+ },
39
+ "target_class": {
40
+ "type": "string",
41
+ "enum": ["permissive", "weak-copyleft", "gpl-2.0", "gpl-3.0", "agpl", "none"]
42
+ },
43
+ "workspace_scope": {
44
+ "type": "string",
45
+ "enum": ["single", "homogeneous-multi"],
46
+ "description": "'single' when the repo declares no workspaces; 'homogeneous-multi' when workspaces are declared and none diverge from the root SPDX id. A divergent workspace escalates instead of writing this file at all (v1 scope-limiter — full per-workspace derivation is parked, see agents/roadmaps/later/road-to-per-workspace-license-policy.md)."
47
+ },
48
+ "policy": {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": ["allow", "conditional", "deny"],
52
+ "description": "The closed compatibility-matrix verdict, keyed by SOURCE license class (not concrete SPDX id) — this is the roadmap S1.2 matrix output. The three arrays repeat the same item schema inline (not $ref — the hand-rolled Draft-07 subset validator this file is checked against does not resolve $ref).",
53
+ "properties": {
54
+ "allow": {
55
+ "type": "array",
56
+ "items": { "type": "string", "enum": ["permissive", "public-domain", "weak-copyleft", "gpl-2.0", "gpl-3.0", "agpl", "sspl", "unknown"] }
57
+ },
58
+ "conditional": {
59
+ "type": "array",
60
+ "items": { "type": "string", "enum": ["permissive", "public-domain", "weak-copyleft", "gpl-2.0", "gpl-3.0", "agpl", "sspl", "unknown"] }
61
+ },
62
+ "deny": {
63
+ "type": "array",
64
+ "items": { "type": "string", "enum": ["permissive", "public-domain", "weak-copyleft", "gpl-2.0", "gpl-3.0", "agpl", "sspl", "unknown"] }
65
+ }
66
+ }
67
+ },
68
+ "deny": {
69
+ "type": "array",
70
+ "items": {
71
+ "type": "string",
72
+ "enum": [
73
+ "MIT", "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "ISC", "0BSD",
74
+ "MPL-2.0", "LGPL-2.1", "LGPL-3.0", "GPL-2.0", "GPL-3.0", "AGPL-3.0",
75
+ "SSPL-1.0", "Unlicense", "CC0-1.0"
76
+ ]
77
+ },
78
+ "description": "Flattened concrete-SPDX-id expansion of policy.deny — the shape lint_provenance.ts's resolveDenyPolicy() reads directly (top-level `deny: [<SPDX id>, ...]`). Never hand-edit; loosening this array without derived_from: manual is rejected by the merge step."
79
+ },
80
+ "warnings": {
81
+ "type": "array",
82
+ "items": { "type": "string" }
83
+ },
84
+ "derived_at": {
85
+ "type": "string",
86
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "provenance-borrow.schema.json",
4
+ "title": "Provenance ledger borrow record",
5
+ "description": "One line of provenance/borrows.jsonl — a single conscious external-code borrow. Contract: provenance/README.md. Enforced by src/scripts/lint_provenance.ts (hand-rolled validator, following the ticket.schema.json / ticket-manifest.schema.json precedent — this file documents the contract; it is not loaded at runtime).",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["source_url", "license", "source_sha", "borrowed_at", "files", "transformation_note", "cleared_by"],
9
+ "properties": {
10
+ "source_url": {
11
+ "type": "string",
12
+ "pattern": "^(https?://\\S+|git@\\S+)$",
13
+ "description": "Where the borrowed code came from."
14
+ },
15
+ "license": {
16
+ "type": "string",
17
+ "description": "SPDX identifier of the source's license, or the literal 'unknown'. 'unknown' and any deny-class SPDX id (GPL/AGPL/SSPL family, under the default conservative policy) fail the linter — an unresolved license must never land in the ledger (principle #1: unknown escalates, never down-guessed)."
18
+ },
19
+ "source_sha": {
20
+ "type": "string",
21
+ "pattern": "^[0-9a-fA-F]{7,64}$",
22
+ "description": "Commit or blob SHA the borrow was taken from."
23
+ },
24
+ "borrowed_at": {
25
+ "type": "string",
26
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
27
+ "description": "ISO-8601 date (YYYY-MM-DD) the borrow landed."
28
+ },
29
+ "files": {
30
+ "type": "array",
31
+ "minItems": 1,
32
+ "items": { "type": "string" },
33
+ "description": "Repo-relative paths touched by the borrow. Every path must exist and must not escape the repo root."
34
+ },
35
+ "transformation_note": {
36
+ "type": "string",
37
+ "minLength": 20,
38
+ "description": "What structurally changed. Rename-only phrasing is rejected — per principle #6, rename-only is not transformation; clearing requires structural re-derivation (the hit disappears on rescan) or an attributed ledger entry describing an actual structural change."
39
+ },
40
+ "cleared_by": {
41
+ "type": "string",
42
+ "enum": ["rescan", "ledger", "human"],
43
+ "description": "How the borrow was cleared: an automated rescan found the hit gone after rewrite, this ledger entry itself is the clearance, or a human reviewed and cleared it."
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://github.com/event4u-app/agent-config/scripts/schemas/reach-channels.schema.json",
4
+ "x-schemaVersion": "1.0.0",
5
+ "title": "Reach channel registry (src/config/reach-channels.yml)",
6
+ "$comment": "road-to-internet-reach Phase 1. Validated by src/scripts/check_reach_channels.ts (task check-reach-channels). SCOPE: standalone operator tooling — the registry answers 'which external backend does a reach recipe need, is it healthy, is its install command pinned'. The Phase 0 benchmark returned band: stop, so no channel here is routed, recommended, or agent-facing; nothing in this schema may be read as a routing table. Lifecycle vocabulary is REUSED from docs/contracts/provider-lifecycle.md — never fork a second enum. NO $ref / patternProperties / if-then anywhere: the validator is the Draft-07 subset exported by src/scripts/validate_frontmatter.ts (type, required, properties, additionalProperties:false, items, minItems, pattern, minLength, enum), so the install-string schema is inlined per platform key on purpose. DELIBERATELY ABSENT — a per-backend readiness field (road-to-gated-reach Phase 2 step 3): a backend can pass its `--version` probe and still be unable to retrieve (`yt-dlp` needs an external JavaScript runtime it must be configured to use), and that config-semantic check is implemented DOCTOR-SIDE, keyed on the backend id, in src/scripts/reach_doctor.ts § READINESS_REQUIREMENTS. Rationale: (1) it keeps this schema honest for the backends that have no such requirement — they declare nothing, instead of each omitting an optional key a reader must interpret as an absence; (2) the requirement is a property of the upstream tool, not of an operator's registry entry, so a registry that could omit it would hand back the very false green the check closes; (3) this file is UNTRUSTED input at runtime (reach_doctor.collect() validates it before spawning anything), and a field of the form 'check this config file' would widen that input's influence into which local path the doctor reads; (4) same precedent as the doctor's DEEP_PROBES table, which is code-side for the same reason. The rejected trade-off, stated: a field here would be visible to an operator reading the registry and would let a future backend with the same need be added in YAML rather than in code — that cost is accepted, because its failure mode is only extra maintainer work, whereas the alternative's failure mode is a wrong health verdict.",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": ["schema_version", "channels"],
10
+ "properties": {
11
+ "schema_version": {
12
+ "type": "string",
13
+ "enum": ["reach-channels-v1"],
14
+ "description": "Registry format version. Bumped only on a breaking shape change."
15
+ },
16
+ "channels": {
17
+ "type": "array",
18
+ "minItems": 1,
19
+ "description": "Channel list. A channel is a retrieval need (repository metadata, a feed, a page read); its `backends` are the ORDERED candidate tools that can satisfy it — first healthy candidate wins, so switching a backend is reordering this list, never editing code. Order carries meaning; channel order does not.",
20
+ "items": {
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "required": ["id", "description", "tier", "lifecycle", "override_key", "last_verified", "backends"],
24
+ "properties": {
25
+ "id": {
26
+ "type": "string",
27
+ "pattern": "^[a-z][a-z0-9-]*$",
28
+ "description": "Channel slug — unique within the registry, lowercase."
29
+ },
30
+ "description": {
31
+ "type": "string",
32
+ "minLength": 10,
33
+ "description": "What the channel retrieves, in operator terms. Never a recommendation to use it."
34
+ },
35
+ "tier": {
36
+ "type": "string",
37
+ "enum": ["zero-config", "free-key", "login"],
38
+ "description": "Access cost to the operator: `zero-config` = no credential; `free-key` = a free token/API key the operator provisions; `login` = an authenticated account session. Documents setup effort only — it does not authorize credential harvesting of any kind."
39
+ },
40
+ "lifecycle": {
41
+ "type": "string",
42
+ "enum": ["experimental", "stable", "deprecated", "community"],
43
+ "description": "Reused verbatim from docs/contracts/provider-lifecycle.md § tiers. `experimental` = shape is right, no maintainer-verified real run; `stable` = maintainer-verified against a real run at least once; `deprecated` = successor declared, kept for one migration window (see removal_after / replacement); `community` = externally contributed, best-effort."
44
+ },
45
+ "override_key": {
46
+ "type": "string",
47
+ "pattern": "^reach\\.channels\\.[a-z0-9-]+\\.backend$",
48
+ "description": "Settings key by which an operator pins one backend for this channel, bypassing candidate order."
49
+ },
50
+ "last_verified": {
51
+ "type": "string",
52
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
53
+ "description": "ISO date the channel's backends and pins were last checked by a human. MUST be quoted in YAML — an unquoted date parses as a timestamp, not a string, and fails this type check loudly. Replaces a scheduled network CI job: staleness is checked offline against this field."
54
+ },
55
+ "removal_after": {
56
+ "type": "string",
57
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
58
+ "description": "Deprecation path, optional. Only meaningful with lifecycle `deprecated`: until this date the channel still probes with a warning; past it the doctor reports the channel as removed and the staleness lint flags its continued presence in this file."
59
+ },
60
+ "replacement": {
61
+ "type": "string",
62
+ "pattern": "^[a-z][a-z0-9-]*$",
63
+ "description": "Deprecation path, optional. Channel id that supersedes this one."
64
+ },
65
+ "credential_path": {
66
+ "type": "string",
67
+ "minLength": 1,
68
+ "pattern": "^[^\\n]+$",
69
+ "description": "Optional path to the credential file this channel's backend reads (`~` is expanded). The doctor ONLY stats it, to warn when it is group- or world-readable — it never opens it, never hashes it, and never reports its contents. Declared here because reach_doctor.ts enforces this schema at runtime and additionalProperties is false, so a field the code supports must be declared or no registry could use it. No shipped channel declares one."
70
+ },
71
+ "backends": {
72
+ "type": "array",
73
+ "minItems": 1,
74
+ "description": "Ordered candidate tools. Each is an alternative that satisfies the channel on its own — not a pipeline stage.",
75
+ "items": {
76
+ "type": "object",
77
+ "additionalProperties": false,
78
+ "required": ["id", "probe_cmd", "probe_args", "install"],
79
+ "properties": {
80
+ "id": {
81
+ "type": "string",
82
+ "pattern": "^[a-z][a-z0-9_.-]*$",
83
+ "description": "Backend slug — unique within its channel."
84
+ },
85
+ "probe_cmd": {
86
+ "type": "string",
87
+ "pattern": "^[a-z][a-z0-9_.-]*$",
88
+ "description": "Bare executable name resolved on PATH. No path separators, no shell — the probe layer spawns it directly through hardenedSpawnEnv(). MUST equal this backend's `id`: a backend probes its own binary and nothing else, so a report row labelled `gh` can never be the health of `/bin/sh`. The equality is a cross-field rule this Draft-07 subset cannot express, so it is asserted by check_probe_cmd_binding() in src/scripts/check_reach_channels.ts and reported as rule `probe_cmd-binding`."
89
+ },
90
+ "probe_args": {
91
+ "type": "array",
92
+ "minItems": 1,
93
+ "description": "Side-effect-free probe arguments only — a version / help / status query. The item pattern is an ALLOWLIST, not a denylist: an argument must be flag-shaped (`--version`, `-V`, `version`, `rate_limit`) and nothing else. A denylist was tried first and leaked — it admitted `cp`, `cat`, `-c`, `--data-binary` and every URL, so `probe_cmd: sh` + `probe_args: [\"-c\", \"<payload>\"]` passed the gate. What is actually true after the allowlist plus the probe_cmd===id binding plus runtime enforcement of this schema in reach_doctor.collect(): no path, no URL, no shell metacharacter, and no `-c`-style inline payload can reach the spawned child, and the child is the backend's own binary. This bounds the argument shape; it is not a proof that every upstream binary is side-effect-free under every flag — that judgement stays with the human who adds the backend.",
94
+ "items": {
95
+ "type": "string",
96
+ "pattern": "^-{0,2}[A-Za-z][A-Za-z0-9._-]*$"
97
+ }
98
+ },
99
+ "install": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": ["default"],
103
+ "description": "Human-performed install prescription per platform, selected by process.platform with `default` as the fallback. The package NEVER runs these: prescription-first, no auto-install, no piped remote installer. Platform keys are optional; `default` is not.",
104
+ "properties": {
105
+ "darwin": {
106
+ "type": "string",
107
+ "pattern": "^(?!.*(?:\\blatest\\b|\\bmain\\b|\\bmaster\\b|\\bHEAD\\b|archive/|\\.zip|\\.tgz|\\.tar\\.gz|\\.tar\\.xz))(?:os-baseline: [^\\n]{10,}|(?=.*(?:(?:==|@|=)v?[0-9]+(?:\\.[0-9]+)*|--version[ =]v?[0-9]+(?:\\.[0-9]+)*|\\sv?[0-9]+\\.[0-9]+\\.[0-9]+))[^\\n]+)$",
108
+ "description": "See `default` for the pinning contract."
109
+ },
110
+ "linux": {
111
+ "type": "string",
112
+ "pattern": "^(?!.*(?:\\blatest\\b|\\bmain\\b|\\bmaster\\b|\\bHEAD\\b|archive/|\\.zip|\\.tgz|\\.tar\\.gz|\\.tar\\.xz))(?:os-baseline: [^\\n]{10,}|(?=.*(?:(?:==|@|=)v?[0-9]+(?:\\.[0-9]+)*|--version[ =]v?[0-9]+(?:\\.[0-9]+)*|\\sv?[0-9]+\\.[0-9]+\\.[0-9]+))[^\\n]+)$",
113
+ "description": "See `default` for the pinning contract."
114
+ },
115
+ "win32": {
116
+ "type": "string",
117
+ "pattern": "^(?!.*(?:\\blatest\\b|\\bmain\\b|\\bmaster\\b|\\bHEAD\\b|archive/|\\.zip|\\.tgz|\\.tar\\.gz|\\.tar\\.xz))(?:os-baseline: [^\\n]{10,}|(?=.*(?:(?:==|@|=)v?[0-9]+(?:\\.[0-9]+)*|--version[ =]v?[0-9]+(?:\\.[0-9]+)*|\\sv?[0-9]+\\.[0-9]+\\.[0-9]+))[^\\n]+)$",
118
+ "description": "See `default` for the pinning contract."
119
+ },
120
+ "default": {
121
+ "type": "string",
122
+ "pattern": "^(?!.*(?:\\blatest\\b|\\bmain\\b|\\bmaster\\b|\\bHEAD\\b|archive/|\\.zip|\\.tgz|\\.tar\\.gz|\\.tar\\.xz))(?:os-baseline: [^\\n]{10,}|(?=.*(?:(?:==|@|=)v?[0-9]+(?:\\.[0-9]+)*|--version[ =]v?[0-9]+(?:\\.[0-9]+)*|\\sv?[0-9]+\\.[0-9]+\\.[0-9]+))[^\\n]+)$",
123
+ "description": "PINNING CONTRACT — an install prescription is EITHER (a) a command carrying an explicit version specifier (`name==1.2.3`, `name@22`, `--version 2.96.0`, or a whitespace-separated exact `1.2.3` triple), OR (b) an `os-baseline: <explanation>` sentinel for a tool the platform ships and no package install is prescribed for. Everything else FAILS: an unpinned command, and any moving-target source — `latest`, `main`, `master`, `HEAD`, `archive/…`, `.zip`, `.tgz`, `.tar.gz`, `.tar.xz`. This mechanizes the supply-chain intake floor (verify, pin, lock, never pipe a remote script to a shell) instead of asserting it."
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }