Move the "refs" functionality under the "main @ commit" text on the left of the nav #214

Closed
opened 2026-09-08 20:00:16 +00:00 by crueber · 3 comments
Owner

This is what it looks like currently:

image

The "refs" drop down on the right should have its functionality put under the "main @ commit" message on the left. They look very similar already. So it makes sense to merge the functionality together, since they are basically the same thing.

This is what it looks like currently: ![image](/attachments/fd9f25e0-015b-445c-938f-ff0ecbe017bc) The "refs" drop down on the right should have its functionality put under the "main @ commit" message on the left. They look very similar already. So it makes sense to merge the functionality together, since they are basically the same thing.
Author
Owner

Fix is up for review: #221 (branch fix/issue-214). The head pill is now the picker trigger; standalone refs dropdown removed, Clone stays. Verified: node suite green (436 pass), real-Chromium CDP drive (open/filter/switch branches+tags, Esc+focus, both themes, zero console errors).

Fix is up for review: https://git.packden.us/crueber/walhub/pulls/221 (branch fix/issue-214). The head pill is now the picker trigger; standalone refs dropdown removed, Clone stays. Verified: node suite green (436 pass), real-Chromium CDP drive (open/filter/switch branches+tags, Esc+focus, both themes, zero console errors).
Author
Owner

Review of PR #221 (fix/issue-214, refs picker into branch pill) — verified in a disposable scratch worktree (created, tested, removed; main worktree untouched, still clean).

