Finish the sign-in pages, the states and the account sheet in the UI language v2 #256
No reviewers
Labels
No labels
No milestone
No project
No assignees
5 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Grandiras/Ponente!256
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "ui-v2-states"
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?
Finishes the sign-in pages, the full-page states and the phone account sheet of the UI language v2 against the Figma draft (Desktop · Sign in / Request access / Request status, Screens · States, Phone · Account sheet, Components · Feedback & menus), light and dark, desktop and phone.
What changed
/login,/signup,/request,/request/{token},/access-denied): the draft's panel on--bg-panelover one glow of the accent; mark or glyph, a 22px title and one line; the tabs as a segmented control under the head; recessed 36px fields that lift and ring on focus; a 44px primary; a hairline footer./requestis titled Request access./signuphas no frame and wears Request access's, keeping its numbered steps..empty-state, so every empty state): a recessed glyph tile with the draft's icons, a 22px title, one line, one small primary. The board'smissing/deniedoutcomes gain a line on what to do and a button;/not-foundand/Erroruse it too, and/not-foundkeeps a member's sidebar.Oct 1).showModal()and the same script.AccessRequestService.CountPendingAsync, re-read onRequestsChanged).LocaleServicein both locales; dropped keys no longer shown.ui.md,auth.md,access-requests.md,live-updates.md,boards-and-permissions.md,frontend.md(v2 status line),testing.md.Judgement calls (draft vs rule)
access-requests.md); the POST requires it.ExistingAccountNote, which the draft's Request access frame lacks (auth.md).Blazor.reconnect()racing the framework's own attempt is untested.ShareButton(share mark, sheet then clipboard) rather than a link glyph that only copies.notfound.backnow says Go to your boards:/is Home, not a board.How verified
tools/verify.sh(build + 600 unit tests) green./not-foundwith the sidebar, the pill at the top).🤖 Generated with Claude Code
🤖 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.
✅ Verdict: approve — no blocking issues found.
I read this from the visible diff and spot-checked the symbols it depends on. The diff was truncated, so I did not see the e2e spec changes in full.
FormatDayInYear,AllowlistRequirement.PolicyNameandIAllowlistService.IsAdminall exist.IsAdminis the super-admin check, which matches the Members row..board-loadingclass is still used by other pages, so removing it fromBoardPageleaves nothing dangling.NavHeader.CountRequestsAsyncnever resets_pendingRequestsif the user stops being an admin mid-circuit. That is harmless, because the row is hidden by the same policy.🧠 claude-sonnet-5-5 · ⏱ 0m 14s · 3 turns · tokens: 73.8k in / 1.0k out (+96.8k cache-read)
📜 Full session transcript
🤖 Reviewing this PR — the review will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the review runs.
✅ Verdict: approve — no blocking issues found.
Solid finish of the v2 states against the described Figma spec. I traced the functional side rather than the styling and found nothing blocking:
LocaleServicekeys have no stragglers; every newly referenced key exists in both locales, andL.TCount("nav.requests.pending", …)matches the existingkey.oneconvention.CountPendingAsyncis genuinely admin-gated (Allowlist.IsAdminon the DID claim),RequestsChangedis subscribed and cleanly unsubscribed inDisposeAsync, and the accessor/OnRequestsChangedExternallyhandlers are static so the event can't fire on a disposed header.ReconnectModal.razor.jsis untouched; the CSS keeps the same state-class contract and matches real--scrimvalues. The scheduledshowModal()/grace logic behaves as before.NotFoundrendersNavHeaderinline, consistent with how every other page composes it; the Router'sNotFoundPagepath renders it once, and the signed-out/not-allowlisted branch falls back to the headerless centered state.DeletedBoardStatekeepsdata-outcome="deleted", its restore flow, and the purge-date wording;FormatDayInYearwas already there and handles a crossing year.RequestStatus's display-link cut only touches tokens long enough, the email line is shown only to the secret link's holder, andShareButton's use matches itsPath/Titlecontract.The judgement calls (deleted board's name without cards, keeping the name field on
/access-denied, the single late Retry,notfound.backwording) are each documented in the PR and docs and hold up against the server-side rules behind them. Test selectors were updated to the new markup per the diff I could see, matching the claimed green run.⏱ 3m 24s · 32 steps · $0.0790 · tokens: 149.3k in / 2.6k out (+1731.1k cache-read) · Go: 5h 4% · wk 13% · mo 89%
📜 Full session transcript
🤖 Resolving the merge conflicts — the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the fix runs.
⚠️ The run failed: Upstream request failed: [invalid_request_error] native reasoning control reasoning_effort is not allowed
⚠️ Files still unresolved:
docs/auth.md,docs/boards-and-permissions.md,docs/frontend.md,tests/e2e/board.spec.js,tests/e2e/mobile.spec.js— nothing was pushed.⏱ 0m 3s · 1 steps · $0.0000 · tokens: 0 in / 0 out (+0 cache-read) · Go: 5h 8% · wk 15% · mo 90%
📜 Full session transcript
84a7b82a465a50b60b4c🤖 Reviewing this PR — the review will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the review runs.
🤖 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.
✅ Verdict: approve — no blocking issues found.
I read this from the visible diff only. It was truncated, so I did not see the e2e spec changes, and I did not run the app or the tests.
My earlier approval raised no blocking issues, so there was nothing to re-verify. Re-reading the diff, I found nothing that blocks merging.
CountPendingAsyncruns only for a super-admin, viaAllowlist.IsAdmin. It is re-read onRequestsChanged, and the handler is unsubscribed inDispose.ui.md,auth.md,access-requests.md,live-updates.md,boards-and-permissions.md,frontend.mdandtesting.mdare updated alongside the code. The changelog line is inChangelog.Unreleased, in both locales.Two minor notes, neither blocking:
NavHeader.CountRequestsAsyncnever resets_pendingRequestsif the user stops being an admin mid-circuit. The row is hidden by the same policy, so this has no visible effect.DisplayLinkinRequestStatusassumes a short token is shown whole. That is fine, because the share target carries the full path anyway.🧠 claude-sonnet-5-5 · ⏱ 0m 7s · 2 turns · tokens: 72.6k in / 588 out (+12.2k cache-read)
📜 Full session transcript
✅ Verdict: approve — no blocking issues found.
Re-review after the previous approve: no blockers, and the two notes from earlier passes remain as before and are non-issues (the
CountPendingAsyncnon-reset when a member stops being super-admin mid-circuit is masked by the sameAuthorizeViewpolicy hiding the row; the status page's email is shown only to the secret link's holder, which is the only credential anyway).Spot-checked the load-bearing pieces:
ReconnectModal.razor.jsis unchanged and the new markup/CSS keep the same hide-until-state-class contract and thepaused→resume-failedclassList.replacepath; the pill stays a modal<dialog>placed by margins with the scrim on::backdrop.FormatDayInYearexists and gives the banner's short dates.AccessDeniedkeeps the form's antiforgery token, honeypot, hiddenhandle/kind, and the required name the draft drops. Removed locale keys have no stragglers, and the skeleton'srole="status"uses the still-existingboard.loadingkey. Test selectors match the new markup per the visible diffs.The judgement calls (deleted board showing its name and banner but never cards, keeping the name field on
/access-denied, the single late Retry,notfound.backwording, ShareButton for the status link) are each documented with the server-side rule behind them and hold up. Good to merge.⏱ 2m 48s · 6 steps · $0.0233 · tokens: 108.1k in / 935 out (+190.5k cache-read) · Go: 5h 8% · wk 15% · mo 90%
📜 Full session transcript