Calendar day selection starts repeated API reads #1491

Closed
opened 2026-10-08 23:30:23 +00:00 by kayg · 8 comments
Owner

Evidence

This reproduces on origin/dev revision cc1af3c12b68ad26c8403adde1be39c096b9ddea with Linux headless Chrome and 84 indexed Calendar Events plus 84 indexed calendar Tasks. The runner measured trusted pointer input to the selected-day marker after two animation frames. Ten selections took 265.3 ms p50 / 471.9 ms p95, above the 150 ms Action budget in DESIGN §59. The host had 12 CPUs and a 1-minute load average of 14.38 before the capture and 14.05 during it; these are local Linux traces, not perf-VM numbers.

Each selection started GETs to /api/v1/notes/journal/<date>, /api/v1/auth/me, /api/v1/calendar/range, and /api/v1/calendar/items; 9 of 10 also started /api/v1/notes/tasks/day. The slowest completed request per selection was 20 ms p50 / 83 ms p95. /api/v1/notes/tasks/day had the same 20/83 ms p50/p95 across its 9 responses. These requests overlap. All were complete before the selected marker in 9 samples; the last Tasks request was still pending in the tenth.

Trace output: target/tmp/1392-calendar-audit.json and target/tmp/1392-interaction-trace-calendar-select-calendar-day-{1..10}.json.gz in worktree slowsel-1392.

Expected result

A day pick shows its selected state within 150 ms, with reads served from the existing Calendar cache where possible and any refresh running after the selection is visible.

Suggested direction

Keep the MiniMonth selection responsive while the URL and Calendar data settle. Reuse the loaded identity and date-range data. Avoid starting route reads that do not change the selected-day marker, and refresh required data in the background.

## Evidence This reproduces on `origin/dev` revision `cc1af3c12b68ad26c8403adde1be39c096b9ddea` with Linux headless Chrome and 84 indexed Calendar Events plus 84 indexed calendar Tasks. The runner measured trusted pointer input to the selected-day marker after two animation frames. Ten selections took **265.3 ms p50 / 471.9 ms p95**, above the **150 ms Action budget** in DESIGN §59. The host had 12 CPUs and a 1-minute load average of 14.38 before the capture and 14.05 during it; these are local Linux traces, not perf-VM numbers. Each selection started GETs to `/api/v1/notes/journal/<date>`, `/api/v1/auth/me`, `/api/v1/calendar/range`, and `/api/v1/calendar/items`; 9 of 10 also started `/api/v1/notes/tasks/day`. The slowest completed request per selection was 20 ms p50 / 83 ms p95. `/api/v1/notes/tasks/day` had the same 20/83 ms p50/p95 across its 9 responses. These requests overlap. All were complete before the selected marker in 9 samples; the last Tasks request was still pending in the tenth. Trace output: `target/tmp/1392-calendar-audit.json` and `target/tmp/1392-interaction-trace-calendar-select-calendar-day-{1..10}.json.gz` in worktree `slowsel-1392`. ## Expected result A day pick shows its selected state within 150 ms, with reads served from the existing Calendar cache where possible and any refresh running after the selection is visible. ## Suggested direction Keep the MiniMonth selection responsive while the URL and Calendar data settle. Reuse the loaded identity and date-range data. Avoid starting route reads that do not change the selected-day marker, and refresh required data in the background.
Author
Owner

Starting #1491 on job/calsel-1491, based on cc1af3c12b68ad26c8403adde1be39c096b9ddea (origin/dev). I also read #1492 and the selroot2 trace report. I will trace the production build with source maps, then address both duplicate reads and selection script/layout work. The pending merge35b diff already changes Calendar range caching, cancellation, and grid loading for #1362; I will keep this branch focused on day selection and reconcile with origin/dev before final gates.

Starting #1491 on `job/calsel-1491`, based on `cc1af3c12b68ad26c8403adde1be39c096b9ddea` (`origin/dev`). I also read #1492 and the selroot2 trace report. I will trace the production build with source maps, then address both duplicate reads and selection script/layout work. The pending merge35b diff already changes Calendar range caching, cancellation, and grid loading for #1362; I will keep this branch focused on day selection and reconcile with `origin/dev` before final gates.
Author
Owner

