Dashboard backlog: show assignee alongside reporter (#700)#701
Merged
waleedkadous merged 3 commits intomainfrom Apr 26, 2026
Merged
Dashboard backlog: show assignee alongside reporter (#700)#701waleedkadous merged 3 commits intomainfrom
waleedkadous merged 3 commits intomainfrom
Conversation
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).
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 Approved to merge. |
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.
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.
Summary
Adds the issue assignee to dashboard backlog rows. Each row now shows both the reporter (
r:) and assignee (a:) on the same line:Closes #700.
Changes
Touched the four layers that needed plumbing for the new
assigneesfield:packages/codev/src/lib/forge-contracts.ts— addedassignees?: Array<{ login: string }>toIssueListItem.packages/codev/scripts/forge/github/issue-list.sh— addedassigneesto thegh issue list --jsonflag (gitlab/gitea presets unchanged — they already return all fields by default).packages/codev/src/agent-farm/servers/overview.ts— addedassignees?: string[]toBacklogItemand mappedissue.assignees?.map(a => a.login)inderiveBacklog. Empty/missing arrays becomeundefined.packages/types/src/api.ts— mirrored theassignees?: string[]field onOverviewBacklogItem.packages/dashboard/src/components/BacklogList.tsx— rendersr: @<reporter> a: @<assignee>(ora: nonewhen 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
Tests
Added explicit coverage for the three required cases (none / one / many) at both layers:
packages/codev/src/agent-farm/__tests__/overview.test.ts): three newderiveBacklogcases — single assignee, multiple assignees, and missing/empty arrays stayingundefined.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.assigneesis leftundefinedwhen the array would be empty, mirroring the existing convention forauthor. Components see one shape (undefinedor non-empty array), and thea: nonerendering is decided at the view layer.r:is only rendered when an author exists (matching the prior behavior — the existingitem.author && ...guard is preserved).a:always renders to keep the visual format unambiguous.Test plan
pnpm --filter @cluesmith/codev-types buildpnpm --filter @cluesmith/codev-core buildpnpm --filter @cluesmith/codev build(green, including dashboard build)npx vitest run src/agent-farm/__tests__/overview.test.ts(133/133)npx vitest run BacklogList(4/4)