Last reviewed 2026-09-05Skill version 0.1.0Provisional
Prove that Linear holds this issue on the intended team. The record exists with the intended title. It does not prove the workflow state, and it does not prove the assignee.
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_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_title_matches
The title of the issue equals the requested title.
$observed.issue_readback.data.issue.title
eq
$input.title
issue_readback
issue_created_event
At least one Issue.create event names the title of this issue. The duplicate guard reads the same channel, so a workspace with no webhook cannot verify and cannot miss a second issue either.
$observed.issue_created_events.count
gte
1
issue_created_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_title_differs
wrong subject
The issue carries a different title than the intent named.
$observed.issue_readback.data.issue.title
ne
$input.title
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
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.
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
900000 ms
Stale read window
20000 ms
On timeout
UNVERIFIABLE (evidence_unavailable_before_timeout), escalated to a person