peaks-loop 4.0.0-beta.9 → 4.0.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 (552) hide show
  1. package/CHANGELOG.md +910 -141
  2. package/README-en.md +26 -7
  3. package/README.md +75 -6
  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 +47 -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,59 @@
1
+ function buildContract(markers, scopeName) {
2
+ return (skill) => {
3
+ if (skill.name !== scopeName)
4
+ return [];
5
+ const lines = skill.lines.length > 0 ? skill.lines : skill.body.split(/\r?\n/);
6
+ const missing = [];
7
+ for (const m of markers) {
8
+ if (!lines.some((l) => m.pattern.test(l)))
9
+ missing.push(m.name);
10
+ }
11
+ if (missing.length === 0)
12
+ return [];
13
+ return [{
14
+ catalogId: 'lint-peaks-skill-runtime-' + markers[0]?.name.toLowerCase().replace(/[^a-z0-9]+/g, '-'),
15
+ rule: `peaks-* SKILL.md must declare the runtime contract (missing markers: ${missing.join(', ')})`,
16
+ file: skill.path,
17
+ line: 1,
18
+ matchedText: `missing markers: ${missing.join(', ')}`
19
+ }];
20
+ };
21
+ }
22
+ const PEAKS_AUDIT_MARKERS = Object.freeze([
23
+ { name: 'Audit log machine-readable', pattern: /audit log is machine-readable/i },
24
+ { name: 'Six-dimension audit', pattern: /six dimensions|6 dimensions/i },
25
+ { name: 'Author identity', pattern: /author identity.*local gitconfig/i }
26
+ ]);
27
+ const PEAKS_CONTENT_MARKERS = Object.freeze([
28
+ { name: 'What this skill do', pattern: /what this skill do/i },
29
+ { name: 'Failure mode', pattern: /failure mode/i },
30
+ { name: 'Each red line is written', pattern: /each red line is written/i }
31
+ ]);
32
+ const PEAKS_IDE_MARKERS = Object.freeze([
33
+ { name: 'For any consumer', pattern: /for any consumer of the v2 envelope/i },
34
+ { name: 'What this skill do', pattern: /what this skill do/i },
35
+ { name: 'General workflow-gating tool', pattern: /general workflow-gating tool/i }
36
+ ]);
37
+ export const lintPeaksAuditRuntime = buildContract(PEAKS_AUDIT_MARKERS, 'peaks-audit');
38
+ export const lintPeaksContentRuntime = buildContract(PEAKS_CONTENT_MARKERS, 'peaks-content');
39
+ export const lintPeaksIdeRuntime = buildContract(PEAKS_IDE_MARKERS, 'peaks-ide');
40
+ /** Doctor — single marker, often a one-line contract. */
41
+ const PEAKS_DOCTOR_MARKERS = Object.freeze([
42
+ { name: 'peaks-loop doctor is a doctor orchestrator', pattern: /peaks-loop doctor is a doctor orchestrator/i }
43
+ ]);
44
+ const PEAKS_ISSUE_FIX_ORCHESTRATOR_MARKERS = Object.freeze([
45
+ { name: 'Deviation note', pattern: /deviation note/i },
46
+ { name: 'Autonomous work proceed', pattern: /autonomous work proceed/i }
47
+ ]);
48
+ const PEAKS_SOP_MARKERS = Object.freeze([
49
+ { name: 'Each red line below', pattern: /each red line below is written/i },
50
+ { name: 'sop lint reports findings', pattern: /sop lint reports findings/i }
51
+ ]);
52
+ const PEAKS_SLICE_DECOMPOSE_MARKERS = Object.freeze([
53
+ { name: 'What this skill do', pattern: /what this skill do/i },
54
+ { name: 'Failure mode ( — read before declaring a', pattern: /failure mode \(/i }
55
+ ]);
56
+ export const lintPeaksDoctorRuntime = buildContract(PEAKS_DOCTOR_MARKERS, 'peaks-doctor');
57
+ export const lintPeaksIssueFixOrchestratorRuntime = buildContract(PEAKS_ISSUE_FIX_ORCHESTRATOR_MARKERS, 'peaks-issue-fix-orchestrator');
58
+ export const lintPeaksSopRuntime = buildContract(PEAKS_SOP_MARKERS, 'peaks-sop');
59
+ export const lintPeaksSliceDecomposeRuntime = buildContract(PEAKS_SLICE_DECOMPOSE_MARKERS, 'peaks-slice-decompose');
@@ -0,0 +1,28 @@
1
+ /**
2
+ * P2-b sweep 007 — peaks-ui / peaks-txt / peaks-perf-audit runtime
3
+ * contract enforcers. Closes the remaining 6 discovered lines:
4
+ *
5
+ * - peaks-ui-skill-md-X (3 lines):
6
+ * identify ui involvement
7
+ * superpowers chain refusal (L1 worktree governance)
8
+ * superpowers skills remain available as reference material
9
+ * - peaks-txt-skill-md-X (2 lines):
10
+ * inspect upstream skill content before applying any method
11
+ * memory block embedding rule
12
+ * - peaks-perf-audit-skill-md-X (1 line):
13
+ * MUST NOT invoke perf-audit for non-perf slices
14
+ *
15
+ * Four enforcers in one file (the runtime contract cluster):
16
+ * - lintPeaksUiSuperpowersChain — both superpowers-refusal
17
+ * + reference-material markers required.
18
+ * - lintPeaksTxtUpstreamInspection — the inspect-upstream
19
+ * + memory-block markers.
20
+ * - lintPeaksPerfAuditScope — the non-perf MUST NOT.
21
+ * - lintPeaksUiInvolvement — the ui-involvement identification
22
+ * block (peaks-ui only).
23
+ */
24
+ import type { LintHit, SkillFile } from './lint-style.js';
25
+ export declare function lintPeaksUiSuperpowersChain(skill: SkillFile): ReadonlyArray<LintHit>;
26
+ export declare function lintPeaksUiInvolvement(skill: SkillFile): ReadonlyArray<LintHit>;
27
+ export declare function lintPeaksTxtUpstream(skill: SkillFile): ReadonlyArray<LintHit>;
28
+ export declare function lintPeaksPerfAuditScope(skill: SkillFile): ReadonlyArray<LintHit>;
@@ -0,0 +1,86 @@
1
+ const SUPERPOWERS_REFUSAL = /MUST NOT follow the superpowers chain/i;
2
+ const SUPERPOWERS_REFERENCE = /superpowers skills remain available as reference material/i;
3
+ const UI_INVOLVEMENT = /identify ui involvement/i;
4
+ const TXT_INSPECT_UPSTREAM = /inspect upstream skill content before applying any method/i;
5
+ const TXT_MEMORY_BLOCK = /memory block embedding rule/i;
6
+ const PERF_AUDIT_NON_PERF = /MUST NOT invoke this skill[\s\S]*?non-perf/i;
7
+ export function lintPeaksUiSuperpowersChain(skill) {
8
+ if (skill.name !== 'peaks-ui')
9
+ return [];
10
+ const lines = skill.lines.length > 0
11
+ ? skill.lines
12
+ : skill.body.split(/\r?\n/);
13
+ const hasRefusal = lines.some((l) => SUPERPOWERS_REFUSAL.test(l));
14
+ const hasReference = lines.some((l) => SUPERPOWERS_REFERENCE.test(l));
15
+ if (hasRefusal && hasReference)
16
+ return [];
17
+ const missing = [];
18
+ if (!hasRefusal)
19
+ missing.push('MUST NOT follow the superpowers chain');
20
+ if (!hasReference)
21
+ missing.push('superpowers skills remain available as reference material');
22
+ return [{
23
+ catalogId: 'rl-peaks-ui-superpowers-chain-001',
24
+ rule: 'peaks-ui SKILL.md must declare the superpowers chain refusal + reference-material contract',
25
+ file: skill.path,
26
+ line: 1,
27
+ matchedText: `missing markers: ${missing.join(', ')}`
28
+ }];
29
+ }
30
+ export function lintPeaksUiInvolvement(skill) {
31
+ if (skill.name !== 'peaks-ui')
32
+ return [];
33
+ const lines = skill.lines.length > 0
34
+ ? skill.lines
35
+ : skill.body.split(/\r?\n/);
36
+ const hasInvolvement = lines.some((l) => UI_INVOLVEMENT.test(l));
37
+ if (hasInvolvement)
38
+ return [];
39
+ return [{
40
+ catalogId: 'rl-peaks-ui-involvement-001',
41
+ rule: 'peaks-ui SKILL.md must declare the UI-involvement identification block',
42
+ file: skill.path,
43
+ line: 1,
44
+ matchedText: 'missing "identify ui involvement" marker'
45
+ }];
46
+ }
47
+ export function lintPeaksTxtUpstream(skill) {
48
+ if (skill.name !== 'peaks-txt')
49
+ return [];
50
+ const lines = skill.lines.length > 0
51
+ ? skill.lines
52
+ : skill.body.split(/\r?\n/);
53
+ const hasInspect = lines.some((l) => TXT_INSPECT_UPSTREAM.test(l));
54
+ const hasMemoryBlock = lines.some((l) => TXT_MEMORY_BLOCK.test(l));
55
+ if (hasInspect && hasMemoryBlock)
56
+ return [];
57
+ const missing = [];
58
+ if (!hasInspect)
59
+ missing.push('inspect upstream skill content before applying any method');
60
+ if (!hasMemoryBlock)
61
+ missing.push('memory block embedding rule');
62
+ return [{
63
+ catalogId: 'rl-peaks-txt-upstream-001',
64
+ rule: 'peaks-txt SKILL.md must declare the upstream-inspection + memory-block contract',
65
+ file: skill.path,
66
+ line: 1,
67
+ matchedText: `missing markers: ${missing.join(', ')}`
68
+ }];
69
+ }
70
+ export function lintPeaksPerfAuditScope(skill) {
71
+ if (skill.name !== 'peaks-perf-audit')
72
+ return [];
73
+ const lines = skill.lines.length > 0
74
+ ? skill.lines
75
+ : skill.body.split(/\r?\n/);
76
+ const hasNonPerf = lines.some((l) => PERF_AUDIT_NON_PERF.test(l));
77
+ if (hasNonPerf)
78
+ return [];
79
+ return [{
80
+ catalogId: 'rl-peaks-perf-audit-scope-001',
81
+ rule: 'peaks-perf-audit SKILL.md must declare the non-perf MUST NOT invoke clause',
82
+ file: skill.path,
83
+ line: 1,
84
+ matchedText: 'missing "MUST NOT invoke this skill for non-perf slices" marker'
85
+ }];
86
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * P2-b sweep 004 — PRD artifact handoff enforcer.
3
+ *
4
+ * Closes three peaks-prd discovered lines (md-99, md-166, md-193):
5
+ * - 99 : preserved behavior section in the PRD template
6
+ * - 166 : "5.5 — write the immutable handoff" step
7
+ * - 193 : "Transition verification gates" section
8
+ *
9
+ * The three are one logical contract (the PRD runbook must
10
+ * declare these handoff markers). A single enforcer scanning
11
+ * the SKILL.md for all three closes the cluster in one pass.
12
+ *
13
+ * scope: peaks-prd only.
14
+ */
15
+ import type { LintHit, SkillFile } from './lint-style.js';
16
+ export declare function lintPrdArtifactHandoff(skill: SkillFile): ReadonlyArray<LintHit>;
@@ -0,0 +1,41 @@
1
+ const PRESERVED_BEHAVIOR = /\bPreserved behavior\b/;
2
+ const HANDOFF_STEP_5_5 = /5\.5\s*—\s*write the immutable handoff/im;
3
+ const TRANSITION_GATES = /Transition verification gates/im;
4
+ function findPrdHandoffContract(lines) {
5
+ let preserved = false;
6
+ let handoffStep = false;
7
+ let transitionGates = false;
8
+ for (const line of lines) {
9
+ if (PRESERVED_BEHAVIOR.test(line))
10
+ preserved = true;
11
+ if (HANDOFF_STEP_5_5.test(line))
12
+ handoffStep = true;
13
+ if (TRANSITION_GATES.test(line))
14
+ transitionGates = true;
15
+ }
16
+ return { preserved, handoffStep, transitionGates };
17
+ }
18
+ export function lintPrdArtifactHandoff(skill) {
19
+ if (skill.name !== 'peaks-prd')
20
+ return [];
21
+ const lines = skill.lines.length > 0
22
+ ? skill.lines
23
+ : skill.body.split(/\r?\n/);
24
+ const { preserved, handoffStep, transitionGates } = findPrdHandoffContract(lines);
25
+ if (preserved && handoffStep && transitionGates)
26
+ return [];
27
+ const missing = [];
28
+ if (!preserved)
29
+ missing.push('Preserved behavior');
30
+ if (!handoffStep)
31
+ missing.push('step 5.5 (write the immutable handoff)');
32
+ if (!transitionGates)
33
+ missing.push('Transition verification gates');
34
+ return [{
35
+ catalogId: 'rl-prd-artifact-handoff-001',
36
+ rule: 'peaks-prd SKILL.md must declare the artifact handoff contract (Preserved behavior + step 5.5 + Transition verification gates)',
37
+ file: skill.path,
38
+ line: 1,
39
+ matchedText: `missing markers: ${missing.join(', ')}`
40
+ }];
41
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * P2-b sweep — PRD source-snapshot placement enforcer.
3
+ *
4
+ * Targets the BLOCKING markers around the peaks-prd
5
+ * "Document snapshot placement" + "Prohibited paths" guidance
6
+ * (rl-discovered-skills-bee-peaks-prd-skill-md-292 + 301).
7
+ * The contract: PRD source snapshots from external documents
8
+ * (Feishu / Lark / wiki / web) MUST go to
9
+ * `.peaks/_runtime/<sessionId>/prd/source/`, never to the
10
+ * project root.
11
+ *
12
+ * The enforcer pattern-scans the peaks-prd SKILL.md for the
13
+ * required guidance phrasing. Two hits (placement heading +
14
+ * prohibited-paths line) are both required for a clean
15
+ * enforcer pass. A single missing item emits a synthetic hit
16
+ * pointing at the line the user is most likely to look at
17
+ * (the placement heading line, or line 1 if missing).
18
+ *
19
+ * This is the second prose-only enforcer in the sweep
20
+ * (after lint-skill-presence-mandatory.ts). It demonstrates
21
+ * the path for the remaining 65 discovered lines: each
22
+ * enforcer is small, single-purpose, and has its own catalog
23
+ * entry. The catalog governance ratio will tick down with
24
+ * every enforcer shipped.
25
+ */
26
+ import type { LintHit, SkillFile } from './lint-style.js';
27
+ export declare function lintPrdSourceSnapshot(skill: SkillFile): ReadonlyArray<LintHit>;
@@ -0,0 +1,47 @@
1
+ const PLACEMENT_HEADING = /^##\s+.*Document snapshot placement/im;
2
+ const PROHIBITED_PATHS = /Prohibited paths/im;
3
+ const SOURCE_SUBDIR = /\.peaks\/_runtime\/<session-id>\/prd\/source\//;
4
+ function findPrdSourceSnapshotGuidance(lines) {
5
+ let placementLine = null;
6
+ let hasProhibited = false;
7
+ let hasSubdir = false;
8
+ for (let i = 0; i < lines.length; i++) {
9
+ const line = lines[i] ?? '';
10
+ if (PLACEMENT_HEADING.test(line)) {
11
+ placementLine = i + 1;
12
+ // Look ahead up to 30 lines for the prohibited-paths
13
+ // line + the source subdir reference.
14
+ for (let j = i; j < Math.min(i + 30, lines.length); j++) {
15
+ const next = lines[j] ?? '';
16
+ if (PROHIBITED_PATHS.test(next))
17
+ hasProhibited = true;
18
+ if (SOURCE_SUBDIR.test(next))
19
+ hasSubdir = true;
20
+ }
21
+ break;
22
+ }
23
+ }
24
+ return { placementLine, hasProhibited, hasSubdir };
25
+ }
26
+ export function lintPrdSourceSnapshot(skill) {
27
+ // Scope: peaks-prd only. Other bee skills do not have the
28
+ // source-snapshot contract.
29
+ if (skill.name !== 'peaks-prd')
30
+ return [];
31
+ const lines = skill.lines.length > 0
32
+ ? skill.lines
33
+ : skill.body.split(/\r?\n/);
34
+ const { placementLine, hasProhibited, hasSubdir } = findPrdSourceSnapshotGuidance(lines);
35
+ if (placementLine !== null && hasProhibited && hasSubdir)
36
+ return [];
37
+ const detail = placementLine === null
38
+ ? 'missing `## Document snapshot placement` heading'
39
+ : `placement heading at line ${placementLine} but guidance incomplete (prohibited=${hasProhibited}, subdir=${hasSubdir})`;
40
+ return [{
41
+ catalogId: 'rl-prd-source-snapshot-placement-001',
42
+ rule: 'PRD source-snapshot placement (BLOCKING): external-document snapshots must land in .peaks/_runtime/<sessionId>/prd/source/, never project root',
43
+ file: skill.path,
44
+ line: placementLine ?? 1,
45
+ matchedText: detail
46
+ }];
47
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * P2-b sweep 006 — peaks-qa gateguard + runtime contract.
3
+ *
4
+ * Closes four peaks-qa discovered lines:
5
+ * - md-26 : "Pre-flight: gateguard-fact-force conflict" (BLOCKING)
6
+ * - md-113 : "Transition verification gates" (MANDATORY)
7
+ * - md-165 : "if playwright mcp is unavailable, the llm checks" (BLOCKING)
8
+ * - md-201 : "when the target repository has openspec/, qa must" (BLOCKING)
9
+ *
10
+ * Two enforcers:
11
+ * - lintQaGateguardPreflight: peaks-qa only; checks the
12
+ * gateguard-fact-force pre-flight heading.
13
+ * - lintQaRuntimeContract: peaks-qa only; checks for
14
+ * transition gates + playwright mcp handling + openspec
15
+ * integration.
16
+ */
17
+ import type { LintHit, SkillFile } from './lint-style.js';
18
+ export declare function lintQaGateguardPreflight(skill: SkillFile): ReadonlyArray<LintHit>;
19
+ export declare function lintQaRuntimeContract(skill: SkillFile): ReadonlyArray<LintHit>;
@@ -0,0 +1,47 @@
1
+ const GATEGUARD_HEADING = /Pre-flight:\s*gateguard-fact-force conflict/im;
2
+ const TRANSITION_GATES = /Transition verification gates/im;
3
+ const PLAYWRIGHT_MCP = /if playwright mcp is unavailable/i;
4
+ const OPENSPEC_INTEGRATION = /when the target repository has openspec\//i;
5
+ export function lintQaGateguardPreflight(skill) {
6
+ if (skill.name !== 'peaks-qa')
7
+ return [];
8
+ const lines = skill.lines.length > 0
9
+ ? skill.lines
10
+ : skill.body.split(/\r?\n/);
11
+ const hasGateguard = lines.some((l) => GATEGUARD_HEADING.test(l));
12
+ if (hasGateguard)
13
+ return [];
14
+ return [{
15
+ catalogId: 'rl-qa-gateguard-preflight-001',
16
+ rule: 'peaks-qa SKILL.md must declare the `## Pre-flight: gateguard-fact-force conflict (BLOCKING)` section',
17
+ file: skill.path,
18
+ line: 1,
19
+ matchedText: 'missing gateguard pre-flight heading'
20
+ }];
21
+ }
22
+ export function lintQaRuntimeContract(skill) {
23
+ if (skill.name !== 'peaks-qa')
24
+ return [];
25
+ const lines = skill.lines.length > 0
26
+ ? skill.lines
27
+ : skill.body.split(/\r?\n/);
28
+ const hasTransition = lines.some((l) => TRANSITION_GATES.test(l));
29
+ const hasPlaywright = lines.some((l) => PLAYWRIGHT_MCP.test(l));
30
+ const hasOpenSpec = lines.some((l) => OPENSPEC_INTEGRATION.test(l));
31
+ if (hasTransition && hasPlaywright && hasOpenSpec)
32
+ return [];
33
+ const missing = [];
34
+ if (!hasTransition)
35
+ missing.push('Transition verification gates');
36
+ if (!hasPlaywright)
37
+ missing.push('Playwright MCP unavailability handling');
38
+ if (!hasOpenSpec)
39
+ missing.push('OpenSpec integration requirement');
40
+ return [{
41
+ catalogId: 'rl-qa-runtime-contract-001',
42
+ rule: 'peaks-qa SKILL.md must declare the runtime contract (transition gates + Playwright MCP + OpenSpec integration)',
43
+ file: skill.path,
44
+ line: 1,
45
+ matchedText: `missing markers: ${missing.join(', ')}`
46
+ }];
47
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * P2-b sweep 005 — peaks-rd handoff + coverage enforcers.
3
+ *
4
+ * Closes three peaks-rd discovered lines:
5
+ * - md-121 : "do not hand off to QA without [tech-doc.md]" (BLOCKING)
6
+ * - md-127 : "do not hand off to QA without a perf-baseline" (BLOCKING)
7
+ * - md-162 : "100% coverage target on testable files is meaningful"
8
+ *
9
+ * Two enforcers (handoff + coverage). The handoff enforcer
10
+ * checks for both 'tech-doc' and 'perf-baseline' handoff
11
+ * markers; the coverage enforcer checks for the 100%-target
12
+ * phrasing + the no-coverage-padding rule.
13
+ *
14
+ * scope: peaks-rd only.
15
+ */
16
+ import type { LintHit, SkillFile } from './lint-style.js';
17
+ export declare function lintRdHandoffContract(skill: SkillFile): ReadonlyArray<LintHit>;
18
+ export declare function lintRdCoverageDiscipline(skill: SkillFile): ReadonlyArray<LintHit>;
@@ -0,0 +1,70 @@
1
+ const TECH_DOC_HANDOFF = /do not hand off to qa without[^\n]*tech-doc/im;
2
+ const PERF_BASELINE_HANDOFF = /do not hand off to qa without[^\n]*perf-baseline/im;
3
+ const COVERAGE_TARGET = /100%\s*coverage target[^\n]*testable files/i;
4
+ const NO_PADDING = /must not write coverage-padding tests/i;
5
+ function findHandoffContract(lines) {
6
+ let techDoc = false;
7
+ let perfBaseline = false;
8
+ for (const line of lines) {
9
+ if (TECH_DOC_HANDOFF.test(line))
10
+ techDoc = true;
11
+ if (PERF_BASELINE_HANDOFF.test(line))
12
+ perfBaseline = true;
13
+ }
14
+ return { techDoc, perfBaseline };
15
+ }
16
+ function findCoverageContract(lines) {
17
+ let target = false;
18
+ let noPadding = false;
19
+ for (const line of lines) {
20
+ if (COVERAGE_TARGET.test(line))
21
+ target = true;
22
+ if (NO_PADDING.test(line))
23
+ noPadding = true;
24
+ }
25
+ return { target, noPadding };
26
+ }
27
+ export function lintRdHandoffContract(skill) {
28
+ if (skill.name !== 'peaks-rd')
29
+ return [];
30
+ const lines = skill.lines.length > 0
31
+ ? skill.lines
32
+ : skill.body.split(/\r?\n/);
33
+ const { techDoc, perfBaseline } = findHandoffContract(lines);
34
+ if (techDoc && perfBaseline)
35
+ return [];
36
+ const missing = [];
37
+ if (!techDoc)
38
+ missing.push('tech-doc handoff BLOCKING');
39
+ if (!perfBaseline)
40
+ missing.push('perf-baseline handoff BLOCKING');
41
+ return [{
42
+ catalogId: 'rl-rd-handoff-contract-001',
43
+ rule: 'peaks-rd SKILL.md must declare the QA-handoff BLOCKING contract (tech-doc + perf-baseline)',
44
+ file: skill.path,
45
+ line: 1,
46
+ matchedText: `missing markers: ${missing.join(', ')}`
47
+ }];
48
+ }
49
+ export function lintRdCoverageDiscipline(skill) {
50
+ if (skill.name !== 'peaks-rd')
51
+ return [];
52
+ const lines = skill.lines.length > 0
53
+ ? skill.lines
54
+ : skill.body.split(/\r?\n/);
55
+ const { target, noPadding } = findCoverageContract(lines);
56
+ if (target && noPadding)
57
+ return [];
58
+ const missing = [];
59
+ if (!target)
60
+ missing.push('100% coverage target (testable files) phrasing');
61
+ if (!noPadding)
62
+ missing.push('"must not write coverage-padding tests" rule');
63
+ return [{
64
+ catalogId: 'rl-rd-coverage-discipline-001',
65
+ rule: 'peaks-rd SKILL.md must declare the coverage discipline (100% target + no-padding rule)',
66
+ file: skill.path,
67
+ line: 1,
68
+ matchedText: `missing markers: ${missing.join(', ')}`
69
+ }];
70
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * P2-b (Slice #6+1) — Skill presence MANDATORY enforcer.
3
+ *
4
+ * Targets the `peaks-prd` / `peaks-rd` / `peaks-qa` SKILL.md
5
+ * "Skill presence (MANDATORY first action)" heading that the
6
+ * audit classified as `rl-discovered-skills-bee-peaks-prd-skill-md-56`
7
+ * (and the parallel peaks-rd / peaks-qa lines). The marker
8
+ * MANDATORY + the phrase "Skill presence" + "first action" are
9
+ * all required; if any of the three is missing on a `peaks-*`
10
+ * SKILL.md the enforcer emits a synthetic hit so the audit
11
+ * report can render the entry.
12
+ *
13
+ * This file is a single-purpose enforcer (one enforcerRef per
14
+ * catalog entry). It deliberately does NOT cover every
15
+ * discovered prose-only line — the next rid (catalog
16
+ * governance sweep) is the right place to add the rest. This
17
+ * commit's goal is to close the first one and prove the
18
+ * catalog-entry + enforcerRef + test path works end-to-end.
19
+ *
20
+ * No new deps. No shell-out. No FS writes. The enforcer
21
+ * function is sync + side-effect-free so the audit hot path
22
+ * stays fast.
23
+ */
24
+ import type { LintHit, SkillFile } from './lint-style.js';
25
+ export declare function lintSkillPresenceMandatory(skill: SkillFile): ReadonlyArray<LintHit>;
@@ -0,0 +1,53 @@
1
+ const SKILL_PRESENCE_HEADING = /^##\s+Skill presence\s*\([^)]*MANDATORY[^)]*first action\)/im;
2
+ const SKILL_PRESENCE_BODY = /immediately run:/i;
3
+ const MANDATORY_MARKER = /\bMANDATORY\b/;
4
+ const TARGET_SKILL_PREFIX = 'peaks-';
5
+ function findSkillPresenceSection(lines) {
6
+ let heading = null;
7
+ let bodyOk = false;
8
+ let hasMarker = false;
9
+ for (let i = 0; i < lines.length; i++) {
10
+ const line = lines[i] ?? '';
11
+ if (SKILL_PRESENCE_HEADING.test(line)) {
12
+ heading = i + 1;
13
+ // Look ahead up to 8 lines for the body / marker.
14
+ for (let j = i; j < Math.min(i + 8, lines.length); j++) {
15
+ const next = lines[j] ?? '';
16
+ if (SKILL_PRESENCE_BODY.test(next))
17
+ bodyOk = true;
18
+ if (MANDATORY_MARKER.test(next))
19
+ hasMarker = true;
20
+ }
21
+ break;
22
+ }
23
+ }
24
+ return { heading, bodyOk, hasMarker };
25
+ }
26
+ export function lintSkillPresenceMandatory(skill) {
27
+ // Scope: peaks-* bee SKILL.md. The path check is the primary
28
+ // gate; the name check is a defense-in-depth guard for callers
29
+ // that pass a skill whose name does not match its path
30
+ // (e.g. tests with a synthetic SkillFile).
31
+ if (!skill.path.includes('skills/bee/'))
32
+ return [];
33
+ if (!skill.name.startsWith(TARGET_SKILL_PREFIX))
34
+ return [];
35
+ // Reconstruct lines from body (the SkillFile interface exposes body
36
+ // and lines; for compatibility, prefer lines if non-empty).
37
+ const lines = skill.lines.length > 0
38
+ ? skill.lines
39
+ : skill.body.split(/\r?\n/);
40
+ const { heading, bodyOk, hasMarker } = findSkillPresenceSection(lines);
41
+ if (heading !== null && bodyOk && hasMarker)
42
+ return [];
43
+ const detail = heading === null
44
+ ? 'missing `## Skill presence (MANDATORY first action)` heading'
45
+ : `heading present at line ${heading} but body/marker incomplete (body=${bodyOk}, marker=${hasMarker})`;
46
+ return [{
47
+ catalogId: 'rl-skill-presence-mandatory-001',
48
+ rule: 'Skill presence (MANDATORY first action) — peaks-* bee SKILL.md must declare the section',
49
+ file: skill.path,
50
+ line: heading ?? 1,
51
+ matchedText: detail
52
+ }];
53
+ }
@@ -12,10 +12,4 @@
12
12
  * discovery path as the P0 / P1 entries.
13
13
  */
14
14
  import type { RedLineCatalogEntry } from './red-line-catalog.js';
15
- /**
16
- * The 25 P2-a entries, in stable display order. Appending to a single
17
- * readonly array keeps the catalog growable: future slices (L2.4, L3.x)
18
- * can spread this list into RED_LINE_CATALOG and add their own without
19
- * touching this file.
20
- */
21
15
  export declare const RED_LINE_CATALOG_P2_A: readonly RedLineCatalogEntry[];