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,85 @@
1
+ ---
2
+ name: domain-model
3
+ description: Use when the user wants to stress-test a plan against the existing domain model and documented decisions. Grilling session that interviews the user one question at a time, sharpens fuzzy terminology inline, updates CONTEXT.md lazily, and offers ADRs sparingly under a 3-criteria gate. Reads docs/adr/ and CONTEXT.md if present.
4
+ model: inherit
5
+ disable-model-invocation: true
6
+ derived-from: mattpocock/skills@90ea8ee
7
+ license: MIT
8
+ upstream-url: https://github.com/mattpocock/skills/tree/main/domain-model
9
+ ---
10
+
11
+ Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
12
+
13
+ Ask the questions one at a time, waiting for feedback on each question before continuing.
14
+
15
+ If a question can be answered by exploring the codebase, explore the codebase instead.
16
+
17
+ ## Domain awareness
18
+
19
+ During codebase exploration, also look for existing documentation:
20
+
21
+ ### File structure
22
+
23
+ Most repos have a single context:
24
+
25
+ ```
26
+ /
27
+ ├── CONTEXT.md
28
+ ├── docs/
29
+ │ └── adr/
30
+ │ ├── 0001-event-sourced-orders.md
31
+ │ └── 0002-postgres-for-write-model.md
32
+ └── src/
33
+ ```
34
+
35
+ If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:
36
+
37
+ ```
38
+ /
39
+ ├── CONTEXT-MAP.md
40
+ ├── docs/
41
+ │ └── adr/ ← system-wide decisions
42
+ ├── src/
43
+ │ ├── ordering/
44
+ │ │ ├── CONTEXT.md
45
+ │ │ └── docs/adr/ ← context-specific decisions
46
+ │ └── billing/
47
+ │ ├── CONTEXT.md
48
+ │ └── docs/adr/
49
+ ```
50
+
51
+ Create files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.
52
+
53
+ ## During the session
54
+
55
+ ### Challenge against the glossary
56
+
57
+ When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
58
+
59
+ ### Sharpen fuzzy language
60
+
61
+ When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."
62
+
63
+ ### Discuss concrete scenarios
64
+
65
+ When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.
66
+
67
+ ### Cross-reference with code
68
+
69
+ When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"
70
+
71
+ ### Update CONTEXT.md inline
72
+
73
+ When a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
74
+
75
+ Don't couple `CONTEXT.md` to implementation details. Only include terms that are meaningful to domain experts.
76
+
77
+ ### Offer ADRs sparingly
78
+
79
+ Only offer to create an ADR when all three are true:
80
+
81
+ 1. **Hard to reverse** — the cost of changing your mind later is meaningful
82
+ 2. **Surprising without context** — a future reader will wonder "why did they do it this way?"
83
+ 3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons
84
+
85
+ If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md).
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: ecosystem-health
3
+ user-invocable: false
4
+ tags: [reference, health, monitoring, ci, endpoints]
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 health across configured service endpoints, CI pipelines, and critical
11
+ issues. Automatically invoked during session-start when ecosystem-health is
12
+ enabled in Session Config.
13
+ ---
14
+
15
+ # Ecosystem Health Check
16
+
17
+ ## Platform-native (CC 2.1.105+)
18
+
19
+ 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/ecosystem-health.mjs`). Each NDJSON stdout line from the watcher becomes a `<task_notification>` event Claude sees mid-session.
20
+
21
+ For harness < 2.1.105 (no monitor support), the skill's manual probes documented below serve as the fallback path.
22
+
23
+ ## Session Config Fields Used
24
+
25
+ This skill reads from the project's `## Session Config` section in the platform instruction file:
26
+
27
+ - **`health-endpoints`** — list of `{name, url}` objects for service health checks
28
+ - **`cross-repos`** — list of related repositories for critical issue scanning
29
+
30
+ Both fields are optional. The skill degrades gracefully when either is missing. On Codex this means `AGENTS.md`; on Claude/Cursor it means `CLAUDE.md`.
31
+
32
+ ## Service Health
33
+
34
+ Read the `health-endpoints` field from Session Config. If not configured or empty, print:
35
+
36
+ > No health endpoints configured in Session Config. Add `health-endpoints` to enable service monitoring.
37
+
38
+ and skip this section.
39
+
40
+ Otherwise, for each configured endpoint, run a health check:
41
+
42
+ ```bash
43
+ # Example health-endpoints config:
44
+ # health-endpoints:
45
+ # - name: API
46
+ # url: https://api.example.com/health
47
+ # - name: Worker
48
+ # url: http://worker:8080/healthz
49
+ # - name: Dashboard
50
+ # url: http://localhost:3000/api/health
51
+
52
+ # For EACH endpoint in health-endpoints, run:
53
+ # NAME=<name> URL=<url>
54
+ curl -s --max-time 6 -w '\nHTTP_STATUS:%{http_code}' "$URL" 2>/dev/null \
55
+ | python3 -c "
56
+ import sys, json
57
+ raw = sys.stdin.read()
58
+ body, _, status_line = raw.rpartition('\nHTTP_STATUS:')
59
+ http_code = int(status_line.strip() or '0')
60
+ status = None
61
+ try:
62
+ d = json.loads(body)
63
+ if isinstance(d, dict) and 'status' in d:
64
+ bs = str(d['status']).lower()
65
+ status = 'DEGRADED' if bs == 'degraded' else ('OK' if bs in ('ok', 'healthy', 'up') else 'DOWN')
66
+ except Exception:
67
+ pass
68
+ if status is None:
69
+ status = 'OK' if 200 <= http_code < 400 else 'DOWN'
70
+ print(f'\$NAME: {status}')
71
+ " 2>/dev/null || echo "\$NAME: unreachable"
72
+ ```
73
+
74
+ Generate the check commands dynamically from the config — do not hardcode any service names or URLs.
75
+
76
+ ## Critical Issues Across Projects
77
+
78
+ Read the `cross-repos` field from Session Config. If not configured or empty, print:
79
+
80
+ > No cross-repos configured in Session Config. Add `cross-repos` to enable cross-project issue scanning.
81
+
82
+ and skip this section.
83
+
84
+ ### Detect VCS
85
+
86
+ > **VCS Reference:** Detect the VCS platform per the "VCS Auto-Detection" section of the gitlab-ops skill.
87
+ > Use CLI commands per the "Common CLI Commands" section. For cross-project queries, see "Dynamic Project Resolution."
88
+
89
+ ### For each cross-repo, query critical issues
90
+
91
+ Using the detected VCS CLI (per gitlab-ops "Common CLI Commands" and "Dynamic Project Resolution" sections):
92
+
93
+ 1. Resolve the project ID or owner/repo slug for each cross-repo
94
+ 2. Query open issues with `priority:critical` or `priority:high` labels (limit 5 per repo)
95
+ 3. Collect results across all configured repos
96
+
97
+ ## CI Pipeline Status
98
+
99
+ Query the latest pipeline/workflow runs for the current repo using the detected VCS CLI (per gitlab-ops "Common CLI Commands" section). Report the 3 most recent runs.
100
+
101
+ ## Report Format
102
+
103
+ Present as a compact health dashboard. Build the table dynamically from whichever endpoints are configured:
104
+
105
+ ```
106
+ ## Ecosystem Health
107
+ | Service | Status |
108
+ |---------------|-------------------|
109
+ | <name> | [OK/DEGRADED/DOWN/unreachable] |
110
+ | ... | ... |
111
+
112
+ Critical issues: [N total across cross-repos]
113
+ CI: [green/red/pending]
114
+ ```
115
+
116
+ If no health endpoints are configured, omit the service table entirely.
117
+ If no cross-repos are configured, omit the critical issues line.
118
+
119
+ Flag any service that is DOWN or DEGRADED, or any critical issue count > 0 as requiring attention.
@@ -0,0 +1,193 @@
1
+ ---
2
+ name: ecosystem-health-wizard
3
+ user-invocable: false
4
+ tags: [bootstrap, ecosystem-health, wizard, config]
5
+ description: >
6
+ Wizard prompt spec for /bootstrap --ecosystem-health. Detects CI provider
7
+ and package manager, prompts for service endpoints, CI pipelines, and
8
+ critical issue labels, then writes Session Config + policy file.
9
+ ---
10
+
11
+ # Ecosystem-Health Wizard Spec
12
+
13
+ ## Purpose
14
+
15
+ Populate the fields consumed by `skills/ecosystem-health/SKILL.md` interactively.
16
+ Without this wizard, `health-endpoints`, `cross-repos`, and CI pipeline config in
17
+ Session Config must be hand-written. This wizard detects what it can automatically,
18
+ then asks the user only for values that cannot be inferred.
19
+
20
+ **Local-only.** No network calls. The wizard reads the filesystem and writes two
21
+ files. The user reviews `git status` and commits manually.
22
+
23
+ ---
24
+
25
+ ## Step 1: Detection
26
+
27
+ Run silently before prompting.
28
+
29
+ ```bash
30
+ node "$PLUGIN_ROOT/scripts/lib/ecosystem-wizard.mjs" --repo-root "$(pwd)" [--dry-run]
31
+ ```
32
+
33
+ The detection phase reads:
34
+
35
+ | Signal | Command |
36
+ |---|---|
37
+ | CI provider | `[[ -f .gitlab-ci.yml ]] && echo gitlab` / `[[ -d .github/workflows ]] && echo github` |
38
+ | Package manager | Lockfile probe: `pnpm-lock.yaml` → pnpm, `yarn.lock` → yarn, `bun.lockb` → bun, `package-lock.json` → npm |
39
+ | Available scripts | `node -e "const p=require('./package.json'); console.log(Object.keys(p.scripts||{}).join(','))"` |
40
+
41
+ Detected values are shown to the user as context before prompting:
42
+
43
+ ```
44
+ Ecosystem-Health Wizard
45
+ Detected: CI=gitlab, package-manager=pnpm
46
+ ```
47
+
48
+ ---
49
+
50
+ ## Step 2: Prompt Sequence
51
+
52
+ Three sequential prompts. Each accepts a blank answer to skip that field.
53
+
54
+ ### Prompt 2a — Health Endpoints
55
+
56
+ ```
57
+ Health endpoints (format "Name|URL", comma-separated, blank to skip):
58
+ > API|https://api.example.com/health, Worker|http://worker:8080/healthz
59
+ ```
60
+
61
+ - Format per entry: `<display-name>|<url>` (pipe separator).
62
+ - Comma-separated for multiple entries.
63
+ - URL must be non-empty when name is provided; malformed entries are skipped with a warning.
64
+ - Produces `health-endpoints` list in Session Config.
65
+
66
+ ### Prompt 2b — CI Pipeline Identifiers
67
+
68
+ ```
69
+ CI pipeline identifiers (format "id" or "id:label", comma-separated, blank to skip):
70
+ > main, deploy-production:Deploy
71
+ ```
72
+
73
+ - Format per entry: `<id>` or `<id>:<display-label>`.
74
+ - For GitLab: branch name or numeric pipeline ID.
75
+ - For GitHub: workflow file name (e.g. `ci.yml`).
76
+ - Produces `pipelines` list in policy file.
77
+
78
+ ### Prompt 2c — Critical Issue Labels
79
+
80
+ ```
81
+ Critical issue labels (comma-separated, e.g. "priority:critical,severity:blocker", blank to skip):
82
+ > priority:critical, severity:blocker
83
+ ```
84
+
85
+ - Raw label strings as they appear in the VCS issue tracker.
86
+ - Produces `criticalIssueLabels` list in policy file.
87
+
88
+ ---
89
+
90
+ ## Step 3: Validation
91
+
92
+ Before writing, the collected data is shape-validated using the plain-JS
93
+ validator in `scripts/lib/ecosystem-wizard.mjs` (`validateEcosystemPolicy`).
94
+
95
+ Validation rules (no Zod, no Ajv — plain JS):
96
+
97
+ - `version` must equal `1`
98
+ - `endpoints[]`: each item must have non-empty `name` and `url` strings
99
+ - `pipelines[]`: each item must have non-empty `id` string
100
+ - `criticalIssueLabels[]`: each item must be a non-empty string
101
+
102
+ When validation fails, no files are written and the errors are reported.
103
+
104
+ ---
105
+
106
+ ## Step 4: Output
107
+
108
+ Two files are written (or confirmed skipped if already present):
109
+
110
+ ### 4a — Session Config block in CLAUDE.md (or AGENTS.md)
111
+
112
+ Appended inside the `## Session Config` section:
113
+
114
+ ```yaml
115
+ ecosystem-health:
116
+ health-endpoints:
117
+ - name: API
118
+ url: https://api.example.com/health
119
+ - name: Worker
120
+ url: http://worker:8080/healthz
121
+ pipelines:
122
+ - id: main
123
+ - id: deploy-production # Deploy
124
+ critical-issue-labels: ["priority:critical", "severity:blocker"]
125
+ ```
126
+
127
+ **Idempotency:** If an `ecosystem-health:` key already exists in Session Config,
128
+ the block is NOT overwritten. The wizard prints "Skipped (already present)" and
129
+ exits 0. Re-run to edit: remove the existing block first, then re-run.
130
+
131
+ ### 4b — `.orchestrator/policy/ecosystem.json`
132
+
133
+ ```json
134
+ {
135
+ "version": 1,
136
+ "rationale": "Ecosystem health configuration. Generated by /bootstrap --ecosystem-health.",
137
+ "endpoints": [
138
+ { "name": "API", "url": "https://api.example.com/health" }
139
+ ],
140
+ "pipelines": [
141
+ { "id": "main" },
142
+ { "id": "deploy-production", "label": "Deploy" }
143
+ ],
144
+ "criticalIssueLabels": ["priority:critical", "severity:blocker"]
145
+ }
146
+ ```
147
+
148
+ Schema: `.orchestrator/policy/ecosystem.schema.json`.
149
+
150
+ **Idempotency:** If the file already exists and the JSON contents are identical
151
+ to the proposed write, the file is skipped. If the file exists with different
152
+ contents, it is overwritten (re-run semantics).
153
+
154
+ ---
155
+
156
+ ## Step 5: Report
157
+
158
+ The wizard prints what it wrote and instructs the user to review before committing:
159
+
160
+ ```
161
+ Ecosystem-Health Wizard complete.
162
+ Written: .orchestrator/policy/ecosystem.json, CLAUDE.md
163
+ Skipped (already present): (none)
164
+
165
+ Review changes with: git status && git diff
166
+ ```
167
+
168
+ No auto-commit. The user stages and commits manually (or via the session coordinator).
169
+
170
+ ---
171
+
172
+ ## Idempotent Re-Run
173
+
174
+ The wizard is safe to re-run:
175
+
176
+ 1. If `.orchestrator/policy/ecosystem.json` exists with identical contents → **skipped**.
177
+ 2. If `ecosystem-health:` key already exists in Session Config → **skipped**.
178
+ 3. If both are present and identical → both skipped, wizard exits 0 with "Nothing to do."
179
+
180
+ To update configuration: remove `ecosystem-health:` from Session Config and
181
+ delete `.orchestrator/policy/ecosystem.json`, then re-run.
182
+
183
+ ---
184
+
185
+ ## Error Handling
186
+
187
+ | Condition | Behaviour |
188
+ |---|---|
189
+ | `repoRoot` not provided | Exits with error: `repoRoot is required` |
190
+ | No `CLAUDE.md` or `AGENTS.md` found | Policy file is still written; Session Config skipped with warning |
191
+ | Malformed endpoint entry (missing pipe) | Entry skipped with a warning; remaining entries are processed |
192
+ | Validation failure | No files written; errors reported; exit code 1 |
193
+ | File write failure | `errors[]` entry added; partial success reported |
@@ -0,0 +1,293 @@
1
+ ---
2
+ name: eval
3
+ user-invocable: true
4
+ tags: [eval, measurement, quality, meta, standard]
5
+ model: sonnet
6
+ model-preference: sonnet
7
+ model-preference-codex: gpt-5.4-mini
8
+ model-preference-cursor: claude-sonnet-4-6
9
+ args-schema:
10
+ - flag: --session
11
+ description: "session_id to evaluate (default: last completed session via the resolution cascade)"
12
+ - flag: --no-write
13
+ description: "Evaluate + report without appending to the eval journal (.orchestrator/metrics/eval.jsonl)"
14
+ - flag: --verify
15
+ description: "Re-evaluate a stored run-id and diff per-dimension for scoring drift (exit 1 on drift)"
16
+ description: >
17
+ Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v1 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score.
18
+ ---
19
+
20
+ > **Platform Note:** State files use the platform's native directory: `.claude/` (Claude Code), `.codex/` (Codex CLI), or `.cursor/` (Cursor IDE). Shared metrics + the eval journal live in `.orchestrator/metrics/`. See `skills/_shared/platform-tools.md`.
21
+
22
+ # Eval Skill — Session-Process Evaluation (aiat-llm-eval/1.0)
23
+
24
+ On-demand, honest measurement of ONE completed orchestrator session against the
25
+ pre-registered **rubric-v1** check set. The deterministic engine
26
+ (`scripts/eval-session.mjs` → `scripts/lib/eval/engine.mjs`) reads only local
27
+ metrics files (`sessions.jsonl` + `events.jsonl`), scores the five deterministic
28
+ dimensions, appends a `session-eval` record to the journal, and optionally
29
+ renders an HTML report. An opt-in LLM judge overlays two advisory dimensions.
30
+
31
+ The standard this skill implements is [`docs/eval/aiat-llm-eval-v1.md`](../../docs/eval/aiat-llm-eval-v1.md);
32
+ the frozen, content-hashed check set is [`skills/eval/rubric-v1.md`](./rubric-v1.md).
33
+
34
+ ## Posture Contract (load-bearing — read before executing)
35
+
36
+ - **No global score, by construction.** The record has no overall/total/mean
37
+ field, and this skill never derives one. Report per-dimension verdicts only.
38
+ - **Never guess.** Missing source data yields `cannot-determine` (a first-class,
39
+ non-error verdict) with an honest reason — never a fabricated `pass`/`fail`.
40
+ Do NOT "fill in" a missing KPI or infer a gate result the events do not show.
41
+ - **Deterministic before judge.** The five deterministic dimensions are complete
42
+ on their own. The judge (Phase 3) is opt-in, ADVISORY, and `uncalibrated` in
43
+ v1 — never blend a judge verdict into the deterministic tally.
44
+ - **Journal is SSOT; the report is a derived view.** The append-only
45
+ `.orchestrator/metrics/eval.jsonl` is authoritative. The HTML report is
46
+ rebuildable from any stored record and is never authoritative over the journal.
47
+ - **`--verify` is the reproducibility proof.** Re-scoring stored source data
48
+ reproduces the stored dimensions byte-for-byte (exit 0) or reports drift
49
+ (exit 1). This proves the SCORING replays — NOT that the model is deterministic.
50
+ - **Self-evaluation is labelled as such.** The orchestrator scoring its own
51
+ session is a self-evaluation, not an independent audit.
52
+
53
+ ---
54
+
55
+ ## Phase 0: Bootstrap Gate
56
+
57
+ Read `skills/_shared/bootstrap-gate.md` and execute the gate check. If the gate is
58
+ CLOSED, invoke `skills/bootstrap/SKILL.md` and wait for completion before
59
+ proceeding. If the gate is OPEN, continue to Phase 1.
60
+
61
+ <HARD-GATE>
62
+ Do NOT proceed past Phase 0 if GATE_CLOSED. There is no bypass. Refer to
63
+ `skills/_shared/bootstrap-gate.md` for the full HARD-GATE constraints.
64
+ </HARD-GATE>
65
+
66
+ ---
67
+
68
+ ## Phase 1: Config & Argument Loading
69
+
70
+ ### 1.1 Read Session Config
71
+
72
+ Read and parse Session Config per `skills/_shared/config-reading.md`. Extract the
73
+ `eval` block (`scripts/lib/config.mjs` returns it as `config.eval`, parsed by
74
+ `scripts/lib/config/eval.mjs`):
75
+
76
+ ```
77
+ enabled: boolean (default false)
78
+ mode: 'warn' | 'off' (default 'warn')
79
+ judge: 'off' | 'haiku' | 'sonnet' (default 'off')
80
+ report: 'html' | 'none' (default 'html')
81
+ handle: string | null (default null)
82
+ ```
83
+
84
+ **On-demand `/eval` runs regardless of `eval.enabled`.** The `enabled` flag gates
85
+ the AUTOMATIC session-end eval phase only — it does NOT gate this command (same
86
+ posture as `/reconcile` vs `reconcile.enabled`). `mode: off` is honoured as a
87
+ kill-switch only for the automatic phase; on-demand invocation still runs. If
88
+ `eval.judge` is `off`, skip Phase 3 entirely.
89
+
90
+ > **Parser gotcha:** the `eval:` key-line itself MUST NOT carry an inline comment
91
+ > (strict `/^eval:\s*$/`); a trailing `# comment` on that exact line makes the
92
+ > parser skip the whole block and silently apply ALL defaults. Sub-key lines
93
+ > tolerate inline comments.
94
+
95
+ ### 1.2 Parse Arguments
96
+
97
+ Inspect `$ARGUMENTS`:
98
+
99
+ - `--session <id>` → pass through to `--session`.
100
+ - `--no-write` → evaluate without appending to the journal (dry-run).
101
+ - `--verify <run-id>` → **verification mode**: skip Phases 2–4, run the CLI
102
+ `--verify` path (see Phase 6), report MATCH/DRIFT, done.
103
+
104
+ ### 1.3 Capture the Model Id (honest provenance)
105
+
106
+ The record's `model.source` records HOW the model id was captured, precisely
107
+ because self-report is unreliable:
108
+
109
+ - If `$ANTHROPIC_MODEL` is set in the environment, the engine reads it
110
+ automatically with `source: env` — **env wins over the flag** (precedence
111
+ `env > flag`). Do not pass `--model-id` in that case; let the engine resolve it.
112
+ - Otherwise the coordinator passes its own self-reported model id:
113
+ `--model-id <self-reported-model-id> --model-source self-report`.
114
+
115
+ ---
116
+
117
+ ## Phase 2: Deterministic Run
118
+
119
+ Run the deterministic engine via its CLI. Default target is the last completed
120
+ session (resolution cascade); `--session` overrides.
121
+
122
+ ```bash
123
+ node scripts/eval-session.mjs [--session <id>] --json \
124
+ [--model-id <self-reported-id> --model-source self-report] \
125
+ [--no-write]
126
+ ```
127
+
128
+ - **Do NOT pass `--metrics-dir`** for a real run — the engine defaults to the
129
+ live `.orchestrator/metrics`, the session being evaluated.
130
+ - The CLI captures the eval `timestamp` (the one sanctioned clock read) and hands
131
+ it to the engine as a parameter, so the scoring path stays clock-free and
132
+ `--verify`-reproducible.
133
+ - Exit codes: `0` success · `1` user error (session not found) · `2` system error.
134
+ On exit `1` (e.g. "no completed session found"), surface the message and stop —
135
+ do not retry with fabricated inputs.
136
+
137
+ Parse the emitted JSON record. It carries `dimensions[]` (5 deterministic
138
+ entries), `kpis{}`, `provenance.rubric_sha256` (non-null once `rubric-v1.md`
139
+ exists), `model`, `harness`, and `run_id`. Unless `--no-write` was passed, the
140
+ record is already appended to `.orchestrator/metrics/eval.jsonl` by the CLI.
141
+
142
+ **Contamination check:** if the human-render/summary reports a peer-overlapped
143
+ window, note it — `verification-evidence` and `gate-health` will read
144
+ `cannot-determine` for that reason (attribution is unsafe), which is correct, not
145
+ a defect.
146
+
147
+ ---
148
+
149
+ ## Phase 3: Judge Overlay (ONLY when `eval.judge != off`)
150
+
151
+ The judge runs **coordinator-side** — `AskUserQuestion` and the `Agent` tool are
152
+ not available inside a dispatched subagent, so the judge is dispatched from the
153
+ coordinator thread using the read-only agent `session-orchestrator:eval-judge`
154
+ (model = `eval.judge`). Reference the API; do not reimplement scoring here:
155
+
156
+ ```javascript
157
+ import { runEvalJudge, mergeJudgeDimensions } from '$PLUGIN_ROOT/scripts/lib/eval/judge.mjs';
158
+ import { appendEvalRecord } from '$PLUGIN_ROOT/scripts/lib/eval/sink.mjs';
159
+
160
+ // dispatchAgent = the coordinator's Agent-tool dispatch closure targeting
161
+ // subagent_type 'session-orchestrator:eval-judge'.
162
+ const { status, dimensions } = await runEvalJudge({
163
+ dispatchAgent,
164
+ record, // the deterministic record from Phase 2
165
+ model: EVAL_JUDGE_MODEL, // eval.judge ('haiku' | 'sonnet')
166
+ budget: JUDGE_BUDGET_TOKENS, // optional
167
+ });
168
+
169
+ // mergeJudgeDimensions appends the advisory judge dimensions to the record.
170
+ const merged = mergeJudgeDimensions(record, dimensions);
171
+
172
+ // The COORDINATOR appends the enriched record (subagents never write the journal).
173
+ appendEvalRecord(merged, { path: '.orchestrator/metrics/eval.jsonl' });
174
+ ```
175
+
176
+ - Every judge dimension arrives `advisory: true` + `calibration_status:
177
+ "uncalibrated"` (the schema firewall rejects any other shape). Keep them
178
+ visibly separated from the deterministic five in the summary.
179
+ - If `runEvalJudge` returns a non-ok `status` (e.g. dispatch failed), keep the
180
+ deterministic record as-is and note the judge was unavailable — the
181
+ deterministic evaluation is complete without it.
182
+ - When `--no-write` was passed in Phase 2, do NOT append the merged record either.
183
+
184
+ > The judge merge re-writes the record with the SAME `run_id`/`timestamp`, so a
185
+ > later `--verify <run-id>` re-scores the deterministic dimensions from source
186
+ > and diffs them; judge dimensions are advisory and excluded from the drift diff.
187
+
188
+ ---
189
+
190
+ ## Phase 4: Report (ONLY when `eval.report == html`)
191
+
192
+ Render the derived HTML view from the record:
193
+
194
+ ```javascript
195
+ import { writeEvalReport } from '$PLUGIN_ROOT/scripts/lib/eval/report.mjs';
196
+
197
+ const res = writeEvalReport(record, { generatedAt: new Date().toISOString() });
198
+ // res.ok === true → res.path === .orchestrator/eval/reports/<run_id>.html
199
+ ```
200
+
201
+ - Output path: `.orchestrator/eval/reports/<run_id>.html` (gitignored — a derived
202
+ view, rebuildable from the journal).
203
+ - `writeEvalReport` NEVER throws; on `res.ok === false` surface the WARN reason
204
+ and continue (the journal record is unaffected — the report is derived).
205
+ - **Name the report path in the chat** so the operator can open it.
206
+ - When `eval.report == none`, skip this phase.
207
+
208
+ ---
209
+
210
+ ## Phase 5: Chat Summary
211
+
212
+ Emit a compact, honest per-dimension summary. Status lines only — no global score.
213
+
214
+ ```
215
+ ## /eval — <session_id> (self-evaluation, aiat-llm-eval/1.0 · rubric-v1 · n=1, no CI)
216
+
217
+ Deterministic:
218
+ verification-evidence PASS <one-line evidence>
219
+ plan-fidelity PASS completion_rate=1.0 (score)
220
+ gate-health PASS <one-line evidence>
221
+ process-safety PASS <one-line evidence + guard-emission disclosure>
222
+ efficiency-kpis N/A (reported: duration=…s waves=… agents=… tok_in=… tok_out=… carryover=…)
223
+
224
+ Judge (advisory, uncalibrated) [only when eval.judge != off]:
225
+ instruction-adherence <verdict> advisory
226
+ report-quality <verdict> advisory
227
+
228
+ cannot-determine: <k> of 5 deterministic dimensions (<reasons>)
229
+ Report: .orchestrator/eval/reports/<run_id>.html
230
+ Journal: .orchestrator/metrics/eval.jsonl (appended: <yes|--no-write>)
231
+ Re-verify: node scripts/eval-session.mjs --verify <run_id>
232
+ ```
233
+
234
+ Always report the `cannot-determine` share explicitly — a high abstention count
235
+ is an honest signal about missing telemetry, not a failure to hide. Always print
236
+ the `--verify` command as the reproducibility handle.
237
+
238
+ ---
239
+
240
+ ## Phase 6: Verification Mode (`--verify <run-id>`)
241
+
242
+ When Phase 1.2 detected `--verify`, run ONLY:
243
+
244
+ ```bash
245
+ node scripts/eval-session.mjs --verify <run-id> --json
246
+ ```
247
+
248
+ - Exit `0` + `{ match: true }` → the stored record re-scores identically across
249
+ all deterministic dimensions. Report MATCH with the dimension count.
250
+ - Exit `1` + `{ match: false, diffs }` → scoring drift. Report the per-dimension
251
+ diff (`id.field: stored=… fresh=…`). Drift means the source data or the engine
252
+ changed since the record was written — investigate, do not overwrite.
253
+ - `--verify` reproduces the stored model + timestamp verbatim (no env override),
254
+ so a MATCH is a real reproducibility proof of the scoring, not of model output.
255
+
256
+ ---
257
+
258
+ ## Cross-Platform (Codex CLI / Cursor / Pi) — FA4
259
+
260
+ The deterministic core is pure Node CLIs (`scripts/eval-session.mjs`) plus Node
261
+ library modules (`report.mjs`, `sink.mjs`) — they run identically on every
262
+ platform. Only the judge phase needs harness-specific tooling.
263
+
264
+ - **Codex CLI / Cursor / Pi:** the `Agent` tool (and `AskUserQuestion`) are
265
+ unavailable, so **Phase 3 (judge) is SKIPPED with a one-line note**
266
+ ("judge phase skipped: requires the Agent tool, unavailable on `<platform>`").
267
+ Phases 2, 4, 5, 6 run unchanged — they are Node-only. See
268
+ `skills/_shared/platform-tools.md` § Agent Dispatch Pattern.
269
+ - **`harness.platform`** on the record is resolved from `$SO_PLATFORM`
270
+ (falls back to `claude-code`) inside the engine — no skill action needed.
271
+ - The deterministic five dimensions + the HTML report + `--verify` are fully
272
+ available on all platforms; the judge overlay is a Claude-Code-only enrichment
273
+ in v1.
274
+
275
+ ---
276
+
277
+ ## Anti-Patterns
278
+
279
+ - **DO NOT** derive, print, or imply a global/overall/aggregate score — the record
280
+ forbids one by construction and so does every report.
281
+ - **DO NOT** guess or "fill in" missing data — a missing gate result, KPI, or
282
+ completion_rate is `cannot-determine`/`null`, never a fabricated pass or `0`.
283
+ - **DO NOT** present the judge's advisory verdict as a measurement — it is
284
+ `uncalibrated` in v1 and must stay visibly separated from the deterministic
285
+ tally.
286
+ - **DO NOT** treat the HTML report as authoritative — the journal is the SSOT; the
287
+ report is a rebuildable derived view.
288
+ - **DO NOT** skip `--verify` when reproducibility is in question — it is the
289
+ executable proof, and its MATCH/DRIFT exit code is the source of truth.
290
+ - **DO NOT** pass `--metrics-dir` for a real run — that points the engine at
291
+ fixture data instead of the live session metrics.
292
+ - **DO NOT** call `runReconcile`-style writes from a subagent — the coordinator
293
+ owns every `eval.jsonl` append (PSA-007).