Skip to content

UX pass: Variant B — cockpit-bar workbench - #1

Merged
halaprix merged 2 commits into
masterfrom
ux/workbench-b
Jul 29, 2026
Merged

UX pass: Variant B — cockpit-bar workbench#1
halaprix merged 2 commits into
masterfrom
ux/workbench-b

Conversation

@halaprix

Copy link
Copy Markdown
Owner

Implements the approved SlotScope Workbench B.dc.html mock per the implementation prompt: the full measure loop (compile → deploy → call → step the trace → read named accesses) works on one screen at ≥75rem, and the storage picture never leaves the screen while stepping.

What changed

  • 56dvh three-pane face (was 66dvh): Source · Assembly · Probe pane (Storage | Trace segmented modes, role="tablist"). Trace mode auto-enters when a call completes; a revert auto-selects the Forensics tab; manual flip back any time.
  • Live storage strip pinned above the trace tabs at every cursor position: one mini 32-byte band per touched slot (byte 31→0), owner-hued static cells with full title/aria-label, hatched padding, keccak-derived slots as labeled derived bands. Bytes written up to the cursor fill amber with a caption naming slot · [hi:lo] · resolved label · new value · step. Amber narrows to the proven changed byte range (old→new diff); a first-touch write honestly claims the whole word.
  • Cockpit bar: full-width, fixed-height — six steppers, scrubber, cursor facts, outcome line (gas · steps · returns). Cursor keeps driving the assembly-row + source-range highlights.
  • Execute strip: address chip (Vault @ 0x… · local · cancun), Deploy locally/Redeploy, Abort, compact per-function forms; unsupported types disabled with the honest reason inline.
  • Source pane docks the Contracts picker and a DIAG · n toggle in its header; the diagnostics strip expands inside the pane, auto-opens on error-severity diagnostics, shows byte ranges and "(whole file)".
  • Lower grid is now Share (URL field permanently rendered at fixed height — the layout-shift pain point is gone) + Challenges. Narrow screens stack in the same order.
  • Mechanics: ExecutePane's logic moved verbatim into useExecutionSession(); ExecuteStrip, CockpitBar (reusing TraceScrubber), ProbePane, LiveStorageStrip, ForensicsView are thin composition over the existing tested components. ExecutePane.tsx and TracePane.tsx deleted.

Honesty notes

  • All EXACT/INFERRED/UNRESOLVED wording, raw fallbacks, "not tracked"/"not supported" notes, the keccak "not expanded" note, and the as-compiled environment echo survive verbatim.
  • Amber appears only on measured facts (bytes proven written); resolution stays border-treatment + mark, never hue; owner hue stays identity with text chips.

Selector / test changes (as required by the prompt)

Change Where
Region Contracts removed → assert the Contract combobox (same accessible name, now in the source pane header) compile.spec.ts, lifecycle.spec.ts
Region Diagnostics is toggle-gated → specs open DIAG · 0 first when no errors (errors auto-open it, so error-path specs unchanged) compile.spec.ts, lifecycle.spec.ts
Probe pane section is landmark Probe; the inner static grid keeps landmark Storage axe landmark-unique fix; no spec change needed
Machine state lives behind the State tab → specs click it first trace.spec.ts (X5, replay-consistency)
Events live behind the Events · n tab → specs click it first events.spec.ts, a11y-v1.spec.ts
Runtime storage group lives in the probe pane's Storage mode → spec flips mode semantics.spec.ts (S5)
execution-outcome moved to the cockpit bar (same testid, same text facts) none needed
Deploy button reads Redeploy after first deploy (Deploy locally on fresh state — specs unchanged) none needed
Benchmark harness asserts DIAG · 0 instead of the always-open diagnostics region scripts/benchmark-report.ts

New testids: cockpit-bar, live-storage-strip. Unchanged and load-bearing: trace-pane, trace-cursor-facts, trace-stack/memory/io, trace-observations, events-panel, revert-forensics, jump-to-revert, deployed-address, share-url, share-size, migration-badge, byte-diff, keccak-flow*, storage-record, all stepper/scrubber aria-labels.

