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,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
|