Skip to content

Dashboard backlog: show assignee alongside reporter (#700)#701

Merged
waleedkadous merged 3 commits intomainfrom
builder/air-700
Apr 26, 2026
Merged

Dashboard backlog: show assignee alongside reporter (#700)#701
waleedkadous merged 3 commits intomainfrom
builder/air-700

Conversation

@waleedkadous
Copy link
Copy Markdown
Contributor

Summary

Adds the issue assignee to dashboard backlog rows. Each row now shows both the reporter (r:) and assignee (a:) on the same line:

r: @waleedkadous  a: none
r: @waleedkadous  a: @amr
r: @waleedkadous  a: @amr, @bob

Closes #700.

Changes

Touched the four layers that needed plumbing for the new assignees field:

  1. packages/codev/src/lib/forge-contracts.ts — added assignees?: Array<{ login: string }> to IssueListItem.
  2. packages/codev/scripts/forge/github/issue-list.sh — added assignees to the gh issue list --json flag (gitlab/gitea presets unchanged — they already return all fields by default).
  3. packages/codev/src/agent-farm/servers/overview.ts — added assignees?: string[] to BacklogItem and mapped issue.assignees?.map(a => a.login) in deriveBacklog. Empty/missing arrays become undefined.
  4. packages/types/src/api.ts — mirrored the assignees?: string[] field on OverviewBacklogItem.
  5. packages/dashboard/src/components/BacklogList.tsx — renders r: @<reporter> a: @<assignee> (or a: none when unassigned, comma-separated for multiple). Also added a CSS rule so the new span shares the muted style of the reporter span.

Out of scope

  • No filtering or sorting by assignee (display only, per the issue).
  • Team page and other views untouched.

Tests

Added explicit coverage for the three required cases (none / one / many) at both layers:

  • Backend (packages/codev/src/agent-farm/__tests__/overview.test.ts): three new deriveBacklog cases — single assignee, multiple assignees, and missing/empty arrays staying undefined.
  • UI (packages/dashboard/__tests__/BacklogList.test.tsx, new file): four cases — a: none, single @login, comma-separated multiple, and empty array treated as none.

All 133 backend overview tests and the 4 new BacklogList tests pass. Full codev build is green.

Review

Decisions worth flagging

  • BacklogItem.assignees is left undefined when the array would be empty, mirroring the existing convention for author. Components see one shape (undefined or non-empty array), and the a: none rendering is decided at the view layer.
  • r: is only rendered when an author exists (matching the prior behavior — the existing item.author && ... guard is preserved). a: always renders to keep the visual format unambiguous.
  • The gh script change is GitHub-only — gitlab/gitea presets emit their CLIs' default JSON, which already includes assignees on the items they return. If those presets need normalization, that's a follow-up beyond this issue.

Test plan

  • pnpm --filter @cluesmith/codev-types build
  • pnpm --filter @cluesmith/codev-core build
  • pnpm --filter @cluesmith/codev build (green, including dashboard build)
  • Backend: npx vitest run src/agent-farm/__tests__/overview.test.ts (133/133)
  • UI: npx vitest run BacklogList (4/4)
  • Visual sanity check in running dashboard (architect to verify)

Display each backlog row with explicit r:/a: labels so the assignee is
visible at a glance:

  r: @waleedkadous  a: none
  r: @waleedkadous  a: @amr, @bob

Plumb assignees through the four affected layers:
- forge-contracts: add assignees field to IssueListItem
- gh issue-list script: include assignees in --json flag
- overview server: map issue.assignees into BacklogItem.assignees
- shared API types: add assignees? to OverviewBacklogItem
- BacklogList: render r:/a: labels (always show a:, "none" when empty)

Tests cover the three required cases (none, one, many) at both the
backend mapping layer (deriveBacklog) and the UI layer (BacklogList).
@waleedkadous
Copy link
Copy Markdown
Contributor Author

Excellent work — the plumbing is clean across all four layers and the tests cover the three cases I asked for (none / one / many). I particularly like that you added assignees to the gh --json flag so the data is actually fetched, and that you treated empty-array and missing-array identically.

Approved to merge.

@waleedkadous waleedkadous merged commit d45d0cd into main Apr 26, 2026
6 checks passed
waleedkadous added a commit that referenced this pull request Apr 27, 2026
…no-op (#702 #703 #704)

Three small build-tooling fixes that surfaced during the v3.0.0-rc.12
local-install debugging on 2026-04-25.

#702 — Pre-build staleness check (scripts/check-main-fresh.sh, prefixed
to root package.json's build script). Refuses to build when the local
`main` branch is behind `origin/main` so a forgotten `git pull` after a
PR merge no longer ships pre-merge code. Override with
SKIP_GIT_FRESHNESS_CHECK=1 if needed. Skips silently on non-main
branches (worktrees, builders), when there's no origin remote, or when
HEAD is up-to-date or ahead.

#703 — packages/codev/package.json build:dashboard now `rm -rf`s
dashboard-dist before `cp -r dist dashboard-dist`. The bare cp creates
a nested dashboard-dist/dist/ on every re-run because cp's behavior
flips when the target directory exists.

#704 — scripts/local-install.sh now `rm -rf`s the on-disk package
directories between `npm uninstall -g` and `npm install -g`. Without
this, a same-version reinstall can leave stale files on disk while
reporting success — exactly the failure mode that masked the rc.12
dashboard not picking up PR #701's assignee changes.
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.

Dashboard backlog: show assignee alongside reporter

1 participant