Skip to content

Commit ddcb74d

Browse files
committed
fix: improve milestone name resolution and project scoping
- Enhance resolve_milestone_id() with project-aware search priority - Add project context prioritization in milestone resolution - Improve fallback behavior for cross-project milestone search This ensures milestone lookup by name works reliably by first searching within the specified project context, then falling back to global search. Resolves failed lookups when multiple milestones have the same name across different projects.
1 parent 384aab9 commit ddcb74d

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/linear_cli/api/client/client.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,12 +1273,22 @@ async def resolve_milestone_id(
12731273
):
12741274
return milestone_identifier
12751275

1276-
# Search for milestone by name
1277-
# NOTE: Temporarily searching all milestones due to GraphQL filter issues
1278-
# TODO: Fix project-scoped milestone filtering
1276+
# Search for milestone by name
1277+
# WHY: Linear's GraphQL doesn't support direct project filtering for milestones
1278+
# so we fetch all milestones and filter client-side with project preference
12791279
milestones_data = await self.get_milestones(limit=100)
12801280

12811281
nodes = milestones_data.get("nodes", [])
1282+
1283+
# If project_id provided, prioritize milestones from that project
1284+
if project_id:
1285+
# First pass: look for exact match in the specified project
1286+
for milestone in nodes:
1287+
if (milestone.get("name", "").lower() == milestone_identifier.lower() and
1288+
milestone.get("project", {}).get("id") == project_id):
1289+
return milestone.get("id")
1290+
1291+
# Fallback: search all milestones without project constraint
12821292
for milestone in nodes:
12831293
if milestone.get("name", "").lower() == milestone_identifier.lower():
12841294
return milestone.get("id")

0 commit comments

Comments
 (0)