stageflow 0.25.0 → 0.27.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 (501) hide show
  1. package/README.md +10 -3
  2. package/dist/a2a/contracts.d.ts +1 -0
  3. package/dist/a2a/contracts.js +1 -0
  4. package/dist/a2a/registry.d.ts +2 -0
  5. package/dist/a2a/registry.js +20 -1
  6. package/dist/a2a/server.d.ts +7 -0
  7. package/dist/a2a/server.js +5 -2
  8. package/dist/a2a/service.d.ts +1 -1
  9. package/dist/a2a/service.js +57 -8
  10. package/dist/a2a/store.d.ts +8 -5
  11. package/dist/a2a/store.js +24 -67
  12. package/dist/agent/activity.d.ts +3 -0
  13. package/dist/agent/bootProviderConfig.d.ts +21 -0
  14. package/dist/agent/bootProviderConfig.js +74 -0
  15. package/dist/agent/piAdapter.d.ts +9 -1
  16. package/dist/agent/piAdapter.js +58 -3
  17. package/dist/agent/piIsolatedMcp.d.ts +2 -0
  18. package/dist/agent/piIsolatedMcp.js +10 -2
  19. package/dist/agent/port.d.ts +6 -0
  20. package/dist/agent/streamLogRedact.d.ts +1 -1
  21. package/dist/agent/streamLogRedact.js +4 -11
  22. package/dist/cli/artifactCommand.js +9 -16
  23. package/dist/cli/backupCommand.d.ts +9 -0
  24. package/dist/cli/backupCommand.js +111 -0
  25. package/dist/cli/debugRunCommand.d.ts +10 -0
  26. package/dist/cli/debugRunCommand.js +109 -0
  27. package/dist/cli/doctorCommand.d.ts +32 -0
  28. package/dist/cli/doctorCommand.js +453 -0
  29. package/dist/cli/envelopeCommand.js +9 -2
  30. package/dist/cli/exportAllCommand.d.ts +55 -0
  31. package/dist/cli/exportAllCommand.js +218 -0
  32. package/dist/cli/exportRunCommand.js +23 -21
  33. package/dist/cli/hostClient.d.ts +21 -3
  34. package/dist/cli/hostClient.js +93 -12
  35. package/dist/cli/initTemplates.d.ts +1 -1
  36. package/dist/cli/initTemplates.js +8 -1
  37. package/dist/cli/resolveSafeOutPath.d.ts +2 -0
  38. package/dist/cli/resolveSafeOutPath.js +40 -0
  39. package/dist/cli/restoreCommand.d.ts +10 -0
  40. package/dist/cli/restoreCommand.js +90 -0
  41. package/dist/cli/runCommand.d.ts +3 -2
  42. package/dist/cli/runCommand.js +93 -11
  43. package/dist/cli/runOutput.d.ts +4 -0
  44. package/dist/cli/runOutput.js +33 -7
  45. package/dist/cli/runStageCommand.d.ts +1 -0
  46. package/dist/cli/runStageCommand.js +44 -25
  47. package/dist/cli/runsCommand.d.ts +1 -1
  48. package/dist/cli/runsCommand.js +162 -8
  49. package/dist/cli.js +171 -30
  50. package/dist/config/catalogRelativePath.d.ts +62 -0
  51. package/dist/config/catalogRelativePath.js +118 -0
  52. package/dist/config/configOrigin.d.ts +27 -0
  53. package/dist/config/configOrigin.js +59 -0
  54. package/dist/config/hostConfig.d.ts +55 -0
  55. package/dist/config/hostConfig.js +333 -0
  56. package/dist/config/listSkills.d.ts +26 -0
  57. package/dist/config/listSkills.js +190 -3
  58. package/dist/config/loadOutcome.d.ts +1 -1
  59. package/dist/config/loadPipeline.js +23 -2
  60. package/dist/config/loadStage.js +18 -0
  61. package/dist/config/loadTask.d.ts +2 -0
  62. package/dist/config/loadTask.js +57 -18
  63. package/dist/config/materializeStageModels.js +5 -1
  64. package/dist/config/mergePipelineIncludes.d.ts +3 -0
  65. package/dist/config/mergePipelineIncludes.js +19 -0
  66. package/dist/config/migrateYaml.js +6 -11
  67. package/dist/config/multiProjectCatalog.d.ts +30 -0
  68. package/dist/config/multiProjectCatalog.js +142 -0
  69. package/dist/config/normalizePipelineStageEntry.js +20 -1
  70. package/dist/config/pipelineStageKeys.js +2 -0
  71. package/dist/config/resolveCatalogRoots.d.ts +27 -0
  72. package/dist/config/resolveCatalogRoots.js +76 -0
  73. package/dist/config/resolveModel.d.ts +7 -1
  74. package/dist/config/resolveModel.js +11 -1
  75. package/dist/config/resolveStageMcpServers.d.ts +9 -1
  76. package/dist/config/resolveStageMcpServers.js +36 -9
  77. package/dist/config/secretFromEnvOrFile.d.ts +9 -0
  78. package/dist/config/secretFromEnvOrFile.js +34 -0
  79. package/dist/config/seededCatalog.d.ts +11 -0
  80. package/dist/config/seededCatalog.js +29 -0
  81. package/dist/config/toolRequires.d.ts +24 -0
  82. package/dist/config/toolRequires.js +115 -0
  83. package/dist/config/validateCatalog.d.ts +5 -1
  84. package/dist/config/validateCatalog.js +140 -1
  85. package/dist/diagnostics/checks.d.ts +39 -0
  86. package/dist/diagnostics/checks.js +135 -0
  87. package/dist/errors/codes.d.ts +14 -0
  88. package/dist/errors/codes.js +59 -0
  89. package/dist/git/cache.d.ts +14 -0
  90. package/dist/git/cache.js +150 -0
  91. package/dist/git/credentials.d.ts +9 -0
  92. package/dist/git/credentials.js +88 -0
  93. package/dist/git/errors.d.ts +20 -0
  94. package/dist/git/errors.js +94 -0
  95. package/dist/git/exec.d.ts +16 -0
  96. package/dist/git/exec.js +135 -0
  97. package/dist/git/operations.d.ts +29 -0
  98. package/dist/git/operations.js +153 -0
  99. package/dist/git/version.d.ts +1 -0
  100. package/dist/git/version.js +10 -0
  101. package/dist/logging/audit.d.ts +16 -0
  102. package/dist/logging/audit.js +19 -0
  103. package/dist/logging/commonWords.d.ts +2 -0
  104. package/dist/logging/commonWords.js +13 -0
  105. package/dist/logging/logger.d.ts +49 -0
  106. package/dist/logging/logger.js +193 -0
  107. package/dist/logging/namedSecrets.d.ts +6 -0
  108. package/dist/logging/namedSecrets.js +58 -0
  109. package/dist/logging/redact.d.ts +13 -0
  110. package/dist/logging/redact.js +88 -0
  111. package/dist/mcp/catalogTools.js +456 -80
  112. package/dist/mcp/checkoutTools.d.ts +52 -0
  113. package/dist/mcp/checkoutTools.js +332 -0
  114. package/dist/mcp/controlTools.js +179 -5
  115. package/dist/mcp/deps.d.ts +1 -0
  116. package/dist/mcp/getStartedTool.d.ts +3 -0
  117. package/dist/mcp/getStartedTool.js +62 -0
  118. package/dist/mcp/readArtifact.d.ts +11 -0
  119. package/dist/mcp/readArtifact.js +46 -30
  120. package/dist/mcp/server.js +1 -0
  121. package/dist/mcp/tools.js +4 -0
  122. package/dist/net/proxy.d.ts +14 -0
  123. package/dist/net/proxy.js +78 -0
  124. package/dist/package-meta.d.ts +2 -1
  125. package/dist/package-meta.js +2 -1
  126. package/dist/preflight/bash.d.ts +8 -0
  127. package/dist/preflight/bash.js +34 -0
  128. package/dist/preflight/claudeRoot.d.ts +11 -0
  129. package/dist/preflight/claudeRoot.js +23 -0
  130. package/dist/preflight/mcpCommands.d.ts +8 -0
  131. package/dist/preflight/mcpCommands.js +36 -0
  132. package/dist/preflight/pipelinePreflight.d.ts +40 -0
  133. package/dist/preflight/pipelinePreflight.js +192 -0
  134. package/dist/preflight/tls.d.ts +6 -0
  135. package/dist/preflight/tls.js +18 -0
  136. package/dist/preflight/toolchain.d.ts +45 -0
  137. package/dist/preflight/toolchain.js +219 -0
  138. package/dist/project/findProjectRoot.js +3 -4
  139. package/dist/project/globalHome.d.ts +7 -0
  140. package/dist/project/globalHome.js +63 -2
  141. package/dist/project/resolveProjectContext.js +2 -2
  142. package/dist/project/resolveStageflowContext.js +2 -2
  143. package/dist/projection/projectRun.d.ts +2 -1
  144. package/dist/projection/projectRun.js +1 -0
  145. package/dist/runstore/assertTmpdir.d.ts +1 -0
  146. package/dist/runstore/assertTmpdir.js +21 -0
  147. package/dist/runstore/backup.d.ts +52 -0
  148. package/dist/runstore/backup.js +292 -0
  149. package/dist/runstore/createStore.d.ts +18 -1
  150. package/dist/runstore/createStore.js +64 -5
  151. package/dist/runstore/debugBundle.d.ts +60 -0
  152. package/dist/runstore/debugBundle.js +143 -0
  153. package/dist/runstore/diskUsage.d.ts +50 -0
  154. package/dist/runstore/diskUsage.js +214 -0
  155. package/dist/runstore/exportRunPayload.d.ts +8 -0
  156. package/dist/runstore/exportRunPayload.js +23 -0
  157. package/dist/runstore/normalizeCatalogPath.d.ts +1 -0
  158. package/dist/runstore/normalizeCatalogPath.js +10 -0
  159. package/dist/runstore/paths.d.ts +5 -0
  160. package/dist/runstore/paths.js +145 -1
  161. package/dist/runstore/port.d.ts +111 -13
  162. package/dist/runstore/port.js +8 -1
  163. package/dist/runstore/restore.d.ts +81 -0
  164. package/dist/runstore/restore.js +355 -0
  165. package/dist/runstore/retention.d.ts +27 -0
  166. package/dist/runstore/retention.js +74 -0
  167. package/dist/runstore/runManifest.d.ts +146 -0
  168. package/dist/runstore/runManifest.js +288 -0
  169. package/dist/runstore/runProjection.d.ts +3 -1
  170. package/dist/runstore/runProjection.js +63 -1
  171. package/dist/runstore/sqlite/SqliteRunStore.d.ts +28 -3
  172. package/dist/runstore/sqlite/SqliteRunStore.js +352 -219
  173. package/dist/runstore/sqlite/applyStorePragmas.d.ts +39 -0
  174. package/dist/runstore/sqlite/applyStorePragmas.js +145 -0
  175. package/dist/runstore/sqlite/migrations/001-baseline.d.ts +7 -0
  176. package/dist/runstore/sqlite/migrations/001-baseline.js +10 -0
  177. package/dist/runstore/sqlite/migrations/002-repository-binding.d.ts +7 -0
  178. package/dist/runstore/sqlite/migrations/002-repository-binding.js +29 -0
  179. package/dist/runstore/sqlite/migrations/003-run-lifecycle.d.ts +7 -0
  180. package/dist/runstore/sqlite/migrations/003-run-lifecycle.js +28 -0
  181. package/dist/runstore/sqlite/migrations/004-auto-resume-count.d.ts +7 -0
  182. package/dist/runstore/sqlite/migrations/004-auto-resume-count.js +19 -0
  183. package/dist/runstore/sqlite/migrations/005-config-origins.d.ts +7 -0
  184. package/dist/runstore/sqlite/migrations/005-config-origins.js +19 -0
  185. package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.d.ts +7 -0
  186. package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.js +28 -0
  187. package/dist/runstore/sqlite/migrations/007-projects-registry.d.ts +7 -0
  188. package/dist/runstore/sqlite/migrations/007-projects-registry.js +31 -0
  189. package/dist/runstore/sqlite/migrations/index.d.ts +21 -0
  190. package/dist/runstore/sqlite/migrations/index.js +72 -0
  191. package/dist/runstore/sqlite/schema.d.ts +20 -1
  192. package/dist/runstore/sqlite/schema.js +277 -1
  193. package/dist/runstore/sqlite/storeOpenError.d.ts +6 -0
  194. package/dist/runstore/sqlite/storeOpenError.js +11 -0
  195. package/dist/runstore/sqlite/storeSchemaError.d.ts +5 -0
  196. package/dist/runstore/sqlite/storeSchemaError.js +8 -0
  197. package/dist/runstore/stageExecution.js +3 -0
  198. package/dist/runstore/storeFilesystem.d.ts +32 -0
  199. package/dist/runstore/storeFilesystem.js +148 -0
  200. package/dist/runstore/trackProjection.js +2 -0
  201. package/dist/runstore/workspaceLayout.d.ts +13 -0
  202. package/dist/runstore/workspaceLayout.js +76 -0
  203. package/dist/runtime/completionCheckRunner.d.ts +3 -0
  204. package/dist/runtime/completionCheckRunner.js +45 -7
  205. package/dist/runtime/containerLimits.d.ts +16 -0
  206. package/dist/runtime/containerLimits.js +84 -0
  207. package/dist/runtime/credentialMaterialisation.d.ts +28 -0
  208. package/dist/runtime/credentialMaterialisation.js +128 -0
  209. package/dist/runtime/gitCheckoutCapability.js +7 -13
  210. package/dist/runtime/pipelineRunner.d.ts +36 -1
  211. package/dist/runtime/pipelineRunner.js +178 -17
  212. package/dist/runtime/pipelineScheduler.d.ts +15 -0
  213. package/dist/runtime/pipelineScheduler.js +135 -27
  214. package/dist/runtime/reloadRunCatalog.js +6 -1
  215. package/dist/runtime/repositoryMaterialize.d.ts +47 -0
  216. package/dist/runtime/repositoryMaterialize.js +235 -0
  217. package/dist/runtime/resumeTimedOut.d.ts +1 -1
  218. package/dist/runtime/resumeTimedOut.js +5 -2
  219. package/dist/runtime/runChangeBus.js +9 -0
  220. package/dist/runtime/runDeletion.d.ts +7 -0
  221. package/dist/runtime/runDeletion.js +37 -0
  222. package/dist/runtime/runManager.d.ts +158 -4
  223. package/dist/runtime/runManager.js +1596 -79
  224. package/dist/runtime/runRetentionSweep.d.ts +31 -0
  225. package/dist/runtime/runRetentionSweep.js +328 -0
  226. package/dist/runtime/runRetryCoordinator.d.ts +2 -0
  227. package/dist/runtime/runRetryCoordinator.js +19 -2
  228. package/dist/runtime/runSkills.d.ts +40 -0
  229. package/dist/runtime/runSkills.js +173 -0
  230. package/dist/runtime/stageAttemptBootstrap.d.ts +5 -1
  231. package/dist/runtime/stageAttemptBootstrap.js +195 -24
  232. package/dist/runtime/stageCacheEnv.d.ts +6 -0
  233. package/dist/runtime/stageCacheEnv.js +34 -0
  234. package/dist/runtime/stageConcurrency.d.ts +2 -1
  235. package/dist/runtime/stageConcurrency.js +4 -2
  236. package/dist/runtime/stageEnvironment.d.ts +38 -0
  237. package/dist/runtime/stageEnvironment.js +193 -0
  238. package/dist/runtime/stageProcessLauncher.d.ts +18 -0
  239. package/dist/runtime/stageProcessLauncher.js +194 -38
  240. package/dist/runtime/stageRecovery.d.ts +3 -1
  241. package/dist/runtime/stageRecovery.js +19 -4
  242. package/dist/runtime/stageRoots.d.ts +38 -1
  243. package/dist/runtime/stageRoots.js +118 -0
  244. package/dist/runtime/stageRunner.d.ts +1 -0
  245. package/dist/runtime/stageRunner.js +3 -1
  246. package/dist/runtime/stageSecretDecl.d.ts +9 -0
  247. package/dist/runtime/stageSecretDecl.js +102 -0
  248. package/dist/runtime/stageSecrets.d.ts +40 -0
  249. package/dist/runtime/stageSecrets.js +181 -0
  250. package/dist/runtime/stageWorker.d.ts +3 -2
  251. package/dist/runtime/stageWorker.js +58 -10
  252. package/dist/runtime/stageWorkerProtocol.d.ts +5 -0
  253. package/dist/runtime/stageWorkerProtocol.js +8 -0
  254. package/dist/runtime/startPayload.d.ts +32 -0
  255. package/dist/runtime/startPayload.js +59 -0
  256. package/dist/runtime/taskInput.js +14 -5
  257. package/dist/runtime/verifiedStageExecution.d.ts +1 -0
  258. package/dist/runtime/verifiedStageExecution.js +2 -1
  259. package/dist/runtime/workspaceBinding.d.ts +20 -0
  260. package/dist/runtime/workspaceBinding.js +60 -0
  261. package/dist/server/allowedHosts.d.ts +19 -0
  262. package/dist/server/allowedHosts.js +179 -0
  263. package/dist/server/bootstrap.d.ts +36 -2
  264. package/dist/server/bootstrap.js +209 -5
  265. package/dist/server/controlToken.d.ts +47 -0
  266. package/dist/server/controlToken.js +241 -0
  267. package/dist/server/createHttpHost.d.ts +11 -2
  268. package/dist/server/createHttpHost.js +103 -10
  269. package/dist/server/ensureGlobalService.d.ts +5 -1
  270. package/dist/server/ensureGlobalService.js +35 -1
  271. package/dist/server/healthSurfaces.d.ts +6 -0
  272. package/dist/server/healthSurfaces.js +98 -0
  273. package/dist/server/http.d.ts +12 -1
  274. package/dist/server/http.js +1085 -485
  275. package/dist/server/listenHost.d.ts +5 -0
  276. package/dist/server/listenHost.js +56 -0
  277. package/dist/server/mcpHost.d.ts +10 -1
  278. package/dist/server/mcpHost.js +36 -6
  279. package/dist/server/operatorResults.d.ts +2 -2
  280. package/dist/server/operatorResults.js +40 -29
  281. package/dist/server/requestAuthContext.d.ts +12 -0
  282. package/dist/server/requestAuthContext.js +21 -0
  283. package/dist/server/shutdown.d.ts +69 -0
  284. package/dist/server/shutdown.js +219 -0
  285. package/dist/types/pipeline.d.ts +7 -0
  286. package/dist/types/stage.d.ts +8 -0
  287. package/dist/types/task.d.ts +8 -0
  288. package/dist/ui/assets/index-B6hlSXXn.js +120 -0
  289. package/dist/ui/index.html +1 -1
  290. package/examples/README.md +98 -0
  291. package/examples/archify-on-pr/README.md +213 -0
  292. package/examples/archify-on-pr/archify-on-pr.pipeline.yaml +19 -0
  293. package/examples/archify-on-pr/archify-on-pr.task.yaml +19 -0
  294. package/examples/archify-on-pr/author-diagrams.yaml +106 -0
  295. package/examples/archify-on-pr/detect-changes.yaml +89 -0
  296. package/examples/ci-validate/README.md +35 -0
  297. package/examples/ci-validate/check.yaml +13 -0
  298. package/examples/ci-validate/ci-demo.pipeline.yaml +4 -0
  299. package/examples/ci-validate/validate.sh +5 -0
  300. package/examples/compliance-review-demo/README.md +125 -0
  301. package/examples/compliance-review-demo/compliance-review-demo.pipeline.yaml +29 -0
  302. package/examples/compliance-review-demo/connect-account.yaml +47 -0
  303. package/examples/compliance-review-demo/map-to-control.yaml +123 -0
  304. package/examples/compliance-review-demo/poll-bucket-config.yaml +103 -0
  305. package/examples/compliance-review-demo/publish-report.yaml +79 -0
  306. package/examples/compliance-review-demo/review-verdict.yaml +122 -0
  307. package/examples/compliance-review-demo/run-compliance-check.yaml +96 -0
  308. package/examples/compliance-review-demo/store-evidence.yaml +143 -0
  309. package/examples/conditional-fork/README.md +89 -0
  310. package/examples/conditional-fork/branch-a.yaml +13 -0
  311. package/examples/conditional-fork/branch-b.yaml +13 -0
  312. package/examples/conditional-fork/decide.yaml +35 -0
  313. package/examples/conditional-fork/fork-demo.pipeline.yaml +20 -0
  314. package/examples/conditional-fork/fork-demo.task.yaml +8 -0
  315. package/examples/context7-mcp/README.md +42 -0
  316. package/examples/context7-mcp/context7-mcp.pipeline.yaml +15 -0
  317. package/examples/context7-mcp/context7-mcp.task.yaml +4 -0
  318. package/examples/context7-mcp/fetch-docs.yaml +52 -0
  319. package/examples/context7-mcp/resolve-library.yaml +31 -0
  320. package/examples/context7-mcp/write-brief.yaml +52 -0
  321. package/examples/feature-loop/README.md +104 -0
  322. package/examples/feature-loop/address-feedback.yaml +148 -0
  323. package/examples/feature-loop/align.yaml +116 -0
  324. package/examples/feature-loop/decompose.yaml +86 -0
  325. package/examples/feature-loop/default-model-hierarchy.task.yaml +58 -0
  326. package/examples/feature-loop/feature-loop.pipeline.yaml +140 -0
  327. package/examples/feature-loop/feature-loop.task.yaml +25 -0
  328. package/examples/feature-loop/implement.yaml +128 -0
  329. package/examples/feature-loop/plan.yaml +111 -0
  330. package/examples/feature-loop/publish.yaml +167 -0
  331. package/examples/feature-loop/review.yaml +146 -0
  332. package/examples/feature-loop/verify.yaml +106 -0
  333. package/examples/feedback-loop/README.md +72 -0
  334. package/examples/feedback-loop/VERIFY.md +208 -0
  335. package/examples/feedback-loop/continue-only.task.yaml +4 -0
  336. package/examples/feedback-loop/exhaust-require-continue.task.yaml +6 -0
  337. package/examples/feedback-loop/exhaust-wait-human.task.yaml +11 -0
  338. package/examples/feedback-loop/feedback-loop-wait-human.pipeline.yaml +23 -0
  339. package/examples/feedback-loop/feedback-loop.pipeline.yaml +23 -0
  340. package/examples/feedback-loop/feedback-loop.task.yaml +4 -0
  341. package/examples/feedback-loop/implement.yaml +14 -0
  342. package/examples/feedback-loop/plan.yaml +14 -0
  343. package/examples/feedback-loop/review.yaml +15 -0
  344. package/examples/feedback-loop/send-back-once.task.yaml +6 -0
  345. package/examples/feedback-loop/submit.yaml +12 -0
  346. package/examples/generic-fan-in/README.md +151 -0
  347. package/examples/generic-fan-in/clarify.yaml +18 -0
  348. package/examples/generic-fan-in/generic-fan-in-accepted.pipeline.yaml +19 -0
  349. package/examples/generic-fan-in/generic-fan-in-accepted.task.yaml +8 -0
  350. package/examples/generic-fan-in/generic-fan-in.pipeline.yaml +18 -0
  351. package/examples/generic-fan-in/generic-fan-in.task.yaml +9 -0
  352. package/examples/generic-fan-in/research.yaml +45 -0
  353. package/examples/generic-fan-in/synthesize.yaml +66 -0
  354. package/examples/generic-fan-in/validation.yaml +45 -0
  355. package/examples/github-release/README.md +78 -0
  356. package/examples/github-release/draft-release-notes.yaml +64 -0
  357. package/examples/github-release/github-release.pipeline.yaml +11 -0
  358. package/examples/github-release/github-release.task.yaml +13 -0
  359. package/examples/github-release/publish-github-release.yaml +64 -0
  360. package/examples/hello-world/README.md +28 -0
  361. package/examples/hello-world/hello.pipeline.yaml +4 -0
  362. package/examples/hello-world/my-task.task.yaml +6 -0
  363. package/examples/hello-world/research.yaml +18 -0
  364. package/examples/mcp-hitl-tour/README.md +113 -0
  365. package/examples/mcp-hitl-tour/draft-angle.yaml +33 -0
  366. package/examples/mcp-hitl-tour/draft-short.yaml +32 -0
  367. package/examples/mcp-hitl-tour/emit-angles.yaml +45 -0
  368. package/examples/mcp-hitl-tour/gather.yaml +31 -0
  369. package/examples/mcp-hitl-tour/intake.yaml +62 -0
  370. package/examples/mcp-hitl-tour/mcp-hitl-tour-exhaust.task.yaml +13 -0
  371. package/examples/mcp-hitl-tour/mcp-hitl-tour.pipeline.yaml +54 -0
  372. package/examples/mcp-hitl-tour/mcp-hitl-tour.task.yaml +16 -0
  373. package/examples/mcp-hitl-tour/polish.yaml +33 -0
  374. package/examples/mcp-hitl-tour/review.yaml +17 -0
  375. package/examples/mcp-hitl-tour/ship.yaml +25 -0
  376. package/examples/oss-issue-contribution/README.md +218 -0
  377. package/examples/oss-issue-contribution/oss-address-review-feedback.yaml +117 -0
  378. package/examples/oss-issue-contribution/oss-approve-contribution.yaml +181 -0
  379. package/examples/oss-issue-contribution/oss-approve-plan.yaml +111 -0
  380. package/examples/oss-issue-contribution/oss-explain-fix.yaml +108 -0
  381. package/examples/oss-issue-contribution/oss-explain-issue.yaml +114 -0
  382. package/examples/oss-issue-contribution/oss-implement-source-fix.yaml +171 -0
  383. package/examples/oss-issue-contribution/oss-investigate-area.yaml +116 -0
  384. package/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml +125 -0
  385. package/examples/oss-issue-contribution/oss-issue-intake.yaml +106 -0
  386. package/examples/oss-issue-contribution/oss-plan-investigation.yaml +112 -0
  387. package/examples/oss-issue-contribution/oss-plan-review.yaml +109 -0
  388. package/examples/oss-issue-contribution/oss-reproduce-issue.yaml +140 -0
  389. package/examples/oss-issue-contribution/oss-review-change.yaml +107 -0
  390. package/examples/oss-issue-contribution/oss-verify-fix.yaml +130 -0
  391. package/examples/oss-issue-contribution/oss-write-regression-test.yaml +135 -0
  392. package/examples/oss-issue-contribution/pi-7629.task.yaml +79 -0
  393. package/examples/oss-issue-contribution/pi-8919.task.yaml +75 -0
  394. package/examples/oss-issue-contribution/pydantic-ai-7971.task.yaml +53 -0
  395. package/examples/oss-quick-fix/README.md +65 -0
  396. package/examples/oss-quick-fix/implement-fix.yaml +84 -0
  397. package/examples/oss-quick-fix/oss-quick-fix.pipeline.yaml +35 -0
  398. package/examples/oss-quick-fix/oss-quick-fix.task.yaml +19 -0
  399. package/examples/oss-quick-fix/ship-fix.yaml +81 -0
  400. package/examples/oss-quick-fix/understand-issue.yaml +67 -0
  401. package/examples/oss-quick-fix/verify-fix.yaml +73 -0
  402. package/examples/plan-review/README.md +37 -0
  403. package/examples/plan-review/plan-review-followup.yaml +13 -0
  404. package/examples/plan-review/plan-review.pipeline.yaml +9 -0
  405. package/examples/plan-review/plan-review.task.yaml +9 -0
  406. package/examples/plan-review/plan-review.yaml +25 -0
  407. package/examples/playwright-mcp/README.md +39 -0
  408. package/examples/playwright-mcp/playwright-mcp.pipeline.yaml +5 -0
  409. package/examples/playwright-mcp/playwright-mcp.task.yaml +4 -0
  410. package/examples/playwright-mcp/screenshot.yaml +40 -0
  411. package/examples/retry-tour/README.md +75 -0
  412. package/examples/retry-tour/retry-tour.pipeline.yaml +122 -0
  413. package/examples/retry-tour/retry-tour.task.yaml +9 -0
  414. package/examples/route-if-tour/README.md +202 -0
  415. package/examples/route-if-tour/route-if-tour.pipeline.yaml +950 -0
  416. package/examples/route-if-tour/route-if-tour.task.yaml +4 -0
  417. package/examples/route-wiring-smoke-test/01-core-routing.pipeline.yaml +168 -0
  418. package/examples/route-wiring-smoke-test/02-on-gating.pipeline.yaml +44 -0
  419. package/examples/route-wiring-smoke-test/03-two-entry-points.pipeline.yaml +28 -0
  420. package/examples/route-wiring-smoke-test/04-entry-false-equivalent-to-omitted.pipeline.yaml +27 -0
  421. package/examples/route-wiring-smoke-test/05-fork-choice.pipeline.yaml +110 -0
  422. package/examples/route-wiring-smoke-test/06-fan-out-fan-in.pipeline.yaml +82 -0
  423. package/examples/route-wiring-smoke-test/07-loop-human-decision.pipeline.yaml +82 -0
  424. package/examples/route-wiring-smoke-test/08-skip-fallback-and-multi-on-gate.pipeline.yaml +77 -0
  425. package/examples/route-wiring-smoke-test/09-multi-loop-targets.pipeline.yaml +102 -0
  426. package/examples/route-wiring-smoke-test/10-uses-dialect-fork.pipeline.yaml +23 -0
  427. package/examples/route-wiring-smoke-test/11-sequential-io-handoff.pipeline.yaml +37 -0
  428. package/examples/route-wiring-smoke-test/12-complex-io-schemas.pipeline.yaml +138 -0
  429. package/examples/route-wiring-smoke-test/13-ref-io-handoff.pipeline.yaml +84 -0
  430. package/examples/route-wiring-smoke-test/14-if-eq-gating.pipeline.yaml +50 -0
  431. package/examples/route-wiring-smoke-test/15-if-all-gated.pipeline.yaml +37 -0
  432. package/examples/route-wiring-smoke-test/16-if-composition.pipeline.yaml +65 -0
  433. package/examples/route-wiring-smoke-test/17-if-join.pipeline.yaml +80 -0
  434. package/examples/route-wiring-smoke-test/README.md +377 -0
  435. package/examples/route-wiring-smoke-test/rejected/01-reject-legacy-needs.pipeline.yaml +26 -0
  436. package/examples/route-wiring-smoke-test/rejected/02-reject-legacy-fork.pipeline.yaml +25 -0
  437. package/examples/route-wiring-smoke-test/rejected/03-reject-legacy-feedback-loop.pipeline.yaml +30 -0
  438. package/examples/route-wiring-smoke-test/rejected/04-reject-missing-entry.pipeline.yaml +24 -0
  439. package/examples/route-wiring-smoke-test/rejected/05-reject-unreachable.pipeline.yaml +35 -0
  440. package/examples/route-wiring-smoke-test/rejected/06-reject-allow-none-without-route-select.pipeline.yaml +37 -0
  441. package/examples/route-wiring-smoke-test/rejected/07-reject-cycle.pipeline.yaml +27 -0
  442. package/examples/route-wiring-smoke-test/rejected/08-reject-loop-non-ancestor.pipeline.yaml +42 -0
  443. package/examples/route-wiring-smoke-test/rejected/09-reject-route-select-leaf.pipeline.yaml +26 -0
  444. package/examples/route-wiring-smoke-test/rejected/12-reject-loop-replay-unsafe.pipeline.yaml +55 -0
  445. package/examples/route-wiring-smoke-test/rejected/13-reject-multiple-loop-entries.pipeline.yaml +51 -0
  446. package/examples/route-wiring-smoke-test/rejected/14-reject-duplicate-stage-id.pipeline.yaml +35 -0
  447. package/examples/route-wiring-smoke-test/rejected/15-reject-unknown-route-target.pipeline.yaml +15 -0
  448. package/examples/route-wiring-smoke-test/rejected/16-reject-malformed-route-item.pipeline.yaml +15 -0
  449. package/examples/route-wiring-smoke-test/rejected/17-reject-io-incompatible.pipeline.yaml +33 -0
  450. package/examples/route-wiring-smoke-test/rejected/18-reject-nested-io.pipeline.yaml +51 -0
  451. package/examples/route-wiring-smoke-test/rejected/19-reject-array-item-io.pipeline.yaml +55 -0
  452. package/examples/route-wiring-smoke-test/rejected/20-reject-closed-io.pipeline.yaml +36 -0
  453. package/examples/route-wiring-smoke-test/rejected/21-reject-ref-io.pipeline.yaml +42 -0
  454. package/examples/route-wiring-smoke-test/rejected/22-reject-if-unknown-field.pipeline.yaml +33 -0
  455. package/examples/route-wiring-smoke-test/rejected/23-reject-if-optional-field.pipeline.yaml +32 -0
  456. package/examples/route-wiring-smoke-test/rejected/24-reject-if-empty-all.pipeline.yaml +31 -0
  457. package/examples/route-wiring-smoke-test/rejected/25-reject-if-gt-on-string.pipeline.yaml +33 -0
  458. package/examples/route-wiring-smoke-test/rejected/26-reject-if-optional-nested.pipeline.yaml +36 -0
  459. package/examples/route-wiring-smoke-test/rejected/27-reject-if-on-loop.pipeline.yaml +63 -0
  460. package/examples/route-wiring-smoke-test/rejected/29-reject-if-on-failed.pipeline.yaml +46 -0
  461. package/examples/route-wiring-smoke-test/smoke-test.task.yaml +4 -0
  462. package/examples/route-wiring-smoke-test/stages/branch-a.yaml +12 -0
  463. package/examples/route-wiring-smoke-test/stages/branch-b.yaml +12 -0
  464. package/examples/route-wiring-smoke-test/stages/decide.yaml +12 -0
  465. package/examples/route-wiring-smoke-test/stages/finish.yaml +12 -0
  466. package/examples/ship-feature/README.md +190 -0
  467. package/examples/ship-feature/feat-address-feedback.yaml +119 -0
  468. package/examples/ship-feature/feat-implement.yaml +180 -0
  469. package/examples/ship-feature/feat-plan.yaml +120 -0
  470. package/examples/ship-feature/feat-review.yaml +109 -0
  471. package/examples/ship-feature/feat-ship.yaml +203 -0
  472. package/examples/ship-feature/ship-feature.pipeline.yaml +44 -0
  473. package/examples/ship-feature/ship-feature.task.yaml +78 -0
  474. package/examples/stage-mcp/README.md +144 -0
  475. package/examples/stage-mcp/echo-mcp.mjs +20 -0
  476. package/examples/stage-mcp/stage-mcp-dead.pipeline.yaml +5 -0
  477. package/examples/stage-mcp/stage-mcp-dead.task.yaml +3 -0
  478. package/examples/stage-mcp/stage-mcp-missing-var.pipeline.yaml +5 -0
  479. package/examples/stage-mcp/stage-mcp-missing-var.task.yaml +3 -0
  480. package/examples/stage-mcp/stage-mcp.pipeline.yaml +5 -0
  481. package/examples/stage-mcp/stage-mcp.task.yaml +4 -0
  482. package/examples/stage-mcp/use-echo.yaml +20 -0
  483. package/examples/verify-tour/README.md +80 -0
  484. package/examples/verify-tour/verify-tour.pipeline.yaml +162 -0
  485. package/examples/verify-tour/verify-tour.task.yaml +11 -0
  486. package/package.json +5 -1
  487. package/skills/stageflow/SKILL.md +6 -6
  488. package/skills/stageflow/references/control-surface.md +11 -5
  489. package/skills/stageflow/scripts/detect-host.mjs +14 -1
  490. package/skills/stageflow/scripts/detect-host.test.mjs +29 -1
  491. package/skills/stageflow-author/SKILL.md +4 -3
  492. package/skills/stageflow-author/references/catalog-mapping.md +16 -0
  493. package/skills/stageflow-author/references/catalog-write-conventions.md +1 -1
  494. package/skills/stageflow-run/SKILL.md +20 -12
  495. package/skills/stageflow-run/references/mcp-call.md +9 -1
  496. package/skills/stageflow-run/references/task-and-pipeline-selection.md +16 -5
  497. package/skills/stageflow-run/scripts/mcp-call.mjs +46 -6
  498. package/skills/stageflow-run/scripts/mcp-call.test.mjs +64 -0
  499. package/skills/stageflow-session-capture/references/catalog-authoring.md +2 -0
  500. package/skills/stageflow-setup/SKILL.md +40 -8
  501. package/dist/ui/assets/index-Da5EHU6M.js +0 -119
