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.
- package/README.md +14 -3
- package/builtin-skills/browser/SKILL.md +42 -0
- package/dist/a2a/contracts.d.ts +1 -0
- package/dist/a2a/contracts.js +1 -0
- package/dist/a2a/registry.d.ts +2 -0
- package/dist/a2a/registry.js +20 -1
- package/dist/a2a/server.d.ts +7 -0
- package/dist/a2a/server.js +5 -2
- package/dist/a2a/service.d.ts +1 -1
- package/dist/a2a/service.js +57 -8
- package/dist/a2a/store.d.ts +8 -5
- package/dist/a2a/store.js +24 -67
- package/dist/agent/activity.d.ts +3 -0
- package/dist/agent/bootProviderConfig.d.ts +21 -0
- package/dist/agent/bootProviderConfig.js +74 -0
- package/dist/agent/claudeAdapter.js +2 -2
- package/dist/agent/cursorProvider.d.ts +2 -0
- package/dist/agent/cursorProvider.js +30 -5
- package/dist/agent/fakeAgent.d.ts +1 -0
- package/dist/agent/fakeAgent.js +13 -0
- package/dist/agent/piAdapter.d.ts +11 -24
- package/dist/agent/piAdapter.js +107 -50
- package/dist/agent/piIsolatedMcp.d.ts +2 -0
- package/dist/agent/piIsolatedMcp.js +10 -2
- package/dist/agent/piSessionFactory.d.ts +38 -0
- package/dist/agent/piSessionFactory.js +60 -0
- package/dist/agent/port.d.ts +8 -0
- package/dist/agent/streamLogRedact.d.ts +7 -1
- package/dist/agent/streamLogRedact.js +26 -11
- package/dist/browser/anchor.d.ts +27 -0
- package/dist/browser/anchor.js +127 -0
- package/dist/browser/auditSink.d.ts +38 -0
- package/dist/browser/auditSink.js +34 -0
- package/dist/browser/browserHost.d.ts +86 -0
- package/dist/browser/browserHost.js +7 -0
- package/dist/browser/browserSweep.d.ts +14 -0
- package/dist/browser/browserSweep.js +54 -0
- package/dist/browser/browserTeardown.d.ts +56 -0
- package/dist/browser/browserTeardown.js +235 -0
- package/dist/browser/fakeRemoteBrowserHost.d.ts +2 -0
- package/dist/browser/fakeRemoteBrowserHost.js +34 -0
- package/dist/browser/gateHandoff.d.ts +25 -0
- package/dist/browser/gateHandoff.js +83 -0
- package/dist/browser/humanLogin.d.ts +18 -0
- package/dist/browser/humanLogin.js +34 -0
- package/dist/browser/keyProvider.d.ts +10 -0
- package/dist/browser/keyProvider.js +39 -0
- package/dist/browser/localBrowserHost.d.ts +10 -0
- package/dist/browser/localBrowserHost.js +152 -0
- package/dist/browser/localProfileLock.d.ts +2 -0
- package/dist/browser/localProfileLock.js +218 -0
- package/dist/browser/localProfileStore.d.ts +5 -0
- package/dist/browser/localProfileStore.js +91 -0
- package/dist/browser/loginCheck.d.ts +53 -0
- package/dist/browser/loginCheck.js +147 -0
- package/dist/browser/memoryProfileLock.d.ts +2 -0
- package/dist/browser/memoryProfileLock.js +53 -0
- package/dist/browser/memoryProfileStore.d.ts +2 -0
- package/dist/browser/memoryProfileStore.js +31 -0
- package/dist/browser/navigationAudit.d.ts +16 -0
- package/dist/browser/navigationAudit.js +53 -0
- package/dist/browser/persistedEnv.d.ts +3 -0
- package/dist/browser/persistedEnv.js +15 -0
- package/dist/browser/profileLock.d.ts +40 -0
- package/dist/browser/profileLock.js +10 -0
- package/dist/browser/profileStore.d.ts +23 -0
- package/dist/browser/profileStore.js +39 -0
- package/dist/browser/runLiveness.d.ts +13 -0
- package/dist/browser/runLiveness.js +39 -0
- package/dist/browser/sitePolicy.d.ts +10 -0
- package/dist/browser/sitePolicy.js +61 -0
- package/dist/browser/stageBrowserEnv.d.ts +22 -0
- package/dist/browser/stageBrowserEnv.js +147 -0
- package/dist/browser/stageProfileLock.d.ts +17 -0
- package/dist/browser/stageProfileLock.js +39 -0
- package/dist/cli/artifactCommand.js +9 -16
- package/dist/cli/backupCommand.d.ts +9 -0
- package/dist/cli/backupCommand.js +111 -0
- package/dist/cli/browserCommand.d.ts +44 -0
- package/dist/cli/browserCommand.js +472 -0
- package/dist/cli/debugRunCommand.d.ts +10 -0
- package/dist/cli/debugRunCommand.js +109 -0
- package/dist/cli/doctorCommand.d.ts +32 -0
- package/dist/cli/doctorCommand.js +453 -0
- package/dist/cli/envelopeCommand.js +9 -2
- package/dist/cli/exportAllCommand.d.ts +55 -0
- package/dist/cli/exportAllCommand.js +218 -0
- package/dist/cli/exportRunCommand.js +23 -21
- package/dist/cli/hostClient.d.ts +41 -3
- package/dist/cli/hostClient.js +129 -14
- package/dist/cli/initCommand.d.ts +1 -0
- package/dist/cli/initCommand.js +23 -7
- package/dist/cli/initTemplates.d.ts +5 -2
- package/dist/cli/initTemplates.js +32 -2
- package/dist/cli/resolveSafeOutPath.d.ts +2 -0
- package/dist/cli/resolveSafeOutPath.js +40 -0
- package/dist/cli/restoreCommand.d.ts +10 -0
- package/dist/cli/restoreCommand.js +90 -0
- package/dist/cli/runCommand.d.ts +3 -2
- package/dist/cli/runCommand.js +93 -11
- package/dist/cli/runOutput.d.ts +4 -0
- package/dist/cli/runOutput.js +33 -7
- package/dist/cli/runStageCommand.d.ts +1 -0
- package/dist/cli/runStageCommand.js +44 -25
- package/dist/cli/runsCommand.d.ts +1 -1
- package/dist/cli/runsCommand.js +168 -10
- package/dist/cli/triggerCommand.d.ts +12 -0
- package/dist/cli/triggerCommand.js +183 -0
- package/dist/cli/validateCommand.d.ts +1 -1
- package/dist/cli/validateCommand.js +23 -6
- package/dist/cli.js +202 -32
- package/dist/config/browseCatalog.d.ts +1 -0
- package/dist/config/browseCatalog.js +5 -4
- package/dist/config/builtinSkills.d.ts +4 -0
- package/dist/config/builtinSkills.js +23 -0
- package/dist/config/catalogRelativePath.d.ts +63 -0
- package/dist/config/catalogRelativePath.js +126 -0
- package/dist/config/configOrigin.d.ts +27 -0
- package/dist/config/configOrigin.js +59 -0
- package/dist/config/createTrigger.d.ts +27 -0
- package/dist/config/createTrigger.js +232 -0
- package/dist/config/draftPackage.d.ts +117 -0
- package/dist/config/draftPackage.js +550 -0
- package/dist/config/ensureCatalogScanRoot.d.ts +16 -0
- package/dist/config/ensureCatalogScanRoot.js +73 -0
- package/dist/config/hostConfig.d.ts +57 -0
- package/dist/config/hostConfig.js +360 -0
- package/dist/config/listSkills.d.ts +26 -0
- package/dist/config/listSkills.js +206 -5
- package/dist/config/loadOutcome.d.ts +7 -1
- package/dist/config/loadPipeline.js +39 -2
- package/dist/config/loadStage.js +25 -0
- package/dist/config/loadStageflowManifest.js +25 -0
- package/dist/config/loadTask.d.ts +2 -0
- package/dist/config/loadTask.js +57 -18
- package/dist/config/loadTrigger.d.ts +9 -0
- package/dist/config/loadTrigger.js +120 -0
- package/dist/config/materializeStageModels.js +5 -1
- package/dist/config/mergePipelineIncludes.d.ts +3 -0
- package/dist/config/mergePipelineIncludes.js +19 -0
- package/dist/config/migrateYaml.js +6 -11
- package/dist/config/multiProjectCatalog.d.ts +32 -0
- package/dist/config/multiProjectCatalog.js +150 -0
- package/dist/config/normalizePipelineStageEntry.js +27 -1
- package/dist/config/parseCompletionContract.js +6 -0
- package/dist/config/pipelineStageKeys.js +3 -0
- package/dist/config/publishDraftPackage.d.ts +7 -0
- package/dist/config/publishDraftPackage.js +25 -0
- package/dist/config/resolveCatalogContext.js +1 -1
- package/dist/config/resolveCatalogRoots.d.ts +27 -0
- package/dist/config/resolveCatalogRoots.js +76 -0
- package/dist/config/resolveModel.d.ts +7 -1
- package/dist/config/resolveModel.js +11 -1
- package/dist/config/resolvePipelineDag.js +1 -1
- package/dist/config/resolveStageMcpServers.d.ts +9 -1
- package/dist/config/resolveStageMcpServers.js +36 -9
- package/dist/config/scanCatalogPaths.d.ts +1 -1
- package/dist/config/scanCatalogPaths.js +6 -2
- package/dist/config/secretFromEnvOrFile.d.ts +9 -0
- package/dist/config/secretFromEnvOrFile.js +34 -0
- package/dist/config/seededCatalog.d.ts +11 -0
- package/dist/config/seededCatalog.js +29 -0
- package/dist/config/stageBrowser.d.ts +12 -0
- package/dist/config/stageBrowser.js +118 -0
- package/dist/config/toolRequires.d.ts +24 -0
- package/dist/config/toolRequires.js +115 -0
- package/dist/config/triggerCatalog.d.ts +10 -0
- package/dist/config/triggerCatalog.js +37 -0
- package/dist/config/validateCatalog.d.ts +17 -3
- package/dist/config/validateCatalog.js +223 -3
- package/dist/config/validateCompletionContract.js +8 -0
- package/dist/diagnostics/checks.d.ts +39 -0
- package/dist/diagnostics/checks.js +135 -0
- package/dist/envelope/preEmitChecks.d.ts +1 -1
- package/dist/envelope/preEmitChecks.js +8 -0
- package/dist/errors/codes.d.ts +14 -0
- package/dist/errors/codes.js +59 -0
- package/dist/git/cache.d.ts +14 -0
- package/dist/git/cache.js +150 -0
- package/dist/git/credentials.d.ts +9 -0
- package/dist/git/credentials.js +88 -0
- package/dist/git/errors.d.ts +20 -0
- package/dist/git/errors.js +94 -0
- package/dist/git/exec.d.ts +16 -0
- package/dist/git/exec.js +135 -0
- package/dist/git/operations.d.ts +29 -0
- package/dist/git/operations.js +153 -0
- package/dist/git/version.d.ts +1 -0
- package/dist/git/version.js +10 -0
- package/dist/logging/audit.d.ts +16 -0
- package/dist/logging/audit.js +19 -0
- package/dist/logging/commonWords.d.ts +2 -0
- package/dist/logging/commonWords.js +13 -0
- package/dist/logging/logger.d.ts +49 -0
- package/dist/logging/logger.js +193 -0
- package/dist/logging/namedSecrets.d.ts +6 -0
- package/dist/logging/namedSecrets.js +58 -0
- package/dist/logging/redact.d.ts +17 -0
- package/dist/logging/redact.js +105 -0
- package/dist/mcp/catalogTools.js +492 -81
- package/dist/mcp/checkoutTools.d.ts +52 -0
- package/dist/mcp/checkoutTools.js +332 -0
- package/dist/mcp/controlTools.js +182 -6
- package/dist/mcp/deps.d.ts +3 -0
- package/dist/mcp/getStartedTool.d.ts +3 -0
- package/dist/mcp/getStartedTool.js +62 -0
- package/dist/mcp/readArtifact.d.ts +11 -0
- package/dist/mcp/readArtifact.js +46 -30
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/tools.js +6 -0
- package/dist/mcp/triggerTools.d.ts +3 -0
- package/dist/mcp/triggerTools.js +176 -0
- package/dist/net/proxy.d.ts +14 -0
- package/dist/net/proxy.js +78 -0
- package/dist/operatorAgent/docsRetrieval.d.ts +40 -0
- package/dist/operatorAgent/docsRetrieval.js +269 -0
- package/dist/operatorAgent/draftContext.d.ts +16 -0
- package/dist/operatorAgent/draftContext.js +68 -0
- package/dist/operatorAgent/fakeHost.d.ts +39 -0
- package/dist/operatorAgent/fakeHost.js +92 -0
- package/dist/operatorAgent/host.d.ts +40 -0
- package/dist/operatorAgent/host.js +179 -0
- package/dist/operatorAgent/index.d.ts +9 -0
- package/dist/operatorAgent/index.js +8 -0
- package/dist/operatorAgent/piModel.d.ts +80 -0
- package/dist/operatorAgent/piModel.js +528 -0
- package/dist/operatorAgent/profiles/workshopAuthor.d.ts +23 -0
- package/dist/operatorAgent/profiles/workshopAuthor.js +338 -0
- package/dist/operatorAgent/profiles/workshopAuthorPlaybook.d.ts +6 -0
- package/dist/operatorAgent/profiles/workshopAuthorPlaybook.js +103 -0
- package/dist/operatorAgent/profiles/workshopAuthorTools.d.ts +57 -0
- package/dist/operatorAgent/profiles/workshopAuthorTools.js +623 -0
- package/dist/operatorAgent/proposals.d.ts +32 -0
- package/dist/operatorAgent/proposals.js +144 -0
- package/dist/operatorAgent/types.d.ts +128 -0
- package/dist/operatorAgent/types.js +1 -0
- package/dist/package-meta.d.ts +2 -1
- package/dist/package-meta.js +2 -1
- package/dist/preflight/bash.d.ts +8 -0
- package/dist/preflight/bash.js +34 -0
- package/dist/preflight/claudeRoot.d.ts +11 -0
- package/dist/preflight/claudeRoot.js +23 -0
- package/dist/preflight/mcpCommands.d.ts +8 -0
- package/dist/preflight/mcpCommands.js +36 -0
- package/dist/preflight/pipelinePreflight.d.ts +40 -0
- package/dist/preflight/pipelinePreflight.js +192 -0
- package/dist/preflight/tls.d.ts +6 -0
- package/dist/preflight/tls.js +18 -0
- package/dist/preflight/toolchain.d.ts +45 -0
- package/dist/preflight/toolchain.js +219 -0
- package/dist/project/findManifestRoot.d.ts +3 -0
- package/dist/project/findManifestRoot.js +35 -0
- package/dist/project/findProjectRoot.js +3 -4
- package/dist/project/globalHome.d.ts +7 -0
- package/dist/project/globalHome.js +63 -2
- package/dist/project/resolveProjectContext.js +2 -2
- package/dist/project/resolveStageflowContext.d.ts +7 -0
- package/dist/project/resolveStageflowContext.js +46 -30
- package/dist/projection/projectRun.d.ts +2 -1
- package/dist/projection/projectRun.js +1 -0
- package/dist/runstore/assertTmpdir.d.ts +1 -0
- package/dist/runstore/assertTmpdir.js +25 -0
- package/dist/runstore/backup.d.ts +52 -0
- package/dist/runstore/backup.js +292 -0
- package/dist/runstore/createStore.d.ts +18 -1
- package/dist/runstore/createStore.js +64 -5
- package/dist/runstore/debugBundle.d.ts +60 -0
- package/dist/runstore/debugBundle.js +143 -0
- package/dist/runstore/diskUsage.d.ts +50 -0
- package/dist/runstore/diskUsage.js +214 -0
- package/dist/runstore/exportRunPayload.d.ts +8 -0
- package/dist/runstore/exportRunPayload.js +23 -0
- package/dist/runstore/normalizeCatalogPath.d.ts +1 -0
- package/dist/runstore/normalizeCatalogPath.js +10 -0
- package/dist/runstore/paths.d.ts +5 -0
- package/dist/runstore/paths.js +145 -1
- package/dist/runstore/port.d.ts +139 -13
- package/dist/runstore/port.js +8 -1
- package/dist/runstore/restore.d.ts +81 -0
- package/dist/runstore/restore.js +355 -0
- package/dist/runstore/retention.d.ts +27 -0
- package/dist/runstore/retention.js +74 -0
- package/dist/runstore/runManifest.d.ts +146 -0
- package/dist/runstore/runManifest.js +288 -0
- package/dist/runstore/runProjection.d.ts +3 -1
- package/dist/runstore/runProjection.js +63 -1
- package/dist/runstore/sqlite/SqliteRunStore.d.ts +35 -3
- package/dist/runstore/sqlite/SqliteRunStore.js +442 -219
- package/dist/runstore/sqlite/applyStorePragmas.d.ts +39 -0
- package/dist/runstore/sqlite/applyStorePragmas.js +145 -0
- package/dist/runstore/sqlite/migrations/001-baseline.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/001-baseline.js +10 -0
- package/dist/runstore/sqlite/migrations/002-repository-binding.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/002-repository-binding.js +29 -0
- package/dist/runstore/sqlite/migrations/003-run-lifecycle.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/003-run-lifecycle.js +28 -0
- package/dist/runstore/sqlite/migrations/004-auto-resume-count.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/004-auto-resume-count.js +19 -0
- package/dist/runstore/sqlite/migrations/005-config-origins.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/005-config-origins.js +19 -0
- package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.js +28 -0
- package/dist/runstore/sqlite/migrations/007-projects-registry.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/007-projects-registry.js +31 -0
- package/dist/runstore/sqlite/migrations/008-triggers-table.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/008-triggers-table.js +19 -0
- package/dist/runstore/sqlite/migrations/009-trigger-next-run.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/009-trigger-next-run.js +19 -0
- package/dist/runstore/sqlite/migrations/010-trigger-adapter-state.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/010-trigger-adapter-state.js +17 -0
- package/dist/runstore/sqlite/migrations/index.d.ts +21 -0
- package/dist/runstore/sqlite/migrations/index.js +78 -0
- package/dist/runstore/sqlite/schema.d.ts +20 -1
- package/dist/runstore/sqlite/schema.js +277 -1
- package/dist/runstore/sqlite/storeOpenError.d.ts +6 -0
- package/dist/runstore/sqlite/storeOpenError.js +11 -0
- package/dist/runstore/sqlite/storeSchemaError.d.ts +5 -0
- package/dist/runstore/sqlite/storeSchemaError.js +8 -0
- package/dist/runstore/stageExecution.js +3 -0
- package/dist/runstore/storeFilesystem.d.ts +32 -0
- package/dist/runstore/storeFilesystem.js +148 -0
- package/dist/runstore/trackProjection.js +2 -0
- package/dist/runstore/workspaceLayout.d.ts +13 -0
- package/dist/runstore/workspaceLayout.js +76 -0
- package/dist/runtime/answerResume.d.ts +1 -0
- package/dist/runtime/answerResume.js +3 -1
- package/dist/runtime/completionCheckRunner.d.ts +15 -1
- package/dist/runtime/completionCheckRunner.js +67 -7
- package/dist/runtime/containerLimits.d.ts +16 -0
- package/dist/runtime/containerLimits.js +84 -0
- package/dist/runtime/credentialBinding.d.ts +2 -0
- package/dist/runtime/credentialBinding.js +3 -0
- package/dist/runtime/credentialMaterialisation.d.ts +28 -0
- package/dist/runtime/credentialMaterialisation.js +128 -0
- package/dist/runtime/emailSource.d.ts +72 -0
- package/dist/runtime/emailSource.js +304 -0
- package/dist/runtime/gitCheckoutCapability.js +7 -13
- package/dist/runtime/githubPollSource.d.ts +86 -0
- package/dist/runtime/githubPollSource.js +284 -0
- package/dist/runtime/pipelineRunner.d.ts +40 -1
- package/dist/runtime/pipelineRunner.js +181 -17
- package/dist/runtime/pipelineScheduler.d.ts +17 -0
- package/dist/runtime/pipelineScheduler.js +220 -28
- package/dist/runtime/reloadRunCatalog.js +6 -1
- package/dist/runtime/repositoryMaterialize.d.ts +47 -0
- package/dist/runtime/repositoryMaterialize.js +235 -0
- package/dist/runtime/resumeTimedOut.d.ts +1 -1
- package/dist/runtime/resumeTimedOut.js +5 -2
- package/dist/runtime/runChangeBus.js +9 -0
- package/dist/runtime/runDeletion.d.ts +7 -0
- package/dist/runtime/runDeletion.js +37 -0
- package/dist/runtime/runManager.d.ts +169 -4
- package/dist/runtime/runManager.js +1748 -83
- package/dist/runtime/runRetentionSweep.d.ts +31 -0
- package/dist/runtime/runRetentionSweep.js +328 -0
- package/dist/runtime/runRetryCoordinator.d.ts +4 -0
- package/dist/runtime/runRetryCoordinator.js +20 -2
- package/dist/runtime/runSkills.d.ts +40 -0
- package/dist/runtime/runSkills.js +173 -0
- package/dist/runtime/scheduleSource.d.ts +38 -0
- package/dist/runtime/scheduleSource.js +119 -0
- package/dist/runtime/settingsFile.d.ts +5 -0
- package/dist/runtime/settingsFile.js +61 -54
- package/dist/runtime/stageAttemptBootstrap.d.ts +5 -1
- package/dist/runtime/stageAttemptBootstrap.js +250 -27
- package/dist/runtime/stageCacheEnv.d.ts +6 -0
- package/dist/runtime/stageCacheEnv.js +34 -0
- package/dist/runtime/stageConcurrency.d.ts +2 -1
- package/dist/runtime/stageConcurrency.js +4 -2
- package/dist/runtime/stageEnvironment.d.ts +38 -0
- package/dist/runtime/stageEnvironment.js +194 -0
- package/dist/runtime/stageHitl.d.ts +1 -0
- package/dist/runtime/stageHitl.js +5 -1
- package/dist/runtime/stageProcessLauncher.d.ts +20 -0
- package/dist/runtime/stageProcessLauncher.js +236 -41
- package/dist/runtime/stageRecovery.d.ts +3 -1
- package/dist/runtime/stageRecovery.js +19 -4
- package/dist/runtime/stageRoots.d.ts +38 -1
- package/dist/runtime/stageRoots.js +118 -0
- package/dist/runtime/stageRunner.d.ts +6 -0
- package/dist/runtime/stageRunner.js +32 -6
- package/dist/runtime/stageSecretDecl.d.ts +9 -0
- package/dist/runtime/stageSecretDecl.js +102 -0
- package/dist/runtime/stageSecrets.d.ts +40 -0
- package/dist/runtime/stageSecrets.js +181 -0
- package/dist/runtime/stageStreamLog.d.ts +1 -0
- package/dist/runtime/stageStreamLog.js +2 -1
- package/dist/runtime/stageWorker.d.ts +3 -2
- package/dist/runtime/stageWorker.js +58 -10
- package/dist/runtime/stageWorkerProtocol.d.ts +5 -0
- package/dist/runtime/stageWorkerProtocol.js +8 -0
- package/dist/runtime/startPayload.d.ts +32 -0
- package/dist/runtime/startPayload.js +59 -0
- package/dist/runtime/taskInput.js +14 -5
- package/dist/runtime/triggerCatalog.d.ts +6 -0
- package/dist/runtime/triggerCatalog.js +24 -0
- package/dist/runtime/triggerEventMatch.d.ts +2 -0
- package/dist/runtime/triggerEventMatch.js +6 -0
- package/dist/runtime/triggerPort.d.ts +14 -0
- package/dist/runtime/triggerPort.js +1 -0
- package/dist/runtime/triggerRunner.d.ts +17 -0
- package/dist/runtime/triggerRunner.js +89 -0
- package/dist/runtime/verifiedStageExecution.d.ts +8 -0
- package/dist/runtime/verifiedStageExecution.js +16 -1
- package/dist/runtime/webhookSignature.d.ts +1 -0
- package/dist/runtime/webhookSignature.js +12 -0
- package/dist/runtime/workspaceBinding.d.ts +20 -0
- package/dist/runtime/workspaceBinding.js +60 -0
- package/dist/server/allowedHosts.d.ts +19 -0
- package/dist/server/allowedHosts.js +179 -0
- package/dist/server/bootstrap.d.ts +42 -2
- package/dist/server/bootstrap.js +273 -5
- package/dist/server/controlToken.d.ts +47 -0
- package/dist/server/controlToken.js +254 -0
- package/dist/server/createHttpHost.d.ts +11 -2
- package/dist/server/createHttpHost.js +106 -10
- package/dist/server/ensureGlobalService.d.ts +5 -1
- package/dist/server/ensureGlobalService.js +35 -1
- package/dist/server/healthSurfaces.d.ts +6 -0
- package/dist/server/healthSurfaces.js +123 -0
- package/dist/server/http.d.ts +27 -1
- package/dist/server/http.js +2254 -477
- package/dist/server/listenHost.d.ts +5 -0
- package/dist/server/listenHost.js +56 -0
- package/dist/server/mcpHost.d.ts +10 -1
- package/dist/server/mcpHost.js +36 -6
- package/dist/server/operatorResults.d.ts +2 -2
- package/dist/server/operatorResults.js +40 -29
- package/dist/server/requestAuthContext.d.ts +12 -0
- package/dist/server/requestAuthContext.js +21 -0
- package/dist/server/shutdown.d.ts +69 -0
- package/dist/server/shutdown.js +219 -0
- package/dist/server/triggerRoutes.d.ts +15 -0
- package/dist/server/triggerRoutes.js +268 -0
- package/dist/tools/askOperator.d.ts +3 -2
- package/dist/types/completion.d.ts +3 -0
- package/dist/types/pipeline.d.ts +10 -1
- package/dist/types/preEmitCheck.d.ts +7 -0
- package/dist/types/stage.d.ts +22 -0
- package/dist/types/stageflowManifest.d.ts +3 -0
- package/dist/types/task.d.ts +8 -0
- package/dist/types/trigger.d.ts +18 -0
- package/dist/types/trigger.js +1 -0
- package/dist/ui/assets/{index-CSsDued1.css → index-Bv4p1aPK.css} +1 -1
- package/dist/ui/assets/index-CntB4bZR.js +133 -0
- package/dist/ui/index.html +2 -2
- package/dist/workshop/autosave.d.ts +58 -0
- package/dist/workshop/autosave.js +222 -0
- package/dist/workshop/buildStore.d.ts +79 -0
- package/dist/workshop/buildStore.js +326 -0
- package/dist/workshop/chatTurn.d.ts +232 -0
- package/dist/workshop/chatTurn.js +475 -0
- package/dist/workshop/modelSettings.d.ts +18 -0
- package/dist/workshop/modelSettings.js +44 -0
- package/dist/workshop/sessionStore.d.ts +61 -0
- package/dist/workshop/sessionStore.js +254 -0
- package/dist/workshop/workshopPin.d.ts +72 -0
- package/dist/workshop/workshopPin.js +193 -0
- package/examples/README.md +99 -0
- package/examples/archify-on-pr/README.md +213 -0
- package/examples/archify-on-pr/archify-on-pr.pipeline.yaml +19 -0
- package/examples/archify-on-pr/archify-on-pr.task.yaml +19 -0
- package/examples/archify-on-pr/author-diagrams.yaml +106 -0
- package/examples/archify-on-pr/detect-changes.yaml +89 -0
- package/examples/browser-session/README.md +77 -0
- package/examples/browser-session/browser-session.pipeline.yaml +50 -0
- package/examples/browser-session/browser-session.task.yaml +6 -0
- package/examples/browser-session/check-login.yaml +22 -0
- package/examples/browser-session/fixture-server.mjs +64 -0
- package/examples/browser-session/human-login.yaml +31 -0
- package/examples/browser-session/merge.yaml +36 -0
- package/examples/browser-session/work-a.yaml +41 -0
- package/examples/browser-session/work-b.yaml +41 -0
- package/examples/ci-validate/README.md +35 -0
- package/examples/ci-validate/check.yaml +13 -0
- package/examples/ci-validate/ci-demo.pipeline.yaml +4 -0
- package/examples/ci-validate/validate.sh +5 -0
- package/examples/compliance-review-demo/README.md +125 -0
- package/examples/compliance-review-demo/compliance-review-demo.pipeline.yaml +29 -0
- package/examples/compliance-review-demo/connect-account.yaml +47 -0
- package/examples/compliance-review-demo/map-to-control.yaml +123 -0
- package/examples/compliance-review-demo/poll-bucket-config.yaml +103 -0
- package/examples/compliance-review-demo/publish-report.yaml +79 -0
- package/examples/compliance-review-demo/review-verdict.yaml +122 -0
- package/examples/compliance-review-demo/run-compliance-check.yaml +96 -0
- package/examples/compliance-review-demo/store-evidence.yaml +143 -0
- package/examples/conditional-fork/README.md +89 -0
- package/examples/conditional-fork/branch-a.yaml +13 -0
- package/examples/conditional-fork/branch-b.yaml +13 -0
- package/examples/conditional-fork/decide.yaml +35 -0
- package/examples/conditional-fork/fork-demo.pipeline.yaml +20 -0
- package/examples/conditional-fork/fork-demo.task.yaml +8 -0
- package/examples/context7-mcp/README.md +42 -0
- package/examples/context7-mcp/context7-mcp.pipeline.yaml +15 -0
- package/examples/context7-mcp/context7-mcp.task.yaml +4 -0
- package/examples/context7-mcp/fetch-docs.yaml +52 -0
- package/examples/context7-mcp/resolve-library.yaml +31 -0
- package/examples/context7-mcp/write-brief.yaml +52 -0
- package/examples/feature-loop/README.md +104 -0
- package/examples/feature-loop/address-feedback.yaml +148 -0
- package/examples/feature-loop/align.yaml +116 -0
- package/examples/feature-loop/decompose.yaml +86 -0
- package/examples/feature-loop/default-model-hierarchy.task.yaml +58 -0
- package/examples/feature-loop/feature-loop.pipeline.yaml +140 -0
- package/examples/feature-loop/feature-loop.task.yaml +25 -0
- package/examples/feature-loop/implement.yaml +128 -0
- package/examples/feature-loop/plan.yaml +111 -0
- package/examples/feature-loop/publish.yaml +167 -0
- package/examples/feature-loop/review.yaml +146 -0
- package/examples/feature-loop/verify.yaml +106 -0
- package/examples/feedback-loop/README.md +72 -0
- package/examples/feedback-loop/VERIFY.md +208 -0
- package/examples/feedback-loop/continue-only.task.yaml +4 -0
- package/examples/feedback-loop/exhaust-require-continue.task.yaml +6 -0
- package/examples/feedback-loop/exhaust-wait-human.task.yaml +11 -0
- package/examples/feedback-loop/feedback-loop-wait-human.pipeline.yaml +23 -0
- package/examples/feedback-loop/feedback-loop.pipeline.yaml +23 -0
- package/examples/feedback-loop/feedback-loop.task.yaml +4 -0
- package/examples/feedback-loop/implement.yaml +14 -0
- package/examples/feedback-loop/plan.yaml +14 -0
- package/examples/feedback-loop/review.yaml +15 -0
- package/examples/feedback-loop/send-back-once.task.yaml +6 -0
- package/examples/feedback-loop/submit.yaml +12 -0
- package/examples/generic-fan-in/README.md +151 -0
- package/examples/generic-fan-in/clarify.yaml +18 -0
- package/examples/generic-fan-in/generic-fan-in-accepted.pipeline.yaml +19 -0
- package/examples/generic-fan-in/generic-fan-in-accepted.task.yaml +8 -0
- package/examples/generic-fan-in/generic-fan-in.pipeline.yaml +18 -0
- package/examples/generic-fan-in/generic-fan-in.task.yaml +9 -0
- package/examples/generic-fan-in/research.yaml +45 -0
- package/examples/generic-fan-in/synthesize.yaml +66 -0
- package/examples/generic-fan-in/validation.yaml +45 -0
- package/examples/github-release/README.md +78 -0
- package/examples/github-release/draft-release-notes.yaml +64 -0
- package/examples/github-release/github-release.pipeline.yaml +11 -0
- package/examples/github-release/github-release.task.yaml +13 -0
- package/examples/github-release/publish-github-release.yaml +64 -0
- package/examples/hello-world/README.md +28 -0
- package/examples/hello-world/hello.pipeline.yaml +4 -0
- package/examples/hello-world/my-task.task.yaml +6 -0
- package/examples/hello-world/research.yaml +18 -0
- package/examples/mcp-hitl-tour/README.md +113 -0
- package/examples/mcp-hitl-tour/draft-angle.yaml +33 -0
- package/examples/mcp-hitl-tour/draft-short.yaml +32 -0
- package/examples/mcp-hitl-tour/emit-angles.yaml +45 -0
- package/examples/mcp-hitl-tour/gather.yaml +31 -0
- package/examples/mcp-hitl-tour/intake.yaml +62 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour-exhaust.task.yaml +13 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour.pipeline.yaml +54 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour.task.yaml +16 -0
- package/examples/mcp-hitl-tour/polish.yaml +33 -0
- package/examples/mcp-hitl-tour/review.yaml +17 -0
- package/examples/mcp-hitl-tour/ship.yaml +25 -0
- package/examples/oss-issue-contribution/README.md +218 -0
- package/examples/oss-issue-contribution/oss-address-review-feedback.yaml +117 -0
- package/examples/oss-issue-contribution/oss-approve-contribution.yaml +181 -0
- package/examples/oss-issue-contribution/oss-approve-plan.yaml +111 -0
- package/examples/oss-issue-contribution/oss-explain-fix.yaml +108 -0
- package/examples/oss-issue-contribution/oss-explain-issue.yaml +114 -0
- package/examples/oss-issue-contribution/oss-implement-source-fix.yaml +171 -0
- package/examples/oss-issue-contribution/oss-investigate-area.yaml +116 -0
- package/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml +125 -0
- package/examples/oss-issue-contribution/oss-issue-intake.yaml +106 -0
- package/examples/oss-issue-contribution/oss-plan-investigation.yaml +112 -0
- package/examples/oss-issue-contribution/oss-plan-review.yaml +109 -0
- package/examples/oss-issue-contribution/oss-reproduce-issue.yaml +140 -0
- package/examples/oss-issue-contribution/oss-review-change.yaml +107 -0
- package/examples/oss-issue-contribution/oss-verify-fix.yaml +130 -0
- package/examples/oss-issue-contribution/oss-write-regression-test.yaml +135 -0
- package/examples/oss-issue-contribution/pi-7629.task.yaml +79 -0
- package/examples/oss-issue-contribution/pi-8919.task.yaml +75 -0
- package/examples/oss-issue-contribution/pydantic-ai-7971.task.yaml +53 -0
- package/examples/oss-quick-fix/README.md +65 -0
- package/examples/oss-quick-fix/implement-fix.yaml +84 -0
- package/examples/oss-quick-fix/oss-quick-fix.pipeline.yaml +35 -0
- package/examples/oss-quick-fix/oss-quick-fix.task.yaml +19 -0
- package/examples/oss-quick-fix/ship-fix.yaml +81 -0
- package/examples/oss-quick-fix/understand-issue.yaml +67 -0
- package/examples/oss-quick-fix/verify-fix.yaml +73 -0
- package/examples/plan-review/README.md +37 -0
- package/examples/plan-review/plan-review-followup.yaml +13 -0
- package/examples/plan-review/plan-review.pipeline.yaml +9 -0
- package/examples/plan-review/plan-review.task.yaml +9 -0
- package/examples/plan-review/plan-review.yaml +25 -0
- package/examples/playwright-mcp/README.md +39 -0
- package/examples/playwright-mcp/playwright-mcp.pipeline.yaml +5 -0
- package/examples/playwright-mcp/playwright-mcp.task.yaml +4 -0
- package/examples/playwright-mcp/screenshot.yaml +40 -0
- package/examples/retry-tour/README.md +75 -0
- package/examples/retry-tour/retry-tour.pipeline.yaml +122 -0
- package/examples/retry-tour/retry-tour.task.yaml +9 -0
- package/examples/route-if-tour/README.md +202 -0
- package/examples/route-if-tour/route-if-tour.pipeline.yaml +950 -0
- package/examples/route-if-tour/route-if-tour.task.yaml +4 -0
- package/examples/route-wiring-smoke-test/01-core-routing.pipeline.yaml +168 -0
- package/examples/route-wiring-smoke-test/02-on-gating.pipeline.yaml +44 -0
- package/examples/route-wiring-smoke-test/03-two-entry-points.pipeline.yaml +28 -0
- package/examples/route-wiring-smoke-test/04-entry-false-equivalent-to-omitted.pipeline.yaml +27 -0
- package/examples/route-wiring-smoke-test/05-fork-choice.pipeline.yaml +110 -0
- package/examples/route-wiring-smoke-test/06-fan-out-fan-in.pipeline.yaml +82 -0
- package/examples/route-wiring-smoke-test/07-loop-human-decision.pipeline.yaml +82 -0
- package/examples/route-wiring-smoke-test/08-skip-fallback-and-multi-on-gate.pipeline.yaml +77 -0
- package/examples/route-wiring-smoke-test/09-multi-loop-targets.pipeline.yaml +102 -0
- package/examples/route-wiring-smoke-test/10-uses-dialect-fork.pipeline.yaml +23 -0
- package/examples/route-wiring-smoke-test/11-sequential-io-handoff.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/12-complex-io-schemas.pipeline.yaml +138 -0
- package/examples/route-wiring-smoke-test/13-ref-io-handoff.pipeline.yaml +84 -0
- package/examples/route-wiring-smoke-test/14-if-eq-gating.pipeline.yaml +50 -0
- package/examples/route-wiring-smoke-test/15-if-all-gated.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/16-if-composition.pipeline.yaml +65 -0
- package/examples/route-wiring-smoke-test/17-if-join.pipeline.yaml +80 -0
- package/examples/route-wiring-smoke-test/README.md +377 -0
- package/examples/route-wiring-smoke-test/rejected/01-reject-legacy-needs.pipeline.yaml +26 -0
- package/examples/route-wiring-smoke-test/rejected/02-reject-legacy-fork.pipeline.yaml +25 -0
- package/examples/route-wiring-smoke-test/rejected/03-reject-legacy-feedback-loop.pipeline.yaml +30 -0
- package/examples/route-wiring-smoke-test/rejected/04-reject-missing-entry.pipeline.yaml +24 -0
- package/examples/route-wiring-smoke-test/rejected/05-reject-unreachable.pipeline.yaml +35 -0
- package/examples/route-wiring-smoke-test/rejected/06-reject-allow-none-without-route-select.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/rejected/07-reject-cycle.pipeline.yaml +27 -0
- package/examples/route-wiring-smoke-test/rejected/08-reject-loop-non-ancestor.pipeline.yaml +42 -0
- package/examples/route-wiring-smoke-test/rejected/09-reject-route-select-leaf.pipeline.yaml +26 -0
- package/examples/route-wiring-smoke-test/rejected/12-reject-loop-replay-unsafe.pipeline.yaml +55 -0
- package/examples/route-wiring-smoke-test/rejected/13-reject-multiple-loop-entries.pipeline.yaml +51 -0
- package/examples/route-wiring-smoke-test/rejected/14-reject-duplicate-stage-id.pipeline.yaml +35 -0
- package/examples/route-wiring-smoke-test/rejected/15-reject-unknown-route-target.pipeline.yaml +15 -0
- package/examples/route-wiring-smoke-test/rejected/16-reject-malformed-route-item.pipeline.yaml +15 -0
- package/examples/route-wiring-smoke-test/rejected/17-reject-io-incompatible.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/18-reject-nested-io.pipeline.yaml +51 -0
- package/examples/route-wiring-smoke-test/rejected/19-reject-array-item-io.pipeline.yaml +55 -0
- package/examples/route-wiring-smoke-test/rejected/20-reject-closed-io.pipeline.yaml +36 -0
- package/examples/route-wiring-smoke-test/rejected/21-reject-ref-io.pipeline.yaml +42 -0
- package/examples/route-wiring-smoke-test/rejected/22-reject-if-unknown-field.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/23-reject-if-optional-field.pipeline.yaml +32 -0
- package/examples/route-wiring-smoke-test/rejected/24-reject-if-empty-all.pipeline.yaml +31 -0
- package/examples/route-wiring-smoke-test/rejected/25-reject-if-gt-on-string.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/26-reject-if-optional-nested.pipeline.yaml +36 -0
- package/examples/route-wiring-smoke-test/rejected/27-reject-if-on-loop.pipeline.yaml +63 -0
- package/examples/route-wiring-smoke-test/rejected/29-reject-if-on-failed.pipeline.yaml +46 -0
- package/examples/route-wiring-smoke-test/smoke-test.task.yaml +4 -0
- package/examples/route-wiring-smoke-test/stages/branch-a.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/branch-b.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/decide.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/finish.yaml +12 -0
- package/examples/ship-feature/README.md +190 -0
- package/examples/ship-feature/feat-address-feedback.yaml +119 -0
- package/examples/ship-feature/feat-implement.yaml +180 -0
- package/examples/ship-feature/feat-plan.yaml +120 -0
- package/examples/ship-feature/feat-review.yaml +109 -0
- package/examples/ship-feature/feat-ship.yaml +203 -0
- package/examples/ship-feature/ship-feature.pipeline.yaml +44 -0
- package/examples/ship-feature/ship-feature.task.yaml +78 -0
- package/examples/stage-mcp/README.md +145 -0
- package/examples/stage-mcp/echo-mcp.mjs +20 -0
- package/examples/stage-mcp/stage-mcp-dead.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp-dead.task.yaml +3 -0
- package/examples/stage-mcp/stage-mcp-missing-var.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp-missing-var.task.yaml +3 -0
- package/examples/stage-mcp/stage-mcp.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp.task.yaml +4 -0
- package/examples/stage-mcp/use-echo.yaml +20 -0
- package/examples/stageflow.yaml +51 -0
- package/examples/verify-tour/README.md +80 -0
- package/examples/verify-tour/verify-tour.pipeline.yaml +162 -0
- package/examples/verify-tour/verify-tour.task.yaml +11 -0
- package/package.json +9 -1
- package/skills/stageflow/SKILL.md +6 -6
- package/skills/stageflow/references/control-surface.md +13 -5
- package/skills/stageflow/scripts/detect-host.mjs +14 -1
- package/skills/stageflow/scripts/detect-host.test.mjs +29 -1
- package/skills/stageflow-author/SKILL.md +4 -3
- package/skills/stageflow-author/references/catalog-mapping.md +16 -0
- package/skills/stageflow-author/references/catalog-write-conventions.md +1 -1
- package/skills/stageflow-author/references/stage-prompt-template.md +4 -4
- package/skills/stageflow-run/SKILL.md +22 -12
- package/skills/stageflow-run/references/mcp-call.md +9 -1
- package/skills/stageflow-run/references/task-and-pipeline-selection.md +19 -6
- package/skills/stageflow-run/scripts/mcp-call.mjs +46 -6
- package/skills/stageflow-run/scripts/mcp-call.test.mjs +64 -0
- package/skills/stageflow-session-capture/references/catalog-authoring.md +2 -0
- package/skills/stageflow-setup/SKILL.md +51 -8
- package/dist/ui/assets/index-Da5EHU6M.js +0 -119
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# OSS issue contribution pipeline
|
|
2
|
+
|
|
3
|
+
Use a real upstream issue to demonstrate Stageflow's strongest runtime features:
|
|
4
|
+
evidence-preserving stages, parallel investigation, explicit handoffs, human
|
|
5
|
+
approval, one controlled writer, independent verification, parallel review, and
|
|
6
|
+
a final publication gate.
|
|
7
|
+
|
|
8
|
+
The pipeline is repository-neutral. Point the task's `checkout` at a dedicated,
|
|
9
|
+
clean branch in Mastra, Pydantic AI, or another project. It reads that project's
|
|
10
|
+
own contribution instructions before acting.
|
|
11
|
+
|
|
12
|
+
This catalog is **route-wired** (`entry` / `route` / multiple `to:`). Investigation
|
|
13
|
+
and review are parallel DAG fan-out, not a sealed
|
|
14
|
+
[Clone Chain](../../docs/yaml-catalog.md#clone-chain) (emitter → clone child → Join).
|
|
15
|
+
One Clone Instance per investigation or review item remains intended future
|
|
16
|
+
wiring; author that shape from
|
|
17
|
+
[`tests/fixtures/pipelines/clone-chain-*.pipeline.yaml`](../../tests/fixtures/pipelines/).
|
|
18
|
+
|
|
19
|
+
## Flow
|
|
20
|
+
|
|
21
|
+
1. Capture the issue, repository baseline, and contribution rules.
|
|
22
|
+
2. In parallel with reproduction, write a ce-explain HTML teaching artifact for the issue (no HITL).
|
|
23
|
+
3. Reproduce the failure without editing tracked files.
|
|
24
|
+
4. Intended Clone Chain: one Clone Instance per investigation item (parallel).
|
|
25
|
+
5. Join the evidence into an implementation plan and ask for approval.
|
|
26
|
+
6. Write the regression test in its own short stage, then implement the fix
|
|
27
|
+
and drive the plan's full validation command list to green in one
|
|
28
|
+
session — the only stage that can edit the checkout owns the whole
|
|
29
|
+
fix-and-validate loop, rather than handing an unfinished fix to a
|
|
30
|
+
read-only stage that could only report the gap.
|
|
31
|
+
7. Independently verify the diff and relevant tests.
|
|
32
|
+
8. In parallel with review planning, write a ce-explain HTML teaching artifact for the verified fix (no HITL).
|
|
33
|
+
9. Intended Clone Chain: one Clone Instance per focused review (parallel).
|
|
34
|
+
10. Address every blocking review finding in one fixup stage — sweeping for
|
|
35
|
+
every instance of the same category of problem, not only the ones
|
|
36
|
+
reviewers happened to cite. This catalog stays a DAG (parallel fan-out
|
|
37
|
+
via multiple `to:`); it does not declare `{ type: loop }` back to
|
|
38
|
+
oss-implement-source-fix or a second review pass.
|
|
39
|
+
11. Join into a PR-ready package, ask for final approval, and — once the
|
|
40
|
+
operator accepts — push the branch and open the pull request against the
|
|
41
|
+
fork in that same stage.
|
|
42
|
+
|
|
43
|
+
No stage ever targets the upstream repo, and no stage before the final one
|
|
44
|
+
commits, pushes, or opens a pull request. `oss-approve-contribution` writes
|
|
45
|
+
`contribution-package.md`, calls `ask_operator`, and only runs `git`/`gh`
|
|
46
|
+
against the fork after an explicit accept through its `artifact_backed` gate.
|
|
47
|
+
There is no separate publish flag or dry-run mode: the operator's accept is
|
|
48
|
+
the only gate between "package written" and "PR opened."
|
|
49
|
+
|
|
50
|
+
## Runtime contracts
|
|
51
|
+
|
|
52
|
+
Several stages opt into Stageflow runtime contracts that make the pipeline fail
|
|
53
|
+
closed when a stage skips its deliverable.
|
|
54
|
+
|
|
55
|
+
Every stage except the two approval stages declares `gate_kinds: []`, which
|
|
56
|
+
unregisters the `ask_operator` tool entirely. Those stages cannot pause for
|
|
57
|
+
operator input or offer to substitute a report for real work. Only
|
|
58
|
+
`oss-approve-plan` and `oss-approve-contribution` keep
|
|
59
|
+
`gate_kinds: [artifact_backed]`.
|
|
60
|
+
|
|
61
|
+
### Review feedback has no loop in this catalog
|
|
62
|
+
|
|
63
|
+
Loops exist via `{ type: loop }` on `route` (see
|
|
64
|
+
[`examples/feedback-loop/`](../feedback-loop/)). This pipeline does not use
|
|
65
|
+
one: it stays a DAG with parallel fan-out via multiple `to:`. If
|
|
66
|
+
`oss-review-change` finds a blocking problem, the run does not resume
|
|
67
|
+
`oss-implement-source-fix` or `oss-verify-fix`. `oss-address-review-feedback`
|
|
68
|
+
is the accommodation: a single fixup stage after review and before approval
|
|
69
|
+
that addresses every blocking finding — sweeping for other instances of the
|
|
70
|
+
same category of problem, not only the ones a reviewer happened to cite — then
|
|
71
|
+
hands off to `oss-approve-contribution`, which independently re-checks the
|
|
72
|
+
fix before accepting it. It cannot get a fresh review of its own fix,
|
|
73
|
+
though: if its patch introduces something new, `oss-approve-contribution`'s
|
|
74
|
+
fail-closed check is the backstop, and the operator has to intervene by hand —
|
|
75
|
+
see [docs/cli-reference.md](../../docs/cli-reference.md) for `sf runs retry`,
|
|
76
|
+
which can retry a succeeded stage in place and reset everything downstream.
|
|
77
|
+
|
|
78
|
+
Every stage declares `verify` with at least one `type: artifact` check, so a
|
|
79
|
+
success emit is rejected unless the named file appears in the envelope's
|
|
80
|
+
artifact list. Writer stages add `type: checkout_changes` with `path_fields`;
|
|
81
|
+
approval stages also declare a `type: gate` check (`kind: artifact_backed`).
|
|
82
|
+
Pipeline entries wire `on_verify_fail` (repair for most stages; `manual` on
|
|
83
|
+
`oss-approve-contribution`) so after-phase failures retry or wait for an
|
|
84
|
+
operator instead of silently advancing.
|
|
85
|
+
|
|
86
|
+
| Stage | Gate | Required artifacts | Other checks |
|
|
87
|
+
|-------|------|--------------------|--------------|
|
|
88
|
+
| `oss-issue-intake` | `[]` | `issue-intake.md` | — |
|
|
89
|
+
| `oss-explain-issue` | `[]` | `issue-explainer.html` | — |
|
|
90
|
+
| `oss-reproduce-issue` | `[]` | `reproduction.md` | — |
|
|
91
|
+
| `oss-plan-investigation` | `[]` | `investigation-map.md` | intended Clone Chain emitter |
|
|
92
|
+
| `oss-investigate-area` | `[]` | `investigation.md` | intended clone child |
|
|
93
|
+
| `oss-approve-plan` | `[artifact_backed]` | `implementation-plan.md` | — |
|
|
94
|
+
| `oss-write-regression-test` | `[]` | `regression-test-report.md` | `[test_files]` |
|
|
95
|
+
| `oss-implement-source-fix` | `[]` | `implementation-report.md` | `[changed_files]` |
|
|
96
|
+
| `oss-verify-fix` | `[]` | `verification.md` | — |
|
|
97
|
+
| `oss-explain-fix` | `[]` | `fix-explainer.html` | — |
|
|
98
|
+
| `oss-plan-review` | `[]` | `review-plan.md` | intended Clone Chain emitter |
|
|
99
|
+
| `oss-review-change` | `[]` | `review.md` | intended clone child |
|
|
100
|
+
| `oss-address-review-feedback` | `[]` | `review-feedback-report.md` | — |
|
|
101
|
+
| `oss-approve-contribution` | `[artifact_backed]` | `contribution-package.md`, `pull-request.md` | — |
|
|
102
|
+
|
|
103
|
+
Intended Clone Chains: `oss-plan-investigation` → `oss-investigate-area` → `oss-approve-plan`, and `oss-plan-review` → `oss-review-change` → join at address/approve. This directory's YAML is not yet that shape. See [YAML catalog — Clone Chain](../../docs/yaml-catalog.md#clone-chain).
|
|
104
|
+
|
|
105
|
+
`oss-investigate-area` and `oss-review-change` use empty `io.input` (a subset of each parent's `io.output`). Assignment fields (`area_id`/`objective`/`paths`/`questions`/`constraints` or the review equivalent) belong on intended Clone Chain payloads, not this DAG.
|
|
106
|
+
|
|
107
|
+
Plan approval (`oss-approve-plan`) and contribution approval
|
|
108
|
+
(`oss-approve-contribution`) use `artifact_backed` HITL and cannot self-approve;
|
|
109
|
+
the runtime checks the QA trail before accepting a success emit.
|
|
110
|
+
|
|
111
|
+
`oss-write-regression-test` and `oss-implement-source-fix` require an array
|
|
112
|
+
field (`test_files` or `changed_files`) with `minItems: 1` on `io.output.schema`.
|
|
113
|
+
That constraint only checks the array is non-empty — it does not verify the
|
|
114
|
+
entries are real edits in the checkout, and a Stageflow artifact path satisfies
|
|
115
|
+
it. A run that never touched the checkout has passed this way before.
|
|
116
|
+
|
|
117
|
+
Both writer stages therefore also declare a `verify` check of
|
|
118
|
+
`type: checkout_changes` with `path_fields` naming that array field, so the
|
|
119
|
+
runtime enforces after the stage what the prompts alone could not:
|
|
120
|
+
|
|
121
|
+
- `type: checkout_changes` rejects a success outcome when
|
|
122
|
+
`git status --porcelain` in the bound task checkout is empty.
|
|
123
|
+
- `path_fields: [changed_files]` (or `[test_files]`) rejects a success outcome
|
|
124
|
+
when any listed entry is not a path inside the checkout — including the
|
|
125
|
+
`stages/<id>/attempts/<n>/artifacts/...` paths returned by
|
|
126
|
+
`write_stage_artifact`.
|
|
127
|
+
|
|
128
|
+
Stageflow is a configurable-stage runtime. These contracts are opt-in per
|
|
129
|
+
catalog; this example is one consumer that uses them to enforce a strict
|
|
130
|
+
contribution workflow.
|
|
131
|
+
|
|
132
|
+
## Explainers
|
|
133
|
+
|
|
134
|
+
The two explainer stages are dead-end siblings: they do not pause investigation,
|
|
135
|
+
implementation, or review, and they do not call `ask_operator`. Each composes a
|
|
136
|
+
ce-explain HTML teaching artifact — concept for the issue, diff for the verified
|
|
137
|
+
fix — grounded in quoted checkout source and an inline SVG, written with
|
|
138
|
+
`write_stage_artifact`. Open `issue-explainer.html` and `fix-explainer.html`
|
|
139
|
+
from the run artifacts when you want them. They require the `ce-explain` skill
|
|
140
|
+
at `.pi/skills/ce-explain/` (copy the skill tree from Compound Engineering;
|
|
141
|
+
`sf skills install` expects a doctor binary this skill does not ship).
|
|
142
|
+
|
|
143
|
+
## Prepare the target repository
|
|
144
|
+
|
|
145
|
+
Use a dedicated branch and begin with a clean tracked worktree:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
git clone https://github.com/mastra-ai/mastra.git
|
|
149
|
+
cd mastra
|
|
150
|
+
git switch -c investigate-22863
|
|
151
|
+
git status --short
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Create a task outside the target checkout
|
|
155
|
+
|
|
156
|
+
Task context is the pipeline's portable issue input. Include the issue body or
|
|
157
|
+
acceptance criteria so the run remains useful if GitHub access is unavailable.
|
|
158
|
+
|
|
159
|
+
```yaml
|
|
160
|
+
id: mastra-22863
|
|
161
|
+
goal: >
|
|
162
|
+
Deliver a verified minimal fix for Mastra issue #22863, applied as source and
|
|
163
|
+
test edits in the checkout working tree.
|
|
164
|
+
context: |
|
|
165
|
+
Issue: https://github.com/mastra-ai/mastra/issues/22863
|
|
166
|
+
Title: <copy the current issue title>
|
|
167
|
+
Reported behavior: <copy or summarize the concrete failure>
|
|
168
|
+
Expected behavior: <copy or summarize the acceptance criterion>
|
|
169
|
+
Current triage/maintainer status: <record what you verified today>
|
|
170
|
+
constraints: |
|
|
171
|
+
Respect all repository contribution and agent instructions.
|
|
172
|
+
Do not publish while the issue is awaiting maintainer direction.
|
|
173
|
+
Do not commit, push, or open a pull request.
|
|
174
|
+
Keep the change limited to the reproduced issue and its regression test.
|
|
175
|
+
checkout: /absolute/path/to/mastra
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
For Pydantic AI, use the same shape with a Pydantic issue and set `checkout` to
|
|
179
|
+
the absolute path of that clone. A ready task for issue #7971 is
|
|
180
|
+
`pydantic-ai-7971.task.yaml`. The stage definitions do not need to change.
|
|
181
|
+
|
|
182
|
+
## Run
|
|
183
|
+
|
|
184
|
+
From any directory with Stageflow installed:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
sf validate \
|
|
188
|
+
--pipeline /path/to/stageflow/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml \
|
|
189
|
+
--strict
|
|
190
|
+
|
|
191
|
+
sf run \
|
|
192
|
+
--pipeline /path/to/stageflow/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml \
|
|
193
|
+
--task /path/to/mastra-22863.task.yaml
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
`oss-approve-contribution` pushes and opens the pull request against the fork
|
|
197
|
+
as soon as the operator accepts its `artifact_backed` gate — there is no
|
|
198
|
+
dry-run mode and no extra flag. `gh` must be on `PATH` and authenticated
|
|
199
|
+
(`GH_TOKEN` or `GITHUB_TOKEN`) before you accept, or the publish step will
|
|
200
|
+
fail after approval.
|
|
201
|
+
|
|
202
|
+
Run `sf ui` in another terminal to inspect envelopes, artifacts, Clone Instances,
|
|
203
|
+
and answer the two artifact-backed gates. The explainer HTML files are ordinary
|
|
204
|
+
stage artifacts; they do not appear as gates.
|
|
205
|
+
|
|
206
|
+
## Safety and interpretation
|
|
207
|
+
|
|
208
|
+
- Plan approval authorizes only local edits in the task checkout.
|
|
209
|
+
- Review Clone Instances always complete successfully and carry `pass` or
|
|
210
|
+
`changes_required` in their payload, allowing the Join to see every review.
|
|
211
|
+
- Any blocking review fails the final stage closed.
|
|
212
|
+
- The operator's accept through `oss-approve-contribution`'s `artifact_backed`
|
|
213
|
+
gate is the only authorization to publish, and it happens moments before the
|
|
214
|
+
stage runs `git push` / `gh pr create` in the same session — there is no
|
|
215
|
+
separate flag and no second chance to reconsider after accepting. It never
|
|
216
|
+
authorizes targeting upstream.
|
|
217
|
+
- Issue labels, assignments, and maintainer guidance can change. Re-verify them
|
|
218
|
+
before accepting the gate on a run that will open a pull request.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
id: oss-address-review-feedback
|
|
2
|
+
system_prompt: |
|
|
3
|
+
Address every blocking finding from oss-review-change before the
|
|
4
|
+
contribution package is assembled. There is no automatic path back to
|
|
5
|
+
oss-implement-source-fix or oss-verify-fix in this pipeline, and this is the
|
|
6
|
+
only stage positioned to edit the checkout after review — treat that as the
|
|
7
|
+
reason this stage exists, not as license to rewrite the fix. This stage is
|
|
8
|
+
the last-mile fixup for what reviewers found, not a second implementation
|
|
9
|
+
pass.
|
|
10
|
+
|
|
11
|
+
Reading upstream evidence. The user prompt contains a line
|
|
12
|
+
"Factory run workspace: <absolute path>". Prior artifacts arrive in the
|
|
13
|
+
prior envelope's artifacts[] as run-relative paths; read each one at
|
|
14
|
+
<Factory run workspace>/<artifact path>. Every oss-review-change
|
|
15
|
+
envelope's payload (review_id, verdict, blocking_findings) and its review.md
|
|
16
|
+
are authoritative; implementation-report.md and verification.md give the
|
|
17
|
+
context needed to make a correct, narrow fix. Prose summaries are secondary.
|
|
18
|
+
|
|
19
|
+
Definition of done — every line must hold before you emit success:
|
|
20
|
+
- Every oss-review-change envelope and its review.md have been read.
|
|
21
|
+
- If every verdict is pass: the checkout is untouched, fixed_files is empty,
|
|
22
|
+
and addressed_all_blocking is true.
|
|
23
|
+
- If any verdict is changes_required: every entry in every review's
|
|
24
|
+
blocking_findings has been addressed, not only the specific file/line
|
|
25
|
+
reviewers happened to cite — search for every other instance of the same
|
|
26
|
+
category of problem (for example, every other test still asserting
|
|
27
|
+
semantics the fix already inverted elsewhere, or every other call site
|
|
28
|
+
with the same missing type widening) and fix those too. A reviewer's
|
|
29
|
+
citation is a sample of the problem, not its full extent.
|
|
30
|
+
- git diff in the checkout is non-empty whenever any verdict was
|
|
31
|
+
changes_required; the emit is rejected if you claim to have addressed a
|
|
32
|
+
blocking finding while the working tree is clean.
|
|
33
|
+
- Every fixed_files entry is a repo-relative path inside the checkout that
|
|
34
|
+
also appears in git diff --name-only; the emit is rejected for any entry
|
|
35
|
+
pointing into the factory run workspace.
|
|
36
|
+
- Every check a blocking finding cited as failing has been re-run here and
|
|
37
|
+
now passes; verification_commands records each with its result.
|
|
38
|
+
- review-feedback-report.md is written and listed in the emitted artifacts;
|
|
39
|
+
the emit is rejected without it.
|
|
40
|
+
|
|
41
|
+
1. Read every oss-review-change envelope and review.md via the recipe
|
|
42
|
+
above. If every verdict is pass, skip to step 5 with nothing to fix.
|
|
43
|
+
2. For each changes_required review, read every blocking_findings entry and
|
|
44
|
+
its remediation guidance. Do not re-litigate a pass verdict or reopen
|
|
45
|
+
non-blocking findings or suggestions — those are out of scope here.
|
|
46
|
+
3. Fix each blocking finding at its cited location, then search the rest of
|
|
47
|
+
the checkout for other instances of the same category of problem and fix
|
|
48
|
+
those too (see Definition of done). Do not perform unrelated formatting,
|
|
49
|
+
refactors, or scope expansion beyond what the findings require. Do not
|
|
50
|
+
weaken, delete, or skip a test to make it pass.
|
|
51
|
+
4. Re-run every command a blocking finding cited as failing, plus the
|
|
52
|
+
specific test(s) it named, and confirm each now passes. If a fix cannot
|
|
53
|
+
be completed or a re-run still fails, emit failure and record exactly
|
|
54
|
+
what remains broken and why — do not present partial remediation as
|
|
55
|
+
success.
|
|
56
|
+
5. Write review-feedback-report.md listing every blocking finding, whether
|
|
57
|
+
it was addressed (with the fix location and the passing re-run), or
|
|
58
|
+
that there was nothing to address because every verdict was pass.
|
|
59
|
+
6. Emit exactly once, including review-feedback-report.md and all inherited
|
|
60
|
+
evidence artifacts, with a payload matching the schema.
|
|
61
|
+
|
|
62
|
+
Contract violations — emit failure rather than presenting these as success:
|
|
63
|
+
- addressed_all_blocking: true while any blocking_findings entry remains
|
|
64
|
+
unaddressed or unverified.
|
|
65
|
+
- Fixing only the literal file/line a reviewer cited when the same category
|
|
66
|
+
of problem exists elsewhere in the diff.
|
|
67
|
+
- Emitting success while git diff is empty and any verdict was
|
|
68
|
+
changes_required.
|
|
69
|
+
- A fixed_files entry under stages/.../artifacts/ or anywhere else in the
|
|
70
|
+
factory run workspace.
|
|
71
|
+
- Editing anything outside the scope of a blocking finding.
|
|
72
|
+
- verification_commands listing commands you did not execute.
|
|
73
|
+
|
|
74
|
+
Never commit, push, or open a pull request.
|
|
75
|
+
|
|
76
|
+
Write summary as outcomes and resulting state for oss-approve-contribution:
|
|
77
|
+
which blocking findings existed, what changed to address them, and
|
|
78
|
+
confirmation every cited check now passes (or, on failure, what remains
|
|
79
|
+
open). Downstream stages receive this summary verbatim and can mistake it
|
|
80
|
+
for their own instructions, so never restate this stage's prohibitions or
|
|
81
|
+
scope limits in it.
|
|
82
|
+
model: omniroute/auto
|
|
83
|
+
io:
|
|
84
|
+
input:
|
|
85
|
+
schema:
|
|
86
|
+
type: object
|
|
87
|
+
output:
|
|
88
|
+
schema:
|
|
89
|
+
type: object
|
|
90
|
+
required:
|
|
91
|
+
- addressed_all_blocking
|
|
92
|
+
- fixed_files
|
|
93
|
+
- verification_commands
|
|
94
|
+
- remaining_risks
|
|
95
|
+
properties:
|
|
96
|
+
addressed_all_blocking:
|
|
97
|
+
type: boolean
|
|
98
|
+
fixed_files:
|
|
99
|
+
type: array
|
|
100
|
+
items:
|
|
101
|
+
type: string
|
|
102
|
+
verification_commands:
|
|
103
|
+
type: array
|
|
104
|
+
items:
|
|
105
|
+
type: string
|
|
106
|
+
remaining_risks:
|
|
107
|
+
type: array
|
|
108
|
+
items:
|
|
109
|
+
type: string
|
|
110
|
+
verify:
|
|
111
|
+
- id: review-feedback-report
|
|
112
|
+
type: artifact
|
|
113
|
+
path: review-feedback-report.md
|
|
114
|
+
nonempty: true
|
|
115
|
+
when:
|
|
116
|
+
- after
|
|
117
|
+
gate_kinds: []
|
|
@@ -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
|