Conversation
Add GitHub Actions workflow for automated PR assistance using Claude. This workflow provides intelligent PR reviews and suggestions. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add GitHub Actions workflow for automated code reviews using Claude. This workflow analyzes code changes and provides detailed feedback. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add concurrency configuration to the Claude code review workflow to manage simultaneous runs and cancel in-progress jobs for pull requests.
Changes GetIssueById and GetIssueByIdentifier to use CompleteIssueWithCommentsFields fragment instead of CompleteIssueFields, restoring comment data that was inadvertently removed during the GraphQL file migration. This fixes a data regression where reading issues by ID or identifier would no longer return comment data as expected. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Creates query loader modules in src/queries/ that read GraphQL operations from .graphql files and export them as string constants. This bridges the gap between the new .graphql file structure and existing service imports. The loaders: - Read .graphql files at runtime using Node.js fs module - Extract individual operations with fragment dependencies - Export query/mutation strings with the same names services expect - Enable existing code to work without modification Fixes TypeScript compilation errors where services imported from deleted src/queries/*.ts files. Services now successfully import from the new loader modules which dynamically load from graphql/queries/ and graphql/mutations/ directories. Files added: - src/queries/issues.ts - src/queries/documents.ts - src/queries/attachments.ts - src/queries/project-milestones.ts Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Updates AGENTS.md (CLAUDE.md) to reflect the new GraphQL architecture: - Documents the dual structure of graphql/ directory (source .graphql files) and src/queries/ (runtime query loaders) - Updates "Query Definitions" section to explain both components - Rewrites "Adding GraphQL Queries" workflow to document the new process: 1. Define operations in .graphql files 2. Run npm run generate for codegen 3. Query loaders automatically extract operations - Changes references from src/queries/common.ts to graphql/queries/issues.graphql - Explains the separation between human-written .graphql files and generated TypeScript types in src/gql/ Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add type aliases for GraphQL query/mutation return types to improve readability in method signatures. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Return raw codegen types directly instead of transforming to manual types. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Return union type of raw codegen types instead of transforming. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Return raw codegen type directly. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Return raw codegen type directly. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Use QuerySearchIssuesArgs instead of full query type. Remove transformation. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Delete transformIssueData and doTransformIssueData - no longer needed since services return raw codegen types. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Line 166 referenced undefined variable 'id' instead of 'input.id'. This caused a ReferenceError when resolving non-UUID issue identifiers. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Line 572 referenced non-existent 'input.milestoneId' instead of 'input.projectMilestoneId'. This would show 'undefined' in error messages when milestone resolution fails. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Lines 670-677 spread entire searchArgs object into GraphQL variables, but SearchIssues query only accepts 'term' and 'first' parameters. This caused GraphQL validation errors when extra properties like 'limit' were passed through. Now destructures only 'term' from searchArgs and passes it explicitly along with 'first' parameter. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Pass QuerySearchIssuesArgs fields directly instead of wrong type. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Ensure parameters match IssueUpdateInput type from codegen. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add type aliases, remove transformations, return raw GraphQL types. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add type aliases, remove transformations, return raw GraphQL types. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Define CycleListOptions and CycleReadOptions locally. Replace LinearCycle with codegen type alias. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add missing option interfaces (MilestoneListOptions, MilestoneReadOptions, MilestoneCreateOptions, MilestoneUpdateOptions) and replace LinearProjectMilestone with ProjectMilestoneUpdateInput from codegen. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Delete linear-types.d.ts - all types now generated from GraphQL schema via codegen. - Add type aliases in linear-service.ts for LinearLabel, LinearComment, and CreateCommentArgs - Replace LinearProject with inline type definition - Fix bug in graphql-issues-service.ts: use input.projectMilestoneId instead of input.milestoneId - Remove dead code for milestone fallback lookup Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Consolidates duplicate regex loops in embed-parser, simplifies URL parsing, and removes redundant documentation comments. Co-Authored-By: Claude Opus 4.6 <[email protected]>
Extracts shared SOURCE_LABELS constant in auth, inlines arrow functions, uses ternary for optional ID resolution, and removes unused ErrorResponse interface. Co-Authored-By: Claude Opus 4.6 <[email protected]>
Co-Authored-By: Claude Opus 4.6 <[email protected]>
refactor: remove verbose JSDoc and simplify codebase
feat!: complete architecture redesign with GraphQL codegen, auth system, and developer tooling
Resolves user identifiers (display name, email, or UUID) to UUIDs via the Linear SDK, following the same pattern as existing resolvers. Lookup order: UUID passthrough → display name (case-insensitive) → email (case-insensitive). Throws multipleMatchesError when name is ambiguous, notFoundError when no match exists. Closes #47 Co-Authored-By: claude-opus-4-6 <[email protected]>
The --assignee option was passed directly to assigneeId without resolution, causing GraphQL validation errors when given a name or email instead of a UUID. Wire both create and update through the new resolveUserId resolver. Closes #47 Co-Authored-By: claude-opus-4-6 <[email protected]>
Add command-level tests that drive the CLI through Commander and verify resolveUserId is called with the correct input and its result flows into the service layer. Covers create with name, create with email, update with name, and omitted-assignee cases. Co-Authored-By: claude-opus-4-6 <[email protected]>
fix(commands): resolve --assignee to UUID in issues create/update
Add $after variable and pageInfo { hasNextPage endCursor } selection
to all 10 list queries for cursor-based pagination support.
Add PageInfo, PaginatedResult<T>, and PaginationOptions types to
src/common/types.ts.
Co-Authored-By: claude-opus-4-6 <[email protected]>
Accept PaginationOptions with optional after cursor. Return
{ nodes, pageInfo } instead of flat arrays.
Co-Authored-By: claude-opus-4-6 <[email protected]>
…nt services Co-Authored-By: claude-opus-4-6 <[email protected]>
Wire all list commands to updated service signatures that accept PaginationOptions and return PaginatedResult. Co-Authored-By: claude-opus-4-6 <[email protected]>
Local filtering makes server pageInfo misleading. Set hasNextPage to false since cursor pagination is incompatible with --window. Co-Authored-By: claude-opus-4-6 <[email protected]>
…ases Fix existing tests for new PaginationOptions signatures and PaginatedResult return types. Add cursor passthrough and pageInfo assertions. Co-Authored-By: claude-opus-4-6 <[email protected]>
…ct --window with --after
Ensure documents list --issue returns { nodes, pageInfo } like all
other list commands. Prevent --after with --window in cycles since
local filtering is incompatible with cursor pagination.
Co-Authored-By: claude-opus-4-6 <[email protected]>
Ties PageInfo to the GraphQL schema instead of maintaining a separate interface that could drift from the generated types. Co-Authored-By: claude-opus-4-6 <[email protected]>
…dation Replace 9 unvalidated parseInt calls across 7 command files with a shared parseLimit() that rejects NaN and non-positive values. Co-Authored-By: claude-opus-4-6 <[email protected]>
…stone services Cover all public functions with happy path and error cases. Include pagination-specific assertions for all list functions. Co-Authored-By: claude-opus-4-6 <[email protected]>
Cover createComment with success and failure cases. Cover FileService download and upload with happy paths and error conditions. Co-Authored-By: claude-opus-4-6 <[email protected]>
feat(pagination): add cursor-based pagination to all list commands
Introduced a new skill for crafting effective README files, including various templates for open source, personal, internal projects, and configuration directories. Added a section checklist for project types and style guide to enhance documentation quality. New files include: - section-checklist.md - SKILL.md - style-guide.md - using-references.md - multiple reference documents - templates for different project types This skill aims to provide comprehensive guidance for creating informative and user-friendly README files.
Update all command examples to match renamed commands (files, --label-mode, --window, --issue, --query). Add missing features: issue relations, milestones, cursor pagination. Expand LLM agent section with discover-then-act workflow, MCP comparison table, and optimized example prompt. Add maintainer section for Fabian Jocks alongside original author Carlo Zottmann. Co-Authored-By: claude-opus-4-6 <[email protected]>
docs: rewrite README for current CLI surface and agent optimization
Collaborator
Author
|
Feedback from meeting with @czottmann :
|
iamfj
commented
Feb 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
214 files changed | +23,877 | -38,394 (net reduction of ~14.5k lines)
This release is a comprehensive overhaul: new architecture, new features, new tooling, and streamlined developer experience. Every layer of the codebase has been touched.
Changes by Category
Architecture — Five-Layer Redesign
The entire source tree was reorganized from a flat
utils/directory into a strict five-layer architecture with enforced separation of concerns:src/client/src/resolvers/LinearSdkClientsrc/services/GraphQLClientsrc/commands/createContext()src/common/Key rules enforced: ID resolution happens exactly once in resolvers; services accept only UUIDs; commands are thin orchestrators.
GraphQL Codegen Migration
Replaced all manually maintained TypeScript type definitions and runtime GraphQL string loading with
graphql-codegen. Everyclient.request<T>()call is now fully typed from codegen output..graphqlfilesFeatures
Authentication System
Full
linearis authcommand group with interactive login, encrypted AES-256-GCM token storage, token validation viaGetViewerquery, and structured auth error detection. Backwards-compatible with env var and legacy plaintext file.Issue Relations
New
issue-relation-servicewith create/find/delete operations. Relation flags (--blocks,--blocked-by,--related,--duplicate) on bothissues createandissues update.Cursor-Based Pagination
All list commands now support cursor-based pagination via
--after <cursor>and--limit <n>. Service layer returnsPaginatedResult<T>withpageInfocontainingendCursorandhasNextPage. Includes per-service tests for pagination behavior.Assignee ID Resolution
--assigneenow accepts human-readable names and emails in addition to UUIDs. NewresolveUserIdresolver handles the lookup.Two-Tier Usage System
Token-optimized usage output designed for LLM agents. Tier 1 overview (~200 tokens) and Tier 2 domain detail (~300-500 tokens).
USAGE.mdauto-generated on every build.src/queriesruntime loadersDeveloper Tooling
Documentation & Agent Instructions
Upstream Issues Addressed
--assigneefails with name instead of UUID → resolved by fix(commands): resolve --assignee to UUID in issues create/update #50Open Issues (tracked, not yet resolved)
These are known but not addressed in this release:
$projectIdof required typeString!was not provided #46 —milestones createfails with$projectIdnot provideddocs/plans/*.mdfiles before merge #51 — Add guard job to rejectdocs/plans/*.mdbefore mergeBreaking Changes
project-milestones→milestones,embeds→files--issues-first→--limit)searchsubcommands merged intolistwith filter flagssrc/(relevant for contributors)All Included PRs (chronological)
Merge Checklist