Skip to content

Add nitro agent task graph view - #10339

Open
michaelstaib wants to merge 82 commits into
mainfrom
mst/graph-tui
Open

michaelstaib wants to merge 82 commits into
mainfrom
mst/graph-tui

Conversation

@michaelstaib

@michaelstaib michaelstaib commented Sep 2, 2026 •

Copy link
Copy Markdown
Member

No description provided.

@github-actions

github-actions Bot commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

Patch coverage

94.8% of changed lines covered (3128/3300)

File Covered Changed Patch %
src/Nitro/CommandLine/src/CommandLine/ThrowHelper.cs 0 2 0.0% 🔴
…/Nitro/CommandLine/src/CommandLine/Tui/Input/TuiMessage.cs 0 9 0.0% 🔴
…/CommandLine/src/CommandLine/Tui/Graph/Render/CanvasCell.cs 1 2 50.0% 🔴
…/src/CommandLine/Tui/Graph/Render/GraphRenderFooter.cs 3 4 75.0% 🔴
…/CommandLine/src/CommandLine/Tui/Graph/Render/CellOwners.cs 17 21 81.0% 🟡
…/src/CommandLine/Tui/Graph/TreeView/GraphTreeView.cs 287 334 85.9% 🟡
…/CommandLine/src/CommandLine/Tui/Graph/GraphFilterForm.cs 31 36 86.1% 🟡
…/src/CommandLine/Tui/Graph/CanvasView/GraphCanvasText.cs 42 48 87.5% 🟡
…/CommandLine/src/CommandLine/Tui/Graph/Layout/LayoutVertex.cs 7 8 87.5% 🟡
…/src/CommandLine/Tui/Graph/Render/GraphWaveRenderer.cs 51 56 91.1% 🟡
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphMode.cs 403 439 91.8% 🟡
src/Nitro/CommandLine/src/CommandLine/Tui/Shell/TuiShell.cs 90 98 91.8% 🟡
…/CommandLine/src/CommandLine/Tui/Graph/Render/CellBuffer.cs 170 185 91.9% 🟡
…/src/CommandLine/Tui/Graph/CanvasView/GraphCanvasView.cs 206 221 93.2% 🟡
…/CommandLine/src/CommandLine/Tui/Graph/GraphDataLoader.cs 47 49 95.9% 🟡
…/Nitro/CommandLine/src/CommandLine/Tui/Widgets/TaskBadge.cs 62 64 96.9% 🟡
…/src/CommandLine/Tui/Graph/Render/GraphEdgeRouter.cs 493 501 98.4% 🟡
…/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphLayout.cs 331 336 98.5% 🟡
…/src/CommandLine/Commands/Agent/AgentTuiLauncher.cs 3 3 100.0% 🟢
…/CommandLine/src/CommandLine/Services/Tasks/TaskLabels.cs 1 1 100.0% 🟢

+48 more changed files; see the JSON below for uncovered lines.

