# llmlint: ignore-file[contracts_have_one_source_or_a_drift_gate] Linear exposes its schema only through an authenticated, unversioned explorer, so an authoritative automated freshness check would require the credential that this repository's explicitly non-required live lane must skip when absent; this documentation-derived subset pins the acceptance criterion's recorded 2026-08-24 contract instead.
# Documentation-derived Linear GraphQL schema subset, pinned 2026-08-24, with
# `projectDelete` re-observed and pinned 2026-08-29 from the same published schema.
# Only the read/write contract exercised by this plugin is retained.
type Query {
viewer: User!
issue(id: String!): Issue
issues(first: Int!, after: String, filter: IssueFilter): IssueConnection!
project(id: String!): Project
projects(first: Int!, after: String, filter: ProjectFilter): ProjectConnection!
issueLabels(first: Int, after: String, filter: IssueLabelFilter): IssueLabelConnection!
projectLabels(filter: ProjectLabelFilter): ProjectLabelConnection!
teams(filter: TeamFilter): TeamConnection!
workflowStates(filter: WorkflowStateFilter): WorkflowStateConnection!
projectStatuses(filter: ProjectStatusFilter): ProjectStatusConnection!
}
type Mutation {
issueCreate(input: IssueCreateInput!): IssuePayload!
issueUpdate(id: String!, input: IssueUpdateInput!): IssuePayload!
projectCreate(input: ProjectCreateInput!): ProjectPayload!
projectUpdate(id: String!, input: ProjectUpdateInput!): ProjectPayload!
issueRelationCreate(input: IssueRelationCreateInput!): IssueRelationPayload!
projectRelationCreate(input: ProjectRelationCreateInput!): ProjectRelationPayload!
issueRelationDelete(id: String!): DeletePayload!
projectRelationDelete(id: String!): DeletePayload!
issueDelete(id: String!): DeletePayload!
projectDelete(id: String!): ProjectArchivePayload!
}
type User {
id: ID!
}
type Issue {
id: ID!
title: String!
description: String
url: String
createdAt: DateTime
updatedAt: DateTime
state: WorkflowState!
labels: IssueLabelConnection!
project: Project
relations(first: Int!, after: String): IssueRelationConnection!
inverseRelations(first: Int!, after: String): IssueRelationConnection!
}
type Project {
id: ID!
name: String!
description: String
url: String
createdAt: DateTime
updatedAt: DateTime
status: ProjectStatus!
labels: ProjectLabelConnection!
relations(first: Int!, after: String): ProjectRelationConnection!
inverseRelations(first: Int!, after: String): ProjectRelationConnection!
}
type WorkflowState {
id: ID!
name: String!
type: String!
}
type ProjectStatus {
id: ID!
name: String!
type: String!
}
type IssueLabel {
id: ID!
name: String!
color: String
}
type ProjectLabel {
id: ID!
name: String!
color: String
}
type IssueConnection {
nodes: [Issue!]!
pageInfo: PageInfo!
}
type ProjectConnection {
nodes: [Project!]!
pageInfo: PageInfo!
}
type IssueLabelConnection {
nodes: [IssueLabel!]!
pageInfo: PageInfo!
}
type ProjectLabelConnection {
nodes: [ProjectLabel!]!
pageInfo: PageInfo!
}
type IssueRelationConnection {
nodes: [IssueRelation!]!
pageInfo: PageInfo!
}
type ProjectRelationConnection {
nodes: [ProjectRelation!]!
pageInfo: PageInfo!
}
type IssueRelation {
id: ID!
type: String!
issue: Issue
relatedIssue: Issue
}
type ProjectRelation {
id: ID!
type: String!
project: Project
relatedProject: Project
}
type Team {
id: ID!
}
type TeamConnection {
nodes: [Team!]!
}
type WorkflowStateConnection {
nodes: [WorkflowState!]!
}
type ProjectStatusConnection {
nodes: [ProjectStatus!]!
}
type IssuePayload {
success: Boolean!
issue: Issue
}
type ProjectPayload {
success: Boolean!
project: Project
}
type IssueRelationPayload {
success: Boolean!
issueRelation: IssueRelation
}
type ProjectRelationPayload {
success: Boolean!
projectRelation: ProjectRelation
}
type DeletePayload {
success: Boolean!
}
type ProjectArchivePayload {
success: Boolean!
}
type PageInfo {
hasNextPage: Boolean!
endCursor: String
}
input IssueFilter {
and: [IssueFilter!]
}
input ProjectFilter {
and: [ProjectFilter!]
}
input TeamFilter {
key: StringComparator
}
input WorkflowStateFilter {
name: StringComparator
team: IdComparator
}
input ProjectStatusFilter {
name: StringComparator
}
input ProjectLabelFilter {
name: StringComparator
}
input IssueLabelFilter {
name: StringComparator
}
input StringComparator {
eqIgnoreCase: String
}
input IdComparator {
id: IdEquality
}
input IdEquality {
eq: String
}
input IssueCreateInput {
teamId: String!
title: String!
description: String
stateId: String!
labelIds: [String!]!
projectId: String
}
input IssueUpdateInput {
title: String!
description: String
stateId: String!
labelIds: [String!]!
projectId: String
}
input ProjectCreateInput {
teamIds: [String!]!
name: String!
description: String
statusId: String!
labelIds: [String!]!
}
input ProjectUpdateInput {
name: String!
description: String
statusId: String!
labelIds: [String!]!
}
input IssueRelationCreateInput {
issueId: String!
relatedIssueId: String!
type: String!
}
input ProjectRelationCreateInput {
projectId: String!
relatedProjectId: String!
type: String!
}
scalar DateTime