Add a general calendar as an addition to board-specific calendars #85
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Grandiras/Ponente#85
Loading…
Add table
Add a link
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?
So basically a user-specific calendar...
🤖 On it — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
Pushed to
claude/issue-85.What it is
/calendar/all— the calendar you already have, over every board you can see rather than one. The switcher in the header offers it, but only inside the calendar section: a board is a place cards live, so "all boards" is a sensible thing to read by date and no kind of thing to put a card on, and there is no/board/all.It's the same component, not a second one — the month grid, timeline, swipe, entrance and card dialog are all shared. The scope only decides which cards are loaded, what the legend stands for, and what the
.icslinks ask for.The decisions worth arguing with
CalendarTimeline.BoardLanes), and the legend is still the filter. Tags stay the axis on a board's own calendar, unchanged.BoardPalette), not stored. A board has no colour anywhere else in the app, so a column plus an admin control for one view would be a lot of schema for a hint. Two boards can therefore share a colour and nothing prevents it — the legend, the lane and every chip's tooltip name the board, and the name is also rendered on the chips that have a second line for it (day sheet, phone agenda) but never in a day cell, whose chips are one line by design.boardquery on both.icsendpoints carries the scope (CalendarScope): absent = the default board (every old link still means what it meant),all= every board you can see,3,7= exactly those, which is what the board filter writes.allstays dynamic where a list doesn't — "all my boards" and "these three" are different standing instructions when a fourth arrives. A named board that has gone 404s the whole feed rather than being silently dropped from it, and an unreadable value 404s too.SetCardTagsAsyncdrops another board's ids, so anything else would be a picker of ticks that do nothing.cal.all.*keys in en and de.Also fixed (pre-existing, found by the new tests)
/admin/boardscould 500 on load:ReloadAsyncpublished_boardsbefore_editswas filled, andComponentBaserenders after the firstawaitinOnInitializedAsync— so a slow second query made_edits[board.Id]aKeyNotFoundExceptionout of the prerender. Both are now assigned after every query returns.Verified
dotnet build Ponente.slnclean (no new warnings);dotnet test191 passed — including 26 new ones:CalendarScopeTests(query parsing/round-trip, strict refusal), board lanes inCalendarTimelineTests,BoardFilter.MatchesBoard, and the all-boardsX-WR-CALNAMEin en/de. The en/de key-parity test covers the new strings.tests/e2e/calendar-all.spec.js(4 tests) run against the real compose stack in this container — cards from both boards on the page and only one board's on a board's own calendar, board lanes in the timeline, the switcher offering/naming/leaving it (and not offering it in the board section), the legend narrowing by board with the export link following, and/calendar.ics?board=all|<id>|garbage→ 200/200/404. Green three consecutive runs.calendar.spec.js/boards.spec.jsfailures in this environment are timing flakes, not regressions: I rebuilt the stack frommainwith my changes stashed and got the same or more failures (boards 6 vs 5, calendar 11 vs 9), all of them clicks landing before the Blazor circuit is up in cleanup helpers I didn't touch.CLAUDE.mdhas a new "The general calendar: every board at once" section under the calendar chapter, plus pointers from the routes paragraph and the.icsone.Compare: https://git.grandiras.net/Grandiras/Ponente/compare/main...claude/issue-85
⏱ 55m 38s · 189 turns · tokens: 290.1k in / 101.4k out (+38804.5k cache-read)
📜 Full session transcript
→ Opened PR: #88