session-orchestrator 3.16.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 (762) hide show
  1. package/.claude-plugin/marketplace.json +29 -0
  2. package/.claude-plugin/plugin.json +18 -0
  3. package/.codex-plugin/agents/explorer.toml +14 -0
  4. package/.codex-plugin/agents/session-reviewer.toml +23 -0
  5. package/.codex-plugin/agents/wave-worker.toml +15 -0
  6. package/.codex-plugin/config.toml +20 -0
  7. package/.codex-plugin/plugin.json +37 -0
  8. package/.cursor/rules/000-session-orchestrator.mdc +73 -0
  9. package/.cursor/rules/010-session-workflow.mdc +170 -0
  10. package/.cursor/rules/020-quality-gates.mdc +128 -0
  11. package/.cursor/rules/030-wave-execution.mdc +216 -0
  12. package/.cursor/rules/040-discovery.mdc +242 -0
  13. package/.cursor/rules/050-plan.mdc +235 -0
  14. package/.cursor/rules/060-evolve.mdc +232 -0
  15. package/.cursor/rules/070-gitlab-ops.mdc +246 -0
  16. package/.cursor/rules/080-ecosystem-health.mdc +145 -0
  17. package/.mcp.json +8 -0
  18. package/CHANGELOG.md +1544 -0
  19. package/LICENSE +21 -0
  20. package/NOTICE +64 -0
  21. package/README.md +242 -0
  22. package/SECURITY.md +90 -0
  23. package/agents/AGENTS.md +136 -0
  24. package/agents/analyst.md +99 -0
  25. package/agents/architect-reviewer.md +93 -0
  26. package/agents/code-implementer.md +106 -0
  27. package/agents/db-specialist.md +104 -0
  28. package/agents/dialectic-deriver.md +139 -0
  29. package/agents/docs-writer.md +113 -0
  30. package/agents/eval-judge.md +146 -0
  31. package/agents/memory-proposal-collector.md +297 -0
  32. package/agents/qa-strategist.md +102 -0
  33. package/agents/schemas/analyst.schema.json +46 -0
  34. package/agents/schemas/architect-reviewer.schema.json +50 -0
  35. package/agents/schemas/code-implementer.schema.json +61 -0
  36. package/agents/schemas/db-specialist.schema.json +80 -0
  37. package/agents/schemas/docs-writer.schema.json +56 -0
  38. package/agents/schemas/persona-panel-sidecar.schema.json +245 -0
  39. package/agents/schemas/qa-strategist.schema.json +46 -0
  40. package/agents/schemas/security-reviewer.schema.json +86 -0
  41. package/agents/schemas/session-reviewer.schema.json +69 -0
  42. package/agents/schemas/test-writer.schema.json +69 -0
  43. package/agents/schemas/ui-developer.schema.json +90 -0
  44. package/agents/schemas/ux-evaluator.schema.json +51 -0
  45. package/agents/security-reviewer.md +236 -0
  46. package/agents/session-reviewer.md +201 -0
  47. package/agents/skill-applied-judge.md +122 -0
  48. package/agents/test-writer.md +123 -0
  49. package/agents/ui-developer.md +109 -0
  50. package/agents/ux-evaluator.md +161 -0
  51. package/assets/icon.svg +11 -0
  52. package/assets/og-card.png +0 -0
  53. package/assets/og-card.svg +47 -0
  54. package/commands/autopilot-multi.md +74 -0
  55. package/commands/autopilot.md +80 -0
  56. package/commands/bootstrap.md +56 -0
  57. package/commands/brainstorm.md +48 -0
  58. package/commands/close.md +24 -0
  59. package/commands/debug.md +36 -0
  60. package/commands/discovery.md +32 -0
  61. package/commands/dispatcher.md +59 -0
  62. package/commands/eval.md +28 -0
  63. package/commands/evolve.md +10 -0
  64. package/commands/go.md +41 -0
  65. package/commands/grill.md +45 -0
  66. package/commands/harness-audit.md +26 -0
  67. package/commands/memory-cleanup.md +25 -0
  68. package/commands/persona-panel.md +121 -0
  69. package/commands/plan.md +15 -0
  70. package/commands/portfolio.md +97 -0
  71. package/commands/reconcile.md +23 -0
  72. package/commands/repo-audit.md +24 -0
  73. package/commands/session.md +30 -0
  74. package/commands/spinout.md +15 -0
  75. package/commands/sunset-review.md +27 -0
  76. package/commands/templates-ack.md +96 -0
  77. package/commands/test.md +97 -0
  78. package/docs/README.md +105 -0
  79. package/docs/USER-GUIDE.md +1403 -0
  80. package/docs/ci-setup.md +81 -0
  81. package/docs/codex-setup.md +142 -0
  82. package/docs/components.md +74 -0
  83. package/docs/cursor-setup.md +104 -0
  84. package/docs/events-schema.md +81 -0
  85. package/docs/migration-v3.md +148 -0
  86. package/docs/owner-config-schema.md +154 -0
  87. package/docs/persona-panel.md +433 -0
  88. package/docs/pi-setup.md +115 -0
  89. package/docs/plugin-architecture-v3.md +296 -0
  90. package/docs/pm-skills-marketplace.md +114 -0
  91. package/docs/policy-cache-validation-2026-04-28.md +118 -0
  92. package/docs/rule-authoring.md +316 -0
  93. package/docs/session-config-reference.md +1439 -0
  94. package/docs/session-config-template.md +961 -0
  95. package/docs/vault-docs-architecture.md +297 -0
  96. package/hooks/_lib/lock-bootstrap.mjs +272 -0
  97. package/hooks/_lib/lock-reconcile.mjs +93 -0
  98. package/hooks/_lib/profile-gate.mjs +95 -0
  99. package/hooks/_lib/transcript-history.mjs +211 -0
  100. package/hooks/agent-teams-h3-test.sh +362 -0
  101. package/hooks/config-protection.mjs +0 -0
  102. package/hooks/cwd-change-restore.mjs +131 -0
  103. package/hooks/enforce-commands.mjs +179 -0
  104. package/hooks/enforce-scope.mjs +273 -0
  105. package/hooks/hooks-codex.json +60 -0
  106. package/hooks/hooks-cursor.json +15 -0
  107. package/hooks/hooks-pi.json +115 -0
  108. package/hooks/hooks.json +215 -0
  109. package/hooks/loop-guard.mjs +260 -0
  110. package/hooks/on-session-end.mjs +217 -0
  111. package/hooks/on-session-start.mjs +660 -0
  112. package/hooks/on-stop.mjs +294 -0
  113. package/hooks/operator-steer.mjs +64 -0
  114. package/hooks/post-edit-validate.mjs +225 -0
  115. package/hooks/post-subagent-discovery-validator.mjs +398 -0
  116. package/hooks/post-tool-batch-wave-signal.mjs +328 -0
  117. package/hooks/post-tool-failure-corrective-context.mjs +248 -0
  118. package/hooks/post-tooluse-frontend-slop.mjs +184 -0
  119. package/hooks/pre-bash-destructive-guard.mjs +515 -0
  120. package/hooks/pre-bash-memory-propose-audit.mjs +206 -0
  121. package/hooks/pre-bash-staging-fence.mjs +223 -0
  122. package/hooks/pre-bash-templates-first.mjs +404 -0
  123. package/hooks/run-node.sh +72 -0
  124. package/hooks/skill-invocation-telemetry.mjs +99 -0
  125. package/hooks/subagent-telemetry.mjs +249 -0
  126. package/hooks/wave-scope-commit-guard.mjs +191 -0
  127. package/monitors/monitors.json +14 -0
  128. package/output-styles/finding-report.md +48 -0
  129. package/output-styles/session-report.md +53 -0
  130. package/output-styles/wave-summary.md +38 -0
  131. package/package.json +94 -0
  132. package/pi/extensions/session-orchestrator.ts +25 -0
  133. package/pi/prompts/autopilot-multi.md +12 -0
  134. package/pi/prompts/autopilot.md +12 -0
  135. package/pi/prompts/bootstrap.md +12 -0
  136. package/pi/prompts/brainstorm.md +12 -0
  137. package/pi/prompts/close.md +11 -0
  138. package/pi/prompts/debug.md +12 -0
  139. package/pi/prompts/discovery.md +12 -0
  140. package/pi/prompts/dispatcher.md +12 -0
  141. package/pi/prompts/eval.md +12 -0
  142. package/pi/prompts/evolve.md +12 -0
  143. package/pi/prompts/go.md +12 -0
  144. package/pi/prompts/grill.md +12 -0
  145. package/pi/prompts/harness-audit.md +12 -0
  146. package/pi/prompts/memory-cleanup.md +12 -0
  147. package/pi/prompts/persona-panel.md +12 -0
  148. package/pi/prompts/plan.md +12 -0
  149. package/pi/prompts/portfolio.md +12 -0
  150. package/pi/prompts/reconcile.md +12 -0
  151. package/pi/prompts/repo-audit.md +12 -0
  152. package/pi/prompts/session.md +12 -0
  153. package/pi/prompts/spinout.md +12 -0
  154. package/pi/prompts/sunset-review.md +12 -0
  155. package/pi/prompts/templates-ack.md +12 -0
  156. package/pi/prompts/test.md +12 -0
  157. package/rules/_index.md +51 -0
  158. package/rules/always-on/commit-discipline.md +26 -0
  159. package/rules/always-on/npm-quality-gates.md +26 -0
  160. package/rules/always-on/parallel-sessions.md +43 -0
  161. package/rules/opt-in-domain/prompt-caching.md +270 -0
  162. package/rules/opt-in-stack/backend-data.md +188 -0
  163. package/rules/opt-in-stack/backend.md +390 -0
  164. package/rules/opt-in-stack/frontend.md +98 -0
  165. package/rules/opt-in-stack/security-web.md +194 -0
  166. package/rules/opt-in-stack/swift.md +65 -0
  167. package/scripts/archive-closed-prds.mjs +416 -0
  168. package/scripts/autopilot-multi.mjs +802 -0
  169. package/scripts/autopilot.mjs +383 -0
  170. package/scripts/backfill-abandoned-sessions.mjs +265 -0
  171. package/scripts/backfill-learnings-expires.mjs +196 -0
  172. package/scripts/backfill-learnings.mjs +203 -0
  173. package/scripts/backfill-sessions.mjs +282 -0
  174. package/scripts/check-doc-consistency.sh +279 -0
  175. package/scripts/check-package-manager.mjs +445 -0
  176. package/scripts/ci/assert-vitest-green.mjs +267 -0
  177. package/scripts/codex-install.mjs +435 -0
  178. package/scripts/compute-grounding-injection.sh +186 -0
  179. package/scripts/cursor-install.mjs +113 -0
  180. package/scripts/dialectic-deriver.mjs +573 -0
  181. package/scripts/emit-event.mjs +160 -0
  182. package/scripts/emit-session.mjs +212 -0
  183. package/scripts/eval-session.mjs +262 -0
  184. package/scripts/export-hw-learnings.mjs +437 -0
  185. package/scripts/gc-stale-worktrees.mjs +666 -0
  186. package/scripts/generate-pi-prompts.mjs +127 -0
  187. package/scripts/harness-audit.mjs +287 -0
  188. package/scripts/lib/agent-frontmatter.mjs +266 -0
  189. package/scripts/lib/agent-output-schema.mjs +166 -0
  190. package/scripts/lib/agent-status.mjs +303 -0
  191. package/scripts/lib/ajv-loader.mjs +34 -0
  192. package/scripts/lib/auto-dialectic.mjs +382 -0
  193. package/scripts/lib/auto-dream.mjs +471 -0
  194. package/scripts/lib/autonomy/suitability.mjs +212 -0
  195. package/scripts/lib/autopilot/dep-graph.mjs +417 -0
  196. package/scripts/lib/autopilot/durable-telemetry.mjs +121 -0
  197. package/scripts/lib/autopilot/flags.mjs +104 -0
  198. package/scripts/lib/autopilot/kill-switches.mjs +174 -0
  199. package/scripts/lib/autopilot/loop.mjs +320 -0
  200. package/scripts/lib/autopilot/mr-draft.mjs +520 -0
  201. package/scripts/lib/autopilot/multi-killswitch.mjs +184 -0
  202. package/scripts/lib/autopilot/recent-runs.mjs +106 -0
  203. package/scripts/lib/autopilot/stall-sampler.mjs +97 -0
  204. package/scripts/lib/autopilot/telemetry.mjs +224 -0
  205. package/scripts/lib/autopilot/worktree-pipeline.mjs +605 -0
  206. package/scripts/lib/autopilot-telemetry.mjs +11 -0
  207. package/scripts/lib/autopilot.mjs +39 -0
  208. package/scripts/lib/backlog-scan.mjs +179 -0
  209. package/scripts/lib/bootstrap-lock-freshness.mjs +260 -0
  210. package/scripts/lib/bootstrap-lock-refresh.mjs +186 -0
  211. package/scripts/lib/build-live-signals.mjs +150 -0
  212. package/scripts/lib/ci-status-banner.mjs +425 -0
  213. package/scripts/lib/claude-md-budget-lint.mjs +246 -0
  214. package/scripts/lib/cli-flags.mjs +158 -0
  215. package/scripts/lib/codex/plugin-contract.mjs +610 -0
  216. package/scripts/lib/cold-start-detector.mjs +240 -0
  217. package/scripts/lib/command-blocker.mjs +458 -0
  218. package/scripts/lib/common.mjs +333 -0
  219. package/scripts/lib/config/auto-dream.mjs +77 -0
  220. package/scripts/lib/config/block-header.mjs +94 -0
  221. package/scripts/lib/config/broken-window.mjs +114 -0
  222. package/scripts/lib/config/coercers.mjs +248 -0
  223. package/scripts/lib/config/cold-start.mjs +92 -0
  224. package/scripts/lib/config/config-protection.mjs +120 -0
  225. package/scripts/lib/config/cross-repo.mjs +104 -0
  226. package/scripts/lib/config/custom-phases.mjs +213 -0
  227. package/scripts/lib/config/dialectic.mjs +92 -0
  228. package/scripts/lib/config/discovery-validator.mjs +75 -0
  229. package/scripts/lib/config/dispatcher-autonomy-capture.mjs +240 -0
  230. package/scripts/lib/config/dispatcher-autonomy.mjs +152 -0
  231. package/scripts/lib/config/docs-orchestrator.mjs +90 -0
  232. package/scripts/lib/config/docs-staleness.mjs +96 -0
  233. package/scripts/lib/config/drift-check.mjs +155 -0
  234. package/scripts/lib/config/eval.mjs +130 -0
  235. package/scripts/lib/config/events-rotation.mjs +74 -0
  236. package/scripts/lib/config/evolve.mjs +308 -0
  237. package/scripts/lib/config/frontend-slop-hook.mjs +104 -0
  238. package/scripts/lib/config/gitlab-portfolio.mjs +150 -0
  239. package/scripts/lib/config/handover-gate.mjs +106 -0
  240. package/scripts/lib/config/host-paths.mjs +76 -0
  241. package/scripts/lib/config/io.mjs +54 -0
  242. package/scripts/lib/config/loop-guard.mjs +117 -0
  243. package/scripts/lib/config/memory.mjs +150 -0
  244. package/scripts/lib/config/persona-gate-wave.mjs +258 -0
  245. package/scripts/lib/config/reconcile.mjs +205 -0
  246. package/scripts/lib/config/section-extractor.mjs +100 -0
  247. package/scripts/lib/config/skill-evolution.mjs +112 -0
  248. package/scripts/lib/config/slopcheck.mjs +99 -0
  249. package/scripts/lib/config/state-md-lock.mjs +83 -0
  250. package/scripts/lib/config/templates-first.mjs +94 -0
  251. package/scripts/lib/config/test.mjs +113 -0
  252. package/scripts/lib/config/vault-integration.mjs +201 -0
  253. package/scripts/lib/config/vault-mirror-quality.mjs +99 -0
  254. package/scripts/lib/config/vault-staleness.mjs +84 -0
  255. package/scripts/lib/config/vault-sync.mjs +96 -0
  256. package/scripts/lib/config/verification-auto-fix.mjs +84 -0
  257. package/scripts/lib/config/wave-reviewers.mjs +133 -0
  258. package/scripts/lib/config-schema.mjs +345 -0
  259. package/scripts/lib/config.mjs +474 -0
  260. package/scripts/lib/convergence-monitor.mjs +389 -0
  261. package/scripts/lib/coordinator-snapshot.mjs +371 -0
  262. package/scripts/lib/crypto-digest-utils.mjs +91 -0
  263. package/scripts/lib/discovery/helpers.mjs +127 -0
  264. package/scripts/lib/discovery/triage-state.mjs +279 -0
  265. package/scripts/lib/dispatcher/cli.mjs +257 -0
  266. package/scripts/lib/dispatcher/enumerate.mjs +243 -0
  267. package/scripts/lib/dispatcher/rank.mjs +363 -0
  268. package/scripts/lib/ecosystem-health.mjs +224 -0
  269. package/scripts/lib/ecosystem-wizard/ci-detector.mjs +18 -0
  270. package/scripts/lib/ecosystem-wizard/config-parser.mjs +54 -0
  271. package/scripts/lib/ecosystem-wizard/config-writer.mjs +287 -0
  272. package/scripts/lib/ecosystem-wizard/package-manager-detector.mjs +42 -0
  273. package/scripts/lib/ecosystem-wizard/wizard-prompt.mjs +246 -0
  274. package/scripts/lib/ecosystem-wizard.mjs +48 -0
  275. package/scripts/lib/env-check.mjs +89 -0
  276. package/scripts/lib/eval/engine.mjs +605 -0
  277. package/scripts/lib/eval/judge.mjs +433 -0
  278. package/scripts/lib/eval/report.mjs +367 -0
  279. package/scripts/lib/eval/schema.mjs +618 -0
  280. package/scripts/lib/eval/session-resolve.mjs +137 -0
  281. package/scripts/lib/eval/sink.mjs +77 -0
  282. package/scripts/lib/events-rotation.mjs +86 -0
  283. package/scripts/lib/events-schema.mjs +81 -0
  284. package/scripts/lib/events.mjs +80 -0
  285. package/scripts/lib/evolve/autonomy-verdict.mjs +461 -0
  286. package/scripts/lib/evolve/autopilot-effectiveness.mjs +293 -0
  287. package/scripts/lib/exclusivity-matrix.mjs +68 -0
  288. package/scripts/lib/fetch-baseline.mjs +311 -0
  289. package/scripts/lib/file-lock.mjs +512 -0
  290. package/scripts/lib/frontend-detect/detect.mjs +138 -0
  291. package/scripts/lib/frontend-detect/rules.mjs +295 -0
  292. package/scripts/lib/frontmatter-guard.mjs +241 -0
  293. package/scripts/lib/gates/echo-stub-detect.mjs +39 -0
  294. package/scripts/lib/gates/gate-baseline.mjs +42 -0
  295. package/scripts/lib/gates/gate-full.mjs +85 -0
  296. package/scripts/lib/gates/gate-helpers.mjs +231 -0
  297. package/scripts/lib/gates/gate-incremental.mjs +76 -0
  298. package/scripts/lib/gates/gate-per-file.mjs +55 -0
  299. package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +447 -0
  300. package/scripts/lib/gitlab-portfolio/aggregator.mjs +383 -0
  301. package/scripts/lib/gitlab-portfolio/cli.mjs +428 -0
  302. package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +289 -0
  303. package/scripts/lib/gitlab-portfolio/vcs-detect.mjs +182 -0
  304. package/scripts/lib/handover-gate.mjs +222 -0
  305. package/scripts/lib/hardening.mjs +43 -0
  306. package/scripts/lib/hardware-pattern-detector.mjs +238 -0
  307. package/scripts/lib/harness-audit/categories/category1.mjs +123 -0
  308. package/scripts/lib/harness-audit/categories/category2.mjs +145 -0
  309. package/scripts/lib/harness-audit/categories/category3.mjs +143 -0
  310. package/scripts/lib/harness-audit/categories/category4.mjs +202 -0
  311. package/scripts/lib/harness-audit/categories/category5.mjs +152 -0
  312. package/scripts/lib/harness-audit/categories/category6.mjs +211 -0
  313. package/scripts/lib/harness-audit/categories/category7.mjs +125 -0
  314. package/scripts/lib/harness-audit/categories/category8.mjs +328 -0
  315. package/scripts/lib/harness-audit/categories/category9.mjs +294 -0
  316. package/scripts/lib/harness-audit/categories/helpers.mjs +165 -0
  317. package/scripts/lib/harness-audit/categories.mjs +19 -0
  318. package/scripts/lib/historical-guard.mjs +15 -0
  319. package/scripts/lib/host-identity.mjs +262 -0
  320. package/scripts/lib/instruction-budget-guard.mjs +332 -0
  321. package/scripts/lib/io.mjs +304 -0
  322. package/scripts/lib/issue-close-strip-labels.mjs +161 -0
  323. package/scripts/lib/language-mappers/README.md +57 -0
  324. package/scripts/lib/language-mappers/index.mjs +165 -0
  325. package/scripts/lib/language-mappers/markdown.mjs +149 -0
  326. package/scripts/lib/language-mappers/python.mjs +249 -0
  327. package/scripts/lib/language-mappers/swift.mjs +201 -0
  328. package/scripts/lib/language-mappers/typescript.mjs +433 -0
  329. package/scripts/lib/learnings/expiry-sweep.mjs +164 -0
  330. package/scripts/lib/learnings/filters.mjs +43 -0
  331. package/scripts/lib/learnings/io.mjs +255 -0
  332. package/scripts/lib/learnings/schema.mjs +518 -0
  333. package/scripts/lib/learnings/surface.mjs +207 -0
  334. package/scripts/lib/learnings.mjs +42 -0
  335. package/scripts/lib/lock-reaper.mjs +648 -0
  336. package/scripts/lib/locks/index.mjs +31 -0
  337. package/scripts/lib/locks/lock-body.mjs +62 -0
  338. package/scripts/lib/locks/staging-fence-lock.mjs +267 -0
  339. package/scripts/lib/locks/state-md-lock.mjs +351 -0
  340. package/scripts/lib/loop-readiness-banner.mjs +144 -0
  341. package/scripts/lib/memory-banner.mjs +478 -0
  342. package/scripts/lib/memory-cleanup/worktree-sweep.mjs +108 -0
  343. package/scripts/lib/memory-cleanup-stamp.mjs +56 -0
  344. package/scripts/lib/memory-paths.mjs +31 -0
  345. package/scripts/lib/memory-proposals/collector.mjs +334 -0
  346. package/scripts/lib/memory-proposals/schema.mjs +289 -0
  347. package/scripts/lib/memory-proposals/sink.mjs +507 -0
  348. package/scripts/lib/memory-proposals/store.mjs +441 -0
  349. package/scripts/lib/mission-status-schema.mjs +114 -0
  350. package/scripts/lib/mode-selector/alternatives.mjs +64 -0
  351. package/scripts/lib/mode-selector/constants.mjs +29 -0
  352. package/scripts/lib/mode-selector/context-pressure.mjs +157 -0
  353. package/scripts/lib/mode-selector/rationale.mjs +55 -0
  354. package/scripts/lib/mode-selector/scoring.mjs +221 -0
  355. package/scripts/lib/mode-selector-accuracy.mjs +121 -0
  356. package/scripts/lib/mode-selector.mjs +160 -0
  357. package/scripts/lib/multi-provider-build/providers.mjs +64 -0
  358. package/scripts/lib/multi-provider-build/templating.mjs +130 -0
  359. package/scripts/lib/named-baseline-resolver.mjs +233 -0
  360. package/scripts/lib/named-vault-resolver.mjs +433 -0
  361. package/scripts/lib/owner-config/coerce.mjs +29 -0
  362. package/scripts/lib/owner-config/constants.mjs +21 -0
  363. package/scripts/lib/owner-config/defaults.mjs +50 -0
  364. package/scripts/lib/owner-config/error.mjs +19 -0
  365. package/scripts/lib/owner-config/index.mjs +13 -0
  366. package/scripts/lib/owner-config/merge.mjs +52 -0
  367. package/scripts/lib/owner-config/validate.mjs +259 -0
  368. package/scripts/lib/owner-config-banner.mjs +126 -0
  369. package/scripts/lib/owner-config-loader.mjs +159 -0
  370. package/scripts/lib/owner-config.example.yaml +72 -0
  371. package/scripts/lib/owner-config.mjs +28 -0
  372. package/scripts/lib/owner-interview.mjs +243 -0
  373. package/scripts/lib/owner-yaml.mjs +571 -0
  374. package/scripts/lib/package-manager.mjs +160 -0
  375. package/scripts/lib/path-utils.mjs +217 -0
  376. package/scripts/lib/peer-cards/merger.mjs +310 -0
  377. package/scripts/lib/peer-cards/reader.mjs +125 -0
  378. package/scripts/lib/peer-cards/schema.mjs +230 -0
  379. package/scripts/lib/peer-cards/staleness-banner.mjs +86 -0
  380. package/scripts/lib/peer-cards/writer.mjs +138 -0
  381. package/scripts/lib/peer-discovery.mjs +200 -0
  382. package/scripts/lib/persona-panel/catalog-loader.mjs +577 -0
  383. package/scripts/lib/persona-panel/consolidator.mjs +370 -0
  384. package/scripts/lib/persona-panel/persona-runner.mjs +375 -0
  385. package/scripts/lib/persona-panel/threshold.mjs +130 -0
  386. package/scripts/lib/pi-hook-bridge.mjs +328 -0
  387. package/scripts/lib/platform.mjs +266 -0
  388. package/scripts/lib/playwright-driver/runner.mjs +297 -0
  389. package/scripts/lib/plugin-root.mjs +210 -0
  390. package/scripts/lib/pre-dispatch-check.mjs +126 -0
  391. package/scripts/lib/product-repo-detect.mjs +121 -0
  392. package/scripts/lib/profiles/registry.mjs +176 -0
  393. package/scripts/lib/profiles/schema.mjs +209 -0
  394. package/scripts/lib/qg-command-drift-banner.mjs +88 -0
  395. package/scripts/lib/quality-gate/diagnostics.mjs +92 -0
  396. package/scripts/lib/quality-gate.mjs +536 -0
  397. package/scripts/lib/quality-gates-cache.mjs +228 -0
  398. package/scripts/lib/quality-gates-policy.mjs +95 -0
  399. package/scripts/lib/recommendations-v0.mjs +156 -0
  400. package/scripts/lib/reconcile/eligibility.mjs +203 -0
  401. package/scripts/lib/reconcile/emitter.mjs +244 -0
  402. package/scripts/lib/reconcile/engine.mjs +412 -0
  403. package/scripts/lib/reconcile/idempotency.mjs +239 -0
  404. package/scripts/lib/reconcile/renderer.mjs +211 -0
  405. package/scripts/lib/reconcile/writer.mjs +293 -0
  406. package/scripts/lib/reconcile-nudge-banner.mjs +284 -0
  407. package/scripts/lib/resource-probe/evaluate.mjs +190 -0
  408. package/scripts/lib/resource-probe/parsers.mjs +181 -0
  409. package/scripts/lib/resource-probe/probe-platform.mjs +300 -0
  410. package/scripts/lib/resource-probe.mjs +95 -0
  411. package/scripts/lib/rule-loader.mjs +552 -0
  412. package/scripts/lib/rules-sync.mjs +439 -0
  413. package/scripts/lib/scope-gate.mjs +496 -0
  414. package/scripts/lib/session-close-backfill.mjs +539 -0
  415. package/scripts/lib/session-discovery.mjs +256 -0
  416. package/scripts/lib/session-end/phase-skip.mjs +357 -0
  417. package/scripts/lib/session-end/worktree-cleanup.mjs +112 -0
  418. package/scripts/lib/session-id.mjs +362 -0
  419. package/scripts/lib/session-lock.mjs +703 -0
  420. package/scripts/lib/session-registry.mjs +355 -0
  421. package/scripts/lib/session-schema/aliases.mjs +71 -0
  422. package/scripts/lib/session-schema/constants.mjs +115 -0
  423. package/scripts/lib/session-schema/normalizer.mjs +66 -0
  424. package/scripts/lib/session-schema/timestamps.mjs +64 -0
  425. package/scripts/lib/session-schema/validator.mjs +453 -0
  426. package/scripts/lib/session-schema.mjs +71 -0
  427. package/scripts/lib/session-token-rollup.mjs +137 -0
  428. package/scripts/lib/sessions-staleness-banner.mjs +247 -0
  429. package/scripts/lib/skill-evolution/blast-radius-classifier.mjs +114 -0
  430. package/scripts/lib/skill-evolution/candidate-intake.mjs +270 -0
  431. package/scripts/lib/skill-evolution/config-validation-gate.mjs +279 -0
  432. package/scripts/lib/skill-evolution/engine.mjs +719 -0
  433. package/scripts/lib/skill-evolution/idempotency.mjs +279 -0
  434. package/scripts/lib/skill-evolution/mr-opener.mjs +507 -0
  435. package/scripts/lib/skill-health/join.mjs +181 -0
  436. package/scripts/lib/skill-health/score.mjs +123 -0
  437. package/scripts/lib/skill-invocations-schema.mjs +214 -0
  438. package/scripts/lib/skill-judge.mjs +348 -0
  439. package/scripts/lib/skill-judgments-schema.mjs +264 -0
  440. package/scripts/lib/slopcheck.mjs +501 -0
  441. package/scripts/lib/soul-resolve.mjs +118 -0
  442. package/scripts/lib/spiral-carryover.mjs +495 -0
  443. package/scripts/lib/state-md/body-sections.mjs +851 -0
  444. package/scripts/lib/state-md/frontmatter-mutators.mjs +453 -0
  445. package/scripts/lib/state-md/mission-status.mjs +247 -0
  446. package/scripts/lib/state-md/recommendations.mjs +57 -0
  447. package/scripts/lib/state-md/yaml-parser.mjs +234 -0
  448. package/scripts/lib/state-md-peer-guard.mjs +232 -0
  449. package/scripts/lib/state-md.mjs +53 -0
  450. package/scripts/lib/subagents-schema.mjs +309 -0
  451. package/scripts/lib/sunset/walker.mjs +1192 -0
  452. package/scripts/lib/test-runner/artifact-paths.mjs +94 -0
  453. package/scripts/lib/test-runner/fingerprint.mjs +33 -0
  454. package/scripts/lib/test-runner/issue-reconcile.mjs +770 -0
  455. package/scripts/lib/tmux-layout/layouts.mjs +224 -0
  456. package/scripts/lib/tmux-layout/telemetry-stats.mjs +100 -0
  457. package/scripts/lib/tmux-layout/telemetry.mjs +88 -0
  458. package/scripts/lib/tmux-layout/tmux-shell.mjs +82 -0
  459. package/scripts/lib/tmux-layout/vcs-detector.mjs +88 -0
  460. package/scripts/lib/validate/check-agents.mjs +457 -0
  461. package/scripts/lib/validate/check-codex-plugin.mjs +37 -0
  462. package/scripts/lib/validate/check-commands.mjs +148 -0
  463. package/scripts/lib/validate/check-component-paths.mjs +112 -0
  464. package/scripts/lib/validate/check-dead-bridge.mjs +180 -0
  465. package/scripts/lib/validate/check-hooks-symmetry.mjs +258 -0
  466. package/scripts/lib/validate/check-json-files.mjs +116 -0
  467. package/scripts/lib/validate/check-owner-leakage.mjs +1011 -0
  468. package/scripts/lib/validate/check-path-utils-canary.mjs +175 -0
  469. package/scripts/lib/validate/check-peekaboo-driver-canary.mjs +201 -0
  470. package/scripts/lib/validate/check-pi-package.mjs +110 -0
  471. package/scripts/lib/validate/check-pi-prompts.mjs +43 -0
  472. package/scripts/lib/validate/check-playwright-mcp-canary.mjs +154 -0
  473. package/scripts/lib/validate/check-plugin-json.mjs +96 -0
  474. package/scripts/lib/validate/check-plugin-monitors.mjs +206 -0
  475. package/scripts/lib/validate/check-plugin-schema.mjs +137 -0
  476. package/scripts/lib/validate/check-rules.mjs +143 -0
  477. package/scripts/lib/validate/check-session-plan-routing.mjs +154 -0
  478. package/scripts/lib/validate/check-test-fixture-shapes.mjs +280 -0
  479. package/scripts/lib/validate/check-unicode-safety.mjs +533 -0
  480. package/scripts/lib/validate/confidential-names.mjs +169 -0
  481. package/scripts/lib/validate/dead-bridge-corpus.mjs +141 -0
  482. package/scripts/lib/validate/dead-bridge-detectors.mjs +568 -0
  483. package/scripts/lib/validate/tier-inference.mjs +100 -0
  484. package/scripts/lib/validate-vendored-rules.mjs +519 -0
  485. package/scripts/lib/vault-archive.mjs +404 -0
  486. package/scripts/lib/vault-backfill/glab.mjs +164 -0
  487. package/scripts/lib/vault-backfill/manifest.mjs +75 -0
  488. package/scripts/lib/vault-backfill/template.mjs +130 -0
  489. package/scripts/lib/vault-consolidate-fs.mjs +331 -0
  490. package/scripts/lib/vault-migration-rules.mjs +155 -0
  491. package/scripts/lib/vault-mirror/auto-commit.mjs +203 -0
  492. package/scripts/lib/vault-mirror/namespace.mjs +152 -0
  493. package/scripts/lib/vault-mirror/process.mjs +567 -0
  494. package/scripts/lib/vault-mirror/pseudonym-map.mjs +164 -0
  495. package/scripts/lib/vault-mirror/render-learnings.mjs +201 -0
  496. package/scripts/lib/vault-mirror/render-sessions.mjs +367 -0
  497. package/scripts/lib/vault-mirror/render.mjs +8 -0
  498. package/scripts/lib/vault-mirror/utils.mjs +217 -0
  499. package/scripts/lib/vault-relocation-rules.mjs +555 -0
  500. package/scripts/lib/vault-repo-backfill.mjs +235 -0
  501. package/scripts/lib/vault-staleness-banner.mjs +142 -0
  502. package/scripts/lib/vault-status/board-writer.mjs +769 -0
  503. package/scripts/lib/vault-status/narrative-mirror.mjs +544 -0
  504. package/scripts/lib/vault-sync-baseline.mjs +152 -0
  505. package/scripts/lib/wave-context.mjs +29 -0
  506. package/scripts/lib/wave-executor/pool.mjs +248 -0
  507. package/scripts/lib/wave-resource-gate.mjs +204 -0
  508. package/scripts/lib/wave-sizing.mjs +75 -0
  509. package/scripts/lib/webhook-url.mjs +105 -0
  510. package/scripts/lib/workspace.mjs +198 -0
  511. package/scripts/lib/worktree/constants.mjs +35 -0
  512. package/scripts/lib/worktree/index.mjs +17 -0
  513. package/scripts/lib/worktree/lifecycle.mjs +287 -0
  514. package/scripts/lib/worktree/listing.mjs +118 -0
  515. package/scripts/lib/worktree/meta.mjs +64 -0
  516. package/scripts/lib/worktree-freshness.mjs +313 -0
  517. package/scripts/lib/worktree.mjs +15 -0
  518. package/scripts/lifecycle-sim-v6.mjs +347 -0
  519. package/scripts/lock-reaper.mjs +185 -0
  520. package/scripts/mcp-server.sh +241 -0
  521. package/scripts/measure-policy-cache-effectiveness.mjs +427 -0
  522. package/scripts/memory-propose.mjs +464 -0
  523. package/scripts/migrate-cold-start-seed.mjs +404 -0
  524. package/scripts/migrate-learnings-jsonl.mjs +189 -0
  525. package/scripts/migrate-legacy-learnings.sh +61 -0
  526. package/scripts/migrate-sessions-jsonl.mjs +448 -0
  527. package/scripts/migrate-subagents-jsonl.mjs +196 -0
  528. package/scripts/migrate-vault-paths.mjs +796 -0
  529. package/scripts/parse-config.mjs +149 -0
  530. package/scripts/pi-install.mjs +117 -0
  531. package/scripts/print-applicable-rules.mjs +247 -0
  532. package/scripts/promote-vault-strict.mjs +496 -0
  533. package/scripts/relocate-vault-corpus.mjs +1178 -0
  534. package/scripts/run-migrate-v2-cross-repo.mjs +385 -0
  535. package/scripts/run-quality-gate.mjs +216 -0
  536. package/scripts/spikes/h3-agent-teams/preflight.sh +53 -0
  537. package/scripts/spikes/h3-agent-teams/run-h3.sh +112 -0
  538. package/scripts/spikes/h3-agent-teams/setup.sh +137 -0
  539. package/scripts/spikes/h3-agent-teams/toggle.sh +38 -0
  540. package/scripts/sweep-expired-learnings.mjs +135 -0
  541. package/scripts/sync-vault-schema.mjs +376 -0
  542. package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +8 -0
  543. package/scripts/tmux-layout.mjs +245 -0
  544. package/scripts/token-audit.sh +191 -0
  545. package/scripts/typecheck.mjs +42 -0
  546. package/scripts/upload-social-preview.mjs +316 -0
  547. package/scripts/validate-config.mjs +46 -0
  548. package/scripts/validate-plugin-manifests.mjs +163 -0
  549. package/scripts/validate-plugin.mjs +264 -0
  550. package/scripts/validate-wave-scope.mjs +289 -0
  551. package/scripts/vault-backfill.mjs +404 -0
  552. package/scripts/vault-consolidate.mjs +596 -0
  553. package/scripts/vault-integration-watcher.mjs +394 -0
  554. package/scripts/vault-mirror.mjs +430 -0
  555. package/skills/_shared/bootstrap-gate.md +111 -0
  556. package/skills/_shared/config-reading.md +226 -0
  557. package/skills/_shared/instruction-file-resolution.md +79 -0
  558. package/skills/_shared/model-selection.md +64 -0
  559. package/skills/_shared/monitor-patterns.md +300 -0
  560. package/skills/_shared/parallel-aware-auq.md +121 -0
  561. package/skills/_shared/parallel-aware-preamble.md +185 -0
  562. package/skills/_shared/platform-tools.md +96 -0
  563. package/skills/_shared/state-ownership.md +221 -0
  564. package/skills/architecture/DEEPENING.md +37 -0
  565. package/skills/architecture/INTERFACE-DESIGN.md +44 -0
  566. package/skills/architecture/LANGUAGE.md +53 -0
  567. package/skills/architecture/SKILL.md +92 -0
  568. package/skills/autopilot/SKILL.md +419 -0
  569. package/skills/bootstrap/SKILL.md +592 -0
  570. package/skills/bootstrap/STATE.md.template +24 -0
  571. package/skills/bootstrap/_shared-template.md +243 -0
  572. package/skills/bootstrap/deep-template.md +659 -0
  573. package/skills/bootstrap/fast-template.md +251 -0
  574. package/skills/bootstrap/intensity-heuristic.md +80 -0
  575. package/skills/bootstrap/public-fallback.md +342 -0
  576. package/skills/bootstrap/standard-template.md +736 -0
  577. package/skills/bootstrap/templates/agents/project-code-review.md +18 -0
  578. package/skills/bootstrap/templates/agents/project-discovery.md +18 -0
  579. package/skills/bootstrap/templates/agents/project-quality-gate.md +18 -0
  580. package/skills/brainstorm/SKILL.md +268 -0
  581. package/skills/brainstorm/soul.md +49 -0
  582. package/skills/claude-md-drift-check/SKILL.md +186 -0
  583. package/skills/claude-md-drift-check/checker.mjs +1380 -0
  584. package/skills/claude-md-drift-check/checker.sh +37 -0
  585. package/skills/claude-md-drift-check/package.json +16 -0
  586. package/skills/convergence-monitoring/README.md +39 -0
  587. package/skills/convergence-monitoring/SIGNALS.md +246 -0
  588. package/skills/convergence-monitoring/SKILL.md +285 -0
  589. package/skills/daily/SKILL.md +222 -0
  590. package/skills/daily/generate.sh +92 -0
  591. package/skills/daily/templates/daily.md.tpl +36 -0
  592. package/skills/debug/SKILL.md +188 -0
  593. package/skills/debug/soul.md +35 -0
  594. package/skills/discovery/SKILL.md +567 -0
  595. package/skills/discovery/issue-templates.md +237 -0
  596. package/skills/discovery/probes/docs-staleness.mjs +195 -0
  597. package/skills/discovery/probes/frontend-slop.mjs +186 -0
  598. package/skills/discovery/probes/ssot-code-diff.mjs +310 -0
  599. package/skills/discovery/probes/supply-chain-slopcheck.mjs +440 -0
  600. package/skills/discovery/probes/vault-narrative-staleness.mjs +355 -0
  601. package/skills/discovery/probes/vault-staleness.mjs +272 -0
  602. package/skills/discovery/probes-arch.md +252 -0
  603. package/skills/discovery/probes-audit.md +95 -0
  604. package/skills/discovery/probes-code.md +329 -0
  605. package/skills/discovery/probes-docs.md +76 -0
  606. package/skills/discovery/probes-feature.md +150 -0
  607. package/skills/discovery/probes-infra.md +138 -0
  608. package/skills/discovery/probes-intro.md +25 -0
  609. package/skills/discovery/probes-session.md +495 -0
  610. package/skills/discovery/probes-supply-chain.md +94 -0
  611. package/skills/discovery/probes-ui.md +147 -0
  612. package/skills/discovery/probes-vault.md +64 -0
  613. package/skills/discovery/slop-patterns.md +115 -0
  614. package/skills/dispatcher/SKILL.md +173 -0
  615. package/skills/docs-orchestrator/SKILL.md +362 -0
  616. package/skills/docs-orchestrator/audience-mapping.md +140 -0
  617. package/skills/domain-model/ADR-FORMAT.md +47 -0
  618. package/skills/domain-model/CONTEXT-FORMAT.md +77 -0
  619. package/skills/domain-model/SKILL.md +85 -0
  620. package/skills/ecosystem-health/SKILL.md +119 -0
  621. package/skills/ecosystem-health/wizard.md +193 -0
  622. package/skills/eval/SKILL.md +293 -0
  623. package/skills/eval/rubric-v1.md +218 -0
  624. package/skills/evolve/SKILL.md +546 -0
  625. package/skills/frontmatter-guard/SKILL.md +126 -0
  626. package/skills/gitlab-ops/SKILL.md +368 -0
  627. package/skills/gitlab-portfolio/SKILL.md +196 -0
  628. package/skills/grill/SKILL.md +185 -0
  629. package/skills/grill/soul.md +55 -0
  630. package/skills/hook-development/SKILL.md +413 -0
  631. package/skills/mcp-builder/SKILL.md +260 -0
  632. package/skills/memory-cleanup/SKILL.md +310 -0
  633. package/skills/mode-selector/SKILL.md +226 -0
  634. package/skills/peekaboo-driver/SKILL.md +237 -0
  635. package/skills/peekaboo-driver/soul.md +32 -0
  636. package/skills/persona-panel/SKILL.md +365 -0
  637. package/skills/persona-panel/persona-format.md +205 -0
  638. package/skills/persona-panel/presets/designer-lens.md +87 -0
  639. package/skills/persona-panel/presets/engineer-lens.md +88 -0
  640. package/skills/persona-panel/presets/pm-lens.md +86 -0
  641. package/skills/plan/SKILL.md +496 -0
  642. package/skills/plan/mode-feature.md +141 -0
  643. package/skills/plan/mode-new.md +297 -0
  644. package/skills/plan/mode-retro.md +271 -0
  645. package/skills/plan/prd-feature-template.md +132 -0
  646. package/skills/plan/prd-full-template.md +151 -0
  647. package/skills/plan/prd-reviewer-prompt.md +103 -0
  648. package/skills/plan/retro-template.md +75 -0
  649. package/skills/plan/soul.md +62 -0
  650. package/skills/playwright-driver/SKILL.md +226 -0
  651. package/skills/playwright-driver/soul.md +30 -0
  652. package/skills/quality-gates/SKILL.md +212 -0
  653. package/skills/reconcile/SKILL.md +324 -0
  654. package/skills/repo-audit/SKILL.md +272 -0
  655. package/skills/session-end/SKILL.md +1044 -0
  656. package/skills/session-end/discovery-scan.md +37 -0
  657. package/skills/session-end/drift-operations.md +97 -0
  658. package/skills/session-end/learning-patterns.md +78 -0
  659. package/skills/session-end/metrics-collection.md +175 -0
  660. package/skills/session-end/phase-3-2-docs-verification.md +148 -0
  661. package/skills/session-end/phase-3-6-tail.md +344 -0
  662. package/skills/session-end/phase-3-7a-recommendations.md +86 -0
  663. package/skills/session-end/plan-verification.md +288 -0
  664. package/skills/session-end/session-metrics-write.md +223 -0
  665. package/skills/session-end/vault-operations.md +50 -0
  666. package/skills/session-end/verification-checklist.md +20 -0
  667. package/skills/session-plan/SKILL.md +554 -0
  668. package/skills/session-plan/wave-template.md +37 -0
  669. package/skills/session-start/SKILL.md +1043 -0
  670. package/skills/session-start/phase-2-5-docs-planning.md +119 -0
  671. package/skills/session-start/phase-4-5-resource-health.md +49 -0
  672. package/skills/session-start/phase-7-1-premise-check.md +47 -0
  673. package/skills/session-start/phase-7-5-mode-selector.md +237 -0
  674. package/skills/session-start/phase-8-5-express-path.md +61 -0
  675. package/skills/session-start/presentation-format.md +81 -0
  676. package/skills/session-start/soul.md +57 -0
  677. package/skills/skill-creator/SKILL.md +168 -0
  678. package/skills/spinout/SKILL.md +76 -0
  679. package/skills/sunset-review/SKILL.md +96 -0
  680. package/skills/test-runner/SKILL.md +362 -0
  681. package/skills/test-runner/rubric-v1.md +388 -0
  682. package/skills/test-runner/soul.md +46 -0
  683. package/skills/tmux-layout/SKILL.md +104 -0
  684. package/skills/ubiquitous-language/SKILL.md +97 -0
  685. package/skills/using-orchestrator/SKILL.md +144 -0
  686. package/skills/vault-mirror/SKILL.md +234 -0
  687. package/skills/vault-sync/SKILL.md +319 -0
  688. package/skills/vault-sync/package-lock.json +40 -0
  689. package/skills/vault-sync/package.json +11 -0
  690. package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +8 -0
  691. package/skills/vault-sync/tests/fixtures/archive-test-vault/_meta/.gitkeep +0 -0
  692. package/skills/vault-sync/tests/fixtures/archive-test-vault/live-note.md +8 -0
  693. package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/_meta/.gitkeep +0 -0
  694. package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/bad-type.md +8 -0
  695. package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +8 -0
  696. package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +8 -0
  697. package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +10 -0
  698. package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +8 -0
  699. package/skills/vault-sync/tests/fixtures/clean-vault/README.md +3 -0
  700. package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +11 -0
  701. package/skills/vault-sync/tests/fixtures/dangling-link-vault/_meta/.gitkeep +0 -0
  702. package/skills/vault-sync/tests/fixtures/dangling-link-vault/has-dangling.md +9 -0
  703. package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +8 -0
  704. package/skills/vault-sync/tests/fixtures/empty-vault/_meta/.gitkeep +0 -0
  705. package/skills/vault-sync/tests/fixtures/missing-field-vault/_meta/.gitkeep +0 -0
  706. package/skills/vault-sync/tests/fixtures/missing-field-vault/missing-id.md +7 -0
  707. package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +9 -0
  708. package/skills/vault-sync/tests/fixtures/nested-tag-vault/_meta/.gitkeep +0 -0
  709. package/skills/vault-sync/tests/fixtures/nested-tag-vault/nested-tags-note.md +11 -0
  710. package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +3 -0
  711. package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +3 -0
  712. package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
  713. package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +11 -0
  714. package/skills/vault-sync/tests/fixtures/with-moc-vault/_meta/.gitkeep +0 -0
  715. package/skills/vault-sync/tests/fixtures/with-moc-vault/hello-world.md +11 -0
  716. package/skills/vault-sync/tests/schema-drift.test.mjs +133 -0
  717. package/skills/vault-sync/validator.mjs +658 -0
  718. package/skills/vault-sync/validator.sh +55 -0
  719. package/skills/wave-executor/SKILL.md +496 -0
  720. package/skills/wave-executor/circuit-breaker.md +169 -0
  721. package/skills/wave-executor/wave-loop.md +1043 -0
  722. package/skills/write-executable-plan/SKILL.md +237 -0
  723. package/skills/write-executable-plan/plan-template.md +154 -0
  724. package/templates/_minimal/CLAUDE.md.tmpl +41 -0
  725. package/templates/_minimal/README.md.tmpl +15 -0
  726. package/templates/_minimal/gitignore.tmpl +47 -0
  727. package/templates/_shared/harte-regeln.md +16 -0
  728. package/templates/_shared/loop.md +90 -0
  729. package/templates/_shared/rules/parallel-sessions.md +77 -0
  730. package/templates/nextjs-minimal/README.md +30 -0
  731. package/templates/nextjs-minimal/app/layout.tsx +18 -0
  732. package/templates/nextjs-minimal/app/page.tsx +7 -0
  733. package/templates/nextjs-minimal/eslint.config.mjs +16 -0
  734. package/templates/nextjs-minimal/next.config.mjs +4 -0
  735. package/templates/nextjs-minimal/package.json +27 -0
  736. package/templates/nextjs-minimal/tsconfig.json +23 -0
  737. package/templates/node-minimal/README.md +33 -0
  738. package/templates/node-minimal/eslint.config.mjs +10 -0
  739. package/templates/node-minimal/package.json +21 -0
  740. package/templates/node-minimal/src/index.ts +1 -0
  741. package/templates/node-minimal/tests/sanity.test.ts +5 -0
  742. package/templates/node-minimal/tsconfig.json +17 -0
  743. package/templates/personas/README.md +150 -0
  744. package/templates/personas/accounting-compliance.v1.md +120 -0
  745. package/templates/personas/accounting-tax-advisor.v1.md +116 -0
  746. package/templates/personas/buyer-p1-cto.v1.md +125 -0
  747. package/templates/personas/buyer-p2-kanzlei.v1.md +134 -0
  748. package/templates/personas/buyer-p3-build.v1.md +130 -0
  749. package/templates/personas/buyer-p4-tech-veto.v1.md +130 -0
  750. package/templates/personas/buyer-p5-solo.v1.md +132 -0
  751. package/templates/personas/buyer-p6-ld.v1.md +130 -0
  752. package/templates/personas/klima-ai-expert.v1.md +114 -0
  753. package/templates/personas/klima-physicist.v1.md +117 -0
  754. package/templates/python-uv/README.md +28 -0
  755. package/templates/python-uv/pyproject.toml +32 -0
  756. package/templates/python-uv/src/__PROJECT_NAME__/__init__.py +0 -0
  757. package/templates/python-uv/src/__PROJECT_NAME__/main.py +6 -0
  758. package/templates/python-uv/tests/test_sanity.py +2 -0
  759. package/templates/static-html/README.md +19 -0
  760. package/templates/static-html/index.html +15 -0
  761. package/templates/static-html/script.js +1 -0
  762. package/templates/static-html/styles.css +26 -0
