Skip to main content

Signal Types

Stages communicate their outcome to the orchestrator through the result document ingested after the stage subprocess exits. See Signals concept page for an overview.

Result document verdicts

VerdictMeaningDefault routing
passWork complete, meets the barGate rules evaluated → onPass stage
failWork attempted but did not meet the barGate rules evaluated → onFail stage
blockedStage cannot continueSkip gate rules → fallback stage

How routing works

For pass and fail verdicts, gate rules are evaluated first. A gate rule failure can override the routing (e.g., abort overrides onPass). For blocked, routing goes directly to fallback — gate rules are not evaluated.

Routing edges are DB fields on each configured pipeline stage (pipeline_stage.on_pass, pipeline_stage.on_fail, and pipeline_stage.fallback). A typical seeded stage row behaves like this:

StagePass routeFail/rework routeBlocked route
implementreviewrework or retry, depending on the configured gate verdictissue status Blocked
reviewdeployreworkissue status Blocked
reworkreviewretry/hold, depending on rulesissue status Blocked

The configured terminal target marks the pipeline as finished. Blocked verdicts pause the issue for operator action; they are not represented by a file-backed stage definition.

Signal metadata

Some seeded prompts still use a flux:signal JSON shape as shorthand for the stage outcome:

{"flux:signal": {"verdict": "hold", "reason": "already_complete", "meta": {"targetState": "review"}}}

The DB-first runtime does not route from stdout immediately. The orchestrator reads $RESULT_DOC_PATH after the subprocess exits, validates it, then maps result-document verdicts to gate verdicts and routing.

Legacy signal verdict mapping:

VerdictOrchestrator action
proceedRepresent as result-document verdict: "pass"
holdRepresent as result-document verdict: "blocked"; include signal_reason / signal_meta when needed
reworkRepresent as result-document verdict: "fail"
abortRepresent as a failed stage result or gate-level abort

signal_reason values:

ReasonMeaningOrchestrator action
already_completeIssue is ahead of its current stateTransition issue to signal_meta.targetState via stateOverride() — bypasses the normal transition table
needs_humanAmbiguous or blockedSet issue status to Blocked; surface to user. signal_meta.question carries the message.

Gate verdicts

Gate verdicts are produced by the gate engine after evaluating rules. They can override the result document's routing:

Gate verdictEffect
proceedContinue with the result-document routing
holdPause the pipeline; wait for manual approval
reworkRoute to the onFail stage
abortStop the pipeline immediately; mark the run failed

See Gate Rules for how gate verdicts are produced.

Issue event types for deploy outcomes

Post-pipeline deploy is not a stage verdict and does not mutate stage or pipeline status. When the deploy bridge runs after a terminal pipeline, it records its own outcome and can emit issue events with these types:

Event typeMeaning
deploy_succeededDeploy completed and recorded branch/PR/commit metadata
deploy_skippedDeploy was intentionally skipped, for example no-changes or no-issue
deploy_failedDeploy failed after pipeline execution reached its terminal state