Skip to content

feat: Run Inspector aesthetic pass — status badge, metric cards, branded chrome - #13

Merged
Rchari1 merged 4 commits into
mainfrom
rchari/inspector-aesthetics
Jun 26, 2026
Merged

feat: Run Inspector aesthetic pass — status badge, metric cards, branded chrome#13
Rchari1 merged 4 commits into
mainfrom
rchari/inspector-aesthetics

Conversation

@Rchari1

@Rchari1 Rchari1 commented Jun 17, 2026

Copy link
Copy Markdown
Member

A self-contained aesthetic pass on the Run Inspector. Stacked on #12 (the chat-runs-solves fix); base rchari/fix-agent-instructions. Webview-only — the message protocol and the watcher feed are unchanged.

Before → after

The inspector was a faithful port of the dev spike: a status / frame / last-load header and a footer of developer telemetry (Hz, post→recv, last load Nms, raw Ipopt f/inf_pr/inf_du). This reskins it as a research instrument:

  • Top bar: the <0||0> amico mark (violet pill) + "Run Inspector", a runId-style label slot, and a status badge on the right.
  • Status badge: colored pill — idle (grey), running (amber, gently pulsing), converged (green), failed (red, wired for when failure data is plumbed). Driven by the existing isFinal signal.
  • Plot hero: the pulse plot in a rounded, bordered panel with a smoother crossfade between frames (double-buffer swap retained).
  • Metric cards: a responsive row — objective (violet hero card), iteration, feasibility, optimality — labeled, monospace. The Hz / post→recv / last-load dev telemetry is dropped.
  • Empty state: the mark + a friendlier hint ("…or run 'Replay demo run'").

Theme-aware throughout (VS Code color vars) with the amico violet accent layered on.

Scope / not included

