Skip to content

feat(tasks): each issue's assignee carries their profile picture (avatarUrl) - #77

Merged
muqsitnawaz merged 1 commit into
mainfrom
feat/task-assignee-avatar
Oct 27, 2026
Merged

muqsitnawaz merged 1 commit into
mainfrom
feat/task-assignee-avatar

Conversation

@muqsitnawaz

Copy link
Copy Markdown
Contributor

What

linear tasks --json now gives each issue's assignee their Linear profile picture, as assignee.avatarUrl. The AGI extension's Issues tab draws the assignee from it: the owner asked for real profile pictures instead of colored initials. Before this, the only way to get them was a second linear users read.

The change is one field in ISSUE_FIELDS (assignee { name avatarUrl }). tasks --json already prints the nodes as read.

Run

Rush project (63 issues), from this branch:

$ LINEAR_PROFILE=default ./linear tasks --project 8fa120d1-… --json | python3 -c '…'
63 issues; 62 of 62 assignees have avatarUrl; e.g. {'name': 'Bisma', 'avatarUrl': 'https://public.linear.app/0a580bfd-…/b971b1e4-…'}

Tests

python3 -m unittest: Ran 285 tests, OK (skipped=4). The new test is IssueFieldsTest.test_task_lists_carry_the_assignees_profile_picture.

🤖 Generated with Claude Code

…tarUrl)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@muqsitnawaz

Copy link
Copy Markdown
Contributor Author

VERDICT: APPROVE

Non-author review of the diff (ISSUE_FIELDS, CHANGELOG, test_linear.py).

  • Query safety: ISSUE_FIELDS is interpolated at only two sites, paginate_issues (linear:1884, pages of _PAGE_SIZE = 100, linear:1867) and semantic_rank (linear:2269, first=25). avatarUrl is a scalar on User, already queried elsewhere (linear:887, 3132, 4844), so no schema risk. It sits on an assignee object that was already selected, so the added complexity is one scalar per node, nowhere near the 10,000 cap noted at linear:4847. Overview and members queries are separate and untouched.
  • Non-JSON output: the human renderers read only assignee.name (e.g. linear:1764). The JSON prints at linear:5380 and 5583 dump nodes as read, so only the JSON gains the field.
  • Cache and equality: the embeddings cache keys on id/updatedAt (linear:1704, vectors table), and embedding_text uses title and description only (linear:2607). The issues table stores node JSON per issue (linear:2630). Nodes cached before this change lack avatarUrl until the issue's updatedAt moves. That cache feeds --similar ranking, not tasks --json output (which refetches), so it is harmless. I found no dedupe or equality on assignee dicts.
  • Test: python3 -m unittest gives Ran 285, OK (skipped=4). The new test pins the field string in ISSUE_FIELDS and would fail if it were reverted. It is a source-shape assertion, not a live-API check, but it is proportionate for a one-token change.
  • CHANGELOG: an ### Added entry under [Unreleased], matching the Keep a Changelog format of the file.
  • Not run: the live linear tasks --json call was blocked by the sandbox permission policy, so the real API response is unverified. Adding a documented scalar field is low risk; if the PR body carries no run, a quoted run of that command would be a nice addition (NICE only).

@muqsitnawaz
muqsitnawaz merged commit 834056b into main Oct 27, 2026
5 checks passed
@muqsitnawaz
muqsitnawaz deleted the feat/task-assignee-avatar branch October 27, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant