Skip to content

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 09 Sep 11:49
· 204 commits to main since this release
v1.2.0
187ea7a

Added

  • Expanded vitest coverage to 255 tests across 12 test files — covers labels, sort, constants, filters, dependency graph, timeline, inbox, command palette, and md5 utilities; extracted and deduplicated business logic from 10+ component files into shared utility modules (xpo-653324)
  • My Issues view: right-click context menu with full issue actions (status, priority, assignee, labels, estimate) (xpo-653324)
  • Labels view: click a label to navigate to filtered Backlog (xpo-653324)
  • Command palette: fzf-style scored fuzzy search — substring and exact matches rank highest, scattered character matches rank lowest (xpo-653324)

Changed

  • Dependency graph: replaced dagre with elkjs — proper orthogonal edge routing, native edge label placement, edges connect at node borders; canonical direction is now upstream (arrows point toward prerequisites); dim non-focus nodes/edges; completed toggle properly hides terminal issues; default zoom 125% (xpo-653324)
  • Board view: custom pointer-aware collision detector for reliable cross-column drag-and-drop; Backlog/Canceled/Duplicate columns hidden by default (xpo-653324)
  • Assignee pickers: filter out identities without valid email addresses (xpo-653324)

Fixed

  • Backend: moving a child issue to BLOCKED no longer auto-starts the parent (first-start trigger only fires on DOING) (xpo-653324)

  • Backend: removing all dependencies/labels from an issue now persists correctly (omitempty fix on UpdatePayload slices) (xpo-653324)

  • xpo init: worktrees: true now written to config.yaml by default (xpo-653324)

  • Dependency add-relation modal: stable height when switching between kind selection and issue search (xpo-653324)

  • Board: empty columns now have a tall enough drop target for drag-and-drop (xpo-653324)

  • Frontend test infrastructure with vitest — 72 tests covering diff utilities (parseDiffByFile, addLineNumbers, buildFileTree, flattenSingleChildDirs, buildSplitLines) and format utilities; make test now runs vitest alongside Go tests (xpo-46c418)

  • Keyboard help overlay: added Board section documenting all Board shortcuts; disambiguated key separators (/ = or, → = then, + = together); expanded status number shortcuts to show actual status names; widened to 4-column layout (xpo-87503f)

  • Optional default_branch field in .xpo/config.yaml — explicitly sets the base branch for branching, merging, and diff operations, bypassing git-based detection; xpo init auto-detects and writes it (xpo-961910)

  • Global config accessor (config.Get() / config.Set()) — package-level functions can now read config without parameter threading (xpo-961910)

  • Shared TopBar component (components/ui/TopBar.tsx) with left/center/right slots — replaces 13 duplicated top-bar implementations with a single composable primitive; includes cn() utility (clsx + tailwind-merge) for safe Tailwind class overrides (xpo-09ebcc)

  • Backlog and Dependencies search inputs show / keyboard hint when empty and Esc when populated (xpo-09ebcc)

  • Cycles view now has a proper fixed top bar matching all other views (xpo-09ebcc)

  • xpo start --mode worktree|branch CLI flag and MCP mode parameter — override the global worktree config per-invocation; replaces the old --no-wt flag (xpo-00198b)

  • Dependencies view: interactive dependency graph — filterable table as default with kind/search/completed filters, click-to-drill-down graph powered by dagre for exploring dependency chains; relationship-aware resolved logic; entry from issue detail property sidebar (xpo-a49ec2)

  • xpo rationale CLI command and MCP tool — BM25-ranked full-text search across specs and walkthroughs for design rationale; supports --top N / -n N and --json; rich terminal output with colored scores, document types, labels, and clickable artifact paths (xpo-d6b4de)

  • xpo history now renders a visual activity timeline with typed dot markers (● events, ○ commits, ◆ merges, ☰ artifacts) connected by a vertical rail; interleaves git commits with issue events; supports --json, --reverse, --since <duration>, --limit N, and auto-paging through $PAGER (xpo-d82dc7)

  • xpo history without arguments shows a project-wide timeline across all issues and recent commits (xpo-d82dc7)

  • Git hooks (.githooks/) — commit-msg strips AI-agent trailers and enforces prefix convention; pre-commit runs go vet and eslint on staged files; pre-push runs the test suite. Activated automatically via make setup

  • xpo pulse CLI command — compact terminal dashboard of project health metrics (velocity, cycle time, lead time, WIP, blockers, throughput) with color-coded values; supports --json for machine-readable output (xpo-9ba68b)

  • xpo init now writes a name: field to config.yaml derived from the folder name, used as the project heading in xpo pulse and xpo board (xpo-9ba68b)

  • Empty state messaging for Backlog, Active, and Done filtered views — shows tab-specific or filter-aware hints instead of a blank screen (xpo-5a17a7)

  • Timeline event-type filter menu — replaces single-select tabs with a multi-select checklist popover (Issues, Closed, Comments, Merges, Artifacts, Commits); client-side filtering for instant toggling; renders ARTIFACT events and CANCELED/DUPLICATE status transitions that were previously invisible (xpo-eb76cd)

  • Walkthrough tab in the merge view — renders the issue's walkthrough as Markdown and becomes the default tab when present (xpo-3bfbc8)

  • Backlog view: [ / ] keyboard shortcuts to cycle through sub-tabs (All Issues, Backlog, Active, Done) with wrapping (xpo-e5d2e4)

