specrails-desktop 2.57.0 → 2.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/README.md +1 -1
  2. package/cli/dist/args.js +10 -4
  3. package/cli/dist/help.js +1 -1
  4. package/client/dist/assets/{ActivityFeedPage-DdMNmVBk.js → ActivityFeedPage-BQGppIR0.js} +1 -1
  5. package/client/dist/assets/{AgentBrowserCapture-CeerUf--.js → AgentBrowserCapture-PI-cxyxi.js} +1 -1
  6. package/client/dist/assets/{AgentModeAnalyticsPane-BjGb-8rh.js → AgentModeAnalyticsPane-mQsOqdXx.js} +2 -2
  7. package/client/dist/assets/{AgentModeCodePane-8XRkQEo_.js → AgentModeCodePane-BL-vpmlY.js} +2 -2
  8. package/client/dist/assets/{AgentModeJobsPane-BN3dgJOA.js → AgentModeJobsPane-DR_06oqH.js} +1 -1
  9. package/client/dist/assets/AgentsPage-BKIKjm_1.js +118 -0
  10. package/client/dist/assets/{AnalyticsPage-CyfhYiBn.js → AnalyticsPage-069npRVo.js} +1 -1
  11. package/client/dist/assets/{CodePage-C2Nf-Q5W.js → CodePage-Alitorrv.js} +2 -2
  12. package/client/dist/assets/DesktopAnalyticsPage-qtWAPM47.js +1 -0
  13. package/client/dist/assets/{DocsDialog-Br3bczCp.js → DocsDialog-DwL6rgcT.js} +1 -1
  14. package/client/dist/assets/{DocsPage-BcDr2cBm.js → DocsPage-BA1hiJZ-.js} +1 -1
  15. package/client/dist/assets/{ExportDropdown-BVGKEgkd.js → ExportDropdown-BcMpvV89.js} +1 -1
  16. package/client/dist/assets/InteractiveJobComposer-B3H1YHr6.js +19 -0
  17. package/client/dist/assets/JobDetailModal-XZQ9eAAy.js +1 -0
  18. package/client/dist/assets/{JobDetailPage-vBbNeRuz.js → JobDetailPage-B-SIaq_q.js} +1 -1
  19. package/client/dist/assets/{JobsPage-CJCtPhIz.js → JobsPage-iQXAv2mx.js} +1 -1
  20. package/client/dist/assets/LoopBuilderPage-B_gbFAHn.js +1 -0
  21. package/client/dist/assets/LoopPreviewModal-je5pSCf-.js +1 -0
  22. package/client/dist/assets/LoopsPage-BZwcY5cu.js +2 -0
  23. package/client/dist/assets/{MinimizedChatsContext-D3QzgV0B.js → MinimizedChatsContext-CNx_0bZu.js} +1 -1
  24. package/client/dist/assets/{PluginsPage-DOpTV75p.js → PluginsPage-DFocnoHX.js} +2 -2
  25. package/client/dist/assets/{ProjectSettingsDialog-Dkwrn0z1.js → ProjectSettingsDialog-Bh3S6EBB.js} +1 -1
  26. package/client/dist/assets/{RepositoryDeliveries-Du2UCf1a.js → RepositoryDeliveries-BiwJuS8r.js} +1 -1
  27. package/client/dist/assets/{RepositoryScopeSelector-hPGZNRBm.js → RepositoryScopeSelector-C2mvWBQ6.js} +1 -1
  28. package/client/dist/assets/{ReviewPacketPage-DcOq-UTA.js → ReviewPacketPage-CrAf-WDy.js} +2 -2
  29. package/client/dist/assets/TemplatePreviewModal-C7DordpN.js +1 -0
  30. package/client/dist/assets/{TicketDetailModalContext-DAK-NoK6.js → TicketDetailModalContext-B-DySpKL.js} +1 -1
  31. package/client/dist/assets/{Trans-DEbgkuAY.js → Trans-D3AfDylf.js} +1 -1
  32. package/client/dist/assets/agentRuntime-BeUb3g9g.js +1 -0
  33. package/client/dist/assets/agentRuntime-Bg9tbmqm.js +1 -0
  34. package/client/dist/assets/agentRuntime-D-GJVGkj.js +1 -0
  35. package/client/dist/assets/agentRuntime-D2__CVI_.js +1 -0
  36. package/client/dist/assets/agentRuntime-D35dGVOP.js +1 -0
  37. package/client/dist/assets/agentRuntime-DGz_IqKW.js +1 -0
  38. package/client/dist/assets/agentRuntime-O1liDt6G.js +1 -0
  39. package/client/dist/assets/agentRuntime-hInH9Fzj.js +1 -0
  40. package/client/dist/assets/agentstudio-B2CTtQgZ.js +1 -0
  41. package/client/dist/assets/agentstudio-BWAKeGgB.js +1 -0
  42. package/client/dist/assets/{agentstudio-DR7doNBV.js → agentstudio-Cja8Sjcp.js} +1 -1
  43. package/client/dist/assets/agentstudio-DtfPcr99.js +1 -0
  44. package/client/dist/assets/agentstudio-QdAJIDef.js +1 -0
  45. package/client/dist/assets/agentstudio-X70BKf6u.js +1 -0
  46. package/client/dist/assets/agentstudio-fLXpRGIi.js +1 -0
  47. package/client/dist/assets/agentstudio-qXKqVnWS.js +1 -0
  48. package/client/dist/assets/{analytics-jzCkOec3.js → analytics-B1DIQd4m.js} +1 -1
  49. package/client/dist/assets/{analytics-CoEzWPx4.js → analytics-BAIZ9vE_.js} +1 -1
  50. package/client/dist/assets/{analytics-DjLlE7jS.js → analytics-BTqgmgBd.js} +1 -1
  51. package/client/dist/assets/analytics-BWynXPEm.js +1 -0
  52. package/client/dist/assets/{analytics-nZIjjtCc.js → analytics-DGcUsQ44.js} +1 -1
  53. package/client/dist/assets/{analytics-BNgZ1Nj7.js → analytics-GnSnpJ4W.js} +1 -1
  54. package/client/dist/assets/{analytics-DFh5lSOl.js → analytics-TWgYaoO0.js} +1 -1
  55. package/client/dist/assets/{analytics-DZp-DS2U.js → analytics-kJy6Tuko.js} +1 -1
  56. package/client/dist/assets/builder-C0FyvM83.js +1 -0
  57. package/client/dist/assets/builder-C1neIYGR.js +1 -0
  58. package/client/dist/assets/builder-CvnFm0im.js +1 -0
  59. package/client/dist/assets/builder-CzW5ovyI.js +1 -0
  60. package/client/dist/assets/builder-D06L7iPy.js +1 -0
  61. package/client/dist/assets/builder-DGETbtZj.js +1 -0
  62. package/client/dist/assets/builder-DXEJUlC0.js +1 -0
  63. package/client/dist/assets/builder-DyQperXU.js +1 -0
  64. package/client/dist/assets/common-BCK7c9Pv.js +1 -0
  65. package/client/dist/assets/common-C0BOdeNi.js +1 -0
  66. package/client/dist/assets/common-C4Yvvhp6.js +1 -0
  67. package/client/dist/assets/{common-BrlwEnL7.js → common-DmsclwjP.js} +1 -1
  68. package/client/dist/assets/common-DpLWwgI1.js +1 -0
  69. package/client/dist/assets/common-OCvl3c8t.js +1 -0
  70. package/client/dist/assets/common-c0aujEZC.js +1 -0
  71. package/client/dist/assets/common-od8WThlf.js +1 -0
  72. package/client/dist/assets/dashboard-B1ndRHuC.js +1 -0
  73. package/client/dist/assets/dashboard-BX7KXiqA.js +1 -0
  74. package/client/dist/assets/dashboard-B_BSNxcN.js +1 -0
  75. package/client/dist/assets/dashboard-CCeFN7-V.js +1 -0
  76. package/client/dist/assets/dashboard-CRl0WtFJ.js +1 -0
  77. package/client/dist/assets/dashboard-XGdQ5mjw.js +1 -0
  78. package/client/dist/assets/dashboard-_oltA6Jd.js +1 -0
  79. package/client/dist/assets/dashboard-bAuf5KVk.js +1 -0
  80. package/client/dist/assets/{formatDistanceToNow-Cc2u5FwQ.js → formatDistanceToNow-aBss1Nai.js} +1 -1
  81. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-BHm2U-w1.js → getTimezoneOffsetInMilliseconds-DOGj1Mfz.js} +1 -1
  82. package/client/dist/assets/index-BS7KCWkV.css +2 -0
  83. package/client/dist/assets/{index-Cxb288Rj.js → index-C4Mv6tV6.js} +32 -32
  84. package/client/dist/assets/{jira-api-DrGxiD9p.js → jira-api-BYbEPlkr.js} +1 -1
  85. package/client/dist/assets/{jobs-DSp9DoD_.js → jobs-6_-r75yC.js} +1 -1
  86. package/client/dist/assets/{jobs-C6qmvUAi.js → jobs-B1yqyId5.js} +1 -1
  87. package/client/dist/assets/{jobs-DoFaEl9g.js → jobs-BFuV7ttH.js} +1 -1
  88. package/client/dist/assets/{jobs-DTQO08nJ.js → jobs-BKa8LuwA.js} +1 -1
  89. package/client/dist/assets/{jobs-DrF8Do8s.js → jobs-BKiK-ZWh.js} +1 -1
  90. package/client/dist/assets/{jobs-DLHdDkHc.js → jobs-DmKV7b7d.js} +1 -1
  91. package/client/dist/assets/{jobs-C9j2PuwW.js → jobs-KG4Sn12X.js} +1 -1
  92. package/client/dist/assets/{jobs-Dpw6AEOP.js → jobs-pPv4KWjb.js} +1 -1
  93. package/client/dist/assets/loop-layout-BF8xMiNv.js +7 -0
  94. package/client/dist/assets/loops-B4_D-nbg.js +1 -0
  95. package/client/dist/assets/loops-BJDY9FTh.js +1 -0
  96. package/client/dist/assets/loops-BO3V8244.js +1 -0
  97. package/client/dist/assets/loops-C-hZK8pf.js +1 -0
  98. package/client/dist/assets/loops-CDOWZ0ci.js +1 -0
  99. package/client/dist/assets/loops-Dv849ckF.js +1 -0
  100. package/client/dist/assets/loops-Q9LIgGkq.js +1 -0
  101. package/client/dist/assets/loops-eUnCfLjC.js +1 -0
  102. package/client/dist/assets/{project-repositories-9Wzs0coQ.js → project-repositories-CSnfzUpg.js} +1 -1
  103. package/client/dist/assets/settings-3o4Ntzi5.js +1 -0
  104. package/client/dist/assets/settings-B97jlkwD.js +1 -0
  105. package/client/dist/assets/settings-BTaT_bsS.js +1 -0
  106. package/client/dist/assets/settings-CT8w7WiC.js +1 -0
  107. package/client/dist/assets/settings-Cvr8_tvh.js +1 -0
  108. package/client/dist/assets/settings-Dn1qgAC8.js +1 -0
  109. package/client/dist/assets/settings-EShDdg4J.js +1 -0
  110. package/client/dist/assets/settings-tfLhQZRN.js +1 -0
  111. package/client/dist/assets/{setup-Dwzt5nO1.js → setup-CBMu3tqH.js} +1 -1
  112. package/client/dist/assets/{setup-B5FHuxvB.js → setup-CPh-e6J2.js} +1 -1
  113. package/client/dist/assets/{setup-DpqzaEEA.js → setup-CRKLp_ke.js} +1 -1
  114. package/client/dist/assets/{setup-CROyqD5N.js → setup-Cy302v4J.js} +1 -1
  115. package/client/dist/assets/{setup-C9Fy9PKQ.js → setup-D681vTPf.js} +1 -1
  116. package/client/dist/assets/{setup-BihzXadx.js → setup-DYK0VBkE.js} +1 -1
  117. package/client/dist/assets/{setup-BtC6Hg4K.js → setup-KAuiIiVs.js} +1 -1
  118. package/client/dist/assets/{setup-zLEDnG7N.js → setup-OGX-oCfI.js} +1 -1
  119. package/client/dist/assets/{spending-T5GM7wpn.js → spending-HBSk-6jv.js} +1 -1
  120. package/client/dist/assets/{useDesktop-QogiN0zR.js → useDesktop-0unHDBJJ.js} +1 -1
  121. package/client/dist/assets/useRuntimeRuns-BN1rhyEm.js +1 -0
  122. package/client/dist/assets/{useSharedWebSocket-Dz-HI6De.js → useSharedWebSocket-BZMrX4jr.js} +2 -2
  123. package/client/dist/index.html +25 -25
  124. package/docs/agent-live-steering.md +16 -0
  125. package/docs/cli.md +7 -7
  126. package/docs/codex.md +2 -2
  127. package/docs/customizing.md +1 -1
  128. package/docs/gemini.md +1 -1
  129. package/docs/getting-started.md +1 -1
  130. package/docs/guide/de/integrations/7-local-engines.md +1 -1
  131. package/docs/guide/de/pipeline/1-rails-and-jobs.md +8 -6
  132. package/docs/guide/de/pipeline/2-the-job-detail-view.md +11 -2
  133. package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
  134. package/docs/guide/de/pipeline/5-the-loop-builder.md +24 -5
  135. package/docs/guide/en/integrations/7-local-engines.md +1 -1
  136. package/docs/guide/en/pipeline/1-rails-and-jobs.md +8 -6
  137. package/docs/guide/en/pipeline/2-the-job-detail-view.md +11 -2
  138. package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
  139. package/docs/guide/en/pipeline/5-the-loop-builder.md +34 -5
  140. package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +1 -1
  141. package/docs/guide/es/integrations/7-local-engines.md +1 -1
  142. package/docs/guide/es/pipeline/1-rails-and-jobs.md +8 -6
  143. package/docs/guide/es/pipeline/2-the-job-detail-view.md +11 -2
  144. package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
  145. package/docs/guide/es/pipeline/5-the-loop-builder.md +30 -5
  146. package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +1 -2
  147. package/docs/guide/fr/integrations/7-local-engines.md +1 -1
  148. package/docs/guide/fr/pipeline/1-rails-and-jobs.md +8 -6
  149. package/docs/guide/fr/pipeline/2-the-job-detail-view.md +11 -2
  150. package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
  151. package/docs/guide/fr/pipeline/5-the-loop-builder.md +24 -5
  152. package/docs/guide/it/integrations/7-local-engines.md +1 -1
  153. package/docs/guide/it/pipeline/1-rails-and-jobs.md +8 -6
  154. package/docs/guide/it/pipeline/2-the-job-detail-view.md +11 -2
  155. package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
  156. package/docs/guide/it/pipeline/5-the-loop-builder.md +24 -5
  157. package/docs/guide/ja/integrations/7-local-engines.md +1 -1
  158. package/docs/guide/ja/pipeline/1-rails-and-jobs.md +8 -6
  159. package/docs/guide/ja/pipeline/2-the-job-detail-view.md +11 -2
  160. package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
  161. package/docs/guide/ja/pipeline/5-the-loop-builder.md +24 -5
  162. package/docs/guide/pt/integrations/7-local-engines.md +1 -1
  163. package/docs/guide/pt/pipeline/1-rails-and-jobs.md +8 -6
  164. package/docs/guide/pt/pipeline/2-the-job-detail-view.md +11 -2
  165. package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
  166. package/docs/guide/pt/pipeline/5-the-loop-builder.md +24 -5
  167. package/docs/guide/zh/integrations/7-local-engines.md +1 -1
  168. package/docs/guide/zh/pipeline/1-rails-and-jobs.md +8 -6
  169. package/docs/guide/zh/pipeline/2-the-job-detail-view.md +11 -2
  170. package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
  171. package/docs/guide/zh/pipeline/5-the-loop-builder.md +24 -5
  172. package/docs/internals/api-reference.md +2 -2
  173. package/docs/internals/ci-performance.md +71 -0
  174. package/docs/internals/companion-rails-as-loops-contract.md +4 -3
  175. package/docs/internals/configuration.md +3 -3
  176. package/docs/internals/core-runtime-updates.md +3 -2
  177. package/docs/internals/interactive-jobs.md +2 -2
  178. package/docs/internals/loop-step-log-explorer.md +42 -0
  179. package/docs/internals/mission-rail-cards.md +1 -1
  180. package/docs/internals/operations-runbook.md +22 -0
  181. package/docs/internals/programmatic-agent-runtime.md +130 -7
  182. package/docs/internals/project-builder.md +35 -16
  183. package/docs/internals/source-map.md +48 -2
  184. package/docs/kimi.md +2 -2
  185. package/docs/local-providers.md +1 -1
  186. package/docs/running-pipelines.md +26 -18
  187. package/docs/tracking-cost.md +10 -1
  188. package/package.json +2 -1
  189. package/server/dist/core-compat.js +8 -3
  190. package/server/dist/core-execution.js +49 -3
  191. package/server/dist/db/migrations.js +101 -0
  192. package/server/dist/desktop-db.js +28 -0
  193. package/server/dist/desktop-router.js +2 -0
  194. package/server/dist/mcp/guide.js +6 -3
  195. package/server/dist/mcp/tools/jobs.js +14 -1
  196. package/server/dist/mcp/tools/loops.js +17 -8
  197. package/server/dist/mcp/tools/rails.js +3 -3
  198. package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +313 -9
  199. package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls-router.js +34 -1
  200. package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +203 -21
  201. package/server/dist/modules/agent-runtime/runtime/agent-runtime-effective-config.js +46 -1
  202. package/server/dist/modules/agent-runtime/runtime/agent-runtime-engines.js +10 -0
  203. package/server/dist/modules/agent-runtime/runtime/agent-runtime-loader.js +68 -3
  204. package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +16 -8
  205. package/server/dist/modules/agent-runtime/runtime/agent-runtime-package-gc.js +81 -0
  206. package/server/dist/modules/agent-runtime/runtime/agent-runtime-package-lock.js +37 -0
  207. package/server/dist/modules/agent-runtime/runtime/agent-runtime-package.js +30 -24
  208. package/server/dist/modules/agent-runtime/runtime/agent-runtime-retention-host.js +87 -0
  209. package/server/dist/modules/agent-runtime/runtime/agent-runtime-retention-quarantine.js +231 -0
  210. package/server/dist/modules/agent-runtime/runtime/agent-runtime-retention-records.js +32 -0
  211. package/server/dist/modules/agent-runtime/runtime/agent-runtime-retention.js +102 -0
  212. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +12 -7
  213. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings.js +57 -13
  214. package/server/dist/modules/agents/runtime/agent-catalog.js +32 -0
  215. package/server/dist/modules/agents/runtime/agent-refine-manager.js +12 -0
  216. package/server/dist/modules/agents/runtime/agent-role-descriptor.js +64 -0
  217. package/server/dist/modules/agents/runtime/profiles-router.js +26 -34
  218. package/server/dist/modules/builder/runtime/milestone-chain.js +121 -73
  219. package/server/dist/modules/delivery/runtime/definition-fork.js +158 -0
  220. package/server/dist/modules/delivery/runtime/delivery-evidence.js +56 -10
  221. package/server/dist/modules/delivery/runtime/isolated-settlement-reconstruction.js +99 -0
  222. package/server/dist/modules/delivery/runtime/isolated-settlement-store.js +53 -0
  223. package/server/dist/modules/delivery/runtime/multi-repo-execution-store.js +3 -1
  224. package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +388 -203
  225. package/server/dist/modules/delivery/runtime/rail-launch-parser.js +3 -2
  226. package/server/dist/modules/delivery/runtime/rail-pr-store.js +6 -1
  227. package/server/dist/modules/delivery/runtime/rails-router.js +66 -10
  228. package/server/dist/modules/execution/runtime/queue-manager.js +11 -2
  229. package/server/dist/modules/loops/runtime/builtin-loops.js +70 -0
  230. package/server/dist/modules/loops/runtime/definition-cancellation.js +31 -0
  231. package/server/dist/modules/loops/runtime/legacy-launch-telemetry.js +78 -0
  232. package/server/dist/modules/loops/runtime/loop-command-catalog.js +13 -12
  233. package/server/dist/modules/loops/runtime/loop-compat.js +219 -0
  234. package/server/dist/modules/loops/runtime/loop-core-factory.js +42 -0
  235. package/server/dist/modules/loops/runtime/loop-definition-controls.js +48 -0
  236. package/server/dist/modules/loops/runtime/loop-definition-events.js +145 -0
  237. package/server/dist/modules/loops/runtime/loop-definition-recovery.js +106 -0
  238. package/server/dist/modules/loops/runtime/loop-definition-run.js +36 -0
  239. package/server/dist/modules/loops/runtime/loop-definition.js +246 -0
  240. package/server/dist/modules/loops/runtime/loop-effect.js +10 -1
  241. package/server/dist/modules/loops/runtime/loop-executors.js +63 -3
  242. package/server/dist/modules/loops/runtime/loop-factory.js +35 -15
  243. package/server/dist/modules/loops/runtime/loop-graph.js +84 -8
  244. package/server/dist/modules/loops/runtime/loop-migration.js +36 -0
  245. package/server/dist/modules/loops/runtime/loop-preview.js +10 -0
  246. package/server/dist/modules/loops/runtime/loop-run-manager.js +206 -13
  247. package/server/dist/modules/loops/runtime/loop-runs-store.js +271 -7
  248. package/server/dist/modules/loops/runtime/loop-templates.js +205 -45
  249. package/server/dist/modules/loops/runtime/loops-router.js +246 -29
  250. package/server/dist/modules/loops/runtime/loops-store.js +140 -20
  251. package/server/dist/modules/missions/runtime/agent-operator-prompt.js +14 -11
  252. package/server/dist/modules/specs/runtime/spec-addenda.js +28 -0
  253. package/server/dist/project-registry.js +87 -51
  254. package/server/dist/project-router-jobs.js +17 -6
  255. package/server/dist/project-router-loop-runs.js +200 -0
  256. package/server/dist/project-router-spending.js +17 -0
  257. package/server/dist/project-router.js +8 -6
  258. package/server/dist/schemas/agent-runtime.schema.json +93 -1
  259. package/server/dist/schemas/workflow-definition.schema.json +312 -0
  260. package/server/dist/vitest-setup.js +22 -0
  261. package/server/dist/worktree-overlay.js +1 -1
  262. package/client/dist/assets/AgentsPage-DfHWgP_x.js +0 -87
  263. package/client/dist/assets/DesktopAnalyticsPage-tc0p4jJW.js +0 -1
  264. package/client/dist/assets/InteractiveJobComposer-DFPpdg2D.js +0 -19
  265. package/client/dist/assets/JobDetailModal-BdOv-l-M.js +0 -1
  266. package/client/dist/assets/LoopBuilderPage-BemvUOxy.js +0 -7
  267. package/client/dist/assets/LoopPreviewModal-C6hNAeYN.js +0 -1
  268. package/client/dist/assets/LoopsPage-BZr0quvh.js +0 -1
  269. package/client/dist/assets/TemplatePreviewModal-Cejcquah.js +0 -1
  270. package/client/dist/assets/agentRuntime-BUimiX__.js +0 -1
  271. package/client/dist/assets/agentRuntime-BcN97sAB.js +0 -1
  272. package/client/dist/assets/agentRuntime-Ckyg-ahT.js +0 -1
  273. package/client/dist/assets/agentRuntime-DJCwyX4t.js +0 -1
  274. package/client/dist/assets/agentRuntime-DVzPJOl0.js +0 -1
  275. package/client/dist/assets/agentRuntime-V9AZTG3c.js +0 -1
  276. package/client/dist/assets/agentRuntime-bAAjw1vw.js +0 -1
  277. package/client/dist/assets/agentRuntime-v4qKAYH-.js +0 -1
  278. package/client/dist/assets/agentstudio-BNUth0uj.js +0 -1
  279. package/client/dist/assets/agentstudio-BNdB5hkr.js +0 -1
  280. package/client/dist/assets/agentstudio-C7-bt8FO.js +0 -1
  281. package/client/dist/assets/agentstudio-C8uNchpV.js +0 -1
  282. package/client/dist/assets/agentstudio-CKabyMlg.js +0 -1
  283. package/client/dist/assets/agentstudio-CN2pokQu.js +0 -1
  284. package/client/dist/assets/agentstudio-y2dVDXeM.js +0 -1
  285. package/client/dist/assets/analytics-BlypLLR6.js +0 -1
  286. package/client/dist/assets/builder-765NeYTp.js +0 -1
  287. package/client/dist/assets/builder-8MG3V6ea.js +0 -1
  288. package/client/dist/assets/builder-B-1UBs5K.js +0 -1
  289. package/client/dist/assets/builder-BTiGnPT0.js +0 -1
  290. package/client/dist/assets/builder-Cx9Rz-7u.js +0 -1
  291. package/client/dist/assets/builder-DKFMELBl.js +0 -1
  292. package/client/dist/assets/builder-OcmKrC0h.js +0 -1
  293. package/client/dist/assets/builder-P9qVBXFZ.js +0 -1
  294. package/client/dist/assets/common-B5AZNYMH.js +0 -1
  295. package/client/dist/assets/common-BFZ0c_vN.js +0 -1
  296. package/client/dist/assets/common-BttQx3z4.js +0 -1
  297. package/client/dist/assets/common-CM65k_-e.js +0 -1
  298. package/client/dist/assets/common-D4mvFFlu.js +0 -1
  299. package/client/dist/assets/common-TZ9Ny96S.js +0 -1
  300. package/client/dist/assets/common-nFpSF4GC.js +0 -1
  301. package/client/dist/assets/dashboard-B9uWNGO2.js +0 -1
  302. package/client/dist/assets/dashboard-BIwmO9wc.js +0 -1
  303. package/client/dist/assets/dashboard-BV4vOZkR.js +0 -1
  304. package/client/dist/assets/dashboard-Bf6MPVsM.js +0 -1
  305. package/client/dist/assets/dashboard-C8klWVvZ.js +0 -1
  306. package/client/dist/assets/dashboard-D1ORhPF0.js +0 -1
  307. package/client/dist/assets/dashboard-DSubvs9x.js +0 -1
  308. package/client/dist/assets/dashboard-px_vlRx_.js +0 -1
  309. package/client/dist/assets/index-C51x61Bz.css +0 -2
  310. package/client/dist/assets/loops-B7YpGizO.js +0 -1
  311. package/client/dist/assets/loops-BomD2J-h.js +0 -1
  312. package/client/dist/assets/loops-BrQHSQw3.js +0 -1
  313. package/client/dist/assets/loops-BvBwvTPA.js +0 -1
  314. package/client/dist/assets/loops-CODk6Slz.js +0 -1
  315. package/client/dist/assets/loops-DC6k-Ym-.js +0 -1
  316. package/client/dist/assets/loops-DSEg8-uY.js +0 -1
  317. package/client/dist/assets/loops-DhCoXD_v.js +0 -1
  318. package/client/dist/assets/settings-BsehKpty.js +0 -1
  319. package/client/dist/assets/settings-CQWob3SB.js +0 -1
  320. package/client/dist/assets/settings-CgCl0hzy.js +0 -1
  321. package/client/dist/assets/settings-DLRLd22L.js +0 -1
  322. package/client/dist/assets/settings-Dn5prAFl.js +0 -1
  323. package/client/dist/assets/settings-HZSu-K4l.js +0 -1
  324. package/client/dist/assets/settings-p4OVIyRh.js +0 -1
  325. package/client/dist/assets/settings-rddaldUp.js +0 -1
  326. package/client/dist/assets/useRuntimeRuns-Dqmz9fS9.js +0 -1
  327. package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  328. package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +0 -126
  329. package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +0 -114
  330. package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  331. package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  332. package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  333. package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  334. package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  335. package/server/dist/modules/loops/runtime/loop-templates-ported.js +0 -675
  336. /package/client/dist/assets/{LoopBuilderPage-DtxX27Jz.css → loop-layout-DtxX27Jz.css} +0 -0
