Uh oh!
There was an error while loading. Please reload this page.
feat: Run Inspector aesthetic pass — status badge, metric cards, branded chrome - #13
Conversation
jack-champagne
left a comment
There was a problem hiding this comment.
Gave it a look — nice aesthetic pass, CI green, no blockers. A couple of should-fixes.
Worth fixing
- The completion relay (
postCompletion/bufferedCompletionreplay + the webviewcompletedmessage) has no test coverage — that's net-new behavior. #runlabelis 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"><0||0></span> Run Inspector</div> | ||
| <span id="runlabel" class="runlabel"></span> |
There was a problem hiding this comment.
Styled but never populated anywhere — renders empty.
…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>
a8277e4 to
c7dd17bComparefd9bded to
b64dcb8Compare…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
commented
Jun 22, 2026
@jack-champagne the empty |
jack-champagne
commented
Jun 26, 2026
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
|
jack-champagne
left a comment
There was a problem hiding this comment.
Approving — solid reskin. Please fix the description; #runlabel / aborted-color are cheap cleanups. Live-render is covered by #23.
Uh oh!
There was an error while loading. Please reload this page.
feat(vault): first-run setup popup → local personal vault (#13)
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-loadheader and a footer of developer telemetry (Hz,post→recv,last load Nms, raw Ipoptf/inf_pr/inf_du). This reskins it as a research instrument:<0||0>amico mark (violet pill) + "Run Inspector", a runId-style label slot, and a status badge on the right.isFinalsignal.Hz / post→recv / last-loaddev telemetry is dropped.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 onAMICODE_ITERand 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).🤖 Generated with Claude Code