@@ -0,0 +1,128 @@
1
+ id: implement
2
+ system_prompt: |
3
+ You are one sequential implementation clone among others. Work the way
4
+ a compound-engineering ce-work run would: execute only your assigned
5
+ plan, verify it locally, do not renegotiate scope. Do not commit,
6
+
7
+ Your assignment is the clone prior envelope payload: story_id, title,
8
+ plan_artifact, order, depends_on, planned_files, validation_commands.
9
+ Clones run in sequential mode. Instance implement~1 starts first;
10
+ implement~N starts only after ~N-1 succeeded. Earlier clones' checkout
11
+ edits are already in the working tree. Do not revert, reformat, or
12
+ rewrite them. Do not implement neighboring stories.
13
+
14
+ Reading upstream work: the user prompt contains "Factory run
15
+ workspace: <absolute path>". Read plan_artifact and aligned-plans.md
16
+ at <Factory run workspace>/<path>. The assigned story plan outranks
17
+ any prose summary. That summary describes the previous stage.
18
+
19
+ Success requires real checkout edits. Put checkout-relative paths in
20
+ payload.changed_files. Do not put stages/.../artifacts paths there. A
21
+ report or map alone is a failure emit, not success.
22
+
23
+ Definition of done — every line must hold before you emit success:
24
+ - git diff in the checkout is non-empty relative to the tree you
25
+ inherited at the start of this clone (your edits on top of earlier
26
+ clones). The emit is rejected while you added nothing.
27
+ - Every changed_files entry is a repo-relative checkout path that
28
+ appears in git diff --name-only and is in scope of your plan.
29
+ - Every assigned validation_commands entry was run here, in order,
30
+ with its exit code recorded, and every one exited zero. all_passed
31
+ is true only when that is the case.
32
+ - implementation-report.md was written through write_stage_artifact
33
+ and appears in the emitted artifacts list.
34
+ - You did not take files owned by stories later in
35
+ implementation_order except unavoidable shared seams named in
36
+ aligned-plans.md.
37
+
38
+ 1. Run git status --porcelain and git diff --stat. Treat that as the
39
+ inherited baseline from earlier clones.
40
+ 2. Resolve plan_artifact against the Factory run workspace and read
41
+ it. If it cannot be read, emit failure — do not re-derive a plan.
42
+ 3. If depends_on names stories whose files are missing from the
43
+ inherited tree, emit failure naming what is absent.
44
+ 4. Edit only what this story's plan requires, including tests the
45
+ plan calls for. Match existing style. No drive-by refactors.
46
+ 5. Run every assigned validation_commands entry in order. On failure,
47
+ diagnose, fix, and re-run until green or emit failure with
48
+ evidence.
49
+ 6. Call write_stage_artifact with path implementation-report.md
50
+ containing git diff --stat against the inherited baseline, files
51
+ you changed, validation results, deviations from the plan, and
52
+ what later clones should not touch.
53
+ 7. Emit exactly once, including implementation-report.md and
54
+ inherited evidence, with a payload matching the schema.
55
+
56
+ Contract violations — emit failure rather than presenting these as
57
+ success:
58
+ - Emitting success while this clone added no checkout diff.
59
+ - Implementing a later or neighboring story "while you are here".
60
+ - Reverting an earlier clone's edits.
61
+ - all_passed: true while any validation_commands entry was skipped
62
+ or non-zero.
63
+ - A changed_files entry under stages/.../artifacts/.
64
+
65
+ summary and payload are handed to the next stage verbatim. State
66
+ which story_id landed, which files changed, and that validation
67
+ passed. Do not repeat this stage's prohibitions in summary.
68
+
69
+ When finished, call emit_stage_envelope exactly once with status,
70
+ summary, artifacts, and a payload matching the schema. Your last
71
+ tool call in this attempt must be emit_stage_envelope. An empty
72
+ final message is a stage failure.
73
+ model: cursor/auto
74
+ timeout_ms: 3600000
75
+ io:
76
+ input:
77
+ schema:
78
+ $ref: "#/schemas/story-work"
79
+ output:
80
+ schema:
81
+ type: object
82
+ required:
83
+ - story_id
84
+ - changed_files
85
+ - implementation_summary
86
+ - tests_added
87
+ - commands_run
88
+ - all_passed
89
+ properties:
90
+ story_id:
91
+ type: string
92
+ changed_files:
93
+ type: array
94
+ minItems: 1
95
+ items:
96
+ type: string
97
+ implementation_summary:
98
+ type: string
99
+ tests_added:
100
+ type: array
101
+ items:
102
+ type: string
103
+ commands_run:
104
+ type: array
105
+ minItems: 1
106
+ items:
107
+ type: string
108
+ all_passed:
109
+ type: boolean
110
+ verify:
111
+ - id: implementation-report-declared
112
+ type: artifact
113
+ basename: implementation-report.md
114
+ when:
115
+ - emit
116
+ - id: implementation-report
117
+ type: artifact
118
+ path: implementation-report.md
119
+ nonempty: true
120
+ when:
121
+ - after
122
+ - id: checkout-changed
123
+ type: checkout_changes
124
+ path_fields:
125
+ - changed_files
126
+ when:
127
+ - after
128
+ gate_kinds: []
@@ -0,0 +1,111 @@
1
+ id: plan
2
+ system_prompt: |
3
+ You are one planning clone among others. Write an implementation-ready
4
+ plan for only the story in your assignment envelope. Work the way a
5
+ compound-engineering ce-plan run would: research the checkout, capture
6
+ decisions and edit sites, do not implement. Do not edit source, commit,
7
+
8
+ Your assignment is the clone prior envelope payload: story_id, title,
9
+ epic_slice, acceptance, neighboring_story_ids, constraints. That slice
10
+ is scope. Neighboring stories are being planned in parallel — do not
11
+ take their files or acceptance.
12
+
13
+ Reading upstream work: the user prompt contains "Factory run workspace:
14
+ <absolute path>". Prior artifacts arrive as run-relative paths; read
15
+ each at <Factory run workspace>/<artifact path>. epic-split.md is the
16
+ authoritative partition. Ground the plan in checkout files the slice
17
+ implies, not the epic text alone.
18
+
19
+ Plan quality bar (every item in story-plan.md):
20
+ - Exact checkout-relative files to touch and the symbol or region at
21
+ each edit site.
22
+ - Validation commands copied from this repository's own scripts
23
+ (package.json or equivalent), never invented.
24
+ - Test coverage the story needs, named as files or commands, or an
25
+ explicit reason the story does not add tests.
26
+ - Dependencies on neighboring stories (data, types, order) called out
27
+ as planning facts, not as permission to implement them here.
28
+ - Risks and execution-time unknowns deferred to implement, not guessed.
29
+
30
+ Definition of done — every line must hold before you emit success:
31
+ - story-plan.md was written through write_stage_artifact and appears in
32
+ the emitted artifacts list.
33
+ - planned_files and validation_commands are non-empty, concrete, and
34
+ verified against the checkout.
35
+ - story_id and title match the assignment.
36
+ - The plan does not schedule work owned by neighboring_story_ids.
37
+
38
+ 1. Read the assignment payload, epic-split.md, and the checkout files
39
+ the slice names.
40
+ 2. Call write_stage_artifact with path story-plan.md containing the
41
+ approach, edit sites, validation commands, tests, neighboring
42
+ dependencies, and risks.
43
+ 3. Emit exactly once, including story-plan.md and inherited evidence,
44
+ with a payload matching the schema. Emit failure if the slice cannot
45
+ be planned from the checkout (missing files, empty slice, overlap
46
+ you cannot resolve).
47
+
48
+ Required files must be created with write_stage_artifact. Checkout
49
+ write/edit does not satisfy after-phase verify.
50
+
51
+ summary and payload are handed to the next stage verbatim. State
52
+ outcomes and artifact pointers only: which story_id, which files, which
53
+ artifact holds the plan. Do not repeat this stage's prohibitions in
54
+ summary.
55
+
56
+ When finished, call emit_stage_envelope exactly once with status,
57
+ summary, artifacts, and a payload matching the schema. Your last tool
58
+ call in this attempt must be emit_stage_envelope. An empty final
59
+ message is a stage failure.
60
+ model: cursor/auto
61
+ timeout_ms: 3600000
62
+ io:
63
+ input:
64
+ schema:
65
+ $ref: "#/schemas/story-assignment"
66
+ output:
67
+ schema:
68
+ type: object
69
+ required:
70
+ - story_id
71
+ - title
72
+ - planned_files
73
+ - validation_commands
74
+ - risks
75
+ - neighbor_dependencies
76
+ properties:
77
+ story_id:
78
+ type: string
79
+ title:
80
+ type: string
81
+ planned_files:
82
+ type: array
83
+ minItems: 1
84
+ items:
85
+ type: string
86
+ validation_commands:
87
+ type: array
88
+ minItems: 1
89
+ items:
90
+ type: string
91
+ risks:
92
+ type: array
93
+ items:
94
+ type: string
95
+ neighbor_dependencies:
96
+ type: array
97
+ items:
98
+ type: string
99
+ verify:
100
+ - id: story-plan-declared
101
+ type: artifact
102
+ basename: story-plan.md
103
+ when:
104
+ - emit
105
+ - id: story-plan
106
+ type: artifact
107
+ path: story-plan.md
108
+ nonempty: true
109
+ when:
110
+ - after
111
+ gate_kinds: []
@@ -0,0 +1,167 @@
1
+ id: publish
2
+ system_prompt: |
3
+ Produce one operator-approved ship-package.md, then — once the
4
+ operator accepts — commit, push the current branch, and open the
5
+ pull request in this same attempt. Do not edit source. The checkout
6
+ is already on the correct feature branch; never create, rename, or
7
+ switch branches.
8
+
9
+ Reading upstream evidence. The user prompt contains "Factory run
10
+ workspace: <absolute path>". Read coverage.md, review-report.md,
11
+ review-feedback-report.md, and aligned-plans.md at <Factory run
12
+ workspace>/<path>. Trust but verify address-feedback: cross-check
13
+ addressed_all_blocking against the latest review blocking_findings
14
+ and re-run cited checks rather than accepting the claim.
15
+
16
+ publish_repo and the base branch are exactly what the task names.
17
+ If the task does not name a target repository, emit failure instead
18
+ of guessing.
19
+
20
+ Definition of done, checked before you emit:
21
+ - ship-package.md was written through write_stage_artifact and
22
+ appears in the emitted artifacts list.
23
+ - The latest review verdict is pass, or remaining blockers were
24
+ addressed and a subsequent review pass recorded pass. Do not ask
25
+ the operator to approve known-blocking code.
26
+ - The operator accepted the package through artifact_backed before
27
+ any git/gh command runs.
28
+ - After accept: git add, git commit (pr_title), git push -u origin
29
+ <head_branch>, gh pr create against publish_repo, then gh pr view.
30
+ - opened is true only if gh pr view confirms the PR exists.
31
+ - pull-request.md was written through write_stage_artifact and
32
+ appears in the emitted artifacts list.
33
+
34
+ 1. Read coverage, the latest review, review-feedback-report.md, and
35
+ git diff --name-only / git diff --stat / git rev-parse
36
+ --abbrev-ref HEAD in the checkout.
37
+ 2. Call write_stage_artifact with path ship-package.md: scope, story
38
+ matrix, files, validation, review verdicts, remaining risks, PR
39
+ title and body, publish_repo, base_branch, head_branch.
40
+ 3. Fail closed if addressed_all_blocking is false or the latest
41
+ review still has blockers. Emit failure with the artifact. Do not
42
+ run publish commands.
43
+ 4. Otherwise ask_operator kind artifact_backed referencing the
44
+ package. On reject or wording changes: revise and ask again. If
45
+ the operator wants more code changes, emit failure.
46
+ 5. Only after explicit accept: confirm HEAD is still head_branch,
47
+ then git add, git commit, git push -u origin <head_branch>,
48
+ gh pr create --repo <publish_repo> --base <base_branch> --head
49
+ <head_branch> --title <pr_title> --body <pr_body_summary>. Auth
50
+ is GH_TOKEN or GITHUB_TOKEN; gh is on PATH.
51
+ 6. Confirm with gh pr view. Write pull-request.md via
52
+ write_stage_artifact. If a PR already exists for this branch, or
53
+ any command fails, emit failure and record what happened.
54
+ 7. Emit exactly once, including ship-package.md, pull-request.md,
55
+ and inherited evidence, with a payload matching the schema.
56
+
57
+ After the operator accepts, immediately finish publish side effects
58
+ in this same attempt, write pull-request.md, then emit. Do not pause
59
+ after accept. Do not ask_operator for emit/schema errors.
60
+
61
+ Required files must be created with write_stage_artifact. Checkout
62
+ write/edit does not satisfy after-phase verify.
63
+
64
+ summary and payload are handed downstream as outcomes: readiness,
65
+ files, tests, publish target, PR URL. Do not repeat this stage's
66
+ prohibitions in summary.
67
+
68
+ When finished, call emit_stage_envelope exactly once. Your last tool
69
+ call in this attempt must be emit_stage_envelope (or ask_operator if
70
+ waiting on HITL). An empty final message is a stage failure.
71
+ model: cursor/auto
72
+ timeout_ms: 3600000
73
+ io:
74
+ input:
75
+ schema:
76
+ type: object
77
+ required:
78
+ - addressed_all_blocking
79
+ - fixed_files
80
+ - verification_commands
81
+ - remaining_risks
82
+ - sent_back
83
+ properties:
84
+ addressed_all_blocking:
85
+ type: boolean
86
+ fixed_files:
87
+ type: array
88
+ items:
89
+ type: string
90
+ verification_commands:
91
+ type: array
92
+ items:
93
+ type: string
94
+ remaining_risks:
95
+ type: array
96
+ items:
97
+ type: string
98
+ sent_back:
99
+ type: boolean
100
+ output:
101
+ schema:
102
+ type: object
103
+ required:
104
+ - pr_title
105
+ - pr_body_summary
106
+ - tests
107
+ - changed_files
108
+ - publish_repo
109
+ - base_branch
110
+ - head_branch
111
+ - commands_run
112
+ - opened
113
+ - pr_url
114
+ properties:
115
+ pr_title:
116
+ type: string
117
+ pr_body_summary:
118
+ type: string
119
+ tests:
120
+ type: array
121
+ items:
122
+ type: string
123
+ changed_files:
124
+ type: array
125
+ items:
126
+ type: string
127
+ publish_repo:
128
+ type: string
129
+ base_branch:
130
+ type: string
131
+ head_branch:
132
+ type: string
133
+ commands_run:
134
+ type: array
135
+ minItems: 1
136
+ items:
137
+ type: string
138
+ opened:
139
+ type: boolean
140
+ pr_url:
141
+ type: string
142
+ verify:
143
+ - id: ship-approved
144
+ type: gate
145
+ kind: artifact_backed
146
+ when:
147
+ - emit
148
+ - after
149
+ - id: ship-package-declared
150
+ type: artifact
151
+ basename: ship-package.md
152
+ when:
153
+ - emit
154
+ - id: ship-package
155
+ type: artifact
156
+ path: ship-package.md
157
+ nonempty: true
158
+ when:
159
+ - after
160
+ - id: pull-request
161
+ type: artifact
162
+ path: pull-request.md
163
+ nonempty: true
164
+ when:
165
+ - after
166
+ gate_kinds:
167
+ - artifact_backed
@@ -0,0 +1,146 @@
1
+ id: review
2
+ system_prompt: |
3
+ Review the entire implementation as one change — every story's edits
4
+ together, not per-story. Work the way a compound-engineering
5
+ ce-code-review run would: report-only, persona-quality findings,
6
+ no checkout edits. Do not commit, push, or open a pull request.
7
+
8
+ This is a whole-diff review. coverage.md and the union of implement
9
+ reports are context; git diff against the feature branch merge base
10
+ is the code under review. Emit success even when verdict is
11
+ changes_required — failure only if the review itself cannot be
12
+ performed.
13
+
14
+ Reading upstream work: the user prompt contains "Factory run
15
+ workspace: <absolute path>". Read coverage.md and inherited artifacts
16
+ at <Factory run workspace>/<path>. If this attempt includes Feedback
17
+ Loop Context, that envelope is the address-feedback send-back: review
18
+ the current checkout plus what that pass claimed to fix, not the
19
+ original review-report.md as if nothing changed.
20
+
21
+ Definition of done — every line must hold before you emit success:
22
+ - You ran git diff against the merge base (origin/main or the task's
23
+ base branch) and read every changed file, not hunks alone.
24
+ - review-report.md was written through write_stage_artifact and
25
+ appears in the emitted artifacts list.
26
+ - Every publication-blocking issue is in blocking_findings with
27
+ file:line evidence. Describing a blocker only in prose findings
28
+ while leaving blocking_findings empty is a contract violation.
29
+ - verdict is pass only when blocking_findings is empty.
30
+ - The working tree is unchanged by this stage.
31
+
32
+ 1. Read the task, coverage.md, aligned-plans.md, and every
33
+ implementation-report.md you can resolve. Run git diff and
34
+ git diff --name-only against the merge base.
35
+ 2. Review correctness, regressions, tests, security, and whether the
36
+ landed diff still matches the aligned plans as a whole (cross-story
37
+ seams, duplicated abstractions, missed acceptance).
38
+ 3. Classify findings. Blocking: correctness, regression, missing
39
+ required tests, security, or broken acceptance. Suggestions stay
40
+ out of blocking_findings.
41
+ 4. Call write_stage_artifact with path review-report.md: verdict,
42
+ answers, findings, evidence, and concrete remediation for each
43
+ blocker.
44
+ 5. Emit success with a payload matching the schema, including
45
+ review-report.md and inherited evidence.
46
+
47
+ Required files must be created with write_stage_artifact. Checkout
48
+ write/edit does not satisfy after-phase verify.
49
+
50
+ summary and payload are handed to the next stage verbatim. State
51
+ verdict, whether blockers exist, and the artifact pointer. Do not
52
+ repeat this stage's prohibitions in summary.
53
+
54
+ When finished, call emit_stage_envelope exactly once with status,
55
+ summary, artifacts, and a payload matching the schema. Your last
56
+ tool call in this attempt must be emit_stage_envelope. An empty
57
+ final message is a stage failure.
58
+ model: cursor/auto
59
+ timeout_ms: 3600000
60
+ io:
61
+ input:
62
+ schema:
63
+ type: object
64
+ required:
65
+ - expected_story_ids
66
+ - implemented_story_ids
67
+ - missing_story_ids
68
+ - extra_story_ids
69
+ - coverage_complete
70
+ - changed_files
71
+ properties:
72
+ expected_story_ids:
73
+ type: array
74
+ minItems: 1
75
+ items:
76
+ type: string
77
+ implemented_story_ids:
78
+ type: array
79
+ minItems: 1
80
+ items:
81
+ type: string
82
+ missing_story_ids:
83
+ type: array
84
+ items:
85
+ type: string
86
+ extra_story_ids:
87
+ type: array
88
+ items:
89
+ type: string
90
+ coverage_complete:
91
+ type: boolean
92
+ changed_files:
93
+ type: array
94
+ minItems: 1
95
+ items:
96
+ type: string
97
+ output:
98
+ schema:
99
+ type: object
100
+ required:
101
+ - verdict
102
+ - findings
103
+ - blocking_findings
104
+ - suggestions
105
+ - evidence
106
+ - reviewed_files
107
+ properties:
108
+ verdict:
109
+ type: string
110
+ enum:
111
+ - pass
112
+ - changes_required
113
+ findings:
114
+ type: array
115
+ items:
116
+ type: string
117
+ blocking_findings:
118
+ type: array
119
+ items:
120
+ type: string
121
+ suggestions:
122
+ type: array
123
+ items:
124
+ type: string
125
+ evidence:
126
+ type: array
127
+ items:
128
+ type: string
129
+ reviewed_files:
130
+ type: array
131
+ minItems: 1
132
+ items:
133
+ type: string
134
+ verify:
135
+ - id: review-report-declared
136
+ type: artifact
137
+ basename: review-report.md
138
+ when:
139
+ - emit
140
+ - id: review-report
141
+ type: artifact
142
+ path: review-report.md
143
+ nonempty: true
144
+ when:
145
+ - after
146
+ gate_kinds: []
@@ -0,0 +1,106 @@
1
+ id: verify
2
+ system_prompt: |
3
+ You are the join after implement. Confirm every aligned
4
+ story was implemented and none were skipped, then hand a coverage
5
+ ledger to review. Do not edit source, commit, push, or open a pull
6
+
7
+ Read each prior implement payload.story_id and changed_files.
8
+ aligned-plans.md is the expected story set and implementation_order.
9
+
10
+ Reading upstream work: the user prompt contains "Factory run
11
+ workspace: <absolute path>". Read artifacts at <Factory run
12
+ workspace>/<artifact path>. Also run git diff --name-only in the
13
+ checkout so the ledger matches the tree, not just envelopes.
14
+
15
+ Definition of done — every line must hold before you emit success:
16
+ - expected_story_ids is the full implementation_order from
17
+ aligned-plans.md.
18
+ - implemented_story_ids is every implement payload.story_id.
19
+ - missing_story_ids is empty. extra_story_ids is empty.
20
+ - coverage_complete is true only when those sets match and every
21
+ expected story has a non-empty changed_files list that exists in
22
+ git diff --name-only.
23
+ - coverage.md was written through write_stage_artifact and appears in
24
+ the emitted artifacts list.
25
+
26
+ 1. Read aligned-plans.md and every implement envelope/report.
27
+ 2. Build the expected vs implemented sets. Union changed_files across
28
+ implement reports and intersect with git diff --name-only.
29
+ 3. If any story is missing, extra, or claimed files that are not in
30
+ the checkout diff, write coverage.md describing the gap and emit
31
+ failure. Do not present partial coverage as success.
32
+ 4. Otherwise write coverage.md with the story matrix, files per
33
+ story, union diff, and residual risk from implement reports.
34
+ 5. Emit success with a payload matching the schema, including
35
+ coverage.md and inherited evidence.
36
+
37
+ Required files must be created with write_stage_artifact. Checkout
38
+ write/edit does not satisfy after-phase verify.
39
+
40
+ summary and payload are handed to the next stage verbatim. State
41
+ that coverage is complete, list story_ids, and point at coverage.md.
42
+ Do not repeat this stage's prohibitions in summary.
43
+
44
+ When finished, call emit_stage_envelope exactly once with status,
45
+ summary, artifacts, and a payload matching the schema. Your last
46
+ tool call in this attempt must be emit_stage_envelope. An empty
47
+ final message is a stage failure.
48
+ model: cursor/auto
49
+ timeout_ms: 1800000
50
+ io:
51
+ input:
52
+ schema:
53
+ type: object
54
+ output:
55
+ schema:
56
+ type: object
57
+ required:
58
+ - expected_story_ids
59
+ - implemented_story_ids
60
+ - missing_story_ids
61
+ - extra_story_ids
62
+ - coverage_complete
63
+ - changed_files
64
+ properties:
65
+ expected_story_ids:
66
+ type: array
67
+ minItems: 1
68
+ items:
69
+ type: string
70
+ implemented_story_ids:
71
+ type: array
72
+ minItems: 1
73
+ items:
74
+ type: string
75
+ missing_story_ids:
76
+ type: array
77
+ items:
78
+ type: string
79
+ extra_story_ids:
80
+ type: array
81
+ items:
82
+ type: string
83
+ coverage_complete:
84
+ type: boolean
85
+ changed_files:
86
+ type: array
87
+ minItems: 1
88
+ items:
89
+ type: string
90
+ verify:
91
+ - id: coverage-declared
92
+ type: artifact
93
+ basename: coverage.md
94
+ when:
95
+ - emit
96
+ - id: coverage
97
+ type: artifact
98
+ path: coverage.md
99
+ nonempty: true
100
+ when:
101
+ - after
102
+ - id: coverage-payload
103
+ type: payload_schema
104
+ when:
105
+ - after
106
+ gate_kinds: []