No. GitHub REST API returns a 201 response with a pull request object when it accepts the request. The pull_request then holds one of 3 states. Only merged is terminal success. Provely proves merged, open and succeeded as separate promises.

Skill facts from the signed manifest.
FactValue
Skill version0.1.0
CertificationCommunity (score 49 of 100)
Last conformance run2026-09-05T12:00:00Z: 40 of 40 cases passed, 0 critical false VERIFIED
Provider API versions2022-11-28
Default provider API version2022-11-28
Compiled2026-09-05T12:00:00Z by compiler 0.1.0
Manifest hash95ac993a38f73459
Manifest hash checkthe document hashes to the value the manifest states
Signaturevalid, key provely-skill-2026-09, trusted by this build

What does this page prove?

ClaimProven byEvidenceStatus
A closed pull request is not a merged one, and merge_commit_sha holds a test merge commit while the pull request is open.github.pull_request.mergedE2 + E3proven
The record exists with the intended head branch and base branch. It does not prove that the commits reached the base branch.github.pull_request.openE2 + E3proven
A completed run is not a successful run. The contract reads the conclusion of the run and an event that carries it.github.workflow_run.succeededE2 + E3proven
An outcome outside GitHub REST API, such as a bank credit or a person who read a messagenot provenno E5 channelnot proven
The meaning of the neutral state of github.workflow_runREQUIRES_REVIEWunknown semanticsnot proven
The meaning of the skipped state of github.workflow_runREQUIRES_REVIEWunknown semanticsnot proven
The meaning of the stale state of github.workflow_runREQUIRES_REVIEWunknown semanticsnot proven
The meaning of the action_required state of github.workflow_runREQUIRES_REVIEWunknown semanticsnot proven
The agent report that the action workednever countsE0not proven

Which completion levels does the GitHub REST API skill expose?

Each level is one promise with one contract. An agent picks the level that matches the promise it makes. It cannot upgrade a level. Read the completion level definition.

LevelContractPromiseEvidenceCertification
mergedgithub.pull_request.merged v1.0.0A closed pull request is not a merged one, and merge_commit_sha holds a test merge commit while the pull request is open.E2 + E3Community
opengithub.pull_request.open v1.0.0The record exists with the intended head branch and base branch. It does not prove that the commits reached the base branch.E2 + E3Community
succeededgithub.workflow_run.succeeded v1.0.0A completed run is not a successful run. The contract reads the conclusion of the run and an event that carries it.E2 + E3Community

What is the GitHub REST API lifecycle?

Which states can a github.pull_request be in?

StateClassVerdictMeaningSource
opentransitionalPENDINGThe pull request is open. The commits are not in the base branch.github.openapi
mergedterminal successVERIFIEDGitHub put the commits of the head branch into the base branch. The member state is closed and the member merged is true.github.openapi
closedterminal neutralFAILEDA person or an agent closed the pull request and merged nothing. The member state is closed and the member merged is false.github.openapi

In github.pull_request under provider API version 2022-11-28, merged is the only state that means terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.

Source: github.openapi · retrieved 2026-09-08

Which states can a github.workflow_run be in?

StateClassVerdictMeaningSource
queuedtransitionalPENDINGGitHub accepted the dispatch. No job of the run started.github.openapi
in_progresstransitionalPENDINGA job of the run is running.github.openapi
successterminal successVERIFIEDThe run is complete. The member status is completed and the member conclusion is success.github.openapi
failureterminal failureFAILEDThe run is complete and a job of it failed.github.openapi
timed_outterminal failureFAILEDThe run passed its time limit.github.openapi
startup_failureterminal failureFAILEDGitHub could not start the run. The workflow file is not valid.github.openapi
cancelledterminal neutralFAILEDA person or an agent cancelled the run. No work finished.github.openapi
neutralunknownUNVERIFIABLEThe published schema lists this conclusion. No source states what it means for the work of the run.github.openapi
skippedunknownUNVERIFIABLEThe published schema lists this conclusion. No source states what it means for the work of the run.github.openapi
staleunknownUNVERIFIABLEThe published schema lists this conclusion. No source states what it means for the work of the run.github.openapi
action_requiredunknownUNVERIFIABLEThe published schema lists this conclusion. No source states what it means for the work of the run.github.openapi

