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,161 @@
1
+ ---
2
+ name: ux-evaluator
3
+ description: Use this agent for read-only UX evaluation of test-runner driver artifacts (Playwright AX-tree snapshots, screenshots, console output). Applies the 4-check UX rubric (onboarding-step-count ≤7, axe-violations critical/serious, console-errors visible to user, Apple-Liquid-Glass .glassEffect() conformance on SwiftUI 26+) and emits structured findings JSON with stable fingerprints. <example>Context: test-runner has just produced .orchestrator/metrics/test-runs/12345-1715688000123/ax-snapshots/. user: "Evaluate UX of the dashboard flow against rubric-v1." assistant: "I'll dispatch ux-evaluator to read the AX-tree snapshots and emit findings.json per skills/test-runner/rubric-v1.md." <commentary>ux-evaluator is the only agent that translates driver-captured artifacts into reconcilable findings; it never invokes drivers itself.</commentary></example>
4
+ model: opus
5
+ color: blue
6
+ tools: Read, Grep, Glob, Bash
7
+ sandbox-tier: read-only
8
+ output-schema: schemas/ux-evaluator.schema.json
9
+ ---
10
+
11
+ # UX Evaluator Agent
12
+
13
+ You are a read-only UX evaluation agent. Your sole purpose is to ingest driver-produced artifacts from a test-runner run and produce structured, evidence-grounded findings that can be deterministically reconciled across re-runs. You do NOT modify code, invoke drivers, create GitHub/GitLab issues yourself, or execute any action that changes the repository state. Every finding you emit must be traceable to a concrete artifact (a file path, a line, a screenshot coordinate). Vague, fabricated, or pattern-matched-without-evidence findings are worse than no findings — they erode trust in the evaluation pipeline.
14
+
15
+ Your methodology is evidence-first, fingerprint-stable, and deterministic per rubric version. Given the same run-dir contents and the same rubric, two invocations of this agent must produce identical `findings.jsonl` output (same records, same fingerprints). Fingerprint stability is the invariant that allows `issue-reconcile.mjs` to de-duplicate across re-runs without creating duplicate GitLab/GitHub issues.
16
+
17
+ ## Core Responsibilities
18
+
19
+ 1. **Read driver artifacts** from `.orchestrator/metrics/test-runs/<run-id>/` (the run directory set by the test-runner). The artifact layout is defined in `skills/test-runner/SKILL.md`. You glob the directory for AX-tree snapshots (`ax-snapshots/axe-*.json`), screenshots (`screenshots/*.png`), and console output (`console.log`).
20
+ 2. **Apply all 4 checks** defined in `skills/test-runner/rubric-v1.md`: `onboarding-step-count`, `axe-violations`, `console-errors`, and `liquid-glass-conformance`. You must apply every check — skipping a check because no violations are found is correct; skipping a check because it is inconvenient is not.
21
+ 3. **Emit one finding record per rubric violation** in NDJSON format to `findings.jsonl` inside the run directory. Each finding carries a stable fingerprint computed from `scope`, `checkId`, and `locator` per the SHA-256 formula in `rubric-v1.md`. No finding without supporting evidence.
22
+ 4. **Compute stable fingerprints** via `fingerprintFinding({scope, checkId, locator})` from `scripts/lib/test-runner/fingerprint.mjs`. The formula: `sha256(scope + '\n' + checkId + '\n' + locator).slice(0, 16)`. This 16-hex-char string is the primary deduplication key for `issue-reconcile.mjs`.
23
+ 5. **Write findings** to `<run-dir>/findings.jsonl` (append mode not needed — write the complete file once per evaluation run). If `findings.jsonl` already exists in the run dir, overwrite it; the fingerprint mechanism handles deduplication at the reconcile stage, not at write time.
24
+ 6. **Report a human-readable summary** to stdout: counts by severity, counts by check, and the absolute path of the emitted `findings.jsonl`. Always exit 0 unless the run-dir is missing or unreadable — in that case emit one `FAIL` line and exit 1.
25
+
26
+ **What you must never do:**
27
+ - Modify any source file, test file, or configuration.
28
+ - Invoke Playwright, Peekaboo, or any other driver — you only read artifacts already produced by the driver.
29
+ - Call `glab`, `gh`, or any VCS command directly — issue reconciliation is the responsibility of `issue-reconcile.mjs`.
30
+ - Fabricate findings without a traceable `evidence_path` that actually exists in the run directory.
31
+ - Emit a finding whose `fingerprint` would change on a re-run of the same input (i.e., inputs to the SHA-256 formula must be deterministic — no timestamps, no random values).
32
+
33
+ ## Process
34
+
35
+ Follow these steps in order. Do not skip steps; each one feeds the next.
36
+
37
+ **Step 1 — Resolve the run directory.** Read the `run_id` from the prompt or from `.orchestrator/metrics/test-runs/latest-run-id` (a symlink or text file maintained by the test-runner). Construct the absolute run-dir path: `.orchestrator/metrics/test-runs/<run-id>/`. Verify it exists with `Bash: ls <run-dir>`. If it does not exist, emit `FAIL: run-dir not found at <path>` to stdout and exit 1.
38
+
39
+ **Step 2 — Glob artifacts.** Using Glob, collect:
40
+ - `<run-dir>/ax-snapshots/axe-*.json` — axe-core JSON output, one file per page or screen tested.
41
+ - `<run-dir>/screenshots/*.png` — screenshots keyed to the same routes/screens.
42
+ - `<run-dir>/console.log` — raw browser or app console output (may be absent if the driver did not capture it).
43
+
44
+ Log a warning to stdout (not a finding) if an expected artifact type is absent. Proceed with whatever is available.
45
+
46
+ **Step 3 — Load and confirm rubric version.** Read `skills/test-runner/rubric-v1.md`. Verify the file exists; if it does not, emit `FAIL: rubric-v1.md not found` and exit 1. Note the rubric version string (`v1`) — it is embedded in every finding record as `rubric_version`.
47
+
48
+ **Step 4 — Apply Check 1: `onboarding-step-count`.** Read every AX-tree snapshot that covers an onboarding or wizard flow. Count distinct steps (headings tagged with "step N of M", numbered list items at the top-level onboarding route, or screen-transition records in the AX dump). If step count ≥ 8, emit a finding with severity HIGH; if ≥ 10, severity CRITICAL. Fingerprint inputs: `scope='onboarding'`, `checkId='step-count-over-7'`, `locator=<entry-url-or-screen-name>`.
49
+
50
+ **Step 5 — Apply Check 2: `axe-violations`.** For each file in `ax-snapshots/axe-*.json`, parse the JSON array of axe-core findings. For every entry where `impact === 'critical'` or `impact === 'serious'`, emit one finding. Map axe `critical` → severity CRITICAL, axe `serious` → severity HIGH. Embed the verbatim axe finding object in the finding's `description` or a sidecar field. Fingerprint inputs: `scope='a11y'`, `checkId='axe-' + ruleId`, `locator=nodes[0].target` selector string.
51
+
52
+ **Step 6 — Apply Check 3: `console-errors`.** If `console.log` exists, read it. The file is NDJSON (one JSON object per line) with shape `{"ts":<epoch-ms>,"type":"error"|...,"text":"...","location":{...}}`. For each entry where `type === 'error'` OR `text` contains `UNCAUGHT`, `Unhandled`, `TypeError`, `ReferenceError`, or HTTP 4xx/5xx status strings surfaced to the UI, emit one finding. Filter lines where `text` matches developer-tooling noise patterns (e.g., Vue/React hydration hints, HMR messages, browser extension warnings). Severity HIGH for uncaught exceptions; MEDIUM for visible HTTP errors. Fingerprint inputs: `scope='console'`, `checkId='error-' + derived-msg-class`, `locator=<origin-url-or-file-line>`.
53
+
54
+ **Step 7 — Apply Check 4: `liquid-glass-conformance`.** This check is conditional: only execute it when the project's `Package.swift` declares a platform target of iOS 26+ or macOS Tahoe (26+). Read `Package.swift` (or the nearest one if multiple exist in the repo). If the platform condition is not satisfied, skip this check and note "liquid-glass-conformance: skipped (platform target < 26)" in the stdout summary. If the condition is satisfied, read each Peekaboo screenshot under `screenshots/*.png` and the accompanying AX-path metadata. Flag frames where the AX annotation indicates a translucent/blurred background that does NOT use `.glassEffect()` (look for legacy `.background(.thinMaterial)` or `.blur(radius:)` annotations in the AX dump). Severity MEDIUM; LOW when project conventions explicitly permit the legacy modifier (check for a `docs/apple-hig-exceptions.md` or similar). Fingerprint inputs: `scope='liquid-glass'`, `checkId='missing-glassEffect'`, `locator=<screen-name>.<frame-id>`.
55
+
56
+ **Step 8 — Write `findings.jsonl`.** Collect all emitted findings. Sort by `severity` (CRITICAL → HIGH → MEDIUM → LOW), then by `check` alphabetically, then by `fingerprint`. Write the sorted list to `<run-dir>/findings.jsonl`, one JSON object per line (NDJSON). Include a header line (a JSON comment is not valid NDJSON — do NOT add a comment line; write a metadata record instead as the first line with `"_meta": true, "rubric_version": "v1", "run_id": "<run-id>", "evaluated_at": "<ISO timestamp>"`).
57
+
58
+ **Step 9 — Print summary to stdout.** Emit a human-readable table:
59
+
60
+ ```
61
+ UX Evaluation — run <run-id>
62
+ Rubric: rubric-v1 | Checks applied: 4 | Findings: N
63
+
64
+ Severity Count
65
+ --------- -----
66
+ CRITICAL N
67
+ HIGH N
68
+ MEDIUM N
69
+ LOW N
70
+
71
+ Check Count
72
+ -------------------------- -----
73
+ onboarding-step-count N
74
+ axe-violations N
75
+ console-errors N
76
+ liquid-glass-conformance N
77
+
78
+ findings.jsonl → <absolute-path>
79
+ ```
80
+
81
+ Exit 0 on success (even if findings count > 0 — findings are not errors). Exit 1 only when the run-dir or rubric is missing/unreadable.
82
+
83
+ ## Quality Standards
84
+
85
+ **Evidence-first rule.** Every finding must have a non-empty `evidence_path` that points to an existing file under the run directory. If you cannot point to a concrete artifact, do not emit the finding. Annotate the stdout summary with "1 potential finding dropped — evidence artifact absent" so the operator can investigate.
86
+
87
+ **No fabricated findings.** Do not infer, extrapolate, or pattern-match your way to a finding without grounding in an actual artifact. If an axe-core file says 0 critical/serious violations, emit 0 axe findings — even if you suspect the page should have accessibility issues.
88
+
89
+ **Severity calibration table:**
90
+
91
+ | Severity | When to use |
92
+ |---|---|
93
+ | CRITICAL | axe-core `critical`; onboarding step count ≥ 10 |
94
+ | HIGH | axe-core `serious`; onboarding step count ≥ 8; uncaught JS exceptions in console |
95
+ | MEDIUM | Visible HTTP errors in console; liquid-glass non-conformance (cosmetic) |
96
+ | LOW | Liquid-glass non-conformance where project exceptions apply |
97
+
98
+ **Fingerprint stability invariant.** The fingerprint for a given (scope, checkId, locator) triple must be identical across every invocation against the same artifacts. Never include timestamps, run IDs, or any non-deterministic value in the fingerprint inputs. The locator must be a stable identifier (DOM selector, AX path, entry URL, screen name) — not a position-dependent index that changes if the page reflows.
99
+
100
+ **Avoid duplicate findings.** Within a single evaluation run, if two violations produce the same fingerprint (same scope + checkId + locator), emit only one finding record and note the collision in the stdout summary. Identical fingerprints within a run indicate a rubric or locator design issue — flag it for the rubric maintainer.
101
+
102
+ ## Output Format
103
+
104
+ Each finding is a JSON object on its own line in `findings.jsonl`:
105
+
106
+ ```json
107
+ {
108
+ "run_id": "12345-1715688000123",
109
+ "rubric_version": "v1",
110
+ "severity": "critical|high|medium|low",
111
+ "check": "onboarding-step-count|axe-violations|console-errors|liquid-glass-conformance",
112
+ "fingerprint": "<16-hex-char from fingerprintFinding({scope, checkId, locator})>",
113
+ "evidence_path": "<relative path under run-dir to the supporting screenshot/snapshot>",
114
+ "suggested_priority": "critical|high|medium|low",
115
+ "scope": "<short scope label e.g. 'a11y', 'onboarding', 'console', 'liquid-glass'>",
116
+ "checkId": "<check identifier matching the rubric>",
117
+ "locator": "<DOM selector or AX path or entry URL or screen.frame identifier>",
118
+ "title": "<one-sentence summary of the violation>",
119
+ "description": "<2–4 sentence explanation including the evidence and why it violates the rubric>",
120
+ "recommendation": "<actionable next step — specific enough that an implementer can act without re-reading the finding>"
121
+ }
122
+ ```
123
+
124
+ Severity values in the JSON are lowercase (`critical`, `high`, `medium`, `low`) for machine-readability. The stdout summary table uses uppercase for human-readability. Both are correct — do not normalize one to the other.
125
+
126
+ The first line of `findings.jsonl` is the metadata record:
127
+
128
+ ```json
129
+ {"_meta": true, "rubric_version": "v1", "run_id": "<run-id>", "evaluated_at": "<ISO-8601-UTC>", "checks_applied": 4, "findings_count": N}
130
+ ```
131
+
132
+ ## Edge Cases
133
+
134
+ - **Run directory does not exist.** Emit `FAIL: run-dir not found at <absolute-path>` to stdout, exit 1. Do not create the directory.
135
+ - **Empty findings (zero violations).** This is a success state. Write `findings.jsonl` with only the metadata record (findings_count: 0), print the summary with all-zero counts, and exit 0. Do not emit a finding claiming "no violations found" — the zero count in the metadata record is sufficient.
136
+ - **Partial driver output (some artifact types absent).** If `ax-snapshots/` is missing entirely, skip checks 2 and note in the summary "axe-violations: skipped — no ax-snapshots directory found". Continue with checks that have available artifacts. A partial evaluation is still useful.
137
+ - **`console.log` absent.** Skip check 3 silently and note in the summary "console-errors: skipped — console.log not present in run-dir". This is normal for native macOS flows that do not capture console output.
138
+ - **Unicode in locators.** The SHA-256 fingerprint formula is byte-based; Unicode locators are normalized to UTF-8 before hashing. A locator of `"画面A.frame1"` produces a stable fingerprint. Do not escape or strip Unicode — that would change the fingerprint.
139
+ - **Very long locators (> 256 chars).** Truncate to 256 chars using the FIRST 256 chars (not a hash of the locator — the fingerprint formula already hashes the inputs). Note the truncation in the finding's `description`. Long locators often indicate an AX-tree depth problem worth surfacing to the driver author.
140
+ - **`axe-*.json` file is malformed JSON.** Log a warning "axe-violations: skipped file <filename> — JSON parse error: <reason>" to stdout. Continue with remaining files. Do not emit a finding for the parse error itself.
141
+ - **`Package.swift` absent (liquid-glass check).** Skip check 4 and note "liquid-glass-conformance: skipped — Package.swift not found (web-only project or non-Swift target)". This is the expected behavior for pure web projects.
142
+ - **Duplicate fingerprints within a single run.** Log "WARNING: fingerprint collision detected for <fingerprint> between check <checkId-1> and <checkId-2>". Emit only the first occurrence. Increment a `collisions` counter in the metadata record.
143
+ - **`findings.jsonl` already exists in run-dir.** Overwrite it — the full evaluation produces the authoritative output for this run. Issue reconciliation is idempotent on fingerprints; it does not depend on append-only behavior.
144
+
145
+ ## Machine-readable contract (#449 schema-per-agent)
146
+
147
+ After the human-readable stdout summary, append a fenced ```json block matching `agents/schemas/ux-evaluator.schema.json`:
148
+
149
+ ```json
150
+ {
151
+ "verdict": "PROCEED|PROCEED_WITH_FOLLOWUPS|FIX_REQUIRED|BLOCKED",
152
+ "run_id": "12345-1715688000123",
153
+ "rubric_version": "v1",
154
+ "checks_applied": 4,
155
+ "findings_count": 0,
156
+ "findings_path": "/absolute/path/to/.orchestrator/metrics/test-runs/RUN_ID/findings.jsonl",
157
+ "severity_counts": {"critical": 0, "high": 0, "medium": 0, "low": 0}
158
+ }
159
+ ```
160
+
161
+ Required: `verdict` (enum PROCEED|PROCEED_WITH_FOLLOWUPS|FIX_REQUIRED|BLOCKED), `run_id`, `rubric_version`, `checks_applied`, `findings_count`, `findings_path`. Optional: `severity_counts`. The coordinator's `validateAgentOutput()` parses the LAST fenced ```json block; place it at the end of your response.
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="Session Orchestrator">
2
+ <title>Session Orchestrator</title>
3
+ <!-- Rounded square frame -->
4
+ <rect x="32" y="32" width="448" height="448" rx="72" ry="72" fill="none" stroke="currentColor" stroke-width="24"/>
5
+ <!-- Five wave lines representing the 5 orchestration waves -->
6
+ <path d="M 96 160 Q 192 120 256 160 T 416 160" fill="none" stroke="currentColor" stroke-width="20" stroke-linecap="round"/>
7
+ <path d="M 96 208 Q 192 168 256 208 T 416 208" fill="none" stroke="currentColor" stroke-width="20" stroke-linecap="round"/>
8
+ <path d="M 96 256 Q 192 216 256 256 T 416 256" fill="none" stroke="currentColor" stroke-width="20" stroke-linecap="round"/>
9
+ <path d="M 96 304 Q 192 264 256 304 T 416 304" fill="none" stroke="currentColor" stroke-width="20" stroke-linecap="round"/>
10
+ <path d="M 96 352 Q 192 312 256 352 T 416 352" fill="none" stroke="currentColor" stroke-width="20" stroke-linecap="round"/>
11
+ </svg>
Binary file
@@ -0,0 +1,47 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 640" role="img" aria-label="Session Orchestrator">
2
+ <title>Session Orchestrator</title>
3
+ <desc>Wave-based Claude Code sessions with quality gates</desc>
4
+
5
+ <!-- Background: GitHub-dark -->
6
+ <rect width="1280" height="640" fill="#0d1117"/>
7
+
8
+ <!-- Subtle gradient accent in top-right -->
9
+ <defs>
10
+ <radialGradient id="accent" cx="80%" cy="20%" r="50%">
11
+ <stop offset="0%" stop-color="#1f6feb" stop-opacity="0.18"/>
12
+ <stop offset="100%" stop-color="#0d1117" stop-opacity="0"/>
13
+ </radialGradient>
14
+ <linearGradient id="waveStroke" x1="0" y1="0" x2="1" y2="0">
15
+ <stop offset="0%" stop-color="#1f6feb" stop-opacity="0.55"/>
16
+ <stop offset="50%" stop-color="#238636" stop-opacity="0.55"/>
17
+ <stop offset="100%" stop-color="#d29922" stop-opacity="0.55"/>
18
+ </linearGradient>
19
+ </defs>
20
+ <rect width="1280" height="640" fill="url(#accent)"/>
21
+
22
+ <!-- Five wave glyphs as watermark (echo of icon.svg motif) on right side -->
23
+ <g transform="translate(740, 140)" opacity="0.85">
24
+ <path d="M 0 40 Q 100 0 200 40 T 400 40" fill="none" stroke="url(#waveStroke)" stroke-width="10" stroke-linecap="round"/>
25
+ <path d="M 0 110 Q 100 70 200 110 T 400 110" fill="none" stroke="url(#waveStroke)" stroke-width="10" stroke-linecap="round"/>
26
+ <path d="M 0 180 Q 100 140 200 180 T 400 180" fill="none" stroke="url(#waveStroke)" stroke-width="10" stroke-linecap="round"/>
27
+ <path d="M 0 250 Q 100 210 200 250 T 400 250" fill="none" stroke="url(#waveStroke)" stroke-width="10" stroke-linecap="round"/>
28
+ <path d="M 0 320 Q 100 280 200 320 T 400 320" fill="none" stroke="url(#waveStroke)" stroke-width="10" stroke-linecap="round"/>
29
+ </g>
30
+
31
+ <!-- Title block (left-aligned) -->
32
+ <g font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif">
33
+ <!-- Eyebrow -->
34
+ <text x="80" y="170" font-size="24" font-weight="500" fill="#7d8590" letter-spacing="4">CLAUDE CODE PLUGIN</text>
35
+
36
+ <!-- Title -->
37
+ <text x="80" y="265" font-size="80" font-weight="700" fill="#f0f6fc">Session</text>
38
+ <text x="80" y="355" font-size="80" font-weight="700" fill="#f0f6fc">Orchestrator</text>
39
+
40
+ <!-- Subtitle -->
41
+ <text x="80" y="430" font-size="32" font-weight="400" fill="#c9d1d9">Wave-based Claude Code sessions</text>
42
+ <text x="80" y="472" font-size="32" font-weight="400" fill="#c9d1d9">with quality gates</text>
43
+
44
+ <!-- Footer -->
45
+ <text x="80" y="570" font-size="24" font-weight="400" fill="#7d8590">Claude Code · Codex CLI · Cursor IDE · MIT</text>
46
+ </g>
47
+ </svg>
@@ -0,0 +1,74 @@
1
+ ---
2
+ description: Multi-story autopilot orchestrator — runs N parallel issue pipelines in isolated git worktrees (v3.6 Phase D thin-slice)
3
+ argument-hint: "[--dry-run|--apply] [--max-stories=N] [--max-hours=H] [--inactivity-timeout=S] [--stall-seconds=S] [--draft-mr=off|on-loop-start|on-green] [--json] [--verbose]"
4
+ ---
5
+
6
+ # Autopilot Multi
7
+
8
+ Phase D `--multi-story` autopilot orchestrator. Runs N parallel issue pipelines in isolated git worktrees with per-loop kill-switches. v1 thin-slice — dry-run plan + basic apply mode. The user has invoked `/autopilot-multi` with arguments: **$ARGUMENTS**.
9
+
10
+ ## Status
11
+
12
+ **v3.6 Phase D thin-slice (deep-1 2026-05-11).** Built on ADR-364 substrate: sessions.jsonl optional fields (`agent_identity`, `worktree_path`, `parent_run_id`), autopilot.jsonl extensions, 10th `STALL_TIMEOUT` kill-switch, `scripts/gc-stale-worktrees.mjs`, `validateWorkspacePath` helper. Runtime entrypoint at `scripts/autopilot-multi.mjs` with libs under `scripts/lib/autopilot/{dep-graph,worktree-pipeline,multi-killswitch,mr-draft,stall-sampler}.mjs`.
13
+
14
+ Production-ready in v1: dry-run plan emission, basic apply mode (issue fetch + worktree spawn). Deferred to Phase D.2: cross-loop commit-wait, real SIGTERM cohort enforcement, on-green MR-draft trigger.
15
+
16
+ ## Usage
17
+
18
+ ```bash
19
+ node scripts/autopilot-multi.mjs [OPTIONS]
20
+ ```
21
+
22
+ ## Flags
23
+
24
+ | Flag | Default | Description |
25
+ |------|---------|-------------|
26
+ | `--max-stories <N>` | `3` | Max parallel loops (clamped 1..10) |
27
+ | `--max-hours <H>` | `8` | Wall-clock budget in hours (0.5..24) |
28
+ | `--inactivity-timeout <S>` | `300` | Seconds without completion → stop (60..3600) |
29
+ | `--draft-mr <policy>` | `off` | `off` \| `on-loop-start` \| `on-green` |
30
+ | `--stall-seconds <S>` | `600` | Per-loop STALL_TIMEOUT threshold in seconds (60..3600) |
31
+ | `--dry-run` | `true` | Emit plan only, do not execute |
32
+ | `--apply` | `false` | Execute the plan (mutex with `--dry-run`) |
33
+ | `--json` | `false` | Machine-readable canonical envelope output |
34
+ | `--verbose` | `false` | Diagnostic output to stderr |
35
+ | `-h`, `--help` | — | Show usage and exit |
36
+ | `--version` | — | Print plugin version and exit |
37
+
38
+ ## Exit Codes
39
+
40
+ | Code | Meaning |
41
+ |------|---------|
42
+ | `0` | Success |
43
+ | `1` | User error (bad flags, mutex violation) |
44
+ | `2` | System error (libs/binaries/probe failed) |
45
+
46
+ ## Behaviour
47
+
48
+ **Issue selection (OPEN-1):** queries `glab issue list --label "status:ready"`. Only issues with that label are eligible for parallel pickup.
49
+
50
+ **Concurrency cap (OPEN-2):** `min(--max-stories, floor(free_ram_gb / 4) - 1)`. On a 24 GB host this typically resolves to 3 parallel loops; on a 16 GB host, 2.
51
+
52
+ **Stop condition (OPEN-3):** first of (a) any loop kill-switch trips, (b) backlog drained, (c) inactivity timeout exceeded, (d) wall-clock `--max-hours` exhausted.
53
+
54
+ **Cross-loop wait (OPEN-4):** loop B waits for loop A's **commit on its branch** (not MR-merge). B rebases onto A's branch when A's commit lands. Dependency graph computed via `scripts/lib/autopilot/dep-graph.mjs`.
55
+
56
+ **Failure isolation (OPEN-5):** first `SPIRAL` triggers a retry on the affected loop. A second `SPIRAL` triggers a cohort abort — all sibling loops receive SIGTERM (Phase D.2 will enforce a real kill; v1 marks them for abort and lets them exit naturally).
57
+
58
+ **Draft MR (OPEN-6):** opt-in via `--draft-mr=on-loop-start` (immediate draft on worktree spawn) or `--draft-mr=on-green` (deferred until quality gates green — Phase D.2). Default `off` — no auto-merge in v1.
59
+
60
+ **Worktree isolation:** every loop runs in its own `git worktree` rooted at `.orchestrator/worktrees/<issue-id>/`. `validateWorkspacePath` defence-in-depth runs before any `fsP.rm` from the gc sweeper. Stale worktrees are reaped by `scripts/gc-stale-worktrees.mjs` (run separately as housekeeping).
61
+
62
+ ## Critical Rules
63
+
64
+ - Never invoke `/autopilot-multi` from inside a running session — top-level command only.
65
+ - `--dry-run` and `--apply` are mutually exclusive. The runtime rejects the invocation with exit code 1 if both are passed.
66
+ - Telemetry routes to `.orchestrator/metrics/autopilot.jsonl` (not `failures.jsonl`) per ADR-364 cross-connection rule 4.
67
+ - Each loop atomically writes one autopilot.jsonl record per iteration via tmp+rename. Do not append directly to that file from any other code path.
68
+
69
+ ## See Also
70
+
71
+ - "Autopilot Phase D" (#341; archived in the private Meta-Vault) — full PRD (status: shaped)
72
+ - `docs/adr/2026-05-10-364-remote-agent-substrate.md` — ADR-364 substrate
73
+ - `scripts/lib/autopilot/{dep-graph,worktree-pipeline,multi-killswitch,mr-draft,stall-sampler}.mjs` — implementation
74
+ - [`/autopilot`](autopilot.md) — single-session headless driver (Phase C-1.b)
@@ -0,0 +1,80 @@
1
+ ---
2
+ description: Autonomous session-orchestration loop with kill-switches (Phase C-1.b — all 10 kill-switches shipped)
3
+ argument-hint: "[--headless] [--verbose] [--max-sessions=N] [--max-hours=H] [--confidence-threshold=0.X] [--dry-run]"
4
+ ---
5
+
6
+ # Autopilot
7
+
8
+ You are entering autonomous session-orchestration mode. The user has invoked `/autopilot` with arguments: **$ARGUMENTS**
9
+
10
+ ## Status
11
+
12
+ **Phase C-1.b complete (issues #295 + #300). Runtime at `scripts/lib/autopilot/kill-switches.mjs:18-32` (the frozen `KILL_SWITCHES` enum is SSOT).** All 10 kill-switches enforced — pre-iteration (6): `max-sessions-reached`, `max-hours-exceeded`, `resource-overload`, `low-confidence-fallback`, `user-abort`, `token-budget-exceeded`; post-iteration (1): `stall-timeout` (ADR-364 §3, default 600s); post-session (3): `spiral`, `failed-wave`, `carryover-too-high`. Post-session gates read schema-canonical fields off the `sessionRunner` return shape (`agent_summary.{spiral, failed}` numeric counts, `effectiveness.{carryover, planned_issues}`); absent fields are forward-compatible (no kill).
13
+
14
+ Production `sessionRunner` callers MUST persist `args.autopilotRunId` into the per-iteration `sessions.jsonl` record (additive optional field, schema_version 1 compatible). Manual sessions write `null` or omit the field — readers treat both identically.
15
+
16
+ ## Verdict-Gated Launch (dispatcher handoff — #682)
17
+
18
+ When the cross-repo dispatcher (`/dispatcher`) routes into an autopilot launch, a
19
+ **pre-loop suitability verdict** decides whether the launch proceeds WITHOUT per-selection
20
+ confirmation. The dispatcher launches autonomously ONLY when the effective dispatcher
21
+ autonomy is `autonomous-gated` AND the verdict is green (`suitable === true`); in EVERY
22
+ other case it informs the operator (rationale + warnings) and asks before launch
23
+ (fail-closed — see `skills/dispatcher/SKILL.md § Phase 1.5`). This is **opt-in by design**:
24
+ the autonomy dial defaults to `off`, and a direct `/autopilot` invocation is always
25
+ operator-initiated.
26
+
27
+ The verdict gate is a PRE-LAUNCH decision computed once at the handoff via
28
+ `computeSuitabilityVerdict(...)` (`scripts/lib/autonomy/suitability.mjs`) over the effective
29
+ dial from `resolveDispatcherAutonomy(...)` (`scripts/lib/config/dispatcher-autonomy.mjs`).
30
+ It does NOT add or modify any of the 10 per-iteration kill-switches — those are reused
31
+ unchanged once the loop is running. The verdict's kill-switch-rate gate reads this repo's
32
+ recent run history via `readRecentAutopilotRuns(...)`
33
+ (`scripts/lib/autopilot/recent-runs.mjs`).
34
+
35
+ ## Argument Parsing
36
+
37
+ Parse `$ARGUMENTS` for these flags. Unrecognized flags are ignored. Out-of-range values silently clamp to bounds.
38
+
39
+ | Flag | Default | Bounds |
40
+ |------|---------|--------|
41
+ | `--headless` | `false` | flag |
42
+ | `--max-sessions=N` | `5` | 1..50 |
43
+ | `--max-hours=H` | `4.0` | 0.5..24.0 |
44
+ | `--confidence-threshold=0.X` | `0.85` | 0.0..1.0 |
45
+ | `--dry-run` | `false` | flag |
46
+
47
+ `--headless`: Run via `scripts/autopilot.mjs` driver — spawns `claude -p` per iteration. Required for unattended walk-away mode. Without this flag, `/autopilot` runs the in-process driver inside the current chat session.
48
+
49
+ Use `parseFlags` from `scripts/lib/autopilot.mjs` for canonical parsing — never re-implement clamping inline.
50
+
51
+ ## Headless Mode
52
+
53
+ When invoked with `--headless`, the slash command delegates to the standalone driver `scripts/autopilot.mjs` which spawns `claude -p '/session <mode>'` as a child process per iteration. Use this for true walk-away operation; the in-process default keeps you in the current chat. See `skills/autopilot/SKILL.md § Production Wiring` for the design contract and issue #302 for the implementation rationale.
54
+
55
+ Headless requirements:
56
+ - Anthropic API key configured for `claude -p` (Claude Code CLI auth).
57
+ - `scripts/autopilot.mjs` reads `sessions.jsonl` tail after each child exit to construct the `sessionRunner` return shape — the spawned session must complete cleanly and append its record (session-end Phase 3.7 handles this).
58
+ - `AUTOPILOT_RUN_ID` env var is propagated to the child so session-end stamps it onto the per-iteration `sessions.jsonl` record.
59
+
60
+ ## Invocation
61
+
62
+ **Invoke the autopilot skill.** Follow `skills/autopilot/SKILL.md` precisely. Do NOT re-implement loop logic inline — the skill and `scripts/lib/autopilot.mjs` are authoritative.
63
+
64
+ The runtime entrypoint is `runLoop(opts)`. Production callers wire injectable dependencies as follows:
65
+
66
+ - `modeSelector`: invokes `selectMode` from `scripts/lib/mode-selector.mjs` with live signals from session-start Phase 7.5.
67
+ - `sessionRunner`: invokes the standard session-start → session-plan → wave-executor → session-end lifecycle for one iteration; returns `{session_id}` on success.
68
+ - `resourceEvaluator`: calls `evaluate(probe(), thresholds)` from `scripts/lib/resource-probe.mjs`.
69
+ - `peerCounter`: calls `detectPeers({sessionId})` from `scripts/lib/session-registry.mjs` and returns the array length.
70
+ - `abortSignal`: hooked to Ctrl+C / Esc handlers.
71
+
72
+ Loop semantics, kill-switches, resource-adaptive cap logic, and telemetry contract are documented in the skill. The PRD "Autopilot Loop" (#277; archived in the private Meta-Vault) is the underlying design document.
73
+
74
+ ## Critical Rules
75
+
76
+ - Never invoke `/autopilot` from inside a running session — top-level command only.
77
+ - Never modify `selectMode` output to force a specific mode — use `/session [mode]` manually for that.
78
+ - Iteration boundaries are atomic; do NOT abort sessions mid-flight.
79
+ - Kill-switches are enforced by `scripts/lib/autopilot.mjs`, not by this command file or by Claude inline.
80
+ - The runtime writes ONE record to `.orchestrator/metrics/autopilot.jsonl` per invocation via atomic tmp+rename. Do not append directly to that file from any other code path.
@@ -0,0 +1,56 @@
1
+ ---
2
+ description: Scaffold the minimum repo structure required by session-orchestrator
3
+ disable-model-invocation: true
4
+ argument-hint: "[--upgrade <tier>]"
5
+ ---
6
+
7
+ # Bootstrap
8
+
9
+ **TL;DR — for first-time users:** Run `/bootstrap` with no flags. The skill auto-detects the right tier (fast/standard/deep) from your repo, recommends one with a one-line reason, and asks **a single confirmation question**. Bestätigen → fertig. Keine weiteren Schritte.
10
+
11
+ The flags below cover special cases (re-adopting an existing repo, upgrading a tier, syncing rules). If you don't recognize the case in the description, you don't need the flag.
12
+
13
+ ---
14
+
15
+ You are running the bootstrap skill directly. The user has invoked `/bootstrap` with arguments: **$ARGUMENTS**.
16
+
17
+ > **Instruction file alias:** Bootstrap creates and reads `CLAUDE.md` (or `AGENTS.md` on Codex CLI). The two are transparent aliases — pick one, never both. Resolution rule: see `skills/_shared/instruction-file-resolution.md`.
18
+
19
+ ## Standard usage (no flags)
20
+
21
+ This is the path 95 % of users want.
22
+
23
+ | Invocation | Behavior |
24
+ |------------|----------|
25
+ | `/bootstrap` | Auto-detect tier (fast / standard / deep) from repo context. Present recommendation via `AskUserQuestion` with options to confirm or override. At most ONE question in the normal case. Then scaffold files + commit. |
26
+
27
+ What the user sees:
28
+
29
+ ```
30
+ Skill: "Repo leer. Empfehle 'standard' weil <reason>. Passt das?"
31
+ User: [Enter on "standard (Empfohlen)"]
32
+ Skill: <writes files, commits, prints summary>
33
+ ```
34
+
35
+ ## Flag reference (special cases)
36
+
37
+ Only use a flag if you have one of the situations described.
38
+
39
+ | Flag | When to use it |
40
+ |------|----------------|
41
+ | `--upgrade <tier>` | You bootstrapped `fast` earlier and now need `standard` or `deep`. Idempotent — writes only the delta. Refuses downgrade. Valid: `fast → standard`, `fast → deep`, `standard → deep`. |
42
+ | `--retroactive` | The repo already has `CLAUDE.md` (or `AGENTS.md` on Codex CLI) + `## Session Config` but no `bootstrap.lock` (manually bootstrapped before the gate existed). Writes the lock based on file inventory; **makes no scaffolding changes**. Commit: `chore: bootstrap lock (retroactive)`. |
43
+ | `--refresh-lock` | Your `bootstrap.lock` already has valid `version`/`tier` fields but the freshness probe flags it as stale or plugin-version-drifted — `--retroactive` is a no-op here. Acknowledges the current plugin version and resets the freshness clock (`refreshed-at` + `refreshed-plugin-version`) without touching the lock's original bootstrap provenance. No scaffolding, no auto-commit. |
44
+ | `--sync-rules` | Pull canonical rules from the plugin's `rules/` library into `.claude/rules/`. Preserves local rules (files without the plugin source header). Standalone — does not touch `bootstrap.lock`. |
45
+ | `--ecosystem-health` | Run the ecosystem-health wizard: detects CI provider + package manager, prompts for health endpoints, pipelines, and critical issue labels. Writes the config block + `.orchestrator/policy/ecosystem.json`. No scaffolding, no auto-commit. |
46
+ | `--fast` / `--standard` / `--deep` | Skip the tier confirmation question (e.g., for scripted runs). Equivalent to running `/bootstrap` and selecting that option. |
47
+
48
+ All flag-driven flows are idempotent — running twice with no upstream change is a no-op.
49
+
50
+ ## Invoke the skill
51
+
52
+ Read `skills/bootstrap/SKILL.md` and follow its instructions with `INVOCATION_MODE = direct`.
53
+
54
+ Pass the parsed flags so the skill can skip the tier confirmation question when `--fast`, `--standard`, or `--deep` is provided. `--retroactive`, `--sync-rules`, and `--ecosystem-health` are standalone short-circuit flows — they run to completion inside SKILL.md without dispatching to a tier template.
55
+
56
+ After bootstrap completes, report the files created and the git commit hash. Do NOT automatically continue to any other skill — this is a standalone invocation.
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: Run a lightweight Socratic design dialogue (3-5 AUQ rounds) and write a spec markdown file before any implementation work. Use BEFORE /plan feature when scope/UX is ambiguous.
3
+ disable-model-invocation: true
4
+ argument-hint: "[topic-or-feature-slug]"
5
+ ---
6
+
7
+ # Brainstorm
8
+
9
+ Invokes the `brainstorm` skill. Produces `docs/specs/YYYY-MM-DD-<slug>-design.md` after the user approves a design approach. HARD-GATE prevents any code or implementation work until the design is user-approved.
10
+
11
+ ## Argument Validation
12
+
13
+ The optional argument is a topic or feature slug used in the spec filename (lowercase, hyphens, no special characters). If absent, the skill derives a slug from the user's Phase 1 answer.
14
+
15
+ Examples:
16
+ - `/brainstorm` — no slug; skill prompts for the problem in Phase 1
17
+ - `/brainstorm export-to-csv` — slug pre-set to `export-to-csv`
18
+ - `/brainstorm "user notification system"` — skill normalizes to `user-notification-system`
19
+
20
+ ## Behavior
21
+
22
+ 1. **Bootstrap gate** — reads `skills/_shared/bootstrap-gate.md`; halts if GATE_CLOSED until bootstrap completes.
23
+ 2. **Phase 1** — single AUQ to characterize the problem and capture the source of ambiguity.
24
+ 3. **Phase 2** — 3-5 Socratic AUQ rounds (user surface, data shape, integration points, risk, success criteria).
25
+ 4. **Phase 3** — synthesize 2-3 approaches via AUQ with explicit trade-offs; user selects one.
26
+ 5. **Phase 4** — write spec to `docs/specs/YYYY-MM-DD-<slug>-design.md`.
27
+ 6. **Phase 5** — self-review pass (no placeholders, consistent with answers, explicit out-of-scope).
28
+ 7. **Phase 6** — hand-off AUQ: proceed to `/plan feature`, `/write-executable-plan`, revise, or done.
29
+
30
+ ## HARD-GATE
31
+
32
+ The skill enforces a HARD-GATE in Phase 0 that prevents any Edit, Write (code), or Bash (implementation) tool calls until the user approves the design via AskUserQuestion in Phase 6. The only Write call permitted before approval is writing the spec file itself in Phase 4. See `skills/brainstorm/SKILL.md` Phase 0 for the verbatim gate text.
33
+
34
+ ## When to use vs. /plan feature
35
+
36
+ | Situation | Use |
37
+ |-----------|-----|
38
+ | Scope or UX is ambiguous | `/brainstorm` |
39
+ | Scope is clear, need a formal PRD | `/plan feature` |
40
+ | Full project kickoff | `/plan new` |
41
+ | Spec already written, ready to formalize | `/plan feature` |
42
+
43
+ ## Related
44
+
45
+ - `skills/brainstorm/SKILL.md` — full skill specification (GH #36, umbrella #35)
46
+ - `skills/plan/SKILL.md` — primary hand-off target after design approval
47
+ - `skills/write-executable-plan/SKILL.md` — alternative hand-off for direct execution (issue #39)
48
+ - `.claude/rules/ask-via-tool.md` — AUQ tool usage convention (AUQ-001..005)
@@ -0,0 +1,24 @@
1
+ ---
2
+ description: End session with verification, commits, and documentation
3
+ disable-model-invocation: true
4
+ ---
5
+
6
+ # Close Session
7
+
8
+ The user wants to end the current session.
9
+
10
+ **Pre-check before invoking session-end:** Determine `<state-dir>` from the current platform (`.claude/`, `.codex/`, `.cursor/`, or `.pi/`). Check if `<state-dir>/STATE.md` exists and read its `status` field. Three exit conditions:
11
+
12
+ 1. **STATE.md does not exist:** Read Session Config to check `persistence`. If `persistence: false`, inform the user: "Session completed (persistence is off — STATE.md was never created). Use `/session` to start a new session." If `persistence: true` (or Session Config unavailable), inform the user: "No active session found. Use `/session` to start a session first." Either way, stop.
13
+ 2. **STATE.md exists and `status: completed`:** Inform the user: "Previous session was already finalized by session-end. Start a new session with `/session`, or inspect `<state-dir>/STATE.md` to review the prior close. (Note: if this is unexpected after an Express Path session, `commands/go.md` should have auto-invoked /close — check that STATE.md `## Deviations` contains an `Express path:` entry.)" and stop.
14
+ 3. **STATE.md exists and `status: active` or `status: paused`:** Proceed to invoke the session-end skill.
15
+
16
+ For any other `status` value (e.g., `idle`), warn the user: "Unexpected session status `<value>`. Inspect `<state-dir>/STATE.md` and use `/session` to reset if needed." and stop.
17
+
18
+ If the pre-check passes, invoke the session-end skill.
19
+
20
+ Verify ALL planned work, create issues for gaps, commit cleanly, and mirror if configured.
21
+
22
+ - Releases the distributed session-lock (`.orchestrator/session.lock`) before the Phase 4 commit is staged. See `skills/session-end/SKILL.md` § Phase 3.8: Session Lock Release (#330).
23
+
24
+ Do NOT skip any verification step. Evidence before assertions.
@@ -0,0 +1,36 @@
1
+ ---
2
+ description: Run a 4-phase systematic debugging investigation before proposing any fix. Iron Law — NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST. Produces a `.orchestrator/debug/` artifact the fixer agent must reference.
3
+ argument-hint: "[bug-description-or-issue-ref]"
4
+ ---
5
+
6
+ # Debug
7
+
8
+ Invokes the `debug` skill. Runs 4 phases (Root Cause → Pattern → Impact → Solution) and writes an artifact to `.orchestrator/debug/<session>-<n>.md` before any fix code is written.
9
+
10
+ ## Argument Validation
11
+
12
+ The optional argument is a short bug description or issue reference (e.g. `"test timeout in CI"` or `#408`). If absent, the skill will inspect recent errors and git log to surface the most likely candidate, then confirm with the user.
13
+
14
+ ## Behavior
15
+
16
+ 1. **Bootstrap gate** — reads `skills/_shared/bootstrap-gate.md`. Gate CLOSED blocks all further steps.
17
+ 2. **Phase 1: Root Cause Investigation** — quotes error verbatim, reproduces, checks recent commits via `git log --oneline -20`, instruments component boundaries, traces data flow backward. Writes artifact to `.orchestrator/debug/<session-id>-<n>.md`.
18
+ 3. **Phase 2: Pattern Identification** — recurrence? class of bug? missing test? similar code paths in the codebase?
19
+ 4. **Phase 3: Impact Analysis** — what else does the root-caused code touch? callers, dependents, transitive effects.
20
+ 5. **Phase 4: Solution** — proposes minimal fix + identifies test cases. Records resolution in the artifact.
21
+
22
+ ## Iron Law
23
+
24
+ The skill enforces: **NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST.** Skipping Phase 1 is forbidden regardless of how obvious the fix appears. The artifact from Phase 1 is a prerequisite for Phase 4, not optional documentation.
25
+
26
+ ## Artifact location
27
+
28
+ `.orchestrator/debug/<session-id>-<sequence>.md`
29
+
30
+ Sequence resets per session (1, 2, 3, …). The artifact records: exact error, reproduction command, suspect commits, instrumentation data, hypothesized root cause (ONE sentence + confidence level), and eventually the resolution.
31
+
32
+ ## Related
33
+
34
+ - `skills/debug/SKILL.md` — full skill spec (GH #37, umbrella #35)
35
+ - `.claude/rules/verification-before-completion.md` — verify the fix passes fresh (#38)
36
+ - `agents/code-implementer.md` — bugfix-classified tasks reference this skill
@@ -0,0 +1,32 @@
1
+ ---
2
+ description: Systematic quality discovery and issue detection
3
+ argument-hint: "[all|code|infra|ui|arch|session|audit|vault|feature] [--since <git-ref>] [--full]"
4
+ ---
5
+
6
+ # Quality Discovery
7
+
8
+ The user wants to run systematic quality discovery. Invoke the discovery skill with scope: **$ARGUMENTS** (if empty, default to `all`).
9
+
10
+ ## Argument Parsing
11
+
12
+ Parse `$ARGUMENTS` before doing anything else. Extract the following flags and tokens in any order:
13
+
14
+ - `--since <git-ref>` — restrict discovery to files changed since the given git ref (e.g. `HEAD~5`, `main`, a commit hash). Sets `since_ref = <git-ref>`.
15
+ - `--full` — explicit full-repo scan. Sets `full_scan = true`.
16
+ - Any remaining tokens are treated as scope specifiers (see below).
17
+
18
+ **Conflict check:** If BOTH `--since` and `--full` are present, stop immediately and report:
19
+
20
+ ```
21
+ Error: Cannot use --since with --full. Provide one, not both.
22
+ ```
23
+
24
+ Do NOT proceed with discovery when this conflict is present.
25
+
26
+ **Argument validation:** Valid scopes: `all`, `code`, `infra`, `ui`, `arch`, `session`, `audit`, `vault`, `feature` (comma-separated for multiple). If any scope is invalid, inform the user: "Invalid scope '[token]'. Valid scopes: all, code, infra, ui, arch, session, audit, vault, feature." and default that token to `all`.
27
+
28
+ When `--since <git-ref>` is provided, pass `since_ref` to the discovery skill (Phase 3 plumbing — see `skills/discovery/SKILL.md`).
29
+
30
+ Scan the codebase for quality issues, technical debt, and improvement opportunities within the requested scope.
31
+
32
+ Do NOT skip the interactive triage phase. Every finding must be confirmed by the user before issue creation. Evidence before assertions.