Repository navigation
v1.4.0
Added
- README section "Upgrading from 1.3.x": the one-link-per-pair rule for
link, and refreshing agent instructions withxpo init/xpo doctor --fix(xpo-4659c8) - Board cards: the assignee avatar is now an assignee picker button. Unassigned cards show a muted dashed placeholder avatar. Press
aon a focused card to open the picker (xpo-5afd82) - Backlog rows: the assignee avatar is now an assignee picker button, like the status, priority and estimate cells. Unassigned rows show a muted dashed placeholder avatar instead of nothing, so the column stays aligned. Press
aon a focused row to open the picker (xpo-dcd4f6) - The issue Activity section reads as a timeline: a vertical rail runs through the avatar column and joins consecutive events and comment cards. When an event row wraps, its continuation lines now indent under the name instead of running under the avatar. Comment bodies (new
.prose-activityclass) and the comment box are now 14px instead of 15px (xpo-a1470f) overwritefor the MCPlinktool (--overwrite/"overwrite": truein the CLI): replaces an existing link of a different kind between two issues, whichever side stores it; the output lists what was replaced (replaced, and e.g.Linked xpo-a relates_to xpo-b (replaced blocks)) (xpo-c93b11)
Changed
-
Two issues can have at most one link between them.
linkon an already-linked pair fails unlessoverwriteis set, andadd/updatereject alinksset with two entries for the same issue (create previously had no duplicate check). Pairs recorded before this rule keep working until a write changes them.unlinknow takes its ownUnlinkToolInput(xpo-c93b11) -
Issue sidebar relations overhaul:
- Relationships button: the Parent property becomes a flag-icon Relationships button ("No relations" / "N Relationships", where the parent counts as one). It opens a popover menu that replaces the Add relation modal:
- Remove parent comes first when the issue has a parent.
- Then Parent of…, Sub-issue of…, Related to…, Blocked by…, Blocking… and Duplicate of….
- Then More ▸, holding Depends on…, Dependency of… and Duplicated by….
- Picking a kind leads to an issue search with one-line titles.
- Relations card: relations are grouped into per-kind sections worded from the viewed issue ("Blocked by" / "Blocking"). Each linked issue is a chip that shows
×on hover and a 250 ms preview card (ID, assignee, title, status, priority). Right-click offers Change to ▸ (change a link's kind in place), Remove relation and Copy link. Clicking a chip opens the issue, and aWaypointsbutton on the card opens the dependency graph (xpo-903ca3)
- Relationships button: the Parent property becomes a flag-icon Relationships button ("No relations" / "N Relationships", where the parent counts as one). It opens a popover menu that replaces the Add relation modal:
-
One attribution rule across the web UI: when an agent acted on behalf of a person, their name renders with a dashed underline and reveals the agent on hover/focus (and to screen readers); direct actions render plain. Applies to the issue Activity timeline (events and comments), Merge view comments, Dashboard activity feed, Timeline, Inbox change summary and the sidebar assignee via a shared
ActorNamecomponent. Replaces the spelled-out "Claude Code on behalf of Name" comment headers, and the Inbox now shows the principal instead of the raw agent (xpo-a9560c, xpo-6e0026)
Fixed
-
Board popovers opened with
s,eandl(and the new assignee picker) now anchor to the focused card instead of the board's top-left corner (xpo-bfca2d) -
Board keyboard navigation no longer focuses cards in hidden or collapsed columns. With Backlog hidden,
jnow focuses a visible card and shows the focus ring (xpo-93efdd) -
Issue detail property popovers are now accessible:
- Shared pickers: status, estimate, priority and assignee use the shared
Menu-based pickers instead of hand-rolled lists.Menuowns their keyboard navigation, so number shortcuts also work for estimate and priority. - ARIA: every sidebar property trigger exposes
aria-haspopup="menu"andaria-expanded, and each picker menu has anaria-label. Single-choice pickers (status, priority, estimate, cycle, assignee) announce their options asmenuitemradiovia a newMenuItemradioprop. Multi-select menus keepmenuitemcheckbox. - Assignee: a new shared
AssigneePickeris used by the sidebar and the context menu. "Remove assignee" becomes a "No assignee" option with a dashed placeholder avatar, checked when nobody is assigned. - Look: picker menus have an even 4px inset, and checked options show in primary text (xpo-c8eaf4)
- Shared pickers: status, estimate, priority and assignee use the shared
-
The issue detail view shows a single scrollbar on devices with classic scrollbars, instead of three. The page no longer scrolls:
LayoutandViewContainer's scroller arerelative, soActorName'ssr-onlytext can't extend the document. The property sidebar is capped to the pane's height (100cqh) instead of the viewport. It hides its scrollbar and fades its bottom edge while more content is below. The global scrollbar styles moved into@layer baseso utilities can override them (xpo-fe51ab) -
Status icons in the issue sidebar's Relations card no longer shrink next to long titles;
StatusIconnow always appliesshrink-0, which fixes every flex-row call site (xpo-334821) -
MCP
mergerecords the MERGE event and DONE transition as the agent acting on behalf of the user (created_byagent,on_behalf_ofprincipal) instead of as the configured user;MergeIssueandResolveReviewIssuenow sync the client identity to the transport (xpo-40ab84) -
The issue-detail artifact list shows the principal with the dashed-underline agent attribution instead of the raw agent identity; artifacts now carry
on_behalf_offrom their latest write in the HTTP API and CLI/MCP JSON output (xpo-61ff1e) -
The Dependencies view shows each
relates_tolink once (table row and graph edge) instead of twice; its derived inverse is now deduplicated as an undirected pair. Arelates_tobetween two issues that also share a blocking/duplicate link is hidden as redundant, and cycle detection only considersblocked_by/depends_onedges, so relates_to no longer produces false cycle warnings (xpo-2fc583) -
The Dependencies table search trims its query: leading and trailing whitespace no longer cause missed matches, and a whitespace-only query shows all rows like an empty search (xpo-3d9d5a)
-
xpo demono longer assigns issues to agents with no person behind them: agent work is assigned to a human (Claude for Sarah, Devin for Jake, Whiskers for Luna) with the agent asassignee_via, agent events carryon_behalf_of, and agents are left out of the demo contributors (xpo-53daa5) -
The Dependencies graph dims nodes and edges outside the focus/hover set less (nodes 0.55, edges 0.4, DONE 0.7), so dimmed labels and ids stay readable; opacity now comes from
dep-dimmed/dep-doneCSS classes backed by--dep-*-opacityvariables inindex.cssinstead of inline styles (xpo-aab636) -
xpo link,xpo link --jsonand the MCPlinktool share oneClient.Linkhelper and return identical "already exists" and self-link errors (xpo-f94753, fixed by xpo-c93b11)