@event4u/agent-config 9.8.0 → 9.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (817) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +278 -298
  3. package/CONTRIBUTING.md +23 -7
  4. package/MIGRATION.md +20 -0
  5. package/README.md +55 -9
  6. package/dist/agent-src/commands/agents/audit.md +1 -1
  7. package/dist/agent-src/commands/agents/optimize.md +2 -2
  8. package/dist/agent-src/commands/agents/user.md +1 -1
  9. package/dist/agent-src/commands/agents.md +1 -1
  10. package/dist/agent-src/commands/check-current-md.md +3 -3
  11. package/dist/agent-src/commands/fix/portability.md +2 -2
  12. package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
  13. package/dist/agent-src/commands/fix/refs.md +2 -2
  14. package/dist/agent-src/commands/fix/route.md +4 -3
  15. package/dist/agent-src/commands/fix.md +9 -6
  16. package/dist/agent-src/commands/ghostwriter.md +1 -1
  17. package/dist/agent-src/commands/image.md +1 -1
  18. package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
  19. package/dist/agent-src/commands/optimize/skills.md +2 -2
  20. package/dist/agent-src/commands/post-as.md +1 -1
  21. package/dist/agent-src/commands/research.md +1 -1
  22. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  23. package/dist/agent-src/commands/security-audit-config.md +1 -1
  24. package/dist/agent-src/commands/team/delegate.md +4 -0
  25. package/dist/agent-src/commands/video.md +1 -1
  26. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
  27. package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
  28. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
  29. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
  30. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
  31. package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
  32. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
  33. package/dist/agent-src/rules/code-provenance.md +112 -0
  34. package/dist/agent-src/rules/external-code-graph-interop.md +4 -4
  35. package/dist/agent-src/rules/history-discipline.md +80 -0
  36. package/dist/agent-src/rules/no-roadmap-references.md +1 -1
  37. package/dist/agent-src/rules/php-coding.md +1 -0
  38. package/dist/agent-src/rules/reviewer-awareness.md +1 -0
  39. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
  40. package/dist/agent-src/rules/roadmap-progress-sync.md +7 -0
  41. package/dist/agent-src/rules/scale-discipline.md +92 -0
  42. package/dist/agent-src/rules/security-sensitive-stop.md +10 -0
  43. package/dist/agent-src/rules/session-canary.md +77 -0
  44. package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
  45. package/dist/agent-src/rules/tool-safety.md +3 -1
  46. package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
  47. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  48. package/dist/agent-src/skills/code-intelligence/SKILL.md +17 -14
  49. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  50. package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
  51. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  52. package/dist/agent-src/skills/design-review/SKILL.md +5 -6
  53. package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
  54. package/dist/agent-src/skills/history-design/SKILL.md +101 -0
  55. package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
  56. package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
  57. package/dist/agent-src/skills/image-editing/SKILL.md +1 -1
  58. package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
  59. package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
  60. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  61. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
  62. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
  63. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
  64. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
  65. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
  66. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
  67. package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
  68. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  69. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
  70. package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
  71. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
  72. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
  73. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
  74. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
  75. package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
  76. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
  77. package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
  78. package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
  79. package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
  80. package/dist/agent-src/skills/secrets-management/SKILL.md +3 -4
  81. package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
  82. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
  83. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
  84. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  85. package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
  86. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
  87. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
  88. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  89. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
  90. package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
  91. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
  92. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
  93. package/dist/agent-src/templates/AGENTS.md +1 -1
  94. package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
  95. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  96. package/dist/agent-src/templates/command.md +3 -3
  97. package/dist/agent-src/templates/persona.md +2 -2
  98. package/dist/agent-src/templates/rule.md +2 -2
  99. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  100. package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
  101. package/dist/cli/commands/doctorShell.js +20 -0
  102. package/dist/cli/commands/doctorShell.js.map +1 -1
  103. package/dist/cli/commands/rtkDetect.js +58 -0
  104. package/dist/cli/commands/rtkDetect.js.map +1 -0
  105. package/dist/cli/firstRunNotice.js +70 -0
  106. package/dist/cli/firstRunNotice.js.map +1 -0
  107. package/dist/cli/main.js +35 -3
  108. package/dist/cli/main.js.map +1 -1
  109. package/dist/cli/registry.js +7 -1
  110. package/dist/cli/registry.js.map +1 -1
  111. package/dist/discovery/deprecation-report.md +1 -1
  112. package/dist/discovery/discovery-manifest.json +362 -78
  113. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  114. package/dist/discovery/discovery-manifest.summary.md +6 -4
  115. package/dist/discovery/orphan-report.md +1 -1
  116. package/dist/discovery/packs.json +90 -8
  117. package/dist/discovery/trust-report.md +11 -11
  118. package/dist/discovery/workspaces.json +31 -7
  119. package/dist/hooks/dispatch.js +19475 -0
  120. package/dist/install/agentSwitchDetection.js +75 -0
  121. package/dist/install/agentSwitchDetection.js.map +1 -0
  122. package/dist/install/agentSwitchProfile.js +117 -0
  123. package/dist/install/agentSwitchProfile.js.map +1 -0
  124. package/dist/install/atomic.js +1 -1
  125. package/dist/install/detect.js +1 -1
  126. package/dist/install/install.mjs +775 -486
  127. package/dist/install/rtkDetection.js +213 -0
  128. package/dist/install/rtkDetection.js.map +1 -0
  129. package/dist/install/rule_scope.js +2 -1
  130. package/dist/install/rule_scope.js.map +1 -1
  131. package/dist/install/types.js +2 -2
  132. package/dist/install/wizard-plan.js +1 -1
  133. package/dist/install/wizardDismissals.js +58 -0
  134. package/dist/install/wizardDismissals.js.map +1 -0
  135. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  136. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  137. package/dist/mcp/registry-manifest.json +15 -4
  138. package/dist/mcp/server.json +20 -0
  139. package/dist/mcp/server.mjs +44292 -0
  140. package/dist/router.json +1 -1
  141. package/dist/scripts/condense.js +14 -7
  142. package/dist/scripts/condense.js.map +1 -1
  143. package/dist/server/app.js +4 -2
  144. package/dist/server/app.js.map +1 -1
  145. package/dist/server/io/sharedWriteCheck.js +101 -0
  146. package/dist/server/io/sharedWriteCheck.js.map +1 -0
  147. package/dist/server/routes/ping.js +14 -0
  148. package/dist/server/routes/ping.js.map +1 -1
  149. package/dist/server/routes/settings.js +21 -4
  150. package/dist/server/routes/settings.js.map +1 -1
  151. package/dist/server/routes/userMd.js +21 -4
  152. package/dist/server/routes/userMd.js.map +1 -1
  153. package/dist/server/routes/wizard.js +68 -25
  154. package/dist/server/routes/wizard.js.map +1 -1
  155. package/dist/server/schemas/settings.js +4 -2
  156. package/dist/server/schemas/settings.js.map +1 -1
  157. package/dist/ui/assets/index-BpSQt5vm.js +40 -0
  158. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
  159. package/dist/ui/assets/index-jSfMW8_t.css +1 -0
  160. package/dist/ui/index.html +2 -2
  161. package/docs/MIGRATION.md +16 -0
  162. package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
  163. package/package.json +21 -11
  164. package/src/agent-src/templates/AGENTS.md +1 -1
  165. package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  166. package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
  167. package/src/config/agent-settings.template.yml +52 -14
  168. package/src/config/discovery/packs.yml +22 -0
  169. package/src/config/discovery/workspaces.yml +1 -1
  170. package/src/config/evaluator-budgets.json +47 -0
  171. package/src/config/hook-latency-budget.json +20 -0
  172. package/src/install/agentSwitchDetection.ts +90 -0
  173. package/src/install/agentSwitchProfile.ts +131 -0
  174. package/src/install/atomic.ts +1 -1
  175. package/src/install/detect.ts +1 -1
  176. package/src/install/rtkDetection.ts +274 -0
  177. package/src/install/rule_scope.ts +9 -2
  178. package/src/install/types.ts +2 -2
  179. package/src/install/wizard-plan.ts +1 -1
  180. package/src/install/wizardDismissals.ts +60 -0
  181. package/src/scripts/_cli/cmd_doctor.ts +62 -1
  182. package/src/scripts/_cli/cmd_memory_get.ts +197 -0
  183. package/src/scripts/_cli/cmd_refresh.ts +30 -0
  184. package/src/scripts/_dispatch.bash +81 -0
  185. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
  186. package/src/scripts/_lib/auto_dispatch.ts +76 -0
  187. package/src/scripts/_lib/detect_target_license.ts +714 -0
  188. package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +5 -0
  189. package/src/scripts/_lib/fixtures/secret-detector/positives.txt +4 -0
  190. package/src/scripts/_lib/install_drift.ts +194 -0
  191. package/src/scripts/_lib/memory_fts_index.ts +390 -0
  192. package/src/scripts/_lib/orchestration_record.ts +91 -2
  193. package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
  194. package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
  195. package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
  196. package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
  197. package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
  198. package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
  199. package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
  200. package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
  201. package/src/scripts/_lib/persistence/types.ts +109 -0
  202. package/src/scripts/_lib/rtk_allowlist.ts +44 -0
  203. package/src/scripts/_lib/secret_detector.test.ts +5 -0
  204. package/src/scripts/_lib/secret_detector.ts +9 -0
  205. package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
  206. package/src/scripts/_lib/spawn_env.ts +7 -0
  207. package/src/scripts/_lib/sqlite_guard.ts +191 -0
  208. package/src/scripts/_lib/subagent_spawn.ts +53 -0
  209. package/src/scripts/_lib/worker_budget.ts +107 -0
  210. package/src/scripts/ai_council/blind_review.ts +0 -0
  211. package/src/scripts/ai_council/config.ts +12 -6
  212. package/src/scripts/ai_council/orchestrator.ts +73 -3
  213. package/src/scripts/ai_team/review_gate.ts +8 -10
  214. package/src/scripts/ai_team/team_dispatch.ts +48 -0
  215. package/src/scripts/audit_initial_context.ts +1 -1
  216. package/src/scripts/bench_cross_source_eval.ts +400 -0
  217. package/src/scripts/bench_honesty_score.ts +1093 -0
  218. package/src/scripts/bench_hook_latency.ts +218 -0
  219. package/src/scripts/build_mcp_catalog.ts +275 -0
  220. package/src/scripts/build_mcp_registry_manifest.ts +46 -0
  221. package/src/scripts/build_proof.ts +45 -0
  222. package/src/scripts/chat_history.ts +8 -5
  223. package/src/scripts/check_backstop_debt.ts +23 -13
  224. package/src/scripts/check_bundle_path_leakage.ts +343 -0
  225. package/src/scripts/check_evaluator_budgets.ts +99 -0
  226. package/src/scripts/check_knowledge_sharing.ts +12 -1
  227. package/src/scripts/check_no_external_sources.ts +2 -2
  228. package/src/scripts/check_source_pointer_freshness.ts +28 -3
  229. package/src/scripts/code_graph/build.ts +0 -0
  230. package/src/scripts/code_graph/cli.ts +181 -9
  231. package/src/scripts/code_graph/detect.ts +52 -0
  232. package/src/scripts/code_graph/intent.ts +45 -0
  233. package/src/scripts/code_graph/query.ts +143 -29
  234. package/src/scripts/code_graph/sqlite_store.ts +174 -0
  235. package/src/scripts/condense.ts +14 -6
  236. package/src/scripts/context_hygiene_hook.ts +8 -5
  237. package/src/scripts/council_cli.ts +126 -12
  238. package/src/scripts/detect_target_license.ts +203 -0
  239. package/src/scripts/evaluator_umbrella.sh +145 -0
  240. package/src/scripts/external_sources_denylist.json +5 -3
  241. package/src/scripts/first_run_gate_hook.ts +9 -5
  242. package/src/scripts/hermetic-install.sh +3 -3
  243. package/src/scripts/hook_manifest.yaml +55 -16
  244. package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
  245. package/src/scripts/hooks/block_no_verify.ts +9 -9
  246. package/src/scripts/hooks/code_graph_nudge_hook.ts +11 -4
  247. package/src/scripts/hooks/concern_registry.ts +75 -0
  248. package/src/scripts/hooks/design_slop_hook.ts +8 -5
  249. package/src/scripts/hooks/dispatch_entry.ts +37 -0
  250. package/src/scripts/hooks/dispatch_hook.ts +176 -3
  251. package/src/scripts/hooks/hook_stdin.ts +42 -0
  252. package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
  253. package/src/scripts/hot_context_hook.ts +7 -6
  254. package/src/scripts/injection_scan_hook.ts +9 -1
  255. package/src/scripts/install +6 -6
  256. package/src/scripts/install-hooks.sh +4 -4
  257. package/src/scripts/install.sh +5 -4
  258. package/src/scripts/install.ts +264 -23
  259. package/src/scripts/learning_sidecar.ts +0 -0
  260. package/src/scripts/lint_budget_ownership.ts +89 -0
  261. package/src/scripts/lint_command_routing.ts +35 -5
  262. package/src/scripts/lint_command_verbs.ts +42 -9
  263. package/src/scripts/lint_consumer_internal_refs.ts +211 -0
  264. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  265. package/src/scripts/lint_documented_commands.ts +670 -0
  266. package/src/scripts/lint_framework_leakage.ts +17 -3
  267. package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
  268. package/src/scripts/lint_governed_writes.ts +335 -0
  269. package/src/scripts/lint_hidden_unicode.ts +6 -0
  270. package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
  271. package/src/scripts/lint_memory_tripwire.ts +186 -0
  272. package/src/scripts/lint_override_kernel_guard.ts +74 -26
  273. package/src/scripts/lint_persistence.ts +171 -0
  274. package/src/scripts/lint_pre_migration_refs.ts +106 -0
  275. package/src/scripts/lint_provenance.ts +547 -0
  276. package/src/scripts/lint_provenance_vocabulary.ts +437 -0
  277. package/src/scripts/lint_spawn_payload.ts +283 -0
  278. package/src/scripts/lint_store_boundary.ts +152 -0
  279. package/src/scripts/lint_versioned_cache.ts +7 -1
  280. package/src/scripts/mcp_server/__main__.ts +7 -2
  281. package/src/scripts/mcp_server/catalog.ts +23 -1
  282. package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
  283. package/src/scripts/mcp_server/prompts.ts +6 -0
  284. package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
  285. package/src/scripts/mcp_server/tools.ts +56 -5
  286. package/src/scripts/mcp_telemetry_query.ts +2 -33
  287. package/src/scripts/mcp_telemetry_store.ts +64 -34
  288. package/src/scripts/memory_learn_hook.ts +126 -0
  289. package/src/scripts/memory_lookup.ts +0 -0
  290. package/src/scripts/memory_replay_24.ts +312 -0
  291. package/src/scripts/memory_report.ts +16 -3
  292. package/src/scripts/memory_signal.ts +48 -0
  293. package/src/scripts/memory_status.ts +6 -0
  294. package/src/scripts/minimal_safe_diff_hook.ts +8 -5
  295. package/src/scripts/onboarding_gate_hook.ts +8 -5
  296. package/src/scripts/orchestration_record.ts +16 -0
  297. package/src/scripts/pr_url_reminder_hook.ts +8 -1
  298. package/src/scripts/prepack-check.mjs +17 -0
  299. package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
  300. package/src/scripts/prepack_lifecycle_check.mjs +82 -0
  301. package/src/scripts/profile_staleness_hook.ts +8 -7
  302. package/src/scripts/report_install_drift.ts +109 -0
  303. package/src/scripts/roadmap_progress_hook.ts +8 -5
  304. package/src/scripts/schemas/license-policy.schema.json +89 -0
  305. package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
  306. package/src/scripts/schemas/rule.schema.json +10 -0
  307. package/src/scripts/self_review_gate.test.ts +173 -1
  308. package/src/scripts/self_review_gate.ts +155 -15
  309. package/src/scripts/session_canary_hook.ts +182 -0
  310. package/src/scripts/smoke_quickstart.ts +2 -2
  311. package/src/scripts/surface_probe_hook.ts +8 -7
  312. package/src/scripts/sync_gitattributes.ts +310 -0
  313. package/src/scripts/team_review_gate_hook.ts +13 -16
  314. package/src/scripts/verify_before_complete_hook.ts +8 -5
  315. package/src/scripts/wrapper_freshness_hook.ts +8 -7
  316. package/src/server/schemas/settings.ts +8 -2
  317. package/dist/ui/assets/index-BPFMZWUs.css +0 -1
  318. package/dist/ui/assets/index-CrmZ34Rg.js +0 -40
  319. package/dist/ui/assets/index-CrmZ34Rg.js.map +0 -1
  320. package/docs/CLAIMS.md +0 -286
  321. package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
  322. package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
  323. package/docs/SKILL_CENSUS.md +0 -352
  324. package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
  325. package/docs/adrs/cost/README.md +0 -9
  326. package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
  327. package/docs/adrs/memory/README.md +0 -10
  328. package/docs/adrs/router/0001-three-tier-routing.md +0 -119
  329. package/docs/adrs/router/README.md +0 -9
  330. package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
  331. package/docs/adrs/schema/README.md +0 -9
  332. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
  333. package/docs/adrs/smoke/README.md +0 -9
  334. package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
  335. package/docs/adrs/telegraph/README.md +0 -9
  336. package/docs/announcements/2026-05-non-dev-launch.md +0 -79
  337. package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
  338. package/docs/anti-reskin-gate.md +0 -60
  339. package/docs/architecture/augment-projection.md +0 -70
  340. package/docs/architecture/claude-bundle.md +0 -77
  341. package/docs/architecture/current-onboard-baseline.md +0 -126
  342. package/docs/architecture/current-safety-behavior.md +0 -137
  343. package/docs/architecture/multi-tool-projection.md +0 -125
  344. package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
  345. package/docs/architecture/source-projection.md +0 -85
  346. package/docs/architecture.md +0 -390
  347. package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
  348. package/docs/archive/CHANGELOG-7.0.0.md +0 -419
  349. package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
  350. package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
  351. package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
  352. package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
  353. package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
  354. package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
  355. package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
  356. package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
  357. package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
  358. package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
  359. package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
  360. package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
  361. package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
  362. package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
  363. package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
  364. package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
  365. package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
  366. package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
  367. package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
  368. package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
  369. package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
  370. package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
  371. package/docs/artefact-census.md +0 -71
  372. package/docs/benchmark.md +0 -785
  373. package/docs/benchmark.pinned.yml +0 -31
  374. package/docs/benchmarks.md +0 -85
  375. package/docs/capability-matrix.md +0 -33
  376. package/docs/case-studies/_template.md +0 -60
  377. package/docs/case-studies/frontend-design-positioning.md +0 -86
  378. package/docs/catalog.md +0 -726
  379. package/docs/command-flows.md +0 -272
  380. package/docs/command-naming-audit.md +0 -60
  381. package/docs/comparison.yaml +0 -87
  382. package/docs/contracts/CHANGELOG-conventions.md +0 -149
  383. package/docs/contracts/STABILITY.md +0 -188
  384. package/docs/contracts/adoption-signal-floor.md +0 -127
  385. package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
  386. package/docs/contracts/adr-chat-history-split.md +0 -140
  387. package/docs/contracts/adr-command-suggestion.md +0 -144
  388. package/docs/contracts/adr-forecast-construction-shape.md +0 -90
  389. package/docs/contracts/adr-gtm-context-spine.md +0 -116
  390. package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
  391. package/docs/contracts/adr-install-user-type-axis.md +0 -107
  392. package/docs/contracts/adr-layout.md +0 -107
  393. package/docs/contracts/adr-level-6-productization.md +0 -145
  394. package/docs/contracts/adr-mcp-runtime.md +0 -128
  395. package/docs/contracts/adr-product-ui-track.md +0 -381
  396. package/docs/contracts/adr-prompt-driven-execution.md +0 -186
  397. package/docs/contracts/adr-settings-sync-engine.md +0 -128
  398. package/docs/contracts/adr-user-types-axis.md +0 -127
  399. package/docs/contracts/adr-wing4-context-spine.md +0 -126
  400. package/docs/contracts/agent-user-schema.md +0 -170
  401. package/docs/contracts/agents-layout.md +0 -148
  402. package/docs/contracts/agents-md-tech-stack.md +0 -75
  403. package/docs/contracts/ai-council-config.md +0 -829
  404. package/docs/contracts/ai-team-config.md +0 -224
  405. package/docs/contracts/analysis-memory-loop.md +0 -149
  406. package/docs/contracts/at-rest-encryption.md +0 -191
  407. package/docs/contracts/audit-log-v1.md +0 -150
  408. package/docs/contracts/auto-orchestration-v1.md +0 -70
  409. package/docs/contracts/benchmark-ab-contract.md +0 -106
  410. package/docs/contracts/benchmark-corpus-spec.md +0 -125
  411. package/docs/contracts/benchmark-report-schema.md +0 -113
  412. package/docs/contracts/branch-protection-policy.md +0 -139
  413. package/docs/contracts/brand-token-consumption.md +0 -74
  414. package/docs/contracts/capability-boundary.md +0 -69
  415. package/docs/contracts/capability-packs.md +0 -217
  416. package/docs/contracts/ci-cost-budget.md +0 -111
  417. package/docs/contracts/ci-green-floor.md +0 -141
  418. package/docs/contracts/command-category-governance.md +0 -84
  419. package/docs/contracts/command-clusters.md +0 -399
  420. package/docs/contracts/command-surface-tiers.md +0 -176
  421. package/docs/contracts/command-taxonomy.md +0 -137
  422. package/docs/contracts/condensation-default-kill-criterion.md +0 -116
  423. package/docs/contracts/config-presets.md +0 -144
  424. package/docs/contracts/conformance.md +0 -84
  425. package/docs/contracts/consumer-bridge.md +0 -73
  426. package/docs/contracts/context-paths.md +0 -101
  427. package/docs/contracts/context-spine.md +0 -179
  428. package/docs/contracts/cost-dashboard.md +0 -143
  429. package/docs/contracts/cost-enforcement.md +0 -134
  430. package/docs/contracts/cost-profile-defaults.md +0 -110
  431. package/docs/contracts/cost-summary-schema.md +0 -107
  432. package/docs/contracts/creative-pack-boundary.md +0 -63
  433. package/docs/contracts/cross-repo-retrieval.md +0 -64
  434. package/docs/contracts/cross-wing-handoff.md +0 -134
  435. package/docs/contracts/daily-workspace.md +0 -147
  436. package/docs/contracts/decision-engine-gates.md +0 -120
  437. package/docs/contracts/decision-trace-v1.md +0 -177
  438. package/docs/contracts/design-artifact-lifecycle.md +0 -93
  439. package/docs/contracts/design-artifact-verification.md +0 -153
  440. package/docs/contracts/discovery-manifest.md +0 -209
  441. package/docs/contracts/discovery-manifest.schema.json +0 -254
  442. package/docs/contracts/evidence-based-pruning.md +0 -102
  443. package/docs/contracts/explain-modes.md +0 -187
  444. package/docs/contracts/explain-trace.schema.json +0 -144
  445. package/docs/contracts/file-ownership-matrix.json +0 -13941
  446. package/docs/contracts/file-ownership-matrix.md +0 -135
  447. package/docs/contracts/frontmatter-contract.md +0 -140
  448. package/docs/contracts/ghostwriter-schema.md +0 -337
  449. package/docs/contracts/governance-enforcement-projection.md +0 -159
  450. package/docs/contracts/gui-wizard.md +0 -350
  451. package/docs/contracts/harness-expectations.md +0 -128
  452. package/docs/contracts/hook-architecture-v1.md +0 -325
  453. package/docs/contracts/host-agent-protocol.md +0 -110
  454. package/docs/contracts/implement-ticket-flow.md +0 -625
  455. package/docs/contracts/init-telemetry.md +0 -132
  456. package/docs/contracts/injected-block-authenticity-model.md +0 -66
  457. package/docs/contracts/install-layout.md +0 -249
  458. package/docs/contracts/install-scopes.md +0 -82
  459. package/docs/contracts/installed-tools-lockfile.md +0 -144
  460. package/docs/contracts/installer-agent-mode.md +0 -137
  461. package/docs/contracts/iron-law-overrides.txt +0 -26
  462. package/docs/contracts/kernel-membership.md +0 -339
  463. package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
  464. package/docs/contracts/linear-ai-three-layers.md +0 -130
  465. package/docs/contracts/linter-structural-model.md +0 -181
  466. package/docs/contracts/load-context-budget-model.md +0 -259
  467. package/docs/contracts/load-context-schema.md +0 -220
  468. package/docs/contracts/local-analytics.md +0 -160
  469. package/docs/contracts/local-knowledge-ingestion.md +0 -96
  470. package/docs/contracts/local-server-api.md +0 -134
  471. package/docs/contracts/local-server-ports.md +0 -53
  472. package/docs/contracts/low-impact-corpus-format.md +0 -95
  473. package/docs/contracts/mcp-beta-criteria.md +0 -130
  474. package/docs/contracts/mcp-cloud-scope.md +0 -355
  475. package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
  476. package/docs/contracts/mcp-phase-1-scope.md +0 -272
  477. package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
  478. package/docs/contracts/mcp-tool-inventory.md +0 -64
  479. package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
  480. package/docs/contracts/measurement-baseline.md +0 -103
  481. package/docs/contracts/memory-visibility-v1.md +0 -160
  482. package/docs/contracts/mental-models.md +0 -336
  483. package/docs/contracts/migrate-command.md +0 -233
  484. package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
  485. package/docs/contracts/namespace.md +0 -125
  486. package/docs/contracts/no-runtime-boundary.md +0 -61
  487. package/docs/contracts/one-off-script-lifecycle.md +0 -110
  488. package/docs/contracts/orchestration-dsl-v1.md +0 -153
  489. package/docs/contracts/package-self-orientation.md +0 -163
  490. package/docs/contracts/pilot/agent-authority.md +0 -24
  491. package/docs/contracts/pilot/direct-answers.md +0 -70
  492. package/docs/contracts/pilot/language-and-tone.md +0 -63
  493. package/docs/contracts/plain-language-surface.md +0 -117
  494. package/docs/contracts/prelaunch-diagnostics.md +0 -151
  495. package/docs/contracts/profile-system.md +0 -167
  496. package/docs/contracts/reasoning-discipline-protocol.md +0 -83
  497. package/docs/contracts/release-pr-gating.md +0 -151
  498. package/docs/contracts/release-sizing.md +0 -107
  499. package/docs/contracts/release-trunk-sync.md +0 -105
  500. package/docs/contracts/review-lens-schema.md +0 -64
  501. package/docs/contracts/roadmap-complexity-standard.md +0 -138
  502. package/docs/contracts/role-experience.md +0 -125
  503. package/docs/contracts/router-blending.md +0 -71
  504. package/docs/contracts/rule-classification.md +0 -171
  505. package/docs/contracts/rule-interactions.md +0 -132
  506. package/docs/contracts/rule-interactions.yml +0 -260
  507. package/docs/contracts/rule-priority-hierarchy.md +0 -88
  508. package/docs/contracts/rule-router.md +0 -287
  509. package/docs/contracts/safety-model.md +0 -129
  510. package/docs/contracts/session-profile-overlay.md +0 -157
  511. package/docs/contracts/settings-api.md +0 -264
  512. package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
  513. package/docs/contracts/settings-sync-yaml-subset.md +0 -139
  514. package/docs/contracts/skill-bundled-assets.md +0 -62
  515. package/docs/contracts/skill-discovery.md +0 -80
  516. package/docs/contracts/skill-distribution-channels.md +0 -66
  517. package/docs/contracts/skill-domains.md +0 -144
  518. package/docs/contracts/skill-dry-run.md +0 -47
  519. package/docs/contracts/skill-family-map.yml +0 -915
  520. package/docs/contracts/smoke-contracts.md +0 -144
  521. package/docs/contracts/subagent-boundary.md +0 -74
  522. package/docs/contracts/surface-agent-contracts.md +0 -153
  523. package/docs/contracts/surface-matrix.md +0 -108
  524. package/docs/contracts/surface-tiers.md +0 -81
  525. package/docs/contracts/telegraph-telemetry.md +0 -83
  526. package/docs/contracts/ticket-bundle-format.md +0 -233
  527. package/docs/contracts/tier-3-contrib-plugin.md +0 -137
  528. package/docs/contracts/trust-and-safety.md +0 -144
  529. package/docs/contracts/ui-stack-extension.md +0 -237
  530. package/docs/contracts/ui-track-flow.md +0 -329
  531. package/docs/contracts/universal-skills.md +0 -91
  532. package/docs/contracts/user-type-schema.md +0 -146
  533. package/docs/contracts/value-dashboard-spec.md +0 -378
  534. package/docs/contracts/value-report-schema.md +0 -168
  535. package/docs/contracts/workflow-packs.md +0 -121
  536. package/docs/contracts/workspace-boundary.md +0 -84
  537. package/docs/contracts/workspace-documents.md +0 -144
  538. package/docs/contracts/write-engine.md +0 -182
  539. package/docs/cookbook.md +0 -152
  540. package/docs/customization.md +0 -696
  541. package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
  542. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
  543. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
  544. package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
  545. package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
  546. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
  547. package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
  548. package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
  549. package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
  550. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
  551. package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
  552. package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
  553. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
  554. package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
  555. package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
  556. package/docs/decisions/ADR-016-installer-architecture.md +0 -191
  557. package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
  558. package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
  559. package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
  560. package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
  561. package/docs/decisions/ADR-021-deployment-shape.md +0 -153
  562. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
  563. package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
  564. package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
  565. package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
  566. package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
  567. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
  568. package/docs/decisions/ADR-028-root-layout.md +0 -147
  569. package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
  570. package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
  571. package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
  572. package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
  573. package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
  574. package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
  575. package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
  576. package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
  577. package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
  578. package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
  579. package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
  580. package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
  581. package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
  582. package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
  583. package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
  584. package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
  585. package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
  586. package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
  587. package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
  588. package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
  589. package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
  590. package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
  591. package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
  592. package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
  593. package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
  594. package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
  595. package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
  596. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
  597. package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
  598. package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
  599. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
  600. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
  601. package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
  602. package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
  603. package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
  604. package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
  605. package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
  606. package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
  607. package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
  608. package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
  609. package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
  610. package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
  611. package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
  612. package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
  613. package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
  614. package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
  615. package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
  616. package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
  617. package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
  618. package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
  619. package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
  620. package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
  621. package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
  622. package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
  623. package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
  624. package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
  625. package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
  626. package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
  627. package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
  628. package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
  629. package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
  630. package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
  631. package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
  632. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
  633. package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
  634. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
  635. package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
  636. package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
  637. package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
  638. package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
  639. package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
  640. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
  641. package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
  642. package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
  643. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
  644. package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
  645. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
  646. package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
  647. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
  648. package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
  649. package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -248
  650. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -112
  651. package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
  652. package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
  653. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -209
  654. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
  655. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
  656. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
  657. package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
  658. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
  659. package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
  660. package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
  661. package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
  662. package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
  663. package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
  664. package/docs/decisions/ADR-124-embedded-engine-doctrine.md +0 -255
  665. package/docs/decisions/ADR-125-doc-screenshot-anonymization.md +0 -131
  666. package/docs/decisions/ADR-126-internet-reach-operator-tooling.md +0 -254
  667. package/docs/decisions/ADR-127-enforcement-claims-must-resolve.md +0 -150
  668. package/docs/decisions/ADR-128-executable-evidence-and-measured-escalation.md +0 -201
  669. package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
  670. package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
  671. package/docs/decisions/INDEX.md +0 -157
  672. package/docs/decisions/engine-reclassification-2026-07.md +0 -104
  673. package/docs/deploy/connector-setup.md +0 -129
  674. package/docs/deploy/env-vars.md +0 -70
  675. package/docs/deploy/policy-cookbook.md +0 -130
  676. package/docs/deploy/quickstart.md +0 -112
  677. package/docs/deploy/small-team-recipe.md +0 -148
  678. package/docs/deploy/team-deployment-posture.md +0 -111
  679. package/docs/design/adversarial-council-eval.md +0 -106
  680. package/docs/design/council-vs-solo-baseline.md +0 -92
  681. package/docs/design/cross-model-parity-eval.md +0 -82
  682. package/docs/design/length-neutral-judge-rerun.md +0 -92
  683. package/docs/design/utilization-window-criteria.md +0 -51
  684. package/docs/development.md +0 -230
  685. package/docs/distribution/awesome-list-submission.md +0 -46
  686. package/docs/distribution/consumer-matrix.md +0 -96
  687. package/docs/distribution/launch-story-draft.md +0 -58
  688. package/docs/distribution/mcp-submission-checklist.md +0 -95
  689. package/docs/distribution/public-install-smoke.md +0 -68
  690. package/docs/distribution/registries.md +0 -126
  691. package/docs/distribution/registry-submissions.md +0 -85
  692. package/docs/distribution/telemetry-privacy.md +0 -128
  693. package/docs/distribution/telemetry-schema.md +0 -174
  694. package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
  695. package/docs/end-to-end-walkthroughs.md +0 -165
  696. package/docs/enforcement-by-host.md +0 -51
  697. package/docs/examples/agent-user.example.md +0 -22
  698. package/docs/experiences/agency.md +0 -49
  699. package/docs/experiences/content_creator.md +0 -49
  700. package/docs/experiences/developer.md +0 -49
  701. package/docs/experiences/finance.md +0 -50
  702. package/docs/experiences/founder.md +0 -49
  703. package/docs/experiences/ops.md +0 -49
  704. package/docs/featured-commands.md +0 -27
  705. package/docs/featured-skills.md +0 -95
  706. package/docs/flows.md +0 -67
  707. package/docs/getting-started-by-role.md +0 -190
  708. package/docs/getting-started-laravel.md +0 -72
  709. package/docs/getting-started-local-stdio.md +0 -77
  710. package/docs/getting-started.md +0 -254
  711. package/docs/github-topics.md +0 -93
  712. package/docs/governance-advantage.md +0 -72
  713. package/docs/governance.md +0 -96
  714. package/docs/guides/cross-repo-linked-projects.md +0 -93
  715. package/docs/guides/cross-repo-retrieval.md +0 -61
  716. package/docs/guides/frontend-design-corpus-refresh.md +0 -83
  717. package/docs/guides/gated-platform-reads.md +0 -221
  718. package/docs/guides/local-analytics.md +0 -125
  719. package/docs/guides/local-knowledge.md +0 -127
  720. package/docs/guides/skill-discovery.md +0 -71
  721. package/docs/guides/skill-preview.md +0 -71
  722. package/docs/hook-payload-capture.md +0 -221
  723. package/docs/install-friction-report.md +0 -66
  724. package/docs/installation.md +0 -959
  725. package/docs/maintainers/branch-protection.md +0 -105
  726. package/docs/maintainers/dev-mode.md +0 -106
  727. package/docs/maintainers/optional-media-deps.md +0 -50
  728. package/docs/maintainers/system-map.md +0 -85
  729. package/docs/mcp-registries.md +0 -94
  730. package/docs/mcp-server.md +0 -175
  731. package/docs/mcp.md +0 -147
  732. package/docs/media/proof-demo.cast +0 -14
  733. package/docs/media/proof-demo.gif +0 -0
  734. package/docs/migration/consumer-template-consumption-model.md +0 -145
  735. package/docs/migration/divergences/README.md +0 -55
  736. package/docs/migration/divergences/_template.md +0 -50
  737. package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
  738. package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
  739. package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
  740. package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
  741. package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
  742. package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
  743. package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
  744. package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
  745. package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
  746. package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
  747. package/docs/migration/node-floor.md +0 -86
  748. package/docs/migration/v1-to-v2.md +0 -156
  749. package/docs/migration/yaml-roundtrip-spike.md +0 -163
  750. package/docs/migrations/commands-1.15.0.md +0 -117
  751. package/docs/parity/bench-external.json +0 -58
  752. package/docs/parity/bench.json +0 -41
  753. package/docs/parity/command-frontmatter.md +0 -60
  754. package/docs/parity/external-runtime.md +0 -46
  755. package/docs/personas.md +0 -178
  756. package/docs/positioning-evidence.md +0 -86
  757. package/docs/profiles.md +0 -108
  758. package/docs/proof.md +0 -252
  759. package/docs/quality.md +0 -98
  760. package/docs/readme-split-plan.md +0 -102
  761. package/docs/recruits/_template.md +0 -81
  762. package/docs/release-runbook.md +0 -141
  763. package/docs/role-experiences.md +0 -19
  764. package/docs/safety.md +0 -30
  765. package/docs/second-brain-scope.md +0 -116
  766. package/docs/self-review-gate.md +0 -65
  767. package/docs/setup/enterprise-and-offline.md +0 -201
  768. package/docs/setup/mcp-client-config.md +0 -358
  769. package/docs/setup/mcp-cloud-endpoints.md +0 -116
  770. package/docs/setup/mcp-cloud-registry-listing.md +0 -99
  771. package/docs/setup/mcp-cloud-setup.md +0 -183
  772. package/docs/setup/mcp-r2-bootstrap.md +0 -82
  773. package/docs/setup/mcp-server-docker.md +0 -101
  774. package/docs/setup/per-ide/aider.md +0 -48
  775. package/docs/setup/per-ide/antigravity.md +0 -68
  776. package/docs/setup/per-ide/augment.md +0 -89
  777. package/docs/setup/per-ide/claude-code.md +0 -97
  778. package/docs/setup/per-ide/claude-desktop.md +0 -207
  779. package/docs/setup/per-ide/cline.md +0 -43
  780. package/docs/setup/per-ide/codebuddy.md +0 -63
  781. package/docs/setup/per-ide/codex.md +0 -46
  782. package/docs/setup/per-ide/continue.md +0 -68
  783. package/docs/setup/per-ide/copilot.md +0 -80
  784. package/docs/setup/per-ide/cursor.md +0 -125
  785. package/docs/setup/per-ide/droid.md +0 -65
  786. package/docs/setup/per-ide/gemini-cli.md +0 -45
  787. package/docs/setup/per-ide/jetbrains.md +0 -76
  788. package/docs/setup/per-ide/kilocode.md +0 -66
  789. package/docs/setup/per-ide/kiro.md +0 -72
  790. package/docs/setup/per-ide/opencode.md +0 -62
  791. package/docs/setup/per-ide/qoder.md +0 -63
  792. package/docs/setup/per-ide/roocode.md +0 -68
  793. package/docs/setup/per-ide/trae.md +0 -63
  794. package/docs/setup/per-ide/warp.md +0 -63
  795. package/docs/setup/per-ide/windsurf.md +0 -109
  796. package/docs/setup/per-ide/zed.md +0 -73
  797. package/docs/showcase.md +0 -209
  798. package/docs/skill-duplication-findings.md +0 -91
  799. package/docs/skills-catalog.md +0 -265
  800. package/docs/skills-taxonomy.md +0 -90
  801. package/docs/spawn-site-policy.md +0 -72
  802. package/docs/succession.md +0 -80
  803. package/docs/threat-model.md +0 -30
  804. package/docs/troubleshooting.md +0 -155
  805. package/docs/ui-track-mental-model.md +0 -121
  806. package/docs/us-vs-the-category.md +0 -38
  807. package/docs/value.md +0 -86
  808. package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
  809. package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
  810. package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
  811. package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
  812. package/docs/walkthroughs/daily-workspace.md +0 -127
  813. package/docs/wedge/production-validator/README.md +0 -81
  814. package/docs/wedge/production-validator/first-run-check.sh +0 -42
  815. package/docs/wedge/production-validator/production-validator.md +0 -83
  816. package/docs/wizard.md +0 -173
  817. package/src/scripts/postinstall_gui.ts +0 -129