In github.workflow_run under provider API version 2022-11-28, success is the only state that means terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.

Source: github.openapi · retrieved 2026-09-08

How does Provely tie the evidence to this exact operation?

A matching state that already existed must not verify. Every contract names the correlation keys that bind the evidence to the operation, and the idempotency key that stops a duplicate side effect.

StrategyAssuranceKeysRequiredWindow
resource_idstrongpull_request_number from $action.result.numberyesnone
fingerprintweakhead from $input.head; base from $input.baseno600000 ms
resource_idstrongworkflow_run_id from $action.result.workflow_run_idyesnone
fingerprintweakworkflow_id from $input.workflow_id; ref from $input.refno600000 ms
The skill reads the channels below. It prefers the ones furthest from the action.
In words
  • E0 agent assertion: never sufficient.
  • E1 action response: the provider acknowledged the request.
  • E2 provider readback: the runtime read the resource back.
  • E3 provider event: the provider reported the change.
  • E4 independent system: a system outside the action path agrees.
  • E5 external outcome: the result is observable in the world.

Which evidence channels does the skill read?

The runtime prefers the channel that is more independent from the action path. Read the evidence level definition. An acknowledgement from GitHub REST API is E1 and never terminal success.

ChannelLevelIndependenceVerifierDeterministicTypical latency
pull_request_action_responseE1same responseaction_resultyesnot stated
pull_request_merged_eventsE3provider eventwebhookno3000 ms
pull_request_opened_eventsE3provider eventwebhookno3000 ms
pull_request_readbackE2provider readbackhttpyes300 ms
workflow_run_completed_eventsE3provider eventwebhookno5000 ms
workflow_run_readbackE2provider readbackhttpyes300 ms
workflow_run_requested_eventsE3provider eventwebhookno3000 ms

Which ways can a GitHub REST API action look done and not be?

ContractCaseRuleVerdict
github.pull_request.mergedwrong subjectThe pull request targets a different base branch than the intent named.CONTRADICTED
github.pull_request.mergedwrong subjectThe pull request carries a different head branch than the intent named.CONTRADICTED
github.pull_request.mergedpre existing stateThe pull request is older than the operation. It proves nothing.CONTRADICTED
github.pull_request.mergedduplicate side effectGitHub opened more than one pull request for the head branch since the operation started. Do not retry.CONTRADICTED
github.pull_request.mergedobserved stateThe pull request is still open. The runtime observes again later.PENDING
github.pull_request.openwrong subjectThe pull request targets a different base branch than the intent named.CONTRADICTED
github.pull_request.openwrong subjectThe pull request carries a different head branch than the intent named.CONTRADICTED
github.pull_request.openpre existing stateThe pull request is older than the operation. It proves nothing.CONTRADICTED
github.pull_request.openduplicate side effectGitHub opened more than one pull request for the head branch since the operation started. Do not retry.CONTRADICTED
github.workflow_run.succeededwrong subjectThe workflow run used a different reference than the intent named.CONTRADICTED
github.workflow_run.succeededotherThe run started from another event. It is not the run of this dispatch.CONTRADICTED
github.workflow_run.succeededpre existing stateThe workflow run is older than the operation. It proves nothing.CONTRADICTED
github.workflow_run.succeededduplicate side effectGitHub started more than one run for the reference since the operation started. Do not retry.CONTRADICTED
github.workflow_run.succeededobserved stateThe run is complete and a job of it failed.FAILED
github.workflow_run.succeededobserved stateA person or an agent cancelled the run. No work finished.CONTRADICTED
github.workflow_run.succeededobserved stateThe run has not finished. The runtime observes again later.PENDING

What did the last conformance run show?

