Repository navigation
THI-443: review walkthrough — two-column stops, legible diagrams, reviewed marks, type and color - #49
Merged
tdody merged 49 commits intoNov 4, 2026
Conversation
…-width row, code column beside the text, reviewed.json marks, collapsed comment box, scoped type and color (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t to browser check (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t, zoom via real buttons, flock'd reviewed.json that never recreates a cleared dir, refetch/draft/sig fixes, contrast gaps, formatted tests, trailers (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…into stop.diagrams, keeps stop.source and the problem's markdown (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…d and withMark for per-stop reviewed marks (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…h hunks) and hidden (missing, generated, unchanged); hiddenSummary and evidenceIndex (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…verlaps, pinned sig, tighter tests, helpers grouped by page vs queue (review of THI-443 tasks 1–3) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…iew of tasks 1–3) (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…an task (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… text fg-0, lines fg-2, Hanken Grotesk 14px), oklch tokens converted to hex on a 1×1 canvas (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…a click target plus a full-size button; one lightbox at the app root (focus on its scroller, Tab cycles, Esc/backdrop/✕ close, focus returns) (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…egory colors, not primaryColor's hue rotation; drop undefined tokens instead of nulling mermaid's keys (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…maidRender.js; Mermaid.jsx re-renders from source for the lightbox (fresh ids), ignores clicks on links inside the diagram, and disables the full-size button until it's drawn (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… a diagram's source for its full-size view, ignore a drag that ends on the backdrop, pure nextFocus, and skip refocus for a detached opener (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…/ re-rendering from source, labelled ⤢ buttons, lightbox under toasts (review of tasks 4–5) (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…et_reviewed (thread lock + flock on the review dir for dev/prod, atomic, removes the file when empty, never creates the dir) (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…stop/sig, 404 without a walkthrough or when cleared mid-request); the walkthrough GET carries reviewed (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…htbox needs mousedown+mouseup+click all on the backdrop to close, and caps the font-load wait at 1.5s; test Mermaid's own ⤢ open via options.vnode (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…contents list, stop cards with a diagram row and prose beside the code column, reviewed marks that fold a stop, collapsed comment box (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…f tasks 6–7) (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…racing a mark), RecursionError on hand-mangled JSON reads as empty, non-ASCII marks write literally, the walkthrough route's is_file check moves off the event loop (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…1:1 under the light label); chain the lightbox test's options.vnode hook instead of clobbering it (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…000px container fallback, sticky code column, kind-colored cards and tokens, five-step type scale, ≥4.5:1 text, lightbox (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ts at the THI-443 spec, the skill says diagrams render above the text, CLAUDE.md names the spec Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…mponentUpdate, not compat's memo, whose global hooks rewrite onChange), evidence and prose memoized per stop, a file block past 300 lines waits behind 'show N lines' and a row or cite click opens it (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n, cancel or send (not when a draft remounts it open), cancel discards the draft, one always-present status note, the link is named for its stop (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…le row ('2 comments · 1 open'), since folding hides the owning pane's replies; tests route comments to their stop and unknown titles to 'unattached comments' (THI-443)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ne at a time and, when its newest click settles, shows the last server-confirmed mark (seeded from an applied refetch); errors show detail only when it's a string, not FastAPI's 422 list (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…abindex -1), stop and comment headings demote below the stop's h3, each code column is named for its stop and each reviewed toggle described by the stop title, the contents check is role=img 'reviewed', inert cite chips are aria-disabled (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…lways-present role=status line), code columns blame the worktree only when the badge does, no empty problem block, 'no stops in this walkthrough', and reveal asks the column's overflow so a static column scrolls the page; tests pin the header PR link (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nt reworded (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…iles over 300 lines start collapsed (review of task 8) (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…efetch can't move the open state to another file; stop title ids are stop-<id>__title, which no stop id can equal; cancel is held while a comment sends (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rflow-wrap on unbreakable content, stop head wraps instead of overflowing, one focus-visible ring for the view, card-fill overrides for shared chips/code/table/tok-comment, lightbox and sticky-column polish (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…, .wt-empty-stops, always-present .wt-error/.wt-comment-note hide when empty, a focus-visible ring on the keyboard-focusable stop card, demoted headings brightened to fg-0 (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…he a11y tree while empty, legible comment headings, disabled-cancel state, full-contrast table stripes and prose tok-comment/tok-meta, wider breakpoint floor for an 80-char code column, solid lightbox panel, diagram scroll moves to the svg host (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…o wide flowcharts' labels stay legible; the svg host scrolls sideways to it instead of shrinking the drawing (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ars (switch at 1050px); diagrams keep ≥75% of natural width and scroll in their box; the full-size view has a solid panel (browser check) (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… mono UI face can't push it past the 1050px switch, diagram sideways-scroll scoping covers a mermaid fence nested in prose, syntax-comment color also covers the problem statement's code (outside any card, on --bg-term), corrected character-count and contrast comments (THI-443) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…sh it past the 1050px switch; the code column holds ~70 chars at its floor; the 75% diagram floor holds for wide diagrams (final CSS review) (THI-443) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rmaidRender.js owns init and token conversion, mermaidTheme({color, font}), the sticky column's +32px cap (final review) (THI-443)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ed.json's tmp on any write failure A lone surrogate round-trips through JSON (ensure_ascii=False) into write_text, which raises UnicodeEncodeError, not OSError; _check_stop now 400s it before any file is touched, and the cleanup catches BaseException so a non-OSError failure still can't leave reviewed.json.tmp behind. Also covers _set_reviewed's is_file() guard (a dir holding only comments.md) with a dedicated 404 test. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ss, keep the lightbox from scrolling the page shut appliesRefetch(marks, settledAtStart) pulls the untested refetch guard out of Walkthrough.jsx into a pure, tested helper next to markQueue. closeLightbox refocuses `from` with preventScroll, since it can be a stop section whose own scrollIntoView-on-focus would snap the page back to it. wt-stop-body has no CSS and no test asserting it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ntents list, fold the mermaid-zoom button's position, regroup the radius/kind tokens .walkthrough .md-doc :is(.md-icode, .md-link) joins the overflow-wrap: anywhere group, so a long autolinked URL or identifier can't scroll the page sideways. .wt-intro > .wt-toc gets grid-column: 2 so a contents list with no problem paragraph lands beside where it belongs, reset to auto under the 1050px single-column switch. The global .md-mermaid-zoom now carries top: 0; right: 0 directly — the walkthrough is the only place it's ever drawn, so the .walkthrough override styled it twice for nothing. The --kind-* block moves after --r-lg so it no longer splits the radius tokens. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…43's D6 from the queue spec's, rename vague describe labels mermaidTheme.js's token conversion moved to mermaidRender.js's tokenHex; the comment still named Mermaid.jsx. periscope/reviews.py and routes/reviews.py had a couple of bare "(D6)"s that meant THI-443's D6 (reviewed marks) while others in the same files already said so and still others correctly mean the 2026-10-26 spec's D6 (the queue) — now spelled out everywhere THI-443's is meant. Three vitest describe blocks were tagged "(THI-443 review)", which names no decision; renamed to what they test. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Collaborator
Author
|
@tomplex, could you review this one? It's a big visual change to the review walkthrough, so I'd suggest trying it locally before reading the diff. The bundle is committed, so there's no build step: git fetch origin
git worktree add .claude/worktrees/thi-443 origin/thibaultdody/thi-443-review-walkthrough-full-width-layout-legible-diagrams
cd .claude/worktrees/thi-443
PERISCOPE_PORT=17375 PERISCOPE_DEV=1 uv run server.pyThen open http://127.0.0.1:17375/, click ◉ reviews, and open any review that has a walkthrough, ideally one with mermaid diagrams. Worth trying:
When you're done, The spec is in |
…ources Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
tdody
deleted the
thibaultdody/thi-443-review-walkthrough-full-width-layout-legible-diagrams
branch
November 4, 2026 15:23
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.
Summary
Fixes THI-443. Rebuilds the review walkthrough view (
static/src/review/Walkthrough.jsx).Before this change:
The design is in
docs/superpowers/specs/2026-10-29-walkthrough-two-column-design.mdand the plan indocs/superpowers/plans/2026-10-29-walkthrough-two-column.md. CLAUDE.md's reviews row now points at that spec.Page
minmax(min(52ch, 440px), 72ch) minmax(540px, 1fr), switching to one column below 1050px (a container query on the scroller).Diagrams
parseWalkthroughlifts top-level mermaid fences intostop.diagrams. Nested ones stay inline.overlays/Overlays.jsx; inside#split-viewthe header would paint over it.split/mermaidTheme.js, with the DOM side insplit/mermaidRender.js). It waits for the UI font and follows Settings → Fonts.Reviewed marks
stopSigis an FNV-1a hash of the stop's source, with trailing whitespace trimmed, keyed by title in~/.claude/reviews/<repo>/<slug>/reviewed.json. A mark lapses when a re-prepare rewrites the stop.POST /api/reviews/reviewedreturns 400 for a bad stop or sig, and 404 with no walkthrough or when the review is cleared mid-request.fcntl.flockon the review dir, because dev and prod both write~/.claude/reviews, and they're atomic (temp file +os.replace).clear_reviewnow takes the same flock, so a mark can't leave a strayreviewed.json-only dir behind as an orphan queue row.Type and color: scoped to
.walkthrough, so file previews and the Reviews queue don't change, apart from the diagram theme.--fg-3coming in from shared styles (hunk heads, list markers, closed PR links, syntax comments) and links in comments.:root.Process
The spec and plan went through an adversarial review before any code. Each task then had a spec-compliance review and a code-quality review, several with multiple rounds, and the branch had a final whole-branch review.
Review findings fixed along the way:
memowould have installed global vnode hooks;Test plan
npm test: 1390 passed. New tests:stopSig/isReviewed, including a pinned hash vector;evidenceForgrouping;markQueueandappliesRefetch;WalkthroughView: header states, contents, cards, folding, cite wiring, large-file collapse and comment placement.uv run pytest -q: 2035 passed. New tests:read_reviewed/set_reviewed(corrupt input, flock, atomic write, never creating the dir) and the route (round-trip, 400s, 404s, mid-request clear, surrogate stops).bin/check: passes (3 pre-existing biome warnings in files this PR doesn't touch).static/distrebuilt and fresh.Follow-ups
🤖 Generated with Claude Code