From cbb498bc4ade49fabc6c6ff06f2423a151bb9a86 Mon Sep 17 00:00:00 2001 From: Daniel Wise Date: Fri, 8 May 2026 21:25:44 -0700 Subject: [PATCH 1/2] Add issue hierarchy metadata --- packages/linear-core/src/entities/linear-gateway.ts | 3 +++ packages/linear-core/src/entities/models.ts | 3 +++ packages/linear-core/tests/v2-gateway.test.ts | 3 +++ 3 files changed, 9 insertions(+) diff --git a/packages/linear-core/src/entities/linear-gateway.ts b/packages/linear-core/src/entities/linear-gateway.ts index 0c3d0f6..52bfe49 100644 --- a/packages/linear-core/src/entities/linear-gateway.ts +++ b/packages/linear-core/src/entities/linear-gateway.ts @@ -153,10 +153,13 @@ async function toIssue(record: SdkIssueLike): Promise { milestoneName: milestone?.name, parentId: record.parentId ?? undefined, parentIdentifier: parent?.identifier, + parentTitle: parent?.title, labelNames: labels .map((label) => label.name) .filter((value): value is string => typeof value === "string"), childCount: children.length, + childrenCount: children.length, + hasChildren: children.length > 0, relationCount: relations.length, url: record.url, createdAt: toDateString(record.createdAt), diff --git a/packages/linear-core/src/entities/models.ts b/packages/linear-core/src/entities/models.ts index 20e522f..c76a813 100644 --- a/packages/linear-core/src/entities/models.ts +++ b/packages/linear-core/src/entities/models.ts @@ -22,8 +22,11 @@ export interface IssueRecord { readonly milestoneName?: string; readonly parentId?: string; readonly parentIdentifier?: string; + readonly parentTitle?: string; readonly labelNames?: readonly string[]; readonly childCount?: number; + readonly childrenCount?: number; + readonly hasChildren?: boolean; readonly relationCount?: number; readonly url: string; readonly createdAt: string; diff --git a/packages/linear-core/tests/v2-gateway.test.ts b/packages/linear-core/tests/v2-gateway.test.ts index bd2ca3e..0e24c1f 100644 --- a/packages/linear-core/tests/v2-gateway.test.ts +++ b/packages/linear-core/tests/v2-gateway.test.ts @@ -358,8 +358,11 @@ describe("LinearGateway v2", () => { expect(issue.teamKey).toBe("ENG"); expect(issue.milestoneName).toBe("Beta"); expect(issue.parentIdentifier).toBe("ENG-0"); + expect(issue.parentTitle).toBe("Parent issue"); expect(issue.labelNames).toEqual(["Bug"]); expect(issue.childCount).toBe(1); + expect(issue.childrenCount).toBe(1); + expect(issue.hasChildren).toBe(true); expect(issue.relationCount).toBe(1); expect(issue.estimate).toBe(3); expect(issue.dueDate).toBe("2026-04-01"); From 467295692bb03c5b4f769d0216f27fb67b8958d9 Mon Sep 17 00:00:00 2001 From: Daniel Wise Date: Fri, 8 May 2026 21:31:11 -0700 Subject: [PATCH 2/2] refactor(linear-core): hoist childrenCount in toIssue Avoid recomputing children.length three times; keep childCount/childrenCount/hasChildren from drifting. --- packages/linear-core/src/entities/linear-gateway.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/linear-core/src/entities/linear-gateway.ts b/packages/linear-core/src/entities/linear-gateway.ts index 52bfe49..7f5b516 100644 --- a/packages/linear-core/src/entities/linear-gateway.ts +++ b/packages/linear-core/src/entities/linear-gateway.ts @@ -129,6 +129,8 @@ async function toIssue(record: SdkIssueLike): Promise { ), ]); + const childrenCount = children.length; + return { id: record.id, number: record.number, @@ -157,9 +159,9 @@ async function toIssue(record: SdkIssueLike): Promise { labelNames: labels .map((label) => label.name) .filter((value): value is string => typeof value === "string"), - childCount: children.length, - childrenCount: children.length, - hasChildren: children.length > 0, + childCount: childrenCount, + childrenCount, + hasChildren: childrenCount > 0, relationCount: relations.length, url: record.url, createdAt: toDateString(record.createdAt),