Finish Home in the UI language v2 #253
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!253
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "ui-v2-home"
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 Home in the UI language v2, to the Figma frames Desktop · Home (40:1956 / 40:2427), Phone · Home (54:2 / 58:1459) and the Home parts, Board icon, Faces and Due components, light and dark.
What changed
home.dateandcal.day.*in en and de), with a primary New board beside it from 600px. The phone keeps its large title and the account face (#243).ForYouServicenow returnsAssigneeDidsin place ofIsMine, read with the titles of the six it keeps. These are plaintext DIDs, one more statement under the split default, and no member rows. Six cards sit across on a desk; where they don't fit the strip scrolls, and on a phone it always does./?new=1opens the New board form (Home.NewBoard). The sidebar's New board (ui-v2-board) uses it, and the page takes the query off once it has acted on it.Judgement calls
GetTilesAsyncalready returns, so they cost no query.docs/boards-and-permissions.mdrules out a lock because private is the ordinary case, so Only you gets a one-figure glyph, the single version of people.Faces.razoris byte-identical to ui-v2-board's, so the two branches merge cleanly. Its styles, and the Due chip's states, are scoped to Home (.home …,.foryou-card …). When ui-v2-board lands, its global.card-due-*and face rules make these scoped copies redundant, and they can go.Verified
tools/verify.sh: build and 584 unit tests green.home.spec.js: the tile's bar, the title's New board,/?new=1, the soon chip, the faces staying right with and without a date, and a new phone test for the list rows and Edit.🤖 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: request changes — blocking issues below.
The Home rework reads well.
ForYouServicestill reads only plaintext DIDs and the six picked titles, and the tile counts and segments reuse the per-column counts.SegmentsandCountsonly indexColumnCardCounts[0]whenCardCount > 0, so a board with no columns is safe. The?new=1handling avoids the prerender redirect trap, and the docs are updated alongside the code.One blocker against
CLAUDE.md: this PR changes what a member sees, butServices/Changelog.csisn't in the diff, so nothing was added toChangelog.Unreleased. The convention asks for a line in both locales, in the same PR. The change is clearly noticeable: the large title with the date, the redesigned tiles and phone list, the due chip and faces in the For you strip, and Edit.One minor point, not blocking:
/?new=1on a deployment with no boards sets_creating, but the form is only rendered in the tiles branch. I didn't confirm whether.home-emptyshows it. It's worth a check or a one-line test.🧠 claude-sonnet-5-5 · ⏱ 0m 21s · 4 turns · tokens: 51.7k in / 2.1k out (+136.7k 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.
This is a big, careful change, and it holds together. Things I specifically chased:
/?new=1lifecycle. TheOnParametersSet→StartNewBoard()→NavigateTo("/", replace: true)guarded byRendererInfo.IsInteractivematches the proven?card=pattern inBoardPage.OpenSharedCard, and the empty-state branch handles?new=1too (the_creatingcheck flipsCount == 0 && !_creatingto render the form among the tiles). Good.ColumnCardCounts[0]inCountsis only reached whenCardCount > 0, which implies a non-empty list, so no index risk;Segmentshandles empty boards with the single grey track.((int)Today.DayOfWeek + 6) % 7matches thecal.day.0 = Monday … cal.day.6 = Sundayentries and the repo'sWeekdayShortMonday-0 convention, in both locales..card-due/.card-due-overduerules; the scoped rules only rescale and re-glyph, and.laterfalls through to the neutral global look as intended.people.All(m => m.Did == _viewer.Did)on an empty grant list yields "Only you", which is right for the private case;_everyoneas non-banned members matches who an Everyone board actually admits (DbAllowlistService,AssigneePicker).Non-blocking observations, no action required:
.foryou-stripusesgrid-auto-columns: minmax(176px, …)per-card, so card widths can vary a few pixels with content (the old flex row had a fixed width). With six cards across this is likely imperceptible and the screenshots were compared, so I read it as deliberate.Verified the locale additions are complete on both locales (
home.date,home.todo,home.people,home.edit(.done),cal.tomorrow,cal.day.0–6, and the removedhome.foryou.minehas no remaining consumer). The tests cover the new phone list, the?new=1round trip, and the chip states. Good to merge.⏱ 13m 20s · 22 steps · $0.0486 · tokens: 67.5k in / 1.4k out (+880.0k cache-read) · Go: 5h 4% · wk 12% · mo 88%
📜 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.
790cc8107c1ad777f118🤖 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.
The blocker from my last pass is fixed.
Services/Changelog.csnow adds a "Home, redone" line toUnreleasedin both locales, and the two attachment lines are merged to make room for it.The minor
/?new=1question is also settled. The empty state only renders when_tiles.Count == 0 && !_creating, so with no boards and_creatingset, the page falls through to the tiles branch and shows the form. The title's New board button is hidden while there are no tiles, which matches the docs.I read the code and diff only; I didn't run the build or the e2e specs.
Nothing else blocks merging.
🧠 claude-sonnet-5-5 · ⏱ 0m 8s · 3 turns · tokens: 50.3k in / 516 out (+73.9k cache-read)
📜 Full session transcript
⚠️ The conflict run failed: git -c http.extraheader=Authorization: Basic b3BlbmNvZGUtYm90OmRkNTgzYzhiZDgzZmM0ZTExNGJhYWM4OTExOWJjZWRlNjU1NzQ1NWU= push origin HEAD:refs/heads/ui-v2-home failed (1): To http://forgejo:3000/Grandiras/Ponente.git
! [rejected] HEAD -> ui-v2-home (fetch first)
error: failed to push some refs to 'http://forgejo:3000/Grandiras/Ponente.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by
🤖 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.
Re-review of the current head: merging is safe. Everything that blocked earlier (the
Changelog.Unreleasedentry) is in, and the pieces that needed checking off hold together in the current tree:/?new=1→StartNewBoard→NavigateTo(replace: true)matches the proven?card=pattern;ColumnCardCounts[0]is only indexed whenCardCount > 0;Segmentshandles the empty board with the single grey track; the weekday index math matchescal.weekday.long.0 = Monday; the.home-glyph, home-scoped.card-due-*and.home .card-assigneesrules all compose correctly with the global ones;Faces.razoris byte-identical to the ui-v2-board copy as claimed, so the branch merges cleanly; andcal.day.0–6and the newhome.*keys are present in both locales withhome.foryou.mineand the oldboard-miniCSS fully gone.The new phone spec measures the row geometry and exercises Edit with
toPasstimeouts, so the entrance's segment scale-in shouldn't flake it.auth-enter.jscorrectly reads.home-foryou .home-titlebefore.home-boards .home-title, matching bothhome-section-headfooters inHome.razor.Non-blocking:
home.countshows_forYou.Count, which is capped at six, so "For you · 6" describes the strip, not the number of matching cards waiting behind the cap. Probably intentional (it says what is on screen), worth a second thought if it reads as a queue length.MembersInonitem.AssigneeDidswill yield an empty array for a DID that has left_memberssince the DIDs were stored. Doesn't apply in practice, and the faces DIDs are the assignees of record either way..home .card-assigneesand.home .assignee-avatar[style*="--h"]rules are deliberate scaffolding until ui-v2-board lands and clears them, per the PR note; nothing to change now.⏱ 6m 56s · 21 steps · $0.0396 · tokens: 67.5k in / 2.5k out (+811.9k cache-read) · Go: 5h 2% · wk 13% · mo 89%
📜 Full session transcript