session-orchestrator 5.2.0 → 5.4.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 (427) hide show
  1. package/.agents/skills/architecture/SKILL.md +3 -1
  2. package/.agents/skills/autopilot/SKILL.md +5 -1
  3. package/.agents/skills/autopilot/agents/openai.yaml +5 -0
  4. package/.agents/skills/bootstrap/SKILL.md +5 -1
  5. package/.agents/skills/bootstrap/agents/openai.yaml +5 -0
  6. package/.agents/skills/brainstorm/SKILL.md +5 -1
  7. package/.agents/skills/brainstorm/agents/openai.yaml +5 -0
  8. package/.agents/skills/claude-md-drift-check/SKILL.md +4 -2
  9. package/.agents/skills/close/SKILL.md +5 -1
  10. package/.agents/skills/close/agents/openai.yaml +5 -0
  11. package/.agents/skills/convergence-monitoring/SKILL.md +4 -2
  12. package/.agents/skills/debug/SKILL.md +5 -1
  13. package/.agents/skills/debug/agents/openai.yaml +5 -0
  14. package/.agents/skills/discovery/SKILL.md +5 -1
  15. package/.agents/skills/discovery/agents/openai.yaml +5 -0
  16. package/.agents/skills/dispatcher/SKILL.md +5 -1
  17. package/.agents/skills/dispatcher/agents/openai.yaml +5 -0
  18. package/.agents/skills/docs-orchestrator/SKILL.md +3 -1
  19. package/.agents/skills/ecosystem-health/SKILL.md +3 -1
  20. package/.agents/skills/eli5/SKILL.md +5 -1
  21. package/.agents/skills/eli5/agents/openai.yaml +5 -0
  22. package/.agents/skills/eval/SKILL.md +6 -2
  23. package/.agents/skills/eval/agents/openai.yaml +5 -0
  24. package/.agents/skills/evolve/SKILL.md +6 -2
  25. package/.agents/skills/evolve/agents/openai.yaml +5 -0
  26. package/.agents/skills/frontmatter-guard/SKILL.md +3 -1
  27. package/.agents/skills/gitlab-ops/SKILL.md +3 -1
  28. package/.agents/skills/gitlab-portfolio/SKILL.md +3 -1
  29. package/.agents/skills/go/SKILL.md +5 -1
  30. package/.agents/skills/go/agents/openai.yaml +5 -0
  31. package/.agents/skills/grill/SKILL.md +5 -1
  32. package/.agents/skills/grill/agents/openai.yaml +5 -0
  33. package/.agents/skills/harness-audit/SKILL.md +5 -1
  34. package/.agents/skills/harness-audit/agents/openai.yaml +5 -0
  35. package/.agents/skills/hook-development/SKILL.md +3 -1
  36. package/.agents/skills/mcp-builder/SKILL.md +3 -1
  37. package/.agents/skills/memory-cleanup/SKILL.md +5 -1
  38. package/.agents/skills/memory-cleanup/agents/openai.yaml +5 -0
  39. package/.agents/skills/mode-selector/SKILL.md +3 -1
  40. package/.agents/skills/navigator/SKILL.md +22 -0
  41. package/.agents/skills/navigator/agents/openai.yaml +5 -0
  42. package/.agents/skills/npm-publish/SKILL.md +4 -2
  43. package/.agents/skills/peekaboo-driver/SKILL.md +3 -1
  44. package/.agents/skills/persona-panel/SKILL.md +5 -1
  45. package/.agents/skills/persona-panel/agents/openai.yaml +5 -0
  46. package/.agents/skills/plan/SKILL.md +5 -1
  47. package/.agents/skills/plan/agents/openai.yaml +5 -0
  48. package/.agents/skills/playwright-driver/SKILL.md +3 -1
  49. package/.agents/skills/portfolio/SKILL.md +5 -1
  50. package/.agents/skills/portfolio/agents/openai.yaml +5 -0
  51. package/.agents/skills/quality-gates/SKILL.md +3 -1
  52. package/.agents/skills/reconcile/SKILL.md +5 -1
  53. package/.agents/skills/reconcile/agents/openai.yaml +5 -0
  54. package/.agents/skills/release/SKILL.md +5 -1
  55. package/.agents/skills/release/agents/openai.yaml +5 -0
  56. package/.agents/skills/remote-offload/SKILL.md +3 -1
  57. package/.agents/skills/repo-audit/SKILL.md +5 -1
  58. package/.agents/skills/repo-audit/agents/openai.yaml +5 -0
  59. package/.agents/skills/session/SKILL.md +21 -0
  60. package/.agents/skills/session/agents/openai.yaml +5 -0
  61. package/.agents/skills/session-end/SKILL.md +3 -1
  62. package/.agents/skills/session-plan/SKILL.md +3 -1
  63. package/.agents/skills/session-start/SKILL.md +3 -1
  64. package/.agents/skills/spinout/SKILL.md +5 -1
  65. package/.agents/skills/spinout/agents/openai.yaml +5 -0
  66. package/.agents/skills/sunset-review/SKILL.md +5 -1
  67. package/.agents/skills/sunset-review/agents/openai.yaml +5 -0
  68. package/.agents/skills/templates-ack/SKILL.md +21 -0
  69. package/.agents/skills/templates-ack/agents/openai.yaml +5 -0
  70. package/.agents/skills/test/SKILL.md +5 -1
  71. package/.agents/skills/test/agents/openai.yaml +5 -0
  72. package/.agents/skills/test-audit/SKILL.md +21 -0
  73. package/.agents/skills/test-audit/agents/openai.yaml +5 -0
  74. package/.agents/skills/test-runner/SKILL.md +3 -1
  75. package/.agents/skills/tmux-layout/SKILL.md +3 -1
  76. package/.agents/skills/using-orchestrator/SKILL.md +3 -1
  77. package/.agents/skills/ux-grill/SKILL.md +5 -1
  78. package/.agents/skills/ux-grill/agents/openai.yaml +5 -0
  79. package/.agents/skills/vault-mirror/SKILL.md +3 -1
  80. package/.agents/skills/vault-sync/SKILL.md +3 -1
  81. package/.agents/skills/wave-executor/SKILL.md +3 -1
  82. package/.agents/skills/write-executable-plan/SKILL.md +3 -1
  83. package/.claude-plugin/marketplace.json +1 -1
  84. package/.claude-plugin/plugin.json +1 -1
  85. package/.codex-plugin/plugin.json +4 -4
  86. package/.codex-plugin/skills/claude-md-drift-check/SKILL.md +1 -1
  87. package/.codex-plugin/skills/convergence-monitoring/SKILL.md +1 -3
  88. package/.codex-plugin/skills/eval/SKILL.md +1 -1
  89. package/.codex-plugin/skills/evolve/SKILL.md +1 -1
  90. package/.codex-plugin/skills/navigator/SKILL.md +22 -0
  91. package/.codex-plugin/skills/{convergence-monitoring → navigator}/agents/openai.yaml +2 -2
  92. package/.codex-plugin/skills/npm-publish/SKILL.md +1 -3
  93. package/.codex-plugin/skills/session/SKILL.md +1 -1
  94. package/.codex-plugin/skills/test-audit/SKILL.md +21 -0
  95. package/.codex-plugin/skills/{npm-publish → test-audit}/agents/openai.yaml +1 -1
  96. package/.cursor/commands/eval.md +1 -1
  97. package/.cursor/commands/navigator.md +15 -0
  98. package/.cursor/commands/session.md +1 -1
  99. package/.cursor/commands/test-audit.md +14 -0
  100. package/.cursor/rules/000-session-orchestrator.mdc +0 -2
  101. package/.cursor/rules/050-plan.mdc +1 -1
  102. package/.cursor/rules/060-evolve.mdc +27 -12
  103. package/.cursor/skills/claude-md-drift-check/SKILL.md +1 -1
  104. package/.cursor/skills/convergence-monitoring/SKILL.md +1 -0
  105. package/.cursor/skills/eval/SKILL.md +1 -1
  106. package/.cursor/skills/navigator/SKILL.md +13 -0
  107. package/.cursor/skills/npm-publish/SKILL.md +1 -0
  108. package/.cursor/skills/test-audit/SKILL.md +12 -0
  109. package/.cursor-plugin/plugin.json +1 -1
  110. package/.orchestrator/policy/blocked-commands.json +12 -3
  111. package/AGENTS.md +9 -30
  112. package/CHANGELOG.md +206 -0
  113. package/README.md +13 -9
  114. package/SECURITY.md +12 -0
  115. package/agents/dialectic-deriver.md +13 -10
  116. package/agents/eval-judge.md +67 -45
  117. package/agents/skill-applied-judge.md +34 -19
  118. package/commands/session.md +7 -3
  119. package/docs/agent-authoring.md +2 -2
  120. package/docs/baseline.md +22 -7
  121. package/docs/ci-setup.md +57 -4
  122. package/docs/codex-setup.md +14 -2
  123. package/docs/components.md +12 -10
  124. package/docs/events-schema.md +65 -15
  125. package/docs/persona-panel.md +5 -4
  126. package/docs/rule-authoring.md +84 -17
  127. package/docs/scope-collision-guard.md +26 -4
  128. package/docs/session-config-reference.md +154 -12
  129. package/docs/session-config-template.md +41 -3
  130. package/docs/telemetry.md +2 -0
  131. package/hooks/_lib/hook-import-set.json +87 -6
  132. package/hooks/_lib/subagent-transcript.mjs +582 -31
  133. package/hooks/config-protection.mjs +11 -3
  134. package/hooks/cwd-change-restore.mjs +11 -3
  135. package/hooks/enforce-commands.mjs +70 -23
  136. package/hooks/enforce-scope.mjs +143 -33
  137. package/hooks/hooks-codex.json +1 -1
  138. package/hooks/hooks-cursor.json +5 -0
  139. package/hooks/hooks-pi.json +5 -0
  140. package/hooks/hooks.json +6 -1
  141. package/hooks/loop-guard.mjs +11 -3
  142. package/hooks/on-session-end.mjs +58 -23
  143. package/hooks/on-session-start.mjs +101 -11
  144. package/hooks/on-stop.mjs +170 -22
  145. package/hooks/operator-steer.mjs +11 -3
  146. package/hooks/post-bash-issue-budget-refund.mjs +18 -8
  147. package/hooks/post-bash-write-verify.mjs +3 -2
  148. package/hooks/post-edit-import-probe.mjs +17 -9
  149. package/hooks/post-edit-validate.mjs +13 -5
  150. package/hooks/post-subagent-discovery-validator.mjs +98 -13
  151. package/hooks/post-tool-batch-wave-signal.mjs +202 -38
  152. package/hooks/post-tool-failure-corrective-context.mjs +11 -5
  153. package/hooks/post-tooluse-frontend-slop.mjs +10 -4
  154. package/hooks/pre-auq-clarity.mjs +15 -2
  155. package/hooks/pre-bash-destructive-guard.mjs +80 -9
  156. package/hooks/pre-bash-issue-budget.mjs +16 -11
  157. package/hooks/pre-bash-memory-propose-audit.mjs +137 -56
  158. package/hooks/pre-bash-sessions-ledger-guard.mjs +419 -22
  159. package/hooks/pre-bash-staging-fence.mjs +335 -31
  160. package/hooks/pre-bash-templates-first.mjs +19 -14
  161. package/hooks/pre-edit-sessions-ledger-guard.mjs +162 -0
  162. package/hooks/pre-task-scope-disjoint.mjs +792 -74
  163. package/hooks/subagent-telemetry.mjs +111 -38
  164. package/hooks/wave-scope-commit-guard.mjs +197 -100
  165. package/monitors/monitors.json +1 -1
  166. package/output-styles/wave-summary.md +1 -1
  167. package/package.json +3 -3
  168. package/pi/prompts/eval.md +1 -1
  169. package/pi/prompts/navigator.md +12 -0
  170. package/pi/prompts/session.md +1 -1
  171. package/pi/prompts/test-audit.md +12 -0
  172. package/rules/README.md +7 -2
  173. package/rules/_index.md +3 -3
  174. package/rules/always-on/bash-harness-pitfalls.md +7 -1
  175. package/rules/opt-in-domain/prompt-caching.md +6 -2
  176. package/rules/opt-in-stack/backend-data.md +10 -2
  177. package/rules/opt-in-stack/backend.md +10 -4
  178. package/rules/opt-in-stack/frontend.md +7 -2
  179. package/rules/opt-in-stack/security-web.md +10 -4
  180. package/rules/opt-in-stack/swift.md +6 -2
  181. package/scripts/apply-session-learnings.mjs +492 -0
  182. package/scripts/archive-closed-prds.mjs +2 -1
  183. package/scripts/autopilot.mjs +70 -53
  184. package/scripts/backfill-abandoned-sessions.mjs +118 -16
  185. package/scripts/baseline-archetypes.mjs +1 -1
  186. package/scripts/check-package-manager.mjs +62 -5
  187. package/scripts/check-sessions-integrity.mjs +300 -0
  188. package/scripts/cursor-install.mjs +1 -4
  189. package/scripts/dialectic-deriver.mjs +50 -13
  190. package/scripts/emit-session.mjs +371 -31
  191. package/scripts/eval-session.mjs +65 -3
  192. package/scripts/export-hw-learnings.mjs +22 -3
  193. package/scripts/fleet-checkin.mjs +147 -0
  194. package/scripts/generate-agents-skills.mjs +102 -29
  195. package/scripts/generate-cursor-adapter.mjs +61 -16
  196. package/scripts/lib/agent-frontmatter.mjs +3 -3
  197. package/scripts/lib/agent-status.mjs +2 -31
  198. package/scripts/lib/auq/clarity.mjs +10 -2
  199. package/scripts/lib/auq/parse.mjs +12 -31
  200. package/scripts/lib/auq/schema.mjs +56 -41
  201. package/scripts/lib/auto-dialectic.mjs +304 -15
  202. package/scripts/lib/auto-dream.mjs +7 -6
  203. package/scripts/lib/autopilot/flags.mjs +18 -2
  204. package/scripts/lib/autopilot/kill-switches.mjs +6 -3
  205. package/scripts/lib/autopilot/loop.mjs +19 -2
  206. package/scripts/lib/autopilot/stall-sampler.mjs +80 -23
  207. package/scripts/lib/baseline-archetypes.mjs +41 -22
  208. package/scripts/lib/ci-status-banner.mjs +376 -16
  209. package/scripts/lib/command-blocker.mjs +275 -28
  210. package/scripts/lib/config/dialectic.mjs +12 -3
  211. package/scripts/lib/config/gate.mjs +74 -0
  212. package/scripts/lib/config/host-paths.mjs +79 -0
  213. package/scripts/lib/config/persona-gate-wave.mjs +3 -3
  214. package/scripts/lib/config/reaper.mjs +163 -0
  215. package/scripts/lib/config-schema.mjs +13 -0
  216. package/scripts/lib/config.mjs +85 -10
  217. package/scripts/lib/convergence-monitor.mjs +74 -11
  218. package/scripts/lib/ecosystem-health.mjs +11 -0
  219. package/scripts/lib/eval/engine.mjs +421 -53
  220. package/scripts/lib/eval/judge.mjs +463 -40
  221. package/scripts/lib/eval/schema.mjs +10 -1
  222. package/scripts/lib/events-rotation.mjs +221 -25
  223. package/scripts/lib/events-schema.mjs +114 -0
  224. package/scripts/lib/events.mjs +545 -7
  225. package/scripts/lib/fleet-protocol.mjs +270 -0
  226. package/scripts/lib/frontmatter-guard.mjs +21 -10
  227. package/scripts/lib/gates/gate-baseline.mjs +40 -5
  228. package/scripts/lib/gates/gate-full.mjs +35 -5
  229. package/scripts/lib/gates/gate-helpers.mjs +336 -23
  230. package/scripts/lib/gates/gate-incremental.mjs +49 -23
  231. package/scripts/lib/gates/gate-per-file.mjs +42 -8
  232. package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +6 -1
  233. package/scripts/lib/instruction-budget-guard.mjs +208 -8
  234. package/scripts/lib/io.mjs +42 -8
  235. package/scripts/lib/issue-close-strip-labels.mjs +207 -49
  236. package/scripts/lib/js-mask.mjs +197 -0
  237. package/scripts/lib/learnings/evolve-telemetry.mjs +11 -7
  238. package/scripts/lib/learnings/expiry-sweep.mjs +34 -3
  239. package/scripts/lib/learnings/io.mjs +154 -26
  240. package/scripts/lib/learnings/schema.mjs +163 -15
  241. package/scripts/lib/learnings/sizing-subject.mjs +2 -2
  242. package/scripts/lib/maintenance-due-banner.mjs +53 -88
  243. package/scripts/lib/memory-proposals/schema.mjs +11 -5
  244. package/scripts/lib/named-baseline-resolver.mjs +53 -28
  245. package/scripts/lib/named-vault-resolver.mjs +104 -5
  246. package/scripts/lib/orphan-reaper/defaults.mjs +41 -0
  247. package/scripts/lib/orphan-reaper/ps-snapshot.mjs +181 -0
  248. package/scripts/lib/orphan-reaper/reaper-audit.mjs +291 -0
  249. package/scripts/lib/orphan-reaper/reaper-decide.mjs +395 -0
  250. package/scripts/lib/orphan-reaper/scan-throttle.mjs +92 -0
  251. package/scripts/lib/orphan-reaper/scan.mjs +506 -0
  252. package/scripts/lib/orphan-reaper.mjs +316 -0
  253. package/scripts/lib/owner-yaml.mjs +104 -6
  254. package/scripts/lib/peer-cards/merger.mjs +48 -10
  255. package/scripts/lib/peer-cards/reader.mjs +78 -2
  256. package/scripts/lib/persona-panel/catalog-loader.mjs +1 -1
  257. package/scripts/lib/process-group.mjs +950 -0
  258. package/scripts/lib/project-hygiene.mjs +21 -1
  259. package/scripts/lib/quality-gate.mjs +152 -33
  260. package/scripts/lib/reconcile/backlog.mjs +368 -0
  261. package/scripts/lib/reconcile/engine.mjs +55 -188
  262. package/scripts/lib/reconcile/rule-expiry-sweep.mjs +302 -60
  263. package/scripts/lib/reconcile/sanitize.mjs +69 -3
  264. package/scripts/lib/reconcile-nudge-banner.mjs +138 -45
  265. package/scripts/lib/resource-probe/parsers.mjs +31 -0
  266. package/scripts/lib/resource-probe.mjs +1 -1
  267. package/scripts/lib/rule-loader.mjs +141 -74
  268. package/scripts/lib/rules-sync.mjs +27 -12
  269. package/scripts/lib/scope-baseline.mjs +3 -4
  270. package/scripts/lib/scope-echo.mjs +39 -2
  271. package/scripts/lib/scope-gate.mjs +605 -1
  272. package/scripts/lib/session-close-backfill.mjs +33 -6
  273. package/scripts/lib/session-id.mjs +9 -20
  274. package/scripts/lib/session-invocation.mjs +20 -0
  275. package/scripts/lib/session-record-repair.mjs +183 -26
  276. package/scripts/lib/session-registry.mjs +27 -2
  277. package/scripts/lib/session-schema/constants.mjs +56 -2
  278. package/scripts/lib/session-schema/normalizer.mjs +56 -4
  279. package/scripts/lib/session-schema/validator.mjs +28 -1
  280. package/scripts/lib/session-schema.mjs +8 -3
  281. package/scripts/lib/session-start-probes.mjs +95 -10
  282. package/scripts/lib/session-token-rollup.mjs +245 -52
  283. package/scripts/lib/sessions-canonical.mjs +118 -4
  284. package/scripts/lib/sessions-integrity-banner.mjs +7 -1
  285. package/scripts/lib/sessions-staleness-banner.mjs +193 -51
  286. package/scripts/lib/sh-quote.mjs +29 -0
  287. package/scripts/lib/skill-evidence-window.mjs +891 -0
  288. package/scripts/lib/skill-evolution/candidate-intake.mjs +133 -12
  289. package/scripts/lib/skill-evolution/engine.mjs +18 -9
  290. package/scripts/lib/skill-judge.mjs +45 -3
  291. package/scripts/lib/subagents-schema.mjs +30 -3
  292. package/scripts/lib/tail-window.mjs +56 -0
  293. package/scripts/lib/telemetry/pricing.mjs +118 -71
  294. package/scripts/lib/telemetry/schema.mjs +30 -0
  295. package/scripts/lib/telemetry/sync.mjs +61 -6
  296. package/scripts/lib/telemetry-flush-health-banner.mjs +4 -22
  297. package/scripts/lib/test-runner/issue-reconcile.mjs +48 -16
  298. package/scripts/lib/tests-src-ratio.mjs +140 -23
  299. package/scripts/lib/tmux-layout/layouts.mjs +1 -11
  300. package/scripts/lib/tmux-layout/telemetry-stats.mjs +72 -13
  301. package/scripts/lib/tmux-layout/tmux-shell.mjs +2 -11
  302. package/scripts/lib/user-invocable-skills.mjs +23 -3
  303. package/scripts/lib/ux-grill/reconcile.mjs +48 -22
  304. package/scripts/lib/validate/check-agents-skills.mjs +26 -15
  305. package/scripts/lib/validate/check-agents.mjs +1 -1
  306. package/scripts/lib/validate/check-cursor-adapter.mjs +1 -0
  307. package/scripts/lib/validate/check-entry-guard.mjs +13 -50
  308. package/scripts/lib/validate/check-hook-entry-guards.mjs +636 -0
  309. package/scripts/lib/validate/check-hooks-symmetry.mjs +5 -0
  310. package/scripts/lib/validate/check-learnings-shell-writes.mjs +214 -0
  311. package/scripts/lib/validate/check-pi-prompts.mjs +1 -0
  312. package/scripts/lib/validate/check-rules.mjs +7 -5
  313. package/scripts/lib/validate/check-skill-links.mjs +9 -1
  314. package/scripts/lib/validate/check-skill-script-paths.mjs +239 -27
  315. package/scripts/lib/validate/check-test-git-config-target.mjs +24 -34
  316. package/scripts/lib/validate/check-test-value-bans.mjs +87 -14
  317. package/scripts/lib/validate/check-unicode-safety.mjs +1 -0
  318. package/scripts/lib/validate/check-untracked-test-deps.mjs +7 -102
  319. package/scripts/lib/validate/check-unwired-features.mjs +130 -27
  320. package/scripts/lib/validate/check-validator-registration.mjs +34 -10
  321. package/scripts/lib/validate/confidential-names.mjs +10 -0
  322. package/scripts/lib/validate-vendored-rules.mjs +210 -84
  323. package/scripts/lib/vault-mirror/namespace.mjs +46 -8
  324. package/scripts/lib/vault-mirror/process.mjs +10 -3
  325. package/scripts/lib/vault-mirror/render-sessions.mjs +12 -2
  326. package/scripts/lib/vault-mirror/telemetry.mjs +8 -1
  327. package/scripts/lib/vault-status/board-writer.mjs +48 -11
  328. package/scripts/lib/vault-status/narrative-mirror.mjs +71 -16
  329. package/scripts/lib/vault-yaml.mjs +118 -0
  330. package/scripts/lib/wave-executor/dispatch-common.mjs +10 -18
  331. package/scripts/lib/wave-executor/foreign-dispatch.mjs +1 -1
  332. package/scripts/lib/wave-executor/remote-dispatch.mjs +1 -1
  333. package/scripts/lib/wave-resource-gate.mjs +34 -8
  334. package/scripts/lib/worktree/lifecycle.mjs +153 -1
  335. package/scripts/memory-propose.mjs +18 -5
  336. package/scripts/release-session-lock.mjs +306 -0
  337. package/scripts/release.mjs +40 -8
  338. package/scripts/repair-invalid-sessions.mjs +37 -4
  339. package/scripts/resolve-session-invocation.mjs +59 -0
  340. package/scripts/run-migrate-v2-cross-repo.mjs +158 -30
  341. package/scripts/run-quality-gate.mjs +357 -197
  342. package/scripts/site-numbers.mjs +163 -5
  343. package/scripts/sweep-expired-learnings.mjs +56 -5
  344. package/scripts/sweep-expired-rules.mjs +16 -4
  345. package/scripts/validate-plugin.mjs +19 -0
  346. package/scripts/validate-wave-scope.mjs +32 -105
  347. package/scripts/vault-integration-watcher.mjs +2 -1
  348. package/scripts/vault-mirror.mjs +81 -47
  349. package/scripts/wave-scope-binding.mjs +2 -1
  350. package/skills/_shared/config-reading.md +3 -3
  351. package/skills/_shared/fleet-protocol.md +131 -0
  352. package/skills/_shared/platform-tools.md +23 -11
  353. package/skills/_shared/state-ownership.md +5 -0
  354. package/skills/autopilot/SKILL.md +47 -18
  355. package/skills/bootstrap/SKILL.md +1 -1
  356. package/skills/bootstrap/_shared-template.md +1 -1
  357. package/skills/bootstrap/fast-template.md +1 -1
  358. package/skills/bootstrap/private-contract.md +2 -1
  359. package/skills/bootstrap/public-fallback.md +6 -3
  360. package/skills/bootstrap/references/bootstrap-retroactive-flow.md +2 -1
  361. package/skills/claude-md-drift-check/SKILL.md +10 -10
  362. package/skills/claude-md-drift-check/checker.mjs +26 -18
  363. package/skills/convergence-monitoring/README.md +8 -1
  364. package/skills/convergence-monitoring/SIGNALS.md +50 -6
  365. package/skills/convergence-monitoring/SKILL.md +15 -6
  366. package/skills/eval/SKILL.md +39 -24
  367. package/skills/eval/rubric-v1.md +1 -0
  368. package/skills/eval/rubric-v2.md +457 -0
  369. package/skills/evolve/SKILL.md +3 -3
  370. package/skills/evolve/references/evolve-analyze-mode.md +10 -6
  371. package/skills/evolve/references/evolve-dialectic-mode.md +42 -25
  372. package/skills/gitlab-ops/SKILL.md +3 -2
  373. package/skills/memory-cleanup/SKILL.md +1 -1
  374. package/skills/navigator/SKILL.md +193 -0
  375. package/skills/navigator/references/account-check.sh +87 -0
  376. package/skills/navigator/references/fleet-decisions.mjs +231 -0
  377. package/skills/navigator/references/slot-check.sh +114 -0
  378. package/skills/npm-publish/SKILL.md +1 -1
  379. package/skills/persona-panel/SKILL.md +2 -2
  380. package/skills/persona-panel/persona-format.md +2 -2
  381. package/skills/persona-panel/presets/designer-lens.md +1 -1
  382. package/skills/persona-panel/presets/engineer-lens.md +1 -1
  383. package/skills/persona-panel/presets/pm-lens.md +1 -1
  384. package/skills/plan/mode-retro.md +19 -4
  385. package/skills/quality-gates/SKILL.md +6 -4
  386. package/skills/reconcile/SKILL.md +11 -0
  387. package/skills/remote-offload/SKILL.md +4 -2
  388. package/skills/session-end/SKILL.md +13 -16
  389. package/skills/session-end/discovery-scan.md +1 -1
  390. package/skills/session-end/learning-patterns.md +22 -12
  391. package/skills/session-end/metrics-collection.md +5 -6
  392. package/skills/session-end/phase-3-6-tail.md +55 -9
  393. package/skills/session-end/references/phase-3-documentation-updates.md +2 -2
  394. package/skills/session-end/references/phase-4a-worktree-cleanup.md +2 -0
  395. package/skills/session-end/references/phase-5-issue-cleanup.md +9 -14
  396. package/skills/session-end/references/session-summary-template.md +1 -1
  397. package/skills/session-end/session-metrics-write.md +32 -60
  398. package/skills/session-plan/SKILL.md +17 -8
  399. package/skills/session-plan/references/session-plan-task-classification.md +2 -2
  400. package/skills/session-start/SKILL.md +6 -0
  401. package/skills/session-start/references/operations-contract.md +4 -0
  402. package/skills/session-start/references/phase-1-7-vault-status-board.md +1 -1
  403. package/skills/session-start/references/phase-4-ssot-environment-check.md +4 -3
  404. package/skills/test-audit/SKILL.md +152 -0
  405. package/skills/test-audit/references/campaign.md +111 -0
  406. package/skills/test-audit/references/mutate.sh +50 -0
  407. package/skills/ux-grill/SKILL.md +1 -1
  408. package/skills/wave-executor/SKILL.md +9 -5
  409. package/skills/wave-executor/circuit-breaker.md +2 -0
  410. package/skills/wave-executor/references/wave-executor-state-init.md +8 -3
  411. package/skills/wave-executor/references/wave-loop-dispatch.md +5 -2
  412. package/skills/wave-executor/references/wave-loop-review.md +3 -5
  413. package/templates/personas/README.md +5 -5
  414. package/templates/personas/accounting-compliance.v1.md +1 -1
  415. package/templates/personas/accounting-tax-advisor.v1.md +1 -1
  416. package/templates/personas/buyer-p1-cto.v1.md +1 -1
  417. package/templates/personas/buyer-p2-kanzlei.v1.md +1 -1
  418. package/templates/personas/buyer-p3-build.v1.md +1 -1
  419. package/templates/personas/buyer-p4-tech-veto.v1.md +1 -1
  420. package/templates/personas/buyer-p5-solo.v1.md +1 -1
  421. package/templates/personas/buyer-p6-ld.v1.md +1 -1
  422. package/templates/personas/klima-ai-expert.v1.md +1 -1
  423. package/templates/personas/klima-physicist.v1.md +1 -1
  424. package/.cursor/commands/convergence-monitoring.md +0 -13
  425. package/.cursor/commands/npm-publish.md +0 -13
  426. package/pi/prompts/convergence-monitoring.md +0 -11
  427. package/pi/prompts/npm-publish.md +0 -11
