Skip to content

Read node contents/diagram in place + zoom-decoupled legibility (PR-3/PR-4) - #87

Merged
mvalancy merged 1 commit into
developfrom
feat/node-expand-and-legibility
Jun 17, 2026
Merged

Read node contents/diagram in place + zoom-decoupled legibility (PR-3/PR-4)#87
mvalancy merged 1 commit into
developfrom
feat/node-expand-and-legibility

Conversation

@mvalancy

Copy link
Copy Markdown
Member

What & why

Finishes the node-inspector plan's last two phases, closing the "zoom does double duty" problem the user named — zoom was both navigation and the readability control, so reading a node's label or contents meant zooming all the way in.

PR-3 — expand-in-place peek

  • A ⛶ expand icon on every node card opens a readable Card / Contents / Diagram panel anchored to the node on the canvas, at full legible size regardless of canvas zoom.
  • Reuses NodeInspector (new compact + rootTestId props) + NodeContentRenderer (compact) + NodeSubgraphPreview — no duplication.
  • Tracks its node every frame via rAF + d3.zoomTransform (same technique as the inline-rename box), clamps to the viewport, and closes on Esc / graph change / when its node leaves the simulation.

PR-4 — zoom-decoupled legibility floor

  • The title (primary label) is wrapped in a counter-scaled .node-title-group so its on-screen size never drops below ~12px within the working zoom band — readable when zoomed out, not only when zoomed in. The title also appears across the band rather than past a single hard threshold.
  • The in-card description preview is now honest — truncates with instead of silently vanishing when too long.
  • Perf-safe: the per-frame counter-scale pass is skipped in dense-graph data-simplify mode; new code reads the live d3 transform (the currentTransform state has no .k).

Verification

  • New tests/diagnostics/node-expand-legibility.spec.ts: PR-3 anchored peek (Card/Contents/Diagram, fits viewport, glued through zoom, Esc closes) + PR-4 on-screen floor (title 14px at k=0.61 where native would be 8.6px).
  • Existing node-inspector diagnostic (PR-2) still green; smoke 5/5; typecheck + lint + build clean.
  • An adversarial multi-agent review pass was applied: honest-preview + title-opacity consistency across the build & data-poll paths, zoom-pass gating for dense graphs, and panel auto-close on node delete.

🤖 Generated with Claude Code

…ibility (PR-3/PR-4)

Closes the core "zoom does double duty" UX problem: zoom was both spatial
navigation AND the readability control, so reading a label/contents meant
zooming all the way in.

PR-3 — expand-in-place peek: a ⛶ icon on every node card opens a readable
Card/Contents/Diagram panel anchored to the node on the canvas (reuses the
NodeInspector with a new `compact` variant + NodeContentRenderer/NodeSubgraphPreview).
It tracks its node every frame via rAF + d3.zoomTransform (same technique as the
inline-rename box), clamps to the viewport, closes on Esc / graph-change / when
its node leaves the simulation.

PR-4 — legibility floor: the primary label (title) is wrapped in a counter-scaled
.node-title-group so its on-screen size never drops below ~12px within the working
zoom band (kept readable when zoomed out, not only when zoomed in); the title also
appears across the band, not just past one threshold. The in-card description now
truncates honestly with an ellipsis instead of silently vanishing. Perf-safe: the
counter-scale pass is skipped in dense-graph data-simplify mode; new code reads the
live d3 transform (the currentTransform state has no .k).

Verified: tests/diagnostics/node-expand-legibility.spec.ts (PR-3 anchored peek +
PR-4 on-screen floor), existing node-inspector diagnostic still green, smoke 5/5,
typecheck + lint + build clean. Adversarial review pass applied (honest-preview +
title-opacity consistency across build/poll paths, zoom-pass gating, panel
auto-close on delete).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🧪 Comprehensive Test Suite

  • Unit suites (Node 18.x & 20.x) — core, web, server, mcp-server: ✅ passed
  • Installer & deploy config: ✅ passed

Full-stack smoke gate runs in the CI workflow.

@mvalancy
mvalancy merged commit b8b602c into develop Jun 17, 2026
16 checks passed
@mvalancy
mvalancy deleted the feat/node-expand-and-legibility branch June 17, 2026 02:56
mvalancy added a commit that referenced this pull request Jun 18, 2026
…iority/status) (#110)

* LAYOUT-3: dashboard — compact summary + one dense status grid (was sparse/oversized)

On desktop the dashboard read as huge boxes with tiny content: a tall near-empty
"Total Tasks" banner and 9 single-digit status cards spread across 3 sparse
3-column rows. Make it clear/readable/organized:
- Total Tasks becomes a compact one-line summary strip (px-5 py-3) instead of a
  full p-8 hero.
- The 9 status cards collapse into ONE responsive grid (2 cols phone → 3 → 5 on
  desktop, gap-3, p-4) so they read as a tidy stat panel and the analytics
  section rises above the fold.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* EDIT-1: in-context node quick-edit popover (double-click) — title/desc/type/priority/status

Double-clicking a node now opens a compact, node-anchored quick editor instead
of only renaming the title — edit every field in context without the heavy
details modal (#87):
- Title + Description (inline text/textarea), Type + Status (chip pickers),
  Priority (% slider mapped to the 0–1 float). Status shows the canonical
  enum statuses (the card's "%" is derived from the enum, so a picker — not a
  raw %-slider — is the correct control; a literal % slider would have no field
  to write to).
- Each field saves immediately (optimistic updateWorkItems) with an undo entry;
  Esc / close button / graph-switch dismiss it. Single click+drag still moves
  the node (only a genuine double-click opens the editor).
- New presentational component NodeQuickEdit.tsx; the grow-flow still uses the
  inline rename box for naming brand-new nodes.

Follow-up (noted): timestamped status notes/comments (needs a metadata model)
and per-sub-element double-click targets.

Tests: tests/e2e/node-quick-edit.spec.ts @quickedit (2/2) — opens with every
field + Esc closes; title edit persists to the graph and reverts. THE GATE 5/5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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