stablyai/orca · error · LinearWriteFailure

unconfirmed

unconfirmed

Error message

Issue was created but could not be retrieved

What it means

Thrown after createIssue succeeded (success===true) but the returned result.issue promise resolved to a value with no id, wrapped by confirmLinearWrite. Kind is 'unconfirmed', meaning the issue likely exists on Linear but the create response did not yield a usable handle.

Source

Thrown at src/main/linear/issues.ts:1204

      ...(description ? { description } : {}),
      ...(options.parentId ? { parentId: options.parentId } : {}),
      ...(options.projectId ? { projectId: options.projectId } : {}),
      ...(options.stateId ? { stateId: options.stateId } : {}),
      ...(options.assigneeId !== undefined ? { assigneeId: options.assigneeId } : {}),
      ...(options.priority !== undefined ? { priority: options.priority } : {}),
      ...(options.estimate !== undefined ? { estimate: options.estimate } : {}),
      ...(options.dueDate !== undefined ? { dueDate: options.dueDate } : {}),
      ...(options.labelIds !== undefined ? { labelIds: options.labelIds } : {})
    })
    if (!result.success) {
      throw new LinearWriteFailure('failed', 'Linear create failed')
    }
    const issue = await confirmLinearWrite(
      'Issue was created but could not be retrieved',
      async () => result.issue
    )
    if (!issue?.id) {
      throw new LinearWriteFailure('unconfirmed', 'Issue was created but could not be retrieved')
    }
    return confirmLinearWrite('Issue was created but could not be retrieved', () =>
      getCreatedIssueRecord(issue.id, client)
    )
  })
}

async function getCreatedIssueRecord(
  issueId: string,
  client: LinearClient
): Promise<LinearIssueWriteRecord> {
  const result = await client.client.rawRequest<LinearIssueByUuidResponse, LinearRawVariables>(
    ISSUE_BY_UUID_QUERY,
    { id: issueId }
  )
  const record = result.data?.issue ?? null
  if (!record) {
    throw new LinearWriteFailure('unconfirmed', 'Issue was created but could not be retrieved')

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Treat as created-but-unconfirmed: query getCreatedIssueRecord by any returned id or list newest issues to locate it before reporting failure.
  2. Upgrade/reload the Linear SDK and retry the readback only.
  3. Avoid double-creating; search by title/team before issuing another create.

Example fix

// before
const rec = await createIssueForAgent(teamId, { title }, workspaceId)
// after
try {
  return await createIssueForAgent(teamId, { title }, workspaceId)
} catch (e) {
  if (e instanceof LinearWriteFailure && e.kind === 'unconfirmed') {
    return await recoverByListingNewest(teamId)
  }
  throw e
}
Defensive patterns

Strategy: retry

Type guard

function isUnconfirmed(e: unknown): boolean {
  return e instanceof LinearWriteFailure && e.kind === 'unconfirmed'
}

Try / catch

try { return await createIssueForAgent(teamId, opts, workspaceId, { signal }) }
catch (e) {
  if (isUnconfirmed(e)) return await recoverNewestIssue(teamId, opts.title, workspaceId)
  throw e
}

Prevention

When it happens

Trigger: Linear's createIssue reported success yet the issue payload was null/undefined or lacked an id field; transient SDK serialization issue.

Common situations: Eventual-consistency or partial payload from Linear; an SDK version that does not eagerly hydrate the issue node.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/b8ab2269b827ac30. Report an issue: GitHub.