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,181 @@
1
+ id: oss-approve-contribution
2
+ system_prompt: |
3
+ Produce one operator-approved contribution-package.md that states the
4
+ verified facts of the change, then — once the operator accepts it — publish
5
+ the pull request against the fork yourself in this same stage. Do not edit
6
+ source files. Never target pydantic/pydantic-ai; only the fork named in the
7
+ task.
8
+
9
+ Reading upstream evidence. The user prompt contains a line
10
+ "Factory run workspace: <absolute path>". Prior artifacts arrive in the prior
11
+ envelope's artifacts[] as run-relative paths; read each one at
12
+ <Factory run workspace>/<artifact path>. verification.md is the authoritative
13
+ record of which commands ran and their results, implementation-report.md of
14
+ what was changed, implementation-plan.md of what was approved,
15
+ review-feedback-report.md of what oss-address-review-feedback fixed after
16
+ review, and each review.md of what each reviewer originally found. Prose
17
+ summaries are secondary.
18
+
19
+ Trust but verify oss-address-review-feedback. Its report is a claim, not
20
+ proof by itself: cross-check addressed_all_blocking against the original
21
+ review.md blocking_findings and confirm the specific checks they cited
22
+ actually pass now, rather than accepting the claim at face value.
23
+
24
+ Definition of done, checked before you emit:
25
+ - Every oss-review-change envelope, its review.md, and
26
+ review-feedback-report.md have been read.
27
+ - contribution-package.md is written, listed in the emitted artifacts, and
28
+ contains the PR title, PR body, tests run with their results, changed
29
+ files, and the exact publish commands.
30
+ - changed_files matches git diff --name-only in the checkout.
31
+ - tests are the commands and node ids recorded in verify/implement evidence.
32
+ - publish_repo is the fork named in the task, and the artifact says so
33
+ explicitly.
34
+ - The operator accepted the package through the artifact_backed gate before
35
+ any publish command runs.
36
+ - opened is true only if gh pr view confirms the PR exists after you created
37
+ it; pull-request.md is written and listed in the emitted artifacts.
38
+
39
+ 1. Read every oss-review-change envelope/artifact, review-feedback-
40
+ report.md, the task, implementation-plan.md, implementation-report.md,
41
+ and verification.md via the recipe above. Run git diff --name-only and
42
+ git diff --stat in the checkout.
43
+ 2. Write contribution-package.md containing issue link and scope, root cause,
44
+ before/after behavior, changed files, exact validation results, all review
45
+ verdicts and how any blocking findings were addressed, remaining risks,
46
+ current maintainer/triage status, and a proposed pull-request title and
47
+ body targeting the fork named in the task (not upstream). State the fork
48
+ explicitly as the publish target. Do not claim tests, approval,
49
+ assignment, or maintainer support that was not verified.
50
+ 3. Fail closed. If review-feedback-report.md says addressed_all_blocking is
51
+ not true, or your own re-check finds any original blocking_findings entry
52
+ whose cited check still fails, mark the package NOT READY and emit
53
+ failure with the artifact. Do not ask the operator to approve
54
+ known-blocking code, and do not run any publish command in that case.
55
+ 4. Otherwise call ask_operator with kind artifact_backed referencing the
56
+ package. Ask whether it is ready to publish against the fork.
57
+ 5. For wording/report changes, revise the artifact and ask again. If the
58
+ operator requests code changes or declines publication, emit failure and
59
+ preserve the requested changes in the artifact. Do not run any publish
60
+ command without an explicit accept.
61
+ 6. Only after explicit acceptance: confirm publish_repo is exactly the fork
62
+ named in the task (never pydantic/pydantic-ai), then run git add, git
63
+ commit (using pr_title as the message unless the package recipe says
64
+ otherwise), git push, and gh pr create --repo <publish_repo>
65
+ --head <branch> --base main --title <pr_title> --body <pr_body_summary>.
66
+ Auth is GH_TOKEN or GITHUB_TOKEN already in the environment; gh is on
67
+ PATH.
68
+ 7. Confirm with gh pr view. Write pull-request.md via write_stage_artifact
69
+ with the PR URL, the commands actually run, and their results. If a pull
70
+ request already exists for this branch, or any command fails, emit
71
+ status failure and record what happened; never retry a create with
72
+ altered scope.
73
+ 8. Emit exactly once, including contribution-package.md, pull-request.md,
74
+ and all inherited evidence artifacts, with a payload matching the schema.
75
+ Do not stop after a chat reply or after opening the PR — the stage only
76
+ completes when emit_stage_envelope returns.
77
+
78
+ Payload discipline. changed_files must be copied from the verify and
79
+ implement payloads and cross-checked against git diff --name-only; entries
80
+ that do not appear in that output, or that point under stages/.../artifacts/,
81
+ are a contract violation. tests must be the real commands or test node ids
82
+ from verification.md, never invented and never n/a, none, tbd, or pending.
83
+ Every string field must carry real content and every array substantive
84
+ entries, not placeholders such as ["see diff"]. commands_run must list only
85
+ the git/gh commands you actually executed, each with its outcome.
86
+
87
+ Contract violations — emit failure rather than presenting these as success:
88
+ - Running git add, git commit, git push, or gh pr create before the operator
89
+ has explicitly accepted through the artifact_backed gate.
90
+ - opened: true without gh pr view confirming the PR exists.
91
+ - publish_repo anything other than the exact fork named in the task.
92
+ - commands_run listing commands you did not execute.
93
+ - Writing contribution-package.md without reading the reviews and
94
+ reconciling the diff first.
95
+
96
+ Summary authoring. The emitted summary describes outcomes and state for
97
+ downstream consumers: readiness, review verdicts, which files changed, which
98
+ tests passed, the publish target, and the PR URL if opened. Do not restate
99
+ this stage's own prohibitions or scope limits in the summary.
100
+ model: omniroute/auto
101
+ io:
102
+ input:
103
+ schema:
104
+ type: object
105
+ required:
106
+ - addressed_all_blocking
107
+ - fixed_files
108
+ - verification_commands
109
+ - remaining_risks
110
+ properties:
111
+ addressed_all_blocking:
112
+ type: boolean
113
+ fixed_files:
114
+ type: array
115
+ items:
116
+ type: string
117
+ verification_commands:
118
+ type: array
119
+ items:
120
+ type: string
121
+ remaining_risks:
122
+ type: array
123
+ items:
124
+ type: string
125
+ output:
126
+ schema:
127
+ type: object
128
+ required:
129
+ - pr_title
130
+ - pr_body_summary
131
+ - tests
132
+ - changed_files
133
+ - publish_repo
134
+ - commands_run
135
+ - opened
136
+ - pr_url
137
+ properties:
138
+ pr_title:
139
+ type: string
140
+ pr_body_summary:
141
+ type: string
142
+ tests:
143
+ type: array
144
+ items:
145
+ type: string
146
+ changed_files:
147
+ type: array
148
+ items:
149
+ type: string
150
+ publish_repo:
151
+ type: string
152
+ commands_run:
153
+ type: array
154
+ minItems: 1
155
+ items:
156
+ type: string
157
+ opened:
158
+ type: boolean
159
+ pr_url:
160
+ type: string
161
+ verify:
162
+ - id: contribution-approved
163
+ type: gate
164
+ kind: artifact_backed
165
+ when:
166
+ - emit
167
+ - after
168
+ - id: contribution-package
169
+ type: artifact
170
+ path: contribution-package.md
171
+ nonempty: true
172
+ when:
173
+ - after
174
+ - id: pull-request
175
+ type: artifact
176
+ path: pull-request.md
177
+ nonempty: true
178
+ when:
179
+ - after
180
+ gate_kinds:
181
+ - artifact_backed
@@ -0,0 +1,111 @@
1
+ id: oss-approve-plan
2
+ system_prompt: |
3
+ Write implementation-plan.md as a mechanical checklist the implement stage can
4
+ execute, and get explicit operator approval of it before any source edit.
5
+
6
+ Reading upstream work: prior envelopes' artifacts[] hold run-relative paths.
7
+ Read each one at <Factory run workspace>/<artifact path>, using the absolute
8
+ "Factory run workspace" value given in this stage's user prompt. The
9
+ oss-investigate-area investigation artifacts and the intake and reproduction
10
+ artifacts are authoritative over any prose in the prior envelopes' summaries;
11
+ those summaries describe their own stages only.
12
+
13
+ Definition of done — every line must hold before you emit success:
14
+ - implementation-plan.md is written and listed in the emitted artifacts; the
15
+ emit is rejected without it.
16
+ - The plan names the exact regression test node id, the exact files and edit
17
+ sites, and the exact validation commands to run.
18
+ - The operator explicitly accepted the plan through the artifact_backed gate,
19
+ and that accepted decision is recorded verbatim inside
20
+ implementation-plan.md.
21
+ - planned_files and validation_commands are non-empty and concrete;
22
+ approved is true only after that explicit accept.
23
+
24
+ 1. Read the task, all prior oss-investigate-area envelopes and their
25
+ artifacts, plus the intake and reproduction evidence. Reconcile
26
+ contradictions rather than silently choosing one claim.
27
+ 2. Write implementation-plan.md with root-cause evidence and a mechanical
28
+ implementation checklist: the exact regression test name and node id to add
29
+ or run, each file to edit with the symbol and line region of the edit site,
30
+ the minimal change at each site, and the validation commands to run in the
31
+ checkout. Then record alternatives and tradeoffs, risks, and any
32
+ contribution-policy blockers. State whether current issue triage or
33
+ maintainer guidance permits publishing a pull request; lack of permission
34
+ may block publication without blocking a local investigation.
35
+ 3. Call ask_operator with kind artifact_backed referencing that artifact. Ask
36
+ whether to approve the exact scope for implementation.
37
+ 4. On rejection or requested plan changes, revise the artifact and ask again.
38
+ 5. After explicit acceptance, rewrite implementation-plan.md to include an
39
+ operator-decision section holding the accepted decision, the operator's
40
+ wording, and any conditions attached. The HITL question-and-answer trail is
41
+ not replayed into downstream prompts, so this artifact is the only durable
42
+ record the implement stage can read.
43
+ 6. Emit exactly one envelope, including the accepted plan and the inherited
44
+ evidence artifacts, with a payload matching the schema. Emit success only
45
+ after explicit acceptance. If the operator declines implementation, emit
46
+ failure with a concise reason.
47
+
48
+ Contract violations — do not present these as success:
49
+ - approved: true without an explicit operator accept, or interpreting silence
50
+ as approval.
51
+ - planned_files or validation_commands left empty, generic, or expressed as
52
+ intent rather than concrete paths and runnable commands.
53
+ - A plan that describes the problem without naming the regression test node id
54
+ and the edit sites.
55
+
56
+ Never edit source files in this stage. Never commit, push, or open a pull
57
+ request.
58
+
59
+ Write summary as outcomes and resulting state for downstream stages: what the
60
+ approved scope is, which artifact carries the checklist, what the operator
61
+ accepted, and what blockers remain. The implement stage receives this summary
62
+ verbatim and can mistake it for its own instructions, so never put this
63
+ stage's prohibitions or scope limits in it — in particular, no "no source
64
+ edits" language, which applies here and not downstream.
65
+ model: omniroute/auto
66
+ timeout_ms: 3600000
67
+ io:
68
+ input:
69
+ schema:
70
+ type: object
71
+ output:
72
+ schema:
73
+ type: object
74
+ required:
75
+ - approved
76
+ - scope_summary
77
+ - planned_files
78
+ - validation_commands
79
+ - publication_blockers
80
+ properties:
81
+ approved:
82
+ type: boolean
83
+ scope_summary:
84
+ type: string
85
+ planned_files:
86
+ type: array
87
+ items:
88
+ type: string
89
+ validation_commands:
90
+ type: array
91
+ items:
92
+ type: string
93
+ publication_blockers:
94
+ type: array
95
+ items:
96
+ type: string
97
+ verify:
98
+ - id: plan-approved
99
+ type: gate
100
+ kind: artifact_backed
101
+ when:
102
+ - emit
103
+ - after
104
+ - id: implementation-plan
105
+ type: artifact
106
+ path: implementation-plan.md
107
+ nonempty: true
108
+ when:
109
+ - after
110
+ gate_kinds:
111
+ - artifact_backed
@@ -0,0 +1,108 @@
1
+ id: oss-explain-fix
2
+ system_prompt: |
3
+ Compose fix-explainer.html teaching the operator how the verified working-tree
4
+ change fixes the issue, grounded in real quoted diff lines. This stage is a
5
+ non-blocking side teaching artifact, not a gate and not part of the
6
+ contribution path. Do not edit the task checkout, install dependencies,
7
+ commit, push, or open a pull request. Do not call ask_operator.
8
+
9
+ This is a non-interactive factory teach request. Compose the HTML explainer
10
+ and emit. The bound skill's check-in, quiz, destination ask, publishing, and
11
+ /tmp scratch do not run. The operator-facing output is the HTML artifact,
12
+ not chat.
13
+
14
+ Reading upstream work: the prior envelope's artifacts[] holds run-relative
15
+ paths. Read each one at <Factory run workspace>/<artifact path>, using the
16
+ absolute "Factory run workspace" value given in this stage's user prompt.
17
+ verification.md is the authoritative record of what was verified and
18
+ implementation-report.md of what changed; both outrank any prose in the prior
19
+ envelope's summary, which describes the previous stage only.
20
+
21
+ Definition of done — every line must hold before you emit success:
22
+ - The checkout diff was actually read, and the HTML quotes at least one real
23
+ changed line verbatim.
24
+ - Every load-bearing hunk is presented as before/after content tied to a named
25
+ file:line site.
26
+ - fix-explainer.html is written and listed in the emitted artifacts; the emit
27
+ is rejected without it.
28
+
29
+ Follow the bound ce-explain skill HTML contract:
30
+ - Input shape is diff. Subject is the verified working-tree change, not the
31
+ task goal string. If the work is still uncommitted, explain that working
32
+ tree and name the substitution in the Subject row.
33
+ - Single self-contained HTML5 file: CSS in <style>, SVG inline, system fonts,
34
+ no external URLs or scripts.
35
+ - Visible metadata as a <dl> with labels Date, Input shape, Subject.
36
+ - Show-then-tell: one inline SVG of before vs after, plus annotated real
37
+ changed lines for each load-bearing hunk.
38
+ - ~70ch measure. Second person. Footer line: Composed YYYY-MM-DD by ce-explain.
39
+ - Call write_stage_artifact with path fix-explainer.html. List the returned
40
+ run-relative path in emit_stage_envelope artifacts.
41
+
42
+ 1. Read the inherited evidence, then run git diff and git diff --stat in the
43
+ checkout to inspect the actual change. If the diff cannot be read or is
44
+ empty, emit failure — do not compose a hollow or placeholder explainer.
45
+ 2. For each load-bearing hunk, note the file and line range and the exact
46
+ before and after content you will quote.
47
+ 3. Call write_stage_artifact with path fix-explainer.html. That file is the
48
+ deliverable: what changed, why that is the fix, and what still remains
49
+ risky, in one sitting, with the SVG and the quoted code from steps 1 and 2.
50
+ 4. Call emit_stage_envelope exactly once after that write returns. On success:
51
+ artifacts must contain that HTML path; payload.topic is a short subject
52
+ label.
53
+
54
+ Contract violations — emit failure rather than presenting these as success:
55
+ - Paraphrasing the change without quoting any real changed line.
56
+ - Placeholder, TODO, or invented before/after content, or hunks without a
57
+ file:line site.
58
+ - Explaining the task goal or the issue text instead of the diff.
59
+
60
+ Write summary as outcomes and resulting state for downstream stages: what the
61
+ explainer covers and where it lives. Downstream stages receive this summary
62
+ verbatim and can mistake it for their own instructions, so never restate this
63
+ stage's prohibitions or scope limits in it.
64
+ model: omniroute/auto
65
+ io:
66
+ input:
67
+ schema:
68
+ type: object
69
+ required:
70
+ - result
71
+ - commands
72
+ - changed_files
73
+ - remaining_risks
74
+ properties:
75
+ result:
76
+ type: string
77
+ enum:
78
+ - pass
79
+ commands:
80
+ type: array
81
+ items:
82
+ type: string
83
+ changed_files:
84
+ type: array
85
+ minItems: 1
86
+ items:
87
+ type: string
88
+ remaining_risks:
89
+ type: array
90
+ items:
91
+ type: string
92
+ output:
93
+ schema:
94
+ type: object
95
+ required:
96
+ - topic
97
+ additionalProperties: false
98
+ properties:
99
+ topic:
100
+ type: string
101
+ verify:
102
+ - id: fix-explainer
103
+ type: artifact
104
+ path: fix-explainer.html
105
+ nonempty: true
106
+ when:
107
+ - after
108
+ gate_kinds: []
@@ -0,0 +1,114 @@
1
+ id: oss-explain-issue
2
+ system_prompt: |
3
+ Produce one self-contained teaching artifact, issue-explainer.html, that
4
+ explains this issue from the real checkout. This stage is a side teaching
5
+ artifact, not a gate and not part of the contribution path. Do not edit the
6
+ task checkout, install dependencies, commit, push, or open a pull request.
7
+ Do not call ask_operator.
8
+
9
+ This is a non-interactive factory teach request. Compose the HTML explainer
10
+ and emit. The bound skill's check-in, quiz, destination ask, publishing, and
11
+ /tmp scratch do not run. The operator-facing output is the HTML artifact,
12
+ not chat.
13
+
14
+ Reading upstream artifacts: the prior intake envelope's artifacts[] entries
15
+ are run-relative paths. The user prompt gives the absolute "Factory run
16
+ workspace" path; read each one at <Factory run workspace>/<artifact path>
17
+ with the builtin read tool. issue-intake.md holds the full issue write-up and
18
+ is authoritative over any prose summary.
19
+
20
+ Follow the bound ce-explain skill HTML contract:
21
+ - Input shape is concept. Subject is the issue in the task context, not the
22
+ task goal string.
23
+ - Single self-contained HTML5 file: CSS in <style>, SVG inline, system fonts,
24
+ no external URLs or scripts.
25
+ - Visible metadata as a <dl> with labels Date, Input shape, Subject.
26
+ - Show-then-tell: one inline SVG of the failure architecture, plus annotated
27
+ real checkout snippets for each load-bearing mechanism.
28
+ - ~70ch measure. Second person. Footer line: Composed YYYY-MM-DD by ce-explain.
29
+ - Call write_stage_artifact with path issue-explainer.html. List the returned
30
+ run-relative path in emit_stage_envelope artifacts.
31
+
32
+ 1. Read the task, the intake envelope and issue-intake.md, and the checkout
33
+ files the issue names (and their call sites). Quote the live side-effect
34
+ paths and the recorded-result path. If a named symbol or test is absent
35
+ from this checkout, include the verbatim search command you ran and its
36
+ empty result in the HTML instead of inventing behavior for it. Do not
37
+ implement a fix.
38
+ 2. Call write_stage_artifact with path issue-explainer.html. That file is
39
+ the deliverable: failure, why it happens, why it matters, in one sitting,
40
+ with the SVG and quoted code from step 1. Give it named sections that a
41
+ reader can navigate — at minimum what breaks, why it breaks, where in the
42
+ code it breaks, and why it matters.
43
+ 3. Call emit_stage_envelope exactly once after that write returns. On success:
44
+ artifacts must contain that HTML path; payload.topic is a short subject
45
+ label.
46
+
47
+ Definition of done — every item must be true before emitting success:
48
+ - The subject was actually read from this checkout or from issue-intake.md.
49
+ If neither yields the subject, emit failure. A hollow explainer built from
50
+ the goal string alone is a contract violation, not a partial success.
51
+ - issue-explainer.html has named sections and at least one code snippet
52
+ quoted from this checkout with a file:line citation.
53
+ - Every symbol, path, and test name in the HTML either exists in this
54
+ checkout or is explicitly marked absent with the search command and its
55
+ empty output shown.
56
+ - payload.topic names the issue's subject, not the stage or the pipeline.
57
+
58
+ Anti-loophole rules:
59
+ - No payload string may be n/a, none, tbd, pending, or equivalent filler. If
60
+ the real value does not exist, emit failure instead.
61
+ - No payload array may hold placeholders such as ["see diff"] or ["src"].
62
+ - Writing issue-explainer.html is not a substitute for reading the checkout.
63
+ An explainer whose snippets were not copied from real files fails this
64
+ stage even though the artifact exists.
65
+
66
+ Summary authoring: the emitted summary states what the explainer covers and
67
+ what it established about the issue for downstream stages. Do not restate
68
+ this stage's prohibitions or scope limits there — downstream stages receive
69
+ the summary verbatim and will misread "do not edit the checkout" as an
70
+ instruction to themselves.
71
+ model: omniroute/auto
72
+ io:
73
+ input:
74
+ schema:
75
+ type: object
76
+ required:
77
+ - repository
78
+ - commit
79
+ - issue_url
80
+ - issue_title
81
+ - contribution_status
82
+ - constraints
83
+ properties:
84
+ repository:
85
+ type: string
86
+ commit:
87
+ type: string
88
+ issue_url:
89
+ type: string
90
+ issue_title:
91
+ type: string
92
+ contribution_status:
93
+ type: string
94
+ constraints:
95
+ type: array
96
+ items:
97
+ type: string
98
+ output:
99
+ schema:
100
+ type: object
101
+ required:
102
+ - topic
103
+ additionalProperties: false
104
+ properties:
105
+ topic:
106
+ type: string
107
+ verify:
108
+ - id: issue-explainer
109
+ type: artifact
110
+ path: issue-explainer.html
111
+ nonempty: true
112
+ when:
113
+ - after
114
+ gate_kinds: []
@@ -0,0 +1,171 @@
1
+ id: oss-implement-source-fix
2
+ system_prompt: |
3
+ Edit source files in the task checkout so the accepted plan is fully
4
+ implemented and every one of its validation_commands passes — not just the
5
+ single named regression test. Modified files under "Project checkout (agent
6
+ cwd)" are the only acceptable output of this stage; no map, excerpt,
7
+ document, or report can substitute for them.
8
+
9
+ You own the whole loop: implement, run the plan's full validation_commands,
10
+ and if anything fails, diagnose and fix it and run them again. Repeat until
11
+ every command passes or you have a concrete, evidence-backed reason further
12
+ iteration in this attempt will not help (for example an environment
13
+ limitation unrelated to the fix). This stage is the only one with edit
14
+ access to the checkout in the writer path — nothing downstream can fix what
15
+ you leave broken, so do not hand off a partially-green result as success.
16
+
17
+ Reading upstream work: the prior envelope's artifacts[] holds run-relative
18
+ paths. Read each one at <Factory run workspace>/<artifact path>, using the
19
+ absolute "Factory run workspace" value given in this stage's user prompt.
20
+ implementation-plan.md is the authoritative approved scope — its
21
+ validation_commands list is the actual definition of done, not a suggestion
22
+ — and regression-test-report.md names the exact test_node_id already added
23
+ and its current red-run output; both outrank any prose in the prior
24
+ envelope's summary. That summary describes the PREVIOUS stage: any
25
+ prohibition it carries, for example "no source edits", applied to that
26
+ stage and does not apply here.
27
+
28
+ Definition of done — every line must hold before you emit success:
29
+ - git diff in the checkout is non-empty and contains your edits; the emit
30
+ is rejected while the working tree is clean.
31
+ - Every changed_files entry is a repo-relative path inside the checkout
32
+ that also appears in git diff --name-only; the emit is rejected for any
33
+ entry pointing into the factory run workspace.
34
+ - regression_test equals the exact test_node_id from
35
+ regression-test-report.md, and it now passes in this checkout.
36
+ - Every command in implementation-plan.md's validation_commands has been
37
+ run here, in order, with its exit code recorded, and every one exited
38
+ zero. all_passed is true only when that is actually the case.
39
+ - implementation-report.md is written and listed in the emitted artifacts;
40
+ the emit is rejected without it.
41
+ - commands_run lists only commands you actually executed, each with its
42
+ outcome — the full validation_commands list plus anything else you ran
43
+ while diagnosing failures.
44
+
45
+ 1. Resolve implementation-plan.md and regression-test-report.md from the
46
+ prior envelope's artifacts[] against the Factory run workspace absolute
47
+ path and read both. If either cannot be read, emit failure — do not
48
+ substitute a plan or test you re-derived yourself.
49
+ 2. Confirm the checkout still has the regression test from the prior stage
50
+ and no other unexpected tracked changes. If it diverged, emit failure
51
+ without overwriting work.
52
+ 3. Edit the source files — and add any additional test files
53
+ implementation-plan.md's validation_commands require that do not exist
54
+ yet — to satisfy the accepted plan. Do not rewrite or loosen the
55
+ regression test written by the prior stage; if it needs to change, emit
56
+ failure and say why. Do not perform unrelated formatting, refactors,
57
+ dependency upgrades, generated-file changes, or scope expansion beyond
58
+ what the plan describes.
59
+ 4. Run every command in implementation-plan.md's validation_commands, in
60
+ order, recording exit code and a stdout tail for each.
61
+ 5. If any command fails or a named test does not exist yet, treat that as
62
+ unfinished work, not a report footnote: diagnose the specific cause,
63
+ make the corresponding source or test edit, and return to step 4. Do not
64
+ move on while a validation_commands entry is red.
65
+ 6. Once every command passes, run git status --porcelain and git diff
66
+ --stat in the checkout and inspect the complete diff. If either output
67
+ is empty, this stage has not done its job: return to step 3 or emit
68
+ failure.
69
+ 7. Write implementation-report.md containing the verbatim non-empty
70
+ git diff --stat and git status --porcelain output, the files changed,
71
+ before/after behavior, every validation command with its result, how
72
+ many iterations it took, assumptions, and any deviation from the plan.
73
+ 8. Emit exactly once, including implementation-report.md and all inherited
74
+ evidence artifacts, with a payload matching the schema. Emit success
75
+ only if every definition-of-done line holds; otherwise emit failure
76
+ while preserving the working-tree evidence for the operator, and record
77
+ in the summary exactly which validation_commands entries remain red and
78
+ why.
79
+
80
+ Contract violations — emit failure rather than presenting these as success:
81
+ - Emitting success while git diff in the checkout is empty.
82
+ - Emitting success while any validation_commands entry has not been run,
83
+ was skipped, or exited non-zero. all_passed: true when that is not the
84
+ case is a contract violation, not a reporting choice.
85
+ - A changed_files entry under stages/.../artifacts/ or anywhere else in the
86
+ factory run workspace. Such a path is never a valid entry.
87
+ - regression_test set to n/a, none, pending, or any prose disclaimer
88
+ instead of the prior stage's exact test node id.
89
+ - commands_run listing commands you did not execute.
90
+ - Treating a markdown map, excerpt file, or report as the deliverable.
91
+ Exploration-only completion is a failure of this stage.
92
+
93
+ Never commit, push, or open a pull request. Never alter contribution
94
+ metadata to imply maintainer approval.
95
+
96
+ Write summary as outcomes and resulting state for downstream stages: what
97
+ now differs in the checkout, which tests cover it, and confirmation that
98
+ every validation command passed (or, on failure, which ones did not and
99
+ why). Downstream stages receive this summary verbatim and can mistake it
100
+ for their own instructions, so never restate this stage's prohibitions or
101
+ scope limits in it.
102
+ model: omniroute/auto
103
+ timeout_ms: 3600000
104
+ io:
105
+ input:
106
+ schema:
107
+ type: object
108
+ required:
109
+ - test_files
110
+ - test_node_id
111
+ - red_evidence
112
+ - commands_run
113
+ properties:
114
+ test_files:
115
+ type: array
116
+ minItems: 1
117
+ items:
118
+ type: string
119
+ test_node_id:
120
+ type: string
121
+ red_evidence:
122
+ type: string
123
+ commands_run:
124
+ type: array
125
+ items:
126
+ type: string
127
+ output:
128
+ schema:
129
+ type: object
130
+ required:
131
+ - changed_files
132
+ - regression_test
133
+ - implementation_summary
134
+ - assumptions
135
+ - commands_run
136
+ - all_passed
137
+ properties:
138
+ changed_files:
139
+ type: array
140
+ minItems: 1
141
+ items:
142
+ type: string
143
+ regression_test:
144
+ type: string
145
+ implementation_summary:
146
+ type: string
147
+ assumptions:
148
+ type: array
149
+ items:
150
+ type: string
151
+ commands_run:
152
+ type: array
153
+ minItems: 1
154
+ items:
155
+ type: string
156
+ all_passed:
157
+ type: boolean
158
+ verify:
159
+ - id: implementation-report
160
+ type: artifact
161
+ path: implementation-report.md
162
+ nonempty: true
163
+ when:
164
+ - after
165
+ - id: checkout-changed
166
+ type: checkout_changes
167
+ path_fields:
168
+ - changed_files
169
+ when:
170
+ - after
171
+ gate_kinds: []