@@ -0,0 +1,961 @@
1
+ # Session Config Template (Baseline)
2
+
3
+ > Project-instruction file: this lives under `## Session Config` in CLAUDE.md (Claude Code / Cursor) or AGENTS.md (Codex CLI). See [skills/_shared/instruction-file-resolution.md](../skills/_shared/instruction-file-resolution.md) for the alias resolution rule.
4
+
5
+ > Canonical field reference (types, defaults, edge cases): [docs/session-config-reference.md](./session-config-reference.md). This template is the **adopter-facing** companion: copy-paste blocks plus a structural walk-through of every field.
6
+
7
+ ## How to use this template
8
+
9
+ 1. Pick the host file: `CLAUDE.md (or AGENTS.md on Codex CLI)`. Never both.
10
+ 2. Add a single `## Session Config` H2. The header must match exactly — `skills/_shared/config-reading.md` parses the block under that heading.
11
+ 3. Start from the [Full minimal baseline](#full-minimal-baseline-copy-paste) at the bottom of this document. Add opt-in blocks one at a time as you adopt features.
12
+ 4. Run `/bootstrap --retroactive` to schema-validate the result.
13
+ 5. Validate at any time with `node scripts/parse-config.mjs --json`.
14
+
15
+ The format is the same on every platform. Fields not listed here are silently ignored — typos do **not** raise.
16
+
17
+ ## Where this file lives
18
+
19
+ The session-orchestrator plugin reads its Session Config from the per-repo project-instruction file. Exactly which file it picks depends on the platform:
20
+
21
+ ### CLAUDE.md (Claude Code, Cursor IDE)
22
+
23
+ Claude Code and Cursor IDE both read `CLAUDE.md` natively. Add the `## Session Config` H2 anywhere in that file.
24
+
25
+ ### AGENTS.md (Codex CLI)
26
+
27
+ Codex CLI uses `AGENTS.md` as its canonical instruction file. Same `## Session Config` H2, same field set.
28
+
29
+ The plugin resolves the file via [`scripts/lib/common.mjs::resolveInstructionFile`](../scripts/lib/common.mjs); the rule is documented in [`skills/_shared/instruction-file-resolution.md`](../skills/_shared/instruction-file-resolution.md). `CLAUDE.md` always wins ties when both files exist.
30
+
31
+ ## Mandatory fields (schema-validated)
32
+
33
+ These seven fields are enforced by `scripts/lib/config-schema.mjs`. Validation is gated by the `enforcement` field itself: `off` skips, `warn` reports + emits, `strict` reports + exits 1.
34
+
35
+ ```yaml
36
+ test-command: npm test # non-empty string — quality-gate test runner
37
+ typecheck-command: npm run typecheck # non-empty string — canonical typecheck runner
38
+ lint-command: npm run lint # non-empty string — Full Gate lint runner
39
+ agents-per-wave: 6 # integer ≥ 2 (or { default: 6, deep: 18 })
40
+ waves: 5 # integer ≥ 3 — execution wave count
41
+ persistence: true # boolean — STATE.md + memory file resumption
42
+ enforcement: warn # strict | warn | off — hook strictness AND validator gate
43
+ ```
44
+
45
+ Read by: `scripts/parse-config.mjs`, `scripts/validate-config.mjs`, `skills/_shared/config-reading.md`, every quality-gate skill.
46
+
47
+ ## Session Structure
48
+
49
+ Controls wave count, parallelism, and freeform per-repo notes the orchestrator must follow.
50
+
51
+ ```yaml
52
+ agents-per-wave: 6 # integer or "6 (deep: 18)" override syntax
53
+ waves: 5 # integer ≥ 3
54
+ recent-commits: 20 # how many commits to display at session-start
55
+ special: "any repo-specific instructions" # freeform — orchestrator reads + obeys
56
+ ```
57
+
58
+ Read by: `skills/session-start/SKILL.md` (Phase 4.5), `skills/session-plan/SKILL.md`, `skills/wave-executor/wave-loop.md`.
59
+
60
+ ## VCS & Infrastructure
61
+
62
+ ```yaml
63
+ vcs: gitlab # github | gitlab — auto-detected from remote when unset
64
+ gitlab-host: gitlab.example.com # only if remote URL doesn't expose it
65
+ mirror: github # auto-push to mirror after every commit (none | github)
66
+ cross-repos: [related-repo-1] # repos under ~/Projects/ to snapshot at session-start
67
+ pencil: path/to/design.pen # design-code alignment input
68
+ ecosystem-health: true # toggle health-endpoint probes
69
+ health-endpoints:
70
+ - { name: API, url: https://api.example.com/health }
71
+ issue-limit: 50 # max issues fetched at session-start
72
+ stale-branch-days: 7 # branch-age threshold for stale flag
73
+ stale-issue-days: 30 # issue-age threshold for triage flag
74
+ ```
75
+
76
+ Read by: `skills/session-start/SKILL.md`, `skills/ecosystem-health/SKILL.md`, `skills/gitlab-ops/SKILL.md`.
77
+
78
+ ## Quality Gates
79
+
80
+ ```yaml
81
+ test-command: npm test # mandatory
82
+ typecheck-command: npm run typecheck # mandatory; `skip` for non-TS projects
83
+ lint-command: npm run lint # mandatory
84
+ ssot-files: [STATUS.md, STATE.md] # files watched for staleness
85
+ ssot-freshness-days: 5 # days before SSOT flagged
86
+ plugin-freshness-days: 30 # days before the plugin itself flagged
87
+ ```
88
+
89
+ Read by: `skills/quality-gates/SKILL.md`, `skills/session-end/SKILL.md`. The three `*-command` fields are overridden by `.orchestrator/policy/quality-gates.json` when that file exists (#183).
90
+
91
+ ## Discovery
92
+
93
+ ```yaml
94
+ discovery-on-close: auto # session-type aware: housekeeping=false, feature/deep=true (#264)
95
+ discovery-probes: [all] # all | code | infra | ui | arch | session | audit | vault | feature
96
+ discovery-exclude-paths: [] # globs (e.g. "vendor/**", "dist/**")
97
+ discovery-severity-threshold: low # critical | high | medium | low
98
+ discovery-confidence-threshold: 60 # 0–100; below this auto-defers
99
+ discovery-parallelism: 5 # 1..16 probe agents in parallel
100
+ ```
101
+
102
+ Read by: `skills/discovery/SKILL.md` and the probe modules under `skills/discovery/probes-*.md`.
103
+
104
+ ## Persistence & Safety
105
+
106
+ ```yaml
107
+ persistence: true # mandatory
108
+ memory-cleanup-threshold: 5 # recommend /memory-cleanup after N memory files
109
+ memory-cleanup-soft-limit: 180 # hard ceiling on memory file count before nudge (#502)
110
+ learning-expiry-days: 30 # learnings auto-expire after N days untouched
111
+ learnings-surface-top-n: 15 # how many learnings appear in Project Intelligence
112
+ learning-decay-rate: 0.05 # 0.0..<1.0 untouched-learning confidence decay
113
+ enforcement: warn # mandatory; strict | warn | off
114
+ enforcement-gates:
115
+ path-guard: true
116
+ command-guard: true
117
+ post-edit-validate: true
118
+ allow-destructive-ops: false # disables destructive-command guard when true
119
+ reasoning-output: false # opt-in STATE:/PLAN: agent transparency markers
120
+ grounding-check: true # session-end Phase 1.1a planned-vs-touched diff
121
+ grounding-injection-max-files: 3 # 0 disables (#85)
122
+ isolation: auto # worktree | none | auto (graduated default #194)
123
+ max-turns: auto # housekeeping=8, feature=15, deep=25
124
+ auto-commit-per-wave: false # opt-in: commit after each wave's Quality-Lite PASS (default false; V3.6 plumbing)
125
+ ```
126
+
127
+ Read by: `skills/session-start/SKILL.md`, `skills/session-end/SKILL.md`, `hooks/pre-edit-scope.mjs`, `hooks/pre-bash-destructive-guard.mjs`, `hooks/pre-bash-enforce-commands.mjs`, `hooks/post-edit-validate.mjs`.
128
+
129
+ ## Resource Awareness (env-aware)
130
+
131
+ Introduced by Epic #157. Lets session-start sense host RAM/CPU/SSH/peers and adapt wave planning. Safe to omit — defaults are conservative.
132
+
133
+ ```yaml
134
+ resource-awareness: true # master toggle for env-aware runtime
135
+ enable-host-banner: true # emit host + resource banner at session-start
136
+ resource-thresholds:
137
+ ram-free-min-gb: 4 # below: cap agents-per-wave at 2
138
+ ram-free-critical-gb: 2 # below: recommend coordinator-direct
139
+ cpu-load-max-pct: 80 # sustained above: cap agents-per-wave at 2
140
+ concurrent-sessions-warn: 5 # warn at this many peer Claude sessions
141
+ ssh-no-docker: true # SSH session: avoid Docker-based tests
142
+ zombie-threshold-min: 30 # min idle time before stale-process flag (#178)
143
+ ```
144
+
145
+ Read by: `hooks/on-session-start.mjs`, `scripts/lib/resource-probe.mjs`, `scripts/lib/wave-sizing.mjs`.
146
+
147
+ ## Planning
148
+
149
+ ```yaml
150
+ baseline-ref: null # git ref on baseline project (or null = legacy MR sync)
151
+ baseline-project-id: "52" # GitLab project ID of baseline (default: infrastructure/projects-baseline)
152
+ plan-baseline-path: ~/Projects/projects-baseline # local baseline clone for /plan new
153
+ plan-default-visibility: internal # internal | private | public — for /plan new
154
+ plan-prd-location: docs/prd # PRD output directory
155
+ plan-retro-location: docs/retro # retro output directory
156
+ ```
157
+
158
+ Read by: `skills/plan/SKILL.md` and the three plan modes (`mode-new`, `mode-feature`, `mode-retro`).
159
+
160
+ ## Vault Sync
161
+
162
+ Quality gate at session-end Phase 2 that validates YAML frontmatter against `vaultFrontmatterSchema` and flags dangling wiki-links. Opt-in.
163
+
164
+ ```yaml
165
+ vault-sync:
166
+ enabled: false # opt-in
167
+ mode: warn # warn | hard | off — `hard` blocks session close
168
+ vault-dir: . # absolute or repo-relative
169
+ exclude:
170
+ - "**/_MOC.md"
171
+ - "**/_overview.md"
172
+ - "**/README.md"
173
+ ```
174
+
175
+ Read by: `skills/vault-sync/SKILL.md` + `skills/vault-sync/validator.mjs`.
176
+
177
+ ## Vault Integration
178
+
179
+ Auto-sync that writes learnings + session summaries into a Meta-Vault after each session, and (with `--session-id`) auto-commits the result.
180
+
181
+ ```yaml
182
+ vault-integration:
183
+ enabled: false # opt-in
184
+ vault-dir: ~/Projects/vault # absolute path to vault repo
185
+ mode: warn # warn | strict | off
186
+ vault-name: # optional (#660) — overrides git-derived repo slug for per-project vault namespacing; null/absent → deriveRepo()
187
+ gitlab-groups: # optional — for /plan retro vault-backfill sub-mode
188
+ - infrastructure
189
+ - clients
190
+ ```
191
+
192
+ Read by: `scripts/vault-mirror.mjs`, `scripts/vault-backfill.mjs`, `skills/session-end/session-metrics-write.md`, `skills/evolve/SKILL.md`, `skills/plan/mode-retro.md`.
193
+
194
+ > **Host-local override (#653).** `vault-dir` (and `plan-baseline-path`) resolve host-locally with precedence: env-var (`SO_VAULT_DIR` / `SO_BASELINE_PATH`) > `owner.yaml` `paths:` section (`vault-dir` / `baseline-path`) > the committed default shown above. This keeps maintainer-specific absolute paths out of version control. Resolver: `scripts/lib/config/host-paths.mjs`.
195
+
196
+ ## Vault Mirror Quality
197
+
198
+ Quality thresholds applied by `scripts/vault-mirror.mjs` before mirroring a learning or session note to the Meta-Vault. Notes below the thresholds are skipped (not an error). PRD F1.2 / issue #504.
199
+
200
+ ```yaml
201
+ vault-mirror:
202
+ quality:
203
+ min-narrative-chars: 400 # integer ≥ 0 — minimum body length to mirror
204
+ min-confidence: 0.5 # float 0.0..1.0 — minimum learning confidence to mirror
205
+ ```
206
+
207
+ Read by: `scripts/vault-mirror.mjs`.
208
+
209
+ ## Cold Start
210
+
211
+ Cold-start detector that nudges the operator when sessions go silent (no commits, no learnings, long wall-clock idle). PRD F1.3 / issue #500.
212
+
213
+ ```yaml
214
+ cold-start:
215
+ enabled: true # opt-out master toggle; default true
216
+ nudge-after-hours: 1 # integer ≥ 0 — hours of wall-clock idle before nudge
217
+ silence-after-sessions: 1 # integer ≥ 0 — consecutive silent sessions before nudge
218
+ ```
219
+
220
+ Read by: `scripts/lib/cold-start-detector.mjs`.
221
+
222
+ ## Memory Banner
223
+
224
+ Controls the session-start "📚 Loaded from memory" banner that surfaces top learnings and peer-card excerpts at the start of every session. PRD F2.3 / issue #505.
225
+
226
+ ```yaml
227
+ memory:
228
+ banner:
229
+ enabled: true # PRD F2.3 (#505) — silence the session-start "📚 Loaded from memory" banner when false
230
+ ```
231
+
232
+ Read by: `scripts/lib/config/memory.mjs`; consumed in Phase 6.7 of `skills/session-start/SKILL.md`.
233
+
234
+ ## Memory Proposals (#501)
235
+
236
+ Agent-writable memory tool. During a wave, an agent may call `node scripts/memory-propose.mjs --type … --subject … --insight … --evidence … --confidence …` to queue a learning proposal. At session-end Phase 3.6.3, the coordinator surfaces queued proposals via `AskUserQuestion` for accept/reject/edit. PRD F2.1 / issue #501.
237
+
238
+ ```yaml
239
+ memory:
240
+ proposals:
241
+ enabled: true # PRD F2.1 (#501) — agent-writable memory tool; gates the propose() CLI + session-end AUQ
242
+ quota-per-wave: 5 # max proposals one agent can queue per wave (exit 1 / quota-exceeded when exceeded)
243
+ confidence-floor: 0.5 # proposals below this are rejected (exit 2 / rejected-low-confidence)
244
+ ```
245
+
246
+ Agents invoke via `SO_WAVE_AGENT=1 node scripts/memory-propose.mjs …`. The `SO_WAVE_AGENT=1` env-var is set automatically by the wave-executor boilerplate; direct CLI calls without it exit `3` (`rejected-wrong-context`).
247
+
248
+ Read by: `scripts/lib/memory-proposals/{schema,store,collector,sink}.mjs`, `scripts/memory-propose.mjs`, `agents/memory-proposal-collector.md`, `hooks/pre-bash-memory-propose-audit.mjs`, `skills/session-end/SKILL.md` Phase 3.6.3.
249
+
250
+ ## Auto-Dream Proposal Filter (#566)
251
+
252
+ Collect-emit confidence floor applied at session-end Phase 3.6.3 by `collectProposals()` (`scripts/lib/memory-proposals/collector.mjs`). This is a SECOND gate above the write-time `memory.proposals.confidence-floor` enforced by `scripts/memory-propose.mjs`: the per-record write-floor runs first when an agent calls the CLI; the collect-emit floor here filters what surfaces to the operator's AUQ at session-end. Issue #566.
253
+
254
+ ```yaml
255
+ auto-dream:
256
+ min-confidence: 0.5 # float 0.0..1.0 — collect-emit floor for proposals surfaced to AUQ
257
+ ```
258
+
259
+ Read by: `scripts/lib/config/auto-dream.mjs` (parser), `scripts/lib/memory-proposals/collector.mjs` (filter applied at session-end Phase 3.6.3 inside `collectProposals()`).
260
+
261
+ ## STATE.md Lock
262
+
263
+ Mechanical write-lock around STATE.md to prevent race conditions between parallel worker sessions writing the same file (PRD gsd Pattern 1 / issue #518). When enabled, `withStateMdLock(fn)` acquires `.orchestrator/state.lock` before invoking `fn` and releases on completion or throw. Stale-lock override via PID-liveness mirrors the existing `session.lock` design.
264
+
265
+ ```yaml
266
+ state-md-lock:
267
+ enabled: true # default true; mechanical guard against PSA-003/PSA-004 violations
268
+ timeout-ms: 10000 # integer ≥ 0 — acquire timeout in milliseconds
269
+ ```
270
+
271
+ Read by: `scripts/lib/session-lock.mjs` (new `acquireStateLock`/`releaseStateLock`/`withStateMdLock` helpers), every STATE.md writer under `scripts/lib/state-md/`.
272
+
273
+ ## Handover Alignment Gate
274
+
275
+ Interactive gate in `/close` (session-end) that surfaces open questions before carryover issues are filed — giving the operator a chance to align on scope/expectations before the session's incomplete work is handed off (issue #769). Fail-open by design: the gate is skipped entirely when disabled, when running headless, or under `/autopilot` — it never blocks an unattended run.
276
+
277
+ ```yaml
278
+ handover-gate:
279
+ enabled: true # default true; skips when disabled/headless/autopilot (fail-open)
280
+ max-open-questions: 3 # integer ≥ 0 — max open questions surfaced in the gate's triage AUQ (0 = none; channel stays active)
281
+ ```
282
+
283
+ Read by: `scripts/lib/config/handover-gate.mjs`, `skills/session-end/SKILL.md` Phase 1.65.
284
+
285
+ ## Broken-Window Budget
286
+
287
+ Opt-in gate in `/close` (session-end Phase 2.6). When enabled, it aggregates THIS session's "knowingly-broken shipments" (echo-stubs shipped under `enforcement: warn`, Phase 2.3/2.5 "Override and close" choices, MED/LOW findings routed to "Unresolved Review Findings", wave-level overridden findings) and files ONE hard-terminated closure issue per item (labels `broken-window` + `priority:high`, hard due-date). Non-blocking and idempotent (issue #730, Epic H / H5).
288
+
289
+ ```yaml
290
+ broken-window-budget:
291
+ enabled: false # opt-in; session-end Phase 2.6 files hard-due-date closure issues for knowingly-broken shipments
292
+ due-days: 7 # integer ≥ 1 — hard due-date horizon (glab native --due-date; gh Due: <date> body line)
293
+ ```
294
+
295
+ Read by: `scripts/lib/config/broken-window.mjs`, `skills/session-end/SKILL.md` Phase 2.6.
296
+
297
+ ## Slopcheck (Package Legitimacy Gate)
298
+
299
+ Opt-in defense against LLM-hallucinated package names ("slopsquatting"). When enabled, `classifyPackages(pkgs)` consults the registry and returns `LEGITIMATE` / `ASSUMED` / `SUS` / `SLOP` per package. Hooked into `/plan` PRD generation and `/discovery` supply-chain probes. PRD gsd Pattern 2 / issue #520.
300
+
301
+ ```yaml
302
+ slopcheck:
303
+ enabled: false # opt-in; defaults to off so existing sessions are unaffected
304
+ sources: [plan, discovery] # array of "plan" | "discovery" — where classifyPackages is invoked
305
+ ```
306
+
307
+ Read by: `scripts/lib/slopcheck.mjs` (Wave 3 module — `classifyPackages`), `skills/plan/SKILL.md` Phase 3.5, `skills/discovery/probes/supply-chain-slopcheck.mjs`.
308
+
309
+ ## Templates-First Hook
310
+
311
+ PreToolUse `Bash` hook that blocks `gh|glab pr|mr|issue create` calls unless the matching repo template (`.github/PULL_REQUEST_TEMPLATE*`, `.github/ISSUE_TEMPLATE*`, `.gitlab/merge_request_templates/*`, `.gitlab/issue_templates/*`) was Read in the current session. Per-session acknowledgement via `.orchestrator/runtime/templates-acknowledged.json`. PRD gsd Pattern 3 / issue #519.
312
+
313
+ ```yaml
314
+ templates-first:
315
+ enabled: true # default true; mechanical replacement for gitlab-ops template advice
316
+ hosts: [github, gitlab] # array of "github" | "gitlab" — host allow-list
317
+ ```
318
+
319
+ Read by: `hooks/pre-bash-templates-first.mjs`, `.orchestrator/policy/templates-policy.json`.
320
+
321
+ ## Verification Auto-Fix Loop
322
+
323
+ Opt-in retry loop that dispatches a `code-implementer` fixer-agent after an inter-wave Quality-Gate failure, supplying failure output + `corrective_context` + changed file paths. Bounded by `max-retries` (default 2). When disabled (default), the wave-executor aborts on first gate failure — preserving today's behaviour. PRD gsd Pattern 4 / issue #521.
324
+
325
+ ```yaml
326
+ verification-auto-fix:
327
+ enabled: false # opt-in; default false preserves current abort-on-fail behaviour
328
+ max-retries: 2 # integer ≥ 0 — bounded fixer-agent retries before hard abort
329
+ ```
330
+
331
+ Read by: `scripts/lib/quality-gate.mjs` (`runQualityGateWithRetry`), `skills/wave-executor/SKILL.md` inter-wave checkpoint.
332
+
333
+ ## Custom Phases (#637)
334
+
335
+ Opt-in, repo-declared deterministic phases that run as their own phase during session close (and/or housekeeping). This is a **contract**, not a convention: each phase has a `command` executed via Bash with exit-code gating, plus summary reporting in the Final Report. Empty/absent ⇒ no custom phases run.
336
+
337
+ ```yaml
338
+ custom-phases:
339
+ - name: eval-learn-aggregate # required, non-empty, SAFE slug ([A-Za-z0-9._-])
340
+ when: housekeeping # housekeeping | session-end | both (default: session-end)
341
+ command: npm run eval:aggregate # required; run verbatim — NO interpolation from records
342
+ mode: hard # warn | hard | off (default: warn)
343
+ review: docs/eval/last-run.md # optional; SAFE-path; coordinator reads it after the command (default: null)
344
+ ```
345
+
346
+ Field semantics:
347
+ - **`when`** — `housekeeping` phases run only on housekeeping sessions; `session-end` (default) runs on every non-housekeeping session-type; `both` runs on all.
348
+ - **`mode`** — `off` skips the phase; `warn` (default) runs + reports but never blocks; `hard` + non-zero exit code BLOCKS the close (AskUserQuestion: Fix / Override+log Deviation / Abort).
349
+ - **`review`** — when set, the coordinator reads that file as a review step after the command completes.
350
+
351
+ Security: `command` and `review` reject shell metacharacters; records failing validation (missing `name`/`command`, unsafe value) are dropped with a stderr WARN. Like `test-command`, a `command` is commit-gated and trusted under the same VCS-trust-anchor model — see `.claude/rules/quality-gates-autofix.md` § "Session Config Command Injection".
352
+
353
+ Read by: `scripts/lib/config/custom-phases.mjs`, `skills/session-end/SKILL.md` Phase 2.5.
354
+
355
+ ## Evolve Extra Sources (#638)
356
+
357
+ Opt-in EXTRA learning sources for `/evolve`. A `domain-regression` measurement (e.g. an eval-learn harness) runs OUT-OF-BAND and writes a sidecar JSON; `/evolve` then READS each declared sidecar and emits a `domain-regression` learning candidate per persistent regression flag. `/evolve` NEVER runs the measurement itself — this is a strict read-only consumption contract. Absent/empty ⇒ `[]` ⇒ no extra sources are read.
358
+
359
+ ```yaml
360
+ evolve:
361
+ extra-sources:
362
+ - path: eval/learn/reports/latest.json # required; SAFE path (no shell metacharacters)
363
+ kind: regression-flags # enum: regression-flags (only value; unknown ⇒ entry dropped + WARN)
364
+ learning-type: domain-regression # enum: domain-regression (only value; unknown ⇒ entry dropped + WARN)
365
+ ```
366
+
367
+ Field semantics:
368
+ - **`path`** — repo-relative or absolute path to a sidecar JSON. Schema gate: `{ flags: [{ metric, baseline, recent, delta }] }`. An unknown/missing sidecar schema ⇒ skip + WARN.
369
+ - **`kind`** — selects the sidecar parser. Only `regression-flags` is defined; an unknown value DROPS the entry with a stderr WARN (schema gate — `/evolve` never guesses a parser).
370
+ - **`learning-type`** — stamps the emitted learning candidate. Only `domain-regression` is registered (in both the learnings TTL schema and the memory-proposals type enum); an unknown value DROPS the entry with a stderr WARN.
371
+
372
+ Security: `path` rejects shell metacharacters; confinement at the read sink is the path-traversal guard. Like all command/path-bearing config, changes are commit-gated under the VCS-trust-anchor model.
373
+
374
+ Read by: `scripts/lib/config/evolve.mjs` (parser), `skills/evolve/SKILL.md` Step 3.1b (read + emit).
375
+
376
+ ## Reconcile Engine (#696 / #697)
377
+
378
+ Opt-in config foundation for the FA3 (#696) advisory rule-proposal delivery at session-end Phase 3.6.8. When `enabled: true`, the session-end coordinator reads learning candidates from the reconcile engine (FA2 — `scripts/lib/reconcile/`) and surfaces approved rule proposals via `AskUserQuestion`. Rules are **never auto-applied** — every write is operator-AUQ-gated. The `mode: warn` default means proposals are surfaced as advisory banners; `mode: off` silences them entirely. The `rule-expiry-days` key defaults to `null` so the engine falls back to per-type TTL (default 60d in `emitter.mjs`); a non-null committed default would force flat expiry and change FA2 behaviour.
379
+
380
+ ```yaml
381
+ reconcile:
382
+ enabled: false # opt-in; FA3 reads this to gate session-end Phase 3.6.8
383
+ mode: warn # off | warn — advisory only; rules NEVER auto-applied (#696)
384
+ targets: [repo-local] # where approved rules are written; repo-local = .claude/rules/ in v1
385
+ rule-expiry-days: null # null = per-type TTL (default 60d); set positive integer for flat override (#697)
386
+ confidence-floor: 0.5 # float 0.0..1.0 — min learning confidence for rule proposal eligibility
387
+ min-rule-days: 7 # #741.1 — floor for emitted rule expires-at: max(derived, now + N days); prevents born-dead rules
388
+ min-insight-chars: 24 # #741.2 — reject a learning whose trimmed insight is shorter than N chars before rule conversion
389
+ ```
390
+
391
+ Field semantics:
392
+ - **`enabled`** — master toggle. `false` (default) means session-end Phase 3.6.8 is a no-op.
393
+ - **`mode`** — `warn` surfaces proposals as an advisory AUQ at session-end; `off` silences all output. No `strict` mode — rules are never auto-applied in v1.
394
+ - **`targets`** — list of write locations for approved rules. `repo-local` writes to `.claude/rules/` in the current repo.
395
+ - **`rule-expiry-days`** — `null` (default) lets the reconcile engine use per-type TTL (fragile-pattern=30d, anti-pattern=90d, etc.). Set a positive integer to override all types with a flat expiry window.
396
+ - **`confidence-floor`** — learnings below this confidence level are not eligible for rule proposals. Default 0.5 matches `memory.proposals.confidence-floor`.
397
+ - **`min-rule-days`** — floor window (days) applied to a proposed rule's `expires-at` so a near-dead or already-elapsed natural expiry never produces a born-dead rule. Positive integer; malformed or ≤0 falls back to 7 (issue #741.1).
398
+ - **`min-insight-chars`** — opt-in minimum insight length gating the eligibility placeholder-insight check; rejects a learning whose trimmed insight is shorter than N characters before rule conversion. Integer ≥ 0; `0` disables the check (issue #741.2).
399
+
400
+ Read by: `scripts/lib/config/reconcile.mjs` (parser), `skills/session-end/SKILL.md` Phase 3.6.8 (FA3 delivery). FA2 engine: `scripts/lib/reconcile/`.
401
+
402
+ ## Discovery-Validator (PSA-006 Enforcement)
403
+
404
+ Non-blocking `SubagentStop` hook that mechanically enforces PSA-006: distributional claims ("N of M", "100% of", "all N", "no remaining", "every X", "none of") in a subagent's transcript tail must carry an adjacent fenced grep/rg/find transcript. When a claim lacks one, the hook records a `discovery_validator_violation` event in `.orchestrator/metrics/events.jsonl` and emits a stderr WARN. v1 is log + warn only (exit 0 always — never blocks an agent) — a blocking hard-gate is reserved for a future iteration. ON by default (flip risk is near-zero; generates real telemetry). Issue #567.
405
+
406
+ ```yaml
407
+ discovery-validator:
408
+ enabled: true # on by default; log+warn-only, exit-0-always — set false to silence
409
+ ```
410
+
411
+ Read by: `scripts/lib/config/discovery-validator.mjs`, `hooks/post-subagent-discovery-validator.mjs`.
412
+
413
+ ## Dialectic-Deriver
414
+
415
+ Opt-in mode for `/evolve --dialectic` and session-end Phase 3.6.7 auto-trigger. When `cadence > 0`, session-end auto-dispatches `/evolve --dialectic --dry-run` after every N sessions to produce a proposed update to peer cards (#503). Set `cadence: 0` as a kill-switch to permanently disable auto-dispatch (manual `/evolve --dialectic` always works regardless). PRD F2.5 / issue #506.
416
+
417
+ ```yaml
418
+ dialectic:
419
+ cadence: 5 # integer ≥ 0; 0 = kill-switch (no critique dispatches)
420
+ model: haiku # haiku | sonnet | opus — fail-fast on unknown value
421
+ budget-tokens: 8000 # integer ≥ 0 — input token budget per critique call
422
+ ```
423
+
424
+ Read by: `scripts/lib/config/dialectic.mjs`, `scripts/lib/auto-dialectic.mjs`, `skills/session-end/SKILL.md` Phase 3.6.7, `skills/evolve/SKILL.md` Phase 6.
425
+
426
+ ## Eval (#803)
427
+
428
+ Opt-in configuration for the Standard v1 evaluation harness and the forthcoming `/eval` skill (Session-Prozess-Eval — PRD `docs/prd/2026-07-16-aiat-llm-eval.md` §S6, follow-up wave of Epic #803). This section documents the config surface only; the skill consumer lands in a later wave.
429
+
430
+ ```yaml
431
+ eval:
432
+ enabled: false # opt-in
433
+ mode: warn # warn | off
434
+ judge: off # off | haiku | sonnet
435
+ report: html # html | none
436
+ handle: # optional string — null/absent → null
437
+ ```
438
+
439
+ **Gotcha:** the `eval:` key-line itself must carry NO inline comment (strict `/^eval:\s*$/` block-open match — same restriction as `dialectic:` and `custom-phases:` above). A trailing `# comment` on that exact line silently disables the whole block; defaults apply with no warning.
440
+
441
+ Read by: `scripts/lib/config/eval.mjs`. Skill consumer: `skills/eval/SKILL.md` (not yet shipped as of this parser).
442
+
443
+ ## Vault Staleness
444
+
445
+ Vault-drift discovery probes. Used by `/discovery vault` and (when `enabled`) session-end Phase 2.3.
446
+
447
+ ```yaml
448
+ vault-staleness:
449
+ enabled: false # opt-in
450
+ mode: warn # warn | strict | off (NOT 'hard'; canonical per #217)
451
+ thresholds:
452
+ top: 30 # tier=top narrative staleness (days)
453
+ active: 60 # tier=active
454
+ archived: 180 # tier=archived
455
+ ```
456
+
457
+ Read by: `skills/discovery/probes/vault-staleness.mjs`, `skills/discovery/probes/vault-narrative-staleness.mjs`, `skills/session-end/SKILL.md` Phase 2.3.
458
+
459
+ ## Docs Staleness
460
+
461
+ Filesystem-mtime staleness probe for living reference docs (`docs/*.md` root-level + `docs/examples/*.md`; excludes `docs/adr/` — historically stable — and `docs/prd/` — active work-in-progress). Used by `/discovery` when enabled (#781, Epic #774).
462
+
463
+ ```yaml
464
+ docs-staleness:
465
+ enabled: false # opt-in
466
+ mode: warn # strict | warn | off
467
+ thresholds:
468
+ living: 90 # days — single tier; severity escalates at 1×/2×/3× threshold
469
+ ```
470
+
471
+ Read by: `skills/discovery/probes/docs-staleness.mjs`, `scripts/lib/config/docs-staleness.mjs`.
472
+
473
+ ## CLAUDE.md Drift Check
474
+
475
+ Narrative-drift gate at session-end Phase 2.2. Ten checks (see `skills/claude-md-drift-check/SKILL.md` for the full spec):
476
+
477
+ 1. `path-resolver` — absolute-path resolution
478
+ 2. `project-count-sync` — `01-projects/` count claims
479
+ 3. `issue-reference-freshness` — closed refs in forward-looking sections
480
+ 4. `session-file-existence` — `50-sessions/YYYY-MM-DD-*.md` references
481
+ 5. `command-count` — claimed "N commands" vs actual `commands/*.md`
482
+ 6. `session-config-parity` — top-level keys diffed against `docs/session-config-template.md`
483
+ 7. `vault-dir-parity` — `CLAUDE.md` vs `AGENTS.md` agreement on `vault-integration.vault-dir`
484
+ 8. `generated-rule-staleness` (WARN-only) — auto-generated rules whose `learning-key` is absent or expired
485
+ 9. `rule-scoping` — `.claude/rules/*.md` `paths:`/`globs:` frontmatter defects, cited-but-missing rule citations, zero-match globs, foreign glob tokens
486
+ 10. `docs-parity` — `docs/components.md` count-claims vs actual on-disk counts, Session Config key parity between `docs/session-config-template.md` and `docs/session-config-reference.md`, and legacy pre-`.orchestrator/metrics/` path references in the docs tree
487
+
488
+ ```yaml
489
+ drift-check:
490
+ enabled: false # opt-in
491
+ mode: warn # warn | hard | off
492
+ include-paths:
493
+ - CLAUDE.md
494
+ - AGENTS.md
495
+ - _meta/**/*.md
496
+ check-path-resolver: true
497
+ check-project-count-sync: true
498
+ check-issue-reference-freshness: true
499
+ check-session-file-existence: true
500
+ check-command-count: true
501
+ check-session-config-parity: true
502
+ check-vault-dir-parity: true
503
+ check-generated-rule-staleness: true
504
+ check-rule-scoping: true
505
+ check-docs-parity: true
506
+ ```
507
+
508
+ Read by: `skills/claude-md-drift-check/SKILL.md`, `skills/claude-md-drift-check/checker.mjs`.
509
+
510
+ ## Docs Orchestrator
511
+
512
+ Audience-split (User / Dev / Vault) doc generation, hooked into session-start Phase 2.5, session-plan Step 1.5/1.8, session-end Phase 3.2.
513
+
514
+ ```yaml
515
+ docs-orchestrator:
516
+ enabled: false # opt-in; activates the docs-writer agent
517
+ audiences: [user, dev, vault] # subset allowed
518
+ mode: warn # warn | strict | off
519
+ ```
520
+
521
+ Read by: `skills/docs-orchestrator/SKILL.md`, `skills/session-start/phase-2-5-docs-planning.md`, `skills/session-end/phase-3-2-docs-verification.md`, `agents/docs-writer.md`.
522
+
523
+ ## Events Rotation
524
+
525
+ Size-based rotation of `.orchestrator/metrics/events.jsonl` (#251). Fires only at session-start.
526
+
527
+ ```yaml
528
+ events-rotation:
529
+ enabled: true # default true
530
+ max-size-mb: 10 # 1..1024
531
+ max-backups: 5 # 1..20
532
+ ```
533
+
534
+ Read by: `hooks/on-session-start.mjs`, `scripts/lib/events-rotation.mjs`.
535
+
536
+ ## Express Path
537
+
538
+ Codified coordinator-direct flow for housekeeping + simple single-issue sessions (#214). Activates when session-type=housekeeping AND issues ≤ 3 AND no parallel agents.
539
+
540
+ ```yaml
541
+ express-path:
542
+ enabled: true # default true; set false to always use full 5-wave flow
543
+ ```
544
+
545
+ Read by: `skills/session-start/phase-8-5-express-path.md`, `skills/session-plan/SKILL.md` (express-path short-circuit).
546
+
547
+ ## Webhooks
548
+
549
+ Opt-in webhook notifications. The `scripts/lib/webhook-url.mjs` resolver checks env first (`SO_WEBHOOK_<KIND>_URL`), then this Session Config block. **No personal-domain default** — callers must supply a URL or the resolver throws.
550
+
551
+ ```yaml
552
+ webhooks:
553
+ slack:
554
+ url: https://hooks.slack.com/services/REDACTED/REDACTED/REDACTED
555
+ discord:
556
+ url: https://discord.com/api/webhooks/REDACTED/REDACTED
557
+ generic:
558
+ url: https://example.com/hooks/session-events
559
+ gitlab-pipeline-status:
560
+ url: https://gitlab.example.com/hooks/pipeline
561
+ ```
562
+
563
+ Read by: `scripts/lib/webhook-url.mjs`, hooks that emit events (`hooks/on-stop.mjs`, `hooks/on-subagent-stop.mjs`).
564
+
565
+ The internal Clank Event Bus uses two separate env vars (`CLANK_EVENT_SECRET`, `CLANK_EVENT_URL`) — both required for the fire-and-forget POST.
566
+
567
+ ## Hook Runtime Profile (env-only, not config)
568
+
569
+ `SO_HOOK_PROFILE` and `SO_DISABLED_HOOKS` are environment variables, **not Session Config fields**. They control hook execution at runtime without editing `hooks.json`.
570
+
571
+ | Variable | Values | Default | Effect |
572
+ |----------|--------|---------|--------|
573
+ | `SO_HOOK_PROFILE` | `full` \| `minimal` \| `off` | `full` | Preset bundle — `minimal` keeps only `on-session-start` + `pre-bash-destructive-guard`. |
574
+ | `SO_DISABLED_HOOKS` | comma-separated hook names | _(none)_ | Per-hook override; takes precedence over the profile. |
575
+
576
+ Read by: `hooks/_lib/profile-gate.mjs`. See [docs/session-config-reference.md § Hook Runtime Profile Control](./session-config-reference.md#hook-runtime-profile-control-211).
577
+
578
+ ## Agent Mapping
579
+
580
+ Explicit role-to-agent binding. Without this block, session-plan auto-matches tasks to agents based on description content.
581
+
582
+ ```yaml
583
+ agent-mapping:
584
+ impl: code-implementer
585
+ test: test-writer
586
+ ui: ui-developer
587
+ db: db-specialist
588
+ security: security-reviewer
589
+ docs: docs-writer
590
+ perf: code-implementer
591
+ ```
592
+
593
+ Read by: `skills/session-plan/SKILL.md`, `skills/wave-executor/wave-loop.md`.
594
+
595
+ The dispatch resolution is three-tier: project agents (`.claude/agents/`) > plugin agents (`session-orchestrator:*`) > `general-purpose`.
596
+
597
+ ## Full minimal baseline (copy-paste)
598
+
599
+ The smallest valid Session Config — passes `validate-config` without warnings on a typical Node/TS repo:
600
+
601
+ ```yaml
602
+ ## Session Config
603
+
604
+ test-command: npm test
605
+ typecheck-command: npm run typecheck
606
+ lint-command: npm run lint
607
+ agents-per-wave: 6
608
+ waves: 5
609
+ persistence: true
610
+ enforcement: warn
611
+ ```
612
+
613
+ That's enough for `/session feature` → `/go` → `/close` to work end-to-end. Every other field falls back to documented defaults.
614
+
615
+ ## Full opt-in baseline (copy-paste)
616
+
617
+ Everything turned on for a project that wants the full feature surface (vault, docs, drift checks, env-aware sizing, webhooks). Trim to taste:
618
+
619
+ ```yaml
620
+ ## Session Config
621
+
622
+ # Mandatory
623
+ test-command: npm test
624
+ typecheck-command: npm run typecheck
625
+ lint-command: npm run lint
626
+ agents-per-wave: 6 (deep: 18)
627
+ waves: 5
628
+ persistence: true
629
+ enforcement: warn
630
+
631
+ # Session structure
632
+ recent-commits: 20
633
+ special: "follow .claude/rules/parallel-sessions.md"
634
+
635
+ # VCS & infrastructure
636
+ vcs: gitlab
637
+ mirror: github
638
+ cross-repos: []
639
+ ecosystem-health: true
640
+ health-endpoints: []
641
+ issue-limit: 50
642
+ stale-branch-days: 7
643
+ stale-issue-days: 30
644
+
645
+ # Quality
646
+ ssot-files: [STATE.md]
647
+ ssot-freshness-days: 5
648
+ plugin-freshness-days: 30
649
+
650
+ # Discovery
651
+ discovery-on-close: auto
652
+ discovery-probes: [all]
653
+ discovery-exclude-paths: ["vendor/**", "dist/**", "node_modules/**"]
654
+ discovery-severity-threshold: low
655
+ discovery-confidence-threshold: 60
656
+ discovery-parallelism: 5
657
+
658
+ # Persistence & safety
659
+ memory-cleanup-threshold: 5
660
+ memory-cleanup-soft-limit: 180
661
+ learning-expiry-days: 30
662
+ learnings-surface-top-n: 15
663
+ learning-decay-rate: 0.05
664
+ enforcement-gates:
665
+ path-guard: true
666
+ command-guard: true
667
+ post-edit-validate: true
668
+ allow-destructive-ops: false
669
+ reasoning-output: false
670
+ grounding-check: true
671
+ grounding-injection-max-files: 3
672
+ isolation: auto
673
+ max-turns: auto
674
+ auto-commit-per-wave: false # opt-in: commit after each wave's Quality-Lite PASS (V3.6 plumbing)
675
+
676
+ # Env-aware
677
+ resource-awareness: true
678
+ enable-host-banner: true
679
+ resource-thresholds:
680
+ ram-free-min-gb: 4
681
+ ram-free-critical-gb: 2
682
+ cpu-load-max-pct: 80
683
+ concurrent-sessions-warn: 5
684
+ ssh-no-docker: true
685
+ zombie-threshold-min: 30
686
+
687
+ # Planning
688
+ baseline-ref: main
689
+ baseline-project-id: "52"
690
+ plan-baseline-path: ~/Projects/projects-baseline
691
+ plan-default-visibility: internal
692
+ plan-prd-location: docs/prd
693
+ plan-retro-location: docs/retro
694
+
695
+ # Vault sync
696
+ vault-sync:
697
+ enabled: true
698
+ mode: warn
699
+ vault-dir: .
700
+ exclude: ["**/_MOC.md", "**/_overview.md", "**/README.md"]
701
+
702
+ # Vault integration
703
+ vault-integration:
704
+ enabled: true
705
+ vault-dir: ~/Projects/vault
706
+ mode: warn
707
+ vault-name: # optional (#660) — per-project vault namespace override; null/absent → deriveRepo()
708
+ gitlab-groups: []
709
+
710
+ # Vault mirror quality thresholds
711
+ vault-mirror:
712
+ quality:
713
+ min-narrative-chars: 400
714
+ min-confidence: 0.5
715
+
716
+ # Cold-start detector
717
+ cold-start:
718
+ enabled: true
719
+ nudge-after-hours: 1
720
+ silence-after-sessions: 1
721
+
722
+ # Memory banner (PRD F2.3 / #505) + Memory proposals (PRD F2.1 / #501)
723
+ memory:
724
+ banner:
725
+ enabled: true # PRD F2.3 (#505) — silence the session-start "📚 Loaded from memory" banner when false
726
+ proposals:
727
+ enabled: true # PRD F2.1 (#501) — agent-writable memory tool (memory.propose CLI + session-end AUQ)
728
+ quota-per-wave: 5 # max proposals one agent can queue per wave (exit 1 / quota-exceeded when exceeded)
729
+ confidence-floor: 0.5 # proposals below this are rejected (exit 2 / rejected-low-confidence)
730
+
731
+ # Auto-Dream proposal filter (#566) — SECOND gate above memory.proposals.confidence-floor
732
+ auto-dream:
733
+ min-confidence: 0.5 # collect-emit floor applied by collectProposals() at session-end Phase 3.6.3
734
+
735
+ # STATE.md lock (PRD gsd Pattern 1 / #518)
736
+ state-md-lock:
737
+ enabled: true
738
+ timeout-ms: 10000
739
+
740
+ # Handover Alignment Gate (#769)
741
+ handover-gate:
742
+ enabled: true
743
+ max-open-questions: 3
744
+
745
+ # Broken-Window Budget (#730/H5)
746
+ broken-window-budget:
747
+ enabled: false
748
+ due-days: 7
749
+
750
+ # Slopcheck (PRD gsd Pattern 2 / #520)
751
+ slopcheck:
752
+ enabled: false
753
+ sources: [plan, discovery]
754
+
755
+ # Templates-first hook (PRD gsd Pattern 3 / #519)
756
+ templates-first:
757
+ enabled: true
758
+ hosts: [github, gitlab]
759
+
760
+ # Verification auto-fix loop (PRD gsd Pattern 4 / #521)
761
+ verification-auto-fix:
762
+ enabled: false
763
+ max-retries: 2
764
+
765
+ # Custom phases — repo-declared deterministic close/housekeeping phases (#637)
766
+ custom-phases:
767
+ - name: eval-learn-aggregate # required, SAFE slug
768
+ when: housekeeping # housekeeping | session-end | both (default: session-end)
769
+ command: npm run eval:aggregate # required; run verbatim — no record interpolation
770
+ mode: hard # warn | hard | off (default: warn)
771
+ review: docs/eval/last-run.md # optional SAFE path read after the command (default: null)
772
+
773
+ # Evolve extra-sources — opt-in EXTRA /evolve learning sources (#638)
774
+ evolve:
775
+ extra-sources:
776
+ - path: eval/learn/reports/latest.json # required; SAFE path to a sidecar JSON
777
+ kind: regression-flags # enum: regression-flags (only value)
778
+ learning-type: domain-regression # enum: domain-regression (only value)
779
+
780
+ # Reconcile engine — FA3 advisory rule-proposal delivery (#696 / #697)
781
+ reconcile:
782
+ enabled: false # opt-in; FA3 reads this to gate session-end Phase 3.6.8
783
+ mode: warn # off | warn — advisory only; rules NEVER auto-applied
784
+ targets: [repo-local] # rule-write location; repo-local = .claude/rules/ in v1
785
+ rule-expiry-days: null # null = per-type TTL (default 60d); set integer to override
786
+ confidence-floor: 0.5 # float 0.0..1.0 — min confidence for rule proposal eligibility
787
+ min-rule-days: 7 # #741.1 — floor for emitted rule expires-at (prevents born-dead rules)
788
+ min-insight-chars: 24 # #741.2 — reject a learning whose trimmed insight is shorter than N chars
789
+
790
+ # Discovery-validator — PSA-006 enforcement (#567)
791
+ discovery-validator:
792
+ enabled: true
793
+
794
+ # Dialectic-Deriver (#506)
795
+ dialectic:
796
+ cadence: 5 # integer ≥ 0; 0 = kill-switch (no critique dispatches)
797
+ model: haiku # haiku | sonnet | opus — fail-fast on unknown value
798
+ budget-tokens: 8000 # integer ≥ 0 — input token budget per critique call
799
+
800
+ # Eval — Standard v1 harness config surface (#809 / Epic #803)
801
+ eval:
802
+ enabled: false # opt-in
803
+ mode: warn # warn | off — fail-fast on unknown value
804
+ judge: off # off | haiku | sonnet — fail-fast on unknown value
805
+ report: html # html | none — fail-fast on unknown value
806
+ handle: # optional string — null/absent → null
807
+
808
+ # Vault staleness
809
+ vault-staleness:
810
+ enabled: true
811
+ mode: warn
812
+ thresholds:
813
+ top: 30
814
+ active: 60
815
+ archived: 180
816
+
817
+ # Docs staleness (#781)
818
+ docs-staleness:
819
+ enabled: false
820
+ mode: warn
821
+ thresholds:
822
+ living: 90
823
+
824
+ # CLAUDE.md drift check
825
+ drift-check:
826
+ enabled: true
827
+ mode: warn
828
+ include-paths: [CLAUDE.md, AGENTS.md, "_meta/**/*.md"]
829
+ check-path-resolver: true
830
+ check-project-count-sync: true
831
+ check-issue-reference-freshness: true
832
+ check-session-file-existence: true
833
+ check-command-count: true
834
+ check-session-config-parity: true
835
+ check-vault-dir-parity: true
836
+ check-generated-rule-staleness: true
837
+ check-rule-scoping: true
838
+ check-docs-parity: true
839
+
840
+ # Docs orchestrator
841
+ docs-orchestrator:
842
+ enabled: true
843
+ audiences: [user, dev, vault]
844
+ mode: warn
845
+
846
+ # Events rotation
847
+ events-rotation:
848
+ enabled: true
849
+ max-size-mb: 10
850
+ max-backups: 5
851
+
852
+ # Express path
853
+ express-path:
854
+ enabled: true
855
+
856
+ # Frontend-slop PostToolUse hook (#684) — opt-in, warn-only, non-blocking
857
+ frontend-slop-hook:
858
+ enabled: false # PostToolUse frontend-slop detector after UI-file edits; profile-gate also gates it
859
+
860
+ # Runaway tool-loop guard (ecc-analysis / #619)
861
+ loop-guard:
862
+ enabled: true # PostToolUse warn-only loop detector; profile-gate also gates it
863
+ threshold: 3 # identical (tool+argsHash) calls within window before warn
864
+ window: 5 # ring-buffer size
865
+
866
+ # Always-on instruction-budget guard (#687) — session-start Phase 4, warn-only, growth-ratchet
867
+ instruction-budget:
868
+ enabled: true # always-on directive-budget banner; off-by-config silences it
869
+ ceiling: 480 # structural-directive ceiling (baseline ~457; ratchet guards growth)
870
+ mode: warn # warn (surface banner) | off (silent no-op)
871
+
872
+ # Config-protection guard (ecc-analysis / #622)
873
+ config-protection:
874
+ enabled: true # PreToolUse: warn on gate-weakening Edit/Write
875
+ mode: warn # warn | strict (strict blocks loosening, exit 2)
876
+ allow-config-weakening: false # per-session bypass (mirrors allow-destructive-ops)
877
+
878
+ # Strategic compact-nudge (ecc-analysis / #620)
879
+ compact-nudge:
880
+ enabled: false # opt-in advisory /compact nudge at inter-wave checkpoints
881
+ after: [discovery, impl] # subset of {discovery, impl, failed-wave}
882
+ # NOTE: `discovery` / `impl` are wave ROLES — the §3c gate matches them against
883
+ # the wave's role string. `failed-wave` is NOT a role; it keys off the wave's
884
+ # failure OUTCOME (any wave that did not pass its quality gate), so it can fire
885
+ # after a wave of any role.
886
+ mode: warn # warn | off
887
+
888
+ # /goal continuation anchor at named seams (Lever 5 / #636)
889
+ goal-integration:
890
+ enabled: false # opt-in advisory; default off — zero behaviour change when absent
891
+ seams: [session-end-backlog, inter-wave-fixloop] # subset of {session-end-backlog, inter-wave-fixloop}
892
+ # ADVISORY ONLY. Surfaces ONE suggested /goal command at the named seam(s);
893
+ # never auto-invokes /goal, never blocks. /goal = Adapter (ADR-0010): the
894
+ # evaluator reads the transcript and runs NO tools — it anchors CONTINUATION,
895
+ # never JUDGMENT. Deterministic exit-code gates (npm test/typecheck/lint) stay
896
+ # the completion authority. ONE goal per session — the two seams cannot both
897
+ # hold an active goal; the operator picks one. See `.claude/rules/loop-and-monitor.md`
898
+ # § LM-008, `skills/session-end/SKILL.md § 1.3a`, and
899
+ # `skills/wave-executor/wave-loop.md § /goal Continuation Anchor`.
900
+
901
+ # Webhooks (URLs are required when used — no defaults)
902
+ # webhooks:
903
+ # slack:
904
+ # url: https://hooks.slack.com/services/...
905
+ # gitlab-pipeline-status:
906
+ # url: https://gitlab.example.com/hooks/pipeline
907
+
908
+ # Agent mapping
909
+ agent-mapping:
910
+ impl: code-implementer
911
+ test: test-writer
912
+ ui: ui-developer
913
+ db: db-specialist
914
+ security: security-reviewer
915
+ docs: docs-writer
916
+ perf: code-implementer
917
+ ```
918
+
919
+ ## Validation & Bootstrap
920
+
921
+ - **Validate manually:** `node scripts/parse-config.mjs --json` (writes to stdout) or `node scripts/validate-config.mjs` (mandatory-field check).
922
+ - **Auto-validate at session-start:** Always runs. Behavior is gated by `enforcement` (`off`/`warn`/`strict`).
923
+ - **Bypass:** `SO_SKIP_CONFIG_VALIDATION=1`.
924
+ - **Patch missing fields:** `/bootstrap --retroactive` adds the seven mandatory fields to an existing config without overwriting custom values.
925
+
926
+ ## Cross-reference
927
+
928
+ - [docs/session-config-reference.md](./session-config-reference.md) — full canonical reference, types, edge cases.
929
+ - [skills/_shared/instruction-file-resolution.md](../skills/_shared/instruction-file-resolution.md) — CLAUDE.md ↔ AGENTS.md alias rule.
930
+ - [skills/_shared/config-reading.md](../skills/_shared/config-reading.md) — runtime parser used by every skill.
931
+ - [docs/USER-GUIDE.md](./USER-GUIDE.md) — adopter walk-through with examples.
932
+ - [docs/examples/](./examples/) — Session Config samples for Next.js, Express, Swift.
933
+
934
+ ## Skill Evolution
935
+
936
+ > **Parity-exempt section.** This H2 is intentionally placed outside the `## Session Config` block so that the `claude-md-drift-check` Check-6 parity scanner (which extracts only column-0 keys inside the `## Session Config` block) does not flag repos that have not yet adopted this feature. Adding `skill-evolution:` as a column-0 key *inside* `## Session Config` would cause every repo running `drift-check.mode: hard` that lacks the key to hard-fail at session-end — portfolio-wide breakage. Issue #646.
937
+
938
+ Opt-in configuration for the Skill Self-Evolution Foundation (Epic #643, Sub-issue #646). When `autonomy: advisory`, the `/evolve` skill surfaces a session-end summary of skill health signals (D-token rollup, telemetry gaps, A/B experiment deltas) for operator review — no automated edits. When `autonomy: autonomous-gated`, a deterministic evidence gate is checked first; only repairs that clear the gate AND belong to the repo's own local config artifacts (e.g., Session Config fields, local skill overrides) are applied automatically. **Plugin-level and remote skill repairs are always MR-only, regardless of autonomy setting.** The default is `off` — no behavior change for repos that omit this block.
939
+
940
+ ```yaml
941
+ skill-evolution:
942
+ autonomy: off # off | advisory | autonomous-gated — default off (opt-in)
943
+ evidence-floor: 0.5 # float 0.0..1.0 — min evidence before an autonomous-gated repair acts
944
+ judge: off # opt-in session-end LLM-judge for A's L3 (advisory only); default off
945
+ ```
946
+
947
+ Read by: `skills/evolve/SKILL.md` (skill-health summary), `scripts/lib/config/skill-evolution.mjs` (parser). PRD: "Skill Self-Evolution Foundation" (#643; archived in the private Meta-Vault). Issue: #646.
948
+
949
+ ## Dispatcher Autonomy
950
+
951
+ > **Parity-exempt section.** This H2 is intentionally placed outside the `## Session Config` block so that the `claude-md-drift-check` Check-6 parity scanner (which extracts only column-0 keys inside the `## Session Config` block) does not flag repos that have not yet adopted this feature. Adding `dispatcher-autonomy:` as a column-0 key *inside* `## Session Config` would cause every repo running `drift-check.mode: hard` that lacks the key to hard-fail at session-end — portfolio-wide breakage. Issue #679.
952
+
953
+ Opt-in configuration for the cross-repo free-repo dispatcher autonomy gate (Epic #673, Sub-issue #679). When `autonomy: advisory`, the `/dispatcher` flow surfaces ranked free-repo candidates for operator review — no automated dispatch. When `autonomy: autonomous-gated`, a deterministic confidence gate is checked first; only dispatches that clear the `confidence-floor` are routed automatically. The default is `off` — fail-closed, no behavior change for repos that omit this block. The effective `autonomy` resolves with host-local precedence `SO_DISPATCHER_AUTONOMY` env > `owner.yaml` `dispatcher.autonomy` > committed > `off` (#653 pattern).
954
+
955
+ ```yaml
956
+ dispatcher-autonomy:
957
+ autonomy: off # off | advisory | autonomous-gated — default off (fail-closed)
958
+ confidence-floor: 0.5 # float 0.0..1.0
959
+ ```
960
+
961
+ Read by: `scripts/lib/config/dispatcher-autonomy.mjs` (parser + resolver), `skills/dispatcher/SKILL.md` (cross-repo dispatch flow). PRD: "Cross-Repo Vault-Status / Autopilot Dispatcher" (#673; archived in the private Meta-Vault). Issue: #679.