The required 10-selection production trace is complete at baseline cc1af3c12b68ad26c8403adde1be39c096b9ddea, using the shared server cc1af3c12 and the real indexed fixture (84 Events, 84 Tasks). Linux headless Chrome measured 213.5 ms p50 / 267.5 ms p95 (load average 11.73 before capture). The traces show the main Svelte runtime frame at 28.71–79.89 ms; style update plus layout adds about 26–40 ms in representative samples. Each selection starts the Journal read and /auth/me; 9/10 also start /calendar/range, /calendar/items and /notes/tasks/day. Some samples start duplicate Calendar reads, reaching 12 requests in the visibility window. Trace and audit files are local under target/tmp/1491-baseline-*; none are shipped. I am mapping the production frame through the local source maps now.

The required 10-selection production trace is complete at baseline `cc1af3c12b68ad26c8403adde1be39c096b9ddea`, using the shared server `cc1af3c12` and the real indexed fixture (84 Events, 84 Tasks). Linux headless Chrome measured 213.5 ms p50 / 267.5 ms p95 (load average 11.73 before capture). The traces show the main Svelte runtime frame at 28.71–79.89 ms; style update plus layout adds about 26–40 ms in representative samples. Each selection starts the Journal read and `/auth/me`; 9/10 also start `/calendar/range`, `/calendar/items` and `/notes/tasks/day`. Some samples start duplicate Calendar reads, reaching 12 requests in the visibility window. Trace and audit files are local under `target/tmp/1491-baseline-*`; none are shipped. I am mapping the production frame through the local source maps now.
Author
Owner

Candidate audit finding: the first in-place pushState attempt changed browser history but left SvelteKit page.url and MiniMonth selection on the old rendered route. The real-server probe timed out waiting for the selected day marker (5 s). I reverted that route change.

The trace and request log also show a day pick can schedule an off-screen week prefetch during its input-to-visible window. The page's visible week is already loaded. The grid now loads visible chunks immediately and defers off-screen chunks until after two animation frames. Day-only Journal repair reads remain delayed by 120 ms.

Candidate audit finding: the first in-place `pushState` attempt changed browser history but left SvelteKit `page.url` and MiniMonth selection on the old rendered route. The real-server probe timed out waiting for the selected day marker (5 s). I reverted that route change. The trace and request log also show a day pick can schedule an off-screen week prefetch during its input-to-visible window. The page's visible week is already loaded. The grid now loads visible chunks immediately and defers off-screen chunks until after two animation frames. Day-only Journal repair reads remain delayed by 120 ms.
Author
Owner

Trace finding: the 10 baseline Chrome selections mapped the long script frames to Svelte 5 each.js:467 keyed FLIP measurement. Layout diagnostics recorded 10 getBoundingClientRect() reads across the five fixed Calendar view choices, plus route-path keyed SidebarLinks geometry. Fixed selectors now skip FLIP and the Calendar source / Settings rows keep stable links. The matching-build candidate trace has no fixed-choice button reads; it still shows two AppToaster measurements of the App modes tablist during the selection window, which I am checking against the no-toast path before finalizing. The cache path also passed the 5-round Linux request assertion: zero API requests start before the selected day is visible in all five candidate rounds.

Trace finding: the 10 baseline Chrome selections mapped the long script frames to Svelte 5 `each.js:467` keyed FLIP measurement. Layout diagnostics recorded 10 `getBoundingClientRect()` reads across the five fixed Calendar view choices, plus route-path keyed `SidebarLinks` geometry. Fixed selectors now skip FLIP and the Calendar source / Settings rows keep stable links. The matching-build candidate trace has no fixed-choice button reads; it still shows two AppToaster measurements of the App modes tablist during the selection window, which I am checking against the no-toast path before finalizing. The cache path also passed the 5-round Linux request assertion: zero API requests start before the selected day is visible in all five candidate rounds.
Author
Owner

