Skip to content

UI review fixes: curve-drag perf, route intent, register cleanup#29

Closed
shiftedx wants to merge 17 commits into
ui-improvementsfrom
ui-review-fixes
Closed

UI review fixes: curve-drag perf, route intent, register cleanup#29
shiftedx wants to merge 17 commits into
ui-improvementsfrom
ui-review-fixes

Conversation

@shiftedx

Copy link
Copy Markdown
Owner

Summary

Lands the P1–P2 findings from the 2026-06-11 design + performance critique of the reworked web UI (plan: docs/superpowers/plans/2026-06-11-ui-review-fixes.md). Stacked on ui-improvements (PR #28).

Performance (the headline interaction: dragging a curve point with preview on)

  • Stop effect tests from reassigning the whole snapshoteffectState.output has zero consumers (verified incl. the support bundle), yet the base-feel preview rewrote the snapshot every 35 ms, re-running ~60 snapshot-derived $: statements per tick. Same-session A/B: frame p95 26.3 ms → 16.7 ms (vsync floor).
  • rAF-coalesced curve drags — one application per animation frame (1000 Hz mice no longer multiply handler work), bounding rect cached at drag start (no forced layout per pointermove), redundant second normalization skipped per point edit.
  • Saved-rail diff debounced (100 ms trailing) — scoped probe: rail DOM mutations during a 240-move drag dropped from per-event to 0, one recompute after settle. Save/Discard/dirty ride their own synchronous signature path.
  • Idle churn cuteffectActivityUntil, effectStatusById (a prop of 5 panel instances), and the button-mapping session no longer rebuild with identical contents on every 1 Hz snapshot tick.
  • New measurement harness: web/scripts/curve-drag-budget.mjs (mutations/move + frame percentiles over a scripted 240-move drag). Note: absolute numbers are environment-sensitive; the wins above were measured as same-session A/Bs.

Routing

  • Deep links / F5 on Tuning no longer bounce to Status forever — the requested view is parked as intent, the hash is preserved while the first snapshot loads, and the intent promotes when readiness flips. Explicit navigation always wins over a parked intent.
  • Permanent guard bounces now explain themselves ("Button mapping needs a game selected in Tuning first.").

Register / copy law

  • "HID" removed from user copy (Support panel, onboarding); legacy* identifiers renamed (oldRouteRedirects, fallbackCopy, previous_soft_l2_trigger_curve_points — the Rust fn is internal-only, not serde-visible; needs this PR's CI for compile proof); source-audit pattern tightened to /legacy/i so camelCase can't evade it again.
  • Fonts self-hosted via @fontsource variable packages — the render-blocking Google Fonts @import is gone (offline/LAN hang risk eliminated), and the Space Grotesk/Inter Tight remnants are deleted: the type system is now actually Inter-only (+ JetBrains Mono for literals). User-approved at checkpoint.
  • Utility toolbar contained — ambient bind-address readout dropped (still in the select's title), and below 760 px the toolbar collapses to one quiet disclosure row so the status sentence leads the screen.
  • Parked HUD-era panels (Trigger curve strip, Base Haptics, Telemetry Stream chrome) now live behind a single calm "More tuning controls" disclosure below the canvas — nothing previously rendered is lost.
  • Cmd/Ctrl+S saves from the Tuning view (same action and toasts as "Save changes").

Process

Every task was implemented by a fresh subagent and passed two-stage review (spec compliance, then code quality); review findings (drag-harness port leak, a stale-intent navigation race, a semantics-losing Rust rename) were fixed and re-reviewed before landing.

Full gate (npm run check) green at every commit and at HEAD. The deferred P3 backlog (orphaned dualsense/focus/ PNGs ~156 KB, rail typography, Edge-slots copy, Status desktop layout, emoji glyph, bottom-bar padding) is documented in .impeccable/critique/2026-06-11T05-34-28Z__web-src.md (local).

🤖 Generated with Claude Code

shiftedx and others added 17 commits June 11, 2026 00:50
…malization

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d, audit catches camelCase

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ct-check naming

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s and Google Fonts import

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nd-address readout

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@shiftedx shiftedx deleted the branch ui-improvements June 11, 2026 15:14
@shiftedx shiftedx closed this Jun 11, 2026
@shiftedx shiftedx deleted the ui-review-fixes branch June 11, 2026 15:18
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