Skip to content

fix(tui): restore the dag inspector's own structure, keep only the vocabulary - #138

Merged
LeXwDeX merged 1 commit into
devfrom
fix/dag-inspector-vocabulary
Jul 29, 2026
Merged

fix(tui): restore the dag inspector's own structure, keep only the vocabulary#138
LeXwDeX merged 1 commit into
devfrom
fix/dag-inspector-vocabulary

Conversation

@LeXwDeX

@LeXwDeX LeXwDeX commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Summary

The previous revision (#137) transplanted chat's structure instead of learning its design language. This PR keeps the vocabulary and gives the inspector its own structure back.

What was wrongly imported

Removed Its meaning in chat What it was doing here
42-wide right sidebar + backgroundPanel container for ambient session metadata (MCP, todos, context) — optional held the workflow list, which is primary navigation
width > 120 gate sized for that optional metadata made primary navigation vanish on narrow terminals
SplitBorder rail-and-panel block marks one utterance in a stream wrapped the workflow summary, which is persistent state

The tell was the symptom: the workflow list disappearing below 120 columns. #137 treated that as "responsive not implemented" and copied chat's breakpoint to fix it, entrenching the transplant rather than questioning it. Primary navigation should not have a "disappeared" state at all.

Structure now derives from what this screen is

A full-screen inspector: title row → always-present navigation pane → content pane → detail pane → footer. Navigation width is clamp(18, 32, width * 0.3), derived from the pane's own needs, so it narrows instead of disappearing:

width=110                                        width=70
|  DAG Evidence pipeline        2 workflows  |   |  DAG Evidence pipeline    2 workflows  |
|                                            |   |                                        |
|  • Evidence pipeline  1/4   running · 3 no |   |  • Evidence pi 1/4   running · 3 nodes |
|  • Second workflow    0/2                  |   |  • Second work 0/2                     |
|                       wave 1 · 1 node      |   |                wave 1 · 1 node         |
|                         ✓ collect build    |   |                  ✓ collect build       |
|                                            |   |                                        |
|                       wave 2 · 2 nodes     |   |                wave 2 · 2 nodes        |
|                         ⠋ analyze General. |   |                  ⠋ analyze GeneralPurp |

Only the vocabulary is borrowed

  • Regions marked by the panel surface + padding rhythm rather than drawn box characters — which also settles the original "the bottom rule looks misaligned" complaint by removing the rules entirely
  • Token semantics: text body, textMuted metadata, backgroundElement secondary selection, primary + selectedForeground() for the cursor, status colours for state
  • Bold reserved for identity (DAG) and section headers (wave N); body and metadata never bold

Kept from #137: cursor-key convergence (↑↓ nodes, ←→ workflows, return, escape), the selection colour layering, the empty-state guidance, and the tightened lint ratchet.

Test plan

  • tsgo --noEmit clean; prettier --check clean
  • oxlint on the changed component: 0 warnings
  • Lint ratchet at 4690: PASS
  • Full TUI suite: 233 pass / 0 fail
  • The width regression test now asserts the inverse invariant — the workflow list is present at 130, 100 and 70 columns — with a comment recording why the previous gate was wrong, so the mistake cannot silently return

…cabulary

The previous revision transplanted chat's structure instead of learning its
design language. Three chat-specific structures were imported and are now
removed:

- The 42-wide right sidebar. In chat that container holds ambient session
  metadata; here it held the workflow list, which is primary navigation.
- The > 120 width gate that came with it. A threshold designed for optional
  metadata made primary navigation vanish on narrow terminals; the earlier
  "responsive" fix copied chat's breakpoint and entrenched the mistake
  instead of questioning the transplant.
- The SplitBorder rail-and-panel block. In chat that marks one utterance in a
  stream; the workflow summary is persistent state, not an utterance.

Structure now comes from what this screen actually is, a full-screen
inspector: title row, always-present navigation pane, content pane, detail
pane, footer. Navigation width is derived from the pane's own needs,
clamp(18, 32, width * 0.3), so it narrows instead of disappearing.

Only the vocabulary is borrowed: regions are marked by the panel surface plus
a padding rhythm rather than drawn box characters (which also settles the
original misaligned-rule complaint), token semantics for text/textMuted/
backgroundElement/primary, and bold reserved for identity and section
headers.

The width regression test now asserts the inverse invariant: the workflow
list is present at 130, 100 and 70 columns.
@LeXwDeX
LeXwDeX merged commit 8101ded into dev Jul 29, 2026
4 checks passed
@LeXwDeX
LeXwDeX deleted the fix/dag-inspector-vocabulary branch July 29, 2026 15:19
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.

1 participant