Calendar all-day row clips its items (only a sliver of the all-day event shows in Week view) #514

Open
opened 2026-09-30 12:14:44 +00:00 by kayg · 7 comments
Owner

Seen in the #508 screenshots (2026-09-30, Week view at 1440)

The all-day row shows only the bottom sliver of a green all-day item in the Tue column: the item is clipped by the all-day row height or drawn under the header band, so its title is unreadable.

Fix

The all-day row grows to fit its items (one line each, with +N beyond a max), and items are never clipped by the header band. Reuse the #384 all-day row rules. Screenshots of Week, Day and 3-day at 390 and 1440 in both themes with 1, 2 and 5 all-day items, plus 3x crops. Web gates.

## Seen in the #508 screenshots (2026-09-30, Week view at 1440) The all-day row shows only the bottom sliver of a green all-day item in the Tue column: the item is clipped by the all-day row height or drawn under the header band, so its title is unreadable. ## Fix The all-day row grows to fit its items (one line each, with +N beyond a max), and items are never clipped by the header band. Reuse the #384 all-day row rules. Screenshots of Week, Day and 3-day at 390 and 1440 in both themes with 1, 2 and 5 all-day items, plus 3x crops. Web gates.
Author
Owner

Starting #514 on branch job/allday-514, based on 8ac92b4008. I will inspect the existing #384 all-day behavior, fix the shared calendar row, capture the requested production screenshots, and run the web gates.

Starting #514 on branch job/allday-514, based on 8ac92b4008e489f22710878c69f481aabeabcb0a. I will inspect the existing #384 all-day behavior, fix the shared calendar row, capture the requested production screenshots, and run the web gates.
Author
Owner

Finding: TimeGrid.svelte fixes .allday at 28px and fixes both .head height and .tg-body top inset, so the lane cannot grow with multiple items. I am using three total visible rows on wide cells; the final row becomes +N, while narrow cells keep the existing count-only behavior from #384. This keeps the shared header bounded and lets the timed scroller start below it.

Finding: `TimeGrid.svelte` fixes `.allday` at 28px and fixes both `.head` height and `.tg-body` top inset, so the lane cannot grow with multiple items. I am using three total visible rows on wide cells; the final row becomes `+N`, while narrow cells keep the existing count-only behavior from #384. This keeps the shared header bounded and lets the timed scroller start below it.
Author
Owner

Finding: calendar-task-overflow.mjs passed its updated four-Task overflow count and list assertions. It then failed at the existing 390 px sheet-title assertion: the UI shows “All-day items for Thursday, 1 October” while the test expects “All-day items”. I left that expectation unchanged because #514 does not change the sheet title.

Finding: `calendar-task-overflow.mjs` passed its updated four-Task overflow count and list assertions. It then failed at the existing 390 px sheet-title assertion: the UI shows “All-day items for Thursday, 1 October” while the test expects “All-day items”. I left that expectation unchanged because #514 does not change the sheet title.
Author
Owner

Completed — #514