Uncovered changed lines (JSON)
{
  "sha": "a8e515eda05045e3c669f458e1fa3509f06ca716",
  "files": [
    { "path": "src/Nitro/CommandLine/src/CommandLine/ThrowHelper.cs", "ranges": [[28, 28], [31, 31]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Input/TuiMessage.cs", "ranges": [[36, 36], [41, 41], [46, 46], [51, 51], [56, 56], [61, 61], [66, 66], [71, 71], [76, 76]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/CanvasCell.cs", "ranges": [[8, 8]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphRenderFooter.cs", "ranges": [[16, 16]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/CellOwners.cs", "ranges": [[13, 13], [19, 19], [31, 31], [39, 39]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/TreeView/GraphTreeView.cs", "ranges": [[56, 57], [59, 65], [67, 72], [137, 139], [188, 189], [380, 380], [417, 419], [445, 446], [455, 456], [497, 515]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphFilterForm.cs", "ranges": [[19, 23]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/CanvasView/GraphCanvasText.cs", "ranges": [[14, 15], [41, 42], [52, 53]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/LayoutVertex.cs", "ranges": [[22, 22]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphWaveRenderer.cs", "ranges": [[45, 46], [72, 74]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphMode.cs", "ranges": [[175, 177], [192, 193], [316, 316], [467, 470], [472, 476], [479, 481], [484, 485], [487, 487], [509, 510], [527, 528], [543, 544], [551, 552], [556, 557], [571, 571], [573, 573], [644, 645], [682, 682]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Shell/TuiShell.cs", "ranges": [[777, 779], [1218, 1219], [1428, 1430]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/CellBuffer.cs", "ranges": [[30, 31], [47, 48], [90, 91], [111, 112], [136, 137], [291, 292], [299, 300], [303, 303]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/CanvasView/GraphCanvasView.cs", "ranges": [[227, 229], [244, 246], [269, 270], [296, 297], [302, 303], [314, 315], [362, 362]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphDataLoader.cs", "ranges": [[45, 46]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Widgets/TaskBadge.cs", "ranges": [[176, 177]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphEdgeRouter.cs", "ranges": [[97, 99], [295, 295], [654, 654], [656, 656], [707, 708]] },
    { "path": "src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphLayout.cs", "ranges": [[33, 34], [38, 39], [195, 195]] }
  ]
}

Project coverage: 58.1% (290643/500663 lines)

@github-actions

github-actions Bot commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

🎬 Nitro CLI E2E snapshots changed

These flow recordings differ from main (added, removed, or modified). Expand each for the before/after.

🔁 agents: modified
Before: mainAfter: this PR
recordingrecording
🔁 board: modified
Before: mainAfter: this PR
recordingrecording
🔁 board-maximize: modified
Before: mainAfter: this PR
recordingrecording
🔁 detail: modified
Before: mainAfter: this PR
recordingrecording
🔁 mail-board: modified
Before: mainAfter: this PR
recordingrecording
🔁 search: modified
Before: mainAfter: this PR
recordingrecording

Run 34450315530 · full set in the nitro-e2e-snapshots artifact.

board, board-maximize, search, detail, mail-board, and agents each grew
the new Graph tab in the shared tab strip. Re-record their goldens and
GIFs to match; no other output changed.
run.sh publishes a linux-x64 nitro binary and mounts it into the pinned
multi-arch VHS image, but let docker pick the host's native platform.
On an arm64 host (Apple Silicon Docker Desktop) that resolves to an
arm64 container, so the x64 binary can't exec and every flow FAILs at
recording with no hint why. Pin the docker run to --platform
linux/amd64 and document the emulation cost on arm64 hosts in the
README.
board.column.status.closed moves from Grey70+Dim to Grey84 (no
decoration), since the Graph canvas already dims terminal-status
nodes itself and stacking a second Dim on top of Grey70 made the
Closed column and closed graph nodes too dark to read on dark
terminals. board.column.status.closed.focused moves from Grey+Bold
to Grey93+Bold so focusing the Closed column brightens it like every
other column instead of dimming it.
Extract the board's blocked/deferred/ready semantics into a pure
TaskBoardStatus.Resolve helper reused by both BoardDataLoader and the
new GraphDataLoader.BoardStatus stamp, so GraphCanvasNodeRenderer keys
border and glyph color on the same computed status the Board uses
(unmet dependencies, epics with open children, future DeferUntil)
instead of the task's raw status field.
TaskBadge.Render truncated only the title, so a long id (or the
fixed prefix/glyph/type/priority segments alone) could still produce
a line wider than maxWidth, which Spectre then folded onto an extra
row the board panel never budgeted for. Render now guarantees the
plain-text width of the returned line never exceeds maxWidth,
measuring and truncating in terminal cells (Segment.CellCount /
Segment.Truncate) rather than chars: truncate the title, then drop
it once its budget falls below 2 cells, then truncate the id
(keeping its leading characters), then drop the priority and type
code in turn if the row is still too narrow.

ColumnPane.Render also sets Overflow.Ellipsis on each row's Markup
as a safety net against a caller passing an already-overlong line.
DependencyTreeViewTests' width:10 breadcrumb-header oracle assumed
TaskBadge silently overflowed its width budget; now that TaskBadge.Render
actually respects maxWidth, the row shrinks to its own truncated width so
headerBudget narrows by one more character (aaa... z -> aa... z).

BoardModeTests.Render_Should_KeepEveryColumnFrameIntact_When_LongIdsAtNarrowWidth
only checked frame height and overall line width, which a folded row could
still satisfy by eating blank padding. Added a per-panel check that exactly
one interior row is non-blank and that the task row ends in an ellipsis,
which fails against the pre-fix code and passes at HEAD.
Bold box-drawing glyphs draw with the terminal's bold font face, whose
corner/edge metrics can drift from the regular face, breaking a
focused pane's frame in some terminals. Focus is now shown by box
weight (BoxBorder.Heavy vs Rounded, via the shared PaneBorders rule)
and a bold header title, never by bolding the border style itself,
across every focus-switched pane in the shell: board columns, the
mail Workspace list, and the task/mail/memory/agent detail panes and
search results pane. DependencyTreeView has no sibling pane to lose
focus to, so it keeps Rounded always.

Removed Decoration.Bold from the six *.focused theme tokens that
carried it and added a regression test asserting no *.focused
border/status token ever does again.
board-maximize, search, mail-board, and agents show a focused pane whose
border changed from rounded to heavy. Refresh their goldens and GIFs from
the CI recording. board-flow.tape synced on the rounded top border of the
focused Ready column, so it timed out; anchor it on the heavy border
instead. The board golden follows once CI records it.
Last of the flows that drift from the heavy focused pane border; the
tape sync fix in the previous commit let CI record it.
Copilot AI lite review requested due to automatic review settings September 10, 2026 06:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The new graph footer metrics renderer will print several placeholders literally due to missing string interpolation, and needs a small correctness fix before approval.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR adds a new Graph tab to Nitro’s agent TUI, including a graph data/model pipeline and canvas/tree rendering, while also standardizing the shell’s focus language (heavy vs rounded borders + bold header text) and tightening width/Unicode safety in TUI rendering.

Changes:

  • Add a new Graph tab (Shift+G) with graph loading, reduction, layout, and rendering primitives.
  • Standardize pane focus visuals via PaneBorders and update multiple modes/views to use heavy/rounded borders + header bolding without bolding box glyphs.
  • Improve determinism and correctness around narrow widths/Unicode (task row truncation, footer width budgeting, and End-to-bottom navigation), with expanded tests and updated E2E golden recordings.
File summaries
File Description
src/Nitro/CommandLine/test/e2e/search-flow.golden.txt Updates golden recording to include Graph tab and new border glyphs.
src/Nitro/CommandLine/test/e2e/run.sh Forces amd64 platform for VHS container to match published linux-x64 binary.
src/Nitro/CommandLine/test/e2e/README.md Documents amd64 container emulation implication on arm64 hosts.
src/Nitro/CommandLine/test/e2e/mail-board-flow.golden.txt Updates golden recording for Graph tab and focus border language.
src/Nitro/CommandLine/test/e2e/detail-flow.golden.txt Updates golden recording for Graph tab presence.
src/Nitro/CommandLine/test/e2e/board-maximize-flow.golden.txt Updates golden recording for Graph tab and heavy/rounded frames.
src/Nitro/CommandLine/test/e2e/board-flow.tape Sync point updated for focused heavy border glyphs.
src/Nitro/CommandLine/test/e2e/board-flow.golden.txt Updates golden recording for Graph tab and heavy/rounded frames.
src/Nitro/CommandLine/test/e2e/agents-flow.golden.txt Updates golden recording for Graph tab and focus border language.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Widgets/TaskBadgeTests.cs Adds truncation/width-safety tests for TaskBadge.Render (cell-accurate).
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Widgets/ColumnPaneTests.cs Expands tests around heavy/rounded borders and bold header behavior.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Tree/FakeTaskStore.cs Implements GetTaskLabelsAsync for tree test store.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Tree/DependencyTreeViewTests.cs Adds border behavior test for dependency tree view.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Theming/DefaultThemeTests.cs Guards against bold decorations on focused border/status tokens.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Shell/TuiTabTests.cs Adds coverage for resuming a suspended mode without re-entering it.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Shell/TuiShellTests.cs Extends footer rendering tests (ordering, Unicode, toast replacement).
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Shell/TuiShellTabsTests.cs Adds Graph tab switching + Graph detail stack/state behavior tests.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Shell/TabSwitchKeysTests.cs Removes mnemonic collision tests (replaced by broader launcher coverage).
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Shell/FakeTuiMode.cs Adds FooterStatus support for shell footer tests.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Shell/FakeTaskStore.cs Adds dependency edges, query count, bulk label support for shell tests.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Search/SearchModeTests.cs Tests focused/unfocused Results frame rendering (heavy vs rounded).
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Search/FakeTaskStore.cs Implements GetTaskLabelsAsync for search test store.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Memory/MemoryModeTests.cs Adds focused detail frame rendering test (heavy border).
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Memory/MemoryKeyMapTests.cs Verifies End-to-bottom and Shift+G unbound in memory keymap.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Mail/MailModeTests.cs Tightens focus rendering expectations for workspace mailbox pane.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Mail/MailKeyMapTests.cs Verifies End-to-bottom and Shift+G unbound in mail keymap.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Mail/MailDetailViewTests.cs Tests shared focus language (heavy vs rounded) for mail detail frame.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Input/KeyMapTests.cs Updates global edge navigation: End for bottom, Shift+G unbound.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Graph/Render/CellBufferTests.cs Adds tests for graph canvas cell buffer segmenting/ownership/priority.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Graph/GraphSearchProjectionContextTests.cs Tests representative mapping stability/perf for graph search projection.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Graph/GraphParentMapTests.cs Tests deterministic parent selection and cycle detachment.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Graph/GraphKeyMapTests.cs Adds graph keymap uniqueness/collision tests and dispatch precedence.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Graph/GraphDataLoaderTests.cs Tests graph loading semantics, archived visibility, and bulk label reads.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Graph/CanvasView/GraphCanvasTextTests.cs Tests canvas text encoding/truncation for Unicode/non-cell-width runes.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Editing/FakeTaskStore.cs Implements GetTaskLabelsAsync for editing test store.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Details/TaskDetailViewTests.cs Tests shared focus language for task detail sidebar frame.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Details/FakeTaskStore.cs Adds bulk GetTaskLabelsAsync implementation for details tests.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Board/TaskBoardStatusTests.cs Pins TaskBoardStatus.Resolve behavior against board semantics.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Board/FakeTaskStore.cs Adds bulk label API + dependency edges stub for board tests.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Board/BoardModeTests.cs Adds focused/unfocused border/header assertions and narrow-width regression test.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Agents/FakeTaskStore.cs Implements GetTaskLabelsAsync for agents test store.
src/Nitro/CommandLine/test/CommandLine.Tests/Tui/Agents/AgentsModeTests.cs Tests heavy detail frame rendering when the detail pane is focused.
src/Nitro/CommandLine/test/CommandLine.Tests/Commands/Agent/Tasks/TaskStoreTests.cs Adds coverage for label grouping/ordering in new bulk label query.
src/Nitro/CommandLine/test/CommandLine.Tests/Commands/Agent/AgentTuiLauncherTests.cs Updates tab order test to include Graph and adds key-chord collision guard.
src/Nitro/CommandLine/src/CommandLine/Tui/Widgets/TaskBadge.cs Reworks truncation to be cell-width aware and guarantees max-width compliance.
src/Nitro/CommandLine/src/CommandLine/Tui/Widgets/PaneBorders.cs Introduces shared focus language (heavy/rounded border + bold header text).
src/Nitro/CommandLine/src/CommandLine/Tui/Widgets/ColumnPane.cs Applies PaneBorders and forces ellipsis overflow to prevent row wrapping.
src/Nitro/CommandLine/src/CommandLine/Tui/Tree/DependencyTreeView.cs Uses PaneBorders-compatible border selection for tree mode.
src/Nitro/CommandLine/src/CommandLine/Tui/Theming/DefaultTheme.cs Removes bold decoration from focused border/status tokens; adjusts closed colors.
src/Nitro/CommandLine/src/CommandLine/Tui/Shell/TuiTab.cs Adds ResumeSuspendedMode to pop without re-entering.
src/Nitro/CommandLine/src/CommandLine/Tui/Shell/TuiShell.cs Adds Graph integration, per-tab detail mode stack, and Unicode/cell-width footer formatting + inline status support.
src/Nitro/CommandLine/src/CommandLine/Tui/Shell/TabSwitchKeys.cs Updates documentation for new Shift+G mnemonic.
src/Nitro/CommandLine/src/CommandLine/Tui/Shell/ITuiMode.cs Adds FooterStatus contract for mode-owned inline footer status text.
src/Nitro/CommandLine/src/CommandLine/Tui/Search/SearchMode.cs Uses PaneBorders focus language for Results/Detail frames.
src/Nitro/CommandLine/src/CommandLine/Tui/Memory/MemoryKeyMap.cs Moves bottom-edge binding from Shift+G to End.
src/Nitro/CommandLine/src/CommandLine/Tui/Memory/MemoryDetailView.cs Uses PaneBorders focus language for memory detail frame.
src/Nitro/CommandLine/src/CommandLine/Tui/Mail/MailMode.cs Applies shared focus language to mailbox list frame while keeping accent selection.
src/Nitro/CommandLine/src/CommandLine/Tui/Mail/MailKeyMap.cs Moves bottom-edge binding from Shift+G to End.
src/Nitro/CommandLine/src/CommandLine/Tui/Mail/MailDetailView.cs Uses PaneBorders focus language for mail detail frame.
src/Nitro/CommandLine/src/CommandLine/Tui/Input/TuiMessage.cs Adds graph-related TUI messages (projection toggles, filters, epic collapse/expand).
src/Nitro/CommandLine/src/CommandLine/Tui/Input/KeyMap.cs Moves global bottom-edge binding from Shift+G to End; updates docs.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/TreeView/GraphTreeRow.cs Defines rows for graph tree projection (connectors + relationship summaries).
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/TreeView/GraphHierarchyNode.cs Defines hierarchy node structure for tree projection.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/TreeView/GraphHierarchy.cs Builds parent/child hierarchy deterministically from graph model.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphWaveRenderer.cs Renders wave headers/separators for graph layout layers.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphRenderResult.cs Captures rendered canvas + route geometry for metrics and interactions.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphRenderFooter.cs Adds graph canvas metrics footer line (currently has interpolation bug).
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphEdgeStyles.cs Centralizes edge styling and selection styling.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphEdgeRoute.cs Models routed edge span points for hit-testing/selection.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphEdgeRenderOptions.cs Defines edge rendering configuration (styles + filter toggles).
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/CellOwners.cs Provides allocation-light ownership tracking for buffer cells.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/CellBuffer.cs Implements a styled 2D cell buffer with ownership + priority rules and segment rendering.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/CanvasViewport.cs Defines rectangular viewport for cell-buffer rendering.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/CanvasDirections.cs Defines line-stroke direction flags for cell connectivity.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/CanvasCell.cs Defines the rendered glyph/style/owners at one canvas coordinate.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/OrderedCoordinateAssigner.cs Assigns node coordinates while preserving layer order.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/LongestPathLayering.cs Assigns layers using longest-path approach with stability hints.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/LayoutVertex.cs Defines layout vertices (real nodes + dummies) for ordering/minimization.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/LayoutSegment.cs Defines adjacent-layer segments used by crossing minimization.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/LayoutArc.cs Defines directed arcs through the layout pipeline (supports reversal).
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/IGraphLayeringStrategy.cs Interface for layer assignment strategies.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/IGraphCoordinateAssigner.cs Interface for cell coordinate assignment strategies.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphNodeSize.cs Models node size normalization prior to placement.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphLayoutResult.cs Captures one full layout frame (nodes + edge spans + metrics).
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphLayoutPoint.cs Represents integer layout coordinates.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphLayoutNode.cs Captures placed node geometry and ordering.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphLayoutMetrics.cs Captures crossing-minimization metrics/observations for verification.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphLayoutEdgeSpan.cs Models adjacent-layer edge spans after layering.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphLayoutCandidateObservation.cs Records before/after candidate changes for testing/diagnostics.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Layout/GraphCycleGuard.cs Makes graph acyclic for layout by deterministically reversing DFS back edges.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphSearchProjectionContext.cs Maps visible matches to reduced/canvas representatives deterministically.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphReductionOptions.cs Defines hide/label/epic/collapse options and caps for graph reduction.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphReducer.cs Implements filtering, epic collapsing, node caps, and reversed-edge marking.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphParentMap.cs Builds canonical parent map with deterministic cycle detachment.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphNode.cs Defines graph node representation with board-status coloring semantics.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphModel.cs Defines the deterministic graph model shape.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphKeyMap.cs Adds graph-specific key bindings layered ahead of global bindings.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphFilterForm.cs Adds label/epic filter form UI for the graph tab.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphEdgeKind.cs Defines graph edge kinds (Blocks vs ParentChild).
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphEdge.cs Defines directed edge model with reversal flag.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/GraphDataLoader.cs Loads tasks/dependencies/labels/blocked map into a graph model.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/CanvasView/GraphCanvasText.cs Encodes/truncates text to single-cell characters for canvas rendering.
src/Nitro/CommandLine/src/CommandLine/Tui/Graph/CanvasView/GraphCanvasNodeRenderer.cs Measures/renders nodes in boxed/compact styles into the cell buffer.
src/Nitro/CommandLine/src/CommandLine/Tui/Details/TaskDetailView.cs Applies PaneBorders focus language to task detail sidebar/body frames.
src/Nitro/CommandLine/src/CommandLine/Tui/Board/TaskBoardStatus.cs Extracts board column resolution logic into a shared helper.
src/Nitro/CommandLine/src/CommandLine/Tui/Board/ColumnDefinition.cs Updates docs to reflect focus language and style responsibilities.
src/Nitro/CommandLine/src/CommandLine/Tui/Board/BoardMode.cs Relies on border style reassignment to recolor header; avoids bold borders.
src/Nitro/CommandLine/src/CommandLine/Tui/Board/BoardDataLoader.cs Uses TaskBoardStatus.Resolve and avoids redundant blocked fetch for Deferred.
src/Nitro/CommandLine/src/CommandLine/Tui/Agents/AgentDetailView.cs Applies PaneBorders focus language to agent detail frame.
src/Nitro/CommandLine/src/CommandLine/ThrowHelper.cs Adds ThrowHelper helpers for graph layout spacing argument validation.
src/Nitro/CommandLine/src/CommandLine/Services/Tasks/TaskStore.cs Adds bulk GetTaskLabelsAsync query returning grouped labels per task.
src/Nitro/CommandLine/src/CommandLine/Services/Tasks/TaskLabels.cs Adds DTO for grouped labels per task id.
src/Nitro/CommandLine/src/CommandLine/Services/Tasks/ITaskStore.cs Adds GetTaskLabelsAsync API to support bulk label reads.
src/Nitro/CommandLine/src/CommandLine/Commands/Agent/AgentTuiLauncher.cs Adds Graph tab to the unified agent TUI launcher and updates docs.
Review details
  • Files reviewed: 126/132 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/Nitro/CommandLine/src/CommandLine/Tui/Graph/Render/GraphRenderFooter.cs Outdated
Comment on lines +702 to +706
var lines = TrimTrailingNewline(console.Output.Split('\n'));
Assert.Equal(height, lines.Length);
Assert.Contains('╰', lines[^1]);
Assert.All(lines, line => Assert.True(
line.Length <= width, $"Expected row width <= {width} but was {line.Length}: '{line}'"));
Comment on lines +36 to +38
// assert: a heavier box, not bold text, is what marks focus - see
// https://github.com/ (hc-11-04h): bold box-drawing glyphs render
// misaligned in some terminals.

This branch has not been deployed

No deployments
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.

2 participants