Commit-graph lane gutter breaks across rows (per-row margins/borders): margin-free rows + cell padding so the gutter connects #512
Labels
No labels
actions
bug
cli
duplicate
enhancement
fork
forum
git storage
help wanted
insights
invalid
issues
moderation
oidc
ownership transfer
packages
pr/merge protection rules
projects
pull requests
question
releases
sponsorships
tags
webhooks
wiki
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crueber/walhub#512
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What's wrong
On the Commits tab with the graph toggle ON (shipped by #511 for #506), the lane gutter breaks visually between rows: the vertical lane lines stop and restart at every row boundary instead of running as one continuous line of development.
Root cause (static read, fresh tree — no local repro per standing rule)
Continuity of the gutter is an emergent property: each commit row draws its own rail segment (
GraphRailinweb/src/pages/Commits.jsx:60-130, an SVG absolutely filling only that row's box, top-half + bottom-half verticals meeting atGRAPH_ROW_MID), so the lanes only read as continuous if consecutive row boxes abut edge-to-edge — zero margins and zero inter-row borders across the graph column.The current markup carries per-row spacers that insert visual gaps into the rail column:
web/src/pages/Commits.jsx:278— the.commit-listcard usesdivide-y divide-zinc-100 dark:divide-zinc-800/60, i.e. a 1px top border on every row. In Forgejo/GitHub graph rendering the gutter column is border-free for exactly this reason.mb-*on.commit-row,web/src/pages/Commits.jsx:135) would do the same; the row currently usespy-2padding, which is safe, and this must stay the convention.Fix prescription
py-*on.commit-row), never margins — so the rail column is a continuous strip.divide-ywhengraph-onis set and restyling separation via row padding (or a border only on the columns right of the rail, e.g.box-shadow: inset Npx 0 0/ border on.commit-main, never on the row's left edge).autogrid column (web/src/pages/Commits.jsx:135,.graph-onoverride atweb/src/ui.css:368-372)..commit-list.Acceptance criteria
.commit-rowcarries no margins anywhere; separation is padding/border only, and no border or margin lands in the rail column whilegraph-on.Fix ready: #514 — margin-free rows, divide-y gated on graph-OFF, graph-on separation via .commit-main inset edge (never the rail column), mobile fallback untouched. Tests: 1150 total / 1149 pass / 1 pre-existing live-server smoke failure; vite+esbuild green.
Review of PR #514 (fix/issue-512,
37c68e8) — verified in scratch worktree (removed afterward); main worktree untouched. No browser used (node tests + source/bundle reasoning only — note explicitly: browser proof still open, same as stated in the PR).FINDINGS (all 4 acceptance criteria hold):
!graphOn()("divide-y": !graphOn()etc.),"graph-on": graphOn()marker kept. Graph OFF recomputes to the same three utilities (class-attribute order differs, computed style identical) — divider look preserved..graph-on .commit-rowstill sets only grid-template-columns; no border/margin/shadow on the row box or.commit-rail; separation isbox-shadow: inset 0 1pxon.commit-mainonly (verified .commit-main exists at Commits.jsx:142, second grid column right of the rail in the graph-on template). Colors match both themes: #f4f4f5 = zinc-100, rgb(39 39 42 / .6) = zinc-800/60. Selector.graph-on > .commit-row + .commit-row .commit-maincorrectly skips the first row (parity with divide-y semantics).gap-x-2.5/px-3 are horizontal-only; ui.css pins.commit-row, .commit-empty { margin: 0 }against future reaches.(Commits.jsx), covered by the margin guard.
TEST RESULTS (scratch worktree, node_modules symlinked from main):
.commit-row,.commit-empty{margin:0}+ both light/dark inset-edge rules; esbuild SDK bundle green with zero graph leakage (UI-only change confirmed).No fixes needed — nothing pushed.
MERGE RECOMMENDATION: ready to merge (browser proof remains open as declared in the PR; no blocking issue found).
Fixed by PR #514 (review clean — all 4 criteria hold, gutter rules verified in compiled CSS), merged. Closing.
Reopening: still reproduces. The divide-gating reads correct in source; going to verify with a real rendered screenshot locally (scratch server + headless Chromium) instead of reasoning about it again.
Reopening with screenshot evidence: straight lane segments visibly stop/restart at row joints (merge node to next-row dot has a dark gap; same at the lower joint). The divide-gating reads correct in source, so the gap source is elsewhere — going to reproduce rendered (scratch server + headless Chromium) and fix what I see.
Verification update: production serves the fixed bundle (Bibhi10Z contains the divide-gating), and the emitted lane geometry for the exact screenshotted history is provably continuous (executed check on the real assignLanes/rowDiagonals/laneX: all joints match). Boxes/margins/borders verified abutting; classList reactivity verified in the solid runtime source. Remaining suspect is a stale tab bundle (SPA tabs never reload JS by themselves; any tab loaded before today's 12:53 deploy renders the old divide-always code) — or a render subtlety needing eyes. Next step: hard-refresh result.
Follow-up fix PR: #519 (measured root cause + visual before/after).
Review of PR #519 (fix/issue-512-rail,
d185e31+ review fixup0f44ec4) — verified in scratch worktree /tmp/pr519 (removed afterward); main worktree untouched and clean. No browser used by this reviewer: the fix was already verified with before/after screenshots by the author (rail 56px→72px, gutter continuous) — this review is node tests + source/bundle reasoning only. Browser open for myself explicitly: no private daemon per workspace rules, shared-daemon loopback guard.FINDINGS (all 8 checks hold):
commit-row grid grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-x-2.5 px-3, px/gap-x horizontal-only); all three content columns carry their own py-2 (.commit-mainL147,.commit-sha-colL167,.commit-checkL177); rail (L67commit-rail relative self-stretch shrink-0) unpadded so it fills the full box..commit-empty(L317) untouched, still under the margin guard.ONE SMALL FIX PUSHED DIRECTLY (
0f44ec4, comment-only): four code/test comments cited "#513 follow-up" / "hardened #513" — but #513 is the checks-tab/ETag issue. Renamed to "reopened #512" in Commits.jsx (2x), ui.css, gutter test (2x). Re-tested after the fixup.TEST RESULTS (scratch worktree, node_modules symlinked from main):
MERGE RECOMMENDATION: ready to merge.
Fixed by PR #519 (review clean; rail now fills the row box, verified with before/after screenshots — rail 56px→72px, gutter continuous), merged. Closing.