peaks-loop 4.0.0-beta.9 → 4.0.3

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 (552) hide show
  1. package/CHANGELOG.md +572 -234
  2. package/README-en.md +67 -30
  3. package/README.md +67 -30
  4. package/agents/karpathy-reviewer.md +33 -0
  5. package/bin/peaks.js +0 -0
  6. package/dist/cli/cli-helpers.d.ts +31 -6
  7. package/dist/cli/cli-helpers.js +48 -25
  8. package/dist/cli/commands/_register.d.ts +3 -0
  9. package/dist/cli/commands/_register.js +139 -0
  10. package/dist/cli/commands/_super.d.ts +10 -0
  11. package/dist/cli/commands/_super.js +97 -0
  12. package/dist/cli/commands/adapter-commands-s2a.js +1 -1
  13. package/dist/cli/commands/asset-commands.js +33 -16
  14. package/dist/cli/commands/audit-commands.js +2 -2
  15. package/dist/cli/commands/autonomous-swarm-commands.d.ts +12 -0
  16. package/dist/cli/commands/autonomous-swarm-commands.js +120 -0
  17. package/dist/cli/commands/bee-commands.js +1 -1
  18. package/dist/cli/commands/capability-commands.js +1 -1
  19. package/dist/cli/commands/capability-worker-config-sc-commands.js +0 -2
  20. package/dist/cli/commands/changeset-commands.d.ts +13 -0
  21. package/dist/cli/commands/changeset-commands.js +46 -0
  22. package/dist/cli/commands/code-commands.d.ts +11 -1
  23. package/dist/cli/commands/code-commands.js +19 -699
  24. package/dist/cli/commands/code-job-shape-commands.d.ts +9 -0
  25. package/dist/cli/commands/code-job-shape-commands.js +164 -0
  26. package/dist/cli/commands/code-mode-gate-commands.d.ts +9 -0
  27. package/dist/cli/commands/code-mode-gate-commands.js +223 -0
  28. package/dist/cli/commands/code-review-commands.js +2 -2
  29. package/dist/cli/commands/code-run-command.d.ts +12 -0
  30. package/dist/cli/commands/code-run-command.js +68 -0
  31. package/dist/cli/commands/code-runtime-commands.d.ts +11 -0
  32. package/dist/cli/commands/code-runtime-commands.js +391 -0
  33. package/dist/cli/commands/codegraph-commands.js +1 -1
  34. package/dist/cli/commands/compact-command.js +53 -1
  35. package/dist/cli/commands/complexity-commands.js +1 -1
  36. package/dist/cli/commands/config-commands.js +4 -75
  37. package/dist/cli/commands/container-commands.d.ts +28 -0
  38. package/dist/cli/commands/container-commands.js +221 -0
  39. package/dist/cli/commands/context-commands.js +3 -2
  40. package/dist/cli/commands/core/artifacts-command.js +1 -1
  41. package/dist/cli/commands/core/binding-commands.js +1 -1
  42. package/dist/cli/commands/core/doctor-command.js +63 -3
  43. package/dist/cli/commands/core/memory-command.js +1 -1
  44. package/dist/cli/commands/core/profile-command.js +1 -1
  45. package/dist/cli/commands/core/proxy-command.js +1 -1
  46. package/dist/cli/commands/core/session-command.js +9 -7
  47. package/dist/cli/commands/core/skill-command.js +7 -4
  48. package/dist/cli/commands/core/standards-command.js +1 -1
  49. package/dist/cli/commands/cron-commands.d.ts +57 -0
  50. package/dist/cli/commands/cron-commands.js +257 -0
  51. package/dist/cli/commands/cron-scheduler-commands.d.ts +47 -0
  52. package/dist/cli/commands/cron-scheduler-commands.js +284 -0
  53. package/dist/cli/commands/dashboard-commands.d.ts +4 -0
  54. package/dist/cli/commands/dashboard-commands.js +10 -0
  55. package/dist/cli/commands/dashboard-long-run.d.ts +25 -0
  56. package/dist/cli/commands/dashboard-long-run.js +122 -0
  57. package/dist/cli/commands/dashboard-summary.d.ts +12 -0
  58. package/dist/cli/commands/dashboard-summary.js +58 -0
  59. package/dist/cli/commands/dispatch-commands.d.ts +0 -7
  60. package/dist/cli/commands/dispatch-commands.js +372 -8
  61. package/dist/cli/commands/dispatch-from-dag.js +4 -1
  62. package/dist/cli/commands/doc-commands.js +1 -1
  63. package/dist/cli/commands/ecc-commands.d.ts +30 -0
  64. package/dist/cli/commands/ecc-commands.js +119 -0
  65. package/dist/cli/commands/evolution-commands.js +1 -1
  66. package/dist/cli/commands/feedback-commands.js +1 -1
  67. package/dist/cli/commands/final-review-commands.js +1 -1
  68. package/dist/cli/commands/fixture-commands.js +1 -1
  69. package/dist/cli/commands/fork-commands.js +1 -1
  70. package/dist/cli/commands/gate-commands.js +128 -6
  71. package/dist/cli/commands/governance-classify-contract-commands.d.ts +21 -0
  72. package/dist/cli/commands/governance-classify-contract-commands.js +273 -0
  73. package/dist/cli/commands/heartbeat-commands.js +76 -5
  74. package/dist/cli/commands/heartbeat-watch-command.d.ts +31 -0
  75. package/dist/cli/commands/heartbeat-watch-command.js +146 -0
  76. package/dist/cli/commands/hook-handle.js +1 -1
  77. package/dist/cli/commands/hooks-commands.js +126 -10
  78. package/dist/cli/commands/ide-commands.js +1 -1
  79. package/dist/cli/commands/impact-commands.js +1 -1
  80. package/dist/cli/commands/job-commands.js +34 -1
  81. package/dist/cli/commands/lease-metrics-commands.d.ts +67 -0
  82. package/dist/cli/commands/lease-metrics-commands.js +231 -0
  83. package/dist/cli/commands/lease-stats-commands.d.ts +65 -0
  84. package/dist/cli/commands/lease-stats-commands.js +107 -0
  85. package/dist/cli/commands/legacy-commands.js +1 -1
  86. package/dist/cli/commands/log-commands.js +1 -1
  87. package/dist/cli/commands/loop-commands.js +1 -1
  88. package/dist/cli/commands/loop-eval-commands.js +1 -1
  89. package/dist/cli/commands/memory-commands.js +1 -1
  90. package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
  91. package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +1 -1
  92. package/dist/cli/commands/mut-commands.d.ts +1 -1
  93. package/dist/cli/commands/mut-commands.js +1 -5
  94. package/dist/cli/commands/observability-commands.js +1 -1
  95. package/dist/cli/commands/openspec-commands.js +65 -4
  96. package/dist/cli/commands/perf-audit-commands.js +3 -3
  97. package/dist/cli/commands/perf-commands.js +1 -1
  98. package/dist/cli/commands/polyrepo-commands.js +1 -1
  99. package/dist/cli/commands/prd-blocks-commands.js +1 -1
  100. package/dist/cli/commands/prd-commands.js +4 -2
  101. package/dist/cli/commands/preferences-commands.js +23 -3
  102. package/dist/cli/commands/project-commands.js +1 -1
  103. package/dist/cli/commands/qa-business-review-commands.js +1 -1
  104. package/dist/cli/commands/qa-commands.d.ts +1 -1
  105. package/dist/cli/commands/qa-commands.js +39 -3
  106. package/dist/cli/commands/release-commands.d.ts +15 -0
  107. package/dist/cli/commands/release-commands.js +113 -21
  108. package/dist/cli/commands/request-commands.js +1 -1
  109. package/dist/cli/commands/retrospective-commands.js +1 -1
  110. package/dist/cli/commands/reviewer-commands.js +1 -1
  111. package/dist/cli/commands/role-commands.js +1 -1
  112. package/dist/cli/commands/runtime-commands-helpers.d.ts +7 -0
  113. package/dist/cli/commands/runtime-commands-helpers.js +24 -0
  114. package/dist/cli/commands/runtime-commands.js +1 -2
  115. package/dist/cli/commands/sc-commands.js +4 -2
  116. package/dist/cli/commands/scan-commands.js +1 -1
  117. package/dist/cli/commands/security-audit-commands.js +3 -3
  118. package/dist/cli/commands/sediment-commands.js +10 -1
  119. package/dist/cli/commands/session-24h-mode.d.ts +26 -0
  120. package/dist/cli/commands/session-24h-mode.js +196 -0
  121. package/dist/cli/commands/share-commands.d.ts +19 -0
  122. package/dist/cli/commands/share-commands.js +121 -2
  123. package/dist/cli/commands/skill-conformance-commands.js +1 -1
  124. package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +1 -1
  125. package/dist/cli/commands/skill-search-commands.js +4 -1
  126. package/dist/cli/commands/slice-commands.js +1 -1
  127. package/dist/cli/commands/slice-integrate-commands.js +1 -1
  128. package/dist/cli/commands/slice-review-commands.js +1 -1
  129. package/dist/cli/commands/smoke-commands.js +1 -1
  130. package/dist/cli/commands/sop-commands.js +1 -1
  131. package/dist/cli/commands/spill-demo-command.d.ts +7 -0
  132. package/dist/cli/commands/spill-demo-command.js +29 -0
  133. package/dist/cli/commands/statusline-commands.d.ts +12 -0
  134. package/dist/cli/commands/statusline-commands.js +79 -17
  135. package/dist/cli/commands/sub-agent-commands.js +2 -1
  136. package/dist/cli/commands/sub-agent-shared.d.ts +10 -0
  137. package/dist/cli/commands/sub-agent-shared.js +24 -1
  138. package/dist/cli/commands/swarm-commands.d.ts +13 -0
  139. package/dist/cli/commands/swarm-commands.js +77 -0
  140. package/dist/cli/commands/tech-commands.d.ts +64 -0
  141. package/dist/cli/commands/tech-commands.js +195 -0
  142. package/dist/cli/commands/understand-commands.js +1 -1
  143. package/dist/cli/commands/upgrade-commands.d.ts +2 -0
  144. package/dist/cli/commands/upgrade-commands.js +40 -5
  145. package/dist/cli/commands/user-touchpoint-commands.js +1 -1
  146. package/dist/cli/commands/verdict-aggregate-command.js +1 -1
  147. package/dist/cli/commands/vm-commands.d.ts +31 -0
  148. package/dist/cli/commands/vm-commands.js +274 -0
  149. package/dist/cli/commands/workflow-commands.js +24 -1
  150. package/dist/cli/commands/workflow-plan-commands.js +1 -1
  151. package/dist/cli/commands/workspace/init-command.js +1 -1
  152. package/dist/cli/commands/workspace/migrate-command.js +1 -1
  153. package/dist/cli/commands/workspace/reconcile-command.js +1 -1
  154. package/dist/cli/commands/worktree-auth-commands.d.ts +29 -0
  155. package/dist/cli/commands/worktree-auth-commands.js +652 -0
  156. package/dist/cli/index.js +58 -13
  157. package/dist/cli/program.d.ts +2 -2
  158. package/dist/cli/program.js +86 -281
  159. package/dist/services/24h-mode/decider.d.ts +103 -0
  160. package/dist/services/24h-mode/decider.js +144 -0
  161. package/dist/services/24h-mode/index.d.ts +12 -0
  162. package/dist/services/24h-mode/index.js +12 -0
  163. package/dist/services/24h-mode/state.d.ts +48 -0
  164. package/dist/services/24h-mode/state.js +51 -0
  165. package/dist/services/24h-mode/store.d.ts +27 -0
  166. package/dist/services/24h-mode/store.js +119 -0
  167. package/dist/services/artifacts/artifact-prerequisites.js +1 -1
  168. package/dist/services/artifacts/request-artifact-service.js +1 -1
  169. package/dist/services/artifacts/workspace-service.js +1 -1
  170. package/dist/services/audit/enforcers/lint-bee-runtime-contract.d.ts +25 -0
  171. package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +91 -0
  172. package/dist/services/audit/enforcers/lint-peaks-code-runtime.d.ts +16 -0
  173. package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +31 -0
  174. package/dist/services/audit/enforcers/lint-peaks-skill-runtime.d.ts +23 -0
  175. package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +59 -0
  176. package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.d.ts +28 -0
  177. package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +86 -0
  178. package/dist/services/audit/enforcers/lint-prd-artifact-handoff.d.ts +16 -0
  179. package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +41 -0
  180. package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +27 -0
  181. package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +47 -0
  182. package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.d.ts +19 -0
  183. package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +47 -0
  184. package/dist/services/audit/enforcers/lint-rd-handoff-coverage.d.ts +18 -0
  185. package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +70 -0
  186. package/dist/services/audit/enforcers/lint-skill-presence-mandatory.d.ts +25 -0
  187. package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +53 -0
  188. package/dist/services/audit/red-line-catalog-p2-a.d.ts +0 -6
  189. package/dist/services/audit/red-line-catalog-p2-a.js +230 -1
  190. package/dist/services/audit/static-service.d.ts +32 -25
  191. package/dist/services/audit/static-service.js +30 -109
  192. package/dist/services/audit-independent/index.d.ts +2 -0
  193. package/dist/services/audit-independent/index.js +2 -0
  194. package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +127 -0
  195. package/dist/services/autonomous-swarm/autonomous-swarm-service.js +446 -0
  196. package/dist/services/changeset/changeset-check-service.d.ts +22 -0
  197. package/dist/services/changeset/changeset-check-service.js +47 -0
  198. package/dist/services/code/auto-compact-modes.d.ts +30 -0
  199. package/dist/services/code/auto-compact-modes.js +38 -0
  200. package/dist/services/code/auto-compact-orchestrator.d.ts +43 -5
  201. package/dist/services/code/auto-compact-orchestrator.js +101 -21
  202. package/dist/services/code/dag-orchestrator.d.ts +30 -1
  203. package/dist/services/code/dag-orchestrator.js +106 -1
  204. package/dist/services/code/status-line-renderer.d.ts +2 -0
  205. package/dist/services/code/status-line-renderer.js +21 -3
  206. package/dist/services/code-review/ocr-service.d.ts +1 -1
  207. package/dist/services/code-review/ocr-service.js +6 -3
  208. package/dist/services/compact-history/compact-history-service.d.ts +41 -0
  209. package/dist/services/compact-history/compact-history-service.js +62 -0
  210. package/dist/services/compact-statusline/compact-statusline-service.d.ts +16 -0
  211. package/dist/services/compact-statusline/compact-statusline-service.js +83 -0
  212. package/dist/services/config/config-service.d.ts +1 -12
  213. package/dist/services/config/config-service.js +3 -72
  214. package/dist/services/config/config-types.d.ts +2 -4
  215. package/dist/services/config/config-types.js +1 -1
  216. package/dist/services/container/container-lease.d.ts +67 -0
  217. package/dist/services/container/container-lease.js +135 -0
  218. package/dist/services/context/auto-compact-dispatcher.d.ts +40 -5
  219. package/dist/services/context/auto-compact-dispatcher.js +32 -102
  220. package/dist/services/context/auto-compact-reader.js +1 -1
  221. package/dist/services/context/auto-compact-types.d.ts +27 -2
  222. package/dist/services/context/auto-compact-types.js +8 -1
  223. package/dist/services/context/build-dispatch-system-prompt.d.ts +75 -0
  224. package/dist/services/context/build-dispatch-system-prompt.js +117 -0
  225. package/dist/services/context/collector.d.ts +2 -2
  226. package/dist/services/context/context-builder.d.ts +4 -4
  227. package/dist/services/context/context-schema.d.ts +48 -48
  228. package/dist/services/context/ide-detect.d.ts +4 -0
  229. package/dist/services/context/ide-detect.js +24 -0
  230. package/dist/services/context/main-session-monitor.d.ts +1 -4
  231. package/dist/services/context/main-session-monitor.js +1 -24
  232. package/dist/services/context/memory-index-reader.d.ts +8 -0
  233. package/dist/services/context/memory-index-reader.js +57 -0
  234. package/dist/services/context/memory-lru-cache.d.ts +12 -0
  235. package/dist/services/context/memory-lru-cache.js +60 -0
  236. package/dist/services/context/memory-preflight-config.d.ts +19 -0
  237. package/dist/services/context/memory-preflight-config.js +25 -0
  238. package/dist/services/context/memory-preflight-service.d.ts +19 -0
  239. package/dist/services/context/memory-preflight-service.js +120 -0
  240. package/dist/services/context/spillover-store.d.ts +23 -0
  241. package/dist/services/context/spillover-store.js +155 -0
  242. package/dist/services/context/spillover-types.d.ts +18 -0
  243. package/dist/services/context/spillover-types.js +1 -0
  244. package/dist/services/crystallization/crystallization-service.d.ts +22 -5
  245. package/dist/services/crystallization/crystallization-service.js +8 -14
  246. package/dist/services/crystallization/crystallization-types.d.ts +6 -6
  247. package/dist/services/crystallization/evidence-brief-builder.d.ts +1 -1
  248. package/dist/services/crystallization/index.d.ts +13 -0
  249. package/dist/services/crystallization/index.js +13 -0
  250. package/dist/services/dashboard/project-dashboard-service.js +2 -2
  251. package/dist/services/dispatch/await-batch.d.ts +70 -0
  252. package/dist/services/dispatch/await-batch.js +272 -0
  253. package/dist/services/dispatch/batch-counter.js +1 -1
  254. package/dist/services/dispatch/dispatch-record-writer.d.ts +126 -4
  255. package/dist/services/dispatch/dispatch-record-writer.js +239 -9
  256. package/dist/services/dispatch/slice-dag.d.ts +46 -0
  257. package/dist/services/dispatch/slice-dag.js +6 -0
  258. package/dist/services/dispatch/stage-enum.d.ts +27 -0
  259. package/dist/services/dispatch/stage-enum.js +48 -0
  260. package/dist/services/dispatch/startup-timeout.d.ts +86 -0
  261. package/dist/services/dispatch/startup-timeout.js +97 -0
  262. package/dist/services/dispatch/sub-agent-dispatcher.js +40 -89
  263. package/dist/services/dispatch/test-tool-detection.d.ts +25 -1
  264. package/dist/services/dispatch/test-tool-detection.js +80 -0
  265. package/dist/services/doctor/doctor-service/checks/check-id-schema.d.ts +18 -0
  266. package/dist/services/doctor/doctor-service/checks/check-id-schema.js +64 -0
  267. package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +14 -0
  268. package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +69 -0
  269. package/dist/services/doctor/doctor-service/checks/dist-source-version.d.ts +32 -0
  270. package/dist/services/doctor/doctor-service/checks/dist-source-version.js +110 -0
  271. package/dist/services/doctor/doctor-service/checks/gateguard-conflict.d.ts +24 -0
  272. package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +164 -0
  273. package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +16 -0
  274. package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +57 -0
  275. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +19 -0
  276. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +66 -0
  277. package/dist/services/doctor/doctor-service/checks/schema-validity.d.ts +10 -0
  278. package/dist/services/doctor/doctor-service/checks/schema-validity.js +33 -0
  279. package/dist/services/doctor/doctor-service/checks/skill-apply-note.d.ts +20 -0
  280. package/dist/services/doctor/doctor-service/checks/skill-apply-note.js +85 -0
  281. package/dist/services/doctor/doctor-service/checks/skill-existence.d.ts +13 -0
  282. package/dist/services/doctor/doctor-service/checks/skill-existence.js +30 -0
  283. package/dist/services/doctor/doctor-service/checks/skill-name-match.d.ts +10 -0
  284. package/dist/services/doctor/doctor-service/checks/skill-name-match.js +25 -0
  285. package/dist/services/doctor/doctor-service/checks/skill-parse.d.ts +10 -0
  286. package/dist/services/doctor/doctor-service/checks/skill-parse.js +19 -0
  287. package/dist/services/doctor/doctor-service/checks/skill-presence.d.ts +21 -0
  288. package/dist/services/doctor/doctor-service/checks/skill-presence.js +75 -0
  289. package/dist/services/doctor/doctor-service/checks/skill-runbook.d.ts +14 -0
  290. package/dist/services/doctor/doctor-service/checks/skill-runbook.js +47 -0
  291. package/dist/services/doctor/doctor-service/checks/statusline-install.d.ts +14 -0
  292. package/dist/services/doctor/doctor-service/checks/statusline-install.js +32 -0
  293. package/dist/services/doctor/doctor-service/checks/statusline-runtime.d.ts +13 -0
  294. package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +30 -0
  295. package/dist/services/doctor/doctor-service/checks/user-config.d.ts +11 -0
  296. package/dist/services/doctor/doctor-service/checks/user-config.js +27 -0
  297. package/dist/services/doctor/doctor-service/checks/workspace-init.d.ts +16 -0
  298. package/dist/services/doctor/doctor-service/checks/workspace-init.js +34 -0
  299. package/dist/services/doctor/doctor-service/checks/workspace-layout.d.ts +33 -0
  300. package/dist/services/doctor/doctor-service/checks/workspace-layout.js +180 -0
  301. package/dist/services/doctor/doctor-service/index.d.ts +48 -0
  302. package/dist/services/doctor/doctor-service/index.js +254 -0
  303. package/dist/services/doctor/doctor-service/plugin-registry.d.ts +41 -0
  304. package/dist/services/doctor/doctor-service/plugin-registry.js +77 -0
  305. package/dist/services/doctor/doctor-service/report/final-summary.d.ts +20 -0
  306. package/dist/services/doctor/doctor-service/report/final-summary.js +29 -0
  307. package/dist/services/doctor/doctor-service/types.d.ts +245 -0
  308. package/dist/services/doctor/doctor-service/types.js +15 -0
  309. package/dist/services/doctor/doctor-service.d.ts +15 -146
  310. package/dist/services/doctor/doctor-service.js +22 -926
  311. package/dist/services/doctor/index.d.ts +22 -0
  312. package/dist/services/doctor/index.js +22 -0
  313. package/dist/services/env/shell-probe.d.ts +71 -0
  314. package/dist/services/env/shell-probe.js +161 -0
  315. package/dist/services/evolution/evolution-types.d.ts +39 -39
  316. package/dist/services/final-review/final-review-service.d.ts +11 -1
  317. package/dist/services/final-review/index.d.ts +2 -0
  318. package/dist/services/final-review/index.js +1 -0
  319. package/dist/services/hooks/auto-compact-hook-install.d.ts +4 -5
  320. package/dist/services/hooks/auto-compact-hook-install.js +4 -5
  321. package/dist/services/hooks/worktree-authorization-gate.d.ts +205 -0
  322. package/dist/services/hooks/worktree-authorization-gate.js +492 -0
  323. package/dist/services/ide/adapters/claude-code-adapter.js +2 -2
  324. package/dist/services/ide/adapters/qoder-adapter.d.ts +25 -0
  325. package/dist/services/ide/adapters/qoder-adapter.js +57 -0
  326. package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +16 -0
  327. package/dist/services/ide/adapters/tongyi-lingma-adapter.js +45 -0
  328. package/dist/services/ide/ide-registry.js +6 -0
  329. package/dist/services/ide/ide-types.d.ts +1 -1
  330. package/dist/services/job/job-types.d.ts +56 -56
  331. package/dist/services/job-snapshot/index.d.ts +8 -0
  332. package/dist/services/job-snapshot/index.js +7 -0
  333. package/dist/services/{job/job-resource-snapshot.d.ts → job-snapshot/snapshot.d.ts} +1 -1
  334. package/dist/services/job-snapshot/types.d.ts +7 -0
  335. package/dist/services/job-snapshot/types.js +1 -0
  336. package/dist/services/karpathy-cost/karpathy-cost-check-service.d.ts +67 -0
  337. package/dist/services/karpathy-cost/karpathy-cost-check-service.js +108 -0
  338. package/dist/services/log/retention.d.ts +16 -0
  339. package/dist/services/log/retention.js +17 -0
  340. package/dist/services/loop/loop-bee-relation-types.d.ts +6 -6
  341. package/dist/services/loop/loop-release-types.d.ts +24 -24
  342. package/dist/services/loop/monotonic-runner.d.ts +17 -11
  343. package/dist/services/loop/monotonic-runner.js +118 -79
  344. package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +8 -0
  345. package/dist/services/memory/project-memory-service/index/kind-dispatch.js +253 -0
  346. package/dist/services/memory/project-memory-service/index/ranking.d.ts +6 -0
  347. package/dist/services/memory/project-memory-service/index/ranking.js +171 -0
  348. package/dist/services/memory/project-memory-service/index/search.d.ts +34 -0
  349. package/dist/services/memory/project-memory-service/index/search.js +194 -0
  350. package/dist/services/memory/project-memory-service/index.d.ts +9 -0
  351. package/dist/services/memory/project-memory-service/index.js +24 -0
  352. package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +9 -0
  353. package/dist/services/memory/project-memory-service/parsers/frontmatter.js +106 -0
  354. package/dist/services/memory/project-memory-service/parsers/markdown-pure.d.ts +7 -0
  355. package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +96 -0
  356. package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +5 -0
  357. package/dist/services/memory/project-memory-service/store/atomic-write.js +56 -0
  358. package/dist/services/memory/project-memory-service/store/paths.d.ts +8 -0
  359. package/dist/services/memory/project-memory-service/store/paths.js +116 -0
  360. package/dist/services/memory/project-memory-service/types.d.ts +128 -0
  361. package/dist/services/memory/project-memory-service/types.js +9 -0
  362. package/dist/services/memory/project-memory-service.d.ts +1 -167
  363. package/dist/services/memory/project-memory-service.js +19 -816
  364. package/dist/services/migrate-skill-name/schema.d.ts +2 -2
  365. package/dist/services/observability/aggregation.d.ts +27 -0
  366. package/dist/services/observability/aggregation.js +72 -0
  367. package/dist/services/observability/observability-service.d.ts +73 -7
  368. package/dist/services/observability/observability-service.js +87 -1
  369. package/dist/services/openspec/artifact-boundary.d.ts +138 -0
  370. package/dist/services/openspec/artifact-boundary.js +150 -0
  371. package/dist/services/openspec/coverage-evidence-reader.d.ts +191 -0
  372. package/dist/services/openspec/coverage-evidence-reader.js +386 -0
  373. package/dist/services/openspec/openspec-archive-service.d.ts +70 -0
  374. package/dist/services/openspec/openspec-archive-service.js +320 -8
  375. package/dist/services/openspec/openspec-bridge-service.js +1 -1
  376. package/dist/services/openspec/openspec-init-service.js +1 -1
  377. package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
  378. package/dist/services/openspec/openspec-render-service.js +7 -4
  379. package/dist/services/openspec/openspec-scan-service.js +1 -1
  380. package/dist/services/openspec/openspec-validate-service.js +5 -4
  381. package/dist/services/preferences/preferences-service.js +10 -0
  382. package/dist/services/preferences/preferences-types.d.ts +13 -0
  383. package/dist/services/preferences/preferences-types.js +11 -0
  384. package/dist/services/qa/screenshot-archive-service.d.ts +51 -0
  385. package/dist/services/qa/screenshot-archive-service.js +134 -0
  386. package/dist/services/rd/rd-service.js +10 -11
  387. package/dist/services/rd/types.d.ts +32 -32
  388. package/dist/services/rd-swarm/rd-swarm-service.d.ts +60 -0
  389. package/dist/services/rd-swarm/rd-swarm-service.js +93 -0
  390. package/dist/services/recommendations/capability-seed-items.js +0 -1
  391. package/dist/services/recommendations/capability-seed-mappings.js +0 -1
  392. package/dist/services/recommendations/capability-seed-sources.js +0 -1
  393. package/dist/services/release/version-precheck-service.d.ts +51 -0
  394. package/dist/services/release/version-precheck-service.js +257 -0
  395. package/dist/services/scan/acceptance-coverage-service.js +1 -1
  396. package/dist/services/scan/archetype-service.js +1 -1
  397. package/dist/services/scan/existing-system-service.js +1 -1
  398. package/dist/services/scan/libraries-service.js +1 -1
  399. package/dist/services/sediment/json-schema.d.ts +40 -40
  400. package/dist/services/share/bundle-types.d.ts +12 -12
  401. package/dist/services/share/run-state-contract.d.ts +2 -2
  402. package/dist/services/skill/skill-search-service.d.ts +12 -7
  403. package/dist/services/skill/skill-search-service.js +8 -4
  404. package/dist/services/skillhub/migrations/001-initial.sql +71 -0
  405. package/dist/services/skillhub/migrations/002-loop-release.sql +32 -0
  406. package/dist/services/skillhub/migrations/003-loop-bee-relation.sql +35 -0
  407. package/dist/services/skillhub/migrations/004-loop-bee-extension.sql +65 -0
  408. package/dist/services/skillhub/migrations/005-evolution-evaluation.sql +81 -0
  409. package/dist/services/skillhub/migrations/006-crystallization-event.sql +92 -0
  410. package/dist/services/skills/hooks-settings-service.d.ts +75 -0
  411. package/dist/services/skills/hooks-settings-service.js +230 -2
  412. package/dist/services/skills/skill-registry.d.ts +1 -0
  413. package/dist/services/skills/skill-registry.js +6 -4
  414. package/dist/services/skills/skill-runbook-service.js +1 -1
  415. package/dist/services/slice/slice-check-service.js +1 -1
  416. package/dist/services/standards/main-session-monitor-ban-hook.d.ts +14 -0
  417. package/dist/services/standards/main-session-monitor-ban-hook.js +19 -0
  418. package/dist/services/standards/missing-standards-detector.d.ts +25 -0
  419. package/dist/services/standards/missing-standards-detector.js +43 -12
  420. package/dist/services/tech/tech-change-id-service.d.ts +82 -0
  421. package/dist/services/tech/tech-change-id-service.js +117 -0
  422. package/dist/services/understand/understand-hybrid-service.js +1 -1
  423. package/dist/services/understand/understand-scan-service.js +2 -2
  424. package/dist/services/upgrade/upgrade-service.js +4 -3
  425. package/dist/services/verdict/envelopes.d.ts +2 -2
  426. package/dist/services/verdict/envelopes.js +2 -2
  427. package/dist/services/verdict/verdict-aggregator.d.ts +3 -3
  428. package/dist/services/vm/vm-lease.d.ts +40 -0
  429. package/dist/services/vm/vm-lease.js +137 -0
  430. package/dist/services/workflow/autonomous-resume-writer.js +1 -1
  431. package/dist/services/workflow/pipeline-verify-gate-support.d.ts +47 -0
  432. package/dist/services/workflow/pipeline-verify-gate-support.js +194 -0
  433. package/dist/services/workflow/pipeline-verify-service.d.ts +17 -81
  434. package/dist/services/workflow/pipeline-verify-service.js +42 -218
  435. package/dist/services/workflow/pipeline-verify-types.d.ts +90 -0
  436. package/dist/services/workflow/pipeline-verify-types.js +10 -0
  437. package/dist/services/workflow/plan-reader.d.ts +1 -1
  438. package/dist/services/workflow/plan-reader.js +1 -1
  439. package/dist/services/workflow/plan-refresher.d.ts +1 -1
  440. package/dist/services/workflow/plan-refresher.js +1 -1
  441. package/dist/services/workflow/plan-trigger-detector.d.ts +1 -1
  442. package/dist/services/workflow/plan-trigger-detector.js +1 -1
  443. package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +1 -1
  444. package/dist/services/workflow/workflow-autonomous-service.d.ts +2 -98
  445. package/dist/services/workflow/workflow-autonomous-types.d.ts +114 -0
  446. package/dist/services/workflow/workflow-autonomous-types.js +21 -0
  447. package/dist/services/workflow/workflow-router-service.js +18 -16
  448. package/dist/services/workflow/workflow-spec-lint.d.ts +13 -0
  449. package/dist/services/workflow/workflow-spec-lint.js +75 -0
  450. package/dist/services/workflow/workflow-spec-types.d.ts +100 -0
  451. package/dist/services/workflow/workflow-spec-types.js +13 -0
  452. package/dist/services/workflow/workflow-spec-yaml.d.ts +17 -0
  453. package/dist/services/workflow/workflow-spec-yaml.js +88 -0
  454. package/dist/services/workflow/workflow-spec.d.ts +11 -91
  455. package/dist/services/workflow/workflow-spec.js +16 -145
  456. package/dist/services/workspace/migrate-service.js +1 -1
  457. package/dist/services/workspace/workspace-service.js +1 -1
  458. package/dist/services/worktree/worktree-lease.d.ts +170 -0
  459. package/dist/services/worktree/worktree-lease.js +242 -0
  460. package/package.json +91 -51
  461. package/scripts/clean-dist.mjs +31 -1
  462. package/scripts/copy-templates.mjs +16 -0
  463. package/scripts/sync-version.mjs +53 -2
  464. package/skills/bee/peaks-perf-audit/SKILL.md +17 -0
  465. package/skills/bee/peaks-prd/SKILL.md +16 -0
  466. package/skills/bee/peaks-prd/test-prompts.json +12 -0
  467. package/skills/bee/peaks-qa/SKILL.md +16 -1
  468. package/skills/bee/peaks-qa/references/qa-sub-agent-dispatch.md +22 -0
  469. package/skills/bee/peaks-qa/test-prompts.json +12 -0
  470. package/skills/bee/peaks-rd/SKILL.md +29 -20
  471. package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +39 -0
  472. package/skills/bee/peaks-rd/test-prompts.json +12 -0
  473. package/skills/bee/peaks-reviewer/SKILL.md +17 -0
  474. package/skills/bee/peaks-sc/SKILL.md +16 -0
  475. package/skills/bee/peaks-security-audit/SKILL.md +17 -0
  476. package/skills/bee/peaks-txt/SKILL.md +16 -0
  477. package/skills/bee/peaks-txt/test-prompts.json +12 -0
  478. package/skills/bee/peaks-ui/SKILL.md +49 -43
  479. package/skills/bee/peaks-ui/test-prompts.json +12 -0
  480. package/skills/peaks-code/SKILL.md +54 -109
  481. package/skills/peaks-code/references/boundaries.md +15 -1
  482. package/skills/peaks-code/references/cron-scheduler-deployment.md +313 -0
  483. package/skills/peaks-code/references/external-skill-invocation.md +27 -0
  484. package/skills/peaks-code/references/lease-dashboard.html +224 -0
  485. package/skills/peaks-code/references/lease-stats.sample.json +26 -0
  486. package/skills/peaks-code/references/peaks-worktree-l2-enforcers.md +208 -0
  487. package/skills/peaks-code/references/periodic-checkpoint.md +4 -4
  488. package/skills/peaks-code/references/runbook.md +63 -1
  489. package/skills/peaks-code/references/startup-sequence.md +110 -0
  490. package/skills/peaks-code/references/step-0-8-gate.md +1 -1
  491. package/skills/peaks-code/references/sub-agent-dispatch.md +92 -1
  492. package/skills/peaks-code/references/worktree-governance.md +123 -0
  493. package/skills/peaks-code/test-prompts.json +12 -0
  494. package/skills/peaks-doctor/SKILL.md +1 -1
  495. package/skills/peaks-ide/SKILL.md +1 -1
  496. package/skills/peaks-solo/SKILL.md +21 -0
  497. package/skills/peaks-solo/references/triage-decision-table.md +6 -0
  498. package/skills/peaks-sop/test-prompts.json +17 -0
  499. package/dist/cli/commands/agent-commands.d.ts +0 -20
  500. package/dist/cli/commands/agent-commands.js +0 -48
  501. package/dist/cli/commands/classify-classify-commands.d.ts +0 -19
  502. package/dist/cli/commands/classify-classify-commands.js +0 -151
  503. package/dist/cli/commands/contract-commands.d.ts +0 -26
  504. package/dist/cli/commands/contract-commands.js +0 -114
  505. package/dist/cli/commands/session-auto-compact-hook-command.d.ts +0 -37
  506. package/dist/cli/commands/session-auto-compact-hook-command.js +0 -127
  507. package/dist/cli/commands/worker-commands.d.ts +0 -3
  508. package/dist/cli/commands/worker-commands.js +0 -52
  509. package/dist/services/agent/ecc-agent-service.d.ts +0 -47
  510. package/dist/services/agent/ecc-agent-service.js +0 -143
  511. package/dist/services/config/provider-service.d.ts +0 -48
  512. package/dist/services/config/provider-service.js +0 -143
  513. package/dist/services/context/dispatch-context-guard.d.ts +0 -27
  514. package/dist/services/context/dispatch-context-guard.js +0 -192
  515. package/dist/services/context/shared-channel.d.ts +0 -93
  516. package/dist/services/context/shared-channel.js +0 -308
  517. package/dist/services/filesystem/file-lock.d.ts +0 -11
  518. package/dist/services/filesystem/file-lock.js +0 -152
  519. package/dist/services/mut/assert-scanner.d.ts +0 -6
  520. package/dist/services/mut/assert-scanner.js +0 -116
  521. package/dist/services/mut/index.d.ts +0 -8
  522. package/dist/services/mut/index.js +0 -7
  523. package/dist/services/mut/mut-runner.d.ts +0 -39
  524. package/dist/services/mut/mut-runner.js +0 -29
  525. package/dist/services/mut/production-stryker.d.ts +0 -2
  526. package/dist/services/mut/production-stryker.js +0 -75
  527. package/dist/services/mut/report-builder.d.ts +0 -11
  528. package/dist/services/mut/report-builder.js +0 -110
  529. package/dist/services/mut/report-loader.d.ts +0 -31
  530. package/dist/services/mut/report-loader.js +0 -78
  531. package/dist/services/mut/thresholds.d.ts +0 -21
  532. package/dist/services/mut/thresholds.js +0 -22
  533. package/dist/services/mut/types.d.ts +0 -336
  534. package/dist/services/mut/types.js +0 -59
  535. package/dist/services/providers/minimax-provider-service.d.ts +0 -24
  536. package/dist/services/providers/minimax-provider-service.js +0 -143
  537. package/dist/services/providers/minimax-worker-service.d.ts +0 -21
  538. package/dist/services/providers/minimax-worker-service.js +0 -83
  539. package/dist/shared/fs.d.ts +0 -4
  540. package/dist/shared/fs.js +0 -26
  541. package/dist/shared/paths.d.ts +0 -6
  542. package/dist/shared/paths.js +0 -50
  543. package/dist/shared/result.d.ts +0 -22
  544. package/dist/shared/result.js +0 -46
  545. package/dist/shared/version.d.ts +0 -1
  546. package/dist/shared/version.js +0 -1
  547. package/examples/video-demo/README.md +0 -142
  548. package/examples/video-demo/out/en-closing-960.png +0 -0
  549. package/examples/video-demo/out/zh-closing-960.png +0 -0
  550. package/examples/video-demo/preview/peaks-loop-demo-en.mp4 +0 -0
  551. package/examples/video-demo/preview/peaks-loop-demo.mp4 +0 -0
  552. /package/dist/services/{job/job-resource-snapshot.js → job-snapshot/snapshot.js} +0 -0
