Prove that the issue is assigned to the user that the person named. The issue carries the intended user as its assignee. It does not prove that the user did the work.

Contract identity.
FactValue
Contract idlinear.issue.assigned
Version1.0.0
Hashd35d1265e2f4b2ee
Completion levelassigned
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillLinear GraphQL API 0.1.0
Valid for provider API versionsfp_2026_09

What is the intent?

Assign the issue to this user.

What is the subject and the action?

MemberValue
Subject typelinear.issue
Subject identityissue_id = $action.result.issueCreate.issue.id
Canonical effectwork.issue_create
Provider operationmutation issueCreate
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongissue_id from $action.result.issueCreate.issue.idyes
fingerprintweakteam_id from $input.team_id; title from $input.titleno

Which evidence does the contract require?

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

ChannelLevelIndependenceVerifierDescription
issue_readbackE2provider readbackhttpRead the issue with its team, its workflow state, and its assignee. The http verifier returns the parsed GraphQL body. A path starts with $observed.<channel>.data, and $observed.<channel>.errors states a refusal.
issue_assignee_eventsE3provider eventwebhookThe Issue.update events of this issue that carry the user identifier of the intent as the assignee. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}.
issue_created_eventsE3provider eventwebhookThe Issue.create events for the intended title since the operation started. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. A count above one shows a second issue, and the API has no idempotency key to stop it.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
issue_readback_carries_no_errorsThe answer carries no errors array. Linear answers the status code 200 for an operation that succeeded in part, so the status code states nothing.$observed.issue_readback.errorsabsentundefinedissue_readback
issue_presentThe provider holds the issue with the returned identifier.$observed.issue_readback.data.issue.ideq$action.result.issueCreate.issue.idissue_readback
issue_team_matchesThe issue belongs to the team that the intent named.$observed.issue_readback.data.issue.team.ideq$input.team_idissue_readback
issue_created_in_windowThe provider created the issue after the operation started.$observed.issue_readback.data.issue.createdAttime_after$operation.created_atissue_readback
issue_assignee_matchesThe assignee of the issue is the user that the intent named.$observed.issue_readback.data.issue.assignee.ideq$input.assignee_idissue_readback
issue_assignee_eventAt least one Issue.update event of this issue carries the user identifier of the intent as the assignee.$observed.issue_assignee_events.countgte1issue_assignee_events

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
issue_on_wrong_teamwrong subjectThe issue belongs to a different team than the intent named.$observed.issue_readback.data.issue.team.idne$input.team_id
issue_predates_operationpre existing stateThe issue is older than the operation. It proves nothing.$observed.issue_readback.data.issue.createdAttime_before$operation.created_at
duplicate_issue_presentduplicate side effectLinear created more than one issue with this title since the operation started. Do not retry.$observed.issue_created_events.countgt1
issue_assigned_to_another_userwrong subjectThe issue carries another assignee than the intent named.$observed.issue_readback.data.issue.assignee.idne$input.assignee_id

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
issue_readback_refused$observed.issue_readback.errors exists undefinedUNVERIFIABLELinear answered the read with the status code 200 and an errors array. The answer is a refusal and it is no evidence.
issue_left_the_workflow_unassigned($observed.issue_readback.data.issue.state.type in ["canceled","duplicate"]) and (not ($observed.issue_readback.data.issue.assignee.id eq "$input.assignee_id"))CONTRADICTEDA person or an agent closed the issue, and it never carried the intended assignee. Ask a person.

How long does the runtime observe?

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

Where do these rules come from?

  • linear.graphql#/mutations/issueUpdate: linear.graphql, retrieved 2026-09-09
  • linear.graphql#/inputs/IssueUpdateInput/fields/assigneeId: linear.graphql, retrieved 2026-09-09
  • linear.graphql#/types/Issue/fields/assignee: linear.graphql, retrieved 2026-09-09
  • linear.docs.issues#issues-in-the-linear-graphql-api/update-an-issue: linear.docs.issues, retrieved 2026-09-09
  • linear.docs.issues#issues-in-the-linear-graphql-api/error-handling: linear.docs.issues, retrieved 2026-09-09
  • linear.docs.issues#issues-in-the-linear-graphql-api/error-handling/p2: linear.docs.issues, retrieved 2026-09-09
  • linear.docs.issues#issues-in-the-linear-graphql-api/the-endpoint: linear.docs.issues, retrieved 2026-09-09
  • linear.graphql#/queries/issue: linear.graphql, retrieved 2026-09-09
  • linear.graphql#/types/Issue/fields/id: linear.graphql, retrieved 2026-09-09
  • linear.graphql#/types/IssuePayload/fields/issue: linear.graphql, retrieved 2026-09-09
  • linear.graphql#/types/Issue/fields/team: linear.graphql, retrieved 2026-09-09
  • linear.graphql#/inputs/IssueCreateInput/fields/teamId: linear.graphql, retrieved 2026-09-09
  • linear.graphql#/types/Issue/fields/createdAt: linear.graphql, retrieved 2026-09-09
  • linear.graphql#/types/User/fields/id: linear.graphql, retrieved 2026-09-09
  • linear.events#/events/Issue.update: linear.events, retrieved 2026-09-09
  • linear.webhooks.graphql#/types/IssueWebhookPayload/fields/assigneeId: linear.webhooks.graphql, retrieved 2026-09-09
  • linear.docs.webhooks#linear-webhooks/the-fields-of-a-data-change-event: linear.docs.webhooks, retrieved 2026-09-09

Can linear.issue.assigned return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read issue_readback and issue_assignee_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.