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,37 @@
1
+ #!/usr/bin/env bash
2
+ # checker.sh — POSIX wrapper for claude-md-drift-check.
3
+ #
4
+ # Usage:
5
+ # bash checker.sh [VAULT_DIR] [--mode warn|hard|off] [--include-path <glob>]... [--skip-* ...]
6
+ # VAULT_DIR=/path/to/vault bash checker.sh [--mode warn]
7
+ #
8
+ # Exit codes mirror checker.mjs:
9
+ # 0 — no errors, or warn mode, or skipped
10
+ # 1 — errors present and mode=hard
11
+ # 2 — invocation or infra error
12
+ #
13
+ # Output: JSON report on stdout.
14
+
15
+ set -euo pipefail
16
+
17
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
18
+ CHECKER_MJS="${SCRIPT_DIR}/checker.mjs"
19
+
20
+ if [[ $# -ge 1 && -n "${1:-}" && "${1:-}" != --* ]]; then
21
+ export VAULT_DIR="$1"
22
+ shift
23
+ fi
24
+ : "${VAULT_DIR:=$PWD}"
25
+
26
+ if ! command -v node >/dev/null 2>&1; then
27
+ echo '{"status":"infra-error","reason":"node not found in PATH"}' >&2
28
+ exit 2
29
+ fi
30
+
31
+ if [[ ! -f "$CHECKER_MJS" ]]; then
32
+ echo "{\"status\":\"infra-error\",\"reason\":\"checker.mjs not found at $CHECKER_MJS\"}" >&2
33
+ exit 2
34
+ fi
35
+
36
+ export VAULT_DIR
37
+ exec node "$CHECKER_MJS" "$@"
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@session-orchestrator/claude-md-drift-check",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "description": "Narrative drift checker for CLAUDE.md and _meta/*.md. Path-resolver + project-count-sync + issue-reference-freshness + session-file-existence. Pure Node, no runtime deps.",
7
+ "engines": {
8
+ "node": ">=18"
9
+ },
10
+ "scripts": {
11
+ "test": "vitest run"
12
+ },
13
+ "devDependencies": {
14
+ "vitest": "^4.1.0"
15
+ }
16
+ }
@@ -0,0 +1,39 @@
1
+ # convergence-monitoring
2
+
3
+ Monitors iterative improvement loops (autoresearch, multi-wave sessions) for convergence.
4
+ Answers: **"should this loop keep running?"** — distinct from `/evolve` (retrospective
5
+ learning) and `quality-gates` (correctness verification).
6
+
7
+ ## Attribution
8
+
9
+ Inspired by cavekit's documented convergence-monitoring concept (MIT, Julius Brussee).
10
+ Implemented from spec since upstream skill not yet published as of 2026-04-30.
11
+
12
+ ## File Inventory
13
+
14
+ | File | Purpose |
15
+ |--------------|----------------------------------------------------------------------------------|
16
+ | `SKILL.md` | Full skill spec — phases, decision table, diagnosis, recovery suggestions |
17
+ | `SIGNALS.md` | Signal reference — computation, thresholds, false positives, event schema |
18
+ | `README.md` | This file |
19
+
20
+ ## Invocation
21
+
22
+ **Explicit:** `/convergence-monitoring` — standalone assessment from current session history.
23
+
24
+ **Embedded:** Set `convergence-monitoring: true` in Session Config. `wave-executor` and
25
+ `/autoresearch` will call this skill automatically after each Impl-Core/Impl-Polish wave.
26
+
27
+ ## Verdicts
28
+
29
+ | Verdict | Meaning |
30
+ |---------------|-----------------------------------------------|
31
+ | `STOP` | Loop has converged — declare done |
32
+ | `CONTINUE` | Still making progress — run next wave |
33
+ | `INVESTIGATE` | Signals ambiguous or degrading — diagnose |
34
+ | `SKIP` | Not enough data or monitoring disabled |
35
+
36
+ ## See Also
37
+
38
+ `skills/wave-executor/wave-loop.md` · `skills/evolve/SKILL.md` ·
39
+ `skills/quality-gates/SKILL.md`
@@ -0,0 +1,246 @@
1
+ # Convergence-Monitoring — Signal Reference
2
+
3
+ Companion to `SKILL.md`. Defines each signal precisely: how to compute it, what threshold
4
+ means what, and what false positives look like. Consume this when implementing callers or
5
+ debugging unexpected verdicts.
6
+
7
+ ---
8
+
9
+ ## Signal 1: Shrinking Diff (SD)
10
+
11
+ **What it measures:** Is the volume of change still decreasing wave-over-wave?
12
+
13
+ A well-converging loop should produce progressively smaller diffs — large changes early
14
+ (scaffold, core logic), shrinking to fixes and polish, approaching zero at completion.
15
+
16
+ ### Computation
17
+
18
+ ```bash
19
+ # For wave N (run after wave completes):
20
+ WAVE_START_REF="<git SHA of wave N start>"
21
+ WAVE_END_REF="<git SHA of wave N end>"
22
+
23
+ # Lines added in this wave (insertions only — deletions tracked separately)
24
+ INSERTIONS=$(git diff --shortstat "$WAVE_START_REF" "$WAVE_END_REF" \
25
+ | grep -oE '[0-9]+ insertion' | awk '{print $1}')
26
+ DELETIONS=$(git diff --shortstat "$WAVE_START_REF" "$WAVE_END_REF" \
27
+ | grep -oE '[0-9]+ deletion' | awk '{print $1}')
28
+ WAVE_DIFF_SIZE=$((${INSERTIONS:-0} + ${DELETIONS:-0}))
29
+
30
+ # Ratio against peak diff (peak = max diff_size across all waves in session)
31
+ PEAK_DIFF_SIZE=$(jq -s 'map(.diff_size) | max' <<< "$WAVE_HISTORY_JSON")
32
+ SD_VALUE=$(echo "scale=3; $WAVE_DIFF_SIZE / $PEAK_DIFF_SIZE" | bc)
33
+ ```
34
+
35
+ ### Thresholds
36
+
37
+ | SD value | Interpretation |
38
+ |-----------|--------------------------------------------------------|
39
+ | > 1.0 | This wave is larger than any previous — churn alert |
40
+ | 0.6–1.0 | Still substantial work; loop is active |
41
+ | 0.15–0.6 | Shrinking — healthy progression |
42
+ | 0.0–0.15 | Near-zero change — plateau (convergence or stall) |
43
+
44
+ ### Trend Mapping
45
+
46
+ | Condition | Trend |
47
+ |--------------------------------------------------------|--------------|
48
+ | SD_VALUE < 0.6 AND less than prior wave's value | `improving` |
49
+ | SD_VALUE within ±15% of prior wave for 2+ waves | `plateau` |
50
+ | SD_VALUE > prior wave's SD_VALUE | `regressing` |
51
+
52
+ ### False Positives
53
+
54
+ - **Refactor-heavy waves** produce large diffs (file moves, renames) that look like
55
+ regressions. Mitigation: if `git diff --name-only | grep -c '/dev/null'` is high
56
+ (files deleted/renamed), discount the diff size by 40%.
57
+ - **Test-only waves** often produce large line counts with zero functional change.
58
+ The quality-gates pass-rate signal compensates for this.
59
+ - **Plateau at large diff** does NOT mean convergence — it means oscillation. Always
60
+ cross-check velocity before issuing a STOP verdict on a large-diff plateau.
61
+
62
+ ### Confidence Formula
63
+
64
+ ```
65
+ SD_confidence = min(1.0, completed_waves / 3)
66
+ ```
67
+
68
+ Minimum 3 waves before the ratio is meaningful. Below 3 waves: `confidence < 1.0`,
69
+ verdict is downgraded per Phase 2 confidence gate.
70
+
71
+ ---
72
+
73
+ ## Signal 2: Pass-Rate Plateau (PR)
74
+
75
+ **What it measures:** Has the test pass-rate stabilized?
76
+
77
+ Pass-rate is the most direct quality signal. An improving trend confirms the loop is
78
+ fixing real defects. A plateau at ≥ 0.95 is the desired end-state. A plateau below
79
+ 0.90 is a ceiling — the loop cannot fix what it's breaking.
80
+
81
+ ### Computation
82
+
83
+ Read from `.orchestrator/metrics/events.jsonl`, filtering `event_type: quality.incremental`
84
+ for the current session:
85
+
86
+ ```bash
87
+ # Extract pass-rate per wave:
88
+ PASS_RATES=$(jq -s --arg session "$SESSION_START_REF" '
89
+ [.[] | select(.session_start_ref == $session and .event_type == "quality.incremental")
90
+ | (.test.passed // 0) / ((.test.total // 1) | if . == 0 then 1 else . end)]
91
+ ' events.jsonl)
92
+
93
+ # Latest value:
94
+ PR_VALUE=$(echo "$PASS_RATES" | jq 'last')
95
+ # Prior value:
96
+ PR_PRIOR=$(echo "$PASS_RATES" | jq '.[length - 2] // 0')
97
+ ```
98
+
99
+ If `quality.incremental` events are absent (test runner not configured), set
100
+ `PR_confidence = 0.0` and trend = `plateau` (neutral; do not block on missing data).
101
+
102
+ ### Thresholds
103
+
104
+ | PR value | Interpretation |
105
+ |-----------|------------------------------------------------------------|
106
+ | ≥ 0.95 | Target zone — loop should stop unless diff still large |
107
+ | 0.90–0.95 | Acceptable; continue if improving |
108
+ | < 0.90 | Below target — investigate if no improving trend |
109
+ | Δ > +0.05 | Large improvement — continue regardless of other signals |
110
+ | Δ < -0.03 | Regression — issue INVESTIGATE regardless of other signals |
111
+
112
+ ### Trend Mapping
113
+
114
+ | Condition | Trend |
115
+ |------------------------------------------------------------|--------------|
116
+ | PR_VALUE > PR_PRIOR by > 0.02 | `improving` |
117
+ | PR_VALUE within ±0.02 of PR_PRIOR for 2+ consecutive waves | `plateau` |
118
+ | PR_VALUE < PR_PRIOR by > 0.03 | `regressing` |
119
+
120
+ ### False Positives
121
+
122
+ - **New tests added mid-loop** temporarily lower pass-rate as they're written before
123
+ the implementation is complete. Look for `test.total` growing while `test.passed` is
124
+ stable — this is healthy, not a regression.
125
+ - **Flaky tests** produce oscillating pass-rate without real quality change. If pass-rate
126
+ alternates between two values (e.g., 0.97 / 0.94 / 0.97), classify as plateau at the
127
+ higher value and emit a `flaky-tests-suspected` note.
128
+ - **Missing test runner** produces no events; default to neutral (plateau at 1.0 with
129
+ confidence 0.0) — never block the loop on missing instrumentation.
130
+
131
+ ### Confidence Formula
132
+
133
+ ```
134
+ PR_confidence = min(1.0, quality_events_count / 2)
135
+ ```
136
+
137
+ Minimum 2 `quality.incremental` events in this session before the trend is meaningful.
138
+
139
+ ---
140
+
141
+ ## Signal 3: Velocity (VEL)
142
+
143
+ **What it measures:** Is the agent still producing commits and changes?
144
+
145
+ Declining velocity is *expected and healthy* as a loop nears completion — early waves
146
+ scaffold and wire, later waves polish and fix. Zero velocity for 2+ waves means the loop
147
+ has stopped making progress, whether or not quality gates pass.
148
+
149
+ ### Computation
150
+
151
+ ```bash
152
+ # Commits in this wave:
153
+ VEL_COMMITS=$(git rev-list --count "$WAVE_START_REF".."$WAVE_END_REF")
154
+
155
+ # Lines changed in this wave:
156
+ VEL_LINES=$(git diff --shortstat "$WAVE_START_REF" "$WAVE_END_REF" \
157
+ | awk '{gsub(/[^0-9 ]/,"",$0); print $1+$3}')
158
+
159
+ # Prior wave lines (for trend):
160
+ VEL_LINES_PRIOR=<read from events.jsonl for wave N-1>
161
+ ```
162
+
163
+ ### Thresholds
164
+
165
+ | Condition | Interpretation |
166
+ |----------------------------------|------------------------------------------------|
167
+ | VEL_COMMITS = 0, VEL_LINES < 5 | Stall — loop made no progress this wave |
168
+ | VEL_LINES < 20, declining | Normal wind-down — approaching completion |
169
+ | VEL_LINES stable (not declining) | Oscillation risk — check for churn |
170
+ | VEL_LINES increasing | Scope expansion or churn — flag for review |
171
+
172
+ ### Trend Mapping
173
+
174
+ | Condition | Trend |
175
+ |----------------------------------------------------|--------------|
176
+ | VEL_LINES > prior wave by > 20% for 2+ waves | `improving` |
177
+ | VEL_COMMITS = 0 AND VEL_LINES < 5 | `plateau` |
178
+ | VEL_LINES declining monotonically | `regressing` |
179
+
180
+ ### False Positives
181
+
182
+ - **Finalization waves** (git commit, SSOT updates, CHANGELOG) produce velocity after
183
+ an implementation plateau. This looks like `improving` but is actually loop close-out.
184
+ If `git log --oneline | head -5` shows only chore/docs commits, classify as `plateau`.
185
+ - **Empty waves** (all agents dispatched but none committed) show zero velocity. This is
186
+ a hard stall, not a convergence — always cross-check with PR signal.
187
+ - **Large refactor waves** appear as high velocity with SD also high — the loop is
188
+ rewriting, not progressing. The SD + VEL combination triggers INVESTIGATE in the
189
+ decision table.
190
+
191
+ ### Confidence Formula
192
+
193
+ ```
194
+ VEL_confidence = min(1.0, completed_waves / 2)
195
+ ```
196
+
197
+ ---
198
+
199
+ ## Composite Confidence
200
+
201
+ When producing the final verdict, the composite confidence is:
202
+
203
+ ```
204
+ composite_confidence = (SD_confidence + PR_confidence + VEL_confidence) / 3
205
+ ```
206
+
207
+ If `composite_confidence < 0.5`:
208
+ - STOP → downgraded to CONTINUE
209
+ - INVESTIGATE → downgraded to CONTINUE
210
+
211
+ The caller must surface `low_confidence: [<signal>, ...]` in the report so the user
212
+ can decide whether to trust the CONTINUE verdict or force a decision.
213
+
214
+ ---
215
+
216
+ ## Event Schema (convergence.checkpoint)
217
+
218
+ Written to `.orchestrator/metrics/events.jsonl` after each Phase 2 evaluation:
219
+
220
+ ```json
221
+ {
222
+ "schema_version": 1,
223
+ "ts": "<ISO 8601 UTC>",
224
+ "session_start_ref": "<git SHA>",
225
+ "wave_number": 3,
226
+ "event_type": "convergence.checkpoint",
227
+ "verdict": "CONTINUE",
228
+ "signals": {
229
+ "shrinking_diff": { "trend": "improving", "value": 0.42, "confidence": 0.67 },
230
+ "pass_rate": { "trend": "plateau", "value": 0.97, "confidence": 1.0 },
231
+ "velocity": { "trend": "regressing","value": 48, "confidence": 1.0 }
232
+ },
233
+ "composite_confidence": 0.89,
234
+ "low_confidence": [],
235
+ "notes": []
236
+ }
237
+ ```
238
+
239
+ All fields required. `notes` is a string array (empty when no anomalies detected).
240
+
241
+ ---
242
+
243
+ ## See Also
244
+
245
+ `skills/convergence-monitoring/SKILL.md` · `skills/wave-executor/wave-loop.md` ·
246
+ `.orchestrator/metrics/events.jsonl` schema
@@ -0,0 +1,285 @@
1
+ ---
2
+ name: convergence-monitoring
3
+ user-invocable: true
4
+ tags: [autoresearch, convergence, loop-control, wave-executor]
5
+ model: haiku
6
+ model-preference: sonnet
7
+ model-preference-codex: gpt-5.4-mini
8
+ model-preference-cursor: claude-sonnet-4-6
9
+ description: >
10
+ Monitor iterative improvement loops for convergence. Three signals — shrinking diff,
11
+ pass-rate plateau, velocity — drive a Stop/Continue/Investigate decision at each
12
+ inter-wave checkpoint. Distinct from /evolve (retrospective) and session-reviewer
13
+ (wave output review): convergence-monitoring answers "are we making progress?" not
14
+ "was the last wave correct?". Primary consumer: /autoresearch loops and wave-executor
15
+ inter-wave checkpoints.
16
+ attribution: >
17
+ Inspired by cavekit's documented convergence-monitoring concept (MIT, Julius Brussee).
18
+ Implemented from spec since upstream skill not yet published as of 2026-04-30.
19
+ ---
20
+
21
+ > **Platform Note:** State files use the platform's native directory: `.claude/` (Claude Code),
22
+ > `.codex/` (Codex CLI), or `.cursor/` (Cursor IDE). Shared metrics live in
23
+ > `.orchestrator/metrics/`. See `skills/_shared/platform-tools.md`.
24
+
25
+ # Convergence-Monitoring Skill
26
+
27
+ ## Platform-native (CC 2.1.105+)
28
+
29
+ This skill's watcher is registered as a plugin monitor via `.claude-plugin/plugin.json`'s `experimental.monitors` reference to `monitors/monitors.json`. Each session that loads this plugin auto-starts the watcher in the background (see `scripts/lib/convergence-monitor.mjs`). Each NDJSON stdout line from the watcher becomes a `<task_notification>` event Claude sees mid-session.
30
+
31
+ For harness < 2.1.105 (no monitor support), the skill's manual probes documented below serve as the fallback path.
32
+
33
+ ## When to Invoke
34
+
35
+ **Explicit invocation (`/convergence-monitoring`):** Standalone assessment — reads wave
36
+ history from `.orchestrator/metrics/events.jsonl`, computes all three signals, reports
37
+ verdict + recovery options.
38
+
39
+ **Embedded (loop context):** `/autoresearch` and `wave-executor` invoke this skill after
40
+ each Impl-Core or Impl-Polish wave when `convergence-monitoring: true` is set in Session
41
+ Config. The skill returns a structured verdict that the caller uses to gate the next wave.
42
+
43
+ **NOT a substitute for quality gates.** Quality-gates verify correctness (typecheck, test,
44
+ lint). Convergence-monitoring verifies *progress direction* — whether the work is moving
45
+ toward done or oscillating/stalling.
46
+
47
+ ---
48
+
49
+ ## Phase 0: Activation Gate
50
+
51
+ ### 0.1 Explicit Invocation
52
+
53
+ If invoked via `/convergence-monitoring`, skip to Phase 1 unconditionally.
54
+
55
+ ### 0.2 Embedded Invocation
56
+
57
+ When called from `wave-executor` or `/autoresearch`, check:
58
+
59
+ 1. Read Session Config per `skills/_shared/config-reading.md`. Store as `$CONFIG`.
60
+ 2. Check `$CONFIG."convergence-monitoring"`. If the field is absent or `false`, return
61
+ verdict `SKIP` immediately — the caller MUST NOT block on a skipped monitoring call.
62
+ 3. Require `$WAVE_NUMBER` (integer, current wave) and `$SESSION_START_REF` (git SHA) to
63
+ be provided by the caller. If either is absent, emit warning and return `SKIP`.
64
+ 4. Require at least **2 completed waves** of history. If `$WAVE_NUMBER < 2`, return
65
+ `SKIP` — not enough data to assess trend.
66
+
67
+ ---
68
+
69
+ ## Phase 1: Signal Collection
70
+
71
+ Read wave history from `.orchestrator/metrics/events.jsonl`. Filter to records matching
72
+ `$SESSION_START_REF` and `event_type` in `{wave.start, wave.end, quality.incremental}`.
73
+
74
+ Compute the three signals in parallel. Each signal produces:
75
+
76
+ ```
77
+ { signal: "<name>", value: <float>, trend: "improving" | "plateau" | "regressing", confidence: 0.0-1.0 }
78
+ ```
79
+
80
+ ### Signal 1 — Shrinking Diff (SD)
81
+
82
+ Measures: is the diff still shrinking, or has it reached noise level?
83
+
84
+ **Computation:**
85
+ ```
86
+ diff_sizes[] = [git diff --stat $wave_N_start_ref $wave_N_end_ref | tail -1 | grep -oE '[0-9]+ insertion' | awk '{print $1}']
87
+ for each completed wave in this session
88
+ ```
89
+
90
+ - `value` = ratio of latest wave diff to peak diff (0.0 = unchanged, 1.0 = as large as ever)
91
+ - `trend`:
92
+ - `improving` — diff_sizes shrinking monotonically for last 2 waves (value < 0.6)
93
+ - `plateau` — diff_sizes stable within ±15% for 2+ consecutive waves (value 0.0–0.15)
94
+ - `regressing` — diff_sizes growing (value > 1.0 relative to prior wave)
95
+ - `confidence` = min(1.0, completed_waves / 3) — unreliable below 3 waves
96
+
97
+ **False positive flag:** A plateau on diff size with a *large* diff is not convergence —
98
+ it may be an oscillation. Cross-check with Signal 3 (velocity) before concluding.
99
+
100
+ ### Signal 2 — Pass-Rate Plateau (PR)
101
+
102
+ Measures: has the test pass-rate stabilized at a level (high or low)?
103
+
104
+ **Computation:** Read `quality.incremental` events from `events.jsonl` for this session.
105
+ Extract `test.passed / test.total` per wave where the field is present.
106
+
107
+ - `value` = latest pass-rate (0.0–1.0)
108
+ - `trend`:
109
+ - `improving` — pass-rate strictly increasing across last 2 waves
110
+ - `plateau` — pass-rate within ±2% for 2+ consecutive waves
111
+ - `regressing` — pass-rate decreasing
112
+ - `confidence` = min(1.0, quality_events_count / 2)
113
+
114
+ **False positive flag:** A plateau at 1.0 (100% pass) is the desired end-state.
115
+ A plateau at < 0.9 with no improving trend is a ceiling signal — see Phase 3.
116
+
117
+ ### Signal 3 — Velocity (VEL)
118
+
119
+ Measures: commits and modified-line count per wave — declining velocity is normal
120
+ as work nears completion; zero velocity for 2+ waves is a stall.
121
+
122
+ **Computation:**
123
+ ```
124
+ commits_per_wave[] = [git rev-list --count $wave_N_start_ref..$wave_N_end_ref]
125
+ lines_per_wave[] = [git diff --shortstat $wave_N_start_ref $wave_N_end_ref | awk '{print $4+$6}']
126
+ for each completed wave in this session
127
+ ```
128
+
129
+ - `value` = lines changed in latest wave (raw integer, not ratio)
130
+ - `trend`:
131
+ - `improving` — commits or lines increasing (unusual mid-loop; flag for review)
132
+ - `plateau` — < 5 lines + 0 commits in latest wave
133
+ - `regressing` — lines declining (normal trajectory near convergence)
134
+ - `confidence` = min(1.0, completed_waves / 2)
135
+
136
+ ---
137
+
138
+ ## Phase 2: Convergence Decision Table
139
+
140
+ Aggregate signal trends into a single verdict. Apply the table top-to-bottom; use the
141
+ first matching row.
142
+
143
+ | SD trend | PR trend | VEL trend | Verdict | Rationale |
144
+ |------------|------------|------------|---------------|--------------------------------------------------------------|
145
+ | plateau | plateau | plateau | **STOP** | All three signals stable — loop has converged. |
146
+ | plateau | plateau | regressing | **STOP** | Velocity decline + stable quality — natural wind-down. |
147
+ | improving | improving | regressing | **CONTINUE** | Still making progress. Velocity decline is expected. |
148
+ | improving | plateau | regressing | **CONTINUE** | Diff still shrinking; pass-rate already high. |
149
+ | plateau | improving | regressing | **CONTINUE** | Pass-rate catching up; diff mostly stable — finishing work. |
150
+ | regressing | *any* | improving | **INVESTIGATE** | Diff growing and velocity up — scope expansion or churn. |
151
+ | *any* | regressing | *any* | **INVESTIGATE** | Pass-rate declining — regressions introduced. |
152
+ | plateau | plateau | improving | **INVESTIGATE** | Stable diff + stable quality but velocity up — odd state. |
153
+ | *any* | *any* | plateau | **INVESTIGATE** | Velocity zero for 2+ waves — stall or early plateau. |
154
+
155
+ **Confidence gate:** If any signal has confidence < 0.5, downgrade STOP → CONTINUE and
156
+ INVESTIGATE → CONTINUE (not enough data to act confidently on a Stop or Investigate).
157
+ Emit a note: `low-confidence: <signal-names>`.
158
+
159
+ ### Verdict Output (structured)
160
+
161
+ ```json
162
+ {
163
+ "verdict": "STOP | CONTINUE | INVESTIGATE | SKIP",
164
+ "signals": {
165
+ "shrinking_diff": { "trend": "...", "value": 0.0, "confidence": 0.0 },
166
+ "pass_rate": { "trend": "...", "value": 0.0, "confidence": 0.0 },
167
+ "velocity": { "trend": "...", "value": 0, "confidence": 0.0 }
168
+ },
169
+ "low_confidence": [],
170
+ "notes": []
171
+ }
172
+ ```
173
+
174
+ Emit verdict JSON to stdout. Append one JSONL record to
175
+ `.orchestrator/metrics/events.jsonl` with `event_type: convergence.checkpoint`.
176
+
177
+ ---
178
+
179
+ ## Phase 3: Non-Convergence Diagnosis
180
+
181
+ Execute this phase when `verdict == INVESTIGATE`. Skip if `verdict` is STOP or CONTINUE.
182
+
183
+ The core question: **ceiling or convergence?**
184
+
185
+ - **Convergence** — the work is done; signals stabilized at the desired state (pass-rate ~1.0,
186
+ diff ~0). Stop is the right action but signals were ambiguous.
187
+ - **Ceiling** — progress has halted but the desired state has NOT been reached. Something
188
+ is blocking further improvement.
189
+
190
+ ### 3.1 Ceiling vs Convergence Dichotomy
191
+
192
+ | Observable | Classification |
193
+ |-----------------------------------------------|------------------|
194
+ | pass-rate plateau ≥ 0.95, diff plateau ≈ 0 | Convergence |
195
+ | pass-rate plateau < 0.90 with no trend | Ceiling |
196
+ | diff growing (SD regressing) for 2+ waves | Churn / Ceiling |
197
+ | velocity plateau with large outstanding diff | Stall / Ceiling |
198
+ | velocity plateau with near-zero diff | Convergence |
199
+
200
+ ### 3.2 Ceiling Root-Cause Probes
201
+
202
+ Run these read-only probes to characterize the ceiling. Each probe takes < 5 seconds.
203
+
204
+ 1. **Recurring failures:** `git log --oneline $SESSION_START_REF..HEAD -- '*.test.*' | wc -l`
205
+ — high churn in test files with no new commits to production files suggests a test-fix loop.
206
+
207
+ 2. **Oscillating files:** identify files that appear in 3+ wave diffs in this session.
208
+ These are the **fragile modules** (see architecture.md Module/Seam vocabulary) — their
209
+ seam is leaking complexity into the loop.
210
+
211
+ 3. **Stagnation events:** read `stagnation_events` from the latest session record in
212
+ `sessions.jsonl`. A non-empty list confirms the loop is repeating edit-format-friction
213
+ rather than making functional progress.
214
+
215
+ 4. **Scope drift:** compare `$CONFIG."plan-prd-location"` PRD's in-scope items against
216
+ `git diff --name-only $SESSION_START_REF..HEAD`. Files outside PRD scope indicate
217
+ the loop has expanded beyond its brief.
218
+
219
+ Report the probe results in Phase 4.
220
+
221
+ ---
222
+
223
+ ## Phase 4: Recovery Suggestions
224
+
225
+ Present options based on the Phase 3 diagnosis. Do NOT auto-apply any recovery action —
226
+ present to the user and await confirmation.
227
+
228
+ | Diagnosis | Recovery Option | When to Use |
229
+ |------------------|---------------------------------------------------------------|-----------------------------------------------------------|
230
+ | Convergence | **Accept and stop** — declare loop done | pass-rate ≥ 0.95, all scope items addressed |
231
+ | Ceiling / Stall | **Rollback to last-known-good wave** — `git reset --soft` | Loop is chasing a regression it introduced |
232
+ | Ceiling / Churn | **Scope reduction** — remove non-PRD files from agent brief | Loop has drifted outside its brief |
233
+ | Stall (fragile) | **Agent-count adjustment** — reduce agents per wave by 50% | Too many agents editing the same fragile module |
234
+ | Stall (format) | **Stagnation break** — inject pre-edit grounding prompt | `stagnation_events` present; loop repeating format errors |
235
+ | Ceiling (test) | **Test-fix isolation** — spawn dedicated fix wave** | Pass-rate < 0.90 but diff near zero |
236
+
237
+ **Rollback caveat:** Present the exact command (`git reset --soft <wave_N-1_end_ref>`)
238
+ and require explicit user confirmation. Never execute it automatically.
239
+
240
+ ### 4.1 Recovery Report Format
241
+
242
+ ```
243
+ ## Convergence Report — Wave N
244
+
245
+ Verdict: INVESTIGATE
246
+ Diagnosis: Ceiling (pass-rate stuck at 0.82, 3 oscillating files)
247
+
248
+ Oscillating modules: src/lib/parser.ts, src/lib/tokenizer.ts, tests/parser.test.ts
249
+ Stagnation events: 2 (edit-format-friction in src/lib/parser.ts)
250
+
251
+ Recovery options:
252
+ [A] Scope reduction — remove src/lib/tokenizer.ts from agent brief (outside PRD scope)
253
+ [B] Agent-count adjustment — reduce from 6 to 3 agents next wave (shared fragile module)
254
+ [C] Rollback — git reset --soft <wave_3_end_ref> (destructive, requires confirmation)
255
+ [D] Continue anyway — override monitoring and proceed to next wave
256
+
257
+ Select option or type 'continue' to override.
258
+ ```
259
+
260
+ ---
261
+
262
+ ## Anti-Patterns
263
+
264
+ - **Treating STOP as a quality gate.** Convergence-monitoring answers "are we done making
265
+ progress?" not "is the code correct?" Full Gate quality checks are required separately
266
+ even when verdict is STOP.
267
+ - **Acting on low-confidence verdicts without the confidence note.** Below 3 waves of
268
+ history the signals are unreliable. The confidence gate in Phase 2 exists for this reason.
269
+ - **Conflating convergence with correctness.** A loop can converge to a broken state
270
+ (pass-rate plateau at 0.6). Always cross-check the pass-rate value, not just the trend.
271
+ - **Auto-applying rollback.** Phase 4 recovery options are presented to the user, never
272
+ auto-applied. Rollback is destructive and may discard valid work across parallel sessions
273
+ (PSA-003).
274
+ - **Confusing convergence-monitoring with /evolve.** evolve is retrospective (what patterns
275
+ should we learn from finished sessions?). convergence-monitoring is prospective (should the
276
+ current loop continue?).
277
+
278
+ ---
279
+
280
+ ## See Also
281
+
282
+ - `skills/wave-executor/wave-loop.md` — intended consumer (inter-wave hook integration pending in a follow-up issue)
283
+ - `skills/evolve/SKILL.md` — retrospective learning; complements but does not replace
284
+ - `skills/quality-gates/SKILL.md` — correctness gate; runs independently of convergence verdict
285
+ - `convergence-monitoring/SIGNALS.md` — signal computation reference + threshold rationale