Commit: 928c12356f5a24683225fb0036ea466c28621e6b (Fix clipped Calendar all-day rows (#514)).

The Calendar all-day lane now grows to fit one line per visible item, up to three lines. When a day has more than three items, it shows two items and a +N control that opens the existing all-day item list. The shared header and timed scroller move together, so chips stay inside the all-day band and timed content starts below it. Narrow Week columns keep the count-only chip.

Files

  • packages/ui/src/components/calendar/TimeGrid.svelte — dynamic all-day lane and matching header/scroller offset.
  • apps/web/e2e/calendar-allday-514.mjs — production-build visual and geometry coverage using the real API with local CalDAV Events.
  • apps/web/e2e/calendar-task-overflow.mjs — updates the expected overflow count for the three-line lane.
  • apps/web/package.json — adds test:e2e:calendar-allday-514.

Production screenshots

The matrix covers Week and Day at 390px and 1440px in light and dark themes, with 1, 2 and 5 all-day Events. The 3-day evidence is a crop of three adjacent real Week columns because the app has no separate 3-day route. Every case also has a 3× crop. These are production screenshots; no screenshots are committed.

Items Week Day 3-day crop Day crop
1 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark
2 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark
5 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark 390px light · 390px dark · 1440px light · 1440px dark

Gates and evidence

bun run check (verbatim):

$ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json
Text sizes and UI shape values use shared role tokens.
UI transitions and animation options use shared motion tokens or documented exceptions.
Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/allday-514/apps/web
Getting Svelte diagnostics...

svelte-check found 0 errors and 0 warnings

bun run test (success output, verbatim):

$ vitest run

 RUN  v5.0.1 /home/kayg/Developer/calternal-wt/allday-514/apps/web

 Test Files  140 passed (140)
      Tests  930 passed (930)
   Start at  09:05:11
   Duration  121.48s (transform 51%, environment 18%, import 16%, tests 11%, setup 4%)

bun run test:e2e:calendar-allday-514 (passed):

Calendar all-day #514: 24 production screenshots and 24 3× crops saved in /home/kayg/Developer/calternal-wt/allday-514/apps/web/artifacts/allday-514

The targeted calendar-task-overflow.mjs run passed its item-count/list checks, then failed at its existing phone sheet-title assertion: actual All-day items for Thursday, 1 October, expected All-day items. That expectation was left unchanged. No Rust crate or API changed. Build output was cleaned after verification.

Decisions and known gaps

  • Issue #514 did not set a numeric row maximum, so the lane uses three visible lines total, including the overflow control.
  • There is no standalone 3-day route. Three adjacent Week columns are the closest existing view and are attached as the 3-day evidence.
  • The existing targeted task-overflow E2E has the sheet-title mismatch described above; the requested web gates and new all-day production E2E passed.
## Completed — #514 Commit: `928c12356f5a24683225fb0036ea466c28621e6b` (`Fix clipped Calendar all-day rows (#514)`). The Calendar all-day lane now grows to fit one line per visible item, up to three lines. When a day has more than three items, it shows two items and a `+N` control that opens the existing all-day item list. The shared header and timed scroller move together, so chips stay inside the all-day band and timed content starts below it. Narrow Week columns keep the count-only chip. ### Files - `packages/ui/src/components/calendar/TimeGrid.svelte` — dynamic all-day lane and matching header/scroller offset. - `apps/web/e2e/calendar-allday-514.mjs` — production-build visual and geometry coverage using the real API with local CalDAV Events. - `apps/web/e2e/calendar-task-overflow.mjs` — updates the expected overflow count for the three-line lane. - `apps/web/package.json` — adds `test:e2e:calendar-allday-514`. ### Production screenshots The matrix covers Week and Day at 390px and 1440px in light and dark themes, with 1, 2 and 5 all-day Events. The 3-day evidence is a crop of three adjacent real Week columns because the app has no separate 3-day route. Every case also has a 3× crop. These are production screenshots; no screenshots are committed. | Items | Week | Day | 3-day crop | Day crop | | --- | --- | --- | --- | --- | | 1 | [390px light](https://git.kayg.org/attachments/bc76b0a3-4751-4f9c-ad01-87e285786fd8) · [390px dark](https://git.kayg.org/attachments/f99194f5-31b6-4ac4-9880-cf5468a7e003) · [1440px light](https://git.kayg.org/attachments/8c8951ca-d98a-4eff-9e63-b0b8ed0b671f) · [1440px dark](https://git.kayg.org/attachments/dfc04a33-5caa-43b8-a8e4-1ce57524fadc) | [390px light](https://git.kayg.org/attachments/d7f598c9-95a4-4089-856d-e5c1750b63d2) · [390px dark](https://git.kayg.org/attachments/addfd307-6112-4c96-9211-5eae9670c5b8) · [1440px light](https://git.kayg.org/attachments/2ac30338-3eca-413d-9afb-a69ebe1d5797) · [1440px dark](https://git.kayg.org/attachments/edbd15ac-cf9c-4c9a-a083-83130983d791) | [390px light](https://git.kayg.org/attachments/4db914f4-e078-4b36-9b6d-457d7965aa97) · [390px dark](https://git.kayg.org/attachments/4071b45e-e4fd-4549-9b16-ebb8bc8bbf77) · [1440px light](https://git.kayg.org/attachments/a81869c5-f14a-46ef-a71d-b60ac9577787) · [1440px dark](https://git.kayg.org/attachments/5603c80e-37ef-4b4c-9cfe-7fdce457f69b) | [390px light](https://git.kayg.org/attachments/18fa3a8b-10d0-4ec2-a0ca-f8059c5170cc) · [390px dark](https://git.kayg.org/attachments/2427e026-886f-4123-9b27-6bc262725580) · [1440px light](https://git.kayg.org/attachments/9e9a1658-4a31-4939-8b31-6206a7c31309) · [1440px dark](https://git.kayg.org/attachments/e0ae2f06-f034-4771-9fb0-2cb9b6310d46) | | 2 | [390px light](https://git.kayg.org/attachments/5d4be779-7f88-455e-be01-1cbd8adfa75c) · [390px dark](https://git.kayg.org/attachments/8db04be2-1661-42a4-a3fe-5dc8312bddcf) · [1440px light](https://git.kayg.org/attachments/d3391426-de23-4780-9046-d78d06f917a7) · [1440px dark](https://git.kayg.org/attachments/f8f93f9f-e72a-40af-9407-03885715aa62) | [390px light](https://git.kayg.org/attachments/a820c38a-4ebe-491e-8452-2e1d259a7dc9) · [390px dark](https://git.kayg.org/attachments/1a881bf0-946a-4021-bf02-96ffac7975d5) · [1440px light](https://git.kayg.org/attachments/4f520ca3-4ced-418f-a2fe-6fc1e6e5e4b6) · [1440px dark](https://git.kayg.org/attachments/15182b1b-94ec-401e-acf6-5349179fa267) | [390px light](https://git.kayg.org/attachments/9ba4235b-fb61-4ec5-abc3-2904b1211fd5) · [390px dark](https://git.kayg.org/attachments/2081c1e6-eb3d-4085-84d5-e5cee08e3f6a) · [1440px light](https://git.kayg.org/attachments/8531c398-8d7c-4595-80de-112e3a826c5b) · [1440px dark](https://git.kayg.org/attachments/5b4b650d-3be5-40e3-83c8-f43c1e2bd976) | [390px light](https://git.kayg.org/attachments/dab2a447-1338-461e-99b5-44dccf7e4272) · [390px dark](https://git.kayg.org/attachments/f312a556-fc51-4b5d-96c0-65397c6964d8) · [1440px light](https://git.kayg.org/attachments/df4372b3-24c9-4daf-95ce-00052072642a) · [1440px dark](https://git.kayg.org/attachments/5891a0b2-0f51-4b9d-a412-78d0570f3d65) | | 5 | [390px light](https://git.kayg.org/attachments/b4338a59-e87b-4d9e-b572-66598a2a527d) · [390px dark](https://git.kayg.org/attachments/10753af4-b10e-43e4-befe-21fd9c604f97) · [1440px light](https://git.kayg.org/attachments/7e55ee3e-b393-42d8-9776-ac9fcd3859ba) · [1440px dark](https://git.kayg.org/attachments/637d1cdd-9fa1-4082-b122-7649bbeb7f13) | [390px light](https://git.kayg.org/attachments/4c7794e1-0bd6-4f4f-ab08-dc1edb9944a2) · [390px dark](https://git.kayg.org/attachments/feac17e9-14b8-49b2-b278-eab1cd82d359) · [1440px light](https://git.kayg.org/attachments/8928a531-4dd7-4bca-9fe9-b41e1d1fe599) · [1440px dark](https://git.kayg.org/attachments/82cf474c-e224-4777-8ea8-15b74a421e05) | [390px light](https://git.kayg.org/attachments/6539f28f-ff54-4a35-bebf-948f5b77e8b2) · [390px dark](https://git.kayg.org/attachments/9f9d9028-5722-4f18-87bb-ab6be79a52a7) · [1440px light](https://git.kayg.org/attachments/f4d7f5ce-bfb4-4ed7-bb44-707f914641fa) · [1440px dark](https://git.kayg.org/attachments/afc88d09-ae83-4c32-8092-b491901ececd) | [390px light](https://git.kayg.org/attachments/7e24c699-ec53-4b29-92db-23c313674a6f) · [390px dark](https://git.kayg.org/attachments/6e9b6d55-9052-44b8-86ad-77ecfd03d335) · [1440px light](https://git.kayg.org/attachments/e7d94732-beeb-40ad-b84e-527f1f1dc4d3) · [1440px dark](https://git.kayg.org/attachments/2dc5bcc2-6a1d-4500-b1b4-73d725d0ac52) | ### Gates and evidence `bun run check` (verbatim): ```text $ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json Text sizes and UI shape values use shared role tokens. UI transitions and animation options use shared motion tokens or documented exceptions. Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/allday-514/apps/web Getting Svelte diagnostics... svelte-check found 0 errors and 0 warnings ``` `bun run test` (success output, verbatim): ```text $ vitest run RUN v5.0.1 /home/kayg/Developer/calternal-wt/allday-514/apps/web Test Files 140 passed (140) Tests 930 passed (930) Start at 09:05:11 Duration 121.48s (transform 51%, environment 18%, import 16%, tests 11%, setup 4%) ``` `bun run test:e2e:calendar-allday-514` (passed): ```text Calendar all-day #514: 24 production screenshots and 24 3× crops saved in /home/kayg/Developer/calternal-wt/allday-514/apps/web/artifacts/allday-514 ``` The targeted `calendar-task-overflow.mjs` run passed its item-count/list checks, then failed at its existing phone sheet-title assertion: actual `All-day items for Thursday, 1 October`, expected `All-day items`. That expectation was left unchanged. No Rust crate or API changed. Build output was cleaned after verification. ### Decisions and known gaps - Issue #514 did not set a numeric row maximum, so the lane uses three visible lines total, including the overflow control. - There is no standalone 3-day route. Three adjacent Week columns are the closest existing view and are attached as the 3-day evidence. - The existing targeted task-overflow E2E has the sheet-title mismatch described above; the requested web gates and new all-day production E2E passed.
Author
Owner

Final update — #514

This report supersedes the earlier completion note. Final commit: 1de02b339ff99c70b1fe0e7b23ff80556e939244 (Cover Calendar all-day screenshots at tablet width), following 928c12356f5a24683225fb0036ea466c28621e6b (Fix clipped Calendar all-day rows (#514)).

The Calendar all-day lane grows to fit one line per visible item, up to three lines. Above three items, it shows two items and a +N control that opens the existing all-day item list. The shared header and timed scroller move together, so chips stay inside the all-day band and timed content starts below it. Narrow Week columns keep the count-only chip.

Files

  • packages/ui/src/components/calendar/TimeGrid.svelte — dynamic all-day lane and matching header/scroller offset.
  • apps/web/e2e/calendar-allday-514.mjs — production screenshots and row geometry coverage through the real Calendar API with local CalDAV Events.
  • apps/web/e2e/calendar-task-overflow.mjs — updates the expected overflow count for the three-line lane.
  • apps/web/package.json — adds test:e2e:calendar-allday-514.

Production screenshot evidence

The matrix covers Week and Day at phone (390px), tablet (820px) and desktop (1440px) widths, in light and dark themes, with 1, 2 and 5 all-day Events. The 3-day evidence is a crop of three adjacent real Week columns because the app has no separate 3-day route. Each case has a 3× crop. All 72 screenshots/crops are attached below and remain uncommitted.

Items Week Day 3-day crop Day crop
1 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark
2 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark
5 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark

Gates and E2E results

bun run check (verbatim):

$ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json
Text sizes and UI shape values use shared role tokens.
UI transitions and animation options use shared motion tokens or documented exceptions.
Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/allday-514/apps/web
Getting Svelte diagnostics...

svelte-check found 0 errors and 0 warnings

Final bun run test result (verbatim failure summary):

 ❯ |component| src/lib/calendar/TimeGrid.svelte.test.ts (8 tests | 1 failed) 9744ms
   ❯ TimeGrid hour labels (2)
     × replaces each hour row once when the saved clock cycle changes 5780ms

Error: Test timed out in 5000ms.

 Test Files  1 failed | 139 passed (140)
      Tests  1 failed | 929 passed (930)
   Start at  09:27:20
   Duration  111.49s (transform 50%, environment 19%, import 15%, tests 12%, setup 4%)

error: script "test" exited with code 1

A previous full-suite run before the tablet-width harness extension passed all 930 tests. This final run timed out in the existing TimeGrid hour labels test; no assertion or expectation was changed.

bun run test:e2e:calendar-allday-514 passed:

Calendar all-day #514: 36 production screenshots and 36 3× crops saved in /home/kayg/Developer/calternal-wt/allday-514/artifacts/allday-514

The targeted calendar-task-overflow.mjs run passed its row/list count checks, then hit its existing phone sheet-title assertion: actual All-day items for Thursday, 1 October, expected All-day items. That expectation was left unchanged. cargo build -p calternal-server succeeded for the production screenshot run; no Rust crate or API changed.

Decisions and known gaps

  • Issue #514 did not set a numeric row maximum, so the lane uses three visible lines total, including the overflow control.
  • There is no standalone 3-day route. Three adjacent Week columns are the closest existing view and are attached as the 3-day evidence.
  • The final web check passed, the production screenshot E2E passed, and the final unit suite had the single 5-second timeout described above.
## Final update — #514 This report supersedes the earlier completion note. Final commit: `1de02b339ff99c70b1fe0e7b23ff80556e939244` (`Cover Calendar all-day screenshots at tablet width`), following `928c12356f5a24683225fb0036ea466c28621e6b` (`Fix clipped Calendar all-day rows (#514)`). The Calendar all-day lane grows to fit one line per visible item, up to three lines. Above three items, it shows two items and a `+N` control that opens the existing all-day item list. The shared header and timed scroller move together, so chips stay inside the all-day band and timed content starts below it. Narrow Week columns keep the count-only chip. ### Files - `packages/ui/src/components/calendar/TimeGrid.svelte` — dynamic all-day lane and matching header/scroller offset. - `apps/web/e2e/calendar-allday-514.mjs` — production screenshots and row geometry coverage through the real Calendar API with local CalDAV Events. - `apps/web/e2e/calendar-task-overflow.mjs` — updates the expected overflow count for the three-line lane. - `apps/web/package.json` — adds `test:e2e:calendar-allday-514`. ### Production screenshot evidence The matrix covers Week and Day at phone (390px), tablet (820px) and desktop (1440px) widths, in light and dark themes, with 1, 2 and 5 all-day Events. The 3-day evidence is a crop of three adjacent real Week columns because the app has no separate 3-day route. Each case has a 3× crop. All 72 screenshots/crops are attached below and remain uncommitted. | Items | Week | Day | 3-day crop | Day crop | | --- | --- | --- | --- | --- | | 1 | [390px light](https://git.kayg.org/attachments/bc76b0a3-4751-4f9c-ad01-87e285786fd8) · [390px dark](https://git.kayg.org/attachments/f99194f5-31b6-4ac4-9880-cf5468a7e003) · [820px light](https://git.kayg.org/attachments/0bed3984-c9fc-432b-8bfd-1da80b3b69c3) · [820px dark](https://git.kayg.org/attachments/d20b9bdb-b621-449c-9e00-20b99a28c905) · [1440px light](https://git.kayg.org/attachments/8c8951ca-d98a-4eff-9e63-b0b8ed0b671f) · [1440px dark](https://git.kayg.org/attachments/dfc04a33-5caa-43b8-a8e4-1ce57524fadc) | [390px light](https://git.kayg.org/attachments/d7f598c9-95a4-4089-856d-e5c1750b63d2) · [390px dark](https://git.kayg.org/attachments/addfd307-6112-4c96-9211-5eae9670c5b8) · [820px light](https://git.kayg.org/attachments/f8072d0a-16da-4925-aa1b-08c2b4c4825d) · [820px dark](https://git.kayg.org/attachments/591f7fef-6b46-46c1-9874-9a5862f5e1ff) · [1440px light](https://git.kayg.org/attachments/2ac30338-3eca-413d-9afb-a69ebe1d5797) · [1440px dark](https://git.kayg.org/attachments/edbd15ac-cf9c-4c9a-a083-83130983d791) | [390px light](https://git.kayg.org/attachments/4db914f4-e078-4b36-9b6d-457d7965aa97) · [390px dark](https://git.kayg.org/attachments/4071b45e-e4fd-4549-9b16-ebb8bc8bbf77) · [820px light](https://git.kayg.org/attachments/11223d4b-7405-47ce-8df4-c8e60021c87e) · [820px dark](https://git.kayg.org/attachments/c25bbaf9-d8d7-4e1f-9891-8bb9c3588f86) · [1440px light](https://git.kayg.org/attachments/a81869c5-f14a-46ef-a71d-b60ac9577787) · [1440px dark](https://git.kayg.org/attachments/5603c80e-37ef-4b4c-9cfe-7fdce457f69b) | [390px light](https://git.kayg.org/attachments/18fa3a8b-10d0-4ec2-a0ca-f8059c5170cc) · [390px dark](https://git.kayg.org/attachments/2427e026-886f-4123-9b27-6bc262725580) · [820px light](https://git.kayg.org/attachments/db3a928d-0cbb-46e0-91b6-7b5157839081) · [820px dark](https://git.kayg.org/attachments/36e9dc1b-11f3-4701-baf7-8ed9049e267a) · [1440px light](https://git.kayg.org/attachments/9e9a1658-4a31-4939-8b31-6206a7c31309) · [1440px dark](https://git.kayg.org/attachments/e0ae2f06-f034-4771-9fb0-2cb9b6310d46) | | 2 | [390px light](https://git.kayg.org/attachments/5d4be779-7f88-455e-be01-1cbd8adfa75c) · [390px dark](https://git.kayg.org/attachments/8db04be2-1661-42a4-a3fe-5dc8312bddcf) · [820px light](https://git.kayg.org/attachments/89b0937e-d115-4279-9c1d-6ddd4a5ae8de) · [820px dark](https://git.kayg.org/attachments/d47eddd2-0715-495b-b514-5d1a030099b2) · [1440px light](https://git.kayg.org/attachments/d3391426-de23-4780-9046-d78d06f917a7) · [1440px dark](https://git.kayg.org/attachments/f8f93f9f-e72a-40af-9407-03885715aa62) | [390px light](https://git.kayg.org/attachments/a820c38a-4ebe-491e-8452-2e1d259a7dc9) · [390px dark](https://git.kayg.org/attachments/1a881bf0-946a-4021-bf02-96ffac7975d5) · [820px light](https://git.kayg.org/attachments/bf2cbf5b-8c14-45ef-acf9-67276afcafe8) · [820px dark](https://git.kayg.org/attachments/26e51ee1-baad-4118-8d22-fe6a4f145338) · [1440px light](https://git.kayg.org/attachments/4f520ca3-4ced-418f-a2fe-6fc1e6e5e4b6) · [1440px dark](https://git.kayg.org/attachments/15182b1b-94ec-401e-acf6-5349179fa267) | [390px light](https://git.kayg.org/attachments/9ba4235b-fb61-4ec5-abc3-2904b1211fd5) · [390px dark](https://git.kayg.org/attachments/2081c1e6-eb3d-4085-84d5-e5cee08e3f6a) · [820px light](https://git.kayg.org/attachments/11084cc2-c040-4040-b29d-1e9e04ffdd68) · [820px dark](https://git.kayg.org/attachments/d23c7068-3c6a-4e0d-a55a-727aa70ed2f7) · [1440px light](https://git.kayg.org/attachments/8531c398-8d7c-4595-80de-112e3a826c5b) · [1440px dark](https://git.kayg.org/attachments/5b4b650d-3be5-40e3-83c8-f43c1e2bd976) | [390px light](https://git.kayg.org/attachments/dab2a447-1338-461e-99b5-44dccf7e4272) · [390px dark](https://git.kayg.org/attachments/f312a556-fc51-4b5d-96c0-65397c6964d8) · [820px light](https://git.kayg.org/attachments/3133eb38-490d-4f05-9ec4-ebf889495e06) · [820px dark](https://git.kayg.org/attachments/946e6810-b4a0-4949-a7a9-4a672e51f3f9) · [1440px light](https://git.kayg.org/attachments/df4372b3-24c9-4daf-95ce-00052072642a) · [1440px dark](https://git.kayg.org/attachments/5891a0b2-0f51-4b9d-a412-78d0570f3d65) | | 5 | [390px light](https://git.kayg.org/attachments/b4338a59-e87b-4d9e-b572-66598a2a527d) · [390px dark](https://git.kayg.org/attachments/10753af4-b10e-43e4-befe-21fd9c604f97) · [820px light](https://git.kayg.org/attachments/db64c29e-f65b-47fd-bb78-fff5949e4ca8) · [820px dark](https://git.kayg.org/attachments/91042b1a-1c20-48df-911c-a027a2d2e10d) · [1440px light](https://git.kayg.org/attachments/7e55ee3e-b393-42d8-9776-ac9fcd3859ba) · [1440px dark](https://git.kayg.org/attachments/637d1cdd-9fa1-4082-b122-7649bbeb7f13) | [390px light](https://git.kayg.org/attachments/4c7794e1-0bd6-4f4f-ab08-dc1edb9944a2) · [390px dark](https://git.kayg.org/attachments/feac17e9-14b8-49b2-b278-eab1cd82d359) · [820px light](https://git.kayg.org/attachments/657ce2d0-6754-41fe-b457-a45f37344d16) · [820px dark](https://git.kayg.org/attachments/63c86ae2-ee56-4be0-805d-1656ffd38c98) · [1440px light](https://git.kayg.org/attachments/8928a531-4dd7-4bca-9fe9-b41e1d1fe599) · [1440px dark](https://git.kayg.org/attachments/82cf474c-e224-4777-8ea8-15b74a421e05) | [390px light](https://git.kayg.org/attachments/6539f28f-ff54-4a35-bebf-948f5b77e8b2) · [390px dark](https://git.kayg.org/attachments/9f9d9028-5722-4f18-87bb-ab6be79a52a7) · [820px light](https://git.kayg.org/attachments/43b015e3-8d65-4e03-aa68-d4efc737e83c) · [820px dark](https://git.kayg.org/attachments/01ed22ef-d059-4a99-a0c7-0248ad15113a) · [1440px light](https://git.kayg.org/attachments/f4d7f5ce-bfb4-4ed7-bb44-707f914641fa) · [1440px dark](https://git.kayg.org/attachments/afc88d09-ae83-4c32-8092-b491901ececd) | [390px light](https://git.kayg.org/attachments/7e24c699-ec53-4b29-92db-23c313674a6f) · [390px dark](https://git.kayg.org/attachments/6e9b6d55-9052-44b8-86ad-77ecfd03d335) · [820px light](https://git.kayg.org/attachments/f29d29f4-4717-4af2-b2b0-88d83cac4fac) · [820px dark](https://git.kayg.org/attachments/790967a9-bc20-484b-8801-eb64aeb7b4aa) · [1440px light](https://git.kayg.org/attachments/e7d94732-beeb-40ad-b84e-527f1f1dc4d3) · [1440px dark](https://git.kayg.org/attachments/2dc5bcc2-6a1d-4500-b1b4-73d725d0ac52) | ### Gates and E2E results `bun run check` (verbatim): ```text $ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json Text sizes and UI shape values use shared role tokens. UI transitions and animation options use shared motion tokens or documented exceptions. Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/allday-514/apps/web Getting Svelte diagnostics... svelte-check found 0 errors and 0 warnings ``` Final `bun run test` result (verbatim failure summary): ```text ❯ |component| src/lib/calendar/TimeGrid.svelte.test.ts (8 tests | 1 failed) 9744ms ❯ TimeGrid hour labels (2) × replaces each hour row once when the saved clock cycle changes 5780ms Error: Test timed out in 5000ms. Test Files 1 failed | 139 passed (140) Tests 1 failed | 929 passed (930) Start at 09:27:20 Duration 111.49s (transform 50%, environment 19%, import 15%, tests 12%, setup 4%) error: script "test" exited with code 1 ``` A previous full-suite run before the tablet-width harness extension passed all 930 tests. This final run timed out in the existing `TimeGrid hour labels` test; no assertion or expectation was changed. `bun run test:e2e:calendar-allday-514` passed: ```text Calendar all-day #514: 36 production screenshots and 36 3× crops saved in /home/kayg/Developer/calternal-wt/allday-514/artifacts/allday-514 ``` The targeted `calendar-task-overflow.mjs` run passed its row/list count checks, then hit its existing phone sheet-title assertion: actual `All-day items for Thursday, 1 October`, expected `All-day items`. That expectation was left unchanged. `cargo build -p calternal-server` succeeded for the production screenshot run; no Rust crate or API changed. ### Decisions and known gaps - Issue #514 did not set a numeric row maximum, so the lane uses three visible lines total, including the overflow control. - There is no standalone 3-day route. Three adjacent Week columns are the closest existing view and are attached as the 3-day evidence. - The final web check passed, the production screenshot E2E passed, and the final unit suite had the single 5-second timeout described above.
Author
Owner

The existing calendar_grid baseline uses a busy week of timed Logs and Photos, with no all-day Events, so it does not exercise this lane. The perf VM lock probe was busy. I am adding a separate local #514 profile for 1/2/5 average Events and a 50-Event Day with a 24-request burst.

The existing `calendar_grid` baseline uses a busy week of timed Logs and Photos, with no all-day Events, so it does not exercise this lane. The perf VM lock probe was busy. I am adding a separate local #514 profile for 1/2/5 average Events and a 50-Event Day with a 24-request burst.
Author
Owner

Final report — #514

Final head: 100c524cfaa73199bfce0b2b59a0ac4eee2d0b5a. This report supersedes earlier completion notes.

The Calendar all-day lane now grows to fit one line per visible item, up to three lines. Above three items, it shows two items and a +N control that opens the existing all-day item list. The shared header and timed scroller move together, so chips stay inside the all-day band and timed content starts below it. Narrow Week columns keep the count-only chip.

Files

  • packages/ui/src/components/calendar/TimeGrid.svelte — dynamic lane and header/scroller offset.
  • apps/web/e2e/calendar-allday-514.mjs — production screenshots and lane geometry checks using real Calendar API data from local CalDAV Events.
  • apps/web/e2e/calendar-task-overflow.mjs — updates the expected overflow count for the three-line lane.
  • apps/web/package.json — adds test:e2e:calendar-allday-514.
  • bench/calendar-allday-514.mjs, bench/run.sh, docs/perf/README.md — add the all-day hot-path profile to the standard benchmark run.
  • docs/perf/runs/2026-10-01-issue-514.json and .md — record the local profile and baseline context.

Production screenshots

The matrix covers Week and Day at phone (390px), tablet (820px) and desktop (1440px), in light and dark themes, with 1, 2 and 5 all-day Events. The 3-day evidence is a crop of three adjacent real Week columns because the app has no separate 3-day route. There are 36 production screenshots and 36 3× crops; all are attached below and remain uncommitted.

Items Week Day 3-day crop Day crop
1 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark
2 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark
5 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark 390px light · 390px dark · 820px light · 820px dark · 1440px light · 1440px dark

Web gates and E2E

bun run check (verbatim):

$ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json
Text sizes and UI shape values use shared role tokens.
UI transitions and animation options use shared motion tokens or documented exceptions.
Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/allday-514/apps/web
Getting Svelte diagnostics...

svelte-check found 0 errors and 0 warnings

Final bun run test result (verbatim failure summary):

 ❯ |component| src/lib/calendar/TimeGrid.svelte.test.ts (8 tests | 1 failed) 9744ms
   ❯ TimeGrid hour labels (2)
     × replaces each hour row once when the saved clock cycle changes 5780ms

Error: Test timed out in 5000ms.

 Test Files  1 failed | 139 passed (140)
      Tests  1 failed | 929 passed (930)
   Start at  09:27:20
   Duration  111.49s (transform 50%, environment 19%, import 15%, tests 12%, setup 4%)

error: script "test" exited with code 1

A previous full-suite run before the tablet-width harness refinement passed 930 tests. The final run had one timeout in the existing TimeGrid hour labels test; the cause is unverified and no expectation changed.

bun run test:e2e:calendar-allday-514 passed:

Calendar all-day #514: 36 production screenshots and 36 3× crops saved in /home/kayg/Developer/calternal-wt/allday-514/artifacts/allday-514

The targeted calendar-task-overflow.mjs run passed its row/list checks, then failed its phone sheet-title assertion: actual All-day items for Thursday, 1 October, expected All-day items. That expectation was left unchanged.

Performance profile

bench/calendar-allday-514.mjs ran on the local calternal-dev host because the perf VM lock was busy. The host load averages were 32.36 before and 32.77 after. The standard bench runner now includes this profile. Results are recorded in the two docs/perf/runs/2026-10-01-issue-514.* files.

Fixture / measure p50 p95
1/2/5 Events — Day route render 1633.1 ms 4141.6 ms
1/2/5 Events — Week route render 1641.8 ms 5080.8 ms
50-Event Day — Day route render 2243.2 ms 2391.0 ms
50-Event Day — Week route render 2515.7 ms 4904.8 ms
24-request Calendar range burst 144.1 ms 238.4 ms

Average-fixture server CPU averaged 5.49% and peaked at 79.93%; mean/peak RSS was 180.0/191.7 MB. Worst-fixture server CPU averaged 3.61% and peaked at 39.81%; mean/peak RSS was 182.1/184.3 MB. These route timings were captured under high local load and are not a direct comparison with the #367 frame baseline. That baseline has desktop scroll frame p50/p95 of 50.1/116.6 ms and contains no all-day Events, so docs/perf/baseline.json remains unchanged pending a comparable locked VM run.

Decisions and known gaps

  • Issue #514 does not state the numeric row limit, so the lane uses three visible lines total, including +N.
  • There is no standalone 3-day route. Three adjacent Week columns are the closest existing view and are attached as the 3-day evidence.
  • The final web check passed. The production screenshot E2E and performance profile passed. The final unit run had the single timeout above; the targeted task-overflow run had the sheet-title mismatch above.
  • No Rust crate or API changed. cargo build --release -p calternal-server succeeded for the profile; cargo clean removed 7654 files (2.6 GiB), and the web build output was deleted.

Commits: 928c12356f5a24683225fb0036ea466c28621e6b, 1de02b339ff99c70b1fe0e7b23ff80556e939244, 100c524cfaa73199bfce0b2b59a0ac4eee2d0b5a.

## Final report — #514 Final head: `100c524cfaa73199bfce0b2b59a0ac4eee2d0b5a`. This report supersedes earlier completion notes. The Calendar all-day lane now grows to fit one line per visible item, up to three lines. Above three items, it shows two items and a `+N` control that opens the existing all-day item list. The shared header and timed scroller move together, so chips stay inside the all-day band and timed content starts below it. Narrow Week columns keep the count-only chip. ### Files - `packages/ui/src/components/calendar/TimeGrid.svelte` — dynamic lane and header/scroller offset. - `apps/web/e2e/calendar-allday-514.mjs` — production screenshots and lane geometry checks using real Calendar API data from local CalDAV Events. - `apps/web/e2e/calendar-task-overflow.mjs` — updates the expected overflow count for the three-line lane. - `apps/web/package.json` — adds `test:e2e:calendar-allday-514`. - `bench/calendar-allday-514.mjs`, `bench/run.sh`, `docs/perf/README.md` — add the all-day hot-path profile to the standard benchmark run. - `docs/perf/runs/2026-10-01-issue-514.json` and `.md` — record the local profile and baseline context. ### Production screenshots The matrix covers Week and Day at phone (390px), tablet (820px) and desktop (1440px), in light and dark themes, with 1, 2 and 5 all-day Events. The 3-day evidence is a crop of three adjacent real Week columns because the app has no separate 3-day route. There are 36 production screenshots and 36 3× crops; all are attached below and remain uncommitted. | Items | Week | Day | 3-day crop | Day crop | | --- | --- | --- | --- | --- | | 1 | [390px light](https://git.kayg.org/attachments/bc76b0a3-4751-4f9c-ad01-87e285786fd8) · [390px dark](https://git.kayg.org/attachments/f99194f5-31b6-4ac4-9880-cf5468a7e003) · [820px light](https://git.kayg.org/attachments/0bed3984-c9fc-432b-8bfd-1da80b3b69c3) · [820px dark](https://git.kayg.org/attachments/d20b9bdb-b621-449c-9e00-20b99a28c905) · [1440px light](https://git.kayg.org/attachments/8c8951ca-d98a-4eff-9e63-b0b8ed0b671f) · [1440px dark](https://git.kayg.org/attachments/dfc04a33-5caa-43b8-a8e4-1ce57524fadc) | [390px light](https://git.kayg.org/attachments/d7f598c9-95a4-4089-856d-e5c1750b63d2) · [390px dark](https://git.kayg.org/attachments/addfd307-6112-4c96-9211-5eae9670c5b8) · [820px light](https://git.kayg.org/attachments/f8072d0a-16da-4925-aa1b-08c2b4c4825d) · [820px dark](https://git.kayg.org/attachments/591f7fef-6b46-46c1-9874-9a5862f5e1ff) · [1440px light](https://git.kayg.org/attachments/2ac30338-3eca-413d-9afb-a69ebe1d5797) · [1440px dark](https://git.kayg.org/attachments/edbd15ac-cf9c-4c9a-a083-83130983d791) | [390px light](https://git.kayg.org/attachments/4db914f4-e078-4b36-9b6d-457d7965aa97) · [390px dark](https://git.kayg.org/attachments/4071b45e-e4fd-4549-9b16-ebb8bc8bbf77) · [820px light](https://git.kayg.org/attachments/11223d4b-7405-47ce-8df4-c8e60021c87e) · [820px dark](https://git.kayg.org/attachments/c25bbaf9-d8d7-4e1f-9891-8bb9c3588f86) · [1440px light](https://git.kayg.org/attachments/a81869c5-f14a-46ef-a71d-b60ac9577787) · [1440px dark](https://git.kayg.org/attachments/5603c80e-37ef-4b4c-9cfe-7fdce457f69b) | [390px light](https://git.kayg.org/attachments/18fa3a8b-10d0-4ec2-a0ca-f8059c5170cc) · [390px dark](https://git.kayg.org/attachments/2427e026-886f-4123-9b27-6bc262725580) · [820px light](https://git.kayg.org/attachments/db3a928d-0cbb-46e0-91b6-7b5157839081) · [820px dark](https://git.kayg.org/attachments/36e9dc1b-11f3-4701-baf7-8ed9049e267a) · [1440px light](https://git.kayg.org/attachments/9e9a1658-4a31-4939-8b31-6206a7c31309) · [1440px dark](https://git.kayg.org/attachments/e0ae2f06-f034-4771-9fb0-2cb9b6310d46) | | 2 | [390px light](https://git.kayg.org/attachments/5d4be779-7f88-455e-be01-1cbd8adfa75c) · [390px dark](https://git.kayg.org/attachments/8db04be2-1661-42a4-a3fe-5dc8312bddcf) · [820px light](https://git.kayg.org/attachments/89b0937e-d115-4279-9c1d-6ddd4a5ae8de) · [820px dark](https://git.kayg.org/attachments/d47eddd2-0715-495b-b514-5d1a030099b2) · [1440px light](https://git.kayg.org/attachments/d3391426-de23-4780-9046-d78d06f917a7) · [1440px dark](https://git.kayg.org/attachments/f8f93f9f-e72a-40af-9407-03885715aa62) | [390px light](https://git.kayg.org/attachments/a820c38a-4ebe-491e-8452-2e1d259a7dc9) · [390px dark](https://git.kayg.org/attachments/1a881bf0-946a-4021-bf02-96ffac7975d5) · [820px light](https://git.kayg.org/attachments/bf2cbf5b-8c14-45ef-acf9-67276afcafe8) · [820px dark](https://git.kayg.org/attachments/26e51ee1-baad-4118-8d22-fe6a4f145338) · [1440px light](https://git.kayg.org/attachments/4f520ca3-4ced-418f-a2fe-6fc1e6e5e4b6) · [1440px dark](https://git.kayg.org/attachments/15182b1b-94ec-401e-acf6-5349179fa267) | [390px light](https://git.kayg.org/attachments/9ba4235b-fb61-4ec5-abc3-2904b1211fd5) · [390px dark](https://git.kayg.org/attachments/2081c1e6-eb3d-4085-84d5-e5cee08e3f6a) · [820px light](https://git.kayg.org/attachments/11084cc2-c040-4040-b29d-1e9e04ffdd68) · [820px dark](https://git.kayg.org/attachments/d23c7068-3c6a-4e0d-a55a-727aa70ed2f7) · [1440px light](https://git.kayg.org/attachments/8531c398-8d7c-4595-80de-112e3a826c5b) · [1440px dark](https://git.kayg.org/attachments/5b4b650d-3be5-40e3-83c8-f43c1e2bd976) | [390px light](https://git.kayg.org/attachments/dab2a447-1338-461e-99b5-44dccf7e4272) · [390px dark](https://git.kayg.org/attachments/f312a556-fc51-4b5d-96c0-65397c6964d8) · [820px light](https://git.kayg.org/attachments/3133eb38-490d-4f05-9ec4-ebf889495e06) · [820px dark](https://git.kayg.org/attachments/946e6810-b4a0-4949-a7a9-4a672e51f3f9) · [1440px light](https://git.kayg.org/attachments/df4372b3-24c9-4daf-95ce-00052072642a) · [1440px dark](https://git.kayg.org/attachments/5891a0b2-0f51-4b9d-a412-78d0570f3d65) | | 5 | [390px light](https://git.kayg.org/attachments/b4338a59-e87b-4d9e-b572-66598a2a527d) · [390px dark](https://git.kayg.org/attachments/10753af4-b10e-43e4-befe-21fd9c604f97) · [820px light](https://git.kayg.org/attachments/db64c29e-f65b-47fd-bb78-fff5949e4ca8) · [820px dark](https://git.kayg.org/attachments/91042b1a-1c20-48df-911c-a027a2d2e10d) · [1440px light](https://git.kayg.org/attachments/7e55ee3e-b393-42d8-9776-ac9fcd3859ba) · [1440px dark](https://git.kayg.org/attachments/637d1cdd-9fa1-4082-b122-7649bbeb7f13) | [390px light](https://git.kayg.org/attachments/4c7794e1-0bd6-4f4f-ab08-dc1edb9944a2) · [390px dark](https://git.kayg.org/attachments/feac17e9-14b8-49b2-b278-eab1cd82d359) · [820px light](https://git.kayg.org/attachments/657ce2d0-6754-41fe-b457-a45f37344d16) · [820px dark](https://git.kayg.org/attachments/63c86ae2-ee56-4be0-805d-1656ffd38c98) · [1440px light](https://git.kayg.org/attachments/8928a531-4dd7-4bca-9fe9-b41e1d1fe599) · [1440px dark](https://git.kayg.org/attachments/82cf474c-e224-4777-8ea8-15b74a421e05) | [390px light](https://git.kayg.org/attachments/6539f28f-ff54-4a35-bebf-948f5b77e8b2) · [390px dark](https://git.kayg.org/attachments/9f9d9028-5722-4f18-87bb-ab6be79a52a7) · [820px light](https://git.kayg.org/attachments/43b015e3-8d65-4e03-aa68-d4efc737e83c) · [820px dark](https://git.kayg.org/attachments/01ed22ef-d059-4a99-a0c7-0248ad15113a) · [1440px light](https://git.kayg.org/attachments/f4d7f5ce-bfb4-4ed7-bb44-707f914641fa) · [1440px dark](https://git.kayg.org/attachments/afc88d09-ae83-4c32-8092-b491901ececd) | [390px light](https://git.kayg.org/attachments/7e24c699-ec53-4b29-92db-23c313674a6f) · [390px dark](https://git.kayg.org/attachments/6e9b6d55-9052-44b8-86ad-77ecfd03d335) · [820px light](https://git.kayg.org/attachments/f29d29f4-4717-4af2-b2b0-88d83cac4fac) · [820px dark](https://git.kayg.org/attachments/790967a9-bc20-484b-8801-eb64aeb7b4aa) · [1440px light](https://git.kayg.org/attachments/e7d94732-beeb-40ad-b84e-527f1f1dc4d3) · [1440px dark](https://git.kayg.org/attachments/2dc5bcc2-6a1d-4500-b1b4-73d725d0ac52) | ### Web gates and E2E `bun run check` (verbatim): ```text $ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json Text sizes and UI shape values use shared role tokens. UI transitions and animation options use shared motion tokens or documented exceptions. Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/allday-514/apps/web Getting Svelte diagnostics... svelte-check found 0 errors and 0 warnings ``` Final `bun run test` result (verbatim failure summary): ```text ❯ |component| src/lib/calendar/TimeGrid.svelte.test.ts (8 tests | 1 failed) 9744ms ❯ TimeGrid hour labels (2) × replaces each hour row once when the saved clock cycle changes 5780ms Error: Test timed out in 5000ms. Test Files 1 failed | 139 passed (140) Tests 1 failed | 929 passed (930) Start at 09:27:20 Duration 111.49s (transform 50%, environment 19%, import 15%, tests 12%, setup 4%) error: script "test" exited with code 1 ``` A previous full-suite run before the tablet-width harness refinement passed 930 tests. The final run had one timeout in the existing `TimeGrid hour labels` test; the cause is unverified and no expectation changed. `bun run test:e2e:calendar-allday-514` passed: ```text Calendar all-day #514: 36 production screenshots and 36 3× crops saved in /home/kayg/Developer/calternal-wt/allday-514/artifacts/allday-514 ``` The targeted `calendar-task-overflow.mjs` run passed its row/list checks, then failed its phone sheet-title assertion: actual `All-day items for Thursday, 1 October`, expected `All-day items`. That expectation was left unchanged. ### Performance profile `bench/calendar-allday-514.mjs` ran on the local `calternal-dev` host because the perf VM lock was busy. The host load averages were 32.36 before and 32.77 after. The standard bench runner now includes this profile. Results are recorded in the two `docs/perf/runs/2026-10-01-issue-514.*` files. | Fixture / measure | p50 | p95 | | --- | ---: | ---: | | 1/2/5 Events — Day route render | 1633.1 ms | 4141.6 ms | | 1/2/5 Events — Week route render | 1641.8 ms | 5080.8 ms | | 50-Event Day — Day route render | 2243.2 ms | 2391.0 ms | | 50-Event Day — Week route render | 2515.7 ms | 4904.8 ms | | 24-request Calendar range burst | 144.1 ms | 238.4 ms | Average-fixture server CPU averaged 5.49% and peaked at 79.93%; mean/peak RSS was 180.0/191.7 MB. Worst-fixture server CPU averaged 3.61% and peaked at 39.81%; mean/peak RSS was 182.1/184.3 MB. These route timings were captured under high local load and are not a direct comparison with the #367 frame baseline. That baseline has desktop scroll frame p50/p95 of 50.1/116.6 ms and contains no all-day Events, so `docs/perf/baseline.json` remains unchanged pending a comparable locked VM run. ### Decisions and known gaps - Issue #514 does not state the numeric row limit, so the lane uses three visible lines total, including `+N`. - There is no standalone 3-day route. Three adjacent Week columns are the closest existing view and are attached as the 3-day evidence. - The final web check passed. The production screenshot E2E and performance profile passed. The final unit run had the single timeout above; the targeted task-overflow run had the sheet-title mismatch above. - No Rust crate or API changed. `cargo build --release -p calternal-server` succeeded for the profile; `cargo clean` removed 7654 files (2.6 GiB), and the web build output was deleted. Commits: `928c12356f5a24683225fb0036ea466c28621e6b`, `1de02b339ff99c70b1fe0e7b23ff80556e939244`, `100c524cfaa73199bfce0b2b59a0ac4eee2d0b5a`.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
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
kayg/calternal#514
No description provided.