peaks-loop 4.0.54 → 4.1.1

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 (1068) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README-en.md +16 -1
  3. package/README.md +15 -1
  4. package/config/eslint/.peaks-rules.cjs +158 -13
  5. package/config/eslint/tsconfig.lint.json +47 -0
  6. package/dist/cli/cli-envelope.d.ts +114 -0
  7. package/dist/cli/cli-envelope.js +85 -0
  8. package/dist/cli/cli-helpers.d.ts +1 -1
  9. package/dist/cli/cli-helpers.js +8 -4
  10. package/dist/cli/commands/_cli-error-envelope.js +1 -1
  11. package/dist/cli/commands/_register.js +86 -39
  12. package/dist/cli/commands/_super.js +40 -7
  13. package/dist/cli/commands/adapter-commands-s2a.js +8 -7
  14. package/dist/cli/commands/adapter-commands.d.ts +2 -2
  15. package/dist/cli/commands/adapter-commands.js +7 -8
  16. package/dist/cli/commands/api-diff-commands.js +5 -4
  17. package/dist/cli/commands/asset-commands.d.ts +2 -2
  18. package/dist/cli/commands/asset-commands.js +135 -132
  19. package/dist/cli/commands/audit-commands.d.ts +1 -1
  20. package/dist/cli/commands/audit-commands.js +75 -32
  21. package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
  22. package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
  23. package/dist/cli/commands/baseline-commands.js +34 -9
  24. package/dist/cli/commands/bee-commands.d.ts +1 -1
  25. package/dist/cli/commands/bee-commands.js +18 -21
  26. package/dist/cli/commands/best-practice-scan-command.js +6 -34
  27. package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
  28. package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
  29. package/dist/cli/commands/capability-commands.d.ts +1 -1
  30. package/dist/cli/commands/capability-commands.js +14 -4
  31. package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
  32. package/dist/cli/commands/changeset-commands.js +21 -18
  33. package/dist/cli/commands/code-gate-command.js +9 -2
  34. package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
  35. package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
  36. package/dist/cli/commands/code-job-shape-commands.js +21 -45
  37. package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
  38. package/dist/cli/commands/code-mode-gate-commands.js +19 -199
  39. package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
  40. package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
  41. package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
  42. package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
  43. package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
  44. package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
  45. package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
  46. package/dist/cli/commands/code-review-commands.js +18 -3
  47. package/dist/cli/commands/code-run-command.js +44 -7
  48. package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
  49. package/dist/cli/commands/code-runtime-commands.js +105 -73
  50. package/dist/cli/commands/codegraph-commands.js +11 -6
  51. package/dist/cli/commands/codegraph-status-command.js +6 -2
  52. package/dist/cli/commands/comments-commands.d.ts +14 -0
  53. package/dist/cli/commands/comments-commands.js +96 -0
  54. package/dist/cli/commands/compact-command.js +52 -26
  55. package/dist/cli/commands/complexity-commands.js +6 -7
  56. package/dist/cli/commands/config-commands.d.ts +1 -1
  57. package/dist/cli/commands/config-commands.js +33 -9
  58. package/dist/cli/commands/container-commands.js +39 -15
  59. package/dist/cli/commands/context-commands.d.ts +1 -1
  60. package/dist/cli/commands/context-commands.js +40 -13
  61. package/dist/cli/commands/core/artifacts-command.js +11 -3
  62. package/dist/cli/commands/core/binding-commands.js +9 -6
  63. package/dist/cli/commands/core/doctor-command.js +7 -4
  64. package/dist/cli/commands/core/memory-command.js +57 -21
  65. package/dist/cli/commands/core/proxy-command.js +3 -1
  66. package/dist/cli/commands/core/session-command.js +16 -8
  67. package/dist/cli/commands/core/skill-command.js +32 -17
  68. package/dist/cli/commands/core/standards-command.js +56 -14
  69. package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
  70. package/dist/cli/commands/cron-commands-actions.js +128 -0
  71. package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
  72. package/dist/cli/commands/cron-commands-schedule.js +151 -0
  73. package/dist/cli/commands/cron-commands.d.ts +35 -32
  74. package/dist/cli/commands/cron-commands.js +167 -211
  75. package/dist/cli/commands/cron-scheduler-commands.js +40 -20
  76. package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
  77. package/dist/cli/commands/cron-scheduler-persist.js +171 -0
  78. package/dist/cli/commands/dashboard-long-run.js +45 -14
  79. package/dist/cli/commands/dashboard-summary.js +15 -5
  80. package/dist/cli/commands/dispatch-commands.js +65 -32
  81. package/dist/cli/commands/dispatch-from-dag.js +9 -10
  82. package/dist/cli/commands/doc-commands.js +8 -9
  83. package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
  84. package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
  85. package/dist/cli/commands/e2e-verify-env.js +19 -0
  86. package/dist/cli/commands/e2e-verify.d.ts +3 -14
  87. package/dist/cli/commands/e2e-verify.js +49 -29
  88. package/dist/cli/commands/ecc-commands.d.ts +18 -23
  89. package/dist/cli/commands/ecc-commands.js +39 -36
  90. package/dist/cli/commands/evidence-commands.js +10 -6
  91. package/dist/cli/commands/evolution-commands.d.ts +2 -2
  92. package/dist/cli/commands/evolution-commands.js +109 -115
  93. package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
  94. package/dist/cli/commands/feedback-commands-helpers.js +33 -0
  95. package/dist/cli/commands/feedback-commands.js +15 -38
  96. package/dist/cli/commands/final-review-commands.d.ts +1 -1
  97. package/dist/cli/commands/final-review-commands.js +24 -22
  98. package/dist/cli/commands/fixture-commands.d.ts +1 -1
  99. package/dist/cli/commands/fixture-commands.js +17 -6
  100. package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
  101. package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
  102. package/dist/cli/commands/fork-commands.js +19 -51
  103. package/dist/cli/commands/fresh-context-commands.js +3 -1
  104. package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
  105. package/dist/cli/commands/gate-commands-enforce.js +210 -0
  106. package/dist/cli/commands/gate-commands.d.ts +1 -1
  107. package/dist/cli/commands/gate-commands.js +85 -205
  108. package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
  109. package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
  110. package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
  111. package/dist/cli/commands/heartbeat-commands-action.js +192 -0
  112. package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
  113. package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
  114. package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
  115. package/dist/cli/commands/heartbeat-commands.js +19 -198
  116. package/dist/cli/commands/hook-handle.d.ts +1 -1
  117. package/dist/cli/commands/hook-handle.js +46 -13
  118. package/dist/cli/commands/hooks-commands.d.ts +1 -1
  119. package/dist/cli/commands/hooks-commands.js +18 -6
  120. package/dist/cli/commands/ide-commands.d.ts +1 -1
  121. package/dist/cli/commands/ide-commands.js +5 -3
  122. package/dist/cli/commands/impact-commands.js +8 -2
  123. package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
  124. package/dist/cli/commands/job-add-slice-command.js +151 -0
  125. package/dist/cli/commands/job-commands.d.ts +64 -0
  126. package/dist/cli/commands/job-commands.js +134 -63
  127. package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
  128. package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
  129. package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
  130. package/dist/cli/commands/lease-metrics-commands.js +21 -61
  131. package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
  132. package/dist/cli/commands/lease-stats-commands.js +9 -6
  133. package/dist/cli/commands/lint-commands.d.ts +9 -3
  134. package/dist/cli/commands/lint-commands.js +15 -8
  135. package/dist/cli/commands/log-commands.d.ts +1 -1
  136. package/dist/cli/commands/log-commands.js +8 -6
  137. package/dist/cli/commands/loop-commands.d.ts +1 -1
  138. package/dist/cli/commands/loop-commands.js +50 -50
  139. package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
  140. package/dist/cli/commands/loop-eval-commands.js +101 -30
  141. package/dist/cli/commands/memory-commands.js +21 -13
  142. package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
  143. package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
  144. package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
  145. package/dist/cli/commands/mut-commands-helpers.js +43 -0
  146. package/dist/cli/commands/mut-commands.js +16 -58
  147. package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
  148. package/dist/cli/commands/observability-commands-queries.js +113 -0
  149. package/dist/cli/commands/observability-commands.d.ts +1 -1
  150. package/dist/cli/commands/observability-commands.js +7 -92
  151. package/dist/cli/commands/openspec-commands.d.ts +1 -1
  152. package/dist/cli/commands/openspec-commands.js +20 -8
  153. package/dist/cli/commands/outer-cache-commands.js +18 -7
  154. package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
  155. package/dist/cli/commands/perf-audit-commands.js +12 -7
  156. package/dist/cli/commands/perf-commands.d.ts +1 -1
  157. package/dist/cli/commands/perf-commands.js +5 -5
  158. package/dist/cli/commands/playwright-commands.d.ts +1 -1
  159. package/dist/cli/commands/playwright-commands.js +20 -8
  160. package/dist/cli/commands/polyrepo-commands.js +21 -19
  161. package/dist/cli/commands/prd-blocks-commands.js +1 -3
  162. package/dist/cli/commands/prd-commands.d.ts +1 -1
  163. package/dist/cli/commands/prd-commands.js +16 -6
  164. package/dist/cli/commands/preferences-commands.js +13 -12
  165. package/dist/cli/commands/primer-command.js +5 -5
  166. package/dist/cli/commands/project-commands.d.ts +1 -1
  167. package/dist/cli/commands/project-commands.js +33 -9
  168. package/dist/cli/commands/qa-business-review-commands.js +16 -12
  169. package/dist/cli/commands/qa-commands.d.ts +1 -1
  170. package/dist/cli/commands/qa-commands.js +3 -5
  171. package/dist/cli/commands/release-commands.d.ts +3 -1
  172. package/dist/cli/commands/release-commands.js +33 -22
  173. package/dist/cli/commands/request-commands.js +47 -30
  174. package/dist/cli/commands/request-format-helpers.js +1 -1
  175. package/dist/cli/commands/retrospective-commands.d.ts +18 -11
  176. package/dist/cli/commands/retrospective-commands.js +24 -173
  177. package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
  178. package/dist/cli/commands/retrospective-index-command.js +99 -0
  179. package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
  180. package/dist/cli/commands/retrospective-project-root.js +15 -0
  181. package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
  182. package/dist/cli/commands/retrospective-search-command.js +97 -0
  183. package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
  184. package/dist/cli/commands/retrospective-show-command.js +80 -0
  185. package/dist/cli/commands/reviewer-commands.d.ts +1 -1
  186. package/dist/cli/commands/role-commands.js +14 -9
  187. package/dist/cli/commands/runtime-commands.js +14 -7
  188. package/dist/cli/commands/sc-commands.d.ts +1 -1
  189. package/dist/cli/commands/sc-commands.js +39 -6
  190. package/dist/cli/commands/scan-commands.js +36 -13
  191. package/dist/cli/commands/security-audit-commands.d.ts +1 -1
  192. package/dist/cli/commands/security-audit-commands.js +12 -7
  193. package/dist/cli/commands/sediment-commands.d.ts +2 -2
  194. package/dist/cli/commands/sediment-commands.js +146 -139
  195. package/dist/cli/commands/session-24h-mode.js +15 -2
  196. package/dist/cli/commands/session-checkpoint-command.js +1 -1
  197. package/dist/cli/commands/session-migrate-skill-name.js +1 -1
  198. package/dist/cli/commands/shadcn-commands.d.ts +1 -1
  199. package/dist/cli/commands/shadcn-commands.js +3 -1
  200. package/dist/cli/commands/share-commands.js +38 -39
  201. package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
  202. package/dist/cli/commands/skill-conformance-commands.js +1 -1
  203. package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
  204. package/dist/cli/commands/skill-visibility.js +2 -2
  205. package/dist/cli/commands/slice-commands.d.ts +1 -1
  206. package/dist/cli/commands/slice-commands.js +36 -12
  207. package/dist/cli/commands/slice-integrate-commands.js +6 -7
  208. package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
  209. package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
  210. package/dist/cli/commands/slice-review-commands.js +16 -24
  211. package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
  212. package/dist/cli/commands/smoke-commands-add-path.js +39 -0
  213. package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
  214. package/dist/cli/commands/smoke-commands-define.js +97 -0
  215. package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
  216. package/dist/cli/commands/smoke-commands-run.js +119 -0
  217. package/dist/cli/commands/smoke-commands.d.ts +10 -1
  218. package/dist/cli/commands/smoke-commands.js +17 -179
  219. package/dist/cli/commands/sop-commands.d.ts +1 -1
  220. package/dist/cli/commands/sop-commands.js +38 -10
  221. package/dist/cli/commands/statusline-commands.d.ts +1 -1
  222. package/dist/cli/commands/statusline-commands.js +21 -10
  223. package/dist/cli/commands/sub-agent/detached.js +3 -3
  224. package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
  225. package/dist/cli/commands/sub-agent-shared.js +1 -1
  226. package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
  227. package/dist/cli/commands/swarm-commands.d.ts +1 -1
  228. package/dist/cli/commands/swarm-commands.js +13 -6
  229. package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
  230. package/dist/cli/commands/tech-commands-helpers.js +24 -0
  231. package/dist/cli/commands/tech-commands.d.ts +2 -29
  232. package/dist/cli/commands/tech-commands.js +15 -28
  233. package/dist/cli/commands/test-commands.js +27 -7
  234. package/dist/cli/commands/user-touchpoint-commands.js +1 -3
  235. package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
  236. package/dist/cli/commands/verdict-aggregate-command.js +20 -7
  237. package/dist/cli/commands/vm-commands.js +48 -19
  238. package/dist/cli/commands/wave-plan-commands.js +5 -2
  239. package/dist/cli/commands/web-commands.js +14 -4
  240. package/dist/cli/commands/web-lifecycle-commands.js +5 -3
  241. package/dist/cli/commands/workflow-commands.d.ts +1 -1
  242. package/dist/cli/commands/workflow-commands.js +64 -29
  243. package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
  244. package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
  245. package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
  246. package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
  247. package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
  248. package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
  249. package/dist/cli/commands/workflow-plan-commands.js +15 -141
  250. package/dist/cli/commands/workspace/clean-command.js +4 -1
  251. package/dist/cli/commands/workspace/helpers.js +2 -1
  252. package/dist/cli/commands/workspace/init-command.js +80 -20
  253. package/dist/cli/commands/workspace/reconcile-command.js +3 -1
  254. package/dist/cli/commands/workspace-commands.d.ts +1 -1
  255. package/dist/cli/commands/workspace-commands.js +1 -1
  256. package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
  257. package/dist/cli/commands/worktree-auth-commands.js +16 -169
  258. package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
  259. package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
  260. package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
  261. package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
  262. package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
  263. package/dist/cli/commands/worktree-lease-commands.js +65 -37
  264. package/dist/cli/index.js +6 -2
  265. package/dist/cli/program.js +8 -10
  266. package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
  267. package/dist/reporters/bdd-reporter.js +9 -3
  268. package/dist/services/24h-mode/auto-engage.d.ts +19 -0
  269. package/dist/services/24h-mode/auto-engage.js +35 -0
  270. package/dist/services/24h-mode/decider.js +5 -1
  271. package/dist/services/24h-mode/store.js +4 -2
  272. package/dist/services/adapter/adapter-registry.js +20 -8
  273. package/dist/services/adapter/adapter.d.ts +2 -2
  274. package/dist/services/adapter/auto-adapter.d.ts +2 -2
  275. package/dist/services/adapter/auto-adapter.js +1 -1
  276. package/dist/services/adapter/claude-adapter.d.ts +1 -1
  277. package/dist/services/adapter/claude-adapter.js +8 -8
  278. package/dist/services/adapter/codex-adapter.d.ts +2 -2
  279. package/dist/services/adapter/codex-adapter.js +20 -8
  280. package/dist/services/adapter/copilot-adapter.d.ts +2 -2
  281. package/dist/services/adapter/copilot-adapter.js +20 -8
  282. package/dist/services/artifacts/artifact-prerequisites.js +10 -8
  283. package/dist/services/artifacts/artifact-service.js +3 -1
  284. package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
  285. package/dist/services/artifacts/artifact-template-bodies.js +165 -0
  286. package/dist/services/artifacts/artifact-templates.js +26 -168
  287. package/dist/services/artifacts/request-artifact-service.js +14 -7
  288. package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
  289. package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
  290. package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
  291. package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
  292. package/dist/services/artifacts/workspace-service.d.ts +3 -22
  293. package/dist/services/artifacts/workspace-service.js +10 -60
  294. package/dist/services/audit/artifact-writer.js +21 -21
  295. package/dist/services/audit/audit-goal-service.js +2 -2
  296. package/dist/services/audit/backing-detector.js +7 -4
  297. package/dist/services/audit/classifier.js +3 -3
  298. package/dist/services/audit/decision-writer.js +13 -9
  299. package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
  300. package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
  301. package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
  302. package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
  303. package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
  304. package/dist/services/audit/enforcers/lint-output-style.js +4 -2
  305. package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
  306. package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
  307. package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
  308. package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
  309. package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
  310. package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
  311. package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
  312. package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
  313. package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
  314. package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
  315. package/dist/services/audit/enforcers/lint-style.js +44 -11
  316. package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
  317. package/dist/services/audit/enforcers/login-gate.js +2 -6
  318. package/dist/services/audit/enforcers/mock-placement.js +2 -2
  319. package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
  320. package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
  321. package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
  322. package/dist/services/audit/enforcers/resume-detection.js +5 -4
  323. package/dist/services/audit/prose-ratio-calculator.js +1 -1
  324. package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
  325. package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
  326. package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
  327. package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
  328. package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
  329. package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
  330. package/dist/services/audit/red-line-catalog.js +26 -38
  331. package/dist/services/audit/red-lines-service.js +64 -49
  332. package/dist/services/audit/scanners/openspec-scanner.js +2 -2
  333. package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
  334. package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
  335. package/dist/services/audit/static-service.js +3 -3
  336. package/dist/services/audit-independent/index.d.ts +2 -2
  337. package/dist/services/audit-independent/index.js +2 -2
  338. package/dist/services/audit-independent/perf-audit-service.js +19 -8
  339. package/dist/services/audit-independent/security-audit-service.js +31 -16
  340. package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
  341. package/dist/services/best-practice/output-formatter.js +7 -1
  342. package/dist/services/capability-audit-service/cross-check.js +11 -5
  343. package/dist/services/capability-audit-service/runner.js +15 -7
  344. package/dist/services/capability-baseline/store.js +16 -4
  345. package/dist/services/capability-baseline/types.js +15 -3
  346. package/dist/services/capability-baseline/validator.js +43 -7
  347. package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
  348. package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
  349. package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
  350. package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
  351. package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
  352. package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
  353. package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
  354. package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
  355. package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
  356. package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
  357. package/dist/services/capability-guard-runner/diff.js +1 -5
  358. package/dist/services/changeset/changeset-check-service.js +1 -3
  359. package/dist/services/classify/classify-service.js +20 -8
  360. package/dist/services/classify/classify-types.js +22 -9
  361. package/dist/services/code/auto-compact-lifecycle.js +62 -39
  362. package/dist/services/code/auto-compact-modes.js +2 -2
  363. package/dist/services/code/auto-compact-orchestrator.js +14 -9
  364. package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
  365. package/dist/services/code/batch-heartbeat-poller.js +17 -1
  366. package/dist/services/code/compact-event-settle-types.d.ts +80 -0
  367. package/dist/services/code/compact-event-settle-types.js +20 -0
  368. package/dist/services/code/compact-event-settle.d.ts +3 -68
  369. package/dist/services/code/compact-event-settle.js +14 -10
  370. package/dist/services/code/dag-orchestrator.js +32 -26
  371. package/dist/services/code/job-shape-decision.js +3 -1
  372. package/dist/services/code/mode-gate-types.d.ts +57 -0
  373. package/dist/services/code/mode-gate-types.js +66 -0
  374. package/dist/services/code/mode-gate.d.ts +4 -58
  375. package/dist/services/code/mode-gate.js +25 -69
  376. package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
  377. package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
  378. package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
  379. package/dist/services/code/orchestrator-can-do-probes.js +77 -0
  380. package/dist/services/code/orchestrator-can-do.d.ts +11 -22
  381. package/dist/services/code/orchestrator-can-do.js +37 -137
  382. package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
  383. package/dist/services/code/post-compact-checkpoint.js +57 -0
  384. package/dist/services/code/post-compact-detector.js +16 -48
  385. package/dist/services/code/step-08-gate.d.ts +4 -3
  386. package/dist/services/code/step-08-gate.js +21 -9
  387. package/dist/services/code/user-touchpoint-classifier.js +0 -7
  388. package/dist/services/code-review/ecc-bridge.d.ts +6 -6
  389. package/dist/services/code-review/ecc-bridge.js +23 -23
  390. package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
  391. package/dist/services/codegraph/codegraph-config-repair-writer.js +4 -1
  392. package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
  393. package/dist/services/codegraph/codegraph-exclude-repair.js +1 -2
  394. package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
  395. package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
  396. package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
  397. package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
  398. package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
  399. package/dist/services/codegraph/codegraph-process-runner.js +12 -1
  400. package/dist/services/codegraph/codegraph-service.js +9 -1
  401. package/dist/services/comments/citation-rules.d.ts +154 -0
  402. package/dist/services/comments/citation-rules.js +241 -0
  403. package/dist/services/comments/comment-audit.d.ts +57 -0
  404. package/dist/services/comments/comment-audit.js +100 -0
  405. package/dist/services/comments/comment-citations.d.ts +60 -0
  406. package/dist/services/comments/comment-citations.js +186 -0
  407. package/dist/services/comments/comment-hygiene.d.ts +79 -0
  408. package/dist/services/comments/comment-hygiene.js +133 -0
  409. package/dist/services/comments/comment-prune.d.ts +88 -0
  410. package/dist/services/comments/comment-prune.js +148 -0
  411. package/dist/services/comments/prune-apply.d.ts +60 -0
  412. package/dist/services/comments/prune-apply.js +150 -0
  413. package/dist/services/comments/repo-path-probe.d.ts +43 -0
  414. package/dist/services/comments/repo-path-probe.js +78 -0
  415. package/dist/services/compact/request-transition-hook.js +2 -1
  416. package/dist/services/compact/suggest-service.d.ts +3 -61
  417. package/dist/services/compact/suggest-service.js +9 -12
  418. package/dist/services/compact/suggest-types.d.ts +76 -0
  419. package/dist/services/compact/suggest-types.js +10 -0
  420. package/dist/services/compact-history/compact-history-service.js +2 -2
  421. package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
  422. package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
  423. package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
  424. package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
  425. package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
  426. package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
  427. package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
  428. package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
  429. package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
  430. package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
  431. package/dist/services/config/config-migration.js +2 -2
  432. package/dist/services/config/config-restore.js +1 -1
  433. package/dist/services/config/config-rollback.js +1 -1
  434. package/dist/services/config/config-safety.js +28 -10
  435. package/dist/services/config/config-service.js +114 -31
  436. package/dist/services/config/model-routing.js +5 -2
  437. package/dist/services/config/proxy-service.js +6 -1
  438. package/dist/services/config/workspace-state-service.js +17 -5
  439. package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
  440. package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
  441. package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
  442. package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
  443. package/dist/services/context/auto-compact-reader-input.js +8 -0
  444. package/dist/services/context/auto-compact-reader.d.ts +2 -24
  445. package/dist/services/context/auto-compact-reader.js +4 -1
  446. package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
  447. package/dist/services/context/auto-compact-thresholds.js +19 -0
  448. package/dist/services/context/auto-compact-types.d.ts +2 -46
  449. package/dist/services/context/auto-compact-types.js +1 -11
  450. package/dist/services/context/build-dispatch-system-prompt.js +2 -2
  451. package/dist/services/context/collector.js +8 -10
  452. package/dist/services/context/context-audit-hint.js +7 -5
  453. package/dist/services/context/context-audit-keys.d.ts +15 -0
  454. package/dist/services/context/context-audit-keys.js +77 -0
  455. package/dist/services/context/context-audit-limits.d.ts +20 -0
  456. package/dist/services/context/context-audit-limits.js +31 -0
  457. package/dist/services/context/context-audit-scan.d.ts +19 -0
  458. package/dist/services/context/context-audit-scan.js +246 -0
  459. package/dist/services/context/context-audit-types.d.ts +65 -0
  460. package/dist/services/context/context-audit-types.js +10 -0
  461. package/dist/services/context/context-audit.d.ts +13 -59
  462. package/dist/services/context/context-audit.js +38 -254
  463. package/dist/services/context/context-builder.js +4 -4
  464. package/dist/services/context/context-schema.d.ts +1 -1
  465. package/dist/services/context/context-schema.js +13 -13
  466. package/dist/services/context/doc-retriever.js +2 -2
  467. package/dist/services/context/harness-context-witness.js +43 -24
  468. package/dist/services/context/harness-window-config.js +27 -7
  469. package/dist/services/context/ide-detect.js +2 -1
  470. package/dist/services/context/index.d.ts +1 -1
  471. package/dist/services/context/memory-index-reader.js +3 -9
  472. package/dist/services/context/memory-preflight-config.js +3 -5
  473. package/dist/services/context/memory-preflight-service.d.ts +2 -20
  474. package/dist/services/context/memory-preflight-service.js +37 -68
  475. package/dist/services/context/memory-preflight-support.d.ts +48 -0
  476. package/dist/services/context/memory-preflight-support.js +56 -0
  477. package/dist/services/context/post-compact-reinjection.js +3 -3
  478. package/dist/services/context/renderer.js +7 -3
  479. package/dist/services/context/spillover-store.js +3 -1
  480. package/dist/services/context/summary-view.js +1 -1
  481. package/dist/services/context/threshold.js +2 -2
  482. package/dist/services/context/tokenizer.js +3 -3
  483. package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
  484. package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
  485. package/dist/services/crystallization/crystallization-service.d.ts +7 -7
  486. package/dist/services/crystallization/crystallization-service.js +56 -55
  487. package/dist/services/crystallization/crystallization-store.d.ts +2 -2
  488. package/dist/services/crystallization/crystallization-store.js +37 -20
  489. package/dist/services/crystallization/crystallization-types.d.ts +4 -56
  490. package/dist/services/crystallization/crystallization-types.js +31 -184
  491. package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
  492. package/dist/services/crystallization/evidence-brief-builder.js +32 -38
  493. package/dist/services/crystallization/index.d.ts +4 -4
  494. package/dist/services/crystallization/index.js +4 -4
  495. package/dist/services/dashboard/project-dashboard-service.js +7 -1
  496. package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
  497. package/dist/services/dispatch/await-batch-helpers.js +206 -0
  498. package/dist/services/dispatch/await-batch.d.ts +50 -7
  499. package/dist/services/dispatch/await-batch.js +97 -194
  500. package/dist/services/dispatch/batch-counter.js +2 -1
  501. package/dist/services/dispatch/conflict-replay.js +2 -2
  502. package/dist/services/dispatch/contract-store.js +5 -2
  503. package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
  504. package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
  505. package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
  506. package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
  507. package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
  508. package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
  509. package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
  510. package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
  511. package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
  512. package/dist/services/dispatch/dispatch-record-writer.js +54 -26
  513. package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
  514. package/dist/services/dispatch/e2e-fixtures.js +1 -1
  515. package/dist/services/dispatch/isolation-lease.js +39 -17
  516. package/dist/services/dispatch/merge-back-runner.js +51 -11
  517. package/dist/services/dispatch/service-shutdown.js +4 -1
  518. package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
  519. package/dist/services/dispatch/slice-dag-types.js +41 -0
  520. package/dist/services/dispatch/slice-dag.d.ts +3 -109
  521. package/dist/services/dispatch/slice-dag.js +13 -36
  522. package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
  523. package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
  524. package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
  525. package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
  526. package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
  527. package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
  528. package/dist/services/dispatch/test-tool-detection.js +12 -1
  529. package/dist/services/doc/doc-generator.js +19 -4
  530. package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
  531. package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
  532. package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
  533. package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
  534. package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
  535. package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
  536. package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
  537. package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
  538. package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
  539. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
  540. package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
  541. package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
  542. package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
  543. package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
  544. package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
  545. package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
  546. package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
  547. package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
  548. package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
  549. package/dist/services/doctor/doctor-service/index.js +4 -2
  550. package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
  551. package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
  552. package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
  553. package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
  554. package/dist/services/doctor/doctor-service/probe-types.js +14 -0
  555. package/dist/services/doctor/doctor-service/types.d.ts +7 -197
  556. package/dist/services/doctor/index.d.ts +1 -1
  557. package/dist/services/doctor/index.js +1 -1
  558. package/dist/services/env/shell-probe.js +8 -2
  559. package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
  560. package/dist/services/evidence/evidence-body-builders.js +197 -0
  561. package/dist/services/evidence/evidence-generator.js +6 -187
  562. package/dist/services/evolution/evolution-constraints.d.ts +43 -0
  563. package/dist/services/evolution/evolution-constraints.js +54 -0
  564. package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
  565. package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
  566. package/dist/services/evolution/evolution-service.d.ts +6 -6
  567. package/dist/services/evolution/evolution-service.js +58 -58
  568. package/dist/services/evolution/evolution-store.d.ts +2 -2
  569. package/dist/services/evolution/evolution-store.js +37 -51
  570. package/dist/services/evolution/evolution-types.d.ts +2 -22
  571. package/dist/services/evolution/evolution-types.js +41 -101
  572. package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
  573. package/dist/services/evolution/independent-evaluator-runner.js +20 -22
  574. package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
  575. package/dist/services/evolution/regression-skeptic-runner.js +18 -18
  576. package/dist/services/feedback/feedback-promotion-service.js +48 -12
  577. package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
  578. package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
  579. package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
  580. package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
  581. package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
  582. package/dist/services/feedback/promotion-source-comments.js +61 -0
  583. package/dist/services/final-review/final-review-contract.d.ts +26 -0
  584. package/dist/services/final-review/final-review-contract.js +14 -0
  585. package/dist/services/final-review/final-review-delivery.d.ts +63 -0
  586. package/dist/services/final-review/final-review-delivery.js +124 -0
  587. package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
  588. package/dist/services/final-review/final-review-evidence-budget.js +218 -0
  589. package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
  590. package/dist/services/final-review/final-review-evidence-collect.js +230 -0
  591. package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
  592. package/dist/services/final-review/final-review-evidence-sources.js +139 -0
  593. package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
  594. package/dist/services/final-review/final-review-fifth-dim.js +20 -0
  595. package/dist/services/final-review/final-review-gates.d.ts +119 -0
  596. package/dist/services/final-review/final-review-gates.js +214 -0
  597. package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
  598. package/dist/services/final-review/final-review-output-budget.js +161 -0
  599. package/dist/services/final-review/final-review-prompt.d.ts +35 -0
  600. package/dist/services/final-review/final-review-prompt.js +112 -0
  601. package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
  602. package/dist/services/final-review/final-review-reviewer.js +95 -0
  603. package/dist/services/final-review/final-review-runner.d.ts +3 -0
  604. package/dist/services/final-review/final-review-runner.js +158 -0
  605. package/dist/services/final-review/final-review-service.d.ts +119 -373
  606. package/dist/services/final-review/final-review-service.js +48 -1380
  607. package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
  608. package/dist/services/final-review/final-review-verdicts.js +91 -0
  609. package/dist/services/final-review/index.d.ts +3 -3
  610. package/dist/services/final-review/index.js +2 -2
  611. package/dist/services/final-review/pre-post-diff.js +32 -29
  612. package/dist/services/fixture/fixture-capture-service.js +14 -6
  613. package/dist/services/fresh-context/trigger-scan.js +13 -2
  614. package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
  615. package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
  616. package/dist/services/hooks/pre-tool-code-gate.js +2 -2
  617. package/dist/services/hooks/presence-marker-detector.js +12 -2
  618. package/dist/services/hooks/worktree-authorization-gate.js +21 -7
  619. package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
  620. package/dist/services/ide/adapters/codex-adapter.js +3 -5
  621. package/dist/services/ide/adapters/cursor-adapter.js +3 -5
  622. package/dist/services/ide/adapters/hermes-adapter.js +2 -4
  623. package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
  624. package/dist/services/ide/adapters/qoder-adapter.js +2 -4
  625. package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
  626. package/dist/services/ide/adapters/trae-adapter.js +3 -5
  627. package/dist/services/ide/adapters/zcode-adapter.js +8 -7
  628. package/dist/services/ide/current-model-detector.js +2 -1
  629. package/dist/services/ide/ide-compact-types.d.ts +153 -0
  630. package/dist/services/ide/ide-compact-types.js +1 -0
  631. package/dist/services/ide/ide-registry.js +1 -1
  632. package/dist/services/ide/ide-types.d.ts +7 -145
  633. package/dist/services/ide/resource-profile.js +1 -1
  634. package/dist/services/ide/shared/atomic-json.js +2 -1
  635. package/dist/services/impact/impact-scan-service.js +12 -5
  636. package/dist/services/job/job-commit-verification.d.ts +73 -0
  637. package/dist/services/job/job-commit-verification.js +72 -0
  638. package/dist/services/job/job-orchestrator.d.ts +42 -0
  639. package/dist/services/job/job-orchestrator.js +110 -10
  640. package/dist/services/job/job-progress-store.d.ts +75 -5
  641. package/dist/services/job/job-progress-store.js +83 -6
  642. package/dist/services/job/job-rotation.d.ts +1 -1
  643. package/dist/services/job/job-rotation.js +5 -1
  644. package/dist/services/job/job-state-store.js +2 -2
  645. package/dist/services/job/job-types.js +49 -20
  646. package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
  647. package/dist/services/job/subagent-job-wrapper.js +5 -1
  648. package/dist/services/job-snapshot/snapshot.js +2 -2
  649. package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
  650. package/dist/services/legacy/legacy-detector.js +51 -5
  651. package/dist/services/lint/detect-eslint.js +10 -4
  652. package/dist/services/lint/detect-ocr-18.js +11 -3
  653. package/dist/services/lint/eslint-runner-support.d.ts +22 -0
  654. package/dist/services/lint/eslint-runner-support.js +185 -0
  655. package/dist/services/lint/eslint-runner-types.d.ts +69 -0
  656. package/dist/services/lint/eslint-runner-types.js +11 -0
  657. package/dist/services/lint/eslint-runner.d.ts +4 -56
  658. package/dist/services/lint/eslint-runner.js +24 -178
  659. package/dist/services/lint/npx-resolver.js +1 -3
  660. package/dist/services/lint/ocr-18-acquire.js +15 -4
  661. package/dist/services/lint/ocr-multilang-adapter.js +4 -5
  662. package/dist/services/llm/anthropic-runner.js +4 -1
  663. package/dist/services/log/log-commands-service.js +2 -6
  664. package/dist/services/log/logger.js +15 -12
  665. package/dist/services/log/retention.d.ts +0 -16
  666. package/dist/services/log/retention.js +2 -18
  667. package/dist/services/loop/evaluator-dispatcher.js +78 -42
  668. package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
  669. package/dist/services/loop/loop-bee-relation-service.js +36 -40
  670. package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
  671. package/dist/services/loop/loop-bee-relation-store.js +9 -11
  672. package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
  673. package/dist/services/loop/loop-bee-relation-types.js +14 -25
  674. package/dist/services/loop/loop-release-service.d.ts +2 -2
  675. package/dist/services/loop/loop-release-service.js +3 -3
  676. package/dist/services/loop/loop-release-store.d.ts +2 -2
  677. package/dist/services/loop/loop-release-store.js +4 -6
  678. package/dist/services/loop/loop-release-types.d.ts +1 -1
  679. package/dist/services/loop/loop-release-types.js +21 -31
  680. package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
  681. package/dist/services/loop/monotonic-guard-types.js +9 -0
  682. package/dist/services/loop/monotonic-guard.d.ts +2 -43
  683. package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
  684. package/dist/services/loop/monotonic-runner-types.js +17 -0
  685. package/dist/services/loop/monotonic-runner.d.ts +3 -34
  686. package/dist/services/loop/monotonic-runner.js +10 -20
  687. package/dist/services/loop/run-driver.js +16 -8
  688. package/dist/services/loop/spec-service.d.ts +0 -5
  689. package/dist/services/loop/spec-service.js +49 -9
  690. package/dist/services/memory/llm-reranker-core.d.ts +108 -0
  691. package/dist/services/memory/llm-reranker-core.js +105 -0
  692. package/dist/services/memory/llm-reranker.d.ts +3 -94
  693. package/dist/services/memory/llm-reranker.js +13 -102
  694. package/dist/services/memory/memory-ingest-service.d.ts +1 -22
  695. package/dist/services/memory/memory-ingest-service.js +29 -76
  696. package/dist/services/memory/memory-ingest-support.d.ts +23 -0
  697. package/dist/services/memory/memory-ingest-support.js +81 -0
  698. package/dist/services/memory/memory-rotate-service.js +41 -8
  699. package/dist/services/memory/memory-search-service.js +8 -4
  700. package/dist/services/memory/project-context-service.js +26 -5
  701. package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
  702. package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
  703. package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
  704. package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
  705. package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
  706. package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
  707. package/dist/services/memory/project-memory-service/index.d.ts +1 -1
  708. package/dist/services/memory/project-memory-service/index.js +1 -1
  709. package/dist/services/memory/project-memory-service/memory-kinds.d.ts +31 -0
  710. package/dist/services/memory/project-memory-service/memory-kinds.js +87 -0
  711. package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.d.ts +24 -0
  712. package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.js +104 -0
  713. package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +2 -24
  714. package/dist/services/memory/project-memory-service/parsers/frontmatter.js +28 -79
  715. package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +15 -3
  716. package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +19 -7
  717. package/dist/services/memory/project-memory-service/store/atomic-write.js +144 -38
  718. package/dist/services/memory/project-memory-service/store/paths.js +2 -1
  719. package/dist/services/memory/project-memory-service/types.d.ts +3 -31
  720. package/dist/services/memory/project-memory-service/types.js +1 -76
  721. package/dist/services/migrate-skill-name/migrate.js +1 -1
  722. package/dist/services/migrate-skill-name/schema.js +1 -1
  723. package/dist/services/mode/mode-enforcement.js +4 -2
  724. package/dist/services/mode/mode-status-service.d.ts +27 -9
  725. package/dist/services/mode/mode-status-service.js +64 -12
  726. package/dist/services/observability/aggregation-helpers.d.ts +22 -0
  727. package/dist/services/observability/aggregation-helpers.js +65 -0
  728. package/dist/services/observability/aggregation-types.d.ts +66 -0
  729. package/dist/services/observability/aggregation-types.js +34 -0
  730. package/dist/services/observability/aggregation.d.ts +5 -53
  731. package/dist/services/observability/aggregation.js +17 -80
  732. package/dist/services/observability/jsonl-store.js +2 -1
  733. package/dist/services/observability/observability-schema.d.ts +71 -0
  734. package/dist/services/observability/observability-schema.js +64 -0
  735. package/dist/services/observability/observability-service.d.ts +3 -56
  736. package/dist/services/observability/observability-service.js +9 -49
  737. package/dist/services/openspec/coverage-evidence-reader.js +18 -11
  738. package/dist/services/openspec/openspec-archive-service.js +31 -24
  739. package/dist/services/openspec/openspec-init-service.js +8 -2
  740. package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
  741. package/dist/services/openspec/openspec-scan-service.js +4 -1
  742. package/dist/services/openspec/openspec-validate-service.js +26 -5
  743. package/dist/services/perf/perf-baseline-service.js +2 -6
  744. package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
  745. package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
  746. package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
  747. package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
  748. package/dist/services/prd/handoff-frontmatter.js +62 -1
  749. package/dist/services/prd/handoff-gate-evidence.js +14 -10
  750. package/dist/services/prd/handoff-path-resolution.d.ts +37 -0
  751. package/dist/services/prd/handoff-path-resolution.js +101 -0
  752. package/dist/services/prd/handoff-service.d.ts +12 -38
  753. package/dist/services/prd/handoff-service.js +25 -147
  754. package/dist/services/prd/handoff-types.d.ts +33 -1
  755. package/dist/services/prd/prd-blocks-checker.js +28 -8
  756. package/dist/services/prd/project-scan-bootstrap-service.js +1 -5
  757. package/dist/services/prd/project-scan-reader.js +1 -4
  758. package/dist/services/prd/project-scan-sediment.js +1 -4
  759. package/dist/services/preferences/preferences-service.js +6 -8
  760. package/dist/services/preferences/preferences-types.js +4 -4
  761. package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
  762. package/dist/services/qa/bdd-test-style-contract.js +37 -0
  763. package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
  764. package/dist/services/qa/bdd-test-style-verifier.js +5 -31
  765. package/dist/services/qa/browser-event-logger.js +2 -1
  766. package/dist/services/qa/qa-business-review-state.js +20 -5
  767. package/dist/services/qa/screenshot-archive-service.js +1 -3
  768. package/dist/services/rd/ast-gate.js +2 -2
  769. package/dist/services/rd/impl.js +1 -1
  770. package/dist/services/rd/rd-service.js +117 -43
  771. package/dist/services/rd/reviewer-dispatch-policy.js +4 -7
  772. package/dist/services/rd/standards-diagnostic.js +4 -1
  773. package/dist/services/rd/strategy.js +10 -3
  774. package/dist/services/rd/tactical-stage.js +2 -2
  775. package/dist/services/rd/types.js +9 -7
  776. package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
  777. package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
  778. package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
  779. package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
  780. package/dist/services/recommendations/capability-map-service.js +10 -2
  781. package/dist/services/recommendations/capability-seed-items.js +81 -14
  782. package/dist/services/recommendations/capability-seed-mappings.js +420 -48
  783. package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
  784. package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
  785. package/dist/services/recommendations/capability-seed-sources.js +127 -32
  786. package/dist/services/recommendations/installed-capability-detector.d.ts +5 -5
  787. package/dist/services/recommendations/installed-capability-detector.js +11 -10
  788. package/dist/services/release/release-state.d.ts +2 -2
  789. package/dist/services/release/release-state.js +44 -15
  790. package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
  791. package/dist/services/release/version-precheck-layer-changeset.js +43 -0
  792. package/dist/services/release/version-precheck-service.d.ts +11 -36
  793. package/dist/services/release/version-precheck-service.js +20 -104
  794. package/dist/services/release/version-precheck-support.d.ts +53 -0
  795. package/dist/services/release/version-precheck-support.js +64 -0
  796. package/dist/services/retrospective/retrospective-index.js +17 -3
  797. package/dist/services/retrospective/retrospective-search-service.js +6 -2
  798. package/dist/services/retrospective/retrospective-show.js +4 -1
  799. package/dist/services/reviewer/model-family.js +7 -1
  800. package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
  801. package/dist/services/reviewer/providers/anthropic.js +10 -1
  802. package/dist/services/reviewer/providers/openai.d.ts +5 -0
  803. package/dist/services/reviewer/providers/openai.js +10 -1
  804. package/dist/services/reviewer/reviewer-config.js +4 -2
  805. package/dist/services/reviewer/reviewer-service.d.ts +2 -36
  806. package/dist/services/reviewer/reviewer-service.js +2 -1
  807. package/dist/services/reviewer/reviewer-types.d.ts +43 -0
  808. package/dist/services/reviewer/reviewer-types.js +1 -0
  809. package/dist/services/role/role-registry.js +9 -1
  810. package/dist/services/runtime/runtime-detector.js +4 -1
  811. package/dist/services/runtime/vendors/claude-code.js +14 -6
  812. package/dist/services/runtime/vendors/codex.js +11 -3
  813. package/dist/services/runtime/vendors/copilot.js +11 -3
  814. package/dist/services/sc/sc-service.js +28 -15
  815. package/dist/services/scan/acceptance-coverage-service.js +4 -1
  816. package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
  817. package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
  818. package/dist/services/scan/api-diff-openapi.d.ts +16 -2
  819. package/dist/services/scan/api-diff-openapi.js +19 -123
  820. package/dist/services/scan/api-diff-recorded.js +16 -3
  821. package/dist/services/scan/api-diff-service.js +49 -16
  822. package/dist/services/scan/api-diff-types.js +12 -3
  823. package/dist/services/scan/api-surface-helpers.d.ts +13 -0
  824. package/dist/services/scan/api-surface-helpers.js +31 -0
  825. package/dist/services/scan/api-surface-service.d.ts +2 -45
  826. package/dist/services/scan/api-surface-service.js +15 -26
  827. package/dist/services/scan/api-surface-types.d.ts +54 -0
  828. package/dist/services/scan/api-surface-types.js +10 -0
  829. package/dist/services/scan/archetype-detection.d.ts +74 -0
  830. package/dist/services/scan/archetype-detection.js +315 -0
  831. package/dist/services/scan/archetype-service.js +58 -133
  832. package/dist/services/scan/diff-scope-service.js +35 -15
  833. package/dist/services/scan/existing-system-service.js +16 -99
  834. package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
  835. package/dist/services/scan/existing-system-visual-tokens.js +123 -0
  836. package/dist/services/scan/file-size-policy.d.ts +86 -0
  837. package/dist/services/scan/file-size-policy.js +184 -0
  838. package/dist/services/scan/file-size-scan.d.ts +30 -3
  839. package/dist/services/scan/file-size-scan.js +47 -9
  840. package/dist/services/scan/karpathy-service.js +6 -1
  841. package/dist/services/scan/orphan-service.js +86 -20
  842. package/dist/services/scan/scan-types.d.ts +9 -0
  843. package/dist/services/scan/type-sanity-service.js +104 -10
  844. package/dist/services/sediment/dispose-confirm.d.ts +2 -2
  845. package/dist/services/sediment/dispose-confirm.js +2 -2
  846. package/dist/services/sediment/json-schema.d.ts +1 -1
  847. package/dist/services/sediment/json-schema.js +25 -13
  848. package/dist/services/sediment/manifest-lint.d.ts +1 -12
  849. package/dist/services/sediment/manifest-lint.js +1 -7
  850. package/dist/services/sediment/pool-paths.js +13 -9
  851. package/dist/services/sediment/pool-read.d.ts +1 -1
  852. package/dist/services/sediment/pool-read.js +42 -18
  853. package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
  854. package/dist/services/sediment/pool-rebuild-index.js +5 -5
  855. package/dist/services/sediment/pool-write.d.ts +1 -1
  856. package/dist/services/sediment/pool-write.js +7 -7
  857. package/dist/services/sediment/promotion-gate.d.ts +1 -1
  858. package/dist/services/sediment/promotion-gate.js +9 -9
  859. package/dist/services/sediment/types.d.ts +8 -8
  860. package/dist/services/session/binding-status-service.js +14 -4
  861. package/dist/services/session/caller-binding-service.js +2 -1
  862. package/dist/services/session/getSessionDir.js +4 -1
  863. package/dist/services/session/index.d.ts +1 -1
  864. package/dist/services/session/index.js +1 -1
  865. package/dist/services/session/resolve-caller-id.js +7 -5
  866. package/dist/services/session/session-binding-bridge.js +26 -25
  867. package/dist/services/session/session-checkpoint-service.js +1 -1
  868. package/dist/services/session/session-file-schema.d.ts +70 -0
  869. package/dist/services/session/session-file-schema.js +68 -0
  870. package/dist/services/session/session-manager.d.ts +6 -6
  871. package/dist/services/session/session-manager.js +30 -29
  872. package/dist/services/session/session-resume-service.js +2 -1
  873. package/dist/services/share/bundle-format-constants.d.ts +85 -0
  874. package/dist/services/share/bundle-format-constants.js +100 -0
  875. package/dist/services/share/bundle-reader.d.ts +3 -3
  876. package/dist/services/share/bundle-reader.js +75 -68
  877. package/dist/services/share/bundle-types.d.ts +3 -70
  878. package/dist/services/share/bundle-types.js +38 -107
  879. package/dist/services/share/bundle-writer.d.ts +3 -3
  880. package/dist/services/share/bundle-writer.js +101 -91
  881. package/dist/services/share/run-state-contract.d.ts +1 -1
  882. package/dist/services/share/run-state-contract.js +7 -13
  883. package/dist/services/signal/cancel-handler.js +2 -1
  884. package/dist/services/skill/resume-detector.js +6 -4
  885. package/dist/services/skill/skill-scheduler.js +3 -1
  886. package/dist/services/skill/skill-search-service.js +4 -4
  887. package/dist/services/skillhub/release-diff.d.ts +2 -2
  888. package/dist/services/skillhub/release-diff.js +6 -10
  889. package/dist/services/skillhub/release-export.d.ts +2 -2
  890. package/dist/services/skillhub/release-export.js +15 -17
  891. package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
  892. package/dist/services/skillhub/release-gc-blobs.js +4 -4
  893. package/dist/services/skillhub/release-import.d.ts +2 -2
  894. package/dist/services/skillhub/release-import.js +13 -12
  895. package/dist/services/skillhub/release-retain.d.ts +3 -3
  896. package/dist/services/skillhub/release-retain.js +22 -22
  897. package/dist/services/skillhub/sqlite-store.d.ts +1 -1
  898. package/dist/services/skillhub/sqlite-store.js +12 -11
  899. package/dist/services/skillhub/tar-runtime.js +15 -15
  900. package/dist/services/skillhub/types.d.ts +4 -4
  901. package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
  902. package/dist/services/skills/hooks-settings-service.js +61 -19
  903. package/dist/services/skills/presence-lease-service.js +26 -16
  904. package/dist/services/skills/presence-lease-types.d.ts +1 -1
  905. package/dist/services/skills/presence-lease-types.js +1 -1
  906. package/dist/services/skills/skill-conformance-service.js +40 -8
  907. package/dist/services/skills/skill-presence-service.js +16 -14
  908. package/dist/services/skills/skill-runbook-service.js +2 -1
  909. package/dist/services/skills/skill-statusline-model.d.ts +128 -0
  910. package/dist/services/skills/skill-statusline-model.js +163 -0
  911. package/dist/services/skills/skill-statusline-renderer.js +4 -3
  912. package/dist/services/skills/skill-statusline-service.d.ts +3 -100
  913. package/dist/services/skills/skill-statusline-service.js +56 -163
  914. package/dist/services/skills/statusline-palette.js +11 -6
  915. package/dist/services/skills/statusline-settings-service.js +2 -1
  916. package/dist/services/skills/sync-service-support.d.ts +65 -0
  917. package/dist/services/skills/sync-service-support.js +50 -0
  918. package/dist/services/skills/sync-service.d.ts +3 -66
  919. package/dist/services/skills/sync-service.js +15 -53
  920. package/dist/services/slice/calibration-store.js +8 -2
  921. package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
  922. package/dist/services/slice/cross-pass-edge-merger.js +13 -63
  923. package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
  924. package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
  925. package/dist/services/slice/granularity-decider.js +2 -2
  926. package/dist/services/slice/slice-archive-service.js +8 -3
  927. package/dist/services/slice/slice-check-service.js +19 -8
  928. package/dist/services/slice/slice-decompose-runners.js +61 -23
  929. package/dist/services/slice/slice-decompose-service.js +4 -4
  930. package/dist/services/slice/slice-review-state.js +8 -2
  931. package/dist/services/smoke/smoke-paths-state.js +9 -2
  932. package/dist/services/sop/gate-enforce-service.js +9 -2
  933. package/dist/services/sop/sop-advance-service.js +14 -2
  934. package/dist/services/sop/sop-check-service.js +16 -4
  935. package/dist/services/sop/sop-paths.js +3 -1
  936. package/dist/services/sop/sop-registry-service.js +5 -1
  937. package/dist/services/sop/sop-service.js +29 -7
  938. package/dist/services/sop/sop-types.js +5 -1
  939. package/dist/services/standards/ide-aware-standards-service.js +2 -2
  940. package/dist/services/standards/loop-engineering-lint.js +12 -5
  941. package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
  942. package/dist/services/standards/migrate-claude-rules-service.js +9 -7
  943. package/dist/services/standards/missing-standards-detector.js +1 -3
  944. package/dist/services/standards/project-context-support.d.ts +50 -0
  945. package/dist/services/standards/project-context-support.js +244 -0
  946. package/dist/services/standards/project-context-types.d.ts +30 -0
  947. package/dist/services/standards/project-context-types.js +11 -0
  948. package/dist/services/standards/project-context.d.ts +10 -22
  949. package/dist/services/standards/project-context.js +27 -214
  950. package/dist/services/standards/project-standards-service.js +43 -12
  951. package/dist/services/standards/standards-render-common.d.ts +15 -0
  952. package/dist/services/standards/standards-render-common.js +49 -0
  953. package/dist/services/standards/standards-render.d.ts +1 -2
  954. package/dist/services/standards/standards-render.js +31 -58
  955. package/dist/services/standards/ui-library-dispatch-block.js +1 -1
  956. package/dist/services/tech/tech-change-id-service.js +7 -7
  957. package/dist/services/tech/tech-service.js +73 -26
  958. package/dist/services/test-cache/test-cache-service.js +8 -3
  959. package/dist/services/verdict/envelope-parsers.d.ts +84 -0
  960. package/dist/services/verdict/envelope-parsers.js +146 -0
  961. package/dist/services/verdict/envelopes.d.ts +50 -60
  962. package/dist/services/verdict/envelopes.js +18 -156
  963. package/dist/services/verdict/verdict-aggregator.js +27 -3
  964. package/dist/services/vm/vm-lease.js +15 -3
  965. package/dist/services/web/aria-node.d.ts +27 -0
  966. package/dist/services/web/aria-node.js +1 -0
  967. package/dist/services/web/browser-acquire.js +3 -1
  968. package/dist/services/web/browser-cache-probe.d.ts +18 -0
  969. package/dist/services/web/browser-cache-probe.js +110 -0
  970. package/dist/services/web/browser-session-manager.js +6 -2
  971. package/dist/services/web/daemon-registry.js +4 -1
  972. package/dist/services/web/playwright-loader.d.ts +2 -70
  973. package/dist/services/web/playwright-types.d.ts +75 -0
  974. package/dist/services/web/playwright-types.js +1 -0
  975. package/dist/services/web/snapshot-pruner.d.ts +2 -23
  976. package/dist/services/web/snapshot-pruner.js +8 -3
  977. package/dist/services/web/web-daemon-service.js +1 -3
  978. package/dist/services/web/web-install-service.d.ts +3 -32
  979. package/dist/services/web/web-install-service.js +21 -100
  980. package/dist/services/web/web-install-types.d.ts +31 -0
  981. package/dist/services/web/web-install-types.js +13 -0
  982. package/dist/services/web/web-login-profile.js +7 -5
  983. package/dist/services/web/web-protocol.js +3 -1
  984. package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
  985. package/dist/services/workflow/pipeline-verify-service.js +17 -6
  986. package/dist/services/workflow/plan-reader.js +5 -1
  987. package/dist/services/workflow/plan-refresher.js +20 -6
  988. package/dist/services/workflow/plan-trigger-detector.js +31 -8
  989. package/dist/services/workflow/provision-dispatch-node.js +8 -3
  990. package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
  991. package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
  992. package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
  993. package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
  994. package/dist/services/workflow/workflow-autonomous-service.js +25 -13
  995. package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
  996. package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
  997. package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
  998. package/dist/services/workflow/workflow-graph-store.js +30 -107
  999. package/dist/services/workflow/workflow-graph-types.js +3 -3
  1000. package/dist/services/workflow/workflow-inflight-probe.js +14 -7
  1001. package/dist/services/workflow/workflow-loader.js +5 -1
  1002. package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
  1003. package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
  1004. package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
  1005. package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
  1006. package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
  1007. package/dist/services/workflow/workflow-router-service.js +169 -27
  1008. package/dist/services/workflow/workflow-skip-service.js +14 -4
  1009. package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
  1010. package/dist/services/workflow/workflow-spec-builders.js +121 -0
  1011. package/dist/services/workflow/workflow-spec.d.ts +7 -6
  1012. package/dist/services/workflow/workflow-spec.js +22 -116
  1013. package/dist/services/workflow/workflow-state-store.js +2 -1
  1014. package/dist/services/workspace/generated-artifacts-stamp.d.ts +2 -2
  1015. package/dist/services/workspace/generated-artifacts-stamp.js +2 -2
  1016. package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
  1017. package/dist/services/workspace/migrate-service.js +66 -16
  1018. package/dist/services/workspace/reconcile-migrate.js +6 -2
  1019. package/dist/services/workspace/reconcile-service.js +37 -16
  1020. package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
  1021. package/dist/services/workspace/workspace-clean-service.js +4 -1
  1022. package/dist/services/workspace/workspace-service.js +12 -4
  1023. package/dist/services/workspace/workspace-state-service.js +1 -1
  1024. package/dist/services/worktree/git-worktree-parser.js +13 -3
  1025. package/dist/services/worktree/host-worktree-reconciler.js +8 -4
  1026. package/dist/services/worktree/long-path-cleanup.js +23 -6
  1027. package/dist/services/worktree/worktree-gc-guard.js +3 -1
  1028. package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
  1029. package/dist/services/worktree/worktree-lease-types.js +10 -0
  1030. package/dist/services/worktree/worktree-lease.d.ts +2 -44
  1031. package/dist/shared/array-guards.d.ts +30 -0
  1032. package/dist/shared/array-guards.js +32 -0
  1033. package/dist/shared/format-md-compact-internals.d.ts +26 -0
  1034. package/dist/shared/format-md-compact-internals.js +125 -0
  1035. package/dist/shared/format-md-compact.js +1 -117
  1036. package/dist/shared/fs-utils.js +2 -1
  1037. package/dist/shared/incrementing-number.js +3 -3
  1038. package/dist/shared/json-parse.d.ts +71 -0
  1039. package/dist/shared/json-parse.js +32 -0
  1040. package/dist/shared/json-schema-mini.js +3 -1
  1041. package/dist/shared/path-safety.js +3 -1
  1042. package/dist/shared/path-utils.d.ts +20 -0
  1043. package/dist/shared/path-utils.js +26 -0
  1044. package/dist/shared/planner-response.js +3 -3
  1045. package/dist/shared/stale-policy.js +1 -3
  1046. package/dist/skills/peaks-maker/index.js +11 -11
  1047. package/package.json +31 -8
  1048. package/scripts/clean-dist.mjs +1 -2
  1049. package/scripts/copy-templates.mjs +2 -4
  1050. package/scripts/install-skills.mjs +286 -283
  1051. package/scripts/sync-version.mjs +25 -8
  1052. package/scripts/watch.mjs +8 -2
  1053. package/skills/bee/peaks-qa/references/reading-handoff-frontmatter.md +3 -1
  1054. package/skills/bee/peaks-rd/references/parallel-review-fanout.md +1 -1
  1055. package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +3 -2
  1056. package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +29 -7
  1057. package/skills/peaks-code/SKILL.md +1 -1
  1058. package/skills/peaks-code/references/frontend-only-mode.md +2 -2
  1059. package/skills/peaks-code/references/startup-sequence.md +0 -4
  1060. package/dist/cli/commands/upgrade-commands.d.ts +0 -25
  1061. package/dist/cli/commands/upgrade-commands.js +0 -154
  1062. package/dist/services/upgrade/1x-detector-service.d.ts +0 -7
  1063. package/dist/services/upgrade/1x-detector-service.js +0 -94
  1064. package/dist/services/upgrade/gitignore-migrate-service.d.ts +0 -56
  1065. package/dist/services/upgrade/gitignore-migrate-service.js +0 -170
  1066. package/dist/services/upgrade/upgrade-service.d.ts +0 -81
  1067. package/dist/services/upgrade/upgrade-service.js +0 -405
  1068. package/skills/peaks-code/references/step-0-55-1x-detection.md +0 -83