Verification

  • 209 unit + 57 e2e green (axe both motion modes, reduced-motion equivalence, 200% zoom with only the grid scrolling internally, forced-colors, keyboard parity)
  • Token discipline gate clean (no raw color literals outside tokens.css)
  • Benchmark PASS (p95 action-to-paint 200.7 ms / 2000 ms budget)
  • Out-of-scope surfaces untouched: compile spine, session codec, challenge content, tour, palette

🤖 Generated with Claude Code

halaprix and others added 2 commits July 29, 2026 10:13
Implements the approved SlotScope Workbench B mock: the full measure
loop (compile → deploy → call → step → read named accesses) now works
on one screen at ≥75rem, with storage never leaving the screen while
stepping.

Layout (top to bottom): header (unchanged; settings already lived
there) · 56dvh three-pane face — Source (contracts picker + DIAG · n
toggle dock into the pane header; the diagnostics strip expands inside
the pane and auto-opens on errors), Assembly (unchanged), and the new
Probe pane (Storage | Trace segmented modes; Trace auto-entered when a
call completes, Forensics tab auto-selected on a revert) · full-width
cockpit bar (steppers, scrubber, cursor facts, outcome — fixed height,
visible in both probe modes) · slim execute strip (address chip,
Deploy/Redeploy, Abort, compact per-function call forms with honest
disabled reasons) · lower grid reduced to Share (URL field permanently
rendered — no more layout shift) and Challenges.

The probe pane's Trace mode pins the LIVE STORAGE STRIP above the
detail tabs: one mini 32-byte band per touched slot, owner-hued static
cells, hatched padding, and the bytes written up to the cursor filled
amber with a caption naming slot, byte range, resolved label, and new
value. Amber narrows to the PROVEN changed range (old→new byte diff);
a first-touch write honestly claims the whole word. Keccak-derived
slots render as derived bands with their resolution label in the cell
title. Detail tabs: Accesses (default; unchanged observation rows) /
State (unchanged machine panes) / Events / Forensics.

Mechanically this is a state lift, not a rewrite: ExecutePane's logic
moved verbatim into useExecutionSession(); ExecuteStrip, CockpitBar
(reusing TraceScrubber), ProbePane, LiveStorageStrip, and ForensicsView
are thin composition over the existing tested components
(ObservationList, MachineStatePanes, EventsPanel, StorageGrid,
RuntimeStorage). TracePane and ExecutePane are deleted.

Gates: 209 unit + 57 e2e green (axe both motion modes, reduced motion,
200% zoom, forced colors), token discipline clean, benchmark PASS.

Part of: slotscope-bnq

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two reserved-hue violations from the design review, both against our
own rule that owner hue is identity and pin cyan is pinned state:

- The = exact pill wore --ss-color-owner-b, so an exact resolution next
  to an owner-b chip read as ownership. Resolution pills now use a
  dedicated neutral tier (--ss-color-res-fg/-border, from the mock's
  res chips) — the border style and the = / ≈ / ? mark carry the
  status, exactly as the design language demands.
- COLD chips wore pin cyan and read as pinned. Cold/warm is already
  text; the chip drops to the label tier.

Also: the probe header's CALL # now counts every executed call since
deploy (a failed replayed call no longer skews the index the way the
success-only session log could).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@halaprix

Copy link
Copy Markdown
Owner Author

Review fixes landed in 83abd62: resolution pills moved off owner-b onto a dedicated neutral res tier (border style + mark carry status), COLD chips off pin cyan onto the label tier, and the probe header's CALL # now counts every executed call since deploy. 57 e2e green, token gate clean.

@halaprix
halaprix merged commit 83fd429 into master Jul 29, 2026
6 checks passed
@halaprix
halaprix deleted the ux/workbench-b branch July 29, 2026 08:32
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