patchwork-os 0.2.0-beta.9.canary.92 → 1.1.0-beta.1
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.bridge.md +15 -16
- package/README.md +46 -458
- package/dist/activationMetrics.js +2 -3
- package/dist/activationMetrics.js.map +1 -1
- package/dist/activityLog.d.ts +1 -0
- package/dist/activityLog.js +8 -3
- package/dist/activityLog.js.map +1 -1
- package/dist/adapters/gemini.js +2 -2
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/grok.js +6 -1
- package/dist/adapters/grok.js.map +1 -1
- package/dist/adapters/openai.js +4 -0
- package/dist/adapters/openai.js.map +1 -1
- package/dist/approvalHttp.d.ts +9 -0
- package/dist/approvalHttp.js +210 -171
- package/dist/approvalHttp.js.map +1 -1
- package/dist/approvalKpi.d.ts +102 -0
- package/dist/approvalKpi.js +282 -0
- package/dist/approvalKpi.js.map +1 -0
- package/dist/approvalQueue.d.ts +1 -1
- package/dist/approvalQueue.js.map +1 -1
- package/dist/automation.d.ts +45 -4
- package/dist/automation.js +123 -15
- package/dist/automation.js.map +1 -1
- package/dist/bridge.d.ts +10 -0
- package/dist/bridge.js +225 -46
- package/dist/bridge.js.map +1 -1
- package/dist/bridgeLockDiscovery.d.ts +16 -1
- package/dist/bridgeLockDiscovery.js +38 -4
- package/dist/bridgeLockDiscovery.js.map +1 -1
- package/dist/bridgeToolsRules.js +3 -18
- package/dist/bridgeToolsRules.js.map +1 -1
- package/dist/claudeAuthHttp.d.ts +25 -0
- package/dist/claudeAuthHttp.js +219 -0
- package/dist/claudeAuthHttp.js.map +1 -0
- package/dist/claudeDriver.js +4 -1
- package/dist/claudeDriver.js.map +1 -1
- package/dist/claudeOrchestrator.d.ts +15 -0
- package/dist/claudeOrchestrator.js +44 -0
- package/dist/claudeOrchestrator.js.map +1 -1
- package/dist/commands/connect.d.ts +47 -0
- package/dist/commands/connect.js +419 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/install.js +3 -10
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/launchd.d.ts +7 -0
- package/dist/commands/launchd.js +20 -2
- package/dist/commands/launchd.js.map +1 -1
- package/dist/commands/patchworkInit.d.ts +7 -0
- package/dist/commands/patchworkInit.js +26 -0
- package/dist/commands/patchworkInit.js.map +1 -1
- package/dist/commands/recipe.d.ts +59 -4
- package/dist/commands/recipe.js +206 -5
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.d.ts +9 -0
- package/dist/commands/recipeInstall.js +56 -3
- package/dist/commands/recipeInstall.js.map +1 -1
- package/dist/commands/task.d.ts +25 -0
- package/dist/commands/task.js +61 -41
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/tokenEfficiency.d.ts +4 -0
- package/dist/commands/tokenEfficiency.js +23 -26
- package/dist/commands/tokenEfficiency.js.map +1 -1
- package/dist/commands/tracesExport.d.ts +15 -1
- package/dist/commands/tracesExport.js +39 -5
- package/dist/commands/tracesExport.js.map +1 -1
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/connectorRoutes.js +613 -62
- package/dist/connectorRoutes.js.map +1 -1
- package/dist/connectors/asana.js +9 -3
- package/dist/connectors/asana.js.map +1 -1
- package/dist/connectors/baseConnector.d.ts +16 -0
- package/dist/connectors/baseConnector.js +2 -0
- package/dist/connectors/baseConnector.js.map +1 -1
- package/dist/connectors/caldiy.js +34 -0
- package/dist/connectors/caldiy.js.map +1 -1
- package/dist/connectors/confluence.js +9 -2
- package/dist/connectors/confluence.js.map +1 -1
- package/dist/connectors/connectorActivity.d.ts +24 -0
- package/dist/connectors/connectorActivity.js +32 -0
- package/dist/connectors/connectorActivity.js.map +1 -0
- package/dist/connectors/connectorRedirectUri.js +22 -2
- package/dist/connectors/connectorRedirectUri.js.map +1 -1
- package/dist/connectors/connectorRegistry.d.ts +0 -3
- package/dist/connectors/connectorRegistry.js +8 -8
- package/dist/connectors/connectorRegistry.js.map +1 -1
- package/dist/connectors/datadog.js +8 -1
- package/dist/connectors/datadog.js.map +1 -1
- package/dist/connectors/discord.js +4 -3
- package/dist/connectors/discord.js.map +1 -1
- package/dist/connectors/elasticsearch.js +22 -0
- package/dist/connectors/elasticsearch.js.map +1 -1
- package/dist/connectors/github.d.ts +38 -0
- package/dist/connectors/github.js +91 -5
- package/dist/connectors/github.js.map +1 -1
- package/dist/connectors/gitlab.js +19 -16
- package/dist/connectors/gitlab.js.map +1 -1
- package/dist/connectors/gmail.d.ts +5 -0
- package/dist/connectors/gmail.js +53 -11
- package/dist/connectors/gmail.js.map +1 -1
- package/dist/connectors/googleCalendar.js +5 -4
- package/dist/connectors/googleCalendar.js.map +1 -1
- package/dist/connectors/googleDocs.js +7 -6
- package/dist/connectors/googleDocs.js.map +1 -1
- package/dist/connectors/googleDrive.js +15 -8
- package/dist/connectors/googleDrive.js.map +1 -1
- package/dist/connectors/grafana.js +39 -3
- package/dist/connectors/grafana.js.map +1 -1
- package/dist/connectors/jira.d.ts +1 -1
- package/dist/connectors/jira.js +19 -4
- package/dist/connectors/jira.js.map +1 -1
- package/dist/connectors/linear.js +2 -2
- package/dist/connectors/linear.js.map +1 -1
- package/dist/connectors/mcpClient.d.ts +29 -1
- package/dist/connectors/mcpClient.js +114 -44
- package/dist/connectors/mcpClient.js.map +1 -1
- package/dist/connectors/mcpOAuth.d.ts +1 -0
- package/dist/connectors/mcpOAuth.js +49 -4
- package/dist/connectors/mcpOAuth.js.map +1 -1
- package/dist/connectors/monday.js +5 -4
- package/dist/connectors/monday.js.map +1 -1
- package/dist/connectors/mongodb.js +32 -5
- package/dist/connectors/mongodb.js.map +1 -1
- package/dist/connectors/notion.d.ts +1 -1
- package/dist/connectors/notion.js +22 -6
- package/dist/connectors/notion.js.map +1 -1
- package/dist/connectors/oauthError.d.ts +17 -0
- package/dist/connectors/oauthError.js +50 -0
- package/dist/connectors/oauthError.js.map +1 -0
- package/dist/connectors/postgres.d.ts +7 -0
- package/dist/connectors/postgres.js +32 -2
- package/dist/connectors/postgres.js.map +1 -1
- package/dist/connectors/posthog.js +26 -0
- package/dist/connectors/posthog.js.map +1 -1
- package/dist/connectors/redis.d.ts +1 -0
- package/dist/connectors/redis.js +47 -20
- package/dist/connectors/redis.js.map +1 -1
- package/dist/connectors/salesforce.js +66 -5
- package/dist/connectors/salesforce.js.map +1 -1
- package/dist/connectors/sentry.js +2 -2
- package/dist/connectors/sentry.js.map +1 -1
- package/dist/connectors/slack.js +37 -14
- package/dist/connectors/slack.js.map +1 -1
- package/dist/connectors/snowflake.js +24 -0
- package/dist/connectors/snowflake.js.map +1 -1
- package/dist/connectors/stripe.js +9 -2
- package/dist/connectors/stripe.js.map +1 -1
- package/dist/connectors/supabase.js +34 -0
- package/dist/connectors/supabase.js.map +1 -1
- package/dist/connectors/tokenStorage.d.ts +20 -0
- package/dist/connectors/tokenStorage.js +196 -64
- package/dist/connectors/tokenStorage.js.map +1 -1
- package/dist/connectors/woocommerce.js +34 -0
- package/dist/connectors/woocommerce.js.map +1 -1
- package/dist/copilot/parseIntent.d.ts +58 -0
- package/dist/copilot/parseIntent.js +149 -0
- package/dist/copilot/parseIntent.js.map +1 -0
- package/dist/decisionReplay.d.ts +8 -6
- package/dist/decisionReplay.js +35 -11
- package/dist/decisionReplay.js.map +1 -1
- package/dist/decisionTraceLog.d.ts +9 -0
- package/dist/decisionTraceLog.js +6 -0
- package/dist/decisionTraceLog.js.map +1 -1
- package/dist/drivers/claude/api.js +49 -7
- package/dist/drivers/claude/api.js.map +1 -1
- package/dist/drivers/claude/envSanitizer.d.ts +9 -1
- package/dist/drivers/claude/envSanitizer.js +41 -3
- package/dist/drivers/claude/envSanitizer.js.map +1 -1
- package/dist/drivers/claude/streamParser.d.ts +13 -0
- package/dist/drivers/claude/streamParser.js.map +1 -1
- package/dist/drivers/claude/subprocess.js +131 -16
- package/dist/drivers/claude/subprocess.js.map +1 -1
- package/dist/drivers/claude/subprocessSettings.d.ts +1 -1
- package/dist/drivers/claude/subprocessSettings.js +18 -4
- package/dist/drivers/claude/subprocessSettings.js.map +1 -1
- package/dist/drivers/gemini/index.d.ts +13 -0
- package/dist/drivers/gemini/index.js +211 -67
- package/dist/drivers/gemini/index.js.map +1 -1
- package/dist/drivers/local/index.d.ts +2 -17
- package/dist/drivers/local/index.js +5 -92
- package/dist/drivers/local/index.js.map +1 -1
- package/dist/drivers/openai/index.js +69 -9
- package/dist/drivers/openai/index.js.map +1 -1
- package/dist/drivers/outputCap.d.ts +27 -0
- package/dist/drivers/outputCap.js +50 -0
- package/dist/drivers/outputCap.js.map +1 -0
- package/dist/embeddings/cosine.d.ts +23 -0
- package/dist/embeddings/cosine.js +59 -0
- package/dist/embeddings/cosine.js.map +1 -0
- package/dist/embeddings/index.d.ts +19 -0
- package/dist/embeddings/index.js +35 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/localEmbeddings.d.ts +29 -0
- package/dist/embeddings/localEmbeddings.js +103 -0
- package/dist/embeddings/localEmbeddings.js.map +1 -0
- package/dist/embeddings/localEndpoints.d.ts +24 -0
- package/dist/embeddings/localEndpoints.js +37 -0
- package/dist/embeddings/localEndpoints.js.map +1 -0
- package/dist/embeddings/types.d.ts +32 -0
- package/dist/embeddings/types.js +12 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/featureFlags.d.ts +18 -0
- package/dist/featureFlags.js +32 -0
- package/dist/featureFlags.js.map +1 -1
- package/dist/fp/automationInterpreter.js +118 -39
- package/dist/fp/automationInterpreter.js.map +1 -1
- package/dist/fp/automationProgram.d.ts +10 -0
- package/dist/fp/automationProgram.js.map +1 -1
- package/dist/fp/automationState.d.ts +6 -0
- package/dist/fp/automationState.js +38 -0
- package/dist/fp/automationState.js.map +1 -1
- package/dist/fp/commandDescription.d.ts +6 -0
- package/dist/fp/commandDescription.js +18 -5
- package/dist/fp/commandDescription.js.map +1 -1
- package/dist/fp/interpreterContext.d.ts +16 -5
- package/dist/fp/interpreterContext.js +59 -3
- package/dist/fp/interpreterContext.js.map +1 -1
- package/dist/fp/policyParser.js +18 -8
- package/dist/fp/policyParser.js.map +1 -1
- package/dist/haltPushDispatch.d.ts +4 -0
- package/dist/haltPushDispatch.js +7 -22
- package/dist/haltPushDispatch.js.map +1 -1
- package/dist/inboxRoutes.js +2 -2
- package/dist/inboxRoutes.js.map +1 -1
- package/dist/index.js +672 -135
- package/dist/index.js.map +1 -1
- package/dist/installGuard.js +6 -0
- package/dist/installGuard.js.map +1 -1
- package/dist/localEndpointGuard.d.ts +25 -0
- package/dist/localEndpointGuard.js +101 -0
- package/dist/localEndpointGuard.js.map +1 -0
- package/dist/mcpRoutes.js +1 -1
- package/dist/mcpRoutes.js.map +1 -1
- package/dist/oauth.d.ts +13 -0
- package/dist/oauth.js +53 -9
- package/dist/oauth.js.map +1 -1
- package/dist/orchestrator/childBridgeClient.d.ts +7 -0
- package/dist/orchestrator/childBridgeClient.js +42 -1
- package/dist/orchestrator/childBridgeClient.js.map +1 -1
- package/dist/orchestrator/orchestratorBridge.d.ts +33 -0
- package/dist/orchestrator/orchestratorBridge.js +75 -9
- package/dist/orchestrator/orchestratorBridge.js.map +1 -1
- package/dist/patchworkConfig.d.ts +4 -0
- package/dist/patchworkConfig.js +33 -4
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/probe.js +39 -5
- package/dist/probe.js.map +1 -1
- package/dist/recipeOrchestration.d.ts +59 -0
- package/dist/recipeOrchestration.js +314 -60
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipeRoutes.d.ts +93 -0
- package/dist/recipeRoutes.js +664 -27
- package/dist/recipeRoutes.js.map +1 -1
- package/dist/recipes/RecipeOrchestrator.d.ts +14 -0
- package/dist/recipes/RecipeOrchestrator.js +42 -2
- package/dist/recipes/RecipeOrchestrator.js.map +1 -1
- package/dist/recipes/agentExecutor.d.ts +51 -2
- package/dist/recipes/agentExecutor.js +86 -13
- package/dist/recipes/agentExecutor.js.map +1 -1
- package/dist/recipes/chainedRunner.d.ts +111 -3
- package/dist/recipes/chainedRunner.js +440 -45
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/compiler.js +42 -29
- package/dist/recipes/compiler.js.map +1 -1
- package/dist/recipes/connectorPreflight.js +31 -0
- package/dist/recipes/connectorPreflight.js.map +1 -1
- package/dist/recipes/dependencyGraph.d.ts +16 -0
- package/dist/recipes/dependencyGraph.js +37 -2
- package/dist/recipes/dependencyGraph.js.map +1 -1
- package/dist/recipes/eventTriggerPrograms.d.ts +36 -0
- package/dist/recipes/eventTriggerPrograms.js +158 -0
- package/dist/recipes/eventTriggerPrograms.js.map +1 -0
- package/dist/recipes/githubInstallSource.d.ts +9 -2
- package/dist/recipes/githubInstallSource.js +36 -6
- package/dist/recipes/githubInstallSource.js.map +1 -1
- package/dist/recipes/haltCategory.d.ts +10 -0
- package/dist/recipes/haltCategory.js +11 -1
- package/dist/recipes/haltCategory.js.map +1 -1
- package/dist/recipes/idempotencyKey.d.ts +30 -3
- package/dist/recipes/idempotencyKey.js +89 -5
- package/dist/recipes/idempotencyKey.js.map +1 -1
- package/dist/recipes/installer.js +12 -35
- package/dist/recipes/installer.js.map +1 -1
- package/dist/recipes/judgeVerdict.d.ts +11 -1
- package/dist/recipes/judgeVerdict.js +47 -7
- package/dist/recipes/judgeVerdict.js.map +1 -1
- package/dist/recipes/names.d.ts +5 -0
- package/dist/recipes/names.js +10 -5
- package/dist/recipes/names.js.map +1 -1
- package/dist/recipes/parser.js +74 -10
- package/dist/recipes/parser.js.map +1 -1
- package/dist/recipes/pricing/costRouter.d.ts +43 -0
- package/dist/recipes/pricing/costRouter.js +44 -0
- package/dist/recipes/pricing/costRouter.js.map +1 -0
- package/dist/recipes/pricing/priceTable.d.ts +76 -0
- package/dist/recipes/pricing/priceTable.js +144 -0
- package/dist/recipes/pricing/priceTable.js.map +1 -0
- package/dist/recipes/replayRun.js +5 -2
- package/dist/recipes/replayRun.js.map +1 -1
- package/dist/recipes/resolveRecipePath.js +15 -1
- package/dist/recipes/resolveRecipePath.js.map +1 -1
- package/dist/recipes/runBudget.d.ts +93 -32
- package/dist/recipes/runBudget.js +213 -49
- package/dist/recipes/runBudget.js.map +1 -1
- package/dist/recipes/runRegistry.d.ts +32 -0
- package/dist/recipes/runRegistry.js +54 -0
- package/dist/recipes/runRegistry.js.map +1 -0
- package/dist/recipes/scheduler.js +6 -2
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schema.d.ts +59 -6
- package/dist/recipes/schemaGenerator.d.ts +9 -0
- package/dist/recipes/schemaGenerator.js +446 -77
- package/dist/recipes/schemaGenerator.js.map +1 -1
- package/dist/recipes/simulation/aggregateRunRisk.d.ts +46 -0
- package/dist/recipes/simulation/aggregateRunRisk.js +120 -0
- package/dist/recipes/simulation/aggregateRunRisk.js.map +1 -0
- package/dist/recipes/simulation/costProjector.d.ts +32 -0
- package/dist/recipes/simulation/costProjector.js +194 -0
- package/dist/recipes/simulation/costProjector.js.map +1 -0
- package/dist/recipes/simulation/sideEffects.d.ts +32 -0
- package/dist/recipes/simulation/sideEffects.js +62 -0
- package/dist/recipes/simulation/sideEffects.js.map +1 -0
- package/dist/recipes/simulation/simulate.d.ts +36 -0
- package/dist/recipes/simulation/simulate.js +264 -0
- package/dist/recipes/simulation/simulate.js.map +1 -0
- package/dist/recipes/simulation/simulateMockedRun.d.ts +52 -0
- package/dist/recipes/simulation/simulateMockedRun.js +84 -0
- package/dist/recipes/simulation/simulateMockedRun.js.map +1 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.d.ts +31 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.js +50 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.js.map +1 -0
- package/dist/recipes/simulation/types.d.ts +198 -0
- package/dist/recipes/simulation/types.js +30 -0
- package/dist/recipes/simulation/types.js.map +1 -0
- package/dist/recipes/stepObservation.d.ts +12 -0
- package/dist/recipes/stepObservation.js +21 -1
- package/dist/recipes/stepObservation.js.map +1 -1
- package/dist/recipes/toolRegistry.js +61 -24
- package/dist/recipes/toolRegistry.js.map +1 -1
- package/dist/recipes/tools/airtable.d.ts +15 -0
- package/dist/recipes/tools/airtable.js +240 -0
- package/dist/recipes/tools/airtable.js.map +1 -0
- package/dist/recipes/tools/caldiy.d.ts +13 -0
- package/dist/recipes/tools/caldiy.js +215 -0
- package/dist/recipes/tools/caldiy.js.map +1 -0
- package/dist/recipes/tools/circleci.d.ts +10 -0
- package/dist/recipes/tools/circleci.js +204 -0
- package/dist/recipes/tools/circleci.js.map +1 -0
- package/dist/recipes/tools/cloudflare.d.ts +13 -0
- package/dist/recipes/tools/cloudflare.js +211 -0
- package/dist/recipes/tools/cloudflare.js.map +1 -0
- package/dist/recipes/tools/confluence.js +11 -10
- package/dist/recipes/tools/confluence.js.map +1 -1
- package/dist/recipes/tools/datadog.js +13 -12
- package/dist/recipes/tools/datadog.js.map +1 -1
- package/dist/recipes/tools/docs.d.ts +18 -0
- package/dist/recipes/tools/docs.js +95 -0
- package/dist/recipes/tools/docs.js.map +1 -0
- package/dist/recipes/tools/elasticsearch.d.ts +11 -0
- package/dist/recipes/tools/elasticsearch.js +157 -0
- package/dist/recipes/tools/elasticsearch.js.map +1 -0
- package/dist/recipes/tools/fanOut.js +4 -4
- package/dist/recipes/tools/fanOut.js.map +1 -1
- package/dist/recipes/tools/figma.d.ts +12 -0
- package/dist/recipes/tools/figma.js +195 -0
- package/dist/recipes/tools/figma.js.map +1 -0
- package/dist/recipes/tools/file.js +43 -22
- package/dist/recipes/tools/file.js.map +1 -1
- package/dist/recipes/tools/github.js +162 -5
- package/dist/recipes/tools/github.js.map +1 -1
- package/dist/recipes/tools/gmail.js +45 -33
- package/dist/recipes/tools/gmail.js.map +1 -1
- package/dist/recipes/tools/grafana.d.ts +11 -0
- package/dist/recipes/tools/grafana.js +216 -0
- package/dist/recipes/tools/grafana.js.map +1 -0
- package/dist/recipes/tools/http.d.ts +1 -1
- package/dist/recipes/tools/http.js +10 -28
- package/dist/recipes/tools/http.js.map +1 -1
- package/dist/recipes/tools/hubspot.js +13 -12
- package/dist/recipes/tools/hubspot.js.map +1 -1
- package/dist/recipes/tools/index.d.ts +28 -0
- package/dist/recipes/tools/index.js +28 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/tools/intercom.js +11 -10
- package/dist/recipes/tools/intercom.js.map +1 -1
- package/dist/recipes/tools/jira.js +13 -0
- package/dist/recipes/tools/jira.js.map +1 -1
- package/dist/recipes/tools/meetingNotes.js +2 -2
- package/dist/recipes/tools/monday.d.ts +22 -0
- package/dist/recipes/tools/monday.js +242 -0
- package/dist/recipes/tools/monday.js.map +1 -0
- package/dist/recipes/tools/mongodb.d.ts +19 -0
- package/dist/recipes/tools/mongodb.js +194 -0
- package/dist/recipes/tools/mongodb.js.map +1 -0
- package/dist/recipes/tools/notion.js +11 -10
- package/dist/recipes/tools/notion.js.map +1 -1
- package/dist/recipes/tools/obsidian.d.ts +15 -0
- package/dist/recipes/tools/obsidian.js +173 -0
- package/dist/recipes/tools/obsidian.js.map +1 -0
- package/dist/recipes/tools/outcomes.d.ts +15 -0
- package/dist/recipes/tools/outcomes.js +111 -0
- package/dist/recipes/tools/outcomes.js.map +1 -0
- package/dist/recipes/tools/paystack.d.ts +11 -0
- package/dist/recipes/tools/paystack.js +212 -0
- package/dist/recipes/tools/paystack.js.map +1 -0
- package/dist/recipes/tools/pipedrive.d.ts +16 -0
- package/dist/recipes/tools/pipedrive.js +234 -0
- package/dist/recipes/tools/pipedrive.js.map +1 -0
- package/dist/recipes/tools/postgres.d.ts +15 -0
- package/dist/recipes/tools/postgres.js +186 -0
- package/dist/recipes/tools/postgres.js.map +1 -0
- package/dist/recipes/tools/posthog.d.ts +16 -0
- package/dist/recipes/tools/posthog.js +219 -0
- package/dist/recipes/tools/posthog.js.map +1 -0
- package/dist/recipes/tools/redis.d.ts +9 -0
- package/dist/recipes/tools/redis.js +141 -0
- package/dist/recipes/tools/redis.js.map +1 -0
- package/dist/recipes/tools/resend.d.ts +8 -0
- package/dist/recipes/tools/resend.js +153 -0
- package/dist/recipes/tools/resend.js.map +1 -0
- package/dist/recipes/tools/salesforce.d.ts +16 -0
- package/dist/recipes/tools/salesforce.js +184 -0
- package/dist/recipes/tools/salesforce.js.map +1 -0
- package/dist/recipes/tools/sendgrid.d.ts +9 -0
- package/dist/recipes/tools/sendgrid.js +175 -0
- package/dist/recipes/tools/sendgrid.js.map +1 -0
- package/dist/recipes/tools/shopify.d.ts +16 -0
- package/dist/recipes/tools/shopify.js +266 -0
- package/dist/recipes/tools/shopify.js.map +1 -0
- package/dist/recipes/tools/snowflake.d.ts +16 -0
- package/dist/recipes/tools/snowflake.js +173 -0
- package/dist/recipes/tools/snowflake.js.map +1 -0
- package/dist/recipes/tools/stripe.js +13 -12
- package/dist/recipes/tools/stripe.js.map +1 -1
- package/dist/recipes/tools/supabase.d.ts +9 -0
- package/dist/recipes/tools/supabase.js +133 -0
- package/dist/recipes/tools/supabase.js.map +1 -0
- package/dist/recipes/tools/todoist.d.ts +15 -0
- package/dist/recipes/tools/todoist.js +228 -0
- package/dist/recipes/tools/todoist.js.map +1 -0
- package/dist/recipes/tools/twilio.d.ts +11 -0
- package/dist/recipes/tools/twilio.js +180 -0
- package/dist/recipes/tools/twilio.js.map +1 -0
- package/dist/recipes/tools/vercel.d.ts +9 -0
- package/dist/recipes/tools/vercel.js +146 -0
- package/dist/recipes/tools/vercel.js.map +1 -0
- package/dist/recipes/tools/webflow.d.ts +11 -0
- package/dist/recipes/tools/webflow.js +244 -0
- package/dist/recipes/tools/webflow.js.map +1 -0
- package/dist/recipes/tools/woocommerce.d.ts +18 -0
- package/dist/recipes/tools/woocommerce.js +260 -0
- package/dist/recipes/tools/woocommerce.js.map +1 -0
- package/dist/recipes/tools/wrapConnectorExecute.d.ts +25 -0
- package/dist/recipes/tools/wrapConnectorExecute.js +37 -0
- package/dist/recipes/tools/wrapConnectorExecute.js.map +1 -0
- package/dist/recipes/tools/zendesk.js +11 -10
- package/dist/recipes/tools/zendesk.js.map +1 -1
- package/dist/recipes/triggerVars.d.ts +15 -0
- package/dist/recipes/triggerVars.js +57 -0
- package/dist/recipes/triggerVars.js.map +1 -0
- package/dist/recipes/validation.d.ts +1 -1
- package/dist/recipes/validation.js +536 -12
- package/dist/recipes/validation.js.map +1 -1
- package/dist/recipes/yamlPositions.d.ts +1 -1
- package/dist/recipes/yamlPositions.js +7 -2
- package/dist/recipes/yamlPositions.js.map +1 -1
- package/dist/recipes/yamlRunner.d.ts +216 -4
- package/dist/recipes/yamlRunner.js +1030 -96
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/recipesHttp.d.ts +5 -0
- package/dist/recipesHttp.js +68 -6
- package/dist/recipesHttp.js.map +1 -1
- package/dist/resources.js +14 -1
- package/dist/resources.js.map +1 -1
- package/dist/riskSignals.d.ts +42 -0
- package/dist/riskSignals.js +197 -0
- package/dist/riskSignals.js.map +1 -0
- package/dist/riskTier.d.ts +9 -0
- package/dist/riskTier.js +48 -0
- package/dist/riskTier.js.map +1 -1
- package/dist/runLog.d.ts +53 -0
- package/dist/runLog.js +75 -16
- package/dist/runLog.js.map +1 -1
- package/dist/schemas/recipe.v1.json +360 -16
- package/dist/server.d.ts +60 -0
- package/dist/server.js +192 -31
- package/dist/server.js.map +1 -1
- package/dist/sessionCheckpoint.js +4 -1
- package/dist/sessionCheckpoint.js.map +1 -1
- package/dist/sessionDetail.d.ts +43 -0
- package/dist/sessionDetail.js +59 -0
- package/dist/sessionDetail.js.map +1 -0
- package/dist/settingsEnv.d.ts +47 -0
- package/dist/settingsEnv.js +88 -0
- package/dist/settingsEnv.js.map +1 -0
- package/dist/streamableHttp.js +44 -10
- package/dist/streamableHttp.js.map +1 -1
- package/dist/ta/backtest/abnday.d.ts +53 -0
- package/dist/ta/backtest/abnday.js +123 -0
- package/dist/ta/backtest/abnday.js.map +1 -0
- package/dist/ta/backtest/directional.d.ts +48 -0
- package/dist/ta/backtest/directional.js +103 -0
- package/dist/ta/backtest/directional.js.map +1 -0
- package/dist/ta/backtest/fundx.d.ts +67 -0
- package/dist/ta/backtest/fundx.js +264 -0
- package/dist/ta/backtest/fundx.js.map +1 -0
- package/dist/ta/backtest/fvg.d.ts +62 -0
- package/dist/ta/backtest/fvg.js +236 -0
- package/dist/ta/backtest/fvg.js.map +1 -0
- package/dist/ta/backtest/ichimoku.d.ts +41 -0
- package/dist/ta/backtest/ichimoku.js +146 -0
- package/dist/ta/backtest/ichimoku.js.map +1 -0
- package/dist/ta/backtest/ingest.d.ts +20 -0
- package/dist/ta/backtest/ingest.js +104 -0
- package/dist/ta/backtest/ingest.js.map +1 -0
- package/dist/ta/backtest/msb.d.ts +49 -0
- package/dist/ta/backtest/msb.js +162 -0
- package/dist/ta/backtest/msb.js.map +1 -0
- package/dist/ta/backtest/scoring.d.ts +33 -0
- package/dist/ta/backtest/scoring.js +82 -0
- package/dist/ta/backtest/scoring.js.map +1 -0
- package/dist/ta/backtest/summary.d.ts +20 -0
- package/dist/ta/backtest/summary.js +42 -0
- package/dist/ta/backtest/summary.js.map +1 -0
- package/dist/ta/backtest/tsmom.d.ts +72 -0
- package/dist/ta/backtest/tsmom.js +202 -0
- package/dist/ta/backtest/tsmom.js.map +1 -0
- package/dist/ta/backtest/volsq.d.ts +34 -0
- package/dist/ta/backtest/volsq.js +154 -0
- package/dist/ta/backtest/volsq.js.map +1 -0
- package/dist/ta/backtest/walkForward.d.ts +45 -0
- package/dist/ta/backtest/walkForward.js +136 -0
- package/dist/ta/backtest/walkForward.js.map +1 -0
- package/dist/ta/cycles.d.ts +15 -0
- package/dist/ta/cycles.js +31 -0
- package/dist/ta/cycles.js.map +1 -0
- package/dist/ta/desk/accrualEmitter.d.ts +59 -0
- package/dist/ta/desk/accrualEmitter.js +136 -0
- package/dist/ta/desk/accrualEmitter.js.map +1 -0
- package/dist/ta/desk/cellBacktest.d.ts +179 -0
- package/dist/ta/desk/cellBacktest.js +514 -0
- package/dist/ta/desk/cellBacktest.js.map +1 -0
- package/dist/ta/desk/cells/wpMaRejection.d.ts +49 -0
- package/dist/ta/desk/cells/wpMaRejection.js +141 -0
- package/dist/ta/desk/cells/wpMaRejection.js.map +1 -0
- package/dist/ta/desk/cells/wpVolumeClimax.d.ts +57 -0
- package/dist/ta/desk/cells/wpVolumeClimax.js +193 -0
- package/dist/ta/desk/cells/wpVolumeClimax.js.map +1 -0
- package/dist/ta/desk/collectors.d.ts +18 -0
- package/dist/ta/desk/collectors.js +450 -0
- package/dist/ta/desk/collectors.js.map +1 -0
- package/dist/ta/desk/contract.d.ts +51 -0
- package/dist/ta/desk/contract.js +261 -0
- package/dist/ta/desk/contract.js.map +1 -0
- package/dist/ta/desk/deskLedger.d.ts +36 -0
- package/dist/ta/desk/deskLedger.js +239 -0
- package/dist/ta/desk/deskLedger.js.map +1 -0
- package/dist/ta/desk/liqTape.d.ts +37 -0
- package/dist/ta/desk/liqTape.js +99 -0
- package/dist/ta/desk/liqTape.js.map +1 -0
- package/dist/ta/desk/post.d.ts +20 -0
- package/dist/ta/desk/post.js +65 -0
- package/dist/ta/desk/post.js.map +1 -0
- package/dist/ta/desk/render.d.ts +25 -0
- package/dist/ta/desk/render.js +398 -0
- package/dist/ta/desk/render.js.map +1 -0
- package/dist/ta/desk/surfaces.d.ts +216 -0
- package/dist/ta/desk/surfaces.js +472 -0
- package/dist/ta/desk/surfaces.js.map +1 -0
- package/dist/ta/desk/types.d.ts +174 -0
- package/dist/ta/desk/types.js +104 -0
- package/dist/ta/desk/types.js.map +1 -0
- package/dist/ta/index.d.ts +23 -0
- package/dist/ta/index.js +54 -0
- package/dist/ta/index.js.map +1 -0
- package/dist/ta/ledger.d.ts +44 -0
- package/dist/ta/ledger.js +95 -0
- package/dist/ta/ledger.js.map +1 -0
- package/dist/ta/levels.d.ts +21 -0
- package/dist/ta/levels.js +41 -0
- package/dist/ta/levels.js.map +1 -0
- package/dist/ta/swings.d.ts +30 -0
- package/dist/ta/swings.js +83 -0
- package/dist/ta/swings.js.map +1 -0
- package/dist/ta/types.d.ts +81 -0
- package/dist/ta/types.js +20 -0
- package/dist/ta/types.js.map +1 -0
- package/dist/telemetry.js +20 -9
- package/dist/telemetry.js.map +1 -1
- package/dist/tokenUsageTracker.d.ts +2 -1
- package/dist/tokenUsageTracker.js +38 -20
- package/dist/tokenUsageTracker.js.map +1 -1
- package/dist/tools/contextBundle.js +13 -9
- package/dist/tools/contextBundle.js.map +1 -1
- package/dist/tools/ctxGetTaskContext.js +8 -3
- package/dist/tools/ctxGetTaskContext.js.map +1 -1
- package/dist/tools/ctxQueryTraces.d.ts +18 -1
- package/dist/tools/ctxQueryTraces.js +176 -27
- package/dist/tools/ctxQueryTraces.js.map +1 -1
- package/dist/tools/enrichCommit.js +5 -2
- package/dist/tools/enrichCommit.js.map +1 -1
- package/dist/tools/getDependencyTree.js +2 -2
- package/dist/tools/getDependencyTree.js.map +1 -1
- package/dist/tools/getDiagnostics.js +3 -0
- package/dist/tools/getDiagnostics.js.map +1 -1
- package/dist/tools/getDocumentSymbols.js +5 -1
- package/dist/tools/getDocumentSymbols.js.map +1 -1
- package/dist/tools/getGitHotspots.js +12 -1
- package/dist/tools/getGitHotspots.js.map +1 -1
- package/dist/tools/getGitLog.js +5 -2
- package/dist/tools/getGitLog.js.map +1 -1
- package/dist/tools/getGitStatus.js +6 -1
- package/dist/tools/getGitStatus.js.map +1 -1
- package/dist/tools/getProjectContext.js +3 -1
- package/dist/tools/getProjectContext.js.map +1 -1
- package/dist/tools/getToolCapabilities.js +39 -4
- package/dist/tools/getToolCapabilities.js.map +1 -1
- package/dist/tools/gitWrite.js +12 -3
- package/dist/tools/gitWrite.js.map +1 -1
- package/dist/tools/github/composite.d.ts +1 -1
- package/dist/tools/github/composite.js +7 -7
- package/dist/tools/github/composite.js.map +1 -1
- package/dist/tools/github/pr.d.ts +6 -6
- package/dist/tools/github/pr.js +18 -11
- package/dist/tools/github/pr.js.map +1 -1
- package/dist/tools/httpClient.js +55 -3
- package/dist/tools/httpClient.js.map +1 -1
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.js +19 -12
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lsp.d.ts +6 -0
- package/dist/tools/lsp.js +81 -12
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/previewEdit.js +16 -1
- package/dist/tools/previewEdit.js.map +1 -1
- package/dist/tools/resumeClaudeTask.js +17 -0
- package/dist/tools/resumeClaudeTask.js.map +1 -1
- package/dist/tools/searchAndReplace.js +9 -5
- package/dist/tools/searchAndReplace.js.map +1 -1
- package/dist/tools/searchTools.d.ts +26 -0
- package/dist/tools/searchTools.js +42 -2
- package/dist/tools/searchTools.js.map +1 -1
- package/dist/tools/terminal.js +23 -51
- package/dist/tools/terminal.js.map +1 -1
- package/dist/tools/transaction.d.ts +9 -1
- package/dist/tools/transaction.js +59 -4
- package/dist/tools/transaction.js.map +1 -1
- package/dist/tools/utils.d.ts +16 -0
- package/dist/tools/utils.js +77 -7
- package/dist/tools/utils.js.map +1 -1
- package/dist/transport.d.ts +31 -0
- package/dist/transport.js +117 -14
- package/dist/transport.js.map +1 -1
- package/dist/wireHaltPushDispatch.js +12 -0
- package/dist/wireHaltPushDispatch.js.map +1 -1
- package/dist/workerGateDecisionLog.d.ts +141 -0
- package/dist/workerGateDecisionLog.js +361 -0
- package/dist/workerGateDecisionLog.js.map +1 -0
- package/dist/workers/actionClass.d.ts +38 -0
- package/dist/workers/actionClass.js +155 -0
- package/dist/workers/actionClass.js.map +1 -0
- package/dist/workers/backtest.d.ts +68 -0
- package/dist/workers/backtest.js +113 -0
- package/dist/workers/backtest.js.map +1 -0
- package/dist/workers/contextRisk.d.ts +35 -0
- package/dist/workers/contextRisk.js +20 -0
- package/dist/workers/contextRisk.js.map +1 -0
- package/dist/workers/contextRiskScorer.d.ts +48 -0
- package/dist/workers/contextRiskScorer.js +94 -0
- package/dist/workers/contextRiskScorer.js.map +1 -0
- package/dist/workers/graduation.d.ts +61 -0
- package/dist/workers/graduation.js +112 -0
- package/dist/workers/graduation.js.map +1 -0
- package/dist/workers/outcomeStore.d.ts +98 -0
- package/dist/workers/outcomeStore.js +146 -0
- package/dist/workers/outcomeStore.js.map +1 -0
- package/dist/workers/outcomesCli.d.ts +34 -0
- package/dist/workers/outcomesCli.js +91 -0
- package/dist/workers/outcomesCli.js.map +1 -0
- package/dist/workers/runWorkerShadow.d.ts +90 -0
- package/dist/workers/runWorkerShadow.js +323 -0
- package/dist/workers/runWorkerShadow.js.map +1 -0
- package/dist/workers/shadowGate.d.ts +30 -0
- package/dist/workers/shadowGate.js +58 -0
- package/dist/workers/shadowGate.js.map +1 -0
- package/dist/workers/shadowObserver.d.ts +165 -0
- package/dist/workers/shadowObserver.js +203 -0
- package/dist/workers/shadowObserver.js.map +1 -0
- package/dist/workers/shadowReport.d.ts +16 -0
- package/dist/workers/shadowReport.js +61 -0
- package/dist/workers/shadowReport.js.map +1 -0
- package/dist/workers/shadowRun.d.ts +38 -0
- package/dist/workers/shadowRun.js +44 -0
- package/dist/workers/shadowRun.js.map +1 -0
- package/dist/workers/trustLevel.d.ts +82 -0
- package/dist/workers/trustLevel.js +100 -0
- package/dist/workers/trustLevel.js.map +1 -0
- package/dist/workers/worker.d.ts +49 -0
- package/dist/workers/worker.js +88 -0
- package/dist/workers/worker.js.map +1 -0
- package/dist/workers/workerGate.d.ts +101 -0
- package/dist/workers/workerGate.js +210 -0
- package/dist/workers/workerGate.js.map +1 -0
- package/dist/workers/workerLevelStore.d.ts +33 -0
- package/dist/workers/workerLevelStore.js +87 -0
- package/dist/workers/workerLevelStore.js.map +1 -0
- package/dist/workers/workerLoader.d.ts +7 -0
- package/dist/workers/workerLoader.js +31 -0
- package/dist/workers/workerLoader.js.map +1 -0
- package/dist/writeFileAtomic.js +40 -13
- package/dist/writeFileAtomic.js.map +1 -1
- package/package.json +14 -6
- package/scripts/mcp-stdio-shim.cjs +247 -87
- package/templates/CLAUDE.bridge.md +1 -1
- package/templates/recipes/dependency-bump.yaml +33 -0
- package/templates/recipes/incident-to-pr.yaml +187 -0
- package/templates/recipes/outcome-ingester.yaml +53 -0
- package/templates/recipes/release-notes.yaml +30 -0
- package/templates/recipes/triage-failing-tests-autofile.yaml +152 -0
- package/templates/recipes/triage-failing-tests.yaml +38 -0
- package/templates/workers/dependency-upkeep.worker.yaml +26 -0
- package/templates/workers/release-notes.worker.yaml +17 -0
- package/templates/workers/test-guardian.worker.yaml +24 -0
- package/deploy/README.md +0 -172
- package/deploy/bootstrap-new-vps.sh +0 -364
- package/deploy/bootstrap-vps.sh +0 -192
- package/deploy/claude-ide-bridge.service.template +0 -67
- package/deploy/claude-ide-bridge@.service +0 -31
- package/deploy/deploy-dashboard.sh +0 -198
- package/deploy/deploy-landing.sh +0 -136
- package/deploy/ecosystem.config.js.example +0 -36
- package/deploy/install-vps-service.sh +0 -240
- package/deploy/macos/README.md +0 -153
- package/deploy/macos/com.patchwork.bridge.plist.template +0 -54
- package/deploy/macos/com.patchwork.tunnel.plist.template +0 -76
- package/deploy/macos/install-mac-bridge.sh +0 -244
- package/deploy/macos/uninstall-mac-bridge.sh +0 -22
- package/deploy/nginx-claude-bridge.conf.template +0 -129
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/patchworkos/recipes/main/schema/recipe.v1.json
|
|
2
|
+
apiVersion: patchwork.sh/v1
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
name: incident-to-pr
|
|
5
|
+
description: |
|
|
6
|
+
FLAGSHIP — the end-to-end AI-native incident-response loop. Turns a
|
|
7
|
+
production incident into a reviewed, ready-to-merge pull request. Every
|
|
8
|
+
primitive Patchwork added during the connector + judge→refine campaign
|
|
9
|
+
shows up here in one pipeline:
|
|
10
|
+
|
|
11
|
+
1. investigate — an agent root-causes the incident against THIS repo
|
|
12
|
+
using the read/git tools it has via MCP (no writes).
|
|
13
|
+
2. draft_fix — an agent writes the smallest correct patch + a PR
|
|
14
|
+
title/body. This is the draft the judge reviews.
|
|
15
|
+
3. review_fix — a JUDGE step (agent.kind: judge) gives the draft a
|
|
16
|
+
cold-eyes senior-engineer review. On `request_changes`
|
|
17
|
+
it DRIVES the judge→refine loop: the draft step is
|
|
18
|
+
re-run with the judge's fix-list injected, up to
|
|
19
|
+
`max_revisions` cycles, until the judge approves. This
|
|
20
|
+
is the moat — quality is gated by an AI reviewer, not
|
|
21
|
+
by hope.
|
|
22
|
+
4. open_pr — an agent opens the PR via the githubCreatePR MCP tool.
|
|
23
|
+
Opening a PR is a high-risk WRITE, so the runtime
|
|
24
|
+
approval gate pauses here for a human to sign off — the
|
|
25
|
+
human-in-the-loop checkpoint before anything lands.
|
|
26
|
+
5. notify — posts the PR link + judge verdict to Slack.
|
|
27
|
+
|
|
28
|
+
REQUIREMENTS
|
|
29
|
+
- Bridge running with `--driver subprocess` so the agent steps have MCP
|
|
30
|
+
tool access (read files, git, githubCreatePR).
|
|
31
|
+
- GitHub connector connected (for the PR) and Slack connector connected
|
|
32
|
+
(for the alert) — visit /connections, or `patchwork connect github` /
|
|
33
|
+
`patchwork connect slack`.
|
|
34
|
+
- An approval gate of "high" or "all" to exercise the open_pr pause
|
|
35
|
+
(with the gate off, the PR opens unattended).
|
|
36
|
+
|
|
37
|
+
MANUAL RUN
|
|
38
|
+
patchwork recipe run incident-to-pr \
|
|
39
|
+
--var INCIDENT_TITLE="checkout 500s on /api/pay" \
|
|
40
|
+
--var STACK_TRACE="TypeError: cannot read 'id' of undefined at pay.ts:42"
|
|
41
|
+
|
|
42
|
+
WEBHOOK CONVERSION (PagerDuty / Sentry / Datadog)
|
|
43
|
+
Replace the trigger block with:
|
|
44
|
+
trigger:
|
|
45
|
+
type: webhook
|
|
46
|
+
path: /hooks/incident-to-pr
|
|
47
|
+
and reference {{payload.title}} / {{payload.body}} in place of the vars.
|
|
48
|
+
|
|
49
|
+
trigger:
|
|
50
|
+
type: manual
|
|
51
|
+
vars:
|
|
52
|
+
- name: INCIDENT_TITLE
|
|
53
|
+
description: "One-line incident summary (seeds the PR title)"
|
|
54
|
+
required: true
|
|
55
|
+
- name: STACK_TRACE
|
|
56
|
+
description: "Stack trace / error text to root-cause (optional, recommended)"
|
|
57
|
+
required: false
|
|
58
|
+
- name: SEVERITY
|
|
59
|
+
description: "critical | high | medium | low"
|
|
60
|
+
required: false
|
|
61
|
+
default: "high"
|
|
62
|
+
- name: SLACK_CHANNEL
|
|
63
|
+
description: "Slack channel for the resolution alert"
|
|
64
|
+
required: false
|
|
65
|
+
default: "#incidents"
|
|
66
|
+
|
|
67
|
+
steps:
|
|
68
|
+
- id: investigate
|
|
69
|
+
agent:
|
|
70
|
+
driver: claude-code
|
|
71
|
+
prompt: |
|
|
72
|
+
A production incident has fired. Root-cause it against THIS repository.
|
|
73
|
+
|
|
74
|
+
Incident: {{INCIDENT_TITLE}}
|
|
75
|
+
Severity: {{SEVERITY}}
|
|
76
|
+
Stack trace / error:
|
|
77
|
+
{{STACK_TRACE}}
|
|
78
|
+
|
|
79
|
+
Use the read and git tools available to you — read files, search the
|
|
80
|
+
codebase, inspect recent commits and run git blame on the implicated
|
|
81
|
+
files. Do NOT write any files in this step.
|
|
82
|
+
|
|
83
|
+
Respond with a concise root-cause analysis containing:
|
|
84
|
+
- the offending file(s) and line(s)
|
|
85
|
+
- what is going wrong and why
|
|
86
|
+
- the commit that most likely introduced it (if identifiable)
|
|
87
|
+
- the smallest correct fix you would make
|
|
88
|
+
into: investigation
|
|
89
|
+
risk: low
|
|
90
|
+
|
|
91
|
+
- id: draft_fix
|
|
92
|
+
awaits:
|
|
93
|
+
- investigate
|
|
94
|
+
agent:
|
|
95
|
+
driver: claude-code
|
|
96
|
+
prompt: |
|
|
97
|
+
Using the root-cause analysis below, write a concrete, MINIMAL fix.
|
|
98
|
+
|
|
99
|
+
Root-cause analysis:
|
|
100
|
+
{{investigation}}
|
|
101
|
+
|
|
102
|
+
Output exactly these four markdown sections and nothing else:
|
|
103
|
+
|
|
104
|
+
## PR title
|
|
105
|
+
<conventional-commit-style title, <= 70 chars>
|
|
106
|
+
|
|
107
|
+
## Summary
|
|
108
|
+
<2-4 sentences: what the bug was and how this change fixes it>
|
|
109
|
+
|
|
110
|
+
## Patch
|
|
111
|
+
<a unified diff of the smallest change that fixes the root cause —
|
|
112
|
+
touch as few lines as possible; no drive-by refactors>
|
|
113
|
+
|
|
114
|
+
## Test
|
|
115
|
+
<the test you would add or modify to prove the fix (a diff), or a
|
|
116
|
+
short note if existing coverage already exercises the path>
|
|
117
|
+
|
|
118
|
+
Do NOT write files in this step — only emit the four sections.
|
|
119
|
+
into: fix_draft
|
|
120
|
+
risk: low
|
|
121
|
+
|
|
122
|
+
- id: review_fix
|
|
123
|
+
awaits:
|
|
124
|
+
- draft_fix
|
|
125
|
+
agent:
|
|
126
|
+
kind: judge
|
|
127
|
+
reviews: fix_draft
|
|
128
|
+
max_revisions: 2
|
|
129
|
+
on_exhausted: proceed
|
|
130
|
+
driver: claude-code
|
|
131
|
+
prompt: |
|
|
132
|
+
You are a senior engineer doing a cold-eyes review of the proposed
|
|
133
|
+
fix below BEFORE it becomes a pull request. Judge it on:
|
|
134
|
+
- correctness: does it actually fix the root cause?
|
|
135
|
+
- minimality: smallest possible change, nothing unrelated?
|
|
136
|
+
- safety: regression risk, edge cases, missing guards?
|
|
137
|
+
- tests: is there a test that would FAIL without the fix?
|
|
138
|
+
- PR hygiene: clear, accurate title and summary?
|
|
139
|
+
|
|
140
|
+
Return a verdict: approve | request_changes | unparseable.
|
|
141
|
+
If request_changes, list concrete, actionable fixes — each one a
|
|
142
|
+
specific change the author must make. Those drive the revision loop;
|
|
143
|
+
the draft is regenerated with your fix-list and re-reviewed.
|
|
144
|
+
into: review
|
|
145
|
+
risk: low
|
|
146
|
+
|
|
147
|
+
- id: open_pr
|
|
148
|
+
awaits:
|
|
149
|
+
- review_fix
|
|
150
|
+
agent:
|
|
151
|
+
driver: claude-code
|
|
152
|
+
prompt: |
|
|
153
|
+
The fix below has passed judge review. Open a pull request for it.
|
|
154
|
+
|
|
155
|
+
Approved fix:
|
|
156
|
+
{{fix_draft}}
|
|
157
|
+
|
|
158
|
+
Do this:
|
|
159
|
+
1. Create a branch off the default branch named
|
|
160
|
+
fix/<short-slug-derived-from-the-PR-title>.
|
|
161
|
+
2. Apply the change from the "## Patch" section and add the test
|
|
162
|
+
from the "## Test" section.
|
|
163
|
+
3. Open a pull request using the githubCreatePR tool, with the
|
|
164
|
+
"## PR title" as the title and the "## Summary" — followed by a
|
|
165
|
+
line "Fixes incident: {{INCIDENT_TITLE}}" — as the body.
|
|
166
|
+
|
|
167
|
+
Opening a PR is a write action; it will pause at the approval gate
|
|
168
|
+
for a human to confirm before it lands. After it succeeds, respond
|
|
169
|
+
with ONLY this JSON object (no markdown fences):
|
|
170
|
+
{"prUrl": "<url>", "prNumber": <number>, "branch": "<branch>"}
|
|
171
|
+
|
|
172
|
+
If the GitHub connector is not connected, respond with:
|
|
173
|
+
{"error": "GitHub connector not connected — visit /connections"}
|
|
174
|
+
into: pr
|
|
175
|
+
risk: high
|
|
176
|
+
|
|
177
|
+
- id: notify
|
|
178
|
+
awaits:
|
|
179
|
+
- open_pr
|
|
180
|
+
tool: slack.post_message
|
|
181
|
+
channel: "{{SLACK_CHANNEL}}"
|
|
182
|
+
text: |
|
|
183
|
+
:white_check_mark: Incident fix ready for review
|
|
184
|
+
*Incident:* {{INCIDENT_TITLE}} ({{SEVERITY}})
|
|
185
|
+
*Pull request:* {{pr}}
|
|
186
|
+
*Judge review:* {{review}}
|
|
187
|
+
risk: medium
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://patchwork.dev/schemas/recipe.v1.json
|
|
2
|
+
#
|
|
3
|
+
# Outcome Ingester — polls GitHub for issues filed by the Test Guardian Worker
|
|
4
|
+
# and records their dispositions (confirmed / junk / unknown) to
|
|
5
|
+
# ~/.patchwork/outcome-log.jsonl. The worker trust-replay reads this file to
|
|
6
|
+
# flip junk filings to good:false past the 24h durability window, so the ramp
|
|
7
|
+
# demotes workers that file noise rather than rewarding them.
|
|
8
|
+
#
|
|
9
|
+
# Schedule: every 6 hours. Stagger from the triage recipe so the outcome poll
|
|
10
|
+
# runs well after new issues have settled (most "junk" signals appear within
|
|
11
|
+
# hours of filing).
|
|
12
|
+
#
|
|
13
|
+
# Prerequisite: GitHub connector authorised. This ingester scopes its poll by
|
|
14
|
+
# the `label` var below (default "test-failure" — the exact label the
|
|
15
|
+
# triage-failing-tests-autofile recipe's `file_issue` step applies). If you
|
|
16
|
+
# change the label the worker files under, change `label` here to match, or the
|
|
17
|
+
# poll returns nothing and no dispositions are ever recorded.
|
|
18
|
+
apiVersion: patchwork.sh/v1
|
|
19
|
+
name: outcome-ingester
|
|
20
|
+
description: Poll GitHub for Test Guardian issues and record outcome dispositions to the trust-replay store.
|
|
21
|
+
trigger:
|
|
22
|
+
type: cron
|
|
23
|
+
at: "0 */6 * * *"
|
|
24
|
+
vars:
|
|
25
|
+
- name: repo
|
|
26
|
+
default: ""
|
|
27
|
+
description: "owner/repo to poll — SET THIS to the SAME repo the autofile recipe files against; a blank repo makes the search qualifier malformed (`repo: label:...`) so no worker issues are found and no dispositions are recorded"
|
|
28
|
+
- name: label
|
|
29
|
+
default: "test-failure"
|
|
30
|
+
description: "Label that marks worker-filed issues (default matches the Test Guardian Worker)"
|
|
31
|
+
- name: max
|
|
32
|
+
default: "50"
|
|
33
|
+
description: "Max issues to poll per run"
|
|
34
|
+
steps:
|
|
35
|
+
- id: list_issues
|
|
36
|
+
tool: github.search_issues
|
|
37
|
+
query: "repo:{{repo}} label:{{label}}"
|
|
38
|
+
max: 50
|
|
39
|
+
into: issues
|
|
40
|
+
|
|
41
|
+
# Deterministic — no LLM in the classification path. An earlier LLM-judge
|
|
42
|
+
# agent step here was non-deterministic in production: the SAME closed/
|
|
43
|
+
# COMPLETED issues flipped between "confirmed" and "unknown" on alternating
|
|
44
|
+
# cron fires, and checkedAt was a hallucinated epoch spanning 2023-2027.
|
|
45
|
+
# Trust-replay reads this log to decide good:true/false, so the
|
|
46
|
+
# classification step MUST be pure data (state/stateReason/labels) plus
|
|
47
|
+
# the real clock, not a model's freehand judgment.
|
|
48
|
+
- id: classify_and_persist
|
|
49
|
+
when: "{{issues.json}}"
|
|
50
|
+
tool: outcomes.classify_issues
|
|
51
|
+
issues: "{{issues.json}}"
|
|
52
|
+
recipeName: outcome-ingester
|
|
53
|
+
into: outcome_result
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://patchwork.dev/schemas/recipe.v1.json
|
|
2
|
+
# Body for the Release Worker (templates/workers/release-notes.worker.yaml).
|
|
3
|
+
# Self-waking on every commit (git_hook → onGitCommit, wired in #1016/#1018).
|
|
4
|
+
apiVersion: patchwork.sh/v1
|
|
5
|
+
name: release-notes
|
|
6
|
+
description: After a commit lands, draft a changelog entry from the new commits into the inbox.
|
|
7
|
+
trigger:
|
|
8
|
+
type: git_hook
|
|
9
|
+
event: post-commit
|
|
10
|
+
steps:
|
|
11
|
+
- tool: git.log_since
|
|
12
|
+
since: 24h
|
|
13
|
+
into: commits
|
|
14
|
+
- agent:
|
|
15
|
+
prompt: |
|
|
16
|
+
New commits landed in the last 24h:
|
|
17
|
+
{{commits}}
|
|
18
|
+
|
|
19
|
+
Write a concise changelog entry as a markdown bullet list — one line per
|
|
20
|
+
user-facing change, grouped under feat / fix / chore. Omit pure noise
|
|
21
|
+
(merge commits, formatting-only). If nothing is user-facing, say so.
|
|
22
|
+
# subprocess `claude -p` under your existing subscription (no API key)
|
|
23
|
+
driver: claude-code
|
|
24
|
+
into: notes
|
|
25
|
+
- tool: file.write
|
|
26
|
+
path: ~/.patchwork/inbox/release-notes-{{date}}.md
|
|
27
|
+
content: |
|
|
28
|
+
# Release notes draft — {{date}}
|
|
29
|
+
|
|
30
|
+
{{notes}}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://patchwork.dev/schemas/recipe.v1.json
|
|
2
|
+
#
|
|
3
|
+
# OPT-IN variant of `triage-failing-tests` for the Test Guardian Worker.
|
|
4
|
+
#
|
|
5
|
+
# This is the "make it real" recipe: it does everything the base recipe does
|
|
6
|
+
# (correlate the failure, write a triage note) AND files a GitHub issue — an
|
|
7
|
+
# explicit, RISKY, owned action (`github.create_issue` → the `issue` action
|
|
8
|
+
# class: compensable + brand-exposed). It is the action that lets the worker's
|
|
9
|
+
# trust dial actually move.
|
|
10
|
+
#
|
|
11
|
+
# DEFAULT-OFF: the Test Guardian Worker ships pointing at the base
|
|
12
|
+
# `triage-failing-tests` (draft-to-file only), so nothing here runs until you
|
|
13
|
+
# switch the worker to this recipe. To enable, IN THIS ORDER:
|
|
14
|
+
# 1. enable the `worker.autonomy` feature flag FIRST — this is what GATES the
|
|
15
|
+
# github.create_issue step for human approval until the worker EARNS L4
|
|
16
|
+
# trust on the `issue` class (then it flows autonomously);
|
|
17
|
+
# 2. point `recipe:` in templates/workers/test-guardian.worker.yaml at
|
|
18
|
+
# `triage-failing-tests-autofile`;
|
|
19
|
+
# 3. set `trigger.vars.repo` below to your "owner/repo".
|
|
20
|
+
#
|
|
21
|
+
# ⚠ ORDER MATTERS. With `worker.autonomy` OFF, steps 2+3 ALONE file a real issue
|
|
22
|
+
# on EVERY failing test run with NO approval — an automated (on_test_run) flat
|
|
23
|
+
# run is not gated unless the flag is on. The flag ADDS the gate; it is not what
|
|
24
|
+
# enables filing. Enable the flag first so the very first filing is gated.
|
|
25
|
+
# (Expect more approvals up front; the payoff — autonomous filing — comes after L4.)
|
|
26
|
+
apiVersion: patchwork.sh/v1
|
|
27
|
+
name: triage-failing-tests-autofile
|
|
28
|
+
description: On a failing test run, write a triage note and FILE a GitHub issue (opt-in; gated by the worker trust ramp).
|
|
29
|
+
trigger:
|
|
30
|
+
type: on_test_run
|
|
31
|
+
filter: failure
|
|
32
|
+
vars:
|
|
33
|
+
# REQUIRED to enable — the repository the issue is filed against.
|
|
34
|
+
- name: repo
|
|
35
|
+
default: ""
|
|
36
|
+
description: "owner/repo the issue is filed against (set this to enable)"
|
|
37
|
+
steps:
|
|
38
|
+
- id: get_commits
|
|
39
|
+
tool: git.log_since
|
|
40
|
+
since: 12h
|
|
41
|
+
into: recent
|
|
42
|
+
- id: triage_agent
|
|
43
|
+
agent:
|
|
44
|
+
prompt: |
|
|
45
|
+
Tests just failed. Runner: {{runner}}. Failed {{failed}} / {{total}}.
|
|
46
|
+
|
|
47
|
+
Failures:
|
|
48
|
+
{{failures}}
|
|
49
|
+
|
|
50
|
+
Recent commits (last 12h) that may be responsible:
|
|
51
|
+
{{recent}}
|
|
52
|
+
|
|
53
|
+
Write a triage note (≤5 sentences): (1) which test(s) failed, (2) the
|
|
54
|
+
single most likely cause, (3) the suspect commit if any, (4) the first
|
|
55
|
+
command to run to confirm.
|
|
56
|
+
driver: claude-code
|
|
57
|
+
into: triage
|
|
58
|
+
# Dedup read (issue-hygiene, part 1). Pull the currently-OPEN `test-failure`
|
|
59
|
+
# issues so the decision step below can avoid filing a duplicate of a failure
|
|
60
|
+
# that is already tracked. `assignee: any` is REQUIRED — worker-filed issues
|
|
61
|
+
# are unassigned, so the default `@me` filter would never see them.
|
|
62
|
+
# `optional: true` makes this FAIL-OPEN: if the list call fails (token expiry,
|
|
63
|
+
# rate limit, MCP outage) the run continues and `{{existing}}` is empty — a
|
|
64
|
+
# missed dedup (one possible duplicate) is strictly better than a blocked real
|
|
65
|
+
# filing. Dedup must never gate a genuine failure behind GitHub availability.
|
|
66
|
+
# `when: "{{repo}}"` skips this read when `repo` is unset: with an empty repo
|
|
67
|
+
# the connector would drop the owner/repo filter and dedup against EVERY
|
|
68
|
+
# accessible repo's `test-failure` issues (cross-repo poisoning). Skipping
|
|
69
|
+
# leaves `{{existing}}` empty → "not a duplicate"; the misconfig still surfaces
|
|
70
|
+
# loudly at file_issue (which hard-errors on an empty repo).
|
|
71
|
+
- id: list_existing
|
|
72
|
+
when: "{{repo}}"
|
|
73
|
+
optional: true
|
|
74
|
+
tool: github.list_issues
|
|
75
|
+
repo: "{{repo}}"
|
|
76
|
+
labels:
|
|
77
|
+
- test-failure
|
|
78
|
+
state: open
|
|
79
|
+
assignee: any
|
|
80
|
+
max: 30
|
|
81
|
+
into: existing
|
|
82
|
+
# Decision gate (issue-hygiene, part 2). A worker triage is a LEAD, not a
|
|
83
|
+
# verified diagnosis — the on_test_run event can fire on a flake, a transient,
|
|
84
|
+
# or an already-fixed failure (e.g. #1046: a triage that confidently blamed a
|
|
85
|
+
# commit for a test that actually passes on `main`). This single step answers
|
|
86
|
+
# the worker's real question — "is this worth filing a NEW issue?" — which is
|
|
87
|
+
# true ONLY when the failure (1) REPRODUCES on an isolated re-run AND (2) is
|
|
88
|
+
# NOT already covered by an open issue from `list_existing`. A `false` run
|
|
89
|
+
# still writes the draft note (below) but files NO issue: strictly noise-
|
|
90
|
+
# reducing, never blocks a real, novel failure.
|
|
91
|
+
# `optional: true` is a deliberate FAIL-CLOSED-ON-FILING guard: if THIS agent
|
|
92
|
+
# step itself fails (the re-run crashes, the model returns silent-fail /
|
|
93
|
+
# narration-only output), the run does NOT halt — `{{should_file}}` is left
|
|
94
|
+
# unset, so the file_issue gate below renders falsy and SKIPS. A decision we
|
|
95
|
+
# couldn't make must never auto-file a brand-exposed issue, and the triage note
|
|
96
|
+
# (written next) is preserved either way.
|
|
97
|
+
- id: decide_file
|
|
98
|
+
optional: true
|
|
99
|
+
agent:
|
|
100
|
+
prompt: |
|
|
101
|
+
A test run reported failures and this triage was written:
|
|
102
|
+
|
|
103
|
+
{{triage}}
|
|
104
|
+
|
|
105
|
+
Open issues already labelled `test-failure` (JSON; may be empty or an
|
|
106
|
+
error object if the lookup failed — treat anything other than a clear
|
|
107
|
+
matching issue as "not a duplicate"):
|
|
108
|
+
{{existing}}
|
|
109
|
+
|
|
110
|
+
Do BOTH checks, then decide whether to file a NEW issue:
|
|
111
|
+
1. REPRODUCE: re-run ONLY the specific failing test(s) named above, in
|
|
112
|
+
isolation, on the current checkout — e.g.
|
|
113
|
+
`npx vitest run <file> -t "<test name>"`. A test that PASSES on
|
|
114
|
+
isolated re-run is a flake / transient / already-fixed.
|
|
115
|
+
2. DEDUP: check whether an OPEN issue above already tracks THIS failure
|
|
116
|
+
(same test/file and root cause). If so, it is a duplicate.
|
|
117
|
+
|
|
118
|
+
Output EXACTLY one word and nothing else:
|
|
119
|
+
true — the failure REPRODUCED *and* is NOT already tracked (file it)
|
|
120
|
+
false — it did NOT reproduce, OR an open issue already covers it
|
|
121
|
+
driver: claude-code
|
|
122
|
+
into: should_file
|
|
123
|
+
- id: write_note
|
|
124
|
+
tool: file.write
|
|
125
|
+
path: ~/.patchwork/inbox/test-triage-{{date}}-{{time}}.md
|
|
126
|
+
content: |
|
|
127
|
+
# Test triage — {{date}} {{time}}
|
|
128
|
+
|
|
129
|
+
Runner {{runner}} · failed {{failed}}/{{total}} · file new issue: {{should_file}}
|
|
130
|
+
|
|
131
|
+
{{triage}}
|
|
132
|
+
# The risky owned action. Runs AFTER the draft is written — and the two steps
|
|
133
|
+
# between the note and here (list_existing, decide_file) are BOTH `optional`,
|
|
134
|
+
# so a gate rejection, a missing `repo`, a non-reproducing failure, a duplicate,
|
|
135
|
+
# OR a crashed decision agent never halts before write_note: the triage note is
|
|
136
|
+
# always preserved. Files ONLY when the decision step emitted a truthy verdict —
|
|
137
|
+
# `when` skips the step (not a failure) on a falsy guard ("", "false", "0",
|
|
138
|
+
# "null", "undefined"), which also covers the unset-var case when decide_file
|
|
139
|
+
# failed fail-open.
|
|
140
|
+
- id: file_issue
|
|
141
|
+
when: "{{should_file}}"
|
|
142
|
+
tool: github.create_issue
|
|
143
|
+
repo: "{{repo}}"
|
|
144
|
+
title: "Test triage {{date}}: {{runner}} failing {{failed}}/{{total}}"
|
|
145
|
+
body: |
|
|
146
|
+
{{triage}}
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
_Filed by the Test Guardian Worker from a failing {{runner}} run (reproduced on isolated re-run; no open duplicate)._
|
|
150
|
+
labels:
|
|
151
|
+
- test-failure
|
|
152
|
+
into: filed_issue
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://patchwork.dev/schemas/recipe.v1.json
|
|
2
|
+
# Body for the Test Guardian Worker
|
|
3
|
+
# (templates/workers/test-guardian.worker.yaml). Self-waking on a FAILING test
|
|
4
|
+
# run (on_test_run.filter: failure). Correlates the failure with recent commits
|
|
5
|
+
# and writes a triage note — richer than the plain watch-failing-tests recipe.
|
|
6
|
+
apiVersion: patchwork.sh/v1
|
|
7
|
+
name: triage-failing-tests
|
|
8
|
+
description: On a failing test run, correlate the failure with recent commits and write a triage note.
|
|
9
|
+
trigger:
|
|
10
|
+
type: on_test_run
|
|
11
|
+
filter: failure
|
|
12
|
+
steps:
|
|
13
|
+
- tool: git.log_since
|
|
14
|
+
since: 12h
|
|
15
|
+
into: recent
|
|
16
|
+
- agent:
|
|
17
|
+
prompt: |
|
|
18
|
+
Tests just failed. Runner: {{runner}}. Failed {{failed}} / {{total}}.
|
|
19
|
+
|
|
20
|
+
Failures:
|
|
21
|
+
{{failures}}
|
|
22
|
+
|
|
23
|
+
Recent commits (last 12h) that may be responsible:
|
|
24
|
+
{{recent}}
|
|
25
|
+
|
|
26
|
+
Write a triage note (≤5 sentences): (1) which test(s) failed, (2) the
|
|
27
|
+
single most likely cause, (3) the suspect commit if any, (4) the first
|
|
28
|
+
command to run to confirm.
|
|
29
|
+
driver: claude-code
|
|
30
|
+
into: triage
|
|
31
|
+
- tool: file.write
|
|
32
|
+
path: ~/.patchwork/inbox/test-triage-{{date}}-{{time}}.md
|
|
33
|
+
content: |
|
|
34
|
+
# Test triage — {{date}} {{time}}
|
|
35
|
+
|
|
36
|
+
Runner {{runner}} · failed {{failed}}/{{total}}
|
|
37
|
+
|
|
38
|
+
{{triage}}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Dependency-upkeep worker — top-right beachhead. The classic low-blast,
|
|
2
|
+
# continuous, verifiable job to land first (the wedge): watch for outdated /
|
|
3
|
+
# vulnerable deps and open a bump PR.
|
|
4
|
+
id: dependency-upkeep-worker
|
|
5
|
+
name: Dependency Upkeep Worker
|
|
6
|
+
sector: engineering
|
|
7
|
+
recipe: dependency-bump
|
|
8
|
+
responsibilities:
|
|
9
|
+
- Audit dependencies for outdated / vulnerable packages
|
|
10
|
+
- Open a bump PR with the changelog and advisory links
|
|
11
|
+
owns:
|
|
12
|
+
- deps-read # auditDependencies / getSecurityAdvisories — read-only
|
|
13
|
+
- vcs-local # gitCommit / gitCheckout on a branch — reversible
|
|
14
|
+
- vcs-remote # githubCreatePR — compensable + brand-exposed
|
|
15
|
+
# Opening a PR (vcs-remote) is compensable — but there is NO outcome grader for
|
|
16
|
+
# PRs yet (OutcomeStore is issue-URL-keyed only), so a bump PR nobody reviews
|
|
17
|
+
# would fold good:true past the 24h durability window: the same trust-by-neglect
|
|
18
|
+
# the issue-class fix (#1064) closed, surviving on the PR path. Cap below the
|
|
19
|
+
# compensable auto-allow rung (L2) so PR-opening stays human-approved regardless
|
|
20
|
+
# of earned level — mirroring test-guardian's `issue` cap. Raise to 3 (open PRs
|
|
21
|
+
# autonomously, merging still human) once a PR-outcome grader exists (merged/
|
|
22
|
+
# closed-state detection feeding the OutcomeStore).
|
|
23
|
+
autonomyCeiling: 1
|
|
24
|
+
competence:
|
|
25
|
+
mean: 0.8
|
|
26
|
+
strength: 4
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Release worker — top-right beachhead (high task-impact × high autonomy-tolerance).
|
|
2
|
+
# Body: a chained recipe triggered on merge-to-main that drafts release notes.
|
|
3
|
+
# Reversible, verifiable, internal → fast ramp evidence.
|
|
4
|
+
id: release-notes-worker
|
|
5
|
+
name: Release Worker
|
|
6
|
+
sector: engineering
|
|
7
|
+
recipe: release-notes # the recipe that forms this worker's body
|
|
8
|
+
responsibilities:
|
|
9
|
+
- Watch merges to main and draft release notes / changelog entries
|
|
10
|
+
- Summarize the diff and link the PRs in the range
|
|
11
|
+
owns:
|
|
12
|
+
- vcs-read # getGitStatus / getGitDiff / getGitLog — reversible, low blast
|
|
13
|
+
- fs-write # editText / createFile (the changelog) — reversible
|
|
14
|
+
autonomyCeiling: 4 # internal + reversible: may earn full autonomy
|
|
15
|
+
competence: # shipped competence (a prior), NOT trust — trust earns locally
|
|
16
|
+
mean: 0.85
|
|
17
|
+
strength: 4
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Test-guardian worker — top-right beachhead. Fires on a test-run failure
|
|
2
|
+
# (on_test_run trigger), investigates the failure, and files an issue. Reversible
|
|
3
|
+
# investigation + compensable issue creation → may earn full autonomy on triage.
|
|
4
|
+
id: test-guardian-worker
|
|
5
|
+
name: Test Guardian Worker
|
|
6
|
+
sector: engineering
|
|
7
|
+
recipe: triage-failing-tests
|
|
8
|
+
responsibilities:
|
|
9
|
+
- On a failing test run, investigate the stack trace and identify the cause
|
|
10
|
+
- File / update an issue with the failure summary and the suspect commit
|
|
11
|
+
owns:
|
|
12
|
+
- ci # runTests (re-runnable) — reversible
|
|
13
|
+
- vcs-read # getGitDiff / gitBlame to find the suspect commit
|
|
14
|
+
- issue # githubCreateIssue / addLinearComment — compensable + brand-exposed
|
|
15
|
+
# Capped below the compensable auto-allow threshold (L2): the ramp has only
|
|
16
|
+
# been validated on synthetic data (one planted break, 16 gate decisions) and
|
|
17
|
+
# the outcome-verification signal (confirmed/junk labelling, see outcomeStore.ts)
|
|
18
|
+
# has no real-world recall/false-negative track record yet. Earned trust on
|
|
19
|
+
# `issue` can climb, but auto-filing stays gated for human approval until that
|
|
20
|
+
# signal exists. Raise once a real-world graduation is observed and confirmed.
|
|
21
|
+
autonomyCeiling: 1
|
|
22
|
+
competence:
|
|
23
|
+
mean: 0.8
|
|
24
|
+
strength: 4
|