VERIFICATION (scratch @ b17c3e9; real pnpm install, no network shortcuts)

  • node --test web/test/unit/*.test.js: 429 pass / 0 fail (incl. 6/6 new ref-picker-pill tests). Note: PR description claims 436 pass — I measure 429 (423 existing + 6 new) with the same make test-web glob. Suggest correcting the description.
  • make web (vite + esbuild SDK): clean, no warnings. No browser run (per instructions, node tests + reasoning only).

CHECKLIST (all pass)

  • Standalone refs dropdown fully gone: no refs ▾ text, exactly one call site (Repo.jsx:523, inside repo-meta), nothing picker-related right of ml-auto; CloneMenu stays (Repo.jsx:535-537). No dead trigger/code.
  • Pill affordance: {shortRef} @ {sha10} + chevron (Repo.jsx:279), cursor-pointer, title tooltip ('Switch branch or tag'), plus existing .pill:hover accent border (base.css:56). Obviously clickable: yes.
  • Behavior identical: SSE refStream 50/page, 150ms debounce, keyed rows, branch/tag switch, filter input, /{full}/tree/{ref} navigation, outside-click close + stream.cancel — all byte-identical move (Repo.jsx:230-250).
  • Anchor: dropdown left-0 under the pill (Repo.jsx:282) with .ref-picker{position:relative} context; repo.css .ref-drop right:0 -> left:0. Left-anchored 320px panel fits narrow viewports better than the old right-anchored one. No overflow concern.
  • Keyboard: aria-haspopup=listbox + aria-expanded on the trigger, Esc closes + refocuses pill (Repo.jsx:255-261), filter autofocuses on open (Repo.jsx:298), native button Enter/Space baseline. Good.
  • Head-as-getter: head={() => s().head} (Repo.jsx:523) with tolerant head() accessor (Repo.jsx:221) — background summary refreshes move the pill without remount; empty repos keep the static empty pill. Correct.
  • Non-head-ref semantics: pill always shows s().head; viewed ref lives only in tree URLs/breadcrumb paths (Tree.jsx:216,231) — exactly as before this PR, so display semantics are deliberately preserved, not regressed. Sane: matches the issue ask (merge, not a viewed-ref indicator); making the pill track the route ref would be scope creep.
  • Right-side controls: Star/Watch/Tasks/Clone intact. Branch/tag counts stay beside the pill.
  • Laws: no new deps (no package files touched — law 1 OK); stream/task handling unchanged (law 7 OK); web-only + doc, no core imports (law 8 OK); 12_web_ui.md Decisions entry appended in-PR and accurate (law 12 OK). No Go changes, so the Go cover gate is unaffected. Dark+light safe (theme vars only, no new colors).

NITS (non-blocking, no fix pushed)

  • Test-count claim in PR description (436 vs measured 429) — worth a one-line correction.
  • role=listbox on the dropdown (Repo.jsx:282) with plain button rows (no role=option): harmless since rows are natively operable buttons, but a purist would use menu/menuitem. Leaving as-is; not worth churn.

No changes pushed (nothing material to fix). MERGE RECOMMENDATION: ready to merge.

Review of PR #221 (fix/issue-214, refs picker into branch pill) — verified in a disposable scratch worktree (created, tested, removed; main worktree untouched, still clean). VERIFICATION (scratch @ b17c3e9; real pnpm install, no network shortcuts) - node --test web/test/unit/*.test.js: 429 pass / 0 fail (incl. 6/6 new ref-picker-pill tests). Note: PR description claims 436 pass — I measure 429 (423 existing + 6 new) with the same make test-web glob. Suggest correcting the description. - make web (vite + esbuild SDK): clean, no warnings. No browser run (per instructions, node tests + reasoning only). CHECKLIST (all pass) - Standalone refs dropdown fully gone: no refs ▾ text, exactly one <RefPicker/> call site (Repo.jsx:523, inside repo-meta), nothing picker-related right of ml-auto; CloneMenu stays (Repo.jsx:535-537). No dead trigger/code. - Pill affordance: {shortRef} @ {sha10} + chevron (Repo.jsx:279), cursor-pointer, title tooltip ('Switch branch or tag'), plus existing .pill:hover accent border (base.css:56). Obviously clickable: yes. - Behavior identical: SSE refStream 50/page, 150ms debounce, keyed rows, branch/tag switch, filter input, /{full}/tree/{ref} navigation, outside-click close + stream.cancel — all byte-identical move (Repo.jsx:230-250). - Anchor: dropdown left-0 under the pill (Repo.jsx:282) with .ref-picker{position:relative} context; repo.css .ref-drop right:0 -> left:0. Left-anchored 320px panel fits narrow viewports better than the old right-anchored one. No overflow concern. - Keyboard: aria-haspopup=listbox + aria-expanded on the trigger, Esc closes + refocuses pill (Repo.jsx:255-261), filter autofocuses on open (Repo.jsx:298), native button Enter/Space baseline. Good. - Head-as-getter: head={() => s().head} (Repo.jsx:523) with tolerant head() accessor (Repo.jsx:221) — background summary refreshes move the pill without remount; empty repos keep the static empty pill. Correct. - Non-head-ref semantics: pill always shows s().head; viewed ref lives only in tree URLs/breadcrumb paths (Tree.jsx:216,231) — exactly as before this PR, so display semantics are deliberately preserved, not regressed. Sane: matches the issue ask (merge, not a viewed-ref indicator); making the pill track the route ref would be scope creep. - Right-side controls: Star/Watch/Tasks/Clone intact. Branch/tag counts stay beside the pill. - Laws: no new deps (no package files touched — law 1 OK); stream/task handling unchanged (law 7 OK); web-only + doc, no core imports (law 8 OK); 12_web_ui.md Decisions entry appended in-PR and accurate (law 12 OK). No Go changes, so the Go cover gate is unaffected. Dark+light safe (theme vars only, no new colors). NITS (non-blocking, no fix pushed) - Test-count claim in PR description (436 vs measured 429) — worth a one-line correction. - role=listbox on the dropdown (Repo.jsx:282) with plain button rows (no role=option): harmless since rows are natively operable buttons, but a purist would use menu/menuitem. Leaving as-is; not worth churn. No changes pushed (nothing material to fix). MERGE RECOMMENDATION: ready to merge.
Author
Owner

Fixed by PR #221 (review clean; 429/429 node tests), merged. Closing.

Fixed by PR #221 (review clean; 429/429 node tests), merged. Closing.
crueber added this to the v1 milestone 2026-09-10 22:27:12 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
crueber/walhub#214
No description provided.