Changed

  • Parents with no visible children in nested backlog mode show a static right-pointing chevron instead of a clickable expand toggle; ghost parents show a static down-pointing chevron — clicking neither triggers cross-group side effects (xpo-2dd9a8)
  • Ghost row opacity increased from 50% to 65% for better readability (xpo-2dd9a8)
  • All top bars standardized to h-12 height with pl-5 pr-3 asymmetric padding (xpo-09ebcc)
  • Backlog search is now always visible in the center of the top bar instead of appearing on / keypress (xpo-09ebcc)
  • Labels view top bar normalized from h-13 px-6 to standard TopBar defaults (xpo-09ebcc)
  • Timeline kind filter converted from segmented control to underlined tabs on the left (xpo-09ebcc)
  • Filter buttons in MyIssues and Notifications changed from text+icon to icon-only with tooltip, matching Backlog/Board style (xpo-09ebcc)
  • Backlog filter and view-options icon buttons normalized to w-7 h-7 bordered style, matching Board (xpo-09ebcc)
  • Dependencies search Escape key now clears the search and blurs the input (xpo-09ebcc)
  • CLI accent color (issue IDs, labels) lightened from #6f42c1 to #b392f0 for dark terminal readability (xpo-d82dc7)
  • Branch badges on board/backlog cards now show commit count instead of SHA, with a blue indicator dot for uncommitted changes (xpo-ebb248)
  • Detail sidebar shows "No commits" and uncommitted change details instead of the base branch SHA when a branch has no commits (xpo-ebb248)
  • SubProgress ring uses Lucide-compatible viewBox for proper text alignment, with a dashed track and brand-color progress arc (xpo-ebb248)
  • Artifact count badges unified with branch badge style (rounded-square, bordered) across board and backlog views (xpo-ebb248)

Fixed

  • Markdown checklist checkboxes now visible and flush-left in both rendered markdown and tiptap editor — border uses --color-border-control for proper contrast, padding zeroed to align with surrounding list content (xpo-958474)
  • Spec and walkthrough content in issue detail panel now live-updates when the file changes on disk — artifact content cache is invalidated on updated_at change instead of only on issue navigation (xpo-0b193b)
  • xpo merge auto-checkout failed in branch mode when Worktrees config defaulted to true — FindWorktreeForBranch matched the hub checkout itself; now compares against HubRoot() (xpo-1fccf2)
  • Added 11 merge test cases covering all three strategies, error paths, branch deletion, worktree cleanup, hub-wrong-branch, and issues.db preservation for FF (xpo-7a5bba)
  • Backlog drag-and-drop performance — eliminated per-pointermove re-renders by moving DnD visual state (drop indicator, group highlight, nest target) from React state to refs with direct DOM manipulation; extracted BacklogIssueRow and BacklogGroupHeader as React.memo components (xpo-d049dc)
  • Cross-group drag over ghost parent rows no longer shows a spurious indicator in the originating group — ghost rows now participate in collision detection, and findIndex lookups skip ghost instances (xpo-d049dc)
  • Cancelling a drag with Escape no longer triggers a click-through to the issue detail view on mouseup (xpo-d049dc)
  • Merge view auto-refreshes when new commits are pushed, with a manual refresh button in the tab bar; .xpo/ files hidden from files/diff tabs (xpo-af0b09)
  • Merge view walkthrough and conversation tabs now constrain to 832px and center, matching the issue detail content width (xpo-2c6297)
  • ContextMenu sub-menus now flip left and clamp vertically when near viewport edges instead of clipping (xpo-911a91)
  • MergeView no longer crashes when branch_stats becomes undefined after a merge completes — replaced non-null assertions with optional chaining and an early-return "branch merged" state (xpo-db1b0a)
  • Global scrollbar thumb color changed from --color-border-default to --color-border-overlay for better visibility against dark menu/popover backgrounds (xpo-e1acfd)
  • FilterMenu and ViewOptionsMenu popovers now center on their trigger button with viewport clamping, instead of right-aligning (xpo-374512)
  • Scrollbar appearance no longer shifts layout left — scroll containers use overflow-y: scroll with a thin 6px transparent-track scrollbar (xpo-0b2c6c)
  • Inline create row in backlog status groups now aligns with normal issue rows — icons wrapped in matching containers, blank spacer replaced with dimmed xpo-······ placeholder ID (xpo-5d3fb0)
  • Fixed all 63 frontend eslint errors across 21 files with no suppression comments — ref writes moved out of render, setState positioning replaced with direct DOM, non-component exports extracted to separate modules, missing hook deps added, unused vars removed, any types replaced (xpo-c08d52)
  • make test now depends on make lint (go vet + bun run lint), ensuring lint errors are caught before declaring implementation done (xpo-c08d52)
  • Completed ghost children (DONE/CANCELED/DUPLICATE) no longer appear in non-terminal views by default; "Show done ghosts" toggle in view options to opt back in (xpo-b109e5)
  • Merge view diff/files endpoints now target the correct worktree directory instead of the hub checkout, and normalize diff output prefixes for compatibility with diff.mnemonicPrefix git config (xpo-2d6b57)
  • computeBranchStats now detects uncommitted changes in worktree directories, making the merge view button appear for worktree branches with pending changes (xpo-67a1c4)
  • xpo merge no longer blocks on untracked files (e.g. idea.md) on the hub checkout — only modified tracked files that actually conflict with the incoming branch are rejected (xpo-cb6b49)
  • Merge error messages now explicitly warn against stashing to prevent agent stash-thrash loops that corrupt .xpo/issues.db (xpo-cb6b49)
  • Nested hierarchy mode no longer duplicates children across status groups — ghost children under a real parent are skipped when the child's status group is visible on the same tab (xpo-93e234)
  • xpo merge now auto-checkouts the default branch in branch mode instead of erroring — detects branch vs worktree mode at runtime by checking whether a worktree exists for the issue's branch (xpo-d5c047)
  • Web merge view mergeability check updated to use the same relaxed logic (xpo-cb6b49)