Repository navigation
feat(compare): the Compare workspace absorbs the catalog - #67
Merged
obvious-autobuild[bot] merged 3 commits intoOct 11, 2026
Merged
obvious-autobuild[bot] merged 3 commits into
obvious-autobuild[bot] merged 3 commits into
Conversation
Fold the comparison read into #tab-compare: the compare bar, the chips and a new "Side by side" panel (W, worst limit, dW difference, compared Thomson profiles) render in the Compare workspace, above the catalog search and clouds; the Replay room keeps its four single-shot strips and loses the in-grid compare chrome (bar row, dW strip, cmp-on grid). Replay's "Compare..." action navigates to #/compare with the shot on screen preloaded as the reference chip; one-id compare routes mount the reference and prompt for more; legacy ?compare= links canonicalize into the hash grammar and land here. The bar gains Share (copies the URL - the route, filters and selection) and "Retry failed" now refetches every failed chip; re-pointing the reference to an already-ready shot repaints the bar so a stale failure header cannot survive the move. Single-shot picking no longer re-points a live compare - the two workspaces are independent. The /db failure catch now blanks only the catalog-clouds panel so the bar, search and side-by-side read survive a /db outage (JS-07 assertion updated to the targeted handler). NO SEMANTIC CHANGES to the compare flow: per-shot chip states, abort- on-supersede, reference semantics, 2-6 shot limit and the shared time cursor are unchanged; the cursor now spans both workspaces' time panels. Co-authored-by: Tapan Ganatma Nakkina <[email protected]>
The guided-study prose still said "the machines in that database" for the scaling-law fits' source catalog; the surface itself is already the catalog. Lesson tab values and data-guide anchors (db, db-tau, db-ops, holdout) are untouched - the router normalizes them and the anchors are the guided-study compatibility contract. Co-authored-by: Tapan Ganatma Nakkina <[email protected]>
startCompare's sub-two-shot early return painted the bar but never drew the read panel, so a "Compare..." preload or a one-id deep link showed three empty labelled boxes. Below two shots the read now shows the reference's own measured curves (W, worst limit, Thomson at the cursor); the dW difference strip stays hidden until a second shot makes a difference to read. Verified in the browser against this head. Co-authored-by: Tapan Ganatma Nakkina <[email protected]>
obvious-autobuild
Bot
merged commit Oct 11, 2026
e53fd63
into
release/task-mode-ia-redesign-20261011-170103
3 checks passed
This was referenced Oct 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Human author: Tapan Ganatma Nakkina ([email protected])
Why
The redesign's three workspaces name the three jobs — Replay, Compare, Explore — but "Compare" did not yet exist as a place: comparison was an overlay that re-carved the Replay grid, and the shot catalog lived in its own "Shot database" tab under a fourth name. Picking shots to compare required bouncing between two tabs, and the same quantity (stored energy) was labeled kJ on one surface and MJ on the other.
What
One Compare workspace owns the whole comparison job (
web/replay.js,web/index.html,web/style.css):#tab-dbmarkup, search panel, results table and the two catalog clouds (τ_E vs IPB98, Greenwald × β_N) plus the surrogate holdout now live in#tab-compare, below the comparison read. The "Shot database" tab is gone from the header; the surface is named the catalog everywhere.#/compare/{id}with the on-screen shot preloaded as the reference (its chip resolves through the shared shot-load machine; the read shows the reference's own curves until a second shot joins). Legacy?compare=a,blinks canonicalize into the route. Share copies the full view URL — route, filters and selection; the srchSel mirror stays as the?compare=twin for checkbox restoration.#/dbfetch failure now replaces only the catalog-clouds panel, so the bar, read and search survive a statistics outage (asserted intest_web_checks.py).W_min/W_maxfilters and the read strips); the last "database" label in lesson copy now says scaling-law fits / catalog.Kept untouched on purpose: compare semantics that work — per-shot queued→fetching→ready/error chips with cancel/retry/drop, reference-first URL ordering, the selection Set, row-link and checkbox interactions, the shared time cursor. Lesson anchors (
db-tau,db-ops,holdout), theW_kJevent-hook name (test-locked) and thewindow.FusionLab/fusionlab:*contracts are unchanged.Acceptance criteria
/#/compare/30166,30192boots straight into Compare; both chips resolve; the side-by-side read draws (tc-1)grep -Rni "database" web/→ 0 hits; every stored-energy surface shows MJuv run pytest -q352 passed, 1 skipped (also re-run by the pre-push hook);uv run ruff checkclean;uv run mypy fusionlabcleanHow to Review
web/replay.jscarries the move: the db template now mounts in#tab-compare,startComparedraws the read below the bar, and the router's MOUNT map pointscompareat both.web/index.htmlloses the db tab;web/style.cssextends the existing tokens for the read layout. Lesson copy changes are inweb/lessons.json.W_kJevent hook (locked bytest_guide.py; the display unit is MJ).Test Evidence
Browser evidence recorded via
obvious autobuild uploadagainst tested headf9946889ac1432b97563a9d63b37aab331812078:fl_cmmbVhSo(chips fetching) →fl_elCizScU(2/2 ready, W/limit/ΔW/Tₑ side by side)fl_lyPWQjyE(Share click recording, 1440×900) +fl_KTrFa9HH(the view URL booted fresh: 2/2 ready, traces restored)fl_rjDC3kWd(Replay before) →fl_3CAYEfp1(one-shot compare: reference chip ready, reference curves in the read)fl_o4NfuiHs(#99999999 — failedwith the server's honest error + "Retry failed") →fl_jvS1Vkjv(Drop converges to a 1/1 reference compare)Sibling PRs
🔗 Obvious Project · 🧵 Obvious Thread · 🔀 Obvious PR Artifact