Last reviewed 2026-09-05Skill version 0.1.0Provisional
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.
How does the evidence correlate with this operation?
Strategy
Assurance
Keys
Required
resource_id
strong
issue_id from $action.result.issueCreate.issue.id
yes
fingerprint
weak
team_id from $input.team_id; title from $input.title
no
Which evidence does the contract require?
Minimum evidence level E2. An independent channel is required. Minimum channels: 1.
Channel
Level
Independence
Verifier
Description
issue_readback
E2
provider readback
http
Read 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_events
E3
provider event
webhook
The 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_events
E3
provider event
webhook
The 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?
Condition
Meaning
Path
Operator
Expected
Evidence
issue_readback_carries_no_errors
The 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.errors
absent
undefined
issue_readback
issue_present
The provider holds the issue with the returned identifier.
$observed.issue_readback.data.issue.id
eq
$action.result.issueCreate.issue.id
issue_readback
issue_team_matches
The issue belongs to the team that the intent named.
$observed.issue_readback.data.issue.team.id
eq
$input.team_id
issue_readback
issue_created_in_window
The provider created the issue after the operation started.
$observed.issue_readback.data.issue.createdAt
time_after
$operation.created_at
issue_readback
issue_assignee_matches
The assignee of the issue is the user that the intent named.
$observed.issue_readback.data.issue.assignee.id
eq
$input.assignee_id
issue_readback
issue_assignee_event
At least one Issue.update event of this issue carries the user identifier of the intent as the assignee.
$observed.issue_assignee_events.count
gte
1
issue_assignee_events
Which conditions give CONTRADICTED?
Condition
Class
Reason
Path
Operator
Expected
issue_on_wrong_team
wrong subject
The issue belongs to a different team than the intent named.
$observed.issue_readback.data.issue.team.id
ne
$input.team_id
issue_predates_operation
pre existing state
The issue is older than the operation. It proves nothing.
$observed.issue_readback.data.issue.createdAt
time_before
$operation.created_at
duplicate_issue_present
duplicate side effect
Linear created more than one issue with this title since the operation started. Do not retry.
$observed.issue_created_events.count
gt
1
issue_assigned_to_another_user
wrong subject
The issue carries another assignee than the intent named.
$observed.issue_readback.data.issue.assignee.id
ne
$input.assignee_id
Which observed states map to a verdict before completion?
Rule
Match
Verdict
Reason
issue_readback_refused
$observed.issue_readback.errors exists undefined
UNVERIFIABLE
Linear 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"))
CONTRADICTED
A person or an agent closed the issue, and it never carried the intended assignee. Ask a person.
How long does the runtime observe?
Timing member
Value
Initial delay
1000 ms
Poll interval
5000 ms
Backoff
exponential factor 2, max 60000 ms
Maximum attempts
40
Timeout
604800000 ms
Stale read window
20000 ms
On timeout
UNVERIFIABLE (evidence_unavailable_before_timeout), escalated to a person