@@ -27,10 +27,18 @@ function buildInternalIssues(changeId, detail) {
27
27
  issues.push({ level: 'warning', rule: 'why-non-empty', message: 'Why section is empty' });
28
28
  }
29
29
  if (proposal.whatChanges.length === 0) {
30
- issues.push({ level: 'error', rule: 'what-changes-non-empty', message: 'What Changes section has no bullets' });
30
+ issues.push({
31
+ level: 'error',
32
+ rule: 'what-changes-non-empty',
33
+ message: 'What Changes section has no bullets'
34
+ });
31
35
  }
32
36
  if (proposal.acceptanceCriteria.length === 0) {
33
- issues.push({ level: 'error', rule: 'acceptance-non-empty', message: 'Acceptance Criteria section has no bullets' });
37
+ issues.push({
38
+ level: 'error',
39
+ rule: 'acceptance-non-empty',
40
+ message: 'Acceptance Criteria section has no bullets'
41
+ });
34
42
  }
35
43
  return issues;
36
44
  }
@@ -57,11 +65,20 @@ export async function validateOpenSpecChange(changeId, options = {}) {
57
65
  if (options.preferExternal === true) {
58
66
  const outcome = await runner('openspec', ['validate', changeId]);
59
67
  if (outcome.available) {
60
- const cliOutput = [outcome.stdout, outcome.stderr].filter((part) => part.length > 0).join('\n').trim();
68
+ const cliOutput = [outcome.stdout, outcome.stderr]
69
+ .filter((part) => part.length > 0)
70
+ .join('\n')
71
+ .trim();
61
72
  const passed = outcome.exitCode === 0;
62
73
  const issues = passed
63
74
  ? []
64
- : [{ level: 'error', rule: 'openspec-cli-failed', message: `openspec validate exited with code ${outcome.exitCode ?? 'null'}` }];
75
+ : [
76
+ {
77
+ level: 'error',
78
+ rule: 'openspec-cli-failed',
79
+ message: `openspec validate exited with code ${outcome.exitCode ?? 'null'}`
80
+ }
81
+ ];
65
82
  return { changeId, valid: passed, source: 'openspec-cli', issues, cliOutput };
66
83
  }
67
84
  const internal = await runInternal(changeId, openspecRoot);
@@ -69,7 +86,11 @@ export async function validateOpenSpecChange(changeId, options = {}) {
69
86
  return null;
70
87
  }
71
88
  internal.issues = [
72
- { level: 'warning', rule: 'openspec-cli-unavailable', message: 'openspec CLI not found, fell back to internal lint' },
89
+ {
90
+ level: 'warning',
91
+ rule: 'openspec-cli-unavailable',
92
+ message: 'openspec CLI not found, fell back to internal lint'
93
+ },
73
94
  ...internal.issues
74
95
  ];
75
96
  return internal;
@@ -117,12 +117,8 @@ function renderBaselineTemplate() {
117
117
  }
118
118
  function buildPlan(projectRoot, apply) {
119
119
  const sessionId = getSessionId(projectRoot);
120
- const sessionRoot = sessionId !== null
121
- ? getSessionDir(projectRoot, sessionId)
122
- : null;
123
- const perfBaselinePath = sessionRoot !== null
124
- ? join(sessionRoot, 'rd', 'perf-baseline.md')
125
- : null;
120
+ const sessionRoot = sessionId !== null ? getSessionDir(projectRoot, sessionId) : null;
121
+ const perfBaselinePath = sessionRoot !== null ? join(sessionRoot, 'rd', 'perf-baseline.md') : null;
126
122
  const plannedWrites = [];
127
123
  if (sessionRoot !== null && perfBaselinePath !== null) {
128
124
  plannedWrites.push({
@@ -118,7 +118,8 @@ export function readManifest(root) {
118
118
  const raw = readFileSync(p, 'utf8');
119
119
  return JSON.parse(raw);
120
120
  }
121
- catch { // TODO(g2): fail-closed JSON parse — null is the documented contract, caller checks via existsSync
121
+ catch {
122
+ // TODO(g2): fail-closed JSON parse — null is the documented contract, caller checks via existsSync
122
123
  return null;
123
124
  }
124
125
  }
@@ -29,7 +29,10 @@ function childHasPeaks(dir) {
29
29
  * leading dots or dashes. Used when the dir name itself is the id
30
30
  * (the common case). */
31
31
  function sanitizeId(name) {
32
- return name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^[-.]+|[-.]+$/g, '');
32
+ return name
33
+ .toLowerCase()
34
+ .replace(/[^a-z0-9._-]+/g, '-')
35
+ .replace(/^[-.]+|[-.]+$/g, '');
33
36
  }
34
37
  /** Walk the parent root at depth 1 and return discovered children. */
35
38
  export function scanPolyrepo(root, opts = {}) {
@@ -0,0 +1,42 @@
1
+ import type { Handoff, HandoffSchemaVersion } from './handoff-types.js';
2
+ /** Required schema version for new handoffs. */
3
+ export declare const HANDOFF_SCHEMA_VERSION: HandoffSchemaVersion;
4
+ export declare function serializeHandoff(handoff: Handoff): string;
5
+ /**
6
+ * N1: accept BOTH shapes of `schemaVersion` — the string `'2'` and the bare
7
+ * YAML number `2` — and reject any other value.
8
+ *
9
+ * The reader used to require `typeof v.schemaVersion === 'string'`. That made
10
+ * `readHandoff` refuse `prd/handoff.md` written by `handoff-auto-regen.ts`,
11
+ * which emits the unquoted `schemaVersion: 2`, while the
12
+ * `AUDIT_REQUIRES_HANDOFF` prereq — a SUBSTRING check for `schemaVersion: 2` —
13
+ * happily passed the same bytes. So the gate that exists to guarantee a
14
+ * readable handoff was satisfied by a handoff the parser would not read, and
15
+ * `peaks prd handoff verify` exited 1 on a healthy file.
16
+ *
17
+ * Slice `2026-09-14-handoff-writer-gate-divergence` then fixed the other half:
18
+ * the writer no longer emits the quoted form at all (see
19
+ * `handoff-frontmatter.ts`). This tolerance stays because handoffs already on
20
+ * disk were written by the old writer and by hand; the writer fix must not
21
+ * retroactively make them unreadable.
22
+ */
23
+ export declare function isSchemaVersion2(value: unknown): boolean;
24
+ /**
25
+ * B1: `gateEvidence` is optional, but when present it MUST be a map of
26
+ * strings — an ARRAY here is the pre-B1 shape its own test file used to
27
+ * write, and it is a broken declaration, not a claim.
28
+ *
29
+ * F2 of `rid-b1-qa` removed this function's own copy of the shape rule. It
30
+ * used to be a second predicate (same boundary, different downstream result)
31
+ * that let the same bytes read one way here and another way through
32
+ * `readHandoffGateEvidence`; both now ask `classifyGateEvidence`. Only
33
+ * `absent` and `ok` are accepted: a malformed declaration must be refused by
34
+ * `readHandoff` (which is documented to throw on malformed input) exactly as
35
+ * the reader refuses it, so the two can never disagree about the same file.
36
+ *
37
+ * Unknown keys are still accepted HERE — the map is normalized to the five
38
+ * known keys by the caller — because refusing them would make a typo render
39
+ * a whole capsule unreadable, and the reader's `unknownKeys` is the surface
40
+ * that makes the typo diagnosable instead.
41
+ */
42
+ export declare function isGateEvidence(value: unknown): boolean;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Slice `b1-filesplit-campaign` (wave 3) — verbatim extraction of the handoff
3
+ * frontmatter's FIELD-level primitives from `./handoff-service.ts`: the required
4
+ * schema version, the one canonical frontmatter rendering, and the two
5
+ * per-field acceptance rules (`schemaVersion`, `gateEvidence`). The composite
6
+ * predicate that calls them, `isHandoffFrontmatter`, stays in
7
+ * `handoff-service.ts` — it carries an existing `complexity` finding, and a new
8
+ * module must start clean, so only what it calls moved.
9
+ *
10
+ * Bodies, doc comments and thrown strings are unchanged; `handoff-service.ts`
11
+ * imports these and keeps exporting its own public surface, so no importer
12
+ * changed.
13
+ */
14
+ import { serializeHandoffFrontmatter } from './handoff-frontmatter.js';
15
+ import { classifyGateEvidence } from './handoff-gate-evidence.js';
16
+ /** Required schema version for new handoffs. */
17
+ export const HANDOFF_SCHEMA_VERSION = '2';
18
+ export function serializeHandoff(handoff) {
19
+ // The one canonical frontmatter rendering, shared with
20
+ // `handoff-auto-regen.ts`. `yaml.stringify` used to render this block and
21
+ // emitted `schemaVersion: "2"` + a bare `handoffHash:`, which the
22
+ // `AUDIT_REQUIRES_HANDOFF` gate and both audit loaders all reject.
23
+ return `${serializeHandoffFrontmatter(handoff.frontmatter)}${handoff.body}`;
24
+ }
25
+ /**
26
+ * N1: accept BOTH shapes of `schemaVersion` — the string `'2'` and the bare
27
+ * YAML number `2` — and reject any other value.
28
+ *
29
+ * The reader used to require `typeof v.schemaVersion === 'string'`. That made
30
+ * `readHandoff` refuse `prd/handoff.md` written by `handoff-auto-regen.ts`,
31
+ * which emits the unquoted `schemaVersion: 2`, while the
32
+ * `AUDIT_REQUIRES_HANDOFF` prereq — a SUBSTRING check for `schemaVersion: 2` —
33
+ * happily passed the same bytes. So the gate that exists to guarantee a
34
+ * readable handoff was satisfied by a handoff the parser would not read, and
35
+ * `peaks prd handoff verify` exited 1 on a healthy file.
36
+ *
37
+ * Slice `2026-09-14-handoff-writer-gate-divergence` then fixed the other half:
38
+ * the writer no longer emits the quoted form at all (see
39
+ * `handoff-frontmatter.ts`). This tolerance stays because handoffs already on
40
+ * disk were written by the old writer and by hand; the writer fix must not
41
+ * retroactively make them unreadable.
42
+ */
43
+ export function isSchemaVersion2(value) {
44
+ return value === HANDOFF_SCHEMA_VERSION || value === 2;
45
+ }
46
+ /**
47
+ * B1: `gateEvidence` is optional, but when present it MUST be a map of
48
+ * strings — an ARRAY here is the pre-B1 shape its own test file used to
49
+ * write, and it is a broken declaration, not a claim.
50
+ *
51
+ * F2 of `rid-b1-qa` removed this function's own copy of the shape rule. It
52
+ * used to be a second predicate (same boundary, different downstream result)
53
+ * that let the same bytes read one way here and another way through
54
+ * `readHandoffGateEvidence`; both now ask `classifyGateEvidence`. Only
55
+ * `absent` and `ok` are accepted: a malformed declaration must be refused by
56
+ * `readHandoff` (which is documented to throw on malformed input) exactly as
57
+ * the reader refuses it, so the two can never disagree about the same file.
58
+ *
59
+ * Unknown keys are still accepted HERE — the map is normalized to the five
60
+ * known keys by the caller — because refusing them would make a typo render
61
+ * a whole capsule unreadable, and the reader's `unknownKeys` is the surface
62
+ * that makes the typo diagnosable instead.
63
+ */
64
+ export function isGateEvidence(value) {
65
+ const kind = classifyGateEvidence(value).kind;
66
+ return kind === 'absent' || kind === 'ok';
67
+ }
@@ -48,6 +48,20 @@ function blockSequence(key, values) {
48
48
  return [`${key}: []`];
49
49
  return [`${key}:`, ...values.map((value) => ` - ${yamlScalar(value)}`)];
50
50
  }
51
+ /**
52
+ * The OPTIONAL form: no line at all when the field is absent or empty.
53
+ *
54
+ * `goals` and its siblings cannot use this — `isHandoffFrontmatter` requires an
55
+ * ARRAY there, so an omitted line would fail the shape check on read, and `[]` is
56
+ * the honest rendering of "declared, none". The authored fields have no such
57
+ * requirement: a capsule that names no files declares nothing, and a `files: []`
58
+ * line would read as a claim that the slice touches no file.
59
+ */
60
+ function blockOptionalSequence(key, values) {
61
+ if (values === undefined || values.length === 0)
62
+ return [];
63
+ return [`${key}:`, ...values.map((value) => ` - ${yamlScalar(value)}`)];
64
+ }
51
65
  /**
52
66
  * Render `gateEvidence` as a YAML map of quoted path scalars, or as NOTHING.
53
67
  *
@@ -103,6 +117,44 @@ function gateEvidenceBlock(evidence) {
103
117
  });
104
118
  return entries.length === 0 ? [] : ['gateEvidence:', ...entries];
105
119
  }
120
+ /**
121
+ * Render a sequence of records (`decisions`, `risks`) as a YAML block list, or
122
+ * as NOTHING when the list is absent or empty — the same omission policy as
123
+ * `gateEvidence`, so a capsule that declares no risks gains no noise line.
124
+ *
125
+ * The field names are rendered in the order given, and every value is validated
126
+ * as a string HERE rather than dropped later. That is deliberate: the bug these
127
+ * fields fix was a serializer that rendered from the type and so discarded
128
+ * anything the type did not name, silently, on every rewrite. A record missing a
129
+ * required field therefore has to stop the write, not vanish from it.
130
+ */
131
+ function blockRecords(key, items, requiredFields) {
132
+ if (items === undefined || items.length === 0)
133
+ return [];
134
+ const lines = [`${key}:`];
135
+ items.forEach((rawItem, index) => {
136
+ // The values are checked at RUNTIME, not trusted from the type, because a
137
+ // capsule reaches here from `readHandoff` as well as from a producer: the
138
+ // spread that makes an authored field survive a read also makes it survive
139
+ // unvalidated. A record missing a required field stops the write rather than
140
+ // vanishing from it — which is precisely how the old serializer made a
141
+ // declared risk look satisfied.
142
+ const record = rawItem !== null && typeof rawItem === 'object' ? { ...rawItem } : {};
143
+ const missing = requiredFields.filter((field) => typeof record[field] !== 'string' || record[field] === '');
144
+ if (missing.length > 0) {
145
+ throw new Error(`handoff: ${key}[${index}] is missing ${missing.join(', ')} — refusing to write a ` +
146
+ `record the next role cannot read (a risk without a mitigation is a red line, and ` +
147
+ 'dropping the field is how it looked satisfied)');
148
+ }
149
+ requiredFields.forEach((field, fieldIndex) => {
150
+ const value = record[field];
151
+ lines.push(fieldIndex === 0
152
+ ? ` - ${field}: ${yamlScalar(value)}`
153
+ : ` ${field}: ${yamlScalar(value)}`);
154
+ });
155
+ });
156
+ return lines;
157
+ }
106
158
  /**
107
159
  * Serialize `frontmatter` into the fenced block, terminated by the closing
108
160
  * `---` and a trailing newline. Callers append the body verbatim, which keeps
@@ -125,13 +177,22 @@ export function serializeHandoffFrontmatter(frontmatter) {
125
177
  ...blockSequence('acceptanceCriteria', frontmatter.acceptanceCriteria),
126
178
  ...blockSequence('preservedBehavior', frontmatter.preservedBehavior),
127
179
  `handoffPath: ${yamlScalar(frontmatter.handoffPath)}`,
180
+ // The authored fields: written by peaks-prd / peaks-rd, read by peaks-qa's
181
+ // mechanical cross-checks, and PRESERVED by every rewrite. They sit after
182
+ // `handoffPath` because `schemaVersion` and `sha256` must stay first-parsed,
183
+ // and before `gateEvidence` because that block is last by contract.
184
+ ...blockOptionalSequence('scope', frontmatter.scope),
185
+ ...blockOptionalSequence('files', frontmatter.files),
186
+ ...blockRecords('decisions', frontmatter.decisions, ['id', 'summary', 'rationale']),
187
+ ...blockRecords('risks', frontmatter.risks, ['id', 'description', 'mitigation']),
188
+ ...blockOptionalSequence('nextActions', frontmatter.nextActions),
128
189
  // LAST, after every anchored field: `schemaVersion` / `sha256` are
129
190
  // matched as `^`-anchored lines by the gate and both audit loaders, so
130
191
  // nothing new may be inserted before them. A nested map also renders
131
192
  // indented lines only, leaving the top-level key set exactly as it was
132
193
  // for every capsule that declares no evidence.
133
194
  ...gateEvidenceBlock(frontmatter.gateEvidence),
134
- '---',
195
+ '---'
135
196
  ];
136
197
  return `${lines.join('\n')}\n`;
137
198
  }
@@ -8,16 +8,8 @@
8
8
  // `skills/bee/peaks-rd/references/writing-handoff-frontmatter.md:35-41`; the
9
9
  // key set is `GATE_EVIDENCE_KEYS` in `./handoff-types.js`.
10
10
  //
11
- // WHAT THIS FILE USED TO SAY, AND WHY THAT WAS FALSE: its header claimed the
12
- // field was a `string[]` of "gate names" and that `initHandoff` wrote it.
13
- // Neither held. `grep -rn gateEvidence src/` hit this file and nothing else —
14
- // there was no producer (`HandoffFrontmatter` had no such field,
15
- // `serializeHandoffFrontmatter` never emitted it, `initHandoff` rejected it)
16
- // and no consumer. The field was prose describing data that did not exist,
17
- // and the comment asserting a producer was the reason nobody noticed.
18
- //
19
11
  // WHAT IS ON DISK NOW, stated precisely because a header that overclaims is
20
- // the defect above. B1 added the producer FUNCTIONS; B2 wired their callers,
12
+ // the defect below. B1 added the producer FUNCTIONS; B2 wired their callers,
21
13
  // which is what made the difference — until then every producer passed
22
14
  // nothing, so no capsule carried the field and saying otherwise would have
23
15
  // described a fact that held only inside tests (F1 of `rid-b1-qa`). At
@@ -28,7 +20,19 @@
28
20
  // artifact is readable — and carries no `gateEvidence` block at all when it
29
21
  // is not. Gate C (`checkPrerequisites` at `rd:qa-handoff`) fails a declared
30
22
  // path that is not on disk. Every clause above is asserted end-to-end in
31
- // `tests/unit/prd/gate-evidence-derivation.test.ts`.
23
+ // `tests/unit/prd/gate-evidence-derivation.test.ts`. The derived map is also
24
+ // printed by `peaks prd handoff init` (dry-run and applied), so the key set
25
+ // does not have to be read out of this source file.
26
+ //
27
+ // WHAT THIS FILE USED TO SAY, AND WHY THAT WAS FALSE: its header claimed the
28
+ // field was a `string[]` of "gate names" and that `initHandoff` wrote it.
29
+ // Neither held. `grep -rn gateEvidence src/` hit this file and nothing else —
30
+ // there was no producer (`HandoffFrontmatter` had no such field,
31
+ // `serializeHandoffFrontmatter` never emitted it, `initHandoff` rejected it)
32
+ // and no consumer. The field was prose describing data that did not exist,
33
+ // and the comment asserting a producer was the reason nobody noticed. That
34
+ // paragraph describes the PRE-B1 state; reading it as the current state is
35
+ // the exact misreading that put it here.
32
36
  //
33
37
  // WHY IT IS STILL STAND-ALONE: keeping the typed-value logic here, rather
34
38
  // than in `handoff-service.ts`, keeps `HandoffFrontmatter` a pure data shape
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The canonical capsule path for ONE SLICE, relative to the project root.
3
+ *
4
+ * Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
5
+ * per SESSION (`prd/handoff.md`), so the second slice's handoff silently
6
+ * overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
7
+ * because it never checked WHOSE rid the file named. Measured on
8
+ * `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
9
+ * capsule left by a different line of work.
10
+ *
11
+ * This is the WRITE target, so it always carries the rid — a consumer-side
12
+ * fallback here would leave a rid-scoped requirement with a bare-name writer,
13
+ * which is the defect shape this slice exists to remove. Readers that must
14
+ * tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
15
+ */
16
+ export declare function handoffRelativePath(sessionId: string, requestId: string): string;
17
+ /**
18
+ * The capsule a CONSUMER should read for (session, requestId): the rid-scoped
19
+ * path when it is on disk, else the pre-rid-scoping bare name. Returns null
20
+ * when neither exists.
21
+ *
22
+ * Three sessions on disk still hold only the bare file
23
+ * (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
24
+ * `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
25
+ * the gate and for every reader below.
26
+ *
27
+ * `requestId` is optional because the detect-only audit surface reaches its
28
+ * service without one. Such a caller can name only the bare path: a session
29
+ * holding nothing but rid-scoped capsules reports missing rather than picking
30
+ * among its siblings' capsules, which would re-open the cross-slice mix-up
31
+ * this scoping exists to close (fail closed, not "some capsule is there").
32
+ */
33
+ export declare function resolveHandoffPath(opts: {
34
+ projectRoot: string;
35
+ sessionId: string;
36
+ requestId?: string;
37
+ }): string | null;
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Slice `b1-filesplit-campaign` (wave 3) — verbatim extraction of the handoff
3
+ * capsule PATH layer from `./handoff-service.ts` (the id guard, the rid-scoped
4
+ * write path and the consumer-side resolver) so that module clears the 300
5
+ * raw-line cap. No guard, no message string and no join changed;
6
+ * `handoff-service.ts` re-exports both public names from its own path, so no
7
+ * importer changed. The id->path escape this module guards is measured by
8
+ * `tests/unit/runtime/no-runtime-input-guard.test.ts` rule D, whose scanned
9
+ * module list now names this file next to `handoff-service.ts`.
10
+ */
11
+ import { existsSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { isUnsafePathInput } from '../../shared/path-safety.js';
14
+ import { REQUEST_ID_PATTERN } from '../artifacts/request-artifact-service.js';
15
+ /**
16
+ * Both ids in a handoff path are caller-supplied path segments, so both are
17
+ * checked at the join. Added 2026-09-14 (repair R1, security audit F2 of
18
+ * `2026-09-14-cli-id-escape-instrumentation`).
19
+ *
20
+ * This function was introduced by `0536d5bd` — the commit that instrumented
21
+ * this defect class — with neither id checked, and it sat outside rule D's
22
+ * scanned layer, so the instrument could not see its own new member.
23
+ * Measured on the pre-fix tree (`prd handoff init --apply`, temp project,
24
+ * `ok: true` both times):
25
+ *
26
+ * --rid '../../../../../../README' replaced the project-root README.md
27
+ * --sid '../../../../SIDOUT' wrote 4 levels above the project root
28
+ *
29
+ * The two axes need two different controls, for a recorded reason: the rid has
30
+ * a pinned format (`REQUEST_ID_PATTERN`, no separator, no dot-dot, no drive)
31
+ * and the sid has none, so it gets the segment check. `isUnsafePathInput`
32
+ * alone is NOT enough for the rid — it admits `a/b` (two non-empty segments),
33
+ * which `request-artifact-service.ts` would reject.
34
+ *
35
+ * Guarding HERE rather than at the three `prd`/`env` flags means every producer
36
+ * that writes through this constructor — `initHandoff`'s default,
37
+ * `handoff-auto-regen.ts`, `evidence-generator.ts` — is covered by the join
38
+ * itself, not by each caller re-deciding.
39
+ */
40
+ function assertSafeHandoffIds(sessionId, requestId) {
41
+ if (!REQUEST_ID_PATTERN.test(requestId)) {
42
+ throw new Error(`Invalid request id: ${requestId} (expected letters, digits, dots, underscores, or dashes)`);
43
+ }
44
+ if (isUnsafePathInput(sessionId)) {
45
+ throw new Error(`Invalid session id: ${sessionId} (must be a single path segment)`);
46
+ }
47
+ }
48
+ /**
49
+ * The canonical capsule path for ONE SLICE, relative to the project root.
50
+ *
51
+ * Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
52
+ * per SESSION (`prd/handoff.md`), so the second slice's handoff silently
53
+ * overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
54
+ * because it never checked WHOSE rid the file named. Measured on
55
+ * `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
56
+ * capsule left by a different line of work.
57
+ *
58
+ * This is the WRITE target, so it always carries the rid — a consumer-side
59
+ * fallback here would leave a rid-scoped requirement with a bare-name writer,
60
+ * which is the defect shape this slice exists to remove. Readers that must
61
+ * tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
62
+ */
63
+ export function handoffRelativePath(sessionId, requestId) {
64
+ assertSafeHandoffIds(sessionId, requestId);
65
+ return join('.peaks', '_runtime', sessionId, 'prd', `handoff-${requestId}.md`);
66
+ }
67
+ /**
68
+ * The capsule a CONSUMER should read for (session, requestId): the rid-scoped
69
+ * path when it is on disk, else the pre-rid-scoping bare name. Returns null
70
+ * when neither exists.
71
+ *
72
+ * Three sessions on disk still hold only the bare file
73
+ * (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
74
+ * `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
75
+ * the gate and for every reader below.
76
+ *
77
+ * `requestId` is optional because the detect-only audit surface reaches its
78
+ * service without one. Such a caller can name only the bare path: a session
79
+ * holding nothing but rid-scoped capsules reports missing rather than picking
80
+ * among its siblings' capsules, which would re-open the cross-slice mix-up
81
+ * this scoping exists to close (fail closed, not "some capsule is there").
82
+ */
83
+ export function resolveHandoffPath(opts) {
84
+ // The legacy bare-name candidate below is a second join of the same sid, in a
85
+ // second function, so it needs the sid guarded in its own right — the
86
+ // optional-requestId branch reaches `handoffRelativePath` (guarded there), but
87
+ // the branch that is taken when a caller has NO rid reaches this join only.
88
+ if (isUnsafePathInput(opts.sessionId)) {
89
+ throw new Error(`Invalid session id: ${opts.sessionId} (must be a single path segment)`);
90
+ }
91
+ const candidates = [
92
+ ...(opts.requestId !== undefined ? [handoffRelativePath(opts.sessionId, opts.requestId)] : []),
93
+ join('.peaks', '_runtime', opts.sessionId, 'prd', 'handoff.md')
94
+ ];
95
+ for (const relative of candidates) {
96
+ const absolute = join(opts.projectRoot, relative);
97
+ if (existsSync(absolute))
98
+ return absolute;
99
+ }
100
+ return null;
101
+ }
@@ -22,46 +22,10 @@
22
22
  * the body content as UTF-8 bytes. The body MUST be the literal
23
23
  * markdown source — no normalization, no trailing-newline padding.
24
24
  */
25
- import type { GateEvidence, Handoff, HandoffProbe } from './handoff-types.js';
25
+ import type { GateEvidence, Handoff, HandoffDecision, HandoffProbe, HandoffRisk } from './handoff-types.js';
26
+ export { handoffRelativePath, resolveHandoffPath } from './handoff-path-resolution.js';
26
27
  /** Compute the lowercase hex sha256 of a UTF-8 string. */
27
28
  export declare function sha256OfBody(body: string): string;
28
- /**
29
- * The canonical capsule path for ONE SLICE, relative to the project root.
30
- *
31
- * Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
32
- * per SESSION (`prd/handoff.md`), so the second slice's handoff silently
33
- * overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
34
- * because it never checked WHOSE rid the file named. Measured on
35
- * `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
36
- * capsule left by a different line of work.
37
- *
38
- * This is the WRITE target, so it always carries the rid — a consumer-side
39
- * fallback here would leave a rid-scoped requirement with a bare-name writer,
40
- * which is the defect shape this slice exists to remove. Readers that must
41
- * tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
42
- */
43
- export declare function handoffRelativePath(sessionId: string, requestId: string): string;
44
- /**
45
- * The capsule a CONSUMER should read for (session, requestId): the rid-scoped
46
- * path when it is on disk, else the pre-rid-scoping bare name. Returns null
47
- * when neither exists.
48
- *
49
- * Three sessions on disk still hold only the bare file
50
- * (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
51
- * `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
52
- * the gate and for every reader below.
53
- *
54
- * `requestId` is optional because the detect-only audit surface reaches its
55
- * service without one. Such a caller can name only the bare path: a session
56
- * holding nothing but rid-scoped capsules reports missing rather than picking
57
- * among its siblings' capsules, which would re-open the cross-slice mix-up
58
- * this scoping exists to close (fail closed, not "some capsule is there").
59
- */
60
- export declare function resolveHandoffPath(opts: {
61
- projectRoot: string;
62
- sessionId: string;
63
- requestId?: string;
64
- }): string | null;
65
29
  /** Pure: produce a Handoff with the frontmatter populated. Hash is
66
30
  * computed here; callers MUST NOT pre-populate `handoffHash`. */
67
31
  export declare function initHandoff(opts: {
@@ -94,6 +58,16 @@ export declare function initHandoff(opts: {
94
58
  * is refused here by a throw and there by a status; neither silently
95
59
  * produces a map the other cannot. */
96
60
  gateEvidence?: GateEvidence;
61
+ /** The authored fields peaks-qa cross-checks (`decisions[] ↔ tests`,
62
+ * `risks[] ↔ security tests`, `files[] ↔ git diff`). They are OPTIONAL and
63
+ * pass through verbatim: unlike `gateEvidence`, nothing derives them — they
64
+ * are a writer's judgement about the slice, so a producer that has not made
65
+ * that judgement declares nothing rather than an empty claim. */
66
+ scope?: readonly string[];
67
+ files?: readonly string[];
68
+ decisions?: readonly HandoffDecision[];
69
+ risks?: readonly HandoffRisk[];
70
+ nextActions?: readonly string[];
97
71
  }): Handoff;
98
72
  /** Write a Handoff to disk. `projectRoot` is the absolute project
99
73
  * root (so the `.peaks/_runtime/...` path is resolved absolutely).