Claude: changes for issue #76 #83

Merged
Grandiras merged 1 commit from claude/issue-76 into main 2026-08-14 15:54:08 +00:00
Collaborator

Closes #76.

Closes #76.
Make the board the header's title, and the switcher work on a phone
All checks were successful
CI / build (pull_request) Successful in 30s
6b3e1f895d
The nav was written for one board and then had a switcher squeezed into it.
Two things followed, and both are what issue #76 is about.

On a phone the whole nav is behind the hamburger, so the header said
"Ponente" and nothing about which of several boards was on screen — and
switching board meant opening a menu in which a board looked exactly like a
settings page, since the boards were rows in the same undifferentiated list
as the five admin pages. Between 600 and 960px it was worse: the switcher
plus the calendar plus five admin links overflowed the row and pushed the
account and the hamburger clean off it, so a landscape phone had a header
with no menu on it at all.

So the board becomes the page title. `.nav-lead` is the brand, a hairline
and then the board — a title in the display face, because a board is what
the page is about, and a `.nav-board-title` rather than a button when there
is only one, since one board is not a choice. `min-width: 0` on that flex
item is what makes a long board name truncate instead of shoving the rest of
the header off the screen.

The switcher follows every board-scoped route, not just the two it knew:
`ActiveSection` reads the prefix off the URL, so /board, /calendar/board and
the three admin pages that edit one board all get the same control, and
switching keeps you on the page you were on. The admin links carry the board
along too, because following "Columns" from a board you opened deliberately
and landing on the default board's columns is the silent substitution this
app refuses everywhere else.

On a phone the flyout becomes a bottom sheet — the toggle is in the top-left
corner, which is the far end of the device from the thumb holding it — with
a dimmed backdrop, since unlike the header's other click-catchers this one
covers the board.

The five admin pages fold into one Admin flyout beside the two views of the
board, which is what makes the row fit again; the phone's hamburger keeps
the same folded list under a heading and no longer lists boards at all.

Main content follows from that: the three board-scoped admin pages had their
own <select> answering the question the switcher now answers, and answering
it differently, since the switcher used to claim no board on an admin page.
BoardPicker is gone and BoardScope takes its place — it only says which
board the page is editing.

Verified: dotnet build + 165 unit tests, and the Playwright suite driven
against a local instance (boards, mobile, board, i18n, calendar, filter,
prefs, install, icons, entrance and reconnect specs). boards.spec.js gains
the phone case; board/mobile/i18n/calendar are updated where they asserted
the old header. Two failures in that environment reproduce on an unchanged
tree and are down to this container (a font-metric calendar overflow and a
locale-cookie test).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Author
Collaborator

🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 Reviewing this PR — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/224); the reply will link the full session transcript. 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/pr-83/run-224.md) — updating every ~5 minutes while the task runs.
claude-reviewer left a comment

Verdict: approve — no blocking issues found.

Traced through the reworked NavHeader logic carefully (ActiveSection/ActiveBoardId/BoardHref/AdminHref/SectionActive) against the actual routes registered on BoardPage.razor/Calendar.razor/the three board-scoped admin pages, and it's internally consistent: the bare-path vs {prefix}/{id} convention is applied uniformly, switching board from an admin page correctly carries the section along, and the admin-link-carries-board-id behavior matches what the tests assert.

One scenario I specifically checked because it looked like a plausible new bug — an admin visiting a restricted board's admin page not explicitly granted to them, where the header switcher's _boards (from GetVisibleAsync) might not include that board and so mislabel it — turns out to be a non-issue: BoardAccess.VisibleTo already includes admins unconditionally, so _boards always contains every board for an admin viewer. No inconsistency there.

CSS changes are consistent with the stated breakpoints (bottom-sheet styles are correctly scoped inside the existing @media (max-width: 599px) block; wordmark/handle hiding moved to the documented 960px threshold), old orphaned selectors (.admin-board-picker, .nav-boards-label) are removed cleanly, and the new ones (.nav-boards-name, .nav-board-option*) are referenced correctly from the markup. Translation keys are added in both locales and the removed admin.board.picker key has no remaining references. The e2e test updates (openAdminMenu helper, phone sheet test, admin-page-board href assertions) line up with the new DOM structure and locale/board-id semantics.

CLAUDE.md documentation was updated thoroughly and matches the shipped implementation. I didn't find correctness bugs, security issues, or important omissions — this looks good to merge.


⏱ 2m 53s · 8 turns · tokens: 93.8k in / 15.8k out (+676.7k cache-read)
📜 Full session transcript

✅ **Verdict: approve** — no blocking issues found. Traced through the reworked `NavHeader` logic carefully (`ActiveSection`/`ActiveBoardId`/`BoardHref`/`AdminHref`/`SectionActive`) against the actual routes registered on `BoardPage.razor`/`Calendar.razor`/the three board-scoped admin pages, and it's internally consistent: the bare-path vs `{prefix}/{id}` convention is applied uniformly, switching board from an admin page correctly carries the section along, and the admin-link-carries-board-id behavior matches what the tests assert. One scenario I specifically checked because it looked like a plausible new bug — an admin visiting a restricted board's admin page not explicitly granted to them, where the header switcher's `_boards` (from `GetVisibleAsync`) might not include that board and so mislabel it — turns out to be a non-issue: `BoardAccess.VisibleTo` already includes admins unconditionally, so `_boards` always contains every board for an admin viewer. No inconsistency there. CSS changes are consistent with the stated breakpoints (bottom-sheet styles are correctly scoped inside the existing `@media (max-width: 599px)` block; wordmark/handle hiding moved to the documented 960px threshold), old orphaned selectors (`.admin-board-picker`, `.nav-boards-label`) are removed cleanly, and the new ones (`.nav-boards-name`, `.nav-board-option*`) are referenced correctly from the markup. Translation keys are added in both locales and the removed `admin.board.picker` key has no remaining references. The e2e test updates (`openAdminMenu` helper, phone sheet test, admin-page-board href assertions) line up with the new DOM structure and locale/board-id semantics. CLAUDE.md documentation was updated thoroughly and matches the shipped implementation. I didn't find correctness bugs, security issues, or important omissions — this looks good to merge. --- ⏱ 2m 53s · 8 turns · tokens: 93.8k in / 15.8k out (+676.7k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/pr-83/run-224.md) <!-- claude-verdict:approve --> <!-- claude-reviewed-head:6b3e1f895d18958bf51079dfc1d6ee60a6fb686e -->
Grandiras deleted branch claude/issue-76 2026-08-14 15:54:08 +00:00
Grandiras referenced this pull request from a commit 2026-08-14 15:54:08 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
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
Grandiras/Ponente!83
No description provided.