feat(calendar): agenda and week views #262

Merged
nalum merged 4 commits from feat/calendar-agenda-week into main 2026-08-26 18:38:08 +00:00
Owner

Implements #192, four commits: proto (the calView pref learns week — additive enum value, ADR-0035), web, compose twin, golden re-records.

  • Agenda (§2.5) becomes a reading column capped at 40rem with the date on a left rail (weekday, big date, count), spanning the whole month — empty days keep one collapsed Nothing on · + add line, today is a tinted rail with the word, and the column opens scrolled to it. Rows are the §2.1 wide rows, clock trailing the title.
  • Week (§2.4) is new on both surfaces: no titles in the grid — a block is the person's colour and mark, corners carrying the type (rounded event / squared job), position on the two-hourly 07:00 axis carrying the time, the accent now-line, an untimed band so date-only items survive the view switch, and the selected day's strip below (Open the day ›) so one tap always produces words. Defaults to everyone.
  • Both surfaces render calendar rows through one shared renderer (web wideRow, Compose CalEntryRow) — the fork the Today-vs-Jobs card grew is structurally blocked here.
  • Live goldens: six new page cases (week desktop+phone, dots phone) ride with the web commit; the four existing calendar pages re-record separately (every toolbar gained the Week switch).

Stacked on #261. Design: calendar handoff §2.4 + §2.5, calendar-demo.dc.html.

🤖 Generated with Claude Code

