Repository navigation
#202 — design-2 rich hover cards: model pills, format-badge reconstruction, overrides badge, info tips - #220
Conversation
… reconstruction, overrides badge, info tips (#202) Three body-appended singleton tips (#model-tooltip / #fmt-tooltip / #ov-tooltip) on mouseenter AND focusin behind focusable triggers: the Given header renders ref( + .gt-model pill + ), the Expected panel gains its model pill (header fallback or fixture-view bar, bar order [model pill][mode badge][row count] with the Diff/File toggle far right), the format badge shows for ALL formats incl. dict and reconstructs the fixture client-side (sql/csv/yaml), and the test badge row gains the 'overrides . N' badge with grouped key = value rows. Founder decision (epic #197) applied: the incremental-branch mode badge and the prior-model-state this-badge keep the #146 focusable-trigger CSS-bubble mechanism with the pass-2 badge-borne styling - the separate expected-panel i button is retired, the pass-2's JS info-tip twin for those badges is not ported (exactly one mechanism), and the LOCKED D4 invariant holds (tooltip rides is_incremental_mode === true, never the this-given proxy, never full-refresh). Column-header tooltips: detail strings now render as ct-vals/ct-val chips (ct-detail retired); per-table column_meta sourcing unchanged. The #161 idempotent clear-list extends to .expected-model-badge. Every interpolated tip value passes through escapeHtml (payload strings are attacker-adjacent YAML). Goldens regenerated (template-only deltas, payload byte-stable, double-render byte-identical); explore pages untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
Warning Review limit reached
More reviews will be available in 12 minutes and 27 seconds. Learn how PR review limits work. Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (6)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Ready to review this PR? Stage has broken it down into 8 individual chapters for you: Chapters generated by Stage for commit 18bb052 on Jun 11, 2026 5:32am UTC. |
📄 Rendered report previewAll golden examples regenerated cleanly. 🟡 Golden examplesCommitted to
🐶 Live dogfood previewThis PR doesn't touch ▶ Open ↗ opens the report in your browser in one click — The Pages preview may take ~1 min to update after this comment Alternative: GitHub CLI# gh CLI >= 2.63 extracts into ./report-preview-playground/.
gh run download 27326077784 -R breezy-bays-labs/cute-dbt -n report-preview-playground
open report-preview-playground/playground-report.htmlPosted by |
Closes #202
Design-2 integration PR-5: the rich hover layer over the #201 layout, fed by the #200 payload. Template/JS/CSS + tests + goldens only —
src/is zero-diff;templates/report.html, the explore surfaces, fixtures, and the ci.yml/lefthook feature-count lines are untouched.What landed
#model-tooltip/#fmt-tooltip/#ov-tooltip, reusing the shippedpositionTipNearclamp) shown onmouseenterANDfocusin, hidden onmouseleave/focusout. Every trigger is focusable (tabindex=0) with visible text or anaria-label; no nativetitle(the #145 — surface incremental-model unit-test semantics #146 rule). Every interpolated value passes throughescapeHtml.buildGivenTitlerendersref(+.gt-modelpill +)(thegiven ·prefix is dropped; non-ref inputs render verbatim). The pill is a model-tip trigger only whenmanifest_nodesknows the model (graceful absence).data-input-nameretained on the section (test seam).buildExpectedModelBadge— bar order [model pill][mode badge][row count] with the Diff/File toggle far right (margin-left:auto, matching the Given bars); header fallback when no bar. The #159 — strategy-correct incremental expect-semantics tooltip #161 idempotent clear-list extends to.expected-model-badge(both clear sites:renderExpectedPanel+ the unconditionalrenderForSelectedModelclear).overrides · N(N = total keys across groups) in the test badge row whenTestPayload.overridesis present; hover/focus shows macros/vars/env_vars groups withkey = valuerows, values stringified from native scalars.ct-vals/ct-valchips; thect-detailrun + its CSS are retired. Verified against the shipped detail forms (m.frelationships,0–100ranges) — single-value details stay one chip. Per-tablecolumn_metasourcing and the th-trigger/no-icon/#col-tooltipcontract are unchanged.Founder mechanism decision (epic #197) — applied as briefed
The incremental-branch mode badge and the prior-model-state this-badge keep the shipped #146 focusable-trigger CSS-bubble mechanism with the pass-2 badge-borne visual styling: the badge itself is the focusable trigger (
tabindex=0,aria-label, nestedaria-hiddenbubble, reveal on:hover/:focus/:focus-visible). The expected panel's separate ⓘ button is retired (the static DAG-hint ⓘ keeps the class). Exactly ONE mechanism per the collision notes — the pass-2's JS info-tip twin for those badges (.has-info-tip/showInfoTip/#info-tooltip) is not ported: its only consumers were these two badges, so porting it would ship dead code.incremental_badges_modes_tooltip_and_this_givenwas updated deliberately; the LOCKED D4 invariant holds (tooltip ridesis_incremental_mode === true, never the this-given proxy, never full-refresh — a new guard additionally pins that the full-refresh badge nests NO bubble). The this-badge tip copy was made strategy-invariant ("exercise the incremental branch", the #159/#161 lesson) rather than the prototype's merge/insert wording.Discovery answers
position:fixedat z-index 90 (the shipped#col-tooltipposture), so they paint above the DAG shelf, the sticky expected panel, and DataTables headers (all in lower in-flow stacking contexts). The badge-borne CSS bubbles sit at z-index 60 absolute within their badge — no clipping ancestor on either badge (given.table-headerand the expected header/bar carry no overflow rule; a new headless guard pins the relocated-bar reveal). A live probe on the regenerated playground golden confirmed the 90/90/60 ladder with no occlusion.max-height: 22remwithoverflow: autoandmax-width: min(34rem, 92vw); the largest playground reconstructions scroll cleanly. A row cap would break the faithful-reconstruction promise; the clamp + scroll is sufficient.Dogfood visibility (regenerated goldens)
examples/playground-report.html: 8 ref-pill hover targets, 1 overrides badge (overrides · 1ontest_fct_encounters_incremental_appends_new_encounters), 5 dict format badges — verified live in a browser against the regenerated golden (tips reveal/hide, badge-borne bubbles work).examples/diff-showcase-report.html: ref pills + dict badges present; no overrides badge — its--pr-diffscope excludes the only overrides-bearing playground test. Per the brief I'm reporting this rather than splicing fixtures (tests/fixtures/playground-*untouched).examples/explore/pages: zero diff (explore embeds neitherreport.cssnorinteraction.js).Gate evidence (run directly in the worktree — lefthook skips in fresh worktrees)
cargo fmt --checkcargo clippy --all-targets --locked -- -D warningscargo nextest run --all-targets --lockedcargo test --test bddcargo test --test headless_toggle -- --ignoredrich_hover_cards_model_pill_format_badge_and_overrides,expected_bar_orders_model_pill_mode_badge_rowcount_toggle_far_right), the updated #161/#165 guards, and the re-run 375px stacked guardcargo test --test headless_zero_egress -- --ignoredRUSTDOCFLAGS="-D warnings" cargo doc --no-deps --lockedcargo deny checkreportrecipes; double-render byte-identical (all three);git diff --text -U0 -- examples/audited — template-only deltas, payload JSON byte-stable, zeroroot_path/username contentrendered_chrome_jaffle_shop— embeds the template bytes); skeleton snapshot unchangedcargo llvm-cov nextest --locked --fail-under-lines 85→crap4rs --config crap4rs.toml --coverage lcov.info): PASS — 1669 fns, 0 above threshold, worst 23.0New headless guards
🤖 Generated with Claude Code