@@ -1,11 +1,19 @@
1
- import { describe, expect, it } from 'vitest';
1
+ import { spawnSync } from 'node:child_process';
2
+ import * as fs from 'node:fs';
3
+ import * as os from 'node:os';
4
+ import * as path from 'node:path';
5
+
6
+ import { afterEach, describe, expect, it } from 'vitest';
2
7
 
3
8
  import {
4
9
  LARGE_DIFF_LINES,
10
+ buildPlan,
5
11
  classifyBlocking,
12
+ detectReleaseVersion,
6
13
  escalationReasons,
7
14
  gateVerdict,
8
15
  isReviewablePath,
16
+ pickPreviousTag,
9
17
  renderReview,
10
18
  type Finding,
11
19
  } from './self_review_gate.js';
@@ -122,3 +130,167 @@ describe('renderReview — escalation banner', () => {
122
130
  expect(out).toContain('Escalation warranted');
123
131
  });
124
132
  });
133
+
134
+ // ── Release-PR review mode (road-to-feedback-9.2.0-followups Phase 3) ──
135
+ // See docs/design/release-pr-review-mode.md — anchored to the PR #957
136
+ // false-advisory case (release features reading as "not in the diff").
137
+
138
+ describe('detectReleaseVersion', () => {
139
+ const changelogAdd = (v: string) =>
140
+ `+## [${v}](https://github.com/event4u-app/agent-config/compare/9.1.0...${v}) (2026-07-14)`;
141
+ const packageAdd = (v: string) => `+ "version": "${v}",`;
142
+
143
+ it('detects a release PR when the changelog heading and the package.json bump agree', () => {
144
+ const patch = [
145
+ 'diff --git a/CHANGELOG.md b/CHANGELOG.md',
146
+ '@@ -14,6 +14,8 @@',
147
+ ' ## [Unreleased]',
148
+ '+',
149
+ changelogAdd('9.2.0'),
150
+ 'diff --git a/package.json b/package.json',
151
+ '@@ -1,6 +1,6 @@',
152
+ '- "version": "9.1.0",',
153
+ packageAdd('9.2.0'),
154
+ ].join('\n');
155
+ expect(detectReleaseVersion(patch)).toBe('9.2.0');
156
+ });
157
+
158
+ it('is NOT a release PR when only the changelog heading changed (no version bump)', () => {
159
+ expect(detectReleaseVersion(changelogAdd('9.2.0'))).toBeNull();
160
+ });
161
+
162
+ it('is NOT a release PR when only package.json bumped (no changelog heading)', () => {
163
+ expect(detectReleaseVersion(packageAdd('9.2.0'))).toBeNull();
164
+ });
165
+
166
+ it('is NOT a release PR on a normal feature-PR patch (neither signal present)', () => {
167
+ const patch = ['+export function foo() {}', '-export function bar() {}'].join('\n');
168
+ expect(detectReleaseVersion(patch)).toBeNull();
169
+ });
170
+
171
+ it('refuses to guess when the changelog and package.json versions disagree', () => {
172
+ const patch = [changelogAdd('9.2.0'), packageAdd('9.3.0')].join('\n');
173
+ expect(detectReleaseVersion(patch)).toBeNull();
174
+ });
175
+
176
+ it('ignores removed lines (the old version) and reads only the added one', () => {
177
+ const patch = ['- "version": "9.1.0",', packageAdd('9.2.0'), changelogAdd('9.2.0')].join('\n');
178
+ expect(detectReleaseVersion(patch)).toBe('9.2.0');
179
+ });
180
+ });
181
+
182
+ describe('pickPreviousTag', () => {
183
+ it('picks the highest tag strictly below the release version', () => {
184
+ expect(pickPreviousTag('9.2.0', ['9.0.0', '9.1.0', '9.2.0'])).toBe('9.1.0');
185
+ });
186
+ it('handles a v-prefixed tag naming convention', () => {
187
+ expect(pickPreviousTag('9.2.0', ['v9.0.0', 'v9.1.0'])).toBe('v9.1.0');
188
+ });
189
+ it('returns null when no tag is strictly below the version', () => {
190
+ expect(pickPreviousTag('9.2.0', ['9.2.0', '9.3.0'])).toBeNull();
191
+ expect(pickPreviousTag('9.2.0', [])).toBeNull();
192
+ });
193
+ it('ignores non-semver tags (branch-backup names etc.) instead of crashing', () => {
194
+ expect(
195
+ pickPreviousTag('9.2.0', [
196
+ 'backup/pre-rebase-augment-limit-fit',
197
+ '9.1.0',
198
+ 'local-squashed-tip-2026-05-18',
199
+ ]),
200
+ ).toBe('9.1.0');
201
+ });
202
+ });
203
+
204
+ describe('buildPlan — release-PR shape (PR #957 reproduction)', () => {
205
+ function git(root: string, ...args: string[]) {
206
+ return spawnSync('git', args, {
207
+ cwd: root,
208
+ encoding: 'utf8',
209
+ env: {
210
+ ...process.env,
211
+ GIT_AUTHOR_NAME: 'T',
212
+ GIT_AUTHOR_EMAIL: 't@e.test',
213
+ GIT_COMMITTER_NAME: 'T',
214
+ GIT_COMMITTER_EMAIL: 't@e.test',
215
+ },
216
+ });
217
+ }
218
+ function write(root: string, rel: string, content: string): void {
219
+ const full = path.join(root, rel);
220
+ fs.mkdirSync(path.dirname(full), { recursive: true });
221
+ fs.writeFileSync(full, content, 'utf-8');
222
+ }
223
+ function mkTmp(): string {
224
+ return fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'srg-')));
225
+ }
226
+
227
+ let root: string | undefined;
228
+ afterEach(() => {
229
+ if (root) fs.rmSync(root, { recursive: true, force: true });
230
+ root = undefined;
231
+ });
232
+
233
+ it('release mode sees the pre-cut feature file; the packaging diff alone does not (PR #957 shape)', () => {
234
+ root = mkTmp();
235
+ git(root, 'init', '-q', '-b', 'main');
236
+ write(root, 'package.json', '{\n "name": "x",\n "version": "9.0.0"\n}\n');
237
+ write(root, 'CHANGELOG.md', '# Changelog\n\n## [Unreleased]\n');
238
+ git(root, 'add', '-A');
239
+ git(root, 'commit', '-q', '-m', 'baseline');
240
+ git(root, 'tag', '9.1.0'); // the previous release tag
241
+
242
+ // The feature merges into main BEFORE the release cut — the PR #957 shape.
243
+ write(root, 'feature.txt', 'new cross-source-consistency rule content\n');
244
+ git(root, 'add', '-A');
245
+ git(root, 'commit', '-q', '-m', 'feat: cross-source-consistency');
246
+
247
+ // Release branch cut from main's current tip — no divergence yet, so
248
+ // main...release-branch only shows the release-cut commit below.
249
+ git(root, 'checkout', '-q', '-b', 'release-branch');
250
+ write(
251
+ root,
252
+ 'CHANGELOG.md',
253
+ '# Changelog\n\n## [Unreleased]\n\n' +
254
+ '## [9.2.0](https://github.com/event4u-app/agent-config/compare/9.1.0...9.2.0) (2026-07-14)\n',
255
+ );
256
+ write(root, 'package.json', '{\n "name": "x",\n "version": "9.2.0"\n}\n');
257
+ git(root, 'add', '-A');
258
+ git(root, 'commit', '-q', '-m', 'chore(release): 9.2.0');
259
+
260
+ const plan = buildPlan('main', root);
261
+
262
+ expect(plan.release?.version).toBe('9.2.0');
263
+ expect(plan.release?.previousTag).toBe('9.1.0');
264
+ // The packaging diff (main...HEAD) alone does NOT show the pre-cut
265
+ // feature — the exact false-advisory shape PR #957 hit.
266
+ expect(plan.release?.packagingFiles).not.toContain('feature.txt');
267
+ expect(plan.release?.packagingFiles).toEqual(
268
+ expect.arrayContaining(['CHANGELOG.md', 'package.json']),
269
+ );
270
+ // Release mode's actual analysis range (previousTag...HEAD) DOES
271
+ // include it — this is what stops "feature not in diff" recurring.
272
+ expect(plan.files).toContain('feature.txt');
273
+ expect(plan.analysisBase).toBe('9.1.0');
274
+ });
275
+
276
+ it('a normal feature PR (no changelog/version bump) uses the unchanged base', () => {
277
+ root = mkTmp();
278
+ git(root, 'init', '-q', '-b', 'main');
279
+ write(root, 'package.json', '{\n "name": "x",\n "version": "9.1.0"\n}\n');
280
+ write(root, 'CHANGELOG.md', '# Changelog\n\n## [Unreleased]\n');
281
+ git(root, 'add', '-A');
282
+ git(root, 'commit', '-q', '-m', 'baseline');
283
+ git(root, 'tag', '9.1.0');
284
+
285
+ git(root, 'checkout', '-q', '-b', 'feature-branch');
286
+ write(root, 'feature.txt', 'some feature\n');
287
+ git(root, 'add', '-A');
288
+ git(root, 'commit', '-q', '-m', 'feat: add feature');
289
+
290
+ const plan = buildPlan('main', root);
291
+
292
+ expect(plan.release).toBeUndefined();
293
+ expect(plan.analysisBase).toBe('main');
294
+ expect(plan.files).toContain('feature.txt');
295
+ });
296
+ });
@@ -83,9 +83,9 @@ export function isReviewablePath(p: string): boolean {
83
83
  return !SKIP_PREFIXES.some((pre) => p.startsWith(pre));
84
84
  }