@@ -410,6 +410,14 @@ The gate never probes the network. Without a readiness witness no host counts as
410
410
 
411
411
  Read by: `scripts/lib/config/remote-hosts.mjs`, `scripts/lib/wave-resource-gate.mjs`.
412
412
 
413
+ `offload-first` (#1465) makes placement the first choice instead of the answer to pressure: with `true`, an offloadable role (`test` / `ui` / `perf`) goes to the first witnessed-ready declared host even when the gate verdict is `proceed`. It needs both a `remote-hosts` entry and a readiness witness to act; without them the wave stays local and the gate names the reason.
414
+
415
+ ```yaml
416
+ offload-first: false # true = offloadable roles go to a witnessed-ready remote host even on `proceed`
417
+ ```
418
+
419
+ Read by: `scripts/lib/config.mjs`, `scripts/lib/config-schema.mjs`, `scripts/lib/wave-resource-gate.mjs`.
420
+
413
421
  ## Evolve Extra Sources (#638)
414
422
 
415
423
  Opt-in EXTRA learning sources for `/evolve`. A `domain-regression` measurement (e.g. an eval-learn harness) runs OUT-OF-BAND and writes a sidecar JSON; `/evolve` then READS each declared sidecar and emits a `domain-regression` learning candidate per persistent regression flag. `/evolve` NEVER runs the measurement itself — this is a strict read-only consumption contract. Absent/empty ⇒ `[]` ⇒ no extra sources are read.
@@ -477,9 +485,11 @@ Opt-in mode for `/evolve --dialectic` and session-end Phase 3.6.7 auto-trigger.
477
485
  dialectic:
478
486
  cadence: 5 # integer ≥ 0; 0 = kill-switch (no critique dispatches)
479
487
  model: haiku # haiku | sonnet | opus — fail-fast on unknown value
480
- budget-tokens: 8000 # integer ≥ 0 — input token budget per critique call
488
+ budget-tokens: 32000 # integer ≥ 0 — input token CEILING per critique call; the pre-dispatch estimate aborts above it
481
489
  ```
482
490
 
491
+ `32000` — card bodies + steering alone estimated ~12k tokens in this repo, a consumer repo measured 30,262 (2026-09-18); the value is a ceiling, the pre-dispatch estimate aborts above it.
492
+
483
493
  Read by: `scripts/lib/config/dialectic.mjs`, `scripts/lib/auto-dialectic.mjs`, `skills/session-end/SKILL.md` Phase 3.6.7, `skills/evolve/SKILL.md` Phase 6.
484
494
 
485
495
  ## Eval (#803)
@@ -693,6 +703,8 @@ vcs: gitlab
693
703
  gitlab-host: gitlab.example.com # only if remote URL doesn't expose it
694
704
  mirror: github
695
705
  cross-repos: []
706
+ cross-repo:
707
+ projects: [~/Projects/my-app] # block form (#469) — NOT the flat `cross-repos` above; INLINE list only
696
708
  pencil: path/to/design.pen # design-code alignment input
697
709
  ecosystem-health: true
698
710
  health-endpoints: []
@@ -745,6 +757,7 @@ auto-commit-per-wave: false # opt-in: commit after each wave's Qualit
745
757
  # Heavy-repo preflight & worktree hygiene (HR-003)
746
758
  heavy-repo: false # true clamps the dispatched agent count to agents-per-wave
747
759
  worktree-cleanup: default # default | aggressive
760
+ worktree-exclude: [node_modules, dist, build, .next, .nuxt, coverage, .cache, .turbo, .vercel, out] # default; top-level dirs removed from a createWorktree() worktree; null disables
748
761
 
749
762
  # Env-aware
750
763
  resource-awareness: true
@@ -780,6 +793,15 @@ vault-integration:
780
793
  vault-name: # optional (#660) — per-project vault namespace override; null/absent → deriveRepo()
781
794
  gitlab-groups: []
782
795
 
796
+ # GitLab portfolio dashboard — /portfolio (GH #41); needs vault-integration.vault-dir
797
+ gitlab-portfolio:
798
+ enabled: false # opt-in; only the literal true enables it
799
+ mode: warn # warn | strict | off
800
+ stale-days: 30 # integer ≥ 1
801
+ critical-labels: # BLOCK list only — an inline [a, b] is silently ignored
802
+ - priority::critical
803
+ - priority::high
804
+
783
805
  # Vault mirror quality thresholds
784
806
  vault-mirror:
785
807
  quality:
@@ -842,7 +864,7 @@ persona-gate-wave:
842
864
  after: quality # quality | impl-polish
843
865
  threshold: all # all | any | <m>-of-<n>
844
866
  personas: [] # persona slugs the panel dispatches
845
- dispatch-model: claude-opus-4-7
867
+ dispatch-model: opus # alias or full model ID — default 'opus'
846
868
  mode: off # off | warn | strict — enabled: true with mode: off never fires
847
869
 
848
870
  # Agentic test orchestrator (/test) — run profiles and artifact retention
@@ -872,6 +894,7 @@ remote-hosts:
872
894
  roles-allowed: [test, ui, perf] # subset of test|ui|perf (default: all three)
873
895
  repo-path: ~/Projects/Alice # optional SAFE path (default: null)
874
896
  claude-path: ~/.local/bin/claude # optional SAFE path (default: null)
897
+ offload-first: false # #1465: true = offloadable roles go to a witnessed-ready remote host even on `proceed`
875
898
 
876
899
  # Evolve extra-sources — opt-in EXTRA /evolve learning sources (#638)
877
900
  evolve:
@@ -898,7 +921,7 @@ discovery-validator:
898
921
  dialectic:
899
922
  cadence: 5 # integer ≥ 0; 0 = kill-switch (no critique dispatches)
900
923
  model: haiku # haiku | sonnet | opus — fail-fast on unknown value
901
- budget-tokens: 8000 # integer ≥ 0 — input token budget per critique call
924
+ budget-tokens: 32000 # integer ≥ 0 — input token ceiling per critique call (aborts above, never truncates)
902
925
 
903
926
  # Eval — Standard v1 harness config surface (#809 / Epic #803)
904
927
  eval:
@@ -995,6 +1018,21 @@ config-protection:
995
1018
  mode: warn # warn | strict (strict blocks loosening, exit 2)
996
1019
  allow-config-weakening: false # per-session bypass (mirrors allow-destructive-ops)
997
1020
 
1021
+ # Orphan-process watchdog (#1425 / #1432) — DEFAULT OFF; arm only after measuring its firing rate (HR-101)
1022
+ reaper:
1023
+ enabled: false # only an explicit `true` arms it; it can send signals to processes
1024
+ mode: report # report (decide + audit only) | kill (send signals — PRD Stufe 2)
1025
+ min-age-seconds: 300 # DevWatchdog's hard limit for tsgo; the 2026-09-20 orphans were 7–17 min old
1026
+ min-scan-interval-seconds: 30 # throttle; keeps a PostToolBatch storm from taxing every tool call
1027
+ kill-grace-ms: 10000 # DEFAULT_KILL_GRACE_MS from process-group.mjs:52 — repo convention
1028
+ verify-wait-ms: 500 # wait before reading the effect back (a sent signal proves nothing)
1029
+ max-hook-latency-ms: 50 # ceiling a scan may delay a hook by
1030
+ false-alarm-window: 50 # rolling window of audit decisions the HR-101 10 % rate is judged over
1031
+
1032
+ # Quality-gate path B ceiling (#1425 A3) — SO_GATE_TIMEOUT_MS still overrides this per run
1033
+ gate:
1034
+ timeout-path-b-ms: 900000 # 15 min; same cap as GATE_TIMEOUT_MS on path A
1035
+
998
1036
  # Agent mapping
999
1037
  agent-mapping:
1000
1038
  impl: code-implementer
package/docs/telemetry.md CHANGED
@@ -58,6 +58,7 @@ projection unit test enforces the drop of any non-whitelisted input field.
58
58
  | `fleet_self_declared` | Boolean, optional — the client's own claim that this send came from an operator host. **Self-declared, and the name says so on purpose:** the authoritative classification is server-side (see below). Derived from the *resolved consent state* (`enabled-fleet` from an `owner.yaml` opt-in, or `enabled-env` from `SO_TELEMETRY=1`), no longer from a raw `owner.yaml` read. |
59
59
  | `session_profile` | Optional — the STATE.md frontmatter `session-profile`, and **whitelisted profile names only** (today exactly `ultradeep`). Anything else — a value your repo invented, a client name, a typo — is **omitted from the ping entirely**: never sent verbatim, and never flattened to `other` either. A SECOND axis beside `session_type`, never a substitute for it: an ultradeep session is `session_type: "deep"` PLUS `session_profile: "ultradeep"`. **Absent when no profile is set or the profile is not on the whitelist** (the key is omitted, never `null`), including on derived pings, which never invent one. The whitelist is enforced twice — client-side before the send, and again server-side, which rejects a record carrying an unlisted profile rather than storing it. |
60
60
  | `session_record` | Optional — WHICH source the session facts in this ping came from: `ledger` (a matching `sessions.jsonl` record), `derived` (reconstructed from `events.jsonl`), `absent` (neither). When `absent`, `session_type` is `unknown` and `duration_bucket` is **not a measurement**. |
61
+ | `ledger_complete` | Optional boolean — whether the `events.jsonl` read behind a reconstruction saw every rotation archive (`true`) or measured at least one gap (`false`, e.g. a deleted archive). A SECOND axis beside `session_record`, never a fourth provenance token: it says how whole the SOURCE was, not which source was used. **Absent when nothing was measured** — no read happened, the read threw, or the facts came straight from the ledger (that path never opens `events.jsonl`). The key is omitted, never `null` and never a stand-in `false`. |
61
62
  | `session_type` | One of `housekeeping`, `feature`, `deep`, `other`, `unknown`. `other` means MEASURED but not one of the three modes; `unknown` means NOT MEASURED. Before 2026-09-06 both collapsed to `other`. |
62
63
  | `duration_bucket` | One of `<15m`, `15-60m`, `1-3h`, `>3h` — a coarse bucket, never an exact duration. |
63
64
  | `skills[]` | Names of invoked skills, filtered against the shipped plugin roster — any name not in that roster becomes `"other"`. |
@@ -359,6 +360,7 @@ generation, then drop the old one.
359
360
  | `fleet` | deprecated alias, same value | **2027-03-06** |
360
361
  | `session_record` | new (`ledger` \| `derived` \| `absent`) | — |
361
362
  | `session_profile` | new (STATE.md `session-profile`, whitelisted names only; omitted when unset or unlisted) | — |
363
+ | `ledger_complete` | new 2026-09-21 (boolean; omitted when nothing was measured, incl. every `ledger`-sourced ping) | — |
362
364
 
363
365
  Client-side the frozen whitelist is split in two: `USAGE_PING_FIELDS` (the
364
366
  REQUIRED v1 contract, which `tests/telemetry/parity.test.mjs` asserts the
@@ -1,6 +1,6 @@
1
1
  {
2
- "generated_at": "2026-09-16T17:00:47.173Z",
3
- "head": "1ef26415ce80164bd7e27705a4e7d97c37c72126",
2
+ "generated_at": "2026-10-01T17:18:47.118Z",
3
+ "head": "ffc5929f12df0b5fd7c75d9708a3aa1a5dc6fa45",
4
4
  "entries": [
5
5
  {
6
6
  "file": "hooks/_lib/atomic-json.mjs",
@@ -61,6 +61,7 @@
61
61
  "pre-bash-sessions-ledger-guard.mjs",
62
62
  "pre-bash-staging-fence.mjs",
63
63
  "pre-bash-templates-first.mjs",
64
+ "pre-edit-sessions-ledger-guard.mjs",
64
65
  "pre-task-scope-disjoint.mjs",
65
66
  "skill-invocation-telemetry.mjs",
66
67
  "subagent-telemetry.mjs"
@@ -239,6 +240,12 @@
239
240
  "pre-bash-templates-first.mjs"
240
241
  ]
241
242
  },
243
+ {
244
+ "file": "hooks/pre-edit-sessions-ledger-guard.mjs",
245
+ "reachable_from": [
246
+ "pre-edit-sessions-ledger-guard.mjs"
247
+ ]
248
+ },
242
249
  {
243
250
  "file": "hooks/pre-task-scope-disjoint.mjs",
244
251
  "reachable_from": [
@@ -307,6 +314,7 @@
307
314
  "post-tool-batch-wave-signal.mjs",
308
315
  "pre-bash-issue-budget.mjs",
309
316
  "pre-bash-memory-propose-audit.mjs",
317
+ "pre-bash-staging-fence.mjs",
310
318
  "pre-bash-templates-first.mjs"
311
319
  ]
312
320
  },
@@ -522,6 +530,14 @@
522
530
  "post-tooluse-frontend-slop.mjs"
523
531
  ]
524
532
  },
533
+ {
534
+ "file": "scripts/lib/config/gate.mjs",
535
+ "reachable_from": [
536
+ "on-session-end.mjs",
537
+ "on-session-start.mjs",
538
+ "post-edit-validate.mjs"
539
+ ]
540
+ },
525
541
  {
526
542
  "file": "scripts/lib/config/gitlab-portfolio.mjs",
527
543
  "reachable_from": [
@@ -627,6 +643,16 @@
627
643
  "skill-invocation-telemetry.mjs"
628
644
  ]
629
645
  },
646
+ {
647
+ "file": "scripts/lib/config/reaper.mjs",
648
+ "reachable_from": [
649
+ "on-session-end.mjs",
650
+ "on-session-start.mjs",
651
+ "on-stop.mjs",
652
+ "post-edit-validate.mjs",
653
+ "post-tool-batch-wave-signal.mjs"
654
+ ]
655
+ },
630
656
  {
631
657
  "file": "scripts/lib/config/reconcile.mjs",
632
658
  "reachable_from": [
@@ -844,7 +870,8 @@
844
870
  "post-tooluse-frontend-slop.mjs",
845
871
  "pre-auq-clarity.mjs",
846
872
  "pre-bash-memory-propose-audit.mjs",
847
- "pre-task-scope-disjoint.mjs"
873
+ "pre-task-scope-disjoint.mjs",
874
+ "skill-invocation-telemetry.mjs"
848
875
  ]
849
876
  },
850
877
  {
@@ -866,7 +893,8 @@
866
893
  "post-tooluse-frontend-slop.mjs",
867
894
  "pre-auq-clarity.mjs",
868
895
  "pre-bash-memory-propose-audit.mjs",
869
- "pre-task-scope-disjoint.mjs"
896
+ "pre-task-scope-disjoint.mjs",
897
+ "skill-invocation-telemetry.mjs"
870
898
  ]
871
899
  },
872
900
  {
@@ -925,6 +953,12 @@
925
953
  "skill-invocation-telemetry.mjs"
926
954
  ]
927
955
  },
956
+ {
957
+ "file": "scripts/lib/fleet-protocol.mjs",
958
+ "reachable_from": [
959
+ "on-session-start.mjs"
960
+ ]
961
+ },
928
962
  {
929
963
  "file": "scripts/lib/frontend-detect/detect.mjs",
930
964
  "reachable_from": [
@@ -994,6 +1028,7 @@
994
1028
  "pre-bash-sessions-ledger-guard.mjs",
995
1029
  "pre-bash-staging-fence.mjs",
996
1030
  "pre-bash-templates-first.mjs",
1031
+ "pre-edit-sessions-ledger-guard.mjs",
997
1032
  "pre-task-scope-disjoint.mjs",
998
1033
  "skill-invocation-telemetry.mjs"
999
1034
  ]
@@ -1001,11 +1036,32 @@
1001
1036
  {
1002
1037
  "file": "scripts/lib/is-main-module.mjs",
1003
1038
  "reachable_from": [
1039
+ "config-protection.mjs",
1040
+ "cwd-change-restore.mjs",
1041
+ "enforce-commands.mjs",
1004
1042
  "enforce-scope.mjs",
1043
+ "loop-guard.mjs",
1005
1044
  "on-session-end.mjs",
1006
1045
  "on-session-start.mjs",
1046
+ "on-stop.mjs",
1047
+ "operator-steer.mjs",
1048
+ "post-bash-issue-budget-refund.mjs",
1049
+ "post-edit-import-probe.mjs",
1050
+ "post-edit-validate.mjs",
1051
+ "post-subagent-discovery-validator.mjs",
1052
+ "post-tool-batch-wave-signal.mjs",
1053
+ "post-tool-failure-corrective-context.mjs",
1054
+ "post-tooluse-frontend-slop.mjs",
1055
+ "pre-bash-destructive-guard.mjs",
1056
+ "pre-bash-issue-budget.mjs",
1057
+ "pre-bash-memory-propose-audit.mjs",
1058
+ "pre-bash-sessions-ledger-guard.mjs",
1059
+ "pre-bash-staging-fence.mjs",
1060
+ "pre-bash-templates-first.mjs",
1061
+ "pre-edit-sessions-ledger-guard.mjs",
1007
1062
  "pre-task-scope-disjoint.mjs",
1008
- "skill-invocation-telemetry.mjs"
1063
+ "skill-invocation-telemetry.mjs",
1064
+ "subagent-telemetry.mjs"
1009
1065
  ]
1010
1066
  },
1011
1067
  {
@@ -1102,6 +1158,20 @@
1102
1158
  "post-edit-validate.mjs"
1103
1159
  ]
1104
1160
  },
1161
+ {
1162
+ "file": "scripts/lib/orphan-reaper/defaults.mjs",
1163
+ "reachable_from": [
1164
+ "on-stop.mjs",
1165
+ "post-tool-batch-wave-signal.mjs"
1166
+ ]
1167
+ },
1168
+ {
1169
+ "file": "scripts/lib/orphan-reaper/scan-throttle.mjs",
1170
+ "reachable_from": [
1171
+ "on-stop.mjs",
1172
+ "post-tool-batch-wave-signal.mjs"
1173
+ ]
1174
+ },
1105
1175
  {
1106
1176
  "file": "scripts/lib/owner-yaml.mjs",
1107
1177
  "reachable_from": [
@@ -1272,7 +1342,8 @@
1272
1342
  "post-tooluse-frontend-slop.mjs",
1273
1343
  "pre-auq-clarity.mjs",
1274
1344
  "pre-bash-memory-propose-audit.mjs",
1275
- "pre-task-scope-disjoint.mjs"
1345
+ "pre-task-scope-disjoint.mjs",
1346
+ "skill-invocation-telemetry.mjs"
1276
1347
  ]
1277
1348
  },
1278
1349
  {
@@ -1511,6 +1582,16 @@
1511
1582
  "skill-invocation-telemetry.mjs"
1512
1583
  ]
1513
1584
  },
1585
+ {
1586
+ "file": "scripts/lib/tail-window.mjs",
1587
+ "reachable_from": [
1588
+ "on-session-end.mjs",
1589
+ "on-session-start.mjs",
1590
+ "on-stop.mjs",
1591
+ "post-subagent-discovery-validator.mjs",
1592
+ "subagent-telemetry.mjs"
1593
+ ]
1594
+ },
1514
1595
  {
1515
1596
  "file": "scripts/lib/telemetry/anon-id.mjs",
1516
1597
  "reachable_from": [