stageflow 0.25.0 → 0.30.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 (681) hide show
  1. package/README.md +14 -3
  2. package/builtin-skills/browser/SKILL.md +42 -0
  3. package/dist/a2a/contracts.d.ts +1 -0
  4. package/dist/a2a/contracts.js +1 -0
  5. package/dist/a2a/registry.d.ts +2 -0
  6. package/dist/a2a/registry.js +20 -1
  7. package/dist/a2a/server.d.ts +7 -0
  8. package/dist/a2a/server.js +5 -2
  9. package/dist/a2a/service.d.ts +1 -1
  10. package/dist/a2a/service.js +57 -8
  11. package/dist/a2a/store.d.ts +8 -5
  12. package/dist/a2a/store.js +24 -67
  13. package/dist/agent/activity.d.ts +3 -0
  14. package/dist/agent/bootProviderConfig.d.ts +21 -0
  15. package/dist/agent/bootProviderConfig.js +74 -0
  16. package/dist/agent/claudeAdapter.js +2 -2
  17. package/dist/agent/cursorProvider.d.ts +2 -0
  18. package/dist/agent/cursorProvider.js +30 -5
  19. package/dist/agent/fakeAgent.d.ts +1 -0
  20. package/dist/agent/fakeAgent.js +13 -0
  21. package/dist/agent/piAdapter.d.ts +11 -24
  22. package/dist/agent/piAdapter.js +107 -50
  23. package/dist/agent/piIsolatedMcp.d.ts +2 -0
  24. package/dist/agent/piIsolatedMcp.js +10 -2
  25. package/dist/agent/piSessionFactory.d.ts +38 -0
  26. package/dist/agent/piSessionFactory.js +60 -0
  27. package/dist/agent/port.d.ts +8 -0
  28. package/dist/agent/streamLogRedact.d.ts +7 -1
  29. package/dist/agent/streamLogRedact.js +26 -11
  30. package/dist/browser/anchor.d.ts +27 -0
  31. package/dist/browser/anchor.js +127 -0
  32. package/dist/browser/auditSink.d.ts +38 -0
  33. package/dist/browser/auditSink.js +34 -0
  34. package/dist/browser/browserHost.d.ts +86 -0
  35. package/dist/browser/browserHost.js +7 -0
  36. package/dist/browser/browserSweep.d.ts +14 -0
  37. package/dist/browser/browserSweep.js +54 -0
  38. package/dist/browser/browserTeardown.d.ts +56 -0
  39. package/dist/browser/browserTeardown.js +235 -0
  40. package/dist/browser/fakeRemoteBrowserHost.d.ts +2 -0
  41. package/dist/browser/fakeRemoteBrowserHost.js +34 -0
  42. package/dist/browser/gateHandoff.d.ts +25 -0
  43. package/dist/browser/gateHandoff.js +83 -0
  44. package/dist/browser/humanLogin.d.ts +18 -0
  45. package/dist/browser/humanLogin.js +34 -0
  46. package/dist/browser/keyProvider.d.ts +10 -0
  47. package/dist/browser/keyProvider.js +39 -0
  48. package/dist/browser/localBrowserHost.d.ts +10 -0
  49. package/dist/browser/localBrowserHost.js +152 -0
  50. package/dist/browser/localProfileLock.d.ts +2 -0
  51. package/dist/browser/localProfileLock.js +218 -0
  52. package/dist/browser/localProfileStore.d.ts +5 -0
  53. package/dist/browser/localProfileStore.js +91 -0
  54. package/dist/browser/loginCheck.d.ts +53 -0
  55. package/dist/browser/loginCheck.js +147 -0
  56. package/dist/browser/memoryProfileLock.d.ts +2 -0
  57. package/dist/browser/memoryProfileLock.js +53 -0
  58. package/dist/browser/memoryProfileStore.d.ts +2 -0
  59. package/dist/browser/memoryProfileStore.js +31 -0
  60. package/dist/browser/navigationAudit.d.ts +16 -0
  61. package/dist/browser/navigationAudit.js +53 -0
  62. package/dist/browser/persistedEnv.d.ts +3 -0
  63. package/dist/browser/persistedEnv.js +15 -0
  64. package/dist/browser/profileLock.d.ts +40 -0
  65. package/dist/browser/profileLock.js +10 -0
  66. package/dist/browser/profileStore.d.ts +23 -0
  67. package/dist/browser/profileStore.js +39 -0
  68. package/dist/browser/runLiveness.d.ts +13 -0
  69. package/dist/browser/runLiveness.js +39 -0
  70. package/dist/browser/sitePolicy.d.ts +10 -0
  71. package/dist/browser/sitePolicy.js +61 -0
  72. package/dist/browser/stageBrowserEnv.d.ts +22 -0
  73. package/dist/browser/stageBrowserEnv.js +147 -0
  74. package/dist/browser/stageProfileLock.d.ts +17 -0
  75. package/dist/browser/stageProfileLock.js +39 -0
  76. package/dist/cli/artifactCommand.js +9 -16
  77. package/dist/cli/backupCommand.d.ts +9 -0
  78. package/dist/cli/backupCommand.js +111 -0
  79. package/dist/cli/browserCommand.d.ts +44 -0
  80. package/dist/cli/browserCommand.js +472 -0
  81. package/dist/cli/debugRunCommand.d.ts +10 -0
  82. package/dist/cli/debugRunCommand.js +109 -0
  83. package/dist/cli/doctorCommand.d.ts +32 -0
  84. package/dist/cli/doctorCommand.js +453 -0
  85. package/dist/cli/envelopeCommand.js +9 -2
  86. package/dist/cli/exportAllCommand.d.ts +55 -0
  87. package/dist/cli/exportAllCommand.js +218 -0
  88. package/dist/cli/exportRunCommand.js +23 -21
  89. package/dist/cli/hostClient.d.ts +41 -3
  90. package/dist/cli/hostClient.js +129 -14
  91. package/dist/cli/initCommand.d.ts +1 -0
  92. package/dist/cli/initCommand.js +23 -7
  93. package/dist/cli/initTemplates.d.ts +5 -2
  94. package/dist/cli/initTemplates.js +32 -2
  95. package/dist/cli/resolveSafeOutPath.d.ts +2 -0
  96. package/dist/cli/resolveSafeOutPath.js +40 -0
  97. package/dist/cli/restoreCommand.d.ts +10 -0
  98. package/dist/cli/restoreCommand.js +90 -0
  99. package/dist/cli/runCommand.d.ts +3 -2
  100. package/dist/cli/runCommand.js +93 -11
  101. package/dist/cli/runOutput.d.ts +4 -0
  102. package/dist/cli/runOutput.js +33 -7
  103. package/dist/cli/runStageCommand.d.ts +1 -0
  104. package/dist/cli/runStageCommand.js +44 -25
  105. package/dist/cli/runsCommand.d.ts +1 -1
  106. package/dist/cli/runsCommand.js +168 -10
  107. package/dist/cli/triggerCommand.d.ts +12 -0
  108. package/dist/cli/triggerCommand.js +183 -0
  109. package/dist/cli/validateCommand.d.ts +1 -1
  110. package/dist/cli/validateCommand.js +23 -6
  111. package/dist/cli.js +202 -32
  112. package/dist/config/browseCatalog.d.ts +1 -0
  113. package/dist/config/browseCatalog.js +5 -4
  114. package/dist/config/builtinSkills.d.ts +4 -0
  115. package/dist/config/builtinSkills.js +23 -0
  116. package/dist/config/catalogRelativePath.d.ts +63 -0
  117. package/dist/config/catalogRelativePath.js +126 -0
  118. package/dist/config/configOrigin.d.ts +27 -0
  119. package/dist/config/configOrigin.js +59 -0
  120. package/dist/config/createTrigger.d.ts +27 -0
  121. package/dist/config/createTrigger.js +232 -0
  122. package/dist/config/draftPackage.d.ts +117 -0
  123. package/dist/config/draftPackage.js +550 -0
  124. package/dist/config/ensureCatalogScanRoot.d.ts +16 -0
  125. package/dist/config/ensureCatalogScanRoot.js +73 -0
  126. package/dist/config/hostConfig.d.ts +57 -0
  127. package/dist/config/hostConfig.js +360 -0
  128. package/dist/config/listSkills.d.ts +26 -0
  129. package/dist/config/listSkills.js +206 -5
  130. package/dist/config/loadOutcome.d.ts +7 -1
  131. package/dist/config/loadPipeline.js +39 -2
  132. package/dist/config/loadStage.js +25 -0
  133. package/dist/config/loadStageflowManifest.js +25 -0
  134. package/dist/config/loadTask.d.ts +2 -0
  135. package/dist/config/loadTask.js +57 -18
  136. package/dist/config/loadTrigger.d.ts +9 -0
  137. package/dist/config/loadTrigger.js +120 -0
  138. package/dist/config/materializeStageModels.js +5 -1
  139. package/dist/config/mergePipelineIncludes.d.ts +3 -0
  140. package/dist/config/mergePipelineIncludes.js +19 -0
  141. package/dist/config/migrateYaml.js +6 -11
  142. package/dist/config/multiProjectCatalog.d.ts +32 -0
  143. package/dist/config/multiProjectCatalog.js +150 -0
  144. package/dist/config/normalizePipelineStageEntry.js +27 -1
  145. package/dist/config/parseCompletionContract.js +6 -0
  146. package/dist/config/pipelineStageKeys.js +3 -0
  147. package/dist/config/publishDraftPackage.d.ts +7 -0
  148. package/dist/config/publishDraftPackage.js +25 -0
  149. package/dist/config/resolveCatalogContext.js +1 -1
  150. package/dist/config/resolveCatalogRoots.d.ts +27 -0
  151. package/dist/config/resolveCatalogRoots.js +76 -0
  152. package/dist/config/resolveModel.d.ts +7 -1
  153. package/dist/config/resolveModel.js +11 -1
  154. package/dist/config/resolvePipelineDag.js +1 -1
  155. package/dist/config/resolveStageMcpServers.d.ts +9 -1
  156. package/dist/config/resolveStageMcpServers.js +36 -9
  157. package/dist/config/scanCatalogPaths.d.ts +1 -1
  158. package/dist/config/scanCatalogPaths.js +6 -2
  159. package/dist/config/secretFromEnvOrFile.d.ts +9 -0
  160. package/dist/config/secretFromEnvOrFile.js +34 -0
  161. package/dist/config/seededCatalog.d.ts +11 -0
  162. package/dist/config/seededCatalog.js +29 -0
  163. package/dist/config/stageBrowser.d.ts +12 -0
  164. package/dist/config/stageBrowser.js +118 -0
  165. package/dist/config/toolRequires.d.ts +24 -0
  166. package/dist/config/toolRequires.js +115 -0
  167. package/dist/config/triggerCatalog.d.ts +10 -0
  168. package/dist/config/triggerCatalog.js +37 -0
  169. package/dist/config/validateCatalog.d.ts +17 -3
  170. package/dist/config/validateCatalog.js +223 -3
  171. package/dist/config/validateCompletionContract.js +8 -0
  172. package/dist/diagnostics/checks.d.ts +39 -0
  173. package/dist/diagnostics/checks.js +135 -0
  174. package/dist/envelope/preEmitChecks.d.ts +1 -1
  175. package/dist/envelope/preEmitChecks.js +8 -0
  176. package/dist/errors/codes.d.ts +14 -0
  177. package/dist/errors/codes.js +59 -0
  178. package/dist/git/cache.d.ts +14 -0
  179. package/dist/git/cache.js +150 -0
  180. package/dist/git/credentials.d.ts +9 -0
  181. package/dist/git/credentials.js +88 -0
  182. package/dist/git/errors.d.ts +20 -0
  183. package/dist/git/errors.js +94 -0
  184. package/dist/git/exec.d.ts +16 -0
  185. package/dist/git/exec.js +135 -0
  186. package/dist/git/operations.d.ts +29 -0
  187. package/dist/git/operations.js +153 -0
  188. package/dist/git/version.d.ts +1 -0
  189. package/dist/git/version.js +10 -0
  190. package/dist/logging/audit.d.ts +16 -0
  191. package/dist/logging/audit.js +19 -0
  192. package/dist/logging/commonWords.d.ts +2 -0
  193. package/dist/logging/commonWords.js +13 -0
  194. package/dist/logging/logger.d.ts +49 -0
  195. package/dist/logging/logger.js +193 -0
  196. package/dist/logging/namedSecrets.d.ts +6 -0
  197. package/dist/logging/namedSecrets.js +58 -0
  198. package/dist/logging/redact.d.ts +17 -0
  199. package/dist/logging/redact.js +105 -0
  200. package/dist/mcp/catalogTools.js +492 -81
  201. package/dist/mcp/checkoutTools.d.ts +52 -0
  202. package/dist/mcp/checkoutTools.js +332 -0
  203. package/dist/mcp/controlTools.js +182 -6
  204. package/dist/mcp/deps.d.ts +3 -0
  205. package/dist/mcp/getStartedTool.d.ts +3 -0
  206. package/dist/mcp/getStartedTool.js +62 -0
  207. package/dist/mcp/readArtifact.d.ts +11 -0
  208. package/dist/mcp/readArtifact.js +46 -30
  209. package/dist/mcp/server.js +2 -0
  210. package/dist/mcp/tools.js +6 -0
  211. package/dist/mcp/triggerTools.d.ts +3 -0
  212. package/dist/mcp/triggerTools.js +176 -0
  213. package/dist/net/proxy.d.ts +14 -0
  214. package/dist/net/proxy.js +78 -0
  215. package/dist/operatorAgent/docsRetrieval.d.ts +40 -0
  216. package/dist/operatorAgent/docsRetrieval.js +269 -0
  217. package/dist/operatorAgent/draftContext.d.ts +16 -0
  218. package/dist/operatorAgent/draftContext.js +68 -0
  219. package/dist/operatorAgent/fakeHost.d.ts +39 -0
  220. package/dist/operatorAgent/fakeHost.js +92 -0
  221. package/dist/operatorAgent/host.d.ts +40 -0
  222. package/dist/operatorAgent/host.js +179 -0
  223. package/dist/operatorAgent/index.d.ts +9 -0
  224. package/dist/operatorAgent/index.js +8 -0
  225. package/dist/operatorAgent/piModel.d.ts +80 -0
  226. package/dist/operatorAgent/piModel.js +528 -0
  227. package/dist/operatorAgent/profiles/workshopAuthor.d.ts +23 -0
  228. package/dist/operatorAgent/profiles/workshopAuthor.js +338 -0
  229. package/dist/operatorAgent/profiles/workshopAuthorPlaybook.d.ts +6 -0
  230. package/dist/operatorAgent/profiles/workshopAuthorPlaybook.js +103 -0
  231. package/dist/operatorAgent/profiles/workshopAuthorTools.d.ts +57 -0
  232. package/dist/operatorAgent/profiles/workshopAuthorTools.js +623 -0
  233. package/dist/operatorAgent/proposals.d.ts +32 -0
  234. package/dist/operatorAgent/proposals.js +144 -0
  235. package/dist/operatorAgent/types.d.ts +128 -0
  236. package/dist/operatorAgent/types.js +1 -0
  237. package/dist/package-meta.d.ts +2 -1
  238. package/dist/package-meta.js +2 -1
  239. package/dist/preflight/bash.d.ts +8 -0
  240. package/dist/preflight/bash.js +34 -0
  241. package/dist/preflight/claudeRoot.d.ts +11 -0
  242. package/dist/preflight/claudeRoot.js +23 -0
  243. package/dist/preflight/mcpCommands.d.ts +8 -0
  244. package/dist/preflight/mcpCommands.js +36 -0
  245. package/dist/preflight/pipelinePreflight.d.ts +40 -0
  246. package/dist/preflight/pipelinePreflight.js +192 -0
  247. package/dist/preflight/tls.d.ts +6 -0
  248. package/dist/preflight/tls.js +18 -0
  249. package/dist/preflight/toolchain.d.ts +45 -0
  250. package/dist/preflight/toolchain.js +219 -0
  251. package/dist/project/findManifestRoot.d.ts +3 -0
  252. package/dist/project/findManifestRoot.js +35 -0
  253. package/dist/project/findProjectRoot.js +3 -4
  254. package/dist/project/globalHome.d.ts +7 -0
  255. package/dist/project/globalHome.js +63 -2
  256. package/dist/project/resolveProjectContext.js +2 -2
  257. package/dist/project/resolveStageflowContext.d.ts +7 -0
  258. package/dist/project/resolveStageflowContext.js +46 -30
  259. package/dist/projection/projectRun.d.ts +2 -1
  260. package/dist/projection/projectRun.js +1 -0
  261. package/dist/runstore/assertTmpdir.d.ts +1 -0
  262. package/dist/runstore/assertTmpdir.js +25 -0
  263. package/dist/runstore/backup.d.ts +52 -0
  264. package/dist/runstore/backup.js +292 -0
  265. package/dist/runstore/createStore.d.ts +18 -1
  266. package/dist/runstore/createStore.js +64 -5
  267. package/dist/runstore/debugBundle.d.ts +60 -0
  268. package/dist/runstore/debugBundle.js +143 -0
  269. package/dist/runstore/diskUsage.d.ts +50 -0
  270. package/dist/runstore/diskUsage.js +214 -0
  271. package/dist/runstore/exportRunPayload.d.ts +8 -0
  272. package/dist/runstore/exportRunPayload.js +23 -0
  273. package/dist/runstore/normalizeCatalogPath.d.ts +1 -0
  274. package/dist/runstore/normalizeCatalogPath.js +10 -0
  275. package/dist/runstore/paths.d.ts +5 -0
  276. package/dist/runstore/paths.js +145 -1
  277. package/dist/runstore/port.d.ts +139 -13
  278. package/dist/runstore/port.js +8 -1
  279. package/dist/runstore/restore.d.ts +81 -0
  280. package/dist/runstore/restore.js +355 -0
  281. package/dist/runstore/retention.d.ts +27 -0
  282. package/dist/runstore/retention.js +74 -0
  283. package/dist/runstore/runManifest.d.ts +146 -0
  284. package/dist/runstore/runManifest.js +288 -0
  285. package/dist/runstore/runProjection.d.ts +3 -1
  286. package/dist/runstore/runProjection.js +63 -1
  287. package/dist/runstore/sqlite/SqliteRunStore.d.ts +35 -3
  288. package/dist/runstore/sqlite/SqliteRunStore.js +442 -219
  289. package/dist/runstore/sqlite/applyStorePragmas.d.ts +39 -0
  290. package/dist/runstore/sqlite/applyStorePragmas.js +145 -0
  291. package/dist/runstore/sqlite/migrations/001-baseline.d.ts +7 -0
  292. package/dist/runstore/sqlite/migrations/001-baseline.js +10 -0
  293. package/dist/runstore/sqlite/migrations/002-repository-binding.d.ts +7 -0
  294. package/dist/runstore/sqlite/migrations/002-repository-binding.js +29 -0
  295. package/dist/runstore/sqlite/migrations/003-run-lifecycle.d.ts +7 -0
  296. package/dist/runstore/sqlite/migrations/003-run-lifecycle.js +28 -0
  297. package/dist/runstore/sqlite/migrations/004-auto-resume-count.d.ts +7 -0
  298. package/dist/runstore/sqlite/migrations/004-auto-resume-count.js +19 -0
  299. package/dist/runstore/sqlite/migrations/005-config-origins.d.ts +7 -0
  300. package/dist/runstore/sqlite/migrations/005-config-origins.js +19 -0
  301. package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.d.ts +7 -0
  302. package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.js +28 -0
  303. package/dist/runstore/sqlite/migrations/007-projects-registry.d.ts +7 -0
  304. package/dist/runstore/sqlite/migrations/007-projects-registry.js +31 -0
  305. package/dist/runstore/sqlite/migrations/008-triggers-table.d.ts +7 -0
  306. package/dist/runstore/sqlite/migrations/008-triggers-table.js +19 -0
  307. package/dist/runstore/sqlite/migrations/009-trigger-next-run.d.ts +7 -0
  308. package/dist/runstore/sqlite/migrations/009-trigger-next-run.js +19 -0
  309. package/dist/runstore/sqlite/migrations/010-trigger-adapter-state.d.ts +7 -0
  310. package/dist/runstore/sqlite/migrations/010-trigger-adapter-state.js +17 -0
  311. package/dist/runstore/sqlite/migrations/index.d.ts +21 -0
  312. package/dist/runstore/sqlite/migrations/index.js +78 -0
  313. package/dist/runstore/sqlite/schema.d.ts +20 -1
  314. package/dist/runstore/sqlite/schema.js +277 -1
  315. package/dist/runstore/sqlite/storeOpenError.d.ts +6 -0
  316. package/dist/runstore/sqlite/storeOpenError.js +11 -0
  317. package/dist/runstore/sqlite/storeSchemaError.d.ts +5 -0
  318. package/dist/runstore/sqlite/storeSchemaError.js +8 -0
  319. package/dist/runstore/stageExecution.js +3 -0
  320. package/dist/runstore/storeFilesystem.d.ts +32 -0
  321. package/dist/runstore/storeFilesystem.js +148 -0
  322. package/dist/runstore/trackProjection.js +2 -0
  323. package/dist/runstore/workspaceLayout.d.ts +13 -0
  324. package/dist/runstore/workspaceLayout.js +76 -0
  325. package/dist/runtime/answerResume.d.ts +1 -0
  326. package/dist/runtime/answerResume.js +3 -1
  327. package/dist/runtime/completionCheckRunner.d.ts +15 -1
  328. package/dist/runtime/completionCheckRunner.js +67 -7
  329. package/dist/runtime/containerLimits.d.ts +16 -0
  330. package/dist/runtime/containerLimits.js +84 -0
  331. package/dist/runtime/credentialBinding.d.ts +2 -0
  332. package/dist/runtime/credentialBinding.js +3 -0
  333. package/dist/runtime/credentialMaterialisation.d.ts +28 -0
  334. package/dist/runtime/credentialMaterialisation.js +128 -0
  335. package/dist/runtime/emailSource.d.ts +72 -0
  336. package/dist/runtime/emailSource.js +304 -0
  337. package/dist/runtime/gitCheckoutCapability.js +7 -13
  338. package/dist/runtime/githubPollSource.d.ts +86 -0
  339. package/dist/runtime/githubPollSource.js +284 -0
  340. package/dist/runtime/pipelineRunner.d.ts +40 -1
  341. package/dist/runtime/pipelineRunner.js +181 -17
  342. package/dist/runtime/pipelineScheduler.d.ts +17 -0
  343. package/dist/runtime/pipelineScheduler.js +220 -28
  344. package/dist/runtime/reloadRunCatalog.js +6 -1
  345. package/dist/runtime/repositoryMaterialize.d.ts +47 -0
  346. package/dist/runtime/repositoryMaterialize.js +235 -0
  347. package/dist/runtime/resumeTimedOut.d.ts +1 -1
  348. package/dist/runtime/resumeTimedOut.js +5 -2
  349. package/dist/runtime/runChangeBus.js +9 -0
  350. package/dist/runtime/runDeletion.d.ts +7 -0
  351. package/dist/runtime/runDeletion.js +37 -0
  352. package/dist/runtime/runManager.d.ts +169 -4
  353. package/dist/runtime/runManager.js +1748 -83
  354. package/dist/runtime/runRetentionSweep.d.ts +31 -0
  355. package/dist/runtime/runRetentionSweep.js +328 -0
  356. package/dist/runtime/runRetryCoordinator.d.ts +4 -0
  357. package/dist/runtime/runRetryCoordinator.js +20 -2
  358. package/dist/runtime/runSkills.d.ts +40 -0
  359. package/dist/runtime/runSkills.js +173 -0
  360. package/dist/runtime/scheduleSource.d.ts +38 -0
  361. package/dist/runtime/scheduleSource.js +119 -0
  362. package/dist/runtime/settingsFile.d.ts +5 -0
  363. package/dist/runtime/settingsFile.js +61 -54
  364. package/dist/runtime/stageAttemptBootstrap.d.ts +5 -1
  365. package/dist/runtime/stageAttemptBootstrap.js +250 -27
  366. package/dist/runtime/stageCacheEnv.d.ts +6 -0
  367. package/dist/runtime/stageCacheEnv.js +34 -0
  368. package/dist/runtime/stageConcurrency.d.ts +2 -1
  369. package/dist/runtime/stageConcurrency.js +4 -2
  370. package/dist/runtime/stageEnvironment.d.ts +38 -0
  371. package/dist/runtime/stageEnvironment.js +194 -0
  372. package/dist/runtime/stageHitl.d.ts +1 -0
  373. package/dist/runtime/stageHitl.js +5 -1
  374. package/dist/runtime/stageProcessLauncher.d.ts +20 -0
  375. package/dist/runtime/stageProcessLauncher.js +236 -41
  376. package/dist/runtime/stageRecovery.d.ts +3 -1
  377. package/dist/runtime/stageRecovery.js +19 -4
  378. package/dist/runtime/stageRoots.d.ts +38 -1
  379. package/dist/runtime/stageRoots.js +118 -0
  380. package/dist/runtime/stageRunner.d.ts +6 -0
  381. package/dist/runtime/stageRunner.js +32 -6
  382. package/dist/runtime/stageSecretDecl.d.ts +9 -0
  383. package/dist/runtime/stageSecretDecl.js +102 -0
  384. package/dist/runtime/stageSecrets.d.ts +40 -0
  385. package/dist/runtime/stageSecrets.js +181 -0
  386. package/dist/runtime/stageStreamLog.d.ts +1 -0
  387. package/dist/runtime/stageStreamLog.js +2 -1
  388. package/dist/runtime/stageWorker.d.ts +3 -2
  389. package/dist/runtime/stageWorker.js +58 -10
  390. package/dist/runtime/stageWorkerProtocol.d.ts +5 -0
  391. package/dist/runtime/stageWorkerProtocol.js +8 -0
  392. package/dist/runtime/startPayload.d.ts +32 -0
  393. package/dist/runtime/startPayload.js +59 -0
  394. package/dist/runtime/taskInput.js +14 -5
  395. package/dist/runtime/triggerCatalog.d.ts +6 -0
  396. package/dist/runtime/triggerCatalog.js +24 -0
  397. package/dist/runtime/triggerEventMatch.d.ts +2 -0
  398. package/dist/runtime/triggerEventMatch.js +6 -0
  399. package/dist/runtime/triggerPort.d.ts +14 -0
  400. package/dist/runtime/triggerPort.js +1 -0
  401. package/dist/runtime/triggerRunner.d.ts +17 -0
  402. package/dist/runtime/triggerRunner.js +89 -0
  403. package/dist/runtime/verifiedStageExecution.d.ts +8 -0
  404. package/dist/runtime/verifiedStageExecution.js +16 -1
  405. package/dist/runtime/webhookSignature.d.ts +1 -0
  406. package/dist/runtime/webhookSignature.js +12 -0
  407. package/dist/runtime/workspaceBinding.d.ts +20 -0
  408. package/dist/runtime/workspaceBinding.js +60 -0
  409. package/dist/server/allowedHosts.d.ts +19 -0
  410. package/dist/server/allowedHosts.js +179 -0
  411. package/dist/server/bootstrap.d.ts +42 -2
  412. package/dist/server/bootstrap.js +273 -5
  413. package/dist/server/controlToken.d.ts +47 -0
  414. package/dist/server/controlToken.js +254 -0
  415. package/dist/server/createHttpHost.d.ts +11 -2
  416. package/dist/server/createHttpHost.js +106 -10
  417. package/dist/server/ensureGlobalService.d.ts +5 -1
  418. package/dist/server/ensureGlobalService.js +35 -1
  419. package/dist/server/healthSurfaces.d.ts +6 -0
  420. package/dist/server/healthSurfaces.js +123 -0
  421. package/dist/server/http.d.ts +27 -1
  422. package/dist/server/http.js +2254 -477
  423. package/dist/server/listenHost.d.ts +5 -0
  424. package/dist/server/listenHost.js +56 -0
  425. package/dist/server/mcpHost.d.ts +10 -1
  426. package/dist/server/mcpHost.js +36 -6
  427. package/dist/server/operatorResults.d.ts +2 -2
  428. package/dist/server/operatorResults.js +40 -29
  429. package/dist/server/requestAuthContext.d.ts +12 -0
  430. package/dist/server/requestAuthContext.js +21 -0
  431. package/dist/server/shutdown.d.ts +69 -0
  432. package/dist/server/shutdown.js +219 -0
  433. package/dist/server/triggerRoutes.d.ts +15 -0
  434. package/dist/server/triggerRoutes.js +268 -0
  435. package/dist/tools/askOperator.d.ts +3 -2
  436. package/dist/types/completion.d.ts +3 -0
  437. package/dist/types/pipeline.d.ts +10 -1
  438. package/dist/types/preEmitCheck.d.ts +7 -0
  439. package/dist/types/stage.d.ts +22 -0
  440. package/dist/types/stageflowManifest.d.ts +3 -0
  441. package/dist/types/task.d.ts +8 -0
  442. package/dist/types/trigger.d.ts +18 -0
  443. package/dist/types/trigger.js +1 -0
  444. package/dist/ui/assets/{index-CSsDued1.css → index-Bv4p1aPK.css} +1 -1
  445. package/dist/ui/assets/index-CntB4bZR.js +133 -0
  446. package/dist/ui/index.html +2 -2
  447. package/dist/workshop/autosave.d.ts +58 -0
  448. package/dist/workshop/autosave.js +222 -0
  449. package/dist/workshop/buildStore.d.ts +79 -0
  450. package/dist/workshop/buildStore.js +326 -0
  451. package/dist/workshop/chatTurn.d.ts +232 -0
  452. package/dist/workshop/chatTurn.js +475 -0
  453. package/dist/workshop/modelSettings.d.ts +18 -0
  454. package/dist/workshop/modelSettings.js +44 -0
  455. package/dist/workshop/sessionStore.d.ts +61 -0
  456. package/dist/workshop/sessionStore.js +254 -0
  457. package/dist/workshop/workshopPin.d.ts +72 -0
  458. package/dist/workshop/workshopPin.js +193 -0
  459. package/examples/README.md +99 -0
  460. package/examples/archify-on-pr/README.md +213 -0
  461. package/examples/archify-on-pr/archify-on-pr.pipeline.yaml +19 -0
  462. package/examples/archify-on-pr/archify-on-pr.task.yaml +19 -0
  463. package/examples/archify-on-pr/author-diagrams.yaml +106 -0
  464. package/examples/archify-on-pr/detect-changes.yaml +89 -0
  465. package/examples/browser-session/README.md +77 -0
  466. package/examples/browser-session/browser-session.pipeline.yaml +50 -0
  467. package/examples/browser-session/browser-session.task.yaml +6 -0
  468. package/examples/browser-session/check-login.yaml +22 -0
  469. package/examples/browser-session/fixture-server.mjs +64 -0
  470. package/examples/browser-session/human-login.yaml +31 -0
  471. package/examples/browser-session/merge.yaml +36 -0
  472. package/examples/browser-session/work-a.yaml +41 -0
  473. package/examples/browser-session/work-b.yaml +41 -0
  474. package/examples/ci-validate/README.md +35 -0
  475. package/examples/ci-validate/check.yaml +13 -0
  476. package/examples/ci-validate/ci-demo.pipeline.yaml +4 -0
  477. package/examples/ci-validate/validate.sh +5 -0
  478. package/examples/compliance-review-demo/README.md +125 -0
  479. package/examples/compliance-review-demo/compliance-review-demo.pipeline.yaml +29 -0
  480. package/examples/compliance-review-demo/connect-account.yaml +47 -0
  481. package/examples/compliance-review-demo/map-to-control.yaml +123 -0
  482. package/examples/compliance-review-demo/poll-bucket-config.yaml +103 -0
  483. package/examples/compliance-review-demo/publish-report.yaml +79 -0
  484. package/examples/compliance-review-demo/review-verdict.yaml +122 -0
  485. package/examples/compliance-review-demo/run-compliance-check.yaml +96 -0
  486. package/examples/compliance-review-demo/store-evidence.yaml +143 -0
  487. package/examples/conditional-fork/README.md +89 -0
  488. package/examples/conditional-fork/branch-a.yaml +13 -0
  489. package/examples/conditional-fork/branch-b.yaml +13 -0
  490. package/examples/conditional-fork/decide.yaml +35 -0
  491. package/examples/conditional-fork/fork-demo.pipeline.yaml +20 -0
  492. package/examples/conditional-fork/fork-demo.task.yaml +8 -0
  493. package/examples/context7-mcp/README.md +42 -0
  494. package/examples/context7-mcp/context7-mcp.pipeline.yaml +15 -0
  495. package/examples/context7-mcp/context7-mcp.task.yaml +4 -0
  496. package/examples/context7-mcp/fetch-docs.yaml +52 -0
  497. package/examples/context7-mcp/resolve-library.yaml +31 -0
  498. package/examples/context7-mcp/write-brief.yaml +52 -0
  499. package/examples/feature-loop/README.md +104 -0
  500. package/examples/feature-loop/address-feedback.yaml +148 -0
  501. package/examples/feature-loop/align.yaml +116 -0
  502. package/examples/feature-loop/decompose.yaml +86 -0
  503. package/examples/feature-loop/default-model-hierarchy.task.yaml +58 -0
  504. package/examples/feature-loop/feature-loop.pipeline.yaml +140 -0
  505. package/examples/feature-loop/feature-loop.task.yaml +25 -0
  506. package/examples/feature-loop/implement.yaml +128 -0
  507. package/examples/feature-loop/plan.yaml +111 -0
  508. package/examples/feature-loop/publish.yaml +167 -0
  509. package/examples/feature-loop/review.yaml +146 -0
  510. package/examples/feature-loop/verify.yaml +106 -0
  511. package/examples/feedback-loop/README.md +72 -0
  512. package/examples/feedback-loop/VERIFY.md +208 -0
  513. package/examples/feedback-loop/continue-only.task.yaml +4 -0
  514. package/examples/feedback-loop/exhaust-require-continue.task.yaml +6 -0
  515. package/examples/feedback-loop/exhaust-wait-human.task.yaml +11 -0
  516. package/examples/feedback-loop/feedback-loop-wait-human.pipeline.yaml +23 -0
  517. package/examples/feedback-loop/feedback-loop.pipeline.yaml +23 -0
  518. package/examples/feedback-loop/feedback-loop.task.yaml +4 -0
  519. package/examples/feedback-loop/implement.yaml +14 -0
  520. package/examples/feedback-loop/plan.yaml +14 -0
  521. package/examples/feedback-loop/review.yaml +15 -0
  522. package/examples/feedback-loop/send-back-once.task.yaml +6 -0
  523. package/examples/feedback-loop/submit.yaml +12 -0
  524. package/examples/generic-fan-in/README.md +151 -0
  525. package/examples/generic-fan-in/clarify.yaml +18 -0
  526. package/examples/generic-fan-in/generic-fan-in-accepted.pipeline.yaml +19 -0
  527. package/examples/generic-fan-in/generic-fan-in-accepted.task.yaml +8 -0
  528. package/examples/generic-fan-in/generic-fan-in.pipeline.yaml +18 -0
  529. package/examples/generic-fan-in/generic-fan-in.task.yaml +9 -0
  530. package/examples/generic-fan-in/research.yaml +45 -0
  531. package/examples/generic-fan-in/synthesize.yaml +66 -0
  532. package/examples/generic-fan-in/validation.yaml +45 -0
  533. package/examples/github-release/README.md +78 -0
  534. package/examples/github-release/draft-release-notes.yaml +64 -0
  535. package/examples/github-release/github-release.pipeline.yaml +11 -0
  536. package/examples/github-release/github-release.task.yaml +13 -0
  537. package/examples/github-release/publish-github-release.yaml +64 -0
  538. package/examples/hello-world/README.md +28 -0
  539. package/examples/hello-world/hello.pipeline.yaml +4 -0
  540. package/examples/hello-world/my-task.task.yaml +6 -0
  541. package/examples/hello-world/research.yaml +18 -0
  542. package/examples/mcp-hitl-tour/README.md +113 -0
  543. package/examples/mcp-hitl-tour/draft-angle.yaml +33 -0
  544. package/examples/mcp-hitl-tour/draft-short.yaml +32 -0
  545. package/examples/mcp-hitl-tour/emit-angles.yaml +45 -0
  546. package/examples/mcp-hitl-tour/gather.yaml +31 -0
  547. package/examples/mcp-hitl-tour/intake.yaml +62 -0
  548. package/examples/mcp-hitl-tour/mcp-hitl-tour-exhaust.task.yaml +13 -0
  549. package/examples/mcp-hitl-tour/mcp-hitl-tour.pipeline.yaml +54 -0
  550. package/examples/mcp-hitl-tour/mcp-hitl-tour.task.yaml +16 -0
  551. package/examples/mcp-hitl-tour/polish.yaml +33 -0
  552. package/examples/mcp-hitl-tour/review.yaml +17 -0
  553. package/examples/mcp-hitl-tour/ship.yaml +25 -0
  554. package/examples/oss-issue-contribution/README.md +218 -0
  555. package/examples/oss-issue-contribution/oss-address-review-feedback.yaml +117 -0
  556. package/examples/oss-issue-contribution/oss-approve-contribution.yaml +181 -0
  557. package/examples/oss-issue-contribution/oss-approve-plan.yaml +111 -0
  558. package/examples/oss-issue-contribution/oss-explain-fix.yaml +108 -0
  559. package/examples/oss-issue-contribution/oss-explain-issue.yaml +114 -0
  560. package/examples/oss-issue-contribution/oss-implement-source-fix.yaml +171 -0
  561. package/examples/oss-issue-contribution/oss-investigate-area.yaml +116 -0
  562. package/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml +125 -0
  563. package/examples/oss-issue-contribution/oss-issue-intake.yaml +106 -0
  564. package/examples/oss-issue-contribution/oss-plan-investigation.yaml +112 -0
  565. package/examples/oss-issue-contribution/oss-plan-review.yaml +109 -0
  566. package/examples/oss-issue-contribution/oss-reproduce-issue.yaml +140 -0
  567. package/examples/oss-issue-contribution/oss-review-change.yaml +107 -0
  568. package/examples/oss-issue-contribution/oss-verify-fix.yaml +130 -0
  569. package/examples/oss-issue-contribution/oss-write-regression-test.yaml +135 -0
  570. package/examples/oss-issue-contribution/pi-7629.task.yaml +79 -0
  571. package/examples/oss-issue-contribution/pi-8919.task.yaml +75 -0
  572. package/examples/oss-issue-contribution/pydantic-ai-7971.task.yaml +53 -0
  573. package/examples/oss-quick-fix/README.md +65 -0
  574. package/examples/oss-quick-fix/implement-fix.yaml +84 -0
  575. package/examples/oss-quick-fix/oss-quick-fix.pipeline.yaml +35 -0
  576. package/examples/oss-quick-fix/oss-quick-fix.task.yaml +19 -0
  577. package/examples/oss-quick-fix/ship-fix.yaml +81 -0
  578. package/examples/oss-quick-fix/understand-issue.yaml +67 -0
  579. package/examples/oss-quick-fix/verify-fix.yaml +73 -0
  580. package/examples/plan-review/README.md +37 -0
  581. package/examples/plan-review/plan-review-followup.yaml +13 -0
  582. package/examples/plan-review/plan-review.pipeline.yaml +9 -0
  583. package/examples/plan-review/plan-review.task.yaml +9 -0
  584. package/examples/plan-review/plan-review.yaml +25 -0
  585. package/examples/playwright-mcp/README.md +39 -0
  586. package/examples/playwright-mcp/playwright-mcp.pipeline.yaml +5 -0
  587. package/examples/playwright-mcp/playwright-mcp.task.yaml +4 -0
  588. package/examples/playwright-mcp/screenshot.yaml +40 -0
  589. package/examples/retry-tour/README.md +75 -0
  590. package/examples/retry-tour/retry-tour.pipeline.yaml +122 -0
  591. package/examples/retry-tour/retry-tour.task.yaml +9 -0
  592. package/examples/route-if-tour/README.md +202 -0
  593. package/examples/route-if-tour/route-if-tour.pipeline.yaml +950 -0
  594. package/examples/route-if-tour/route-if-tour.task.yaml +4 -0
  595. package/examples/route-wiring-smoke-test/01-core-routing.pipeline.yaml +168 -0
  596. package/examples/route-wiring-smoke-test/02-on-gating.pipeline.yaml +44 -0
  597. package/examples/route-wiring-smoke-test/03-two-entry-points.pipeline.yaml +28 -0
  598. package/examples/route-wiring-smoke-test/04-entry-false-equivalent-to-omitted.pipeline.yaml +27 -0
  599. package/examples/route-wiring-smoke-test/05-fork-choice.pipeline.yaml +110 -0
  600. package/examples/route-wiring-smoke-test/06-fan-out-fan-in.pipeline.yaml +82 -0
  601. package/examples/route-wiring-smoke-test/07-loop-human-decision.pipeline.yaml +82 -0
  602. package/examples/route-wiring-smoke-test/08-skip-fallback-and-multi-on-gate.pipeline.yaml +77 -0
  603. package/examples/route-wiring-smoke-test/09-multi-loop-targets.pipeline.yaml +102 -0
  604. package/examples/route-wiring-smoke-test/10-uses-dialect-fork.pipeline.yaml +23 -0
  605. package/examples/route-wiring-smoke-test/11-sequential-io-handoff.pipeline.yaml +37 -0
  606. package/examples/route-wiring-smoke-test/12-complex-io-schemas.pipeline.yaml +138 -0
  607. package/examples/route-wiring-smoke-test/13-ref-io-handoff.pipeline.yaml +84 -0
  608. package/examples/route-wiring-smoke-test/14-if-eq-gating.pipeline.yaml +50 -0
  609. package/examples/route-wiring-smoke-test/15-if-all-gated.pipeline.yaml +37 -0
  610. package/examples/route-wiring-smoke-test/16-if-composition.pipeline.yaml +65 -0
  611. package/examples/route-wiring-smoke-test/17-if-join.pipeline.yaml +80 -0
  612. package/examples/route-wiring-smoke-test/README.md +377 -0
  613. package/examples/route-wiring-smoke-test/rejected/01-reject-legacy-needs.pipeline.yaml +26 -0
  614. package/examples/route-wiring-smoke-test/rejected/02-reject-legacy-fork.pipeline.yaml +25 -0
  615. package/examples/route-wiring-smoke-test/rejected/03-reject-legacy-feedback-loop.pipeline.yaml +30 -0
  616. package/examples/route-wiring-smoke-test/rejected/04-reject-missing-entry.pipeline.yaml +24 -0
  617. package/examples/route-wiring-smoke-test/rejected/05-reject-unreachable.pipeline.yaml +35 -0
  618. package/examples/route-wiring-smoke-test/rejected/06-reject-allow-none-without-route-select.pipeline.yaml +37 -0
  619. package/examples/route-wiring-smoke-test/rejected/07-reject-cycle.pipeline.yaml +27 -0
  620. package/examples/route-wiring-smoke-test/rejected/08-reject-loop-non-ancestor.pipeline.yaml +42 -0
  621. package/examples/route-wiring-smoke-test/rejected/09-reject-route-select-leaf.pipeline.yaml +26 -0
  622. package/examples/route-wiring-smoke-test/rejected/12-reject-loop-replay-unsafe.pipeline.yaml +55 -0
  623. package/examples/route-wiring-smoke-test/rejected/13-reject-multiple-loop-entries.pipeline.yaml +51 -0
  624. package/examples/route-wiring-smoke-test/rejected/14-reject-duplicate-stage-id.pipeline.yaml +35 -0
  625. package/examples/route-wiring-smoke-test/rejected/15-reject-unknown-route-target.pipeline.yaml +15 -0
  626. package/examples/route-wiring-smoke-test/rejected/16-reject-malformed-route-item.pipeline.yaml +15 -0
  627. package/examples/route-wiring-smoke-test/rejected/17-reject-io-incompatible.pipeline.yaml +33 -0
  628. package/examples/route-wiring-smoke-test/rejected/18-reject-nested-io.pipeline.yaml +51 -0
  629. package/examples/route-wiring-smoke-test/rejected/19-reject-array-item-io.pipeline.yaml +55 -0
  630. package/examples/route-wiring-smoke-test/rejected/20-reject-closed-io.pipeline.yaml +36 -0
  631. package/examples/route-wiring-smoke-test/rejected/21-reject-ref-io.pipeline.yaml +42 -0
  632. package/examples/route-wiring-smoke-test/rejected/22-reject-if-unknown-field.pipeline.yaml +33 -0
  633. package/examples/route-wiring-smoke-test/rejected/23-reject-if-optional-field.pipeline.yaml +32 -0
  634. package/examples/route-wiring-smoke-test/rejected/24-reject-if-empty-all.pipeline.yaml +31 -0
  635. package/examples/route-wiring-smoke-test/rejected/25-reject-if-gt-on-string.pipeline.yaml +33 -0
  636. package/examples/route-wiring-smoke-test/rejected/26-reject-if-optional-nested.pipeline.yaml +36 -0
  637. package/examples/route-wiring-smoke-test/rejected/27-reject-if-on-loop.pipeline.yaml +63 -0
  638. package/examples/route-wiring-smoke-test/rejected/29-reject-if-on-failed.pipeline.yaml +46 -0
  639. package/examples/route-wiring-smoke-test/smoke-test.task.yaml +4 -0
  640. package/examples/route-wiring-smoke-test/stages/branch-a.yaml +12 -0
  641. package/examples/route-wiring-smoke-test/stages/branch-b.yaml +12 -0
  642. package/examples/route-wiring-smoke-test/stages/decide.yaml +12 -0
  643. package/examples/route-wiring-smoke-test/stages/finish.yaml +12 -0
  644. package/examples/ship-feature/README.md +190 -0
  645. package/examples/ship-feature/feat-address-feedback.yaml +119 -0
  646. package/examples/ship-feature/feat-implement.yaml +180 -0
  647. package/examples/ship-feature/feat-plan.yaml +120 -0
  648. package/examples/ship-feature/feat-review.yaml +109 -0
  649. package/examples/ship-feature/feat-ship.yaml +203 -0
  650. package/examples/ship-feature/ship-feature.pipeline.yaml +44 -0
  651. package/examples/ship-feature/ship-feature.task.yaml +78 -0
  652. package/examples/stage-mcp/README.md +145 -0
  653. package/examples/stage-mcp/echo-mcp.mjs +20 -0
  654. package/examples/stage-mcp/stage-mcp-dead.pipeline.yaml +5 -0
  655. package/examples/stage-mcp/stage-mcp-dead.task.yaml +3 -0
  656. package/examples/stage-mcp/stage-mcp-missing-var.pipeline.yaml +5 -0
  657. package/examples/stage-mcp/stage-mcp-missing-var.task.yaml +3 -0
  658. package/examples/stage-mcp/stage-mcp.pipeline.yaml +5 -0
  659. package/examples/stage-mcp/stage-mcp.task.yaml +4 -0
  660. package/examples/stage-mcp/use-echo.yaml +20 -0
  661. package/examples/stageflow.yaml +51 -0
  662. package/examples/verify-tour/README.md +80 -0
  663. package/examples/verify-tour/verify-tour.pipeline.yaml +162 -0
  664. package/examples/verify-tour/verify-tour.task.yaml +11 -0
  665. package/package.json +9 -1
  666. package/skills/stageflow/SKILL.md +6 -6
  667. package/skills/stageflow/references/control-surface.md +13 -5
  668. package/skills/stageflow/scripts/detect-host.mjs +14 -1
  669. package/skills/stageflow/scripts/detect-host.test.mjs +29 -1
  670. package/skills/stageflow-author/SKILL.md +4 -3
  671. package/skills/stageflow-author/references/catalog-mapping.md +16 -0
  672. package/skills/stageflow-author/references/catalog-write-conventions.md +1 -1
  673. package/skills/stageflow-author/references/stage-prompt-template.md +4 -4
  674. package/skills/stageflow-run/SKILL.md +22 -12
  675. package/skills/stageflow-run/references/mcp-call.md +9 -1
  676. package/skills/stageflow-run/references/task-and-pipeline-selection.md +19 -6
  677. package/skills/stageflow-run/scripts/mcp-call.mjs +46 -6
  678. package/skills/stageflow-run/scripts/mcp-call.test.mjs +64 -0
  679. package/skills/stageflow-session-capture/references/catalog-authoring.md +2 -0
  680. package/skills/stageflow-setup/SKILL.md +51 -8
  681. package/dist/ui/assets/index-Da5EHU6M.js +0 -119