@@ -1,675 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PORTED_TEMPLATES = void 0;
4
- exports.PORTED_TEMPLATES = [
5
- {
6
- "id": "autoloop-tdd",
7
- "name": "Autoloop TDD",
8
- "description": "A strict red-green-refactor cycle for {{spec.title}}: pin down each behavior with a failing test first, write only enough real code to turn it green, then tidy up — repeating across every behavior until the spec is fully implemented.",
9
- "category": "Testing",
10
- "tags": [
11
- "tdd",
12
- "testing",
13
- "red-green-refactor"
14
- ],
15
- "loopBack": "first",
16
- "maxIterations": 20,
17
- "steps": [
18
- "TDD RED. Compare {{spec.description}} against the CURRENT code and list the spec behaviors NOT yet implemented. Pick the SINGLE next unimplemented behavior and write ONE small, focused failing test for just that behavior; run it and confirm it fails for the intended reason (the behavior is genuinely missing). Write NO production code in this step. If every behavior in the spec is already implemented and covered, change nothing and say the spec is fully covered.\n\n{{const:ONE_PER_PASS}}\n\n{{const:GUARDRAILS}}",
19
- "TDD GREEN. Write the SMALLEST real production code that makes the one failing test from the previous step pass — actual working behavior, never a stub or hardcoded return. Then run the project's full test suite and fix any regression you caused.\n\n{{const:ONE_PER_PASS}}\n\n{{const:GUARDRAILS}}",
20
- "TDD REFACTOR. Refactor ONLY the code and test you just touched, with no behavior change (keep the suite green). Then re-read {{spec.description}} and assess what the spec still needs.\n\n{{const:REMAINING_RULE}}\n\n{{const:ONE_PER_PASS}}\n\n{{const:GUARDRAILS}}"
21
- ],
22
- "goal": "Every behavior the spec describes is implemented and covered by a test. The latest step ends with a `REMAINING:` line — STOP only when it reports `REMAINING: none` and that is consistent with the full spec; if any behavior the spec describes is still unbuilt, CONTINUE. A green suite alone is not enough to stop.",
23
- "timeoutMinutes": 120
24
- },
25
- {
26
- "id": "e2e-until-green",
27
- "name": "E2E Until Green",
28
- "description": "Run the end-to-end suite for {{spec.title}}, diagnose each failing user-flow, fix the underlying UI or integration defect, and keep cycling until every E2E spec passes.",
29
- "category": "Testing",
30
- "tags": [
31
- "e2e",
32
- "playwright",
33
- "testing"
34
- ],
35
- "steps": [
36
- "Run the project's end-to-end suite and read the report carefully. For the first failing spec, trace it to a single root cause — a broken selector, a missing wait/assertion, a real integration bug, or a stale fixture — and describe what you found before touching anything.",
37
- "Apply the smallest fix that resolves that root cause. Favour resilient selectors and realistic waits over arbitrary sleeps, and fix the application defect rather than weakening the assertion. Then re-run the end-to-end suite to confirm that spec is green and nothing else regressed. {{const:GUARDRAILS}}\n\nEnd your reply with a single final line — exactly `VERIFICATION: PASS` when no critical findings remain, or `VERIFICATION: FAIL — <short reason>` otherwise. The loop reads this verdict to decide whether to stop."
38
- ],
39
- "goal": "The end-to-end suite runs to completion with no failing specs — it reports {{const:VERIFICATION_PASS}}.",
40
- "maxIterations": 10,
41
- "loopBack": "last"
42
- },
43
- {
44
- "id": "flaky-test-triage",
45
- "name": "Flaky Test Triage",
46
- "description": "Re-run the failing tests around {{spec.title}} several times to separate genuine regressions from intermittent flakes, then repair the real breaks and stabilize or document the flaky ones.",
47
- "category": "Testing",
48
- "tags": [
49
- "testing",
50
- "flaky",
51
- "triage"
52
- ],
53
- "steps": [
54
- "Run the failing test file or suite three to five times in a row. Record, per test, whether it failed every run or only some runs — this pass/fail fingerprint is what tells flaky apart from broken.",
55
- "Classify each failing test using that fingerprint: FAILS-ALWAYS is a real regression; FAILS-SOMETIMES is flaky. For the flaky ones, note the likely trigger (timing, test ordering, shared state, or environment dependence).",
56
- "Repair only the confirmed real regressions, with minimal changes that fix the actual defect — never relax an assertion to hide a true failure. For each flaky test, apply a real stabilization (isolate shared state, remove timing races, mock nondeterministic inputs) or, if it cannot be stabilized now, document the flake with its trigger and a follow-up note. {{const:GUARDRAILS}}",
57
- "Re-run the suite multiple times again to prove the real regressions are gone and the flakiness is reduced or accounted for."
58
- ],
59
- "goal": "Every failing test is classified as flaky or real; all real regressions are fixed and the flaky ones are stabilized or explicitly documented.",
60
- "maxIterations": 8,
61
- "loopBack": "verify"
62
- },
63
- {
64
- "id": "independent-verifier-pass",
65
- "name": "Independent Verifier Pass",
66
- "description": "An adversarial verification of {{spec.title}}: re-run build, lint, and tests from scratch, trust only the raw command output (not any prior 'it works' claim), and surface or fix every gap.",
67
- "category": "Testing",
68
- "tags": [
69
- "verification",
70
- "testing",
71
- "adversarial"
72
- ],
73
- "steps": [
74
- "Act as an independent verifier with no knowledge of how the change was implemented or why it was claimed done. Run the build gate. {{const:GUARDRAILS}}",
75
- "Run the lint gate as the same skeptical verifier. {{const:GUARDRAILS}}",
76
- "Run the test gate. Now compile a single report of EVERY failing check across build, lint, and tests — each with the file path and a short error excerpt. Only the actual command output counts as evidence; ignore any earlier self-reported success. {{const:GUARDRAILS}}",
77
- "If any check failed, fix the underlying cause and re-run the gates; if you cannot resolve a failure, hand back a concise, evidence-backed failure report so the implementer can continue. {{const:GUARDRAILS}}"
78
- ],
79
- "goal": "Build, lint, and tests each pass under independent re-verification — all three report {{const:VERIFICATION_PASS}} with no gaps remaining.",
80
- "maxIterations": 8,
81
- "loopBack": "verify"
82
- },
83
- {
84
- "id": "post-edit-test-guard",
85
- "name": "Post-Edit Test Guard",
86
- "description": "After each batch of edits for {{spec.title}}, immediately run the narrowest set of tests touching the changed files — catching regressions the moment they appear instead of at the end.",
87
- "category": "Testing",
88
- "tags": [
89
- "hooks",
90
- "testing",
91
- "regression"
92
- ],
93
- "steps": [
94
- "List the source files you changed in the most recent batch of edits, and map each to the tests most directly exercising it. Keep the set as small as possible so the check stays fast.",
95
- "Run the smallest relevant slice of the test suite covering those changed files. If anything regressed, stop and fix it before making any further edits — do not pile new changes on top of a red test. {{const:GUARDRAILS}}\n\nEnd your reply with a single final line — exactly `VERIFICATION: PASS` when no critical findings remain, or `VERIFICATION: FAIL — <short reason>` otherwise. The loop reads this verdict to decide whether to stop."
96
- ],
97
- "goal": "The tests directly related to the just-edited files pass — they report {{const:VERIFICATION_PASS}} — before any further changes are made.",
98
- "maxIterations": 12,
99
- "loopBack": "last"
100
- },
101
- {
102
- "id": "post-merge-regression-guard",
103
- "name": "Post-Merge Regression Guard",
104
- "description": "Right after a merge or rebase brings other people's work into {{spec.title}}, run the fast smoke suite to catch integration breakage immediately — before any new feature work starts on top of it.",
105
- "category": "Testing",
106
- "tags": [
107
- "hooks",
108
- "testing",
109
- "git",
110
- "merge"
111
- ],
112
- "steps": [
113
- "Confirm a merge or rebase just completed. Read the diff stat for the merged range and note which areas of the codebase the incoming changes touched, so you know where integration regressions are most likely.",
114
- "Run the fast smoke suite that exercises the critical paths. If anything fails, treat it as an integration regression introduced by the merge and fix it before starting any new feature work. {{const:GUARDRAILS}}\n\nEnd your reply with a single final line — exactly `VERIFICATION: PASS` when no critical findings remain, or `VERIFICATION: FAIL — <short reason>` otherwise. The loop reads this verdict to decide whether to stop."
115
- ],
116
- "goal": "The smoke suite passes after the merge or rebase — it reports {{const:VERIFICATION_PASS}} — so no integration regression is carried forward.",
117
- "maxIterations": 12,
118
- "loopBack": "last"
119
- },
120
- {
121
- "id": "pre-commit-guard",
122
- "name": "Pre-Commit Guard",
123
- "description": "A safety gate for {{spec.title}} that intercepts every commit: run the test suite first and refuse to commit while it is red, so broken code never enters history.",
124
- "category": "Testing",
125
- "tags": [
126
- "hooks",
127
- "testing",
128
- "git",
129
- "pre-commit"
130
- ],
131
- "steps": [
132
- "Detect that a commit is about to happen and pause before it runs. Identify what is staged so you know the change being committed.",
133
- "Run the full test suite as the precondition for committing. {{const:GUARDRAILS}}",
134
- "If the suite is red, fix the failures and re-run the gate — never weaken or skip a test to get the commit through. Only let the commit proceed once the suite is green. {{const:GUARDRAILS}}\n\nEnd your reply with a single final line — exactly `VERIFICATION: PASS` when no critical findings remain, or `VERIFICATION: FAIL — <short reason>` otherwise. The loop reads this verdict to decide whether to stop."
135
- ],
136
- "goal": "The test suite reports {{const:VERIFICATION_PASS}} before the commit is allowed to proceed, so no commit lands on a red suite.",
137
- "maxIterations": 8,
138
- "loopBack": "last"
139
- },
140
- {
141
- "id": "visual-regression-until-match",
142
- "name": "Visual Regression Until Match",
143
- "description": "Capture visual snapshots of the changed UI, hunt down every unintended pixel diff, and self-correct until the visual suite is green with only deliberate design changes approved.",
144
- "category": "Testing",
145
- "tags": [
146
- "testing",
147
- "visual",
148
- "playwright",
149
- "ui"
150
- ],
151
- "steps": [
152
- "Render the UI surface affected by {{spec.title}} ({{spec.ids}}) and capture its visual snapshots so they can be compared against the approved baselines. Enumerate every screenshot whose rendering drifts from baseline, naming the component or route for each diff so the next pass knows exactly what changed.",
153
- "For each diff: if it is an unintended regression, correct the CSS/markup to match the baseline; if it is a deliberate change called for by {{spec.description}}, re-approve that single baseline only after eyeballing the diff report to confirm the new look is correct. Never bulk-approve to silence the suite. {{const:GUARDRAILS}}"
154
- ],
155
- "goal": "The visual regression gate reports {{const:VERIFICATION_PASS}} — every snapshot matches an approved baseline and only intentional design changes were accepted.",
156
- "maxIterations": 8,
157
- "loopBack": "verify"
158
- },
159
- {
160
- "id": "format-until-clean",
161
- "name": "Format Until Clean",
162
- "description": "Apply the project formatter, mop up the handful of style problems it cannot auto-fix, and keep going until a fresh format run leaves the working tree untouched.",
163
- "category": "Testing",
164
- "tags": [
165
- "format",
166
- "prettier",
167
- "quality"
168
- ],
169
- "steps": [
170
- "Inspect the most recent changes for formatting that the auto-formatter will not resolve on its own — awkward line breaks, import ordering it leaves alone, or stylistic choices that clash with the surrounding code — and tighten them by hand so the next formatter run has nothing left to rewrite. {{const:GUARDRAILS}}",
171
- "{{cmd:format}}"
172
- ],
173
- "goal": "The formatter gate reports {{const:VERIFICATION_PASS}} — running it produces no further changes and the working tree is stable.",
174
- "maxIterations": 6,
175
- "loopBack": "last"
176
- },
177
- {
178
- "id": "lint-typecheck-fix",
179
- "name": "Lint and Typecheck Fix",
180
- "description": "Run the linter and the type checker, resolve each reported problem with the smallest possible edit, and loop until both gates come back completely clean.",
181
- "category": "Testing",
182
- "tags": [
183
- "lint",
184
- "typescript",
185
- "quality"
186
- ],
187
- "steps": [
188
- "{{cmd:lint}}",
189
- "{{cmd:typecheck}}"
190
- ],
191
- "goal": "Both the lint and typecheck gates report {{const:VERIFICATION_PASS}} — no lint warnings and no type errors remain, with no rules disabled to get there.",
192
- "maxIterations": 8,
193
- "loopBack": "last"
194
- },
195
- {
196
- "id": "a11y-audit-until-clean",
197
- "name": "A11y Audit Until Clean",
198
- "description": "Run the automated accessibility checks over the changed screens, fix the violations one category at a time, and repeat until the audit comes back with zero issues.",
199
- "category": "Quality",
200
- "tags": [
201
- "a11y",
202
- "quality",
203
- "frontend"
204
- ],
205
- "steps": [
206
- "Run the accessibility audit across the UI touched by {{spec.title}} ({{spec.ids}}) and list every violation with its offending selector, grouped by type. Then fix them, prioritizing keyboard-navigation and screen-reader blockers, and always reaching for semantic HTML before falling back to ARIA attributes. {{const:GUARDRAILS}}",
207
- "{{cmd:verify}}"
208
- ],
209
- "goal": "The accessibility audit reports {{const:VERIFICATION_PASS}} — zero serious violations remain on the changed UI.",
210
- "maxIterations": 8,
211
- "loopBack": "last"
212
- },
213
- {
214
- "id": "de-sloppify-pass",
215
- "name": "De-Sloppify Pass",
216
- "description": "After the feature lands, sweep the diff for leftover slop — debug output, dead branches, sloppy names, bloated functions — clean it up, and prove the cleanup did not break anything.",
217
- "category": "Review",
218
- "tags": [
219
- "review",
220
- "quality",
221
- "cleanup"
222
- ],
223
- "steps": [
224
- "Comb through the changes made for {{spec.title}} ({{spec.ids}}) and flag every bit of slop: stray debug logs, commented-out code, throwaway TODO hacks, functions that grew too long, and names that read inconsistently against the rest of the file.",
225
- "Tidy each flagged item with the smallest edit that fixes it — delete the dead code, pull oversized blocks into well-named helpers, sharpen the types, and align the style with the surrounding code so the diff reads as if it were written cleanly the first time. {{const:GUARDRAILS}}"
226
- ],
227
- "goal": "No slop remains in the changed code and the project's lint and test gates both report {{const:VERIFICATION_PASS}}, confirming the cleanup changed nothing it should not have.",
228
- "maxIterations": 4,
229
- "loopBack": "verify"
230
- },
231
- {
232
- "id": "fix-ci-until-green",
233
- "name": "Fix CI Until Green",
234
- "description": "Pull the most recent red CI run on this branch, reproduce the breakage on your machine, patch the real cause, push, and keep cycling until every check reports success.",
235
- "category": "CI",
236
- "tags": [
237
- "ci",
238
- "github",
239
- "fix"
240
- ],
241
- "steps": [
242
- "Inspect the latest CI run for the current branch with {{cmd:ci-status}}. If it is green, you are done. Otherwise pull the logs for every failing job and name the exact step (tests, lint, type check, build) that broke and the first error it reports.",
243
- "Reproduce the red step locally by running the matching project gate — {{cmd:test}}, {{cmd:lint}}, {{cmd:typecheck}}, or {{cmd:build}} — and confirm you see the same failure the runner saw before changing anything.",
244
- "Repair the underlying cause with the smallest possible diff (no unrelated refactors), then have the agent fix-and-self-verify the affected gate via {{cmd:fix}} so the same gate now emits {{const:VERIFICATION_PASS}}. {{const:GUARDRAILS}}",
245
- "Commit and push the fix with {{cmd:push}}, then re-poll the pipeline with {{cmd:ci-status}}. If the newest run is still red, feed the fresh logs back into the next pass; repeat until it is green."
246
- ],
247
- "goal": "The most recent CI run on the current branch concludes successfully with every required check green.",
248
- "maxIterations": 15,
249
- "loopBack": "first"
250
- },
251
- {
252
- "id": "pr-babysitter",
253
- "name": "PR Babysitter",
254
- "description": "On a recurring interval, sweep the open pull requests you are watching and keep each one mergeable: revive red CI, rebase the ones that have fallen behind the base branch, and ping the stale ones — escalating anything a human has to decide.",
255
- "category": "CI",
256
- "tags": [
257
- "pr",
258
- "github",
259
- "ci",
260
- "babysitter"
261
- ],
262
- "steps": [
263
- "Enumerate the open PRs you are babysitting and read each one's current health with {{cmd:ci-status}}: mergeable state, check rollup, and time since last activity. Drop drafts and any PR whose only blocker is a product decision a human owns.",
264
- "Walk each watched PR and apply the lightest unblocking action: if its checks are red, run one {{cmd:fix}} pass to repair the cause and re-confirm the gate hits {{const:VERIFICATION_PASS}}; if it trails the base branch, rebase it; if reviewers have gone quiet, leave a concise status nudge with {{cmd:pr}}. {{const:GUARDRAILS}}",
265
- "Re-check the watched set with {{cmd:ci-status}} and write a one-line verdict per PR. Stop touching any PR that hit a merge conflict needing a product call or that failed the identical way twice — flag it as a human-escalation blocker instead of retrying."
266
- ],
267
- "goal": "Every watched pull request is green and current with its base branch, or has been clearly flagged as a blocker that needs a human decision.",
268
- "maxIterations": 20,
269
- "loopBack": "last"
270
- },
271
- {
272
- "id": "pr-watch-loop",
273
- "name": "PR Watch Loop",
274
- "description": "Poll the pull requests on your watch list at a steady cadence, summarize each one's CI and review health, and either knock out trivial blockers or surface what needs an owner.",
275
- "category": "CI",
276
- "tags": [
277
- "ci",
278
- "pr",
279
- "watch"
280
- ],
281
- "steps": [
282
- "List the open PRs on your watch list and capture, per PR, its check rollup, review state, and how long since the last activity using {{cmd:ci-status}}.",
283
- "For each watched PR, drill into the specifics: which checks are failing, which review threads are still unresolved, and whether it has a merge conflict against its base branch.",
284
- "Produce a short health report covering every watched PR. Where a failure is trivial, run one {{cmd:fix}} pass and re-confirm the gate reports {{const:VERIFICATION_PASS}}; otherwise leave a status note for the author via {{cmd:pr}} naming the blocker. {{const:GUARDRAILS}}"
285
- ],
286
- "goal": "A current health report has been delivered for every watched pull request, with trivial CI failures fixed and real blockers attributed to an owner.",
287
- "maxIterations": 18,
288
- "loopBack": "last"
289
- },
290
- {
291
- "id": "pr-self-review",
292
- "name": "PR Self-Review",
293
- "description": "Critique your own working diff the way a demanding senior reviewer would, resolve what you find, and re-review until a clean pass turns up nothing critical — before the PR ever leaves your hands.",
294
- "category": "Review",
295
- "tags": [
296
- "review",
297
- "pr",
298
- "quality"
299
- ],
300
- "steps": [
301
- "Read the full diff on the current branch as if you were reviewing someone else's PR. Enumerate every concern: latent bugs, unhandled edge cases, weak or misleading names, and behavior that lacks test coverage.",
302
- "Resolve the highest-severity findings from that critique, keeping each change tightly scoped to the issue it fixes and nothing more. {{const:GUARDRAILS}}",
303
- "Run an independent verification sweep over the touched code with {{cmd:review}}, then re-read the updated diff to confirm the prior findings are gone and no critical issue remains; surface anything still open for the next pass. {{const:GUARDRAILS}}\n\nEnd your reply with a single final line — exactly `VERIFICATION: PASS` when no critical findings remain, or `VERIFICATION: FAIL — <short reason>` otherwise. The loop reads this verdict to decide whether to stop."
304
- ],
305
- "goal": "A fresh self-review pass over the current diff surfaces no critical findings and the automated review reports {{const:VERIFICATION_PASS}}.",
306
- "maxIterations": 4,
307
- "loopBack": "last"
308
- },
309
- {
310
- "id": "spec-first-ship",
311
- "name": "Spec-First Ship",
312
- "description": "Drive a written requirements checklist to completion one item at a time — each pass implements a single unchecked requirement, proves it, and ticks it off — so the spec is the contract for done.",
313
- "category": "Planning",
314
- "tags": [
315
- "planning",
316
- "spec",
317
- "requirements"
318
- ],
319
- "steps": [
320
- "Read the spec for {{spec.title}} ({{spec.ids}}) and its requirement checklist. Select the single first still-unchecked requirement and restate its acceptance criteria; do not begin more than one requirement in a pass.\n\n{{const:ONE_PER_PASS}}",
321
- "Implement that one requirement against its acceptance criteria, adding the tests it needs as you go. Mark the checklist item done only once it is built. {{const:GUARDRAILS}}",
322
- "Verify just-built requirement against the spec by running the project's test gate with {{cmd:test}} plus any manual checks the requirement calls for; confirm it reports {{const:VERIFICATION_PASS}} before ticking the box and moving on to the next unchecked item. Finally, report how many checklist requirements are still unchecked; state 'all requirements complete' only when none remain."
323
- ],
324
- "goal": "Every requirement in the spec checklist for {{spec.title}} is implemented, verified to {{const:VERIFICATION_PASS}}, and checked off.",
325
- "maxIterations": 12,
326
- "loopBack": "first",
327
- "timeoutMinutes": 45
328
- },
329
- {
330
- "id": "dependency-audit-weekly",
331
- "name": "Weekly Dependency Audit",
332
- "description": "Each week, take stock of which packages have fallen behind, sort them into safe-to-bump versus risky, and hand back a clear upgrade plan you can act on.",
333
- "category": "Maintenance",
334
- "tags": [
335
- "dependencies",
336
- "maintenance",
337
- "security"
338
- ],
339
- "steps": [
340
- "Survey the project's dependency manifest for packages that are behind their latest published release. Group what you find into three buckets — patch-level, minor-level, and major-level bumps — and note the current vs. available version for each. This is a read-only inventory; do not change any files.",
341
- "Turn the inventory into an actionable upgrade plan. For each candidate, judge how safe the bump is, call out any that ship breaking changes or will require code edits, and rank them so the lowest-risk wins come first. Summarize the recommendation so a developer can decide what to pull in next."
342
- ],
343
- "goal": "A current dependency audit summary has been produced this pass, grouping every outdated package by upgrade level with a prioritized, risk-annotated upgrade recommendation.",
344
- "maxIterations": 15,
345
- "loopBack": "last"
346
- },
347
- {
348
- "id": "dependency-upgrade-one-by-one",
349
- "name": "Upgrade Dependencies One at a Time",
350
- "description": "Bump exactly one outdated package per pass, repair whatever the bump breaks, prove the project still works, and commit — far safer than upgrading everything at once.",
351
- "category": "Maintenance",
352
- "tags": [
353
- "dependencies",
354
- "maintenance",
355
- "upgrades"
356
- ],
357
- "steps": [
358
- "Scan the dependency manifest for outdated packages and choose a single highest-impact one to upgrade this pass — exactly one, no more. Record its current and target version, then apply the version bump. Update any code the new version forces you to change: renamed APIs, removed options, changed types, adjusted signatures. {{const:GUARDRAILS}}\n\n{{const:ONE_PER_PASS}}",
359
- "{{cmd:typecheck}}",
360
- "{{cmd:test}}",
361
- "Once the project is green, commit just this single dependency bump with a clear conventional message that names the package and the version it moved to (for example, chore(deps): bump <package> to <version>). Then report which package was upgraded and whether outdated packages still remain."
362
- ],
363
- "goal": "This pass upgraded exactly one outdated package, the typecheck and test gates report {{const:VERIFICATION_PASS}}, the bump is committed on its own, and either no meaningful outdated packages remain or the user has chosen to stop.",
364
- "maxIterations": 12,
365
- "loopBack": "first",
366
- "timeoutMinutes": 45
367
- },
368
- {
369
- "id": "knip-until-clean",
370
- "name": "Prune Dead Code Until Clean",
371
- "description": "Hunt down unreferenced exports, orphaned files, and dependencies nobody imports, remove them safely, and keep going until the dead-code scanner has nothing left to report.",
372
- "category": "Maintenance",
373
- "tags": [
374
- "maintenance",
375
- "dead-code",
376
- "deps"
377
- ],
378
- "steps": [
379
- "Run the project's dead-code / unused-dependency scanner and read its report carefully. Sort every finding into three groups: unreferenced exports, files nothing imports, and dependencies declared but never used. For each item decide whether it is truly dead or a legitimate false positive (entry points, dynamically loaded modules, type-only or plugin-resolved imports).",
380
- "Delete the findings you confirmed are genuinely dead, keeping each change minimal and self-contained. For any false positive, add a scanner ignore entry annotated with a one-line reason rather than deleting code that is actually in use. {{const:GUARDRAILS}}",
381
- "{{cmd:test}}"
382
- ],
383
- "goal": "The dead-code scanner reports no remaining unused files, exports, or dependencies, every removal was a true positive, and the test gate reports {{const:VERIFICATION_PASS}}.",
384
- "maxIterations": 15,
385
- "loopBack": "last"
386
- },
387
- {
388
- "id": "docs-sync-after-edits",
389
- "name": "Sync Docs to Code Changes",
390
- "description": "After a round of code edits, track down every doc the changes touched — README, API reference, inline comments — and bring them back in line with how the code actually behaves now.",
391
- "category": "Maintenance",
392
- "tags": [
393
- "docs",
394
- "maintenance",
395
- "sync"
396
- ],
397
- "steps": [
398
- "Inspect the current diff and build a list of everything user- or developer-facing that changed: public function and API signatures, configuration options, environment variables, default behaviors, and CLI flags. This list is the source of truth for what documentation must reflect.",
399
- "Search the README, the docs directory, and inline code comments for any mention of the behaviors you listed. Flag every section that now describes something the code no longer does, and note any newly added surface that is documented nowhere.",
400
- "Bring the affected documentation back into agreement with the code: correct stale descriptions, refresh examples so they actually run, document the new surface, and delete sections describing removed behavior. Keep wording consistent with the existing docs voice. {{const:GUARDRAILS}}",
401
- "{{cmd:docs-sync}}"
402
- ],
403
- "goal": "Every piece of documentation touched by the diff has been updated to match the current code, the docs-sync gate reports {{const:VERIFICATION_PASS}}, and no contradiction remains between the docs and the changed behavior.",
404
- "maxIterations": 8,
405
- "loopBack": "verify"
406
- },
407
- {
408
- "id": "security-audit-weekly",
409
- "name": "Weekly Security Audit",
410
- "description": "Run a weekly vulnerability scan over the dependency tree, triage what turns up by severity and real-world exposure, and hand back a prioritized remediation plan.",
411
- "category": "Maintenance",
412
- "tags": [
413
- "security",
414
- "npm",
415
- "audit",
416
- "maintenance"
417
- ],
418
- "steps": [
419
- "{{cmd:audit}}",
420
- "Triage the advisories the scan surfaced. Group them by severity (critical, high, moderate, low) and by whether each is reachable in production code or confined to dev-only tooling. Note which findings are directly exploitable in this project's usage versus theoretical.",
421
- "Draft a remediation plan that maps each meaningful finding to its safest fix — an automatic audit fix, a targeted dependency override, or a direct version bump — and flag any fix that carries a breaking change. Order the plan so the highest-severity, production-exposed issues are addressed first."
422
- ],
423
- "goal": "A current weekly security audit summary has been delivered this pass, with every finding triaged by severity and exposure and matched to a prioritized, safety-annotated remediation plan.",
424
- "maxIterations": 15,
425
- "loopBack": "last"
426
- },
427
- {
428
- "id": "npm-audit-fix-loop",
429
- "name": "Patch Vulnerabilities One at a Time",
430
- "description": "Clear high and critical dependency advisories deliberately — one fix per pass, each verified against the test suite — instead of a blind force-fix that can quietly break the build.",
431
- "category": "Security",
432
- "tags": [
433
- "security",
434
- "npm",
435
- "audit"
436
- ],
437
- "steps": [
438
- "{{cmd:audit}}",
439
- "From the high- and critical-severity advisories, pick a single one to resolve this pass. Apply the safest available remedy — a scoped automatic fix for that advisory or a targeted bump of the offending direct dependency — and avoid forced, breaking-change resolutions unless there is genuinely no other path. Adjust any code the patched version requires. {{const:GUARDRAILS}}\n\n{{const:ONE_PER_PASS}}",
440
- "{{cmd:test}}\n\nThen re-run the audit and report how many high- and critical-severity advisories still remain; state 'no high or critical advisories remain' only when the tree is clean."
441
- ],
442
- "goal": "No high- or critical-severity dependency advisories remain, every fix was applied deliberately one at a time, and the test gate reports {{const:VERIFICATION_PASS}}.",
443
- "maxIterations": 10,
444
- "loopBack": "first",
445
- "timeoutMinutes": 45
446
- },
447
- {
448
- "id": "api-contract-until-match",
449
- "name": "API Contract Until Match",
450
- "description": "Drive the implementation until its responses honor the published API contract, closing any gap between what the schema promises and what the handlers actually return.",
451
- "category": "API",
452
- "tags": [
453
- "api",
454
- "openapi",
455
- "contract-testing"
456
- ],
457
- "steps": [
458
- "Apply the changes in {{spec.title}} ({{spec.ids}}) — {{spec.description}} — so every affected endpoint's request and response shapes line up with the declared API contract (OpenAPI document or JSON Schema fixtures). For each route, reconcile status codes, required fields, and types: adjust the handler when the code is wrong, or correct the contract when the implementation is the source of truth — but never both blindly. {{const:GUARDRAILS}}",
459
- "{{cmd:test}}"
460
- ],
461
- "goal": "The contract test suite reports {{const:VERIFICATION_PASS}} — every endpoint's live behavior matches the published API contract with no schema or response drift.",
462
- "maxIterations": 10,
463
- "loopBack": "verify"
464
- },
465
- {
466
- "id": "openapi-sync-until-valid",
467
- "name": "OpenAPI Sync Until Valid",
468
- "description": "Keep the OpenAPI document well-formed and faithful to the real route handlers, repairing spec errors and code-vs-doc drift on each pass until the linter is satisfied.",
469
- "category": "API",
470
- "tags": [
471
- "api",
472
- "openapi",
473
- "docs"
474
- ],
475
- "steps": [
476
- "Reconcile the OpenAPI specification with the routes touched by {{spec.title}} ({{spec.ids}}). Cross-check each documented path, parameter, request body, response schema, and status code against the actual handler, then fix whichever side is wrong so the document describes reality. Also repair any structural or syntax problems flagged by the spec linter. {{const:GUARDRAILS}}",
477
- "{{cmd:lint}}"
478
- ],
479
- "goal": "The OpenAPI linter reports {{const:VERIFICATION_PASS}} — the spec is structurally valid and accurately mirrors the implemented routes.",
480
- "maxIterations": 8,
481
- "loopBack": "verify"
482
- },
483
- {
484
- "id": "migration-until-applied",
485
- "name": "Migration Until Applied",
486
- "description": "Bring the database schema forward cleanly: run the pending migrations, repair any schema or SQL faults they surface, and confirm migration history stays consistent.",
487
- "category": "Database",
488
- "tags": [
489
- "database",
490
- "prisma",
491
- "migrations"
492
- ],
493
- "steps": [
494
- "Author and apply the schema changes required by {{spec.title}} ({{spec.ids}}) — {{spec.description}}. Add or amend the migration, run it against the dev database, and resolve any failure it raises: fix the schema definition or hand-written SQL, regenerate any derived client or types, and make sure the migration is reversible and ordered correctly relative to existing history. {{const:GUARDRAILS}}",
495
- "{{cmd:build}}"
496
- ],
497
- "goal": "Migration status reports {{const:VERIFICATION_PASS}} — every migration applies cleanly with consistent history and the app still builds against the new schema.",
498
- "maxIterations": 8,
499
- "loopBack": "verify"
500
- },
501
- {
502
- "id": "bundle-size-budget",
503
- "name": "Bundle Size Budget",
504
- "description": "Land the feature without inflating the client bundle past its budget — measure each pass and trim, code-split, or lazy-load until the size gate is green.",
505
- "category": "Performance",
506
- "tags": [
507
- "performance",
508
- "bundle",
509
- "frontend"
510
- ],
511
- "steps": [
512
- "Implement {{spec.title}} ({{spec.ids}}) — {{spec.description}} — while keeping the client bundle inside its configured size budget. If your change pushes a chunk over the limit, prefer dynamic imports for heavy modules, route-level splitting, and dropping unused dependencies before considering any feature reduction. {{const:GUARDRAILS}}",
513
- "{{cmd:build}}"
514
- ],
515
- "goal": "The bundle-size gate reports {{const:VERIFICATION_PASS}} — the production build stays under its configured size budget.",
516
- "maxIterations": 8,
517
- "loopBack": "verify"
518
- },
519
- {
520
- "id": "changelog-sync-after-ship",
521
- "name": "Changelog Sync After Ship",
522
- "description": "After shipping, make sure the changelog tells the user-facing story: review what landed, write Keep-a-Changelog entries, and confirm nothing visible was missed.",
523
- "category": "Docs",
524
- "tags": [
525
- "docs",
526
- "changelog",
527
- "release"
528
- ],
529
- "steps": [
530
- "Survey what shipped since the last release: list the commits and pull requests beyond the most recent tag or changelog section, and pull out the changes a user would actually notice from {{spec.title}} ({{spec.ids}}).",
531
- "Add the corresponding entries under the [Unreleased] heading of the changelog, grouped as Added / Changed / Fixed in plain user-facing language, linking the relevant issues or PRs. Match the project's existing changelog conventions. {{const:GUARDRAILS}}",
532
- "{{cmd:docs-sync}}"
533
- ],
534
- "goal": "The changelog's [Unreleased] section documents every user-visible change from this ship, correctly grouped and formatted, with no notable change left out.",
535
- "maxIterations": 3,
536
- "loopBack": "last"
537
- },
538
- {
539
- "id": "guardrails-learning-loop",
540
- "name": "Guardrails Learning Loop",
541
- "description": "Keep iterating on the gates until they go green, but every time a check fails the same way twice, write down a guardrail note first so the loop never burns iterations re-attempting an approach that already failed.",
542
- "category": "Automation",
543
- "tags": [
544
- "guardrails",
545
- "learning",
546
- "automation"
547
- ],
548
- "steps": [
549
- "Open .ralph/guardrails.md (create it if absent) and read every recorded guardrail note. Treat each one as a hard constraint for this pass: do not re-try any approach a note says has already failed.",
550
- "Run the test gate. {{cmd:test}}",
551
- "Run the lint gate. {{cmd:lint}}",
552
- "Compare any failure against the last pass. If the identical error reappears, append a short, concrete guardrail note to .ralph/guardrails.md (one line: what broke and the rule that prevents it), then fix the underlying cause honouring every recorded note and never re-running a previously failed fix. {{const:GUARDRAILS}}"
553
- ],
554
- "goal": "Both the test and lint gates report {{const:VERIFICATION_PASS}} and no failure pattern recorded in .ralph/guardrails.md recurs.",
555
- "maxIterations": 12,
556
- "loopBack": "last"
557
- },
558
- {
559
- "id": "ralph-story-executor",
560
- "name": "Backlog Story Executor",
561
- "description": "Work a backlog of user stories one at a time with a fresh context each pass: pick the next unfinished story, build only it, prove the project gates stay green, commit, and mark it done before moving on.",
562
- "category": "Automation",
563
- "tags": [
564
- "automation",
565
- "backlog",
566
- "prd",
567
- "fresh-context"
568
- ],
569
- "steps": [
570
- "Read .ralph/prd.json and .ralph/progress.md. If a story is flagged inProgress, resume it; otherwise select the lowest-priority story whose passes flag is still false. Flag exactly that one story inProgress in prd.json before writing any code.\n\n{{const:ONE_PER_PASS}}",
571
- "Implement that single story end to end at the smallest reasonable scope. Touch nothing outside what the story requires. {{const:GUARDRAILS}}",
572
- "Run the project's gates and resolve every failure before committing. {{cmd:test}} {{cmd:lint}} {{cmd:build}}",
573
- "{{cmd:commit}} with a message scoped to this story, then set its passes flag to true in .ralph/prd.json and append what you learned to .ralph/progress.md. Finally, report how many stories in .ralph/prd.json still have passes=false; state 'backlog complete' only when none remain."
574
- ],
575
- "goal": "Every story in .ralph/prd.json has passes set to true, with each one committed and its gates reporting {{const:VERIFICATION_PASS}}.",
576
- "maxIterations": 20,
577
- "loopBack": "first",
578
- "timeoutMinutes": 45
579
- },
580
- {
581
- "id": "investigation-script-loop",
582
- "name": "Investigation Script Loop",
583
- "description": "Pin down a bug's true cause empirically: write a tiny disposable script that exercises the suspect behaviour, run it, read the real output, and refine the probe until the output itself proves the root cause.",
584
- "category": "Debugging",
585
- "tags": [
586
- "debugging",
587
- "repro",
588
- "scripts"
589
- ],
590
- "steps": [
591
- "Write a single throwaway probe script (roughly 20 lines, one file) that reproduces the failing behaviour or prints the suspect internal state for {{spec.title}}. Keep it isolated from production code paths.",
592
- "Execute the probe and capture stdout and stderr verbatim. Reason only from the captured output, never from assumptions about what the code does.",
593
- "Adjust the probe or your written hypothesis based on what the output actually showed, then re-run. Once the output unambiguously demonstrates the root cause, write a one-paragraph summary tying the evidence to the cause and stop."
594
- ],
595
- "goal": "The probe script's captured output demonstrates the root cause of the issue, accompanied by a written summary linking that output to the explanation.",
596
- "maxIterations": 8,
597
- "loopBack": "last"
598
- },
599
- {
600
- "id": "reflexion-debug-loop",
601
- "name": "Reflection Debug Loop",
602
- "description": "Turn a failing test green without thrashing: each time an attempt fails, record a short reflection to disk and consult it before the next try, so the loop never repeats a fix that has already been ruled out.",
603
- "category": "Debugging",
604
- "tags": [
605
- "debugging",
606
- "reflection",
607
- "memory"
608
- ],
609
- "steps": [
610
- "Read .loops/reflexion.md (create it if missing) for past attempts, then reproduce the bug by running the failing test and capturing its exact error output.",
611
- "Append one entry to .loops/reflexion.md: what you just tried, precisely how it failed, and one hypothesis that steers the next attempt somewhere new.",
612
- "Choose a fix that differs from every approach already logged in .loops/reflexion.md, targeting the root cause rather than masking the symptom. {{const:GUARDRAILS}}"
613
- ],
614
- "goal": "The previously failing test now passes and the project gates report {{const:VERIFICATION_PASS}}.",
615
- "maxIterations": 8,
616
- "loopBack": "verify"
617
- },
618
- {
619
- "id": "merge-conflict-resolver",
620
- "name": "Merge Conflict Resolver",
621
- "description": "Bring the branch up to date with its target by rebasing, then resolve every conflict file by file while preserving both sides' intent, and prove the result still passes before declaring the branch current.",
622
- "category": "Git",
623
- "tags": [
624
- "git",
625
- "rebase",
626
- "merge"
627
- ],
628
- "steps": [
629
- "Fetch the latest target branch and start a rebase of the current branch onto it. List every file reported as conflicted.",
630
- "Resolve each conflicting file individually: read both the incoming and the local hunk, keep the intent of each side, and integrate them with the smallest sensible edit rather than blindly choosing one side. {{const:GUARDRAILS}}",
631
- "Continue the rebase until it completes with no remaining conflict markers anywhere in the tree."
632
- ],
633
- "goal": "The branch is rebased on its target with zero conflicts remaining and the project gates report {{const:VERIFICATION_PASS}}.",
634
- "maxIterations": 8,
635
- "loopBack": "verify"
636
- },
637
- {
638
- "id": "staging-smoke-test",
639
- "name": "Staging Smoke Test",
640
- "description": "After a staging deploy, walk a fixed smoke checklist — auth, the core user paths, and key integrations — fixing the smallest issue each time something breaks and re-running until the whole checklist comes back clean.",
641
- "category": "DevOps",
642
- "tags": [
643
- "staging",
644
- "smoke-test",
645
- "deploy"
646
- ],
647
- "steps": [
648
- "Run the staging smoke checklist end to end: confirm login works, exercise the critical user flows, and verify webhooks and other integrations respond as expected. Record the status of each item.",
649
- "For any failing item, trace the staging logs to the cause and apply the smallest corrective change, redeploying or hotfixing as the situation requires. {{const:GUARDRAILS}}",
650
- "Re-run the full smoke checklist and confirm each item now reports healthy. {{cmd:verify}}"
651
- ],
652
- "goal": "Every item on the staging smoke checklist passes and verification reports {{const:VERIFICATION_PASS}}.",
653
- "maxIterations": 6,
654
- "loopBack": "last"
655
- },
656
- {
657
- "id": "deploy-verification-loop",
658
- "name": "Deploy Verification Loop",
659
- "description": "After a deploy goes out, poll the health and smoke endpoints on an interval, investigating and fixing or escalating any non-healthy response, and keep checking until every configured endpoint reports success.",
660
- "category": "DevOps",
661
- "tags": [
662
- "deploy",
663
- "devops",
664
- "smoke-test"
665
- ],
666
- "steps": [
667
- "Probe each configured health and smoke endpoint and record its status code and response body. Treat any non-success response as a signal to investigate.",
668
- "When an endpoint is unhealthy, inspect the recent deploy logs, environment configuration, and any pending migrations to locate the cause, then apply the smallest fix or escalate a rollback if it is not safely recoverable. {{const:GUARDRAILS}}",
669
- "Re-probe all endpoints after each fix or rollback decision and confirm they have returned to a healthy state. {{cmd:verify}}"
670
- ],
671
- "goal": "Every configured health and smoke endpoint returns a successful response and verification reports {{const:VERIFICATION_PASS}}.",
672
- "maxIterations": 16,
673
- "loopBack": "first"
674
- }
675
- ];