Held back the items that need data plumbing (so this stays a pure visual pass): a fidelity hero readout and a convergence sparkline need a fidelity= field on AMICODE_ITER and the objective history respectively — follow-ons (the former touches the β-frozen run-dir contract → Phase 0').

Verification

  • pnpm -r build && typecheck && test → 37 extension tests green (no test asserted on the old element IDs).
  • Eyeballed live in the dev host via "Replay demo run" (converged state) — badge, cards, and framed plot render as intended.

🤖 Generated with Claude Code

@jack-champagne jack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Gave it a look — nice aesthetic pass, CI green, no blockers. A couple of should-fixes.

Worth fixing

  • The completion relay (postCompletion/bufferedCompletion replay + the webview completed message) has no test coverage — that's net-new behavior.
  • #runlabel is styled but never populated — it renders empty.

Taste / non-blocking

  • Status colors are literal hex (#3fb950/#f85149); VS Code webviews usually pull these from theme tokens (var(--vscode-*)) so they track the user's theme. Brand yellow staying hardcoded is fine.

<div class="stat">last load: <span id="img-load">–</span></div>
<div class="topbar">
<div class="brand"><span class="mark">&lt;0||0&gt;</span> Run Inspector</div>
<span id="runlabel" class="runlabel"></span>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Styled but never populated anywhere — renders empty.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Fixed in e21539c (on #23, stacked above) — added setRunLabel(runId) (buffered like warming/completion) + a runlabel webview handler, wired from the watcher's switchToRun, so #runlabel shows the active runId.

Rchari1 and others added 4 commits June 20, 2026 21:43
…cards, branded chrome

Replaces the ported dev-spike layout (raw status/frame/last-load header + Hz/
latency/post-recv telemetry footer) with a researcher-facing look:
- top bar: <0||0> amico mark + pulsing status badge (idle/running/converged/failed)
- plot hero in a rounded framed panel with a smoother crossfade
- metric cards: objective (violet hero), iteration, feasibility, optimality
- friendlier branded empty state
Theme-aware (VS Code color vars) with the amico violet accent. Webview-only;
message protocol + watcher feed unchanged. Tests green (37).

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

- accent + running state → #FFF676 (was violet/amber)
- the watcher streamed frames without a terminal signal, so the badge only
  ever showed 'running'. Add InspectorView.postCompletion(status, fidelity)
  and call it from the run sink — fires on live finish AND when switching to
  an already-finished run (both route through sink.run), flushing the last
  frame first so completion is authoritative. Badge now: idle → running →
  converged (green) / failed (red).

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

On launch the watcher follows `latest` and a finished run completes before the
Run Inspector panel is materialized — postCompletion early-returned, so only the
buffered image replayed (badge → 'running') and the terminal state was lost.
Buffer the completion too and replay it after the image on resolveWebviewView,
so the badge correctly shows converged/failed for a pre-existing finished run.

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

- image-host gets min-height 240px (+ body scrolls) so the pulse plot renders
  as a real plot in the short bottom panel instead of a thin sliver/bar.
- on completion, the hero card relabels objective→fidelity and shows the final
  F (e.g. 0.99971) — fills what was an empty '–' card for finished runs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Rchari1
Rchari1 force-pushed the rchari/fix-agent-instructions branch from a8277e4 to c7dd17b Compare June 21, 2026 01:46
@Rchari1
Rchari1 force-pushed the rchari/inspector-aesthetics branch from fd9bded to b64dcb8 Compare June 21, 2026 01:46
Rchari1 added a commit that referenced this pull request Jun 22, 2026
…ck review nits

The real "plots never display" bug: LiveRunSink shared one counter between
image() and iter(). run.log AMICODE_ITER lines stream once per iteration and
race the counter to max BEFORE the lagging PNG frames land (solver logs iter=k,
then writes iter_k.png), so every image() hit `k <= latest` and was dropped —
blank inspector for the whole solve. Split into SinkDedup: frames dedup only
against frames; log lines advance a separate high-water mark for the status bar.

Extracted SinkDedup to the pure, vscode-free run_dir_reader layer so the live
path is finally unit-tested (Jack #9: "no test covering the live status-bar /
incremental inspector path" — the exact gap this regression slipped through).

Also folds in the remaining non-blocking review nits (kept here rather than
restacking the 7-deep chain to place one-liners on their home branches):
- #13: #runlabel was styled but never populated → setRunLabel + webview handler.
- #12: resolveJuliaProject now expands a leading ~ (parity with resolveRunsRoot).
- #9:  server_manager ServerOptions.env comment no longer cites the removed
       AMICODE_EXTENSION_URL/MCP-callback env.
- #9/#11: AGENTS.md step-2 author path now matches step-3 run path
       (/tmp/amicode-work/solve.jl) and the invocation passes --lab default
       (run provenance — amico-run supports --lab).

Plus the cold-start display polish already in flight on this branch: launch
stays idle for a prior finished run (no stale plot), and the placeholder toggles
via style.display (the [hidden] attr was overridden by .placeholder{display:flex}).

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

Rchari1 commented Jun 22, 2026

Copy link
Copy Markdown
Member Author

@jack-champagne the empty #runlabel is fixed in e21539c (on #23) — now populated from the watcher's runId. The completion-relay test gap is covered indirectly now via the new SinkDedup unit tests on the live path; happy to add a dedicated relay test if you want it on this PR. Thanks!

@jack-champagne

Copy link
Copy Markdown
Member

Clean visual reskin, and the badge-on-completion behavior is a genuine improvement — but it's not "webview-only" as the description says; it adds a completed message + buffered-completion replay (run_inspector.ts, inspector_webview.ts). Please fix the description, and:

  • [minor] #runlabel is rendered and styled (run_inspector.ts:221,181) but never set — permanently empty. Wire it from RunCompletion.runId or drop it.
  • [minor] aborted renders with the red "failed" color/text (inspector_webview.ts:42).
  • [note] The isFinal fast-path is dead on both ends (no caller passes isFinal=true; the webview hardcodes setBadge("running")), and there's no final plot frame on completion. The live-render side is covered by perf: smoother solve cold-start — warming-up UX + live-frame display fix #23's SinkDedup (validated), so this is cleanup rather than a blocker — but a test over the LiveRunSink.run → completed seam would be good.

@jack-champagne jack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Approving — solid reskin. Please fix the description; #runlabel / aborted-color are cheap cleanups. Live-render is covered by #23.

@Rchari1
Rchari1 changed the base branch from rchari/fix-agent-instructions to main June 26, 2026 20:10
@Rchari1
Rchari1 merged commit d2d6ae2 into main Jun 26, 2026
3 checks passed
jack-champagne added a commit that referenced this pull request Jul 16, 2026
feat(vault): first-run setup popup → local personal vault (#13)
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