Implements #192, four commits: proto (the calView pref learns `week` — additive enum value, ADR-0035), web, compose twin, golden re-records. - **Agenda (§2.5)** becomes a reading column capped at 40rem with the date on a left rail (weekday, big date, count), spanning the whole month — empty days keep one collapsed `Nothing on · + add` line, today is a tinted rail with the word, and the column opens scrolled to it. Rows are the §2.1 wide rows, clock trailing the title. - **Week (§2.4)** is new on both surfaces: no titles in the grid — a block is the person's colour and mark, corners carrying the type (rounded event / squared job), position on the two-hourly 07:00 axis carrying the time, the accent now-line, an untimed band so date-only items survive the view switch, and the selected day's strip below (`Open the day ›`) so one tap always produces words. Defaults to everyone. - Both surfaces render calendar rows through one shared renderer (web `wideRow`, Compose `CalEntryRow`) — the fork the Today-vs-Jobs card grew is structurally blocked here. - Live goldens: six new page cases (week desktop+phone, dots phone) ride with the web commit; the four existing calendar pages re-record separately (every toolbar gained the Week switch). Stacked on #261. Design: calendar handoff §2.4 + §2.5, calendar-demo.dc.html. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The §2.4 week view joins month and agenda, so the synced view override
(ADR-0029, #50) grows CALENDAR_VIEW_WEEK — an added enum value, never a
renumbering (ADR-0035). Clients that predate it read an unknown value as
their zero and fall back to auto, which is the safe wrong answer.
Agenda first (#192): a reading column capped at 40rem with the date on
a left rail — weekday, big date, count — spanning the whole month, empty
days keeping one collapsed line with an add link (the gap between the
20th and the 22nd is information), today a tinted rail with the word,
and the column opening scrolled to it. Rows are the §2.1 wide rows with
the clock trailing the title, replacing the old icon-row grammar.

Week is new: seven columns honest about what 44px can hold — no titles
in the grid, a block is the person's colour and mark with the corners
carrying the type (rounded event, squared job), position on the hour
axis carrying the time. An untimed band rides the top so date-only and
all-day items survive the view switch; two-hourly rules from 07:00 with
the accent now-line, opening scrolled there; tapping a day fills the
strip at the bottom so one tap always produces words, tapping a block
opens the record; it defaults to everyone. The calView pref grows a
'week' value ahead of #197's segmented switcher.

Design: calendar handoff §2.4 and §2.5, calendar-demo.dc.html.
The Android half of #192, through the one shared CalEntryRow renderer so
a row cannot fork per surface: the agenda becomes the §2.5 reading
column — date rail with weekday, big date and count, whole month with
empty days keeping one collapsed add line, today tinted with the word,
opening scrolled to it — and the week view arrives: day heads, the
untimed band, two-hourly rules with the accent now-line, person-colour
blocks whose corners carry the type, the selected day's strip below,
week steppers. The calView pref maps its new week value both ways in
the settings sync.

Design: calendar handoff §2.4 and §2.5, calendar-demo.dc.html.
test(ui): re-record the calendar page goldens for the week toggle
Some checks failed
check / commits (pull_request) Successful in 31s
check / go (pull_request) Successful in 2m56s
check / report (pull_request) Successful in 6s
check / web (pull_request) Failing after 3m48s
android / build (pull_request) Failing after 4m48s
android / report (pull_request) Successful in 4s
99844561f7
Every calendar page's toolbar gained the Week switch, and the agenda
pages moved to the §2.5 rail — re-recorded on their own so the code
commits' diffs stay code. The six new week/dots page cases ride with
the web commit that added them.

Test report

Suite Tests Result Skipped
Unit 1440 ✅ pass 1
Integration 133 ✅ pass —

Coverage: 27.0%

Updated by the check workflow · commit 7d3a14816b

<!-- ci-test-report --> ## Test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit | 1440 | ✅ pass | 1 | | Integration | 133 | ✅ pass | — | **Coverage:** 27.0% <sub>Updated by the check workflow · commit 7d3a14816b6cc64625b86948ae0dcc5f73a26066</sub>

Android test report

Suite Tests Result Skipped
Unit (debug) 193 ✅ pass 0

Coverage: 9.4% of lines

Updated by the android workflow · commit 7d3a14816b

<!-- android-test-report --> ## Android test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit (debug) | 193 | ✅ pass | 0 | **Coverage:** 9.4% of lines <sub>Updated by the android workflow · commit 7d3a14816b6cc64625b86948ae0dcc5f73a26066</sub>
nalum force-pushed feat/calendar-agenda-week from 99844561f7
Some checks failed
check / commits (pull_request) Successful in 31s
check / go (pull_request) Successful in 2m56s
check / report (pull_request) Successful in 6s
check / web (pull_request) Failing after 3m48s
android / build (pull_request) Failing after 4m48s
android / report (pull_request) Successful in 4s
to 9a467a7e0b
Some checks failed
check / commits (pull_request) Successful in 13s
check / go (pull_request) Successful in 3m0s
check / report (pull_request) Successful in 4s
android / build (pull_request) Failing after 4m44s
android / report (pull_request) Successful in 5s
check / web (pull_request) Failing after 3m43s
2026-08-26 03:25:23 +00:00
Compare
nalum force-pushed feat/calendar-agenda-week from 9a467a7e0b
Some checks failed
check / commits (pull_request) Successful in 13s
check / go (pull_request) Successful in 3m0s
check / report (pull_request) Successful in 4s
android / build (pull_request) Failing after 4m44s
android / report (pull_request) Successful in 5s
check / web (pull_request) Failing after 3m43s
to eb8a51b4d1
Some checks failed
check / commits (pull_request) Successful in 15s
check / go (pull_request) Successful in 2m47s
check / web (pull_request) Failing after 4m15s
android / build (pull_request) Successful in 7m20s
check / report (pull_request) Successful in 4s
android / report (pull_request) Successful in 6s
2026-08-26 03:45:44 +00:00
Compare
nalum force-pushed feat/calendar-agenda-week from eb8a51b4d1
Some checks failed
check / commits (pull_request) Successful in 15s
check / go (pull_request) Successful in 2m47s
check / web (pull_request) Failing after 4m15s
android / build (pull_request) Successful in 7m20s
check / report (pull_request) Successful in 4s
android / report (pull_request) Successful in 6s
to 7331bd61b0
Some checks failed
check / commits (pull_request) Successful in 16s
check / go (pull_request) Successful in 3m0s
android / report (pull_request) Has been cancelled
check / report (pull_request) Has been cancelled
android / build (pull_request) Has been cancelled
check / web (pull_request) Has been cancelled
2026-08-26 04:32:40 +00:00
Compare
nalum force-pushed feat/calendar-agenda-week from 7331bd61b0
Some checks failed
check / commits (pull_request) Successful in 16s
check / go (pull_request) Successful in 3m0s
android / report (pull_request) Has been cancelled
check / report (pull_request) Has been cancelled
android / build (pull_request) Has been cancelled
check / web (pull_request) Has been cancelled
to d73b1b0d4a
Some checks failed
check / commits (pull_request) Successful in 24s
check / go (pull_request) Successful in 2m47s
android / build (pull_request) Successful in 7m27s
check / web (pull_request) Failing after 4m12s
check / report (pull_request) Successful in 5s
android / report (pull_request) Successful in 4s
2026-08-26 04:56:46 +00:00
Compare
nalum force-pushed feat/calendar-agenda-week from d73b1b0d4a
Some checks failed
check / commits (pull_request) Successful in 24s
check / go (pull_request) Successful in 2m47s
android / build (pull_request) Successful in 7m27s
check / web (pull_request) Failing after 4m12s
check / report (pull_request) Successful in 5s
android / report (pull_request) Successful in 4s
to d2b7694ff8
Some checks failed
check / commits (pull_request) Successful in 48s
check / go (pull_request) Successful in 3m22s
android / build (pull_request) Successful in 7m26s
check / web (pull_request) Successful in 5m5s
android / report (pull_request) Has been cancelled
check / report (pull_request) Has been cancelled
2026-08-26 05:41:07 +00:00
Compare
nalum force-pushed feat/calendar-agenda-week from d2b7694ff8
Some checks failed
check / commits (pull_request) Successful in 48s
check / go (pull_request) Successful in 3m22s
android / build (pull_request) Successful in 7m26s
check / web (pull_request) Successful in 5m5s
android / report (pull_request) Has been cancelled
check / report (pull_request) Has been cancelled
to ccd329c589
All checks were successful
check / commits (pull_request) Successful in 13s
check / go (pull_request) Successful in 2m46s
android / build (pull_request) Successful in 7m16s
check / web (pull_request) Successful in 5m3s
check / report (pull_request) Successful in 4s
android / report (pull_request) Successful in 4s
2026-08-26 06:16:41 +00:00
Compare
nalum force-pushed feat/calendar-agenda-week from ccd329c589
All checks were successful
check / commits (pull_request) Successful in 13s
check / go (pull_request) Successful in 2m46s
android / build (pull_request) Successful in 7m16s
check / web (pull_request) Successful in 5m3s
check / report (pull_request) Successful in 4s
android / report (pull_request) Successful in 4s
to 7d3a14816b
Some checks failed
check / commits (pull_request) Successful in 20s
check / go (pull_request) Successful in 2m57s
android / build (pull_request) Successful in 6m54s
check / web (pull_request) Failing after 5m30s
check / report (pull_request) Successful in 5s
android / report (pull_request) Successful in 4s
android / build (push) Has been cancelled
android / report (push) Has been cancelled
check / commits (push) Has been cancelled
check / go (push) Has been cancelled
check / report (push) Has been cancelled
check / web (push) Has been cancelled
tag / tag (push) Has been cancelled
2026-08-26 07:03:18 +00:00
Compare
nalum changed target branch from feat/calendar-day-sheet to main 2026-08-26 18:38:03 +00:00
nalum merged commit 7d3a14816b into main 2026-08-26 18:38:08 +00:00
nalum deleted branch feat/calendar-agenda-week 2026-08-26 18:38:10 +00:00
Sign in to join this conversation.
No reviewers
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
eagraiclainne/app!262
No description provided.