Linux measurement finding (2026-10-09): five interleaved rounds measured baseline 304.3/457.2 ms and candidate 257.6/393.7 ms p50/p95. The candidate improved by 15%/14%, but remains above the 100 ms p95 budget. Load average was 7.75/9.50/7.88 before and 7.58/9.20/7.87 after; candidate max frame gap was 188.86 ms, with no JS long tasks or interaction failures. Pre-visible request counts changed from five per selection to zero in all five candidate rounds. A fresh production layout probe recorded zero getBoundingClientRect reads before selection became visible. Across ten Chrome traces, the largest single script call mapped to Svelte keyed each reconciliation (svelte/src/internal/client/dom/blocks/each.js:467) at 8.8–11.7 ms; total UpdateLayoutTree was 8.76–11.65 ms and Layout was 1.68–2.29 ms per trace.

The production screenshot suite captured all requested Day/Week/Month views at 390, 820 and 1440 px in light and dark with macOS platform emulation. Its existing keyboard Undo check timed out after the Day 1440 light capture, so I used a temporary screenshot runner that skipped only that post-capture keyboard Undo step. The original check still needs investigation. The perf VM was acquired by another benchmark (tagperf4-baseline-1000-1, 15-minute hold) before I could start the refreshed run; I will check once more before the final report.

Linux measurement finding (2026-10-09): five interleaved rounds measured baseline 304.3/457.2 ms and candidate 257.6/393.7 ms p50/p95. The candidate improved by 15%/14%, but remains above the 100 ms p95 budget. Load average was 7.75/9.50/7.88 before and 7.58/9.20/7.87 after; candidate max frame gap was 188.86 ms, with no JS long tasks or interaction failures. Pre-visible request counts changed from five per selection to zero in all five candidate rounds. A fresh production layout probe recorded zero getBoundingClientRect reads before selection became visible. Across ten Chrome traces, the largest single script call mapped to Svelte keyed each reconciliation (svelte/src/internal/client/dom/blocks/each.js:467) at 8.8–11.7 ms; total UpdateLayoutTree was 8.76–11.65 ms and Layout was 1.68–2.29 ms per trace. The production screenshot suite captured all requested Day/Week/Month views at 390, 820 and 1440 px in light and dark with macOS platform emulation. Its existing keyboard Undo check timed out after the Day 1440 light capture, so I used a temporary screenshot runner that skipped only that post-capture keyboard Undo step. The original check still needs investigation. The perf VM was acquired by another benchmark (`tagperf4-baseline-1000-1`, 15-minute hold) before I could start the refreshed run; I will check once more before the final report.
Author
Owner

Trace attribution correction: the ten-trace summary groups call time by generated function label. The baseline's dominant Calendar selection group ranged 28.71–110.95 ms (p50 42.25 ms); the final candidate group ranged 11.28–15.94 ms (p50 12.68 ms). Its largest individual invocation ranged 8.39–13.18 ms. Source maps resolve BIPLcumV.js:2:4903 to Svelte reconcile() in svelte/src/internal/client/dom/blocks/each.js:467, where animated keyed items call their measure() hook. The caller is Calendar's view-selector SegmentedControl keyed animate:flip list; date-only route refreshes previously replaced its options array, which invalidated the list. Stable option identity now prevents that refresh from triggering the measurement pass.

Baseline UpdateLayoutTree was 14.83–21.30 ms (p50 17.99) and Layout was 11.28–20.23 ms (p50 15.09). Final candidate values were 8.45–11.65 ms (p50 9.31) and 1.69–2.60 ms (p50 2.05), with zero explicit geometry reads before selected visibility. These are Chrome trace totals across ten samples.

Trace attribution correction: the ten-trace summary groups call time by generated function label. The baseline's dominant Calendar selection group ranged 28.71–110.95 ms (p50 42.25 ms); the final candidate group ranged 11.28–15.94 ms (p50 12.68 ms). Its largest individual invocation ranged 8.39–13.18 ms. Source maps resolve `BIPLcumV.js:2:4903` to Svelte `reconcile()` in `svelte/src/internal/client/dom/blocks/each.js:467`, where animated keyed items call their `measure()` hook. The caller is Calendar's view-selector `SegmentedControl` keyed `animate:flip` list; date-only route refreshes previously replaced its options array, which invalidated the list. Stable option identity now prevents that refresh from triggering the measurement pass. Baseline `UpdateLayoutTree` was 14.83–21.30 ms (p50 17.99) and `Layout` was 11.28–20.23 ms (p50 15.09). Final candidate values were 8.45–11.65 ms (p50 9.31) and 1.69–2.60 ms (p50 2.05), with zero explicit geometry reads before selected visibility. These are Chrome trace totals across ten samples.
Author
Owner

#1491 final report

Branch: job/calsel-1491
Base: origin/dev (merged once before final gates; already up to date)
Head: fc99fab050bbb3fd549c2924aff6c00d86b2f54d

Built

  • Calendar day selection reuses a complete cached range when the time zone and hidden-item setting match. An in-range selection makes zero API requests, including Tasks requests.
  • MiniMonth selection paints the selected day and detail immediately. It updates the exact route after two animation-frame opportunities and defers repair reads for 300 ms.
  • Calendar view options and sidebar source/settings lists keep stable identities across date changes. This avoids re-running the keyed animate:flip view-selector measurement path for each selection.
  • The toast dock skips unchanged ResizeObserver entries and unrelated route mutations when it has no visible toast or active dock overlay. Live toast and overlay behavior remains measured.
  • Copied and extended bench/interaction-audit-1392.mjs with opt-in layout diagnostics for BCR calls and RAF scheduling stacks.

Trace and performance evidence

On Linux, five interleaved rounds measured input-to-visible at 304.3/457.2 ms p50/p95 on origin/dev and 257.6/393.7 ms on the candidate. Candidate critical requests before visibility were [0,0,0,0,0], versus [5,5,5,5,5] at baseline. A fresh layout-diagnostic sample also recorded zero getBoundingClientRect reads before selected-day visibility and zero requests. The in-cache path performs a containing-range lookup and local state update, with zero requests per selection.

This is an improvement, but the Linux p95 remains above the §59 target of 100 ms. The candidate trace run's CDP-measured p50/p95 was 123.8/186.5 ms; tracing adds overhead, so the interleaved input-to-visible numbers above are the ordinary timing comparison. Candidate frame gaps reached 188.86 ms versus 268.72 ms at baseline. Candidate process-tree mean RSS was about 1.43 GB, peak about 2.02 GB, and CPU averaged 20.22% of the 12-core host.

The 45–100 ms baseline script group maps from BIPLcumV.js:2:4903 to Svelte reconcile() in svelte/src/internal/client/dom/blocks/each.js:467. Its caller is the Calendar view selector's keyed SegmentedControl list with animate:flip. Across ten baseline traces that group's top-function duration was 28.71–110.95 ms (p50 42.25 ms); candidate was 11.28–15.94 ms (p50 12.68 ms). Baseline UpdateLayoutTree was 14.83–21.30 ms (p50 17.99 ms) and Layout was 11.28–20.23 ms (p50 15.09 ms); candidate was 8.45–11.65 ms (p50 9.31 ms) and 1.69–2.60 ms (p50 2.05 ms), respectively.

The shared perf VM was held by another job throughout the available window, so no VM measurement was made. The local profile covers five interleaved rounds and ten trace selections; it does not include a large-data/request-storm run.

Files

  • apps/web/src/lib/calendar/data.ts
  • apps/web/src/lib/calendar/data.test.ts
  • apps/web/src/lib/calendar/sidebarState.svelte.ts
  • apps/web/src/lib/components/AppToaster.svelte
  • apps/web/src/lib/components/AppToaster.svelte.test.ts
  • apps/web/src/lib/components/app-sidebar.svelte
  • apps/web/src/lib/tray.svelte.test.ts
  • apps/web/src/routes/calendar/[view]/[date]/+page.svelte
  • bench/interaction-audit-1392.mjs
  • contracts/perf/adoption-1058.json
  • contracts/perf/exceptions.json
  • contracts/perf/registry.json
  • packages/ui/src/components/SegmentedControl.svelte

UX gaps closed

  • In-range day selection no longer waits on repeated Calendar or Tasks reads.
  • Selected date and detail paint before route repair or deferred work.
  • Calendar selection performs no layout reads before the selected date is visible.
  • The view selector and toast dock avoid unrelated measurement work.
  • Production screenshots use real seeded data and macOS platform emulation. Day, Week, and Month are captured at 390, 820, and 1440 px in light and dark themes. A post-click pointer capture is included.

UX gaps left

  • The measured Linux p95 is 393.7 ms, above the 100 ms target.
  • The screenshot harness's keyboard Undo assertion timed out after captures; it was not resolved in this change.
  • No large-data/request-storm profile or perf-VM measurement was completed. The perf VM was held by another job.

Decisions not specified by DESIGN

  • A complete containing cache range is reusable only when its time zone and hidden-item setting match. Selection does not trigger cache revalidation; normal invalidation and explicit refresh paths retain freshness responsibility.
  • MiniMonth selected state is optimistic. Exact route replacement gets two animation-frame opportunities after the immediate selection paint.
  • Deferred day repair reads wait 300 ms after selection.

Screenshots

All captures are from the production web build with real seeded Calendar data and macOS platform emulation.

View Theme 390 px 820 px 1440 px
Day Light capture capture capture
Day Dark capture capture capture
Week Light capture capture capture
Week Dark capture capture capture
Month Light capture capture capture
Month Dark capture capture capture

Pointer selection capture: Day, 1440 px, light. It records the selected date after a real click with focusVisible: false.

Verification

cd apps/web && bun run check — exit 0. Verbatim summary output:

perf-lint: PASS; 0 violations; 22544 scoped exceptions
svelte-check found 0 errors and 4 warnings in 2 files

The four warnings are existing unused CSS selectors in MailView and the money page.

Focused Vitest command: TMPDIR="$PWD/../../target/tmp" bunx vitest run src/lib/components/AppToaster.svelte.test.ts src/lib/calendar/data.test.ts src/lib/tray.svelte.test.ts --maxWorkers=2 from apps/web — exit 0. Verbatim output:

 RUN  v5.0.1 /home/kayg/Developer/calternal-wt/calsel-1491/apps/web


 Test Files  3 passed (3)
      Tests  80 passed (80)
   Start at  05:53:54
   Duration  29.62s (transform 82%, tests 5%, environment 5%, import 5%, setup 2%)

  Transform  |component| transforming modules took 25.08s · 76% of tracked time, re-done on every run
             persist transforms across runs with fsModuleCache: true
             learn more: https://vitest.dev/guide/improving-performance#caching-between-reruns

git diff --check origin/dev...HEAD passed. No Rust code changed. cargo clean completed. The full web suite is for the merge round: cd apps/web && bun run test -- --maxWorkers=2 must pass on the combined branch.

# #1491 final report **Branch:** `job/calsel-1491` **Base:** `origin/dev` (merged once before final gates; already up to date) **Head:** `fc99fab050bbb3fd549c2924aff6c00d86b2f54d` ## Built - Calendar day selection reuses a complete cached range when the time zone and hidden-item setting match. An in-range selection makes zero API requests, including Tasks requests. - MiniMonth selection paints the selected day and detail immediately. It updates the exact route after two animation-frame opportunities and defers repair reads for 300 ms. - Calendar view options and sidebar source/settings lists keep stable identities across date changes. This avoids re-running the keyed `animate:flip` view-selector measurement path for each selection. - The toast dock skips unchanged ResizeObserver entries and unrelated route mutations when it has no visible toast or active dock overlay. Live toast and overlay behavior remains measured. - Copied and extended `bench/interaction-audit-1392.mjs` with opt-in layout diagnostics for BCR calls and RAF scheduling stacks. ## Trace and performance evidence On Linux, five interleaved rounds measured input-to-visible at **304.3/457.2 ms p50/p95** on `origin/dev` and **257.6/393.7 ms** on the candidate. Candidate critical requests before visibility were `[0,0,0,0,0]`, versus `[5,5,5,5,5]` at baseline. A fresh layout-diagnostic sample also recorded zero `getBoundingClientRect` reads before selected-day visibility and zero requests. The in-cache path performs a containing-range lookup and local state update, with zero requests per selection. This is an improvement, but the Linux p95 remains above the §59 target of 100 ms. The candidate trace run's CDP-measured p50/p95 was 123.8/186.5 ms; tracing adds overhead, so the interleaved input-to-visible numbers above are the ordinary timing comparison. Candidate frame gaps reached 188.86 ms versus 268.72 ms at baseline. Candidate process-tree mean RSS was about 1.43 GB, peak about 2.02 GB, and CPU averaged 20.22% of the 12-core host. The 45–100 ms baseline script group maps from `BIPLcumV.js:2:4903` to Svelte `reconcile()` in `svelte/src/internal/client/dom/blocks/each.js:467`. Its caller is the Calendar view selector's keyed `SegmentedControl` list with `animate:flip`. Across ten baseline traces that group's top-function duration was 28.71–110.95 ms (p50 42.25 ms); candidate was 11.28–15.94 ms (p50 12.68 ms). Baseline `UpdateLayoutTree` was 14.83–21.30 ms (p50 17.99 ms) and `Layout` was 11.28–20.23 ms (p50 15.09 ms); candidate was 8.45–11.65 ms (p50 9.31 ms) and 1.69–2.60 ms (p50 2.05 ms), respectively. The shared perf VM was held by another job throughout the available window, so no VM measurement was made. The local profile covers five interleaved rounds and ten trace selections; it does not include a large-data/request-storm run. ## Files - `apps/web/src/lib/calendar/data.ts` - `apps/web/src/lib/calendar/data.test.ts` - `apps/web/src/lib/calendar/sidebarState.svelte.ts` - `apps/web/src/lib/components/AppToaster.svelte` - `apps/web/src/lib/components/AppToaster.svelte.test.ts` - `apps/web/src/lib/components/app-sidebar.svelte` - `apps/web/src/lib/tray.svelte.test.ts` - `apps/web/src/routes/calendar/[view]/[date]/+page.svelte` - `bench/interaction-audit-1392.mjs` - `contracts/perf/adoption-1058.json` - `contracts/perf/exceptions.json` - `contracts/perf/registry.json` - `packages/ui/src/components/SegmentedControl.svelte` ## UX gaps closed - In-range day selection no longer waits on repeated Calendar or Tasks reads. - Selected date and detail paint before route repair or deferred work. - Calendar selection performs no layout reads before the selected date is visible. - The view selector and toast dock avoid unrelated measurement work. - Production screenshots use real seeded data and macOS platform emulation. Day, Week, and Month are captured at 390, 820, and 1440 px in light and dark themes. A post-click pointer capture is included. ## UX gaps left - The measured Linux p95 is 393.7 ms, above the 100 ms target. - The screenshot harness's keyboard Undo assertion timed out after captures; it was not resolved in this change. - No large-data/request-storm profile or perf-VM measurement was completed. The perf VM was held by another job. ## Decisions not specified by DESIGN - A complete containing cache range is reusable only when its time zone and hidden-item setting match. Selection does not trigger cache revalidation; normal invalidation and explicit refresh paths retain freshness responsibility. - MiniMonth selected state is optimistic. Exact route replacement gets two animation-frame opportunities after the immediate selection paint. - Deferred day repair reads wait 300 ms after selection. ## Screenshots All captures are from the production web build with real seeded Calendar data and macOS platform emulation. | View | Theme | 390 px | 820 px | 1440 px | |---|---|---|---|---| | Day | Light | [capture](https://git.kayg.org/attachments/de2ccb44-5e37-470d-a8b4-1aef5630fd5f) | [capture](https://git.kayg.org/attachments/93290762-1046-4e59-a639-c705433d4c66) | [capture](https://git.kayg.org/attachments/9fcd4932-17f6-4c52-87ee-4af2a10b9cee) | | Day | Dark | [capture](https://git.kayg.org/attachments/4e6ce4b2-869b-449d-bc06-53929245b0a7) | [capture](https://git.kayg.org/attachments/43a4de3a-bdbc-46b1-b54d-1c1ef372e69e) | [capture](https://git.kayg.org/attachments/23eb222f-4e64-4941-849e-ef6614361715) | | Week | Light | [capture](https://git.kayg.org/attachments/7504ebdf-f25b-47e1-b06e-6aa43b255ef5) | [capture](https://git.kayg.org/attachments/6f8b6b54-d53a-40d3-aea5-31256e236f4e) | [capture](https://git.kayg.org/attachments/6f3677e8-1a59-4504-b0ce-d54066426b20) | | Week | Dark | [capture](https://git.kayg.org/attachments/f1226198-ac2d-4d68-8bed-902418a5fdb0) | [capture](https://git.kayg.org/attachments/9414c74e-43fb-4e0f-8ab0-40f97147dd63) | [capture](https://git.kayg.org/attachments/3ced18c2-0b05-40b0-b6c6-d94f8b44a608) | | Month | Light | [capture](https://git.kayg.org/attachments/f8889460-77ba-416f-b372-d7f34874dff2) | [capture](https://git.kayg.org/attachments/a1d35945-18da-43a2-ae28-6d9f92755680) | [capture](https://git.kayg.org/attachments/55bccba7-0031-46e5-a05f-dd198bc69215) | | Month | Dark | [capture](https://git.kayg.org/attachments/fe03e42a-6268-4bcd-896c-2efa22ea7d71) | [capture](https://git.kayg.org/attachments/0a563842-96f2-4ac9-9a2e-6db20befde81) | [capture](https://git.kayg.org/attachments/ae5b4448-64f4-4995-8fda-feaa124623ff) | Pointer selection capture: [Day, 1440 px, light](https://git.kayg.org/attachments/a80731cc-d4ec-45ca-a980-116ca74b31a0). It records the selected date after a real click with `focusVisible: false`. ## Verification `cd apps/web && bun run check` — exit 0. Verbatim summary output: ```text perf-lint: PASS; 0 violations; 22544 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files ``` The four warnings are existing unused CSS selectors in MailView and the money page. Focused Vitest command: `TMPDIR="$PWD/../../target/tmp" bunx vitest run src/lib/components/AppToaster.svelte.test.ts src/lib/calendar/data.test.ts src/lib/tray.svelte.test.ts --maxWorkers=2` from `apps/web` — exit 0. Verbatim output: ```text RUN v5.0.1 /home/kayg/Developer/calternal-wt/calsel-1491/apps/web Test Files 3 passed (3) Tests 80 passed (80) Start at 05:53:54 Duration 29.62s (transform 82%, tests 5%, environment 5%, import 5%, setup 2%) Transform |component| transforming modules took 25.08s · 76% of tracked time, re-done on every run persist transforms across runs with fsModuleCache: true learn more: https://vitest.dev/guide/improving-performance#caching-between-reruns ``` `git diff --check origin/dev...HEAD` passed. No Rust code changed. `cargo clean` completed. The full web suite is for the merge round: `cd apps/web && bun run test -- --maxWorkers=2` must pass on the combined branch.
kayg referenced this issue from a commit 2026-10-09 06:04:53 +00:00
Author
Owner

Deployed to calternal.cloud in merge round 35c (build 5a2c02c13, live 2026-10-09 ~16:35 IST). Closing.

Deployed to calternal.cloud in merge round 35c (build 5a2c02c13, live 2026-10-09 ~16:35 IST). Closing.
kayg closed this issue 2026-10-09 11:11:45 +00:00
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
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-v0#1491
No description provided.