Prove that the dispatched workflow run finished with success. A completed run is not a successful run. The contract reads the conclusion of the run and an event that carries it.

Contract identity.
FactValue
Contract idgithub.workflow_run.succeeded
Version1.0.0
Hash310fe9de68836705
Completion levelsucceeded
CertificationCommunity
SkillGitHub REST API 0.1.0
Valid for provider API versions2022-11-28

What is the intent?

Start the workflow on the reference and let it finish with success.

What is the subject and the action?

MemberValue
Subject typegithub.workflow_run
Subject identityworkflow_run_id = $action.result.workflow_run_id
Canonical effectci.workflow_run_start
Provider operationPOST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongworkflow_run_id from $action.result.workflow_run_idyes
fingerprintweakworkflow_id from $input.workflow_id; ref from $input.refno

Which evidence does the contract require?

Minimum evidence level E2. An independent channel is required. Minimum channels: 1.

ChannelLevelIndependenceVerifierDescription
workflow_run_readbackE2provider readbackhttpRead the workflow run from the provider. A condition path is $observed.workflow_run_readback.conclusion.
workflow_run_completed_eventsE3provider eventwebhookThe workflow_run.completed events of this run that carry the conclusion success. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}.
workflow_run_requested_eventsE3provider eventwebhookThe workflow_run.requested events for the reference since the operation started. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. A count above one shows a second run.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
workflow_run_completedThe run reached the terminal status.$observed.workflow_run_readback.statuseqcompletedworkflow_run_readback
workflow_run_conclusion_successThe conclusion of the run is success. A completed run is not a success.$observed.workflow_run_readback.conclusioneqsuccessworkflow_run_readback
workflow_run_ref_matchesThe run used the reference that the intent named.$observed.workflow_run_readback.head_brancheq$input.refworkflow_run_readback
workflow_run_started_in_windowThe provider created the run after the operation started.$observed.workflow_run_readback.created_attime_after$operation.created_atworkflow_run_readback
workflow_run_success_eventAt least one workflow_run.completed event of this run carries the conclusion success.$observed.workflow_run_completed_events.countgte1workflow_run_completed_events

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
workflow_run_on_wrong_refwrong subjectThe workflow run used a different reference than the intent named.$observed.workflow_run_readback.head_branchne$input.ref
workflow_run_not_a_dispatchotherThe run started from another event. It is not the run of this dispatch.$observed.workflow_run_readback.eventneworkflow_dispatch
workflow_run_predates_operationpre existing stateThe workflow run is older than the operation. It proves nothing.$observed.workflow_run_readback.created_attime_before$operation.created_at
duplicate_workflow_run_presentduplicate side effectGitHub started more than one run for the reference since the operation started. Do not retry.$observed.workflow_run_requested_events.countgt1

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
terminal_failure$observed.workflow_run_readback.conclusion in ["failure","timed_out","startup_failure"]FAILEDThe run is complete and a job of it failed.
cancelled$observed.workflow_run_readback.conclusion eq "cancelled"CONTRADICTEDA person or an agent cancelled the run. No work finished.
still_running$observed.workflow_run_readback.status in ["queued","in_progress","requested","waiting","pending"]PENDINGThe run has not finished. The runtime observes again later.

How long does the runtime observe?

Timing memberValue
Initial delay1000 ms
Poll interval5000 ms
Backoffexponential factor 2, max 60000 ms
Maximum attempts40
Timeout86400000 ms
Stale read window20000 ms
On timeoutUNVERIFIABLE (evidence_unavailable_before_timeout), escalated to a person

Where do these rules come from?

  • github.openapi#/paths/~1repos~1{owner}~1{repo}~1actions~1workflows~1{workflow_id}~1dispatches/post: github.openapi, retrieved 2026-09-08
  • github.openapi#/paths/~1repos~1{owner}~1{repo}~1actions~1workflows~1{workflow_id}~1dispatches/post/responses/200: github.openapi, retrieved 2026-09-08
  • github.openapi#/components/schemas/workflow-run/properties/status: github.openapi, retrieved 2026-09-08
  • github.openapi#/components/schemas/workflow-run/properties/conclusion: github.openapi, retrieved 2026-09-08
  • github.docs.workflows#workflow-runs/dispatch-a-workflow: github.docs.workflows, retrieved 2026-09-08
  • github.docs.workflows#workflow-runs/the-status-of-a-run: github.docs.workflows, retrieved 2026-09-08
  • github.docs.workflows#workflow-runs/the-conclusion-of-a-run: github.docs.workflows, retrieved 2026-09-08
  • github.openapi#/components/schemas/workflow-run/properties/head_branch: github.openapi, retrieved 2026-09-08
  • github.openapi#/components/schemas/workflow-run/properties/created_at: github.openapi, retrieved 2026-09-08
  • github.events#/events/workflow_run.completed: github.events, retrieved 2026-09-08
  • github.docs.workflows#workflow-runs/events: github.docs.workflows, retrieved 2026-09-08

Can github.workflow_run.succeeded return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read workflow_run_readback and workflow_run_completed_events.

What happens after the timeout?

The verdict is UNVERIFIABLE with the reason evidence_unavailable_before_timeout. The operation goes to a person for review.