feat(calendar): the row grammar at calendar scale #259

Merged
nalum merged 2 commits from feat/calendar-row-grammar into main 2026-08-26 18:37:45 +00:00
Owner

Implements #189 on both surfaces: CalMark, CalCellRow and CalendarItemRow (web CalendarRow.tsx, Compose CalendarRow.kt) — mark then title, the type carried by the mark's shape, the tick replacing the symbol only in narrow marks with no tick box, was due HH:MM · late in the warning role against an event span's muted ink (spans through the shared spanLabel, which timeRange now routes through), the celebrate pip and pill for worth, and the queued pill.

  • conformance/render-calendar-row.json pins the ordered inventory on both surfaces (vitest RTL + Robolectric), 12 cases.
  • Goldens: 60 Playwright + 60 Roborazzi — every case on hearth, the late-with-points case across all 19 families, both modes. New cases ride with the code per the repo rule.
  • Verdict on the demo's ✦ glyph: drawn with the app's star icon (as RewardMark already does) rather than adding a new character to the Eagrai Symbols subset.

Stacked on #258. Design: calendar handoff §2.1 + calendar-demo.dc.html layers 2–3.

🤖 Generated with Claude Code

Implements #189 on both surfaces: `CalMark`, `CalCellRow` and `CalendarItemRow` (web `CalendarRow.tsx`, Compose `CalendarRow.kt`) — mark then title, the type carried by the mark's shape, the tick replacing the symbol only in narrow marks with no tick box, `was due HH:MM · late` in the warning role against an event span's muted ink (spans through the shared `spanLabel`, which `timeRange` now routes through), the celebrate pip and pill for worth, and the queued pill. - `conformance/render-calendar-row.json` pins the ordered inventory on both surfaces (vitest RTL + Robolectric), 12 cases. - Goldens: 60 Playwright + 60 Roborazzi — every case on hearth, the late-with-points case across all 19 families, both modes. New cases ride with the code per the repo rule. - Verdict on the demo's ✦ glyph: drawn with the app's star icon (as `RewardMark` already does) rather than adding a new character to the Eagrai Symbols subset. Stacked on #258. Design: calendar handoff §2.1 + calendar-demo.dc.html layers 2–3. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
One row shape across month cells, the day sheet, agenda, the week strip
and the phone day list (#189), so the four surfaces teach each other:
mark then title, the TYPE carried by the mark's shape — squircle job,
circle event, dashed ? for up-for-grabs — with the tick replacing the
symbol only in narrow marks that have no tick box beside them, because
a wide row's box already says done and the row still has to say who.

Deadlines and durations are told apart in one place: a missed job clock
reads 'was due 09:45 · late' in the warning role, an event's span stays
muted ink through the shared spanLabel (timeRange now routes through it,
so the sheet and the rows can never disagree about a duration). Points
are visible before the tick — the celebrate pip at every size, the
number as a celebrate pill where the row has width, quiet 'claimed'
after. The worth glyph rides the app's star icon rather than a new ✦
character in the symbol subset, matching how RewardMark already draws it.

The fixture (conformance/render-calendar-row.json) pins the ordered
inventory; the gallery shoots every case on hearth and the late-with-
points case across all nineteen families. The Compose twin lands in the
next commit and holds itself to the same fixture.

Design: calendar handoff §2.1 and calendar-demo.dc.html layers 2-3.
feat(calendar): the row grammar at calendar scale, compose twin
Some checks failed
check / commits (pull_request) Successful in 14s
android / build (pull_request) Failing after 4m53s
android / report (pull_request) Successful in 4s
check / go (pull_request) Successful in 2m44s
check / report (pull_request) Successful in 5s
check / web (pull_request) Successful in 4m16s
eebdc3511a
The Android half of #189: CalMark, CalCellRow and CalendarItemRow mirror
the web grammar — squircle job, circle event, dashed ? for up-for-grabs,
the tick replacing the symbol only where no tick box sits beside it, the
celebrate pip and pill for worth, and 'was due HH:MM · late' in the
warning role against an event span's muted ink. Sizes ride the text
scale the way the web's em-derived marks do.

RenderConformanceTest holds the rows to the same ordered inventory as
the web suite (conformance/render-calendar-row.json), and Roborazzi
records every case on hearth plus the late-with-points case across all
nineteen families — the same matrix the Playwright gallery shoots.

Design: calendar handoff §2.1 and calendar-demo.dc.html layers 2-3.

Android test report

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

Coverage: 9.5% of lines

Updated by the android workflow · commit 288feb3b71

<!-- android-test-report --> ## Android test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit (debug) | 190 | ✅ pass | 0 | **Coverage:** 9.5% of lines <sub>Updated by the android workflow · commit 288feb3b71b10aef3f3c762c8cc02ded383a16b4</sub>

Test report

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

Coverage: 27.0%

Updated by the check workflow · commit 288feb3b71

<!-- 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 288feb3b71b10aef3f3c762c8cc02ded383a16b4</sub>
nalum force-pushed feat/calendar-row-grammar from eebdc3511a
Some checks failed
check / commits (pull_request) Successful in 14s
android / build (pull_request) Failing after 4m53s
android / report (pull_request) Successful in 4s
check / go (pull_request) Successful in 2m44s
check / report (pull_request) Successful in 5s
check / web (pull_request) Successful in 4m16s
to 14e0b8eacf
All checks were successful
check / commits (pull_request) Successful in 17s
check / go (pull_request) Successful in 3m5s
android / build (pull_request) Successful in 7m11s
check / web (pull_request) Successful in 4m32s
check / report (pull_request) Successful in 3s
android / report (pull_request) Successful in 4s
2026-08-26 03:45:32 +00:00
Compare
nalum force-pushed feat/calendar-row-grammar from 14e0b8eacf
All checks were successful
check / commits (pull_request) Successful in 17s
check / go (pull_request) Successful in 3m5s
android / build (pull_request) Successful in 7m11s
check / web (pull_request) Successful in 4m32s
check / report (pull_request) Successful in 3s
android / report (pull_request) Successful in 4s
to 15e3c30a86
Some checks failed
check / commits (pull_request) Successful in 17s
check / go (pull_request) Successful in 3m4s
android / build (pull_request) Successful in 7m2s
check / web (pull_request) Successful in 4m23s
android / report (pull_request) Has been cancelled
check / report (pull_request) Has been cancelled
2026-08-26 04:32:27 +00:00
Compare
nalum force-pushed feat/calendar-row-grammar from 15e3c30a86
Some checks failed
check / commits (pull_request) Successful in 17s
check / go (pull_request) Successful in 3m4s
android / build (pull_request) Successful in 7m2s
check / web (pull_request) Successful in 4m23s
android / report (pull_request) Has been cancelled
check / report (pull_request) Has been cancelled
to e95c018950
All checks were successful
check / commits (pull_request) Successful in 13s
check / go (pull_request) Successful in 3m9s
android / build (pull_request) Successful in 7m20s
check / web (pull_request) Successful in 4m30s
check / report (pull_request) Successful in 3s
android / report (pull_request) Successful in 4s
2026-08-26 04:56:40 +00:00
Compare
nalum force-pushed feat/calendar-row-grammar from e95c018950
All checks were successful
check / commits (pull_request) Successful in 13s
check / go (pull_request) Successful in 3m9s
android / build (pull_request) Successful in 7m20s
check / web (pull_request) Successful in 4m30s
check / report (pull_request) Successful in 3s
android / report (pull_request) Successful in 4s
to 987fa9cbea
Some checks failed
check / commits (pull_request) Successful in 16s
android / build (pull_request) Successful in 7m38s
check / go (pull_request) Successful in 3m18s
check / web (pull_request) Successful in 4m45s
android / report (pull_request) Has been cancelled
check / report (pull_request) Has been cancelled
2026-08-26 05:40:48 +00:00
Compare
nalum force-pushed feat/calendar-row-grammar from 987fa9cbea
Some checks failed
check / commits (pull_request) Successful in 16s
android / build (pull_request) Successful in 7m38s
check / go (pull_request) Successful in 3m18s
check / web (pull_request) Successful in 4m45s
android / report (pull_request) Has been cancelled
check / report (pull_request) Has been cancelled
to dba6e63736
All checks were successful
check / commits (pull_request) Successful in 13s
check / go (pull_request) Successful in 2m58s
android / build (pull_request) Successful in 6m52s
check / web (pull_request) Successful in 6m7s
check / report (pull_request) Successful in 4s
android / report (pull_request) Successful in 3s
2026-08-26 06:16:35 +00:00
Compare
nalum force-pushed feat/calendar-row-grammar from dba6e63736
All checks were successful
check / commits (pull_request) Successful in 13s
check / go (pull_request) Successful in 2m58s
android / build (pull_request) Successful in 6m52s
check / web (pull_request) Successful in 6m7s
check / report (pull_request) Successful in 4s
android / report (pull_request) Successful in 3s
to 288feb3b71
Some checks failed
check / commits (pull_request) Successful in 14s
check / go (pull_request) Successful in 2m54s
android / build (pull_request) Successful in 7m29s
check / web (pull_request) Successful in 4m53s
check / report (pull_request) Successful in 3s
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:27 +00:00
Compare
nalum changed target branch from feat/last-attendee-guard to main 2026-08-26 18:37:41 +00:00
nalum merged commit 288feb3b71 into main 2026-08-26 18:37:45 +00:00
nalum deleted branch feat/calendar-row-grammar 2026-08-26 18:37:46 +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!259
No description provided.