85
85
 
86
- function changedFiles(baseRef: string): string[] {
86
+ function changedFiles(baseRef: string, cwd: string = REPO_ROOT): string[] {
87
87
  const r = spawnSync('git', ['diff', '--name-only', `${baseRef}...HEAD`], {
88
- cwd: REPO_ROOT,
88
+ cwd,
89
89
  encoding: 'utf8',
90
90
  });
91
91
  if (r.status !== 0) {
@@ -98,10 +98,10 @@ function changedFiles(baseRef: string): string[] {
98
98
  .filter(isReviewablePath);
99
99
  }
100
100
 
101
- function diffText(baseRef: string, files: string[]): string {
101
+ function diffText(baseRef: string, files: string[], cwd: string = REPO_ROOT): string {
102
102
  if (files.length === 0) return '';
103
103
  const r = spawnSync('git', ['diff', `${baseRef}...HEAD`, '--', ...files], {
104
- cwd: REPO_ROOT,
104
+ cwd,
105
105
  encoding: 'utf8',
106
106
  maxBuffer: 32 * 1024 * 1024,
107
107
  });
@@ -109,10 +109,10 @@ function diffText(baseRef: string, files: string[]): string {
109
109
  }
110
110
 
111
111
  /** Sum of added+deleted lines across `files` (binary files count 0). */
112
- function changedLineCount(baseRef: string, files: string[]): number {
112
+ function changedLineCount(baseRef: string, files: string[], cwd: string = REPO_ROOT): number {
113
113
  if (files.length === 0) return 0;
114
114
  const r = spawnSync('git', ['diff', '--numstat', `${baseRef}...HEAD`, '--', ...files], {
115
- cwd: REPO_ROOT,
115
+ cwd,
116
116
  encoding: 'utf8',
117
117
  maxBuffer: 32 * 1024 * 1024,
118
118
  });
@@ -124,6 +124,94 @@ function changedLineCount(baseRef: string, files: string[]): number {
124
124
  return total;
125
125
  }
126
126
 
127
+ // ── Release-PR detection (road-to-feedback-9.2.0-followups Phase 3) ────
128
+ /**
129
+ * A release PR is detected from its own packaging diff (baseRef...HEAD,
130
+ * scoped to CHANGELOG.md + package.json): an added changelog heading and an
131
+ * added package.json version bump, agreeing on the same version. Pure over
132
+ * the patch text — no git call — so it is unit-testable with synthetic
133
+ * patches. See docs/design/release-pr-review-mode.md.
134
+ */
135
+ export function detectReleaseVersion(patchText: string): string | null {
136
+ const addedLines = patchText
137
+ .split('\n')
138
+ .filter((l) => l.startsWith('+') && !l.startsWith('+++'))
139
+ .map((l) => l.slice(1));
140
+
141
+ let changelogVersion: string | null = null;
142
+ let packageVersion: string | null = null;
143
+ for (const line of addedLines) {
144
+ const changelogMatch = /^##\s*\[(\d+\.\d+\.\d+)\]/.exec(line);
145
+ if (changelogMatch) changelogVersion = changelogMatch[1] ?? null;
146
+ const packageMatch = /^\s*"version"\s*:\s*"(\d+\.\d+\.\d+)"/.exec(line);
147
+ if (packageMatch) packageVersion = packageMatch[1] ?? null;
148
+ }
149
+ if (changelogVersion && packageVersion && changelogVersion === packageVersion) {
150
+ return changelogVersion;
151
+ }
152
+ return null;
153
+ }
154
+
155
+ function releaseDetectionPatch(baseRef: string, cwd: string): string {
156
+ const r = spawnSync('git', ['diff', `${baseRef}...HEAD`, '--', 'CHANGELOG.md', 'package.json'], {
157
+ cwd,
158
+ encoding: 'utf8',
159
+ maxBuffer: 8 * 1024 * 1024,
160
+ });
161
+ return (r.stdout ?? '').toString();
162
+ }
163
+
164
+ /** Impure wrapper: collects the packaging patch via git, then detects. */
165
+ export function detectReleaseVersionFromGit(baseRef: string, cwd: string = REPO_ROOT): string | null {
166
+ return detectReleaseVersion(releaseDetectionPatch(baseRef, cwd));
167
+ }
168
+
169
+ /** `major.minor.patch`, tolerating an optional `v` prefix; null if not semver-shaped. */
170
+ function parseSemver(raw: string): [number, number, number] | null {
171
+ const m = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(raw.trim());
172
+ if (!m) return null;
173
+ return [Number(m[1]), Number(m[2]), Number(m[3])];
174
+ }
175
+
176
+ function semverLessThan(a: [number, number, number], b: [number, number, number]): boolean {
177
+ const [aMajor, aMinor, aPatch] = a;
178
+ const [bMajor, bMinor, bPatch] = b;
179
+ if (aMajor !== bMajor) return aMajor < bMajor;
180
+ if (aMinor !== bMinor) return aMinor < bMinor;
181
+ return aPatch < bPatch;
182
+ }
183
+
184
+ /**
185
+ * Highest semver-shaped tag strictly below `version`, or null if none. Pure
186
+ * over the supplied tag list — no git call. Non-semver tags (branch-backup
187
+ * names etc.) are ignored rather than throwing.
188
+ */
189
+ export function pickPreviousTag(version: string, tags: readonly string[]): string | null {
190
+ const target = parseSemver(version);
191
+ if (!target) return null;
192
+ let best: { raw: string; parsed: [number, number, number] } | null = null;
193
+ for (const raw of tags) {
194
+ const parsed = parseSemver(raw);
195
+ if (!parsed) continue;
196
+ if (!semverLessThan(parsed, target)) continue;
197
+ if (!best || semverLessThan(best.parsed, parsed)) best = { raw, parsed };
198
+ }
199
+ return best ? best.raw : null;
200
+ }
201
+
202
+ function listGitTags(cwd: string): string[] {
203
+ const r = spawnSync('git', ['tag'], { cwd, encoding: 'utf8' });
204
+ return (r.stdout ?? '')
205
+ .split('\n')
206
+ .map((s) => s.trim())
207
+ .filter(Boolean);
208
+ }
209
+
210
+ /** Impure wrapper: lists tags via git, then picks the previous one. */
211
+ export function resolvePreviousTagFromGit(version: string, cwd: string = REPO_ROOT): string | null {
212
+ return pickPreviousTag(version, listGitTags(cwd));
213
+ }
214
+
127
215
  // ── Escalation classifier (large / claim-affecting → full ai-council) ──
128
216
  /**
129
217
  * A large or claim-affecting diff warrants the FULL `ai-council` (advisor
@@ -157,9 +245,31 @@ function loadSkillBody(name: string): string {
157
245
  return readFileSync(p, 'utf8');
158
246
  }
159
247
 
160
- function buildSystemPrompt(): string {
248
+ /** Info about a detected release PR — see docs/design/release-pr-review-mode.md. */
249
+ export interface ReleaseInfo {
250
+ version: string;
251
+ previousTag: string;
252
+ /** Files touched by the packaging diff (baseRef...HEAD) — for context only. */
253
+ packagingFiles: string[];
254
+ }
255
+
256
+ /**
257
+ * Release-mode note appended to the system prompt so the model analyzes the
258
+ * feature range instead of reporting release features as "not in the diff"
259
+ * (the PR #957 false-advisory shape — see docs/design/release-pr-review-mode.md).
260
+ */
261
+ function releaseNoteText(release: ReleaseInfo, baseRef: string): string {
262
+ const fileList = release.packagingFiles.length > 0 ? release.packagingFiles.join(', ') : '(none)';
263
+ return (
264
+ `\n\nRelease PR for ${release.version}: analysis range is ${release.previousTag}...HEAD ` +
265
+ `(the full release commit range). The packaging diff vs ${baseRef} touches: ${fileList}. ` +
266
+ "Do NOT report a feature as 'not in the diff' when it is present in the release range."
267
+ );
268
+ }
269
+
270
+ function buildSystemPrompt(release?: ReleaseInfo, baseRef?: string): string {
161
271
  const bodies = REVIEW_SKILLS.map((s) => `# Skill: ${s}\n\n${loadSkillBody(s)}`).join('\n\n---\n\n');
162
- return [
272
+ const base = [
163
273
  'You are the self-review gate for an AI-agent governance package. Apply the',
164
274
  'two skills below to the supplied PR diff. Return ONLY a JSON object of the',
165
275
  'shape {"findings":[{"severity":"critical|high|medium|low",',
@@ -170,6 +280,7 @@ function buildSystemPrompt(): string {
170
280
  '',
171
281
  bodies,
172
282
  ].join('\n');
283
+ return release && baseRef ? base + releaseNoteText(release, baseRef) : base;
173
284
  }
174
285
 
175
286
  // ── Plan (dry-run) ────────────────────────────────────────────────────
@@ -179,22 +290,47 @@ export interface ReviewPlan {
179
290
  promptChars: number;
180
291
  note: string;
181
292
  escalation: string[];
293
+ /** The base actually analyzed for `files`/diff: `baseRef`, or `release.previousTag`. */
294
+ analysisBase: string;
295
+ /** Present iff a release PR was detected — see docs/design/release-pr-review-mode.md. */
296
+ release?: ReleaseInfo;
182
297
  }
183
298
 
184
- export function buildPlan(baseRef: string): ReviewPlan {
185
- const files = changedFiles(baseRef);
186
- const diff = diffText(baseRef, files);
187
- const escalation = escalationReasons(files, changedLineCount(baseRef, files));
299
+ export function buildPlan(baseRef: string, cwd: string = REPO_ROOT): ReviewPlan {
300
+ const packagingFiles = changedFiles(baseRef, cwd);
301
+ const releaseVersion = detectReleaseVersionFromGit(baseRef, cwd);
302
+
303
+ let release: ReleaseInfo | undefined;
304
+ let analysisBase = baseRef;
305
+ if (releaseVersion) {
306
+ const previousTag = resolvePreviousTagFromGit(releaseVersion, cwd);
307
+ if (previousTag) {
308
+ release = { version: releaseVersion, previousTag, packagingFiles };
309
+ analysisBase = previousTag;
310
+ } else {
311
+ process.stdout.write(
312
+ `::notice::self-review-gate — release ${releaseVersion} detected but no previous tag ` +
313
+ `found; falling back to the normal base (${baseRef}).\n`,
314
+ );
315
+ }
316
+ }
317
+
318
+ const files = analysisBase === baseRef ? packagingFiles : changedFiles(analysisBase, cwd);
319
+ const diff = diffText(analysisBase, files, cwd);
320
+ const escalation = escalationReasons(files, changedLineCount(analysisBase, files, cwd));
321
+ const systemPrompt = buildSystemPrompt(release, baseRef);
188
322
  return {
189
323
  skills: [...REVIEW_SKILLS],
190
324
  files,
191
- promptChars: buildSystemPrompt().length + diff.length,
325
+ analysisBase,
326
+ ...(release ? { release } : {}),
327
+ promptChars: systemPrompt.length + diff.length,
192
328
  escalation,
193
329
  note:
194
330
  files.length === 0
195
331
  ? 'No reviewable (non-generated) files changed — the live review would no-op.'
196
332
  : `${files.length} reviewable file(s); live review would send ~${Math.ceil(
197
- (buildSystemPrompt().length + diff.length) / 4,
333
+ (systemPrompt.length + diff.length) / 4,
198
334
  )} input tokens.`,
199
335
  };
200
336
  }
@@ -302,6 +438,10 @@ export function main(argv: string[]): 0 | 2 {
302
438
  process.stdout.write(
303
439
  `self-review-gate (dry-run — no spend, advisory):\n` +
304
440
  ` skills: ${plan.skills.join(', ')}\n` +
441
+ (plan.release
442
+ ? ` mode: release (${plan.release.version}; feature range ${plan.release.previousTag}...HEAD; ` +
443
+ `packaging diff ${plan.release.packagingFiles.length} file(s))\n`
444
+ : '') +
305
445
  ` files: ${plan.files.length}\n` +
306
446
  ` ${plan.note}\n` +
307
447
  (plan.escalation.length
@@ -341,7 +481,7 @@ export function main(argv: string[]): 0 | 2 {
341
481
  // findings returns 2 — an error is not a finding.)
342
482
  try {
343
483
  const client = new AnthropicClient({ api_key: key });
344
- const resp = client.ask(buildSystemPrompt(), diffText(baseRef, plan.files), 4096);
484
+ const resp = client.ask(buildSystemPrompt(plan.release, baseRef), diffText(plan.analysisBase, plan.files), 4096);
345
485
  if (resp.error) {
346
486
  process.stdout.write(
347
487
  `::warning::self-review-gate NEUTRAL — model call did not complete (${resp.error}); ` +
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Session-canary injection — `session_start` hook.
4
+ *
5
+ * Deterministic backstop for the `session-canary` rule. When the consumer has
6
+ * set `personal.canary_name` in `.agent-settings.yml`, every NEW session gets a
7
+ * `<session-canary>` context block injected at start (same mechanism as
8
+ * hot-context: `{"decision":"allow","context":"<block>"}` on stdout; the
9
+ * dispatcher forwards `context` on session_start so the host adds it to the
10
+ * session context).
11
+ *
12
+ * Why a hook and not just the rule: the canary contract (greet the user by
13
+ * name at task start; reply-close markers at the end of work replies) is a
14
+ * liveness signal — the user watches it like a canary in a coal mine, and its
15
+ * silent disappearance means the context window is degrading. A trigger-routed
16
+ * rule alone is exactly the kind of surface that is dropped in fresh
17
+ * conversations (found RED baseline on the reply-close PR-URL contract,
18
+ * 2026-07-27); the session_start injection makes the contract present in every
19
+ * new conversation on hook-capable hosts. Copilot (no hook surface) falls back
20
+ * to the rule alone.
21
+ *
22
+ * Gate: `personal.canary_name` non-empty. Missing settings file, missing key,
23
+ * or empty value → clean no-op (exit 0, no stdout). Never blocks
24
+ * (fail_closed: false).
25
+ */
26
+ import fs from "node:fs";
27
+ import path from "node:path";
28
+ import { fileURLToPath, pathToFileURL } from "node:url";
29
+ import { readHookStdin } from "./hooks/hook_stdin.js";
30
+
31
+ const EXIT_ALLOW = 0;
32
+
33
+ export const SETTINGS_FILE = ".agent-settings.yml";
34
+
35
+ type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
36
+ type JsonObject = { [k: string]: JsonValue };
37
+
38
+ function _isObject(v: unknown): v is JsonObject {
39
+ return typeof v === "object" && v !== null && !Array.isArray(v);
40
+ }
41
+
42
+ /**
43
+ * Minimal line-walker for `personal.canary_name` — no YAML dependency, same
44
+ * approach as onboarding_gate_hook._read_onboarded. Returns the raw scalar or
45
+ * null when the section/key is absent.
46
+ */
47
+ export function read_canary_name(settings_path: string): string | null {
48
+ let text: string;
49
+ try {
50
+ if (!fs.statSync(settings_path).isFile()) {
51
+ return null;
52
+ }
53
+ text = fs.readFileSync(settings_path, "utf-8");
54
+ } catch {
55
+ return null;
56
+ }
57
+ let in_personal = false;
58
+ for (const line of text.split(/\r?\n/)) {
59
+ if (/^personal\s*:\s*(?:#.*)?$/.test(line)) {
60
+ in_personal = true;
61
+ continue;
62
+ }
63
+ if (in_personal && /^\S/.test(line)) {
64
+ in_personal = false; // left the personal: block
65
+ }
66
+ if (in_personal) {
67
+ const m = /^\s+canary_name\s*:\s*(.*?)\s*(?:#.*)?$/.exec(line);
68
+ if (m && m[1] !== undefined) {
69
+ return m[1].trim();
70
+ }
71
+ }
72
+ }
73
+ return null;
74
+ }
75
+
76
+ /**
77
+ * The name is user-owned config, but it lands verbatim in model context —
78
+ * strip quotes, collapse whitespace, drop markup-significant characters, and
79
+ * cap the length so a mangled settings file cannot smuggle a paragraph in.
80
+ */
81
+ export function sanitize_name(raw: string | null): string {
82
+ if (raw === null) {
83
+ return "";
84
+ }
85
+ let name = raw.trim();
86
+ if (
87
+ (name.startsWith('"') && name.endsWith('"')) ||
88
+ (name.startsWith("'") && name.endsWith("'"))
89
+ ) {
90
+ name = name.slice(1, -1);
91
+ }
92
+ name = name.replace(/[<>&`]/g, "").replace(/\s+/g, " ").trim();
93
+ return name.slice(0, 64);
94
+ }
95
+
96
+ export function build_canary_block(name: string): string {
97
+ return [
98
+ `<session-canary settings-key="personal.canary_name">`,
99
+ `The user has configured a session canary. Two obligations, this whole conversation:`,
100
+ `1. OPENING CANARY — the first reply of this session, and the first reply of each` +
101
+ ` NEW task within it, opens by addressing the user by name: "${name}". One natural` +
102
+ ` mention in the user's language; intermediate replies of the same task do not re-greet.`,
103
+ `2. CLOSING CANARY — a reply that landed substantial work ends with ONE compact` +
104
+ ` end-summary, and a PR created or updated this turn puts its raw URL as the` +
105
+ ` LITERAL LAST LINE (reply-close contract of the direct-answers rule).`,
106
+ `Purpose: the user watches these markers like a canary in a mine — their silent` +
107
+ ` disappearance signals context degradation. Never fake continuity: if you notice` +
108
+ ` you dropped a canary, say so and suggest a fresh session or /agent-handoff.`,
109
+ `</session-canary>`,
110
+ ].join("\n");
111
+ }
112
+
113
+ function _workspaceRoot(envelope: JsonObject): string {
114
+ const v = envelope["workspace_root"];
115
+ if (typeof v === "string" && v) {
116
+ return v;
117
+ }
118
+ return process.cwd();
119
+ }
120
+
121
+ export function main(): number {
122
+ let envelope: JsonValue = {};
123
+ try {
124
+ const raw = _readStdin();
125
+ envelope = raw.trim() ? (JSON.parse(raw) as JsonValue) : {};
126
+ } catch {
127
+ // malformed stdin — still try cwd-based settings below; never block
128
+ }
129
+ const env: JsonObject = _isObject(envelope) ? envelope : {};
130
+
131
+ // Only session_start carries context-injection semantics; other events no-op.
132
+ const event = env["event"];
133
+ if (typeof event === "string" && event !== "" && event !== "session_start") {
134
+ return EXIT_ALLOW;
135
+ }
136
+
137
+ const root = _workspaceRoot(env);
138
+ const name = sanitize_name(read_canary_name(path.join(root, SETTINGS_FILE)));
139
+ if (!name) {
140
+ return EXIT_ALLOW; // canary not configured — clean no-op
141
+ }
142
+
143
+ process.stdout.write(
144
+ `${JSON.stringify({
145
+ decision: "allow",
146
+ reason: `session-canary: active for "${name}"`,
147
+ context: build_canary_block(name),
148
+ })}\n`,
149
+ );
150
+ return EXIT_ALLOW;
151
+ }
152
+
153
+ function _readStdin(): string {
154
+ return readHookStdin();
155
+ }
156
+
157
+ // Bundle-safety: never auto-run when inlined into an esbuild bundle, where
158
+ // every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
159
+ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
160
+ function _isCliEntry(): boolean {
161
+ if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
162
+ return false;
163
+ }
164
+ if (process.argv[1] === undefined) {
165
+ return false;
166
+ }
167
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
168
+ if (import.meta.url === argvUrl) {
169
+ return true;
170
+ }
171
+ try {
172
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
173
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
174
+ return here === argv;
175
+ } catch {
176
+ return false;
177
+ }
178
+ }
179
+
180
+ if (_isCliEntry()) {
181
+ process.exit(main());
182
+ }
@@ -78,8 +78,8 @@ function _checkInstallerRuns(tmpdir: string): [number, string | null] {
78
78
  ];
79
79
  // ADR-020: --project is reserved for maintainers; CI is a maintainer context.
80
80
  const env = { ...process.env, AGENT_CONFIG_DEV_MODE: '1' };
81
- // Run the installer's `.ts` twin via the repo-local tsx binary (was
82
- // `python3 install.py`; the retired Python implementation is deleted).
81
+ // Run the installer's `.ts` twin via the repo-local tsx binary (the
82
+ // retired Python implementation is deleted, ADR-200).
83
83
  const result = spawnSync(TSX_BIN, cmd, {
84
84
  encoding: 'utf-8',
85
85
  timeout: 60000,
@@ -28,6 +28,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
28
28
  import { parse as parseYaml } from 'yaml';
29
29
 
30
30
  import { is_replay_mode } from './hooks/state_io.js';
31
+ import { readHookStdin } from './hooks/hook_stdin.js';
31
32
 
32
33
  const CHECK_WINDOW_MS = 24 * 60 * 60 * 1000;
33
34
  const STATE_REL = ['agents', 'runtime', 'state', 'surface-probe.json'] as const;
@@ -50,13 +51,7 @@ function _package_root(): string {
50
51
  }
51
52
 
52
53
  function _readStdinIfNotTty(): void {
53
- try {
54
- if (!process.stdin.isTTY) {
55
- fs.readFileSync(0, 'utf-8');
56
- }
57
- } catch {
58
- /* ignore */
59
- }
54
+ readHookStdin();
60
55
  }
61
56
 
62
57
  function _exists(p: string): boolean {
@@ -209,7 +204,13 @@ export function main(argv?: string[], opts: ProbeOptions = {}): number {
209
204
  }
210
205
  }
211
206
 
207
+ // Bundle-safety: never auto-run when inlined into an esbuild bundle, where
208
+ // every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
209
+ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
212
210
  function _isCliEntry(): boolean {
211
+ if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
212
+ return false;
213
+ }
213
214
  if (process.argv[1] === undefined) {
214
215
  return false;
215
216
  }