@@ -0,0 +1,130 @@
1
+ id: oss-verify-fix
2
+ system_prompt: |
3
+ Independently re-verify the proposed upstream fix already present in the task
4
+ checkout working tree, and record the evidence in verification.md. This stage
5
+ is read-only: do not edit, create, or delete files in the checkout, and do not
6
+ commit, push, or open a pull request.
7
+
8
+ Reading upstream work: the prior envelope's artifacts[] holds run-relative
9
+ paths. Read each one at <Factory run workspace>/<artifact path>, using the
10
+ absolute "Factory run workspace" value given in this stage's user prompt.
11
+ implementation-report.md is the authoritative record of what
12
+ oss-implement-source-fix did, including its own full validation_commands
13
+ run, and implementation-plan.md is the authoritative approved scope; both
14
+ outrank any prose in the prior envelope's summary. That summary describes
15
+ the PREVIOUS stage, and any prohibition or scope limit it carries applied to
16
+ that stage, not to this one.
17
+
18
+ Definition of done — every line must hold before you emit success:
19
+ - git diff in the checkout is non-empty; the emit is rejected while the
20
+ working tree is clean.
21
+ - Every command recorded in oss-implement-source-fix's commands_run
22
+ (its own full validation_commands run) has been re-executed here
23
+ verbatim, with its exit code and a stdout tail recorded in
24
+ verification.md.
25
+ - The narrow regression test actually passed in this stage's own run.
26
+ - verification.md is written and listed in the emitted artifacts; the emit is
27
+ rejected without it.
28
+ - commands lists only commands you actually executed here.
29
+
30
+ 1. Read the task, the accepted plan, the implementation envelope and report,
31
+ the repository instructions, and the current diff.
32
+ 2. Run git status --porcelain and git diff --stat. If the working tree is
33
+ clean, there is nothing to verify: emit failure.
34
+ 3. Confirm every changed file is in approved scope and the diff contains no
35
+ unrelated, generated, secret, credential, or debug-output changes. Flag
36
+ every out-of-scope or unexplained change explicitly.
37
+ 4. Re-execute oss-implement-source-fix's commands_run verbatim, in order,
38
+ then the smallest broader test/typecheck/lint set the repository
39
+ guidance requires. Record each command with its exit code and a stdout
40
+ tail. Do not hide flaky or environmental failures. If the regression
41
+ test cannot be run here, emit failure.
42
+ 5. Check the fix against the issue's expected behavior and examine boundary,
43
+ failure, concurrency, cleanup, or compatibility cases relevant to this bug.
44
+ 6. Write verification.md with a reproducible verification record: the diff
45
+ stat, each command with exit code and stdout tail, scope findings, and
46
+ remaining risks.
47
+ 7. Emit exactly once, including verification.md and all inherited evidence
48
+ artifacts, with a payload matching the schema.
49
+
50
+ Contract violations — emit failure rather than presenting these as success:
51
+ - result: pass when the regression did not pass in this stage. A pass inherited
52
+ from the implement payload is not verification.
53
+ - commands listing commands you did not execute, or copied from the implement
54
+ payload without re-running them.
55
+ - Emitting success while git diff in the checkout is empty.
56
+ - Editing the checkout to make a command pass.
57
+
58
+ Write summary as outcomes and resulting state for downstream stages: what was
59
+ re-executed, what passed or failed, what scope or risk findings stand.
60
+ Downstream stages receive this summary verbatim and can mistake it for their
61
+ own instructions, so never restate this stage's prohibitions or scope limits
62
+ in it.
63
+ model: omniroute/auto
64
+ timeout_ms: 1800000
65
+ io:
66
+ input:
67
+ schema:
68
+ type: object
69
+ required:
70
+ - changed_files
71
+ - regression_test
72
+ - implementation_summary
73
+ - assumptions
74
+ - commands_run
75
+ - all_passed
76
+ properties:
77
+ changed_files:
78
+ type: array
79
+ minItems: 1
80
+ items:
81
+ type: string
82
+ regression_test:
83
+ type: string
84
+ implementation_summary:
85
+ type: string
86
+ assumptions:
87
+ type: array
88
+ items:
89
+ type: string
90
+ commands_run:
91
+ type: array
92
+ minItems: 1
93
+ items:
94
+ type: string
95
+ all_passed:
96
+ type: boolean
97
+ output:
98
+ schema:
99
+ type: object
100
+ required:
101
+ - result
102
+ - commands
103
+ - changed_files
104
+ - remaining_risks
105
+ properties:
106
+ result:
107
+ type: string
108
+ enum:
109
+ - pass
110
+ commands:
111
+ type: array
112
+ items:
113
+ type: string
114
+ changed_files:
115
+ type: array
116
+ minItems: 1
117
+ items:
118
+ type: string
119
+ remaining_risks:
120
+ type: array
121
+ items:
122
+ type: string
123
+ verify:
124
+ - id: verification
125
+ type: artifact
126
+ path: verification.md
127
+ nonempty: true
128
+ when:
129
+ - after
130
+ gate_kinds: []
@@ -0,0 +1,135 @@
1
+ id: oss-write-regression-test
2
+ system_prompt: |
3
+ Add the narrow regression test named in the approved plan, and only that
4
+ test. Do not touch source files. Modified test files under "Project checkout
5
+ (agent cwd)" are the only acceptable output of this stage; no map, excerpt,
6
+ document, or report can substitute for them.
7
+
8
+ Reading upstream work: the prior envelope's artifacts[] holds run-relative
9
+ paths. Read each one at <Factory run workspace>/<artifact path>, using the
10
+ absolute "Factory run workspace" value given in this stage's user prompt.
11
+ implementation-plan.md is the authoritative input and outranks any prose in
12
+ the prior envelope's summary. That summary describes the PREVIOUS stage: any
13
+ prohibition it carries, for example "no source edits", applied to that stage
14
+ and does not apply here.
15
+
16
+ Definition of done — every line must hold before you emit success:
17
+ - git diff in the checkout is non-empty and contains only test-file edits;
18
+ the emit is rejected while the working tree is clean.
19
+ - Every test_files entry is a repo-relative path inside the checkout that
20
+ also appears in git diff --name-only; the emit is rejected for any entry
21
+ pointing into the factory run workspace.
22
+ - test_node_id names the exact test you added or identified, in a form the
23
+ next stage can run directly (e.g. `pytest tests/x.py::test_y`).
24
+ - The test demonstrably fails against the current (unfixed) source. If a red
25
+ run is genuinely impractical (for example the failure requires an external
26
+ service), record why and the alternative evidence instead of a fabricated
27
+ failure.
28
+ - regression-test-report.md is written and listed in the emitted artifacts;
29
+ the emit is rejected without it.
30
+ - commands_run lists only commands you actually executed, each with its
31
+ outcome.
32
+
33
+ 1. Resolve implementation-plan.md from the prior envelope's artifacts[]
34
+ against the Factory run workspace absolute path and read it. Treat it as
35
+ authoritative over the prior summary. If the plan cannot be read, emit
36
+ failure — do not substitute a plan you re-derived yourself.
37
+ 2. Confirm the checkout is still on the recorded base commit and that no
38
+ unexpected tracked changes appeared. If it diverged, emit failure without
39
+ overwriting work.
40
+ 3. Add or identify the exact regression test the plan names. Do not write
41
+ source fixes here, even trivially — that is the next stage's job.
42
+ 4. Run the test and confirm it fails for the reason the plan describes (the
43
+ bug, not a typo or fixture error). Record the failing output verbatim.
44
+ 5. Run git status --porcelain and git diff --stat. If either output is
45
+ empty, or the diff touches anything outside test files, this stage has
46
+ not done its job: return to step 3 or emit failure.
47
+ 6. Write regression-test-report.md containing the verbatim non-empty
48
+ git diff --stat and git status --porcelain output, the test node id, the
49
+ red-run output, and any deviation from the plan.
50
+ 7. Emit exactly once, including regression-test-report.md and all inherited
51
+ evidence artifacts, with a payload matching the schema. Emit success only
52
+ if every definition-of-done line holds; otherwise emit failure while
53
+ preserving the working-tree evidence for the operator.
54
+
55
+ Contract violations — emit failure rather than presenting these as success:
56
+ - Emitting success while git diff in the checkout is empty.
57
+ - A test_files entry under stages/.../artifacts/ or anywhere else in the
58
+ factory run workspace. Such a path is never a valid entry.
59
+ - test_node_id that is not directly runnable, or that names a test you did
60
+ not actually add or locate.
61
+ - Claiming a red run without having executed the test.
62
+ - Editing any source file in this stage.
63
+
64
+ Never commit, push, or open a pull request.
65
+
66
+ Write summary as outcomes and resulting state for downstream stages: which
67
+ test now exists, why it currently fails, what remains for the fix.
68
+ Downstream stages receive this summary verbatim and can mistake it for their
69
+ own instructions, so never restate this stage's prohibitions or scope limits
70
+ in it.
71
+ model: omniroute/auto
72
+ timeout_ms: 2400000
73
+ io:
74
+ input:
75
+ schema:
76
+ type: object
77
+ required:
78
+ - approved
79
+ - scope_summary
80
+ - planned_files
81
+ - validation_commands
82
+ - publication_blockers
83
+ properties:
84
+ approved:
85
+ type: boolean
86
+ scope_summary:
87
+ type: string
88
+ planned_files:
89
+ type: array
90
+ items:
91
+ type: string
92
+ validation_commands:
93
+ type: array
94
+ items:
95
+ type: string
96
+ publication_blockers:
97
+ type: array
98
+ items:
99
+ type: string
100
+ output:
101
+ schema:
102
+ type: object
103
+ required:
104
+ - test_files
105
+ - test_node_id
106
+ - red_evidence
107
+ - commands_run
108
+ properties:
109
+ test_files:
110
+ type: array
111
+ minItems: 1
112
+ items:
113
+ type: string
114
+ test_node_id:
115
+ type: string
116
+ red_evidence:
117
+ type: string
118
+ commands_run:
119
+ type: array
120
+ items:
121
+ type: string
122
+ verify:
123
+ - id: regression-test-report
124
+ type: artifact
125
+ path: regression-test-report.md
126
+ nonempty: true
127
+ when:
128
+ - after
129
+ - id: checkout-changed
130
+ type: checkout_changes
131
+ path_fields:
132
+ - test_files
133
+ when:
134
+ - after
135
+ gate_kinds: []
@@ -0,0 +1,79 @@
1
+ id: pi-7629
2
+ goal: >
3
+ Deliver a verified minimal local fix for Pi issue #7629, tui.select.pageUp
4
+ and tui.select.pageDown are not handled in all select lists, applied as
5
+ source and test edits in the checkout working tree, plus an
6
+ operator-approved pull request opened against tejasghutukade/pi rather than
7
+ earendil-works/pi.
8
+ context: |
9
+ Issue: https://github.com/earendil-works/pi/issues/7629
10
+ Title: tui.select.pageUp and tui.select.pageDown are not handled in all select lists
11
+ Upstream repo: https://github.com/earendil-works/pi
12
+ Fork (PR target after the run): https://github.com/tejasghutukade/pi
13
+ State: OPEN, unassigned, labeled bug, zero human comments — unclaimed.
14
+
15
+ Pi's CONTRIBUTING.md auto-closes issues and PRs from new/unproven
16
+ contributors by default and requires a maintainer to reply `lgtm` (not
17
+ `lgtmi`, which only exempts future issues) before any PR against
18
+ earendil-works/pi is permitted. No such reply exists yet, so this run
19
+ prepares a local change and a fork PR only; the upstream PR is a separate,
20
+ explicitly-authorized step after `lgtm` lands.
21
+
22
+ Reported behavior: the reporter remapped the configurable keybindings
23
+ tui.select.pageUp / tui.select.pageDown (default Page Up / Page Down) to
24
+ other keys (ctrl+v / alt+v, Emacs-style) in settings. The remap is honored
25
+ in some select-list UI (works in at least one place) but not others,
26
+ specifically:
27
+ - file-path autocompletion in the editor
28
+ - the /settings menu
29
+ - the model selector
30
+ In the broken locations, paging does not scroll the list at all when the
31
+ remapped key is pressed. Expected behavior: every select-list surface pages
32
+ one page down/up on tui.select.pageDown / tui.select.pageUp regardless of
33
+ what physical key(s) they are bound to.
34
+
35
+ Reporter's repro: bind tui.select.pageDown to ctrl+v, open the "/" command
36
+ menu (works), then try file-path autocomplete, /settings, or the model
37
+ selector (Page Up/Down and the remapped key both fail to scroll).
38
+ Reporter attached a standalone extension-based workaround (select-page-keys)
39
+ they had an LLM write, which is evidence they understand the shape of the
40
+ problem but not proof of the actual root cause.
41
+
42
+ Suspected root cause (to verify during investigation, not assumed): pi
43
+ likely has more than one TUI "select list" component implementation, and
44
+ only one of them resolves paging through the shared configurable-keybinding
45
+ lookup (tui.select.pageUp/pageDown); the others either hardcode literal
46
+ PageUp/PageDown key handling or omit paging entirely. The fix is to make
47
+ every select-list surface read paging from the same keybinding resolution
48
+ path as the one that already works, not to hand-wire the reporter's
49
+ specific remap.
50
+
51
+ The full issue write-up is captured by the intake stage in
52
+ issue-intake.md; treat this context as a starting point, not a substitute
53
+ for reading the issue and the source directly.
54
+ constraints: |
55
+ Respect pi's AGENTS.md, CONTRIBUTING.md, and any package-local test docs
56
+ (e.g. under packages/*/docs). Before reporting or assuming an issue is core
57
+ behavior, validate it is not caused by an extension, matching pi's own
58
+ contribution guidance.
59
+ Do not commit, push, create a branch, or open a pull request in any stage
60
+ except oss-approve-contribution, which may do so only after the operator
61
+ has explicitly accepted the contribution package through its
62
+ artifact_backed gate.
63
+ Do not target earendil-works/pi. The PR base is always tejasghutukade/pi
64
+ (gh pr create --repo tejasghutukade/pi).
65
+ Do not edit CHANGELOG.md; pi's maintainers add changelog entries themselves.
66
+ Before opening the local PR, the checkout must pass `npm run check` and
67
+ `./test.sh` (or the package-scoped equivalents for the touched package) —
68
+ record their exact output as evidence, do not claim they passed without
69
+ running them.
70
+ Keep the change limited to the reported paging inconsistency and its
71
+ regression test; do not expand scope to unrelated keybinding behavior.
72
+ Do not treat missing maintainer lgtm or assignment as a reason to skip
73
+ local work — investigate, fix, and verify locally regardless; publication
74
+ policy lives only at the contribution gate.
75
+ Source and test edits belong in the checkout working tree and must never be
76
+ replaced by a Stageflow artifact or report describing the change.
77
+ In the explainer stages only (oss-explain-issue, oss-explain-fix), the
78
+ explainer HTML belongs in Stageflow artifacts, never in the checkout.
79
+ checkout: /Users/tejasghutukade/Projects/pi
@@ -0,0 +1,75 @@
1
+ id: pi-8919
2
+ goal: >
3
+ Deliver a verified minimal local fix for Pi issue #8919, fullscreen mode
4
+ reserving a blank line for a zero-row custom footer, applied as source and
5
+ test edits in the checkout working tree, plus an operator-approved pull
6
+ request opened against tejasghutukade/pi rather than earendil-works/pi.
7
+ context: |
8
+ Issue: https://github.com/earendil-works/pi/issues/8919
9
+ Title: Fullscreen mode reserves a blank line for zero-row custom footers (footer minSize should be 0)
10
+ Upstream repo: https://github.com/earendil-works/pi
11
+ Fork (PR target after the run): https://github.com/tejasghutukade/pi
12
+ State: OPEN, unassigned at the time this task was written, though another
13
+ contributor has since commented intending to fix it. Pi's CONTRIBUTING.md
14
+ auto-closes issues/PRs from unproven contributors and requires a
15
+ maintainer `lgtm` before any PR against earendil-works/pi is permitted —
16
+ no such reply exists, so this run prepares a local change and a fork PR
17
+ only; the upstream PR is a separate, explicitly-authorized step.
18
+
19
+ This run's primary purpose is validating the oss-issue-contribution
20
+ pipeline's Verified Stage Execution contracts (`verify` artifact /
21
+ checkout_changes / gate checks, plus `on_verify_fail` wiring) against a
22
+ real run, not a genuine race to land this specific fix upstream.
23
+
24
+ Reported behavior: in fullscreen TUI mode, a custom footer
25
+ (`pi.ui.setFooter`) that renders zero rows still occupies one blank line;
26
+ inline mode collapses it correctly. Root cause per the reporter: the
27
+ fullscreen dock in
28
+ packages/coding-agent/src/modes/interactive/interactive-mode.ts reserves
29
+ the footer's row unconditionally via `{ component: this.footerContainer,
30
+ shrink: 1, minSize: 1 }` (around line 935). `allocateStackSizes` clamps to
31
+ `minSize` before distribution, so the slot gets at least 1 row even when
32
+ the footer component renders `[]`.
33
+
34
+ Reporter's proposed fix: change `minSize: 1` to `minSize: 0` on that one
35
+ dock entry. Reporter states this causes no visual change for the built-in
36
+ footer (with `basis` unset, size comes from intrinsic rows and
37
+ `FooterComponent` always renders at least 1 row; `minSize` is only a
38
+ shrink floor) — the only behavioral difference is that at extreme terminal
39
+ heights the footer can now shrink to 0 before the editor is squeezed,
40
+ which the reporter argues is preferable. Verify this reasoning independently
41
+ by reading `allocateStackSizes` and the footer rendering path rather than
42
+ taking the reporter's claim at face value.
43
+
44
+ Repro (from the issue): fullscreen mode
45
+ (`"tuiMode": "fullscreen"`) plus any extension registering an empty
46
+ footer, e.g. `pi.ui.setFooter(() => ({ invalidate() {}, render: () => [] }))`.
47
+
48
+ The full issue write-up is captured by the intake stage in
49
+ issue-intake.md; treat this context as a starting point, not a substitute
50
+ for reading the issue and the source directly.
51
+ constraints: |
52
+ Respect pi's AGENTS.md, CONTRIBUTING.md, and any package-local test docs.
53
+ Before reporting or assuming an issue is core behavior, validate it is not
54
+ caused by an extension, matching pi's own contribution guidance.
55
+ Do not commit, push, create a branch, or open a pull request in any stage
56
+ except oss-approve-contribution, which may do so only after the operator
57
+ has explicitly accepted the contribution package through its
58
+ artifact_backed gate.
59
+ Do not target earendil-works/pi. The PR base is always tejasghutukade/pi
60
+ (gh pr create --repo tejasghutukade/pi).
61
+ Do not edit CHANGELOG.md.
62
+ Before opening the local PR, the checkout must pass `npm run check` and
63
+ `./test.sh` (or the package-scoped equivalent for packages/coding-agent) —
64
+ record their exact output as evidence, do not claim they passed without
65
+ running them.
66
+ Keep the change limited to the reported footer minSize issue and its
67
+ regression test; do not expand scope to unrelated layout behavior.
68
+ Do not treat the other contributor's stated intent to fix this as a
69
+ reason to skip local work — investigate, fix, and verify locally
70
+ regardless; publication policy lives only at the contribution gate.
71
+ Source and test edits belong in the checkout working tree and must never
72
+ be replaced by a Stageflow artifact or report describing the change.
73
+ In the explainer stages only (oss-explain-issue, oss-explain-fix), the
74
+ explainer HTML belongs in Stageflow artifacts, never in the checkout.
75
+ checkout: /Users/tejasghutukade/Projects/pi
@@ -0,0 +1,53 @@
1
+ id: pydantic-ai-7971
2
+ goal: >
3
+ Deliver a verified minimal local fix for Pydantic AI issue #7971, Carry a
4
+ durable unit's emitted events and enqueued messages in its recorded output,
5
+ applied as source and test edits in the checkout working tree, plus an
6
+ operator-approved pull request opened against tejasghutukade/pydantic-ai
7
+ rather than pydantic/pydantic-ai.
8
+ context: |
9
+ Issue: https://github.com/pydantic/pydantic-ai/issues/7971
10
+ Title: Carry a durable unit's emitted events and enqueued messages in its recorded output
11
+ Upstream repo: https://github.com/pydantic/pydantic-ai
12
+ Fork (PR target after the run): https://github.com/tejasghutukade/pydantic-ai
13
+ State: OPEN, unassigned. Pydantic contributing guidance asks for assignment
14
+ before an upstream PR, so this run prepares a local change for a fork PR only.
15
+
16
+ Reported behavior: under durable execution, ctx.emit() and ctx.enqueue() are
17
+ side effects of running a durable unit rather than part of its recorded
18
+ result, so they do not survive replay. On Prefect/DBOS a replayed result
19
+ never re-emits; on Temporal emit from a tool or event stream handler raises;
20
+ ctx.enqueue() is rejected on all three engines. A capability therefore cannot
21
+ emit from its own tools under durable execution.
22
+
23
+ Expected behavior (proposal on the issue): carry the emitted events and
24
+ enqueued messages back in the unit's recorded output and replay them
25
+ container-side. (1) Worker-side, install capture sinks on the unit's
26
+ RunContext so emit and enqueue append instead of raising or reaching the live
27
+ buffer. (2) Return them alongside the operation's value in an envelope over
28
+ ResultT. (3) Container-side, re-emit the captured events and extend
29
+ pending_messages before handing the value back. DurableOperation already has
30
+ the shape: one handler, one result_codec, and declaration sites in
31
+ durable_exec/_base.py.
32
+
33
+ Care needed: liveness on in-process engines (live delivery vs
34
+ capture-then-replay), and wire compatibility (decode both the bare value and
35
+ the envelope; see test_durable_exec_compat.py).
36
+
37
+ The full issue write-up, including per-engine detail and related issues, is
38
+ captured by the intake stage in issue-intake.md.
39
+ constraints: |
40
+ Respect pydantic-ai AGENTS.md, CONTRIBUTING.md, and test docs.
41
+ Do not commit, push, create a branch, or open a pull request in any stage
42
+ except oss-approve-contribution, which may do so only after the operator
43
+ has explicitly accepted the contribution package through its
44
+ artifact_backed gate.
45
+ Do not target pydantic/pydantic-ai. The PR base is always
46
+ tejasghutukade/pydantic-ai (gh pr create --repo tejasghutukade/pydantic-ai).
47
+ Keep the change limited to the reproduced issue and its regression test.
48
+ Do not treat missing maintainer assignment as a reason to skip local work.
49
+ Source and test edits belong in the checkout working tree and must never be
50
+ replaced by a Stageflow artifact or report describing the change.
51
+ In the explainer stages only (oss-explain-issue, oss-explain-fix), the
52
+ explainer HTML belongs in Stageflow artifacts, never in the checkout.
53
+ checkout: /Users/tejasghutukade/Projects/pydantic-ai
@@ -0,0 +1,65 @@
1
+ # oss-quick-fix
2
+
3
+ A minimal, fully unattended sibling of
4
+ [`oss-issue-contribution`](../oss-issue-contribution/): one straight-line
5
+ spine from "understand the issue" to "PR opened against my fork," with no
6
+ operator gate anywhere in the run.
7
+
8
+ Every stage declares `gate_kinds: []`, which unregisters `ask_operator`
9
+ entirely — stages must decide and proceed, never pause for a human. Use this
10
+ shape for issues small enough that you trust a single unsupervised pass; use
11
+ `oss-issue-contribution` when you want parallel investigation/review and an
12
+ operator approval before anything ships.
13
+
14
+ ## Flow
15
+
16
+ ```
17
+ understand-issue → implement-fix → verify-fix → ship-fix
18
+ ```
19
+
20
+ 1. **understand-issue** — Reads the task goal/context, locates the responsible
21
+ code, reproduces the bug if practical, and writes `investigation.md`.
22
+ 2. **implement-fix** — Writes a failing regression test, fixes the root cause,
23
+ confirms the test (and the broader suite) passes, and writes
24
+ `fix-report.md`. `changed_files` must match `git diff --name-only` exactly.
25
+ 3. **verify-fix** — Independently re-runs the repo's real check/lint/test
26
+ commands against the actual diff (not the report's description of it) and
27
+ writes `verification.md`. `all_passed` is true only if every command it
28
+ ran actually exited zero.
29
+ 4. **ship-fix** — Commits, pushes, and opens a pull request against
30
+ `publish_repo` — the fork named in the task, never the upstream repo — and
31
+ writes `ship-report.md`. Refuses to proceed if `verify-fix` did not pass or
32
+ if the task does not name a fork.
33
+
34
+ Every stage declares `on_verify_fail: { mode: repair, retry_safety: idempotent, max_attempts: 3 }`
35
+ except `ship-fix`, which uses `mode: manual` / `retry_safety: side_effecting`
36
+ because it is the only stage with side effects (git push, PR creation).
37
+
38
+ ## Runtime contracts
39
+
40
+ | Stage | Required artifact | Other checks |
41
+ |-------|--------------------|---------------|
42
+ | `understand-issue` | `investigation.md` | — |
43
+ | `implement-fix` | `fix-report.md` | `type: checkout_changes` on `changed_files` |
44
+ | `verify-fix` | `verification.md` | — |
45
+ | `ship-fix` | `ship-report.md` | — |
46
+
47
+ ## Run
48
+
49
+ Fill in [`oss-quick-fix.task.yaml`](oss-quick-fix.task.yaml) — the issue, the
50
+ fork to publish to, and `checkout` pointed at a clean working tree of the
51
+ target repository.
52
+
53
+ ```bash
54
+ sf validate --pipeline examples/oss-quick-fix/oss-quick-fix.pipeline.yaml --strict
55
+ sf run \
56
+ --pipeline examples/oss-quick-fix/oss-quick-fix.pipeline.yaml \
57
+ --task examples/oss-quick-fix/oss-quick-fix.task.yaml
58
+ ```
59
+
60
+ Needs a configured provider (`sf providers status`), and `gh` on `PATH`
61
+ authenticated (`GH_TOKEN` or `GITHUB_TOKEN`) before `ship-fix` runs, or the
62
+ publish step fails after the fix is already verified.
63
+
64
+ Run `sf ui` in another terminal to inspect envelopes and artifacts — there are
65
+ no gates to answer.
@@ -0,0 +1,84 @@
1
+ id: implement-fix
2
+ system_prompt: |
3
+ Fix the issue in the checkout: edit source, add a regression test, and get
4
+ both passing. Never call ask_operator — decide and proceed.
5
+
6
+ Read investigation.md from the prior envelope's artifacts (a run-relative
7
+ path under the "Factory run workspace" value given in this stage's user
8
+ prompt) for the root cause, target files, and fix approach. Treat it as the
9
+ starting point, not gospel — if the real fix differs once you're in the
10
+ code, take the correct one and say why in fix-report.md.
11
+
12
+ 1. Write a regression test that fails against the current (buggy) code for
13
+ the reason described in investigation.md, using the repo's actual test
14
+ framework and conventions (find an existing test file near the affected
15
+ code and match its style; do not invent a new test setup pattern).
16
+ Confirm it fails, and capture that failing output.
17
+ 2. Edit the source to fix the root cause. Keep the change minimal and
18
+ scoped to this issue — do not refactor, rename, or clean up unrelated
19
+ code along the way.
20
+ 3. Run the regression test again and confirm it now passes. Then run the
21
+ broader test suite (or the most relevant scoped slice if a full run is
22
+ impractical) to check you haven't broken anything else. If something
23
+ breaks, fix it before moving on — you own this loop end to end; nothing
24
+ downstream can repair a broken implementation.
25
+ 4. Call write_stage_artifact with path fix-report.md containing: what you
26
+ changed and why, the regression test's id/path and its before/after
27
+ output, every command you ran with its result, and anything from
28
+ investigation.md you deviated from and why.
29
+ 5. Call emit_stage_envelope exactly once. changed_files must match
30
+ git diff --name-only exactly — no more, no fewer.
31
+ model: openrouter/minimax/minimax-m3:free
32
+ timeout_ms: 7200000
33
+ io:
34
+ input:
35
+ schema:
36
+ type: object
37
+ required:
38
+ - root_cause
39
+ - target_files
40
+ - repro_confirmed
41
+ - fix_approach
42
+ properties:
43
+ root_cause:
44
+ type: string
45
+ target_files:
46
+ type: array
47
+ items:
48
+ type: string
49
+ repro_confirmed:
50
+ type: boolean
51
+ fix_approach:
52
+ type: string
53
+ additionalProperties: false
54
+ output:
55
+ schema:
56
+ type: object
57
+ required:
58
+ - changed_files
59
+ - regression_test
60
+ - tests_passed
61
+ properties:
62
+ changed_files:
63
+ type: array
64
+ items:
65
+ type: string
66
+ regression_test:
67
+ type: string
68
+ tests_passed:
69
+ type: boolean
70
+ additionalProperties: false
71
+ verify:
72
+ - id: fix-report
73
+ type: artifact
74
+ path: fix-report.md
75
+ nonempty: true
76
+ when:
77
+ - after
78
+ - id: checkout-changed
79
+ type: checkout_changes
80
+ path_fields:
81
+ - changed_files
82
+ when:
83
+ - after
84
+ gate_kinds: []
@@ -0,0 +1,35 @@
1
+ id: oss-quick-fix
2
+ stages:
3
+ - id: understand-issue
4
+ entry: true
5
+ route:
6
+ - to: implement-fix
7
+ uses: ./understand-issue.yaml
8
+ on_verify_fail:
9
+ mode: repair
10
+ max_attempts: 3
11
+ retry_safety: idempotent
12
+ include_failed_checks: true
13
+ - id: implement-fix
14
+ route:
15
+ - to: verify-fix
16
+ uses: ./implement-fix.yaml
17
+ on_verify_fail:
18
+ mode: repair
19
+ max_attempts: 3
20
+ retry_safety: idempotent
21
+ include_failed_checks: true
22
+ - id: verify-fix
23
+ route:
24
+ - to: ship-fix
25
+ uses: ./verify-fix.yaml
26
+ on_verify_fail:
27
+ mode: repair
28
+ max_attempts: 3
29
+ retry_safety: idempotent
30
+ include_failed_checks: true
31
+ - id: ship-fix
32
+ uses: ./ship-fix.yaml
33
+ on_verify_fail:
34
+ mode: manual
35
+ retry_safety: side_effecting
@@ -0,0 +1,19 @@
1
+ id: oss-quick-fix-template
2
+ goal: >
3
+ Deliver a verified minimal local fix for <issue URL / short description>,
4
+ applied as source and test edits in the checkout working tree, plus a pull
5
+ request opened against your own fork (never the upstream repository).
6
+ context: |
7
+ Issue: <issue URL>
8
+ Title: <copy the current issue title>
9
+ Upstream repo: <owner/repo>
10
+ Fork (PR target): <your-username>/<repo>
11
+ Reported behavior: <copy or summarize the concrete failure>
12
+ Expected behavior: <copy or summarize the acceptance criterion>
13
+ constraints: |
14
+ Respect the target repository's AGENTS.md / CONTRIBUTING.md and test
15
+ conventions.
16
+ publish_repo in the final stage must be exactly the fork named above —
17
+ never the upstream owner/repo.
18
+ Keep the change limited to the reported issue and its regression test.
19
+ checkout: /absolute/path/to/checkout