@probelabs/visor 0.1.106 → 0.1.111
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 +71 -2
- package/action.yml +1 -1
- package/defaults/code-refiner.yaml +114 -0
- package/defaults/{.visor.yaml → code-review.yaml} +35 -226
- package/defaults/override.yaml +52 -0
- package/defaults/task-refinement.yaml +624 -0
- package/defaults/visor.tests.yaml +685 -0
- package/defaults/visor.yaml +483 -0
- package/dist/action-cli-bridge.d.ts +11 -82
- package/dist/action-cli-bridge.d.ts.map +1 -1
- package/dist/ai-review-service.d.ts +28 -9
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/check-execution-engine.d.ts +19 -331
- package/dist/check-execution-engine.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/cron-scheduler.d.ts +3 -3
- package/dist/cron-scheduler.d.ts.map +1 -1
- package/dist/debug-visualizer/ws-server.d.ts +7 -1
- package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
- package/dist/defaults/code-refiner.yaml +114 -0
- package/dist/defaults/{.visor.yaml → code-review.yaml} +35 -226
- package/dist/defaults/override.yaml +52 -0
- package/dist/defaults/task-refinement.yaml +624 -0
- package/dist/defaults/visor.tests.yaml +685 -0
- package/dist/defaults/visor.yaml +483 -0
- package/dist/docs/DEPLOYMENT.md +118 -0
- package/dist/docs/GITHUB_CHECKS.md +280 -0
- package/dist/docs/NPM_USAGE.md +208 -0
- package/dist/docs/action-reference.md +19 -0
- package/dist/docs/advanced-ai.md +237 -0
- package/dist/docs/ai-configuration.md +535 -0
- package/dist/docs/ai-custom-tools-usage.md +261 -0
- package/dist/docs/ai-custom-tools.md +392 -0
- package/dist/docs/author-permissions.md +610 -0
- package/dist/docs/bot-transports-rfc.md +23 -0
- package/dist/docs/ci-cli-mode.md +34 -0
- package/dist/docs/claude-code.md +74 -0
- package/dist/docs/command-provider.md +559 -0
- package/dist/docs/commands.md +8 -0
- package/dist/docs/configuration.md +324 -0
- package/dist/docs/custom-tools.md +424 -0
- package/dist/docs/dashboards/README.md +23 -0
- package/dist/docs/dashboards/grafana-visor-diagrams.json +20 -0
- package/dist/docs/dashboards/grafana-visor-overview.json +33 -0
- package/dist/docs/debug-visualizer-progress.md +572 -0
- package/dist/docs/debug-visualizer-rfc.md +691 -0
- package/dist/docs/debug-visualizer.md +114 -0
- package/dist/docs/debugging.md +636 -0
- package/dist/docs/default-output-schema.md +28 -0
- package/dist/docs/dependencies.md +369 -0
- package/dist/docs/dev-playbook.md +9 -0
- package/dist/docs/engine-pause-resume-rfc.md +192 -0
- package/dist/docs/engine-state-machine-plan.md +333 -0
- package/dist/docs/event-driven-github-integration-rfc.md +743 -0
- package/dist/docs/event-triggers.md +292 -0
- package/dist/docs/execution-statistics-rfc.md +290 -0
- package/dist/docs/fact-validator-gap-analysis.md +178 -0
- package/dist/docs/fact-validator-implementation-plan.md +1235 -0
- package/dist/docs/fail-if.md +95 -0
- package/dist/docs/failure-conditions-implementation.md +271 -0
- package/dist/docs/failure-conditions-schema.md +173 -0
- package/dist/docs/failure-routing-rfc.md +193 -0
- package/dist/docs/failure-routing.md +507 -0
- package/dist/docs/foreach-dependency-propagation.md +473 -0
- package/dist/docs/github-ops.md +89 -0
- package/dist/docs/goto-forward-run-plan.md +113 -0
- package/dist/docs/guides/criticality-modes.md +332 -0
- package/dist/docs/guides/fault-management-and-contracts.md +738 -0
- package/dist/docs/guides/workflow-style-guide.md +224 -0
- package/dist/docs/http.md +299 -0
- package/dist/docs/human-input-provider.md +372 -0
- package/dist/docs/lifecycle-hooks.md +253 -0
- package/dist/docs/limits.md +64 -0
- package/dist/docs/liquid-templates.md +490 -0
- package/dist/docs/loop-routing-refactor.md +89 -0
- package/dist/docs/mcp-provider.md +557 -0
- package/dist/docs/mcp.md +124 -0
- package/dist/docs/memory.md +903 -0
- package/dist/docs/observability.md +12 -0
- package/dist/docs/output-formats.md +20 -0
- package/dist/docs/output-formatting.md +29 -0
- package/dist/docs/output-history.md +383 -0
- package/dist/docs/performance.md +6 -0
- package/dist/docs/pluggable.md +124 -0
- package/dist/docs/proposals/snapshot-scope-execution.md +236 -0
- package/dist/docs/providers/git-checkout.md +589 -0
- package/dist/docs/recipes.md +474 -0
- package/dist/docs/rfc/git-checkout-step.md +601 -0
- package/dist/docs/rfc/on_init-hook.md +1294 -0
- package/dist/docs/rfc/workspace-isolation.md +216 -0
- package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -0
- package/dist/docs/router-patterns.md +339 -0
- package/dist/docs/schema-next-pr.md +10 -0
- package/dist/docs/schema-templates.md +68 -0
- package/dist/docs/script.md +34 -0
- package/dist/docs/sdk.md +222 -0
- package/dist/docs/security.md +7 -0
- package/dist/docs/suppressions.md +89 -0
- package/dist/docs/tag-filtering.md +258 -0
- package/dist/docs/telemetry-setup.md +119 -0
- package/dist/docs/telemetry-tracing-rfc.md +275 -0
- package/dist/docs/test-framework-rfc.md +680 -0
- package/dist/docs/testing/assertions.md +85 -0
- package/dist/docs/testing/ci.md +44 -0
- package/dist/docs/testing/cli.md +41 -0
- package/dist/docs/testing/cookbook.md +172 -0
- package/dist/docs/testing/dsl-reference.md +199 -0
- package/dist/docs/testing/fixtures-and-mocks.md +91 -0
- package/dist/docs/testing/flows.md +92 -0
- package/dist/docs/testing/getting-started.md +93 -0
- package/dist/docs/testing/troubleshooting.md +55 -0
- package/dist/docs/timeouts.md +50 -0
- package/dist/docs/troubleshooting.md +7 -0
- package/dist/docs/visor-sdk-rfc.md +186 -0
- package/dist/docs/workflows.md +569 -0
- package/dist/engine/on-finish/orchestrator.d.ts +19 -0
- package/dist/engine/on-finish/orchestrator.d.ts.map +1 -0
- package/dist/engine/on-finish/utils.d.ts +44 -0
- package/dist/engine/on-finish/utils.d.ts.map +1 -0
- package/dist/event-bus/event-bus.d.ts +13 -0
- package/dist/event-bus/event-bus.d.ts.map +1 -0
- package/dist/event-bus/types.d.ts +71 -0
- package/dist/event-bus/types.d.ts.map +1 -0
- package/dist/examples/.claude/agents/code-reviewer.md +69 -0
- package/dist/examples/.mcp.json +34 -0
- package/dist/examples/CALCULATOR-SDK.md +364 -0
- package/dist/examples/README.md +384 -0
- package/dist/examples/ai-custom-tools-example.yaml +206 -0
- package/dist/examples/ai-custom-tools-simple.yaml +76 -0
- package/dist/examples/ai-retry-fallback-config.yaml +180 -0
- package/dist/examples/ai-with-bash.yaml +126 -0
- package/dist/examples/ai-with-mcp.yaml +82 -0
- package/dist/examples/basic-human-input.yaml +15 -0
- package/dist/examples/bedrock-config.yaml +77 -0
- package/dist/examples/calculator-config.yaml +133 -0
- package/dist/examples/calculator-json-output-guide.md +311 -0
- package/dist/examples/calculator-sdk-automated.ts +340 -0
- package/dist/examples/calculator-sdk-example.ts +275 -0
- package/dist/examples/calculator-sdk-json.ts +331 -0
- package/dist/examples/calculator-sdk-real.ts +374 -0
- package/dist/examples/calculator-sdk-test.ts +148 -0
- package/dist/examples/claude-code-config.yaml +191 -0
- package/dist/examples/cron-webhook-config.yaml +215 -0
- package/dist/examples/custom-template.liquid +57 -0
- package/dist/examples/custom-tools-example.yaml +281 -0
- package/dist/examples/enhanced-config.yaml +165 -0
- package/dist/examples/environments/visor.base.yaml +92 -0
- package/dist/examples/environments/visor.dev.yaml +33 -0
- package/dist/examples/environments/visor.prod.yaml +95 -0
- package/dist/examples/environments/visor.staging.yaml +46 -0
- package/dist/examples/fact-validator.yaml +361 -0
- package/dist/examples/fail-if-simple.yaml +90 -0
- package/dist/examples/failure-conditions-advanced.yaml +136 -0
- package/dist/examples/failure-conditions-basic.yaml +48 -0
- package/dist/examples/failure-conditions-github-style.yaml +119 -0
- package/dist/examples/failure-conditions-migration.yaml +74 -0
- package/dist/examples/for-loop-example.yaml +176 -0
- package/dist/examples/forEach-example.yaml +120 -0
- package/dist/examples/git-checkout-basic.yaml +32 -0
- package/dist/examples/git-checkout-compare.yaml +59 -0
- package/dist/examples/git-checkout-cross-repo.yaml +76 -0
- package/dist/examples/github-workflow-with-tags.yml +163 -0
- package/dist/examples/http-integration-config.yaml +240 -0
- package/dist/examples/https-server-config.yaml +209 -0
- package/dist/examples/human-input-example.yaml +63 -0
- package/dist/examples/if-conditions.yaml +173 -0
- package/dist/examples/jira-simple-example.yaml +56 -0
- package/dist/examples/jira-single-issue-workflow.yaml +166 -0
- package/dist/examples/jira-workflow-mcp.yaml +182 -0
- package/dist/examples/mcp/analyzer.py +119 -0
- package/dist/examples/mcp-provider-example.yaml +301 -0
- package/dist/examples/memory-counter.yaml +99 -0
- package/dist/examples/memory-error-collection.yaml +104 -0
- package/dist/examples/memory-exec-js.yaml +247 -0
- package/dist/examples/memory-namespace-isolation.yaml +184 -0
- package/dist/examples/memory-retry-counter.yaml +65 -0
- package/dist/examples/memory-state-machine.yaml +170 -0
- package/dist/examples/on-init-import-demo.yaml +179 -0
- package/dist/examples/outputs-raw-basic.yaml +26 -0
- package/dist/examples/project-with-tools.yaml +174 -0
- package/dist/examples/prompts/architecture-analysis.liquid +116 -0
- package/dist/examples/prompts/security-comprehensive.liquid +107 -0
- package/dist/examples/quick-start-tags.yaml +53 -0
- package/dist/examples/reusable-tools.yaml +92 -0
- package/dist/examples/reusable-workflows.yaml +88 -0
- package/dist/examples/routing-basic.yaml +35 -0
- package/dist/examples/routing-dynamic-js.yaml +46 -0
- package/dist/examples/routing-foreach.yaml +34 -0
- package/dist/examples/routing-goto-event.yaml +34 -0
- package/dist/examples/routing-on-success.yaml +25 -0
- package/dist/examples/run-calculator-demo.sh +71 -0
- package/dist/examples/sdk-basic.mjs +10 -0
- package/dist/examples/sdk-cjs.cjs +10 -0
- package/dist/examples/sdk-comprehensive.mjs +175 -0
- package/dist/examples/sdk-manual-config.mjs +65 -0
- package/dist/examples/sdk-typescript.js +81 -0
- package/dist/examples/sdk-typescript.ts +92 -0
- package/dist/examples/session-reuse-config.yaml +151 -0
- package/dist/examples/session-reuse-self.yaml +81 -0
- package/dist/examples/slack-simple-chat.yaml +775 -0
- package/dist/examples/templates/security-report.liquid +137 -0
- package/dist/examples/tools-library.yaml +281 -0
- package/dist/examples/transform-example.yaml +199 -0
- package/dist/examples/visor-with-tags.yaml +198 -0
- package/dist/examples/webhook-pipeline-config.yaml +218 -0
- package/dist/examples/workflows/calculator-workflow.yaml +163 -0
- package/dist/examples/workflows/code-quality.yaml +222 -0
- package/dist/examples/workflows/quick-pr-check.yaml +90 -0
- package/dist/examples/workflows/workflow-composition-example.yaml +130 -0
- package/dist/failure-condition-evaluator.d.ts +3 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/frontends/github-frontend.d.ts +58 -0
- package/dist/frontends/github-frontend.d.ts.map +1 -0
- package/dist/frontends/host.d.ts +47 -0
- package/dist/frontends/host.d.ts.map +1 -0
- package/dist/frontends/ndjson-sink.d.ts +12 -0
- package/dist/frontends/ndjson-sink.d.ts.map +1 -0
- package/dist/frontends/slack-frontend.d.ts +58 -0
- package/dist/frontends/slack-frontend.d.ts.map +1 -0
- package/dist/generated/config-schema.d.ts +967 -57
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +1033 -56
- package/dist/github-check-service.d.ts +4 -6
- package/dist/github-check-service.d.ts.map +1 -1
- package/dist/github-comments.d.ts +2 -4
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +134327 -99004
- package/dist/liquid-extensions.d.ts.map +1 -1
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/memory-store.d.ts +6 -0
- package/dist/memory-store.d.ts.map +1 -1
- package/dist/output/assistant-json/template.liquid +0 -0
- package/dist/output/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
- package/dist/output/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
- package/dist/output-formatters.d.ts +1 -1
- package/dist/output-formatters.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.d.ts +12 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/check-provider-registry.d.ts +6 -0
- package/dist/providers/check-provider-registry.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts +43 -1
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
- package/dist/providers/command-check-provider.d.ts +1 -1
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/custom-tool-executor.d.ts +61 -0
- package/dist/providers/custom-tool-executor.d.ts.map +1 -0
- package/dist/providers/git-checkout-provider.d.ts +25 -0
- package/dist/providers/git-checkout-provider.d.ts.map +1 -0
- package/dist/providers/github-ops-provider.d.ts.map +1 -1
- package/dist/providers/http-client-provider.d.ts +4 -4
- package/dist/providers/http-client-provider.d.ts.map +1 -1
- package/dist/providers/human-input-check-provider.d.ts +5 -0
- package/dist/providers/human-input-check-provider.d.ts.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/log-check-provider.d.ts +2 -5
- package/dist/providers/log-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-check-provider.d.ts +10 -4
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
- package/dist/providers/memory-check-provider.d.ts +2 -8
- package/dist/providers/memory-check-provider.d.ts.map +1 -1
- package/dist/providers/script-check-provider.d.ts +25 -0
- package/dist/providers/script-check-provider.d.ts.map +1 -0
- package/dist/providers/workflow-check-provider.d.ts +56 -0
- package/dist/providers/workflow-check-provider.d.ts.map +1 -0
- package/dist/reviewer.d.ts +2 -1
- package/dist/reviewer.d.ts.map +1 -1
- package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
- package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
- package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
- package/dist/sdk/{chunk-TUTOLSFV.mjs → chunk-3OMWVM6J.mjs} +11 -1
- package/dist/sdk/chunk-3OMWVM6J.mjs.map +1 -0
- package/dist/sdk/chunk-7UK3NIIT.mjs +482 -0
- package/dist/sdk/chunk-7UK3NIIT.mjs.map +1 -0
- package/dist/sdk/chunk-AGIZJ4UZ.mjs +173 -0
- package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
- package/dist/sdk/chunk-AIVFBIS4.mjs +1371 -0
- package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
- package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
- package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
- package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
- package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
- package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
- package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
- package/dist/sdk/chunk-CNX7V5JK.mjs +89 -0
- package/dist/sdk/chunk-CNX7V5JK.mjs.map +1 -0
- package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
- package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
- package/dist/sdk/chunk-NAW3DB3I.mjs +197 -0
- package/dist/sdk/chunk-NAW3DB3I.mjs.map +1 -0
- package/dist/sdk/chunk-O5EZDNYL.mjs +274 -0
- package/dist/sdk/chunk-O5EZDNYL.mjs.map +1 -0
- package/dist/sdk/chunk-QR7MOMJH.mjs +558 -0
- package/dist/sdk/chunk-QR7MOMJH.mjs.map +1 -0
- package/dist/sdk/chunk-QY2XYPEV.mjs +3556 -0
- package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
- package/dist/sdk/chunk-S2RUE2RG.mjs +145 -0
- package/dist/sdk/chunk-S2RUE2RG.mjs.map +1 -0
- package/dist/sdk/chunk-SIWNBRTK.mjs +800 -0
- package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
- package/dist/sdk/chunk-YSN4G6CI.mjs +146 -0
- package/dist/sdk/chunk-YSN4G6CI.mjs.map +1 -0
- package/dist/sdk/chunk-ZYAUYXSW.mjs +206 -0
- package/dist/sdk/chunk-ZYAUYXSW.mjs.map +1 -0
- package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
- package/dist/sdk/config-YNC2EOOT.mjs +16 -0
- package/dist/sdk/config-merger-PX3WIT57.mjs +10 -0
- package/dist/sdk/event-bus-5BEVPQ6T.mjs +35 -0
- package/dist/sdk/event-bus-5BEVPQ6T.mjs.map +1 -0
- package/dist/sdk/failure-condition-evaluator-YGTF2GHG.mjs +17 -0
- package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +458 -0
- package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +1 -0
- package/dist/sdk/github-frontend-SIAEOCON.mjs +1420 -0
- package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
- package/dist/sdk/host-DXUYTNMU.mjs +52 -0
- package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
- package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-PKWCKK7E.mjs} +8 -2
- package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
- package/dist/sdk/memory-store-XGBB7LX7.mjs.map +1 -0
- package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
- package/dist/sdk/metrics-7PP3EJUH.mjs.map +1 -0
- package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
- package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
- package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
- package/dist/sdk/prompt-state-YRJY6QAL.mjs.map +1 -0
- package/dist/sdk/renderer-schema-LPKN5UJS.mjs +51 -0
- package/dist/sdk/renderer-schema-LPKN5UJS.mjs.map +1 -0
- package/dist/sdk/routing-6N45MJ4F.mjs +24 -0
- package/dist/sdk/routing-6N45MJ4F.mjs.map +1 -0
- package/dist/sdk/sdk.d.mts +541 -22
- package/dist/sdk/sdk.d.ts +541 -22
- package/dist/sdk/sdk.js +27963 -16505
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +1116 -2169
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/session-registry-4E6YRQ77.mjs +10 -0
- package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
- package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
- package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
- package/dist/sdk/trace-helpers-VP6QYVBX.mjs +23 -0
- package/dist/sdk/trace-helpers-VP6QYVBX.mjs.map +1 -0
- package/dist/sdk/{tracer-init-WC75N5NW.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
- package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
- package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
- package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
- package/dist/sdk.d.ts.map +1 -1
- package/dist/slack/adapter.d.ts +36 -0
- package/dist/slack/adapter.d.ts.map +1 -0
- package/dist/slack/cache-prewarmer.d.ts +31 -0
- package/dist/slack/cache-prewarmer.d.ts.map +1 -0
- package/dist/slack/client.d.ts +77 -0
- package/dist/slack/client.d.ts.map +1 -0
- package/dist/slack/markdown.d.ts +45 -0
- package/dist/slack/markdown.d.ts.map +1 -0
- package/dist/slack/prompt-state.d.ts +33 -0
- package/dist/slack/prompt-state.d.ts.map +1 -0
- package/dist/slack/rate-limiter.d.ts +56 -0
- package/dist/slack/rate-limiter.d.ts.map +1 -0
- package/dist/slack/signature.d.ts +2 -0
- package/dist/slack/signature.d.ts.map +1 -0
- package/dist/slack/socket-runner.d.ts +42 -0
- package/dist/slack/socket-runner.d.ts.map +1 -0
- package/dist/slack/thread-cache.d.ts +51 -0
- package/dist/slack/thread-cache.d.ts.map +1 -0
- package/dist/snapshot-store.d.ts +59 -0
- package/dist/snapshot-store.d.ts.map +1 -0
- package/dist/state-machine/context/build-engine-context.d.ts +17 -0
- package/dist/state-machine/context/build-engine-context.d.ts.map +1 -0
- package/dist/state-machine/dispatch/dependency-gating.d.ts +12 -0
- package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -0
- package/dist/state-machine/dispatch/execution-invoker.d.ts +14 -0
- package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -0
- package/dist/state-machine/dispatch/foreach-processor.d.ts +8 -0
- package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -0
- package/dist/state-machine/dispatch/history-snapshot.d.ts +8 -0
- package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -0
- package/dist/state-machine/dispatch/on-init-handlers.d.ts +43 -0
- package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
- package/dist/state-machine/dispatch/renderer-schema.d.ts +8 -0
- package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -0
- package/dist/state-machine/dispatch/stats-manager.d.ts +15 -0
- package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -0
- package/dist/state-machine/dispatch/template-renderer.d.ts +7 -0
- package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -0
- package/dist/state-machine/execution/summary.d.ts +8 -0
- package/dist/state-machine/execution/summary.d.ts.map +1 -0
- package/dist/state-machine/runner.d.ts +79 -0
- package/dist/state-machine/runner.d.ts.map +1 -0
- package/dist/state-machine/states/check-running.d.ts +14 -0
- package/dist/state-machine/states/check-running.d.ts.map +1 -0
- package/dist/state-machine/states/completed.d.ts +12 -0
- package/dist/state-machine/states/completed.d.ts.map +1 -0
- package/dist/state-machine/states/error.d.ts +11 -0
- package/dist/state-machine/states/error.d.ts.map +1 -0
- package/dist/state-machine/states/init.d.ts +11 -0
- package/dist/state-machine/states/init.d.ts.map +1 -0
- package/dist/state-machine/states/level-dispatch.d.ts +17 -0
- package/dist/state-machine/states/level-dispatch.d.ts.map +1 -0
- package/dist/state-machine/states/plan-ready.d.ts +12 -0
- package/dist/state-machine/states/plan-ready.d.ts.map +1 -0
- package/dist/state-machine/states/routing.d.ts +52 -0
- package/dist/state-machine/states/routing.d.ts.map +1 -0
- package/dist/state-machine/states/wave-planning.d.ts +14 -0
- package/dist/state-machine/states/wave-planning.d.ts.map +1 -0
- package/dist/state-machine/workflow-projection.d.ts +47 -0
- package/dist/state-machine/workflow-projection.d.ts.map +1 -0
- package/dist/state-machine-execution-engine.d.ts +159 -0
- package/dist/state-machine-execution-engine.d.ts.map +1 -0
- package/dist/telemetry/opentelemetry.d.ts.map +1 -1
- package/dist/telemetry/state-capture.d.ts +5 -0
- package/dist/telemetry/state-capture.d.ts.map +1 -1
- package/dist/test-runner/assertions.d.ts +59 -0
- package/dist/test-runner/assertions.d.ts.map +1 -0
- package/dist/test-runner/core/environment.d.ts +8 -0
- package/dist/test-runner/core/environment.d.ts.map +1 -0
- package/dist/test-runner/core/fixture.d.ts +3 -0
- package/dist/test-runner/core/fixture.d.ts.map +1 -0
- package/dist/test-runner/core/flow-stage.d.ts +32 -0
- package/dist/test-runner/core/flow-stage.d.ts.map +1 -0
- package/dist/test-runner/core/mocks.d.ts +8 -0
- package/dist/test-runner/core/mocks.d.ts.map +1 -0
- package/dist/test-runner/core/test-execution-wrapper.d.ts +18 -0
- package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -0
- package/dist/test-runner/evaluators.d.ts +45 -0
- package/dist/test-runner/evaluators.d.ts.map +1 -0
- package/dist/test-runner/fixture-loader.d.ts +30 -0
- package/dist/test-runner/fixture-loader.d.ts.map +1 -0
- package/dist/test-runner/index.d.ts +127 -0
- package/dist/test-runner/index.d.ts.map +1 -0
- package/dist/test-runner/recorders/github-recorder.d.ts +23 -0
- package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -0
- package/dist/test-runner/recorders/global-recorder.d.ts +4 -0
- package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -0
- package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
- package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
- package/dist/test-runner/utils/selectors.d.ts +2 -0
- package/dist/test-runner/utils/selectors.d.ts.map +1 -0
- package/dist/test-runner/validator.d.ts +8 -0
- package/dist/test-runner/validator.d.ts.map +1 -0
- package/dist/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
- package/dist/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
- package/dist/types/bot.d.ts +109 -0
- package/dist/types/bot.d.ts.map +1 -0
- package/dist/types/cli.d.ts +8 -1
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts +459 -9
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts +177 -0
- package/dist/types/engine.d.ts.map +1 -0
- package/dist/types/execution.d.ts +73 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/git-checkout.d.ts +76 -0
- package/dist/types/git-checkout.d.ts.map +1 -0
- package/dist/types/github.d.ts +51 -0
- package/dist/types/github.d.ts.map +1 -0
- package/dist/types/workflow.d.ts +237 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/utils/command-executor.d.ts +43 -0
- package/dist/utils/command-executor.d.ts.map +1 -0
- package/dist/utils/comment-metadata.d.ts +21 -0
- package/dist/utils/comment-metadata.d.ts.map +1 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-merger.d.ts.map +1 -1
- package/dist/utils/env-exposure.d.ts +3 -0
- package/dist/utils/env-exposure.d.ts.map +1 -0
- package/dist/utils/file-exclusion.d.ts.map +1 -1
- package/dist/utils/interactive-prompt.d.ts +1 -1
- package/dist/utils/interactive-prompt.d.ts.map +1 -1
- package/dist/utils/json-text-extractor.d.ts +17 -0
- package/dist/utils/json-text-extractor.d.ts.map +1 -0
- package/dist/utils/sandbox.d.ts +10 -0
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/script-memory-ops.d.ts +21 -0
- package/dist/utils/script-memory-ops.d.ts.map +1 -0
- package/dist/utils/template-context.d.ts +8 -0
- package/dist/utils/template-context.d.ts.map +1 -0
- package/dist/utils/tracer-init.d.ts.map +1 -1
- package/dist/utils/workspace-manager.d.ts +118 -0
- package/dist/utils/workspace-manager.d.ts.map +1 -0
- package/dist/utils/worktree-cleanup.d.ts +33 -0
- package/dist/utils/worktree-cleanup.d.ts.map +1 -0
- package/dist/utils/worktree-manager.d.ts +153 -0
- package/dist/utils/worktree-manager.d.ts.map +1 -0
- package/dist/webhook-server.d.ts +3 -3
- package/dist/webhook-server.d.ts.map +1 -1
- package/dist/workflow-executor.d.ts +81 -0
- package/dist/workflow-executor.d.ts.map +1 -0
- package/dist/workflow-registry.d.ts +79 -0
- package/dist/workflow-registry.d.ts.map +1 -0
- package/package.json +12 -5
- package/dist/output/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
- package/dist/sdk/check-execution-engine-2YYKUUSH.mjs +0 -11
- package/dist/sdk/check-execution-engine-6QJXYYON.mjs +0 -11
- package/dist/sdk/check-execution-engine-PJZ4ZOKG.mjs +0 -11
- package/dist/sdk/chunk-33QVZ2D4.mjs +0 -316
- package/dist/sdk/chunk-33QVZ2D4.mjs.map +0 -1
- package/dist/sdk/chunk-B5QBV2QJ.mjs +0 -752
- package/dist/sdk/chunk-B5QBV2QJ.mjs.map +0 -1
- package/dist/sdk/chunk-BVFNRCHT.mjs +0 -14129
- package/dist/sdk/chunk-BVFNRCHT.mjs.map +0 -1
- package/dist/sdk/chunk-KWZW23FG.mjs +0 -14129
- package/dist/sdk/chunk-KWZW23FG.mjs.map +0 -1
- package/dist/sdk/chunk-O4RP4BRH.mjs +0 -14092
- package/dist/sdk/chunk-O4RP4BRH.mjs.map +0 -1
- package/dist/sdk/chunk-TUTOLSFV.mjs.map +0 -1
- package/dist/sdk/chunk-U5D2LY66.mjs +0 -245
- package/dist/sdk/chunk-U5D2LY66.mjs.map +0 -1
- package/dist/sdk/chunk-U7X54EMV.mjs +0 -331
- package/dist/sdk/chunk-U7X54EMV.mjs.map +0 -1
- package/dist/sdk/config-merger-TWUBWFC2.mjs +0 -8
- package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs +0 -61
- package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs.map +0 -1
- package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs +0 -61
- package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs.map +0 -1
- package/dist/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
- /package/dist/sdk/{check-execution-engine-2YYKUUSH.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
- /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
- /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
- /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
- /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# Criticality Modes — External, Control‑Plane, Policy, Non‑Critical
|
|
2
|
+
|
|
3
|
+
This document explains what each criticality mode means, how to declare it, the engine defaults it enables, and how core constructs (if, assume, guarantee, fail_if, transitions, retries, loop budgets) behave per mode. All examples use block‑style YAML.
|
|
4
|
+
|
|
5
|
+
> Assume vs. Guarantee — Do’s and Don’ts
|
|
6
|
+
>
|
|
7
|
+
> Do
|
|
8
|
+
> - Use `assume` for pre‑execution prerequisites (env/memory/upstream), not this step’s `output`.
|
|
9
|
+
> - Use `guarantee` for assertions about this step’s produced `output` (shape, fan‑out size, control signals).
|
|
10
|
+
> - Use `fail_if` for policy/threshold decisions.
|
|
11
|
+
>
|
|
12
|
+
> Don’t
|
|
13
|
+
> - Don’t reference this step’s `output` in `assume`.
|
|
14
|
+
> - Don’t mix policy thresholds into `guarantee`—use `fail_if`.
|
|
15
|
+
> - Don’t rely on time/random/network in expressions.
|
|
16
|
+
|
|
17
|
+
## Why criticality?
|
|
18
|
+
|
|
19
|
+
Criticality classifies a step by the operational risk it carries. The engine uses it to pick safe defaults for contracts, dependency gating, retries, and loop budgets. `continue_on_failure` only controls gating; it does not define criticality.
|
|
20
|
+
|
|
21
|
+
Declare criticality on each check:
|
|
22
|
+
```yaml
|
|
23
|
+
checks:
|
|
24
|
+
some-step:
|
|
25
|
+
type: command
|
|
26
|
+
criticality: internal # external | internal | policy | info
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
If the field is omitted, the engine may infer a default (mutating → external; forEach parent or on_* goto/run → control‑plane; policy gates → policy; else non‑critical). You can override any default on a per‑check basis.
|
|
30
|
+
|
|
31
|
+
### Mode selection — quick checklist
|
|
32
|
+
- Does this step mutate external state? → external
|
|
33
|
+
- Does it steer execution (fan‑out, transitions/goto, sets flags for other guards)? → internal
|
|
34
|
+
- Does it enforce permissions/policy/compliance and gate external steps? → policy
|
|
35
|
+
- Otherwise, is it read‑only/pure and low‑risk? → info
|
|
36
|
+
|
|
37
|
+
If in doubt, start with info and promote to policy/internal/external when you add gating, routing, or side‑effects.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## External
|
|
42
|
+
|
|
43
|
+
Mutates systems outside the engine (GitHub ops, HTTP methods ≠ GET/HEAD, file writes, ticket creation).
|
|
44
|
+
|
|
45
|
+
Defaults
|
|
46
|
+
- Contracts required: declare `assume` (preconditions) and `guarantee` (postconditions).
|
|
47
|
+
- Gating: `continue_on_failure: false` by default; dependents skip when this step fails.
|
|
48
|
+
- Retries: transient faults only, bounded (max 2–3 with backoff); no auto‑retry for logical (policy/contract) violations, including `contract/schema_validation_failed`.
|
|
49
|
+
- Loop budget: standard (10) unless the step also routes.
|
|
50
|
+
- Side‑effects: suppress/postpone mutating actions when `guarantee`/`fail_if` fail; require remediation/approval.
|
|
51
|
+
|
|
52
|
+
Recommended contracts
|
|
53
|
+
- assume examples: authenticated/authorized; dry‑run disabled when posting; rate‑limit budget present.
|
|
54
|
+
- guarantee examples: created resource IDs present; idempotency markers written; invariants about payload size/format.
|
|
55
|
+
|
|
56
|
+
Example — safely posting a PR comment
|
|
57
|
+
```yaml
|
|
58
|
+
checks:
|
|
59
|
+
post-comment:
|
|
60
|
+
type: github
|
|
61
|
+
criticality: external
|
|
62
|
+
on:
|
|
63
|
+
- pr_opened
|
|
64
|
+
op: comment.create
|
|
65
|
+
assume:
|
|
66
|
+
- "isMember()"
|
|
67
|
+
- "env.DRY_RUN !== 'true'"
|
|
68
|
+
guarantee:
|
|
69
|
+
- "output && typeof output.id === 'number'"
|
|
70
|
+
continue_on_failure: false
|
|
71
|
+
on_fail:
|
|
72
|
+
retry: { max: 2, backoff: { mode: exponential, delay_ms: 1200 } }
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### When to pick EXTERNAL (real‑life)
|
|
76
|
+
- GitHub comment/label/edit operations (comment.create, labels.add/remove).
|
|
77
|
+
- HTTP webhooks that mutate (POST/PUT/PATCH/DELETE) — Slack messages, PagerDuty incidents, Notion/Linear/Jira ticket creation.
|
|
78
|
+
- File system writes (artifact publishing, changelog generation into repo) or any step that makes persistent changes.
|
|
79
|
+
- Git operations that change state (push, tag, merge) — if ever enabled, treat as external by default.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Control‑Plane
|
|
84
|
+
|
|
85
|
+
Steers execution (decides what runs next and how often). Examples: forEach parents, steps with on_* transitions/goto/run, memory/flags used by conditions.
|
|
86
|
+
|
|
87
|
+
Defaults
|
|
88
|
+
- Contracts required (route integrity): meaningful `assume` and `guarantee`.
|
|
89
|
+
- Gating: `continue_on_failure: false` by default.
|
|
90
|
+
- Retries: transient faults only (provider crashes); no auto‑retry for logical violations (including `contract/schema_validation_failed`).
|
|
91
|
+
- Loop budgets: tighter per‑scope (recommended 8) to avoid oscillations.
|
|
92
|
+
|
|
93
|
+
Recommended contracts
|
|
94
|
+
- assume: pre‑execution prerequisites independent of this step's own output (e.g., env/memory flags, upstream readiness).
|
|
95
|
+
- guarantee: postconditions about this step's produced control signals and shape/size caps (e.g., arrays, max fan‑out, valid transition targets).
|
|
96
|
+
|
|
97
|
+
Example — fan‑out producer with loopback transitions
|
|
98
|
+
```yaml
|
|
99
|
+
routing:
|
|
100
|
+
max_loops: 8
|
|
101
|
+
|
|
102
|
+
checks:
|
|
103
|
+
extract-items:
|
|
104
|
+
type: command
|
|
105
|
+
criticality: internal
|
|
106
|
+
exec: "node -e \"console.log('[\\"a\\",\\"b\\",\\"c\\"]')\""
|
|
107
|
+
forEach: true
|
|
108
|
+
guarantee:
|
|
109
|
+
- "Array.isArray(output)"
|
|
110
|
+
- "output.every(x => typeof x === 'string')"
|
|
111
|
+
- "output.length <= 100" # size cap belongs in guarantee (post‑exec)
|
|
112
|
+
on_finish:
|
|
113
|
+
transitions:
|
|
114
|
+
- when: "any(outputs_history['validate'], v => v && v.ok === false)"
|
|
115
|
+
to: remediate
|
|
116
|
+
|
|
117
|
+
validate:
|
|
118
|
+
type: command
|
|
119
|
+
depends_on:
|
|
120
|
+
- extract-items
|
|
121
|
+
fanout: map
|
|
122
|
+
exec: node scripts/validate.js
|
|
123
|
+
|
|
124
|
+
remediate:
|
|
125
|
+
type: command
|
|
126
|
+
exec: node scripts/fix.js
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### When to pick CONTROL‑PLANE (real‑life)
|
|
130
|
+
- A forEach parent that fans out work to child steps (e.g., facts, files, services, directories, modules).
|
|
131
|
+
- An aggregator that computes a run decision (`all_valid`, `needs_retry`, `next_targets`) and routes via transitions.
|
|
132
|
+
- A small `memory`/`log`/`script` step that sets flags used by `if/assume/guarantee` on other checks (e.g., `needs_retry=true`).
|
|
133
|
+
- Workflow orchestration steps whose purpose is routing/looping rather than producing user-facing output.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Policy
|
|
138
|
+
|
|
139
|
+
Enforces permissions, compliance, or organizational policy (e.g., reviewer must be MEMBER, commit message format, license checks). Often gates external actions even if it doesn’t mutate itself.
|
|
140
|
+
|
|
141
|
+
Defaults
|
|
142
|
+
- Contracts required; strict handling of logical violations.
|
|
143
|
+
- Gating: `continue_on_failure: false` by default.
|
|
144
|
+
- Retries: do not auto‑retry logical failures; only retry transient provider errors.
|
|
145
|
+
|
|
146
|
+
Recommended contracts
|
|
147
|
+
- assume: environment/org state required for policy checks.
|
|
148
|
+
- guarantee: policy pass/fail booleans, lists of violations, etc.
|
|
149
|
+
|
|
150
|
+
Example — permission gate that blocks labels/comments on failure
|
|
151
|
+
```yaml
|
|
152
|
+
checks:
|
|
153
|
+
permission-check:
|
|
154
|
+
type: command
|
|
155
|
+
criticality: policy
|
|
156
|
+
exec: node scripts/check-permissions.js # -> { allowed: boolean }
|
|
157
|
+
guarantee:
|
|
158
|
+
- "typeof output.allowed === 'boolean'"
|
|
159
|
+
|
|
160
|
+
post-label:
|
|
161
|
+
type: github
|
|
162
|
+
depends_on:
|
|
163
|
+
- permission-check
|
|
164
|
+
criticality: external
|
|
165
|
+
op: labels.add
|
|
166
|
+
values:
|
|
167
|
+
- "reviewed"
|
|
168
|
+
if: "outputs['permission-check'].allowed === true" # only proceed when policy passes
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### When to pick POLICY (real‑life)
|
|
172
|
+
- Permission & role checks that gate external actions (only MEMBERS may post/label).
|
|
173
|
+
- Compliance or guardrail checks (branch protection, commit message format, DCO/CLA verification) that block mutating steps.
|
|
174
|
+
- Change‑management windows (e.g., “no posts on weekends”), environment gates (PROD vs. STAGING), or organization‑wide safety toggles.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Non‑Critical
|
|
179
|
+
|
|
180
|
+
Pure/read‑only compute where failures don’t risk unsafe behavior.
|
|
181
|
+
|
|
182
|
+
Defaults
|
|
183
|
+
- Contracts recommended (not mandatory).
|
|
184
|
+
- Gating: `continue_on_failure: true` allowed if safe.
|
|
185
|
+
- Retries: bounded; can be slightly looser.
|
|
186
|
+
|
|
187
|
+
Example — summary step that won’t block the pipeline
|
|
188
|
+
```yaml
|
|
189
|
+
checks:
|
|
190
|
+
summarize:
|
|
191
|
+
type: ai
|
|
192
|
+
criticality: info
|
|
193
|
+
on:
|
|
194
|
+
- pr_opened
|
|
195
|
+
- pr_updated
|
|
196
|
+
continue_on_failure: true
|
|
197
|
+
fail_if: "(output.errors || []).length > 0"
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### When to pick NON‑CRITICAL (real‑life)
|
|
201
|
+
- Read‑only analysis and summaries (lint, style, performance hints, PR summary) where failure should not block critical tasks.
|
|
202
|
+
- Exploratory AI steps that help humans but don’t gate or mutate (draft review comments in dry‑run; heuristics, suggestions).
|
|
203
|
+
- Any leaf computation whose outputs aren’t consumed by control‑plane or external steps.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Construct Behavior by Mode
|
|
208
|
+
|
|
209
|
+
- if (plan‑time): false/error → skip in all modes. In critical branches, dependents should be gated so mutating steps do not run.
|
|
210
|
+
- assume (pre‑exec): false/error → skip before provider call. In critical modes this should block downstream mutators; use a guard step if you need a hard failure.
|
|
211
|
+
- guarantee (post‑exec): violation → failure, add `contract/guarantee_failed`, route `on_fail`. In critical modes, block mutating side‑effects until remediated.
|
|
212
|
+
- fail_if (post‑exec): true → failure, route `on_fail`. Do not auto‑retry logical failures in critical modes.
|
|
213
|
+
- transitions/goto: prefer declarative transitions; enforce loop budgets (default 10; recommended 8 for control‑plane fan‑outs).
|
|
214
|
+
|
|
215
|
+
Numeric defaults (recommended)
|
|
216
|
+
- Retries: max 3 (non‑critical), max 2–3 (critical), exponential backoff with jitter.
|
|
217
|
+
- Loop budget: 10 (default), 8 for control‑plane branches.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Patterns & Guardrails
|
|
222
|
+
|
|
223
|
+
- Guard step for hard‑fail on unmet preconditions
|
|
224
|
+
```yaml
|
|
225
|
+
checks:
|
|
226
|
+
prechecks:
|
|
227
|
+
type: command
|
|
228
|
+
exec: node scripts/check-tools.js # exit 1 when tools missing
|
|
229
|
+
fail_if: "output.exitCode !== 0"
|
|
230
|
+
analyze:
|
|
231
|
+
type: command
|
|
232
|
+
depends_on:
|
|
233
|
+
- prechecks
|
|
234
|
+
exec: node scripts/analyze.js
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
- Side‑effect suppression
|
|
238
|
+
- Ensure mutating steps depend on the critical gate/contract step so failures/violations block posting.
|
|
239
|
+
|
|
240
|
+
- Determinism
|
|
241
|
+
- Keep routing/contract expressions pure (no time/random/network), with short evaluation timeouts.
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## See also
|
|
246
|
+
- docs/guides/fault-management-and-contracts.md — full safety checklist, behavior matrix, and examples
|
|
247
|
+
- docs/engine-state-machine-plan.md — engine phases, routing, and loop budgets
|
|
248
|
+
|
|
249
|
+
## Comprehensive Example — End‑to‑End Flow Using All Primitives
|
|
250
|
+
|
|
251
|
+
```yaml
|
|
252
|
+
version: "1.0"
|
|
253
|
+
|
|
254
|
+
routing:
|
|
255
|
+
max_loops: 8
|
|
256
|
+
|
|
257
|
+
checks:
|
|
258
|
+
extract-facts:
|
|
259
|
+
type: command
|
|
260
|
+
criticality: internal
|
|
261
|
+
on:
|
|
262
|
+
- issue_opened
|
|
263
|
+
- issue_comment
|
|
264
|
+
exec: "node -e \"console.log('[{""id"":1,""claim"":""A""},{""id"":2,""claim"":""B""}]')\""
|
|
265
|
+
forEach: true
|
|
266
|
+
guarantee:
|
|
267
|
+
- "Array.isArray(output)"
|
|
268
|
+
- "output.every(x => typeof x.id === 'number' && typeof x.claim === 'string')"
|
|
269
|
+
- "output.length <= 50"
|
|
270
|
+
on_finish:
|
|
271
|
+
transitions:
|
|
272
|
+
- when: "any(outputs_history['validate-fact'], v => v && v.is_valid === false) && event.name === 'issue_opened'"
|
|
273
|
+
to: issue-assistant
|
|
274
|
+
- when: "any(outputs_history['validate-fact'], v => v && v.is_valid === false) && event.name === 'issue_comment'"
|
|
275
|
+
to: comment-assistant
|
|
276
|
+
|
|
277
|
+
validate-fact:
|
|
278
|
+
type: command
|
|
279
|
+
depends_on:
|
|
280
|
+
- extract-facts
|
|
281
|
+
fanout: map
|
|
282
|
+
exec: node scripts/validate-fact.js
|
|
283
|
+
fail_if: "output && output.is_valid === false"
|
|
284
|
+
on_fail:
|
|
285
|
+
retry: { max: 1, backoff: { mode: exponential, delay_ms: 1000 } }
|
|
286
|
+
|
|
287
|
+
aggregate:
|
|
288
|
+
type: command
|
|
289
|
+
criticality: internal
|
|
290
|
+
depends_on:
|
|
291
|
+
- validate-fact
|
|
292
|
+
exec: node scripts/aggregate-validity.js # -> { all_valid: boolean }
|
|
293
|
+
guarantee:
|
|
294
|
+
- "output && typeof output.all_valid === 'boolean'"
|
|
295
|
+
on_success:
|
|
296
|
+
transitions:
|
|
297
|
+
- when: "output.all_valid === true"
|
|
298
|
+
to: permission-check
|
|
299
|
+
|
|
300
|
+
permission-check:
|
|
301
|
+
type: command
|
|
302
|
+
criticality: policy
|
|
303
|
+
exec: node scripts/check-permissions.js # -> { allowed: boolean }
|
|
304
|
+
guarantee:
|
|
305
|
+
- "typeof output.allowed === 'boolean'"
|
|
306
|
+
|
|
307
|
+
post-comment:
|
|
308
|
+
type: github
|
|
309
|
+
criticality: external
|
|
310
|
+
depends_on:
|
|
311
|
+
- permission-check
|
|
312
|
+
on:
|
|
313
|
+
- issue_opened
|
|
314
|
+
if: "outputs['permission-check'] && outputs['permission-check'].allowed === true"
|
|
315
|
+
assume:
|
|
316
|
+
- "outputs['permission-check'] && outputs['permission-check'].allowed === true"
|
|
317
|
+
- "env.DRY_RUN !== 'true'"
|
|
318
|
+
op: comment.create
|
|
319
|
+
guarantee:
|
|
320
|
+
- "output && typeof output.id === 'number'"
|
|
321
|
+
continue_on_failure: false
|
|
322
|
+
|
|
323
|
+
summarize:
|
|
324
|
+
type: ai
|
|
325
|
+
criticality: info
|
|
326
|
+
on:
|
|
327
|
+
- issue_opened
|
|
328
|
+
continue_on_failure: true
|
|
329
|
+
fail_if: "(output.errors || []).length > 0"
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
This scenario demonstrates all primitives across modes: control‑plane fan‑out + transitions, policy gating, external action with contracts, and a non‑critical leaf that may fail softly.
|