The six confidence dimensions of the signed manifest.
DimensionScoreMaximum
Documentation1420
Schema alignment1215
Lifecycle certainty14.2920
Evidence strength1620
Causal correlation1515
Sandbox conformance1010
Raw score81.29100
Score after the caps49100

The raw score is 81.29. 3 hard caps apply, so the score is 49 and the level is Community.

The hard caps the compiler applied.
GateCapReason
unknown_terminal_semantics49A lifecycle state has unknown semantics. The compiler cannot prove the end state.
uncertainty_caps496 uncertainty records are open. The lowest cap is 49.
test_coverage742 mandatory cases are missing. Example: github.pull_request.merged:terminal_failure.
The score and the level of each contract.
ContractRaw scoreScore after the capsCertification
github.pull_request.merged86.6749Community
github.pull_request.open86.6749Community
github.workflow_run.succeeded80.2349Community

The weakest contract is github.pull_request.merged. It scores 49 and reaches Community. The package level is Community, because a package level never rises above its weakest contract. Read the level of the contract you use.

The last conformance run on 2026-09-05T12:00:00Z passed 40 of 40 cases with 0 critical false VERIFIED. One critical false VERIFIED rejects a skill.

The conformance result by case class.
Case classPassedTotal
duplicate side effect33
error after execution33
error before execution33
evidence unavailable33
pre existing state33
stale readback33
still transitional33
terminal failure11
terminal success33
timeout after commit33
version mismatch33
webhook duplicate33
webhook out of order33
wrong subject33

The conformance artifact digest is 97d8af9b9e996794. The harness signs the run, so a reader can check that these numbers come from that run.

What remains uncertain?

Open questions remain. A lifecycle state has unknown semantics. The compiler cannot prove the end state. 6 uncertainty records are open. The lowest cap is 49. The published manifest states the cap and its reason. The questions themselves stay in the compiler review bundle, which no customer receives.

This is why the level is Community and not higher. Unknown means unknown. The compiler does not infer an undocumented rule.

Where do these facts come from?

Every claim above cites a source assertion in the skill provenance. The compiler records the source, its hash, and the retrieval date. A page never states a provider rule without one.

SourceKindRetrievedExcerpt
github.docs.pullsdocs2026-09-08authored
github.docs.versionsdocs2026-09-08authored
github.docs.webhooksdocs2026-09-08authored
github.docs.workflowsdocs2026-09-08authored
github.eventsevent sample2026-09-08authored
github.openapiopenapi2026-09-08trimmed

How do I verify a GitHub REST API action?

Verify a GitHub REST API action with Provely

  1. Begin the operation.Call begin with the contract github.pull_request.merged and the input. Keep the operation id.
  2. Make the GitHub REST API call you make today.Send the request with the correlation metadata that begin returned.
  3. Submit the acknowledgement.Call action_result with the GitHub REST API response. This is evidence level E1. It is not completion.
  4. Verify.Call verify. The runtime reads pull_request_action_response, pull_request_merged_events, pull_request_opened_events, pull_request_readback, workflow_run_completed_events, workflow_run_readback and workflow_run_requested_events and evaluates the contract.
  5. Report the verdict exactly as returned.VERIFIED comes with a signed receipt. PENDING comes with the operation id. CONTRADICTED and UNVERIFIABLE are not success.

Questions developers ask

Does the merged level prove the succeeded level?

No. A closed pull request is not a merged one, and merge_commit_sha holds a test merge commit while the pull request is open. A completed run is not a successful run. The contract reads the conclusion of the run and an event that carries it. Use github.workflow_run.succeeded to prove succeeded.

What does the agent say while GitHub REST API reports open?

It says: "The action is accepted but not yet verified. Operation: <id>." The verdict is PENDING. The runtime observes again on the contract timing policy.

Which GitHub REST API API versions does the skill support?

2022-11-28. An operation on another version returns UNVERIFIABLE with the reason version_unsupported. The runtime never guesses.

Does Provely need write access to GitHub REST API?

No. The agent keeps its write key. The verifier reads with a separate read-only credential where GitHub REST API permits it, and it never shares that credential with the agent.