@@ -0,0 +1,208 @@
1
+ # peaks worktree L2 enforcers — reference
2
+
3
+ > **Slice 2026-07-29-rid-prose-only-sweep Part 33.** Companion to
4
+ > the L2 ecosystem shipped across 28 commits. The peaks
5
+ > `peaks audit red-lines --project .` command reports 119
6
+ > catalog red-lines, of which **86+ are cli-backed enforcers**
7
+ > (the rest are discovered prose-only lines still being
8
+ > sweeped). This document is the operator-side reference for
9
+ > the L2 surface.
10
+
11
+ ## What is the L2 surface?
12
+
13
+ The **L2 surface** is the worktree / dispatch / observability
14
+ stack peaks-loop owns. Sub-agents touching any of the L2
15
+ verbs (`peaks worktree *`, `peaks container *`,
16
+ `peaks sub-agent dispatch --isolation <mode>`, `peaks lease-*`,
17
+ `peaks cron*`, `peaks audit red-lines`) need to read this
18
+ document to know which enforcers will run against them.
19
+
20
+ ## Why this document exists
21
+
22
+ LLM-side runners (skills/peaks-code, peaks-rd, peaks-qa, etc.)
23
+ read the prose-only catalog as guidance but historically
24
+ under-estimated how strict the cli-backed enforcers are.
25
+ Documenting the enforcer surface upfront prevents
26
+ "discovered late in a cycle" surprises.
27
+
28
+ ## Enforcers by source
29
+
30
+ ### peaks-worktree authority (L2 grant + lease)
31
+
32
+ - **`withSuperpowersSkillDenylist`** (src/services/skills/hooks-settings-service.ts)
33
+ Installs `UseSkill(superpowers:using-git-worktrees)` into
34
+ `permissions.deny`. Triggered by `peaks hooks install`.
35
+ - **`withoutSuperpowersSkillDenylist`** — symmetric uninstall.
36
+ - **`withTriggeredDenyList`** (Part 27 / 29) — appends
37
+ `Edit(deny-trigger:<phrase>)` when the existing settings
38
+ has superpowers / git-worktree / podman-run entries. LLM
39
+ must run `peaks hooks uninstall` to remove.
40
+ - **`decideFromAuthorization`** (src/services/hooks/worktree-authorization-gate.ts)
41
+ Decides allow / deny for a worktree-mutating tool call
42
+ based on `peaks worktree auth grant` file contents.
43
+ - **`decideFromLease`** (Part 2.B) — falls back to the lease
44
+ file when no grant is on file. Activated by
45
+ `PEAKS_WORKTREE_LEASE_ID` env var.
46
+ - **`decideFromContainerLease`** (Part 19) — analogous to
47
+ `decideFromLease` for the L4 container surface.
48
+ Activated by `PEAKS_CONTAINER_LEASE_ID` env var.
49
+
50
+ ### L2 section structure (P2-a lint)
51
+
52
+ - **`rl-section-hard-contracts-001`** (lint-style.ts) — peaks-*
53
+ bee SKILL.md must declare `## Hard contracts` section.
54
+ - **`rl-section-mandatory-artifact-001`** — must declare
55
+ `## Mandatory per-request artifact` section.
56
+ - **`rl-section-default-runbook-001`** — must declare
57
+ `## Default runbook` section.
58
+ - **`rl-section-gate-index-001`** — must declare
59
+ `## RD gate index` / `## QA gate index` section.
60
+ - **`rl-section-naming-axiom-001`** — single-scope-axis
61
+ naming convention.
62
+
63
+ ### L2 frontmatter (P2-a lint)
64
+
65
+ - **`rl-frontmatter-skills-md-001`** — name / description
66
+ frontmatter on every SKILL.md.
67
+ - **`rl-frontmatter-references-load-strategy-001`** —
68
+ loadStrategy field on references/*.md.
69
+ - **`rl-frontmatter-applicable-task-levels-001`** —
70
+ applicableTaskLevels field on references/*.md.
71
+
72
+ ### L2 output style (P2-a lint)
73
+
74
+ - **`rl-output-style-status-header-001`** — every peaks-*
75
+ response carries a `peaks-loop skill: | peaks-loop gate: |
76
+ peaks-loop next:` status header.
77
+ - **`rl-output-style-no-fluff-001`** — no greeting / persona
78
+ fluff in SKILL.md.
79
+ - **`rl-output-style-no-closing-prompt-001`** — no "Should I
80
+ continue?" closing prompt.
81
+
82
+ ### L2 reference integrity (P2-a lint)
83
+
84
+ - **`rl-ref-path-resolves-001`** — every `references/*.md`
85
+ link in a SKILL.md resolves to a real file.
86
+ - **`rl-ref-no-broken-mkdir-001`** — no `mkdir -p
87
+ nonexistent/dir` in references code blocks.
88
+ - **`rl-ref-no-pwd-symlink-jumps-001`** — no pwd that
89
+ jumps symlinks.
90
+ - **`rl-ref-no-relative-archive-paths-001`** — no relative
91
+ archive paths in references.
92
+
93
+ ### L2 OpenSpec
94
+
95
+ - **`rl-openspec-proposal-has-ac-bullets-001`** — OpenSpec
96
+ proposal must have acceptance criteria bullets.
97
+ - **`rl-openspec-proposal-has-spec-changes-001`** — OpenSpec
98
+ proposal must have spec changes.
99
+
100
+ ### L2 CLI back
101
+
102
+ - **`rl-cli-back-mandatory-text-001`** — every CLI command's
103
+ `--help` text matches the canonical `mandatory` keyword.
104
+ - **`rl-cli-back-no-orphan-blocking-001`** — every blocking
105
+ red line has a corresponding enforcer.
106
+ - **`rl-cli-back-no-orphan-must-not-001`** — every MUST-NOT
107
+ red line has a corresponding enforcer.
108
+ - **`rl-cli-back-prose-only-threshold-001`** — the
109
+ prose-only ratio stays ≤ 5% (per §10.2 L2 acceptance).
110
+ - **`rl-cli-back-prose-only-ratio-001`** — secondary
111
+ threshold (7% per slice 2026-07-28).
112
+
113
+ ### L2 catalog governance
114
+
115
+ - **`rl-catalog-total-le-45-001`** — the catalog size must
116
+ grow to ≥ 45 (P2-a target).
117
+ - **`rl-catalog-prose-only-ratio-001`** — secondary 7%
118
+ threshold (post-reform).
119
+
120
+ ### L2 peaks-* bee runtime contracts (sweep 1-8)
121
+
122
+ - **`rl-skill-presence-mandatory-001`** (sweep 003) —
123
+ peaks-* bee SKILL.md must declare the "Skill presence
124
+ (MANDATORY first action)" section.
125
+ - **`rl-prd-source-snapshot-placement-001`** (sweep 004) —
126
+ peaks-prd SKILL.md must declare the source-snapshot
127
+ placement guidance + Prohibited paths.
128
+ - **`rl-prd-artifact-handoff-001`** (sweep 004) — peaks-prd
129
+ SKILL.md must declare the artifact handoff contract
130
+ (Preserved behavior + step 5.5 + Transition verification
131
+ gates).
132
+ - **`rl-rd-handoff-contract-001`** (sweep 005) — peaks-rd
133
+ SKILL.md must declare the QA-handoff BLOCKING contract
134
+ (tech-doc + perf-baseline).
135
+ - **`rl-rd-coverage-discipline-001`** (sweep 005) —
136
+ peaks-rd SKILL.md must declare the coverage discipline
137
+ (100% target + no-padding rule).
138
+ - **`rl-qa-gateguard-preflight-001`** (sweep 006) — peaks-qa
139
+ SKILL.md must declare the gateguard pre-flight BLOCKING
140
+ section.
141
+ - **`rl-qa-runtime-contract-001`** (sweep 006) — peaks-qa
142
+ SKILL.md must declare the runtime contract (transition
143
+ gates + Playwright MCP fallback + OpenSpec integration).
144
+ - **`rl-peaks-ui-superpowers-chain-001`** (sweep 007) —
145
+ peaks-ui SKILL.md must declare the superpowers chain
146
+ refusal + reference-material contract.
147
+ - **`rl-peaks-ui-involvement-001`** (sweep 007) — peaks-ui
148
+ SKILL.md must declare the UI-involvement identification
149
+ block.
150
+ - **`rl-peaks-txt-upstream-001`** (sweep 007) — peaks-txt
151
+ SKILL.md must declare the upstream-inspection +
152
+ memory-block contract.
153
+ - **`rl-peaks-perf-audit-scope-001`** (sweep 007) —
154
+ peaks-perf-audit SKILL.md must declare the non-perf
155
+ MUST NOT invoke clause.
156
+ - **`rl-peaks-rd-runtime-contract-001`** (sweep 008) —
157
+ peaks-rd SKILL.md must declare the runtime contract
158
+ (OpenSpec usage + Frontend project generation).
159
+ - **`rl-peaks-ui-transition-gates-001`** (sweep 008) —
160
+ peaks-ui SKILL.md must declare the Transition verification
161
+ gates section.
162
+ - **`rl-peaks-sc-transition-gates-001`** (sweep 008) —
163
+ peaks-sc SKILL.md must declare the Transition verification
164
+ gates section.
165
+ - **`rl-peaks-txt-runtime-contract-001`** (sweep 008) —
166
+ peaks-txt SKILL.md must declare the runtime contract
167
+ (Transition verification gates + Memory block embedding
168
+ rule).
169
+
170
+ ## How to run
171
+
172
+ ```sh
173
+ # Default — list every catalog red line.
174
+ peaks audit red-lines --project .
175
+
176
+ # Just the cli-backed ones (the L2 surface).
177
+ peaks audit red-lines --project . --json | jq '.audit[] | select(.backing == "cli-backed")'
178
+ ```
179
+
180
+ ## How to read the report
181
+
182
+ Each entry has:
183
+
184
+ - `id` — the catalog id (e.g. `rl-skill-presence-mandatory-001`).
185
+ - `rule` — the human-readable description of the contract.
186
+ - `source.file` — the file the marker was found in.
187
+ - `source.line` — the line number (1-indexed).
188
+ - `source.marker` — MANDATORY / BLOCKING / MUST NOT / RED LINE.
189
+ - `backing` — `cli-backed` (an enforcer file exists) or
190
+ `prose-only` (no enforcer; the line is documented in
191
+ skills/ and audited by humans).
192
+
193
+ A red line that is `prose-only` is **not enforced** by
194
+ peaks. The audit report's `proseOnly` count is the backlog
195
+ that has not been closed yet.
196
+
197
+ ## Related memory
198
+
199
+ - [[2026-07-29-worktree-l2-extended-part1]] — lease foundation
200
+ - [[2026-07-29-worktree-l2-extended-part2]] — renew/list/gc/status + hook
201
+ - [[2026-07-29-worktree-l2-extended-part3]] — auto-release
202
+ - [[2026-07-29-worktree-l2-extended-part4]] — observability + v3
203
+ - [[2026-07-29-worktree-l2-extended-part5]] — leak rate + cross-session
204
+ - [[2026-07-29-worktree-l2-extended-part6-9]] — final sediment
205
+ - [[2026-07-29-worktree-l1-dispatch-block]] — L1 dispatch hardening
206
+ - [[2026-07-29-worktree-skills-md-shipped]] — SKILL.md npm contract
207
+ - [[2026-07-29-worktree-layer3-deny]] — L3 superpowers deny
208
+ - [[2026-07-27-worktree-user-auth-hard-gate]] — L2 grant token
@@ -72,10 +72,10 @@ This step is strictly IDE-agnostic. The LLM calls the peaks CLI; no IDE-specific
72
72
 
73
73
  ## Companion surface — auto-compact (zero-pause)
74
74
 
75
- When the runner crosses the v2.13.0 auto-compact thresholds (0.85 pre-compact / 0.95 red-line), `peaks session checkpoint` is NOT enough on its own — the LLM must also fire `peaks code auto-compact --execute` (or wait for the in-band PreToolUse hook at ratio ≥ 0.95 to compact the runner itself). See:
75
+ When the runner crosses the v2.13.0 auto-compact thresholds (0.85 pre-compact / 0.95 red-line), `peaks session checkpoint` is NOT enough on its own — the LLM must also fire `peaks compact auto --execute` (or wait for the in-band PreToolUse hook at ratio ≥ 0.95 to compact the runner itself). See:
76
76
 
77
- - `peaks code auto-compact --execute` — orchestrator that writes the convergence plan + dispatches the compact pathway
78
- - `peaks session auto-compact-hook` — the PreToolUse hook entrypoint fired by `.claude/settings.local.json` (slice 2026-07-02-auto-compact-zero-pause)
77
+ - `peaks compact auto --execute` — orchestrator that writes the convergence plan + dispatches the compact pathway
78
+ - `peaks compact auto` — the PreToolUse hook entrypoint fired by `.claude/settings.local.json` (slice 2026-07-02-auto-compact-zero-pause)
79
79
  - `.peaks/memory/2026-06-27-auto-compact-design.md` — zero-human-intervention design rationale
80
80
 
81
- The two surfaces compose: `peaks session checkpoint` persists the context state, `peaks code auto-compact` collapses the runner's window. The LLM fires both in the 0.85–0.95 zone; the hook fires alone at ≥ 0.95.
81
+ The two surfaces compose: `peaks session checkpoint` persists the context state, `peaks compact auto` collapses the runner's window. The LLM fires both in the 0.85–0.95 zone; the hook fires alone at ≥ 0.95.
@@ -45,6 +45,18 @@ peaks standards init --project <repo> --apply --json
45
45
  # or: peaks standards update --project <repo> --apply --json
46
46
  # After apply, verify the files actually exist on disk (see Peaks-Loop Gate G).
47
47
 
48
+ # ── Step 1.x — `peaks --help` 路由速查(4.x 收敛后:73→9 字节恒等) ─────────
49
+ #
50
+ # peaks --help
51
+ # ├─ doctor / code / skill / session / workflow (5 super-command)
52
+ # ├─ make / learn / sop / sub-agent (4 ops)
53
+ # └─ (其他 60+ top-level subcommand)
54
+ #
55
+ # 全 73 个原命令收敛到 9 个 super-command 后,surface 字节恒等;
56
+ # 4 ops 路由分别管:动态造 skill / 沉淀学习 / SOP 注册 / sub-agent 派发。
57
+ # 若 LLM 看到 peaks-code runbook 里出现老命令(>9 之外的 raw 名字),
58
+ # 先 `peaks --help` 校验当前 surface,再决定改 runbook 还是改命令。
59
+
48
60
  # 2. Peaks-Loop PRD (Assisted/Strict: [CONFIRM] before confirmed-by-user)
49
61
  # Classify the request type from the PRD: feature | bugfix | refactor | docs | config | chore
50
62
  # This drives RD/QA gate strictness — see "Mandatory RD QA repair loop" for the matrix.
@@ -59,6 +71,25 @@ peaks request lint <rid> --role prd --project <repo> --json
59
71
  peaks request transition <rid> --role prd --state confirmed-by-user --project <repo> --json
60
72
  peaks request transition <rid> --role prd --state handed-off --project <repo> --json
61
73
 
74
+ # 2.7. Peaks-Loop Superpowers bridge (effective 2026-07-24, slice 2026-07-24-peaks-code-bridge-002-rootcause)
75
+ # Why: peaks-code must coexist with the superpowers skill family without being overridden by it.
76
+ # When the user (or the IDE skill picker) suggests invoking superpowers:brainstorming /
77
+ # superpowers:writing-plans, the LLM MUST:
78
+ # 1. Run the superpowers skill as REFERENCE ONLY — read the brainstorm / plan output.
79
+ # 2. Re-author the borrowed plan as a peaks-rd PRD artefact via:
80
+ # peaks sub-agent dispatch prd --prompt "<brainstorm-seed>" --request-id <rid> --batch-id <uuid> --json
81
+ # 3. Continue peaks-code from Step 3 (sub-agent fan-out). Do NOT dispatch
82
+ # superpowers:executing-plans or superpowers:subagent-driven-development; peaks-rd / peaks-qa
83
+ # own plan execution.
84
+ # Verify junction integrity before any LLM edit to a user-global skill path:
85
+ # fsutil reparsepoint query "$HOME/.claude/skills/peaks-code" # Windows
86
+ # readlink -f "$HOME/.claude/skills/peaks-code" # POSIX
87
+ # → not a junction (or not a symlink) → STOP and re-route via peaks skill sync after junction rebuild.
88
+ # Forbidden: hand-authoring hook scripts at ~/.claude/skills/peaks-code/hooks/*. Hook source MUST
89
+ # come from src/services/hooks/*.sh in the peaks-loop repo, distributed by `peaks hooks install`.
90
+ # Mandatory closure: every peaks-code request MUST finish `peaks request transition` through
91
+ # `spec-locked → implemented → qa-handoff → handed-off` plus `peaks memory extract`.
92
+
62
93
  # 3. Peaks-Loop Default sub-agent fan-out (slice 5 contract)
63
94
  # Code computes the swarm plan from --type + frontendOnly + frontend-keyword scan,
64
95
  # writes it to .peaks/_runtime/<sid>/sc/swarm-plan.json, then writes the slice
@@ -184,6 +215,28 @@ peaks project dashboard --project <repo> --json
184
215
  peaks skill doctor --json
185
216
  ```
186
217
 
218
+ ## 24h mode — bridge surface (rid-020b)
219
+
220
+ ```bash
221
+ # Inspect the current 24h-mode state snapshot (rid-020a backbone)
222
+ peaks session 24h-mode state --json
223
+
224
+ # Code-run with the 24h flag (T3/T4 auto-engage; otherwise brainstorming reference-only bridge)
225
+ peaks code run <change-id> --24h --tier T3 --project <repo> --json
226
+ peaks code run <change-id> --24h --tier T2 --project <repo> --json # non-T3/T4 → Bucket B (reference-only)
227
+ peaks code run <change-id> --24h --trigger T4 --project <repo> --json # T4 also auto-engages 24H_ACTIVE
228
+
229
+ # Read-only 24h long-run indicator dashboard (5 indicator classes + boundary cases)
230
+ peaks dashboard long-run --since 24h --project <repo> --json
231
+ peaks dashboard long-run --since 8h --project <repo> --json
232
+ peaks dashboard long-run --since 30m --project <repo> --json
233
+ peaks dashboard long-run --since 72h --project <repo> --json # capped at 24h
234
+
235
+ # Manual state transition (Bucket C — user-confirm path)
236
+ peaks session 24h-mode transition --state 24H_ACTIVE --reason "T1 keyword match" --project <repo> --json
237
+ peaks session 24h-mode transition --state HANDOFF --exit-condition user_abort --project <repo> --json
238
+ ```
239
+
187
240
  Repair loop details: see `## Mandatory RD QA repair loop` in SKILL.md for the full 5-step procedure and the 3-cycle cap. Append transition notes via `--reason` rather than rewriting artifacts during repair cycles.
188
241
 
189
242
  ```bash
@@ -236,7 +289,7 @@ peaks code emit-handoff --project <repo> --job-id <jid> --json
236
289
  # job-shape.json says isJob=true, ≥0.85 is MANDATORY auto-compact.
237
290
  # Code MUST call this without confirmation under Job mode.
238
291
  peaks code context-now --project <repo> --enforce-job-mode --json
239
- peaks session auto-compact --execute --project <repo> --json
292
+ peaks compact auto --execute --project <repo> --json
240
293
 
241
294
  # v3.1.2 PreToolUse gate (installed by `peaks workspace init`):
242
295
  # every Bash tool call runs `peaks code gate-step-08` automatically.
@@ -244,4 +297,13 @@ peaks session auto-compact --execute --project <repo> --json
244
297
  # progress.json exists). Exit 2 = BLOCKED; LLM must call
245
298
  # `peaks code detect-job` first.
246
299
  peaks code gate-step-08 --project <repo> --json
300
+
301
+ # rid-020a: 24h mode state machine. The CLI is the muscle; peaks-code
302
+ # is the LLM that drives it. Sub-actions: state, transition, attempts,
303
+ # reset. Persists to .peaks/_runtime/<sessionId>/24h-state.json. The
304
+ # full SKILL.md chapter and rid-020b code-run sub-command ship next.
305
+ peaks session 24h-mode state --project <repo> --session-id <sessionId> --json
306
+ peaks session 24h-mode transition --state 24H_ACTIVE --project <repo> --session-id <sessionId> --json
307
+ peaks session 24h-mode attempts --project <repo> --session-id <sessionId> --json
308
+ peaks session 24h-mode reset --project <repo> --session-id <sessionId> --json
247
309
  ```
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: peaks-code-startup-sequence
3
+ description: peaks-code startup sequence Steps 0 / 0.5-0.87 / 1 / 2 / 2.3 / 2.5 / N / N+1 / N+2 — extracted from SKILL.md 2026-07-16 to keep SKILL.md under 25,000-byte cap
4
+ ---
5
+
6
+ # Peaks-Loop Startup sequence (MANDATORY — execute in order)
7
+
8
+ > **Extracted from SKILL.md on 2026-07-16.** This file is the
9
+ > authoritative reference; SKILL.md points here with a 1-line pointer.
10
+ > Do not edit `SKILL.md` for content changes — edit this file instead.
11
+
12
+ ### Peaks-Loop Slice 011 — workspace consolidate + session checkpoint/resume
13
+
14
+ `peaks workspace consolidate` is the slice-011 umbrella primitive. `peaks session checkpoint` (context-overflow defense) and `peaks session resume` surface as Step 0.75 + Step N. See `references/cross-date-session-check.md`.
15
+
16
+ ### Peaks-Loop Step 0.75: Resume from checkpoint (BLOCKING on same-day re-invocation)
17
+
18
+ When a NEW conversation opens on a session whose `lastActivity` is from today AND `.peaks/_runtime/<sessionId>/checkpoints/` has `*.json`, surface via `peaks session info --active --json` + `peaks session resume --from <path> --project <repo>`. Prompt via `AskUserQuestion` (resume / fresh); if "resume", prepend the block. Step 0.75 is no-op on precondition fail. See `references/checkpoint-resume.md`.
19
+
20
+ ### Peaks-Loop Step N: Periodic checkpoint (auto-fire, no user action)
21
+
22
+ Proactive context-overflow defense. CLI: `peaks session checkpoint [--reason <r>] [...flags]`. Fire `--reason periodic` every 20 tool calls (G1 hard-coded), `--reason artifact-written` per PRD/RD/QA/TXT write. See `references/periodic-checkpoint.md` (otherwise `tests/unit/code/checkpoint-periodic-frequency.test.ts` fails).
23
+
24
+ ### Peaks-Loop Step 0.6: Audit + Goal (NEW)
25
+
26
+ Invoke peaks-audit after need expressed; store approved goal at `.peaks/_runtime/<sessionId>/audit-goal/<rid>.json`. **All autonomous work requires approved goal.** → `references/audit-goal-gate.md`.
27
+
28
+ ### Peaks-Loop Step N+1: Final Review (NEW)
29
+
30
+ After autonomous work (RD, QA, security, perf), invoke peaks-final-review for 4-dim evidence. All 4 pass → final delivery; else loop back. See `references/final-review-gate.md`.
31
+
32
+ ### Peaks-Loop Step N+2: Main-session context monitor (D6 + slice 2026-07-02)
33
+
34
+ After every 4th tool call, probe via `peaks code context-now --project <repo> --json`. Thresholds: 50% / **0.85 pre-compact / 0.95 red-line** (v2.13.0). **In Job mode ≥ 0.85 is MANDATORY auto-compact** (`peaks compact auto --execute`). Pass `--enforce-job-mode` for single-rid. **≥ 0.95** red line: next Bash/Task fires `peaks compact auto`. **Karpathy §4 exception**: compact red line keeps runner alive — zero-intervention wins; LLM MUST NOT ask user to run `/compact`. Honor `--in-flight-batch` (D6.e).
35
+
36
+ ### Peaks-Loop Step 0: Anchor the workflow (MANDATORY FIRST ACTIONS — no bail-out)
37
+
38
+ Run `peaks workspace init` + `peaks skill presence:set peaks-code` BEFORE any analysis, role handoff, or mode-selection question. Even "分析下这个项目" / "看一下代码" / one-line questions anchor first.
39
+
40
+ → see `references/anchoring-and-session-info.md` for the full Step 0 contract + session-conflict resolution.
41
+
42
+ #### Step 0 bypass — Claude Code [Fact-Forcing Gate] (slice 2.0.1-bug3)
43
+
44
+ `peaks workspace init` materializes `.claude/settings.local.json` (a PreToolUse hook allow-list for `.peaks/**` paths and `peaks <subcommand>` Bash) so the [Fact-Forcing Gate] does not block Step 0. Pass `--no-claude-hooks` to opt out.
45
+
46
+ → see `references/anchoring-and-session-info.md` for the full bypass contract, recovery flow, and anti-bail-out rule.
47
+
48
+ ### Peaks-Loop Step 0.7: Detect unfinished work and offer resume (BLOCKING on first invocation per session)
49
+
50
+ After Step 0, run the resume-detection probe; surface via `AskUserQuestion` if a slice is in flight. **v3.1.2 resume rule:** if `.peaks/_runtime/<sessionId>/job/<jid>/progress.json` exists, read FIRST and surface `Next: slice #N of M`. **v2.11.0 D7 override:** if user just `/compact`ed, run `peaks code post-compact-detect --project <repo> --json` FIRST; `shouldAutoResume: true` skips AskUserQuestion. → `references/resume-detection.md`.
51
+
52
+ ### Peaks-Loop Step 0.55: 1.x → 2.0 detection (BLOCKING on first invocation per session, when the project is not on a 2.0 layout)
53
+
54
+ After Step 0.7 returns "fresh", run `peaks upgrade --detect-1x --project <root> --json`. If `isOneX: true`, surface `AskUserQuestion`. → `references/step-0-55-1x-detection.md`.
55
+
56
+ ### Peaks-Loop Step 0.8 — Job 启动 (BLOCKING on LLM judgement — v3.1.1 patch + v3.1.2 mechanical gates)
57
+
58
+ > **CLI reality check (D-001 sediment, 2026-07-09):** The CLI surface has changed since this section was last verified. The actual command is **`peaks job init --job-id <jid> --slice-list <list> --main-loop-strategy <single|rotating> [--parallelism-hint <serial|llm-decides>] [--exit-policy <strict|best-effort>] [--project <repo>]`**. The legacy `peaks code detect-job --is-job/--suggested-job-id/--confidence` form described below is **no longer present** in 4.0.0-beta.6. If you find `--is-job` rejected, fall back to `peaks job init`.
59
+
60
+ The CLI is a **recorder + gate** for job-shape (the LLM judges). LLM calls `peaks job init --job-id <jid> --slice-list <list> --main-loop-strategy <single|rotating>` (with `--caller-id <id>` and `--project <repo>` in non-Claude-Code environments), which writes `.peaks/_runtime/<sessionId>/job/<jid>/state.json` and emits a `[job-event] {kind: job-started, jobId, total, strategy}` line. Downstream steps call `peaks job status --job-id <jid>` to read state.
61
+
62
+ **Hard rule (v3.1.1 red-line #10):** LLM MUST NOT skip the job-init call. If `peaks job status` reports `done: 0` and the slice work has begun, the LLM forgot to initialize — re-call `peaks job init` immediately.
63
+
64
+ > **D-003 sediment (2026-07-09):** The historical `JOB_SHAPE_NOT_DECIDED` exception thrown by `read-job-shape` is no longer wired in 4.0.0-beta.6. The current CLI uses `peaks job status` which reports a passive `done: 0` instead of throwing. Both behaviors enforce the same intent (no work may begin before init) but the failure mode is a soft warning rather than a hard exception. LLM should treat `done: 0` after Step 0.8 as a recoverable miss, not an unrecoverable error.
65
+
66
+ **v3.1.2 mechanical gates** (recorder-only was bypassed twice):
67
+
68
+ PreToolUse hook on `peaks code gate-step-08`; size-fear ban on `peaks code emit-handoff`; forced auto-compact at ≥ 0.85 in Job mode; on-disk slice progress via `peaks job checkpoint` (canonical reader `peaks job progress --job-id <jid>`). Full mechanics (judgement criteria, hook table, backup-regex rationale, hook wiring) at `references/step-0-8-gate.md`.
69
+
70
+ ### Peaks-Loop Step 0.81 — per-slice 收尾
71
+
72
+ After commit: `peaks job checkpoint --slice-id <rid> --state done --commit-sha $(git rev-parse HEAD)` → `peaks job status` → loop (remaining>0 → Step 1; ==0 → Step 8/9/10/11; blocked → Step 0.85).
73
+
74
+ ### Peaks-Loop Step 0.85 — slice 阻塞处理
75
+
76
+ Trigger: `repair-status` atCap=true, context-now red-line ≥5min, or `subagent-cleanup` fails twice. Action: `peaks job block --slice-id <rid> --reason "<reason>"` then STOP.
77
+
78
+ ### Peaks-Loop Step 0.86 — main session rotation
79
+
80
+ Active in rotating mode; fires every `rotateEvery` slices or via `peaks job rotate-now`. Sequence: cycle-summary → checkpoint rotate-marker → `peaks session rotate` → resume via `peaks session resume --job-id <jid>`.
81
+
82
+ ### Peaks-Loop Step 0.87 — sub-agent cleanup gate
83
+
84
+ After every `peaks sub-agent dispatch --batch-id <id>` inside a Job, BEFORE next slice checkpoint: `peaks job subagent-cleanup --job-id <jid> --batch-id <id> --force`. Non-zero → block.
85
+
86
+ → see `references/job-loop.md` for state machine, visibility, rotation cadence, cross-day recovery, 9 red lines.
87
+
88
+ ### Peaks-Loop Step 1: Mode selection
89
+
90
+ Use `AskUserQuestion` with `Full auto (Recommended)` first when user did not name a profile OR skill presence is stale (run `peaks skill presence:check-stale --project <path> --json` first; `stale: true` ⇒ re-ask). → `references/mode-selection.md`, `references/fast-mode.md`, `references/mode-selection-with-stale-presence.md`.
91
+
92
+ ### Peaks-Loop Step 2: Re-set skill presence with the chosen mode
93
+
94
+ Re-run `peaks skill presence:set peaks-code --mode <mode-value> --gate startup`. Install statusline on first run (`peaks statusline install`). → `references/skill-presence-and-title.md`.
95
+
96
+ ### Peaks-Loop Step 2.3: Load project memory (durable, LLM-authored memories)
97
+
98
+ Run `peaks project memories --project <repo> --json` to read decisions / conventions / modules / rules / lessons from `.peaks/memory`. → `references/project-memory-loading.md`.
99
+
100
+ ### Peaks-Loop Step 2.5: Set session title
101
+
102
+ Extract a short title from the user's first request (8-20 Chinese chars or 4-10 English words). Run `peaks session title <sessionId> "<title>" --json`. Skip if a title is already set. → `references/skill-presence-and-title.md` (same file as Step 2). D-002: sid is positional, NOT `--session-id` flag (rejected with `error: unknown option`).
103
+
104
+ ## Sub-agent session sharing (MANDATORY — one conversation = one sid)
105
+
106
+ When peaks-code dispatches a sub-agent (peaks-rd, peaks-qa, peaks-ui, peaks-txt, peaks-sc), the prompt MUST include the parent's sid. The sub-agent MUST NOT call `peaks workspace init` (would orphan the parent's binding).
107
+
108
+ ## Boundaries
109
+
110
+ Peaks-Loop Code may identify scenarios, recommend profiles, coordinate role skills via artifacts, coordinate project memory extraction, request user confirmation at risk/commit boundaries. MUST NOT silently install hooks / create agents / enable MCP / modify Claude settings / create GitHub repos / bypass role-skill artifacts. → `references/boundaries.md`.
@@ -45,7 +45,7 @@ Refuses to emit a final handoff while `remaining > 0` under Job mode. Pass `--fo
45
45
 
46
46
  ### 3. Forced auto-compact — `--enforce-job-mode`
47
47
 
48
- `peaks code context-now --enforce-job-mode` (auto-enabled when `job-shape.json` says `isJob=true`) returns `action: 'auto-compact-now'` at ≥ 0.85; Code MUST call `peaks session auto-compact --execute` without confirmation.
48
+ `peaks code context-now --enforce-job-mode` (auto-enabled when `job-shape.json` says `isJob=true`) returns `action: 'auto-compact-now'` at ≥ 0.85; Code MUST call `peaks compact auto --execute` without confirmation.
49
49
 
50
50
  ### 4. On-disk slice progress — `progress.json`
51
51
 
@@ -85,7 +85,10 @@ peaks sub-agent dispatch <role> --prompt <text> [--request-id <rid>] [--session-
85
85
  "artifactBytes": 0,
86
86
  "totalBytes": 4321
87
87
  },
88
- "artifactMetas": []
88
+ "artifactMetas": [],
89
+ "orchestratorVisibleHint": "⏳ Spawning sub-agent via Task tool: rd for rid=002-2026-06-07, batch-id=… (ETA ~45s)",
90
+ "artifactsPublicPaths": [],
91
+ "expectedCompletionSeconds": 45
89
92
  },
90
93
  "warnings": [],
91
94
  "nextActions": [
@@ -248,6 +251,94 @@ once the poller has read them.
248
251
  - AC-25..AC-32: G5 resource lifecycle (RL-1 batch counter, dispatch record schema, reducer dispose, slice archive, cancel dispose)
249
252
  - AC-33..AC-37: G6 heartbeat CLI, schema, poller, status line, E2E
250
253
 
254
+ ## G11.5 — visibility contract (slice 2026-07-28-sub-agent-visibility)
255
+
256
+ The dispatch CLI is a `dry-run` primitive — it never spawns the Task
257
+ tool itself. The LLM orchestrator (peaks-code / peaks-rd / peaks-qa)
258
+ executes the returned `data.toolCall` via the IDE's `Task` agent. The
259
+ harness does not always render the spawned agent's progress in the
260
+ user's terminal, so the user frequently sees "peaks dispatched" but
261
+ no Task UI feedback. This rule closes that gap with three
262
+ machine-readable + one prose obligation.
263
+
264
+ **Envelope additions (single dispatch and `--from-dag`):**
265
+
266
+ - `data.orchestratorVisibleHint: string` — a single-line prose string
267
+ the orchestrator MUST echo verbatim in the user-facing turn
268
+ (i.e. in the orchestrator's response, NOT just the tool call).
269
+ Format: `⏳ Spawning sub-agent via Task tool: <role> for rid=<rid>, batch-id=<batchId> (ETA ~<seconds>s)`.
270
+ - `data.artifactsPublicPaths: readonly string[]` — public artifact
271
+ paths the sub-agent will own. Empty when `--write-artifact` is not
272
+ passed; otherwise contains the single user-supplied path. The
273
+ orchestrator surfaces this list before fan-out so the user can see
274
+ what files will appear on disk.
275
+ - `data.expectedCompletionSeconds: number` — ETA budget. Single
276
+ dispatch defaults to 45s; `--from-dag` defaults to 60s. Use as a
277
+ hint, not a hard deadline (the heartbeat poller at §G6 still owns
278
+ the 5-min stale threshold).
279
+
280
+ **Orchestrator obligations (text-locked, no skip):**
281
+
282
+ 1. Before every `Agent` tool call that materializes a `data.toolCall`
283
+ returned by `peaks sub-agent dispatch`, the orchestrator MUST emit
284
+ one line of prose to the user containing
285
+ `⏳ Spawning sub-agent via Task tool: <description>`. `<description>`
286
+ MUST be ≥ 6 chars and MUST include the rid. (`description` is the
287
+ short label rendered by the IDE; the prose line is the user-visible
288
+ counter-part.) The line is rendered in the assistant's reply text,
289
+ not in the tool result block.
290
+ 2. When the CLI returns a fan-out envelope (`dispatchCount > 1`),
291
+ the orchestrator MUST emit the prose line once for the whole fan-out
292
+ (not once per leaf) and then issue all `Agent` tool calls in the
293
+ same turn. Repeating the line N times defeats the point of fan-out.
294
+ 3. If the orchestrator cannot satisfy (1) (e.g. an inline tool call
295
+ failed and the orchestrator wants to retry), it MUST explain the
296
+ retry in the next user-visible message — silent retry is a
297
+ visibility regression.
298
+
299
+ **Why the prose, not just the envelope field**: the
300
+ `orchestratorVisibleHint` field is machine-readable, but a terminal
301
+ user reads prose. The LLM MUST transcribe the hint into the visible
302
+ reply. The two surfaces are not redundant — the field is for
303
+ downstream tooling, the prose is for the human. Same payload,
304
+ different readers.
305
+
306
+ **Regression guard**: `tests/unit/dispatch/dispatch-fanout-mandatory.test.ts`
307
+ parses the same SKILL.md text and asserts the G11.5 paragraph is
308
+ present; do not delete the heading without also updating the guard.
309
+
310
+ ---
311
+
312
+ ## D21 — LLM-side completion signal (mandatory)
313
+
314
+ `peaks sub-agent dispatch` writes the record in `queued` state. The
315
+ dispatcher has no other way to learn that the spawned Task tool
316
+ actually returned. **The LLM runner MUST call `peaks sub-agent finalize`
317
+ once per dispatched Task, in the post-completion branch** (after the
318
+ Task tool's `tool_result` has been received). Without it, the record
319
+ stays `queued, no-execution` forever.
320
+
321
+ ```sh
322
+ # After each Task tool returns:
323
+ peaks sub-agent finalize --request-id <rid> --outcome done
324
+
325
+ # On Task failure:
326
+ peaks sub-agent finalize --request-id <rid> --outcome failed --error "<msg>"
327
+
328
+ # Crash-recovery sweep (only if the runner was interrupted and many
329
+ # records are stuck in queued):
330
+ peaks sub-agent finalize --all-stale --outcome done
331
+ ```
332
+
333
+ `finalize` calls `markCompleted` (in dispatch-record-writer.ts), which
334
+ transitions the record to the chosen status and unregisters the path
335
+ from `active-dispatches.json`. The next runner does not see a stale
336
+ ghost.
337
+
338
+ This was added in slice 2026-07-17-D21 after 13 stale records were
339
+ observed in the peaks-loop repo (`active-dispatches.json` would have
340
+ grown unboundedly without this fix).
341
+
251
342
  ## How to apply
252
343
 
253
344
  When writing a SKILL.md that fans out sub-agents: