CALENDAR: header row and time column as tinted glass (not black), via the shared glass role #247

Closed
opened 2026-09-27 17:02:30 +00:00 by kayg · 22 comments
Owner

Owner report from calternal.cloud (2026-09-27, Calendar Week view, dark theme): "the header row/column don't need to be black, make them clear/gray tinted. just a clear background with enough tint so that the text remains readable and the row/column feels lifted!"

Observed: the day-name header row, the all-day row and the time gutter column render as near-black opaque bands over the gradient background, while the grid itself is translucent.

Required

  • Header row (day names), all-day row and time gutter: a clear, lightly tinted glass that lets the background through and reads as "lifted" (slightly lighter than the grid in dark themes, slightly darker/greyer in light themes), text ≥ 4.5:1.
  • Code reuse (owner rule): use an EXISTING shared glass role from packages/ui/src/tokens.css (.glass-chrome-static / .glass-card / the tint tokens from #207). No new hard-coded colours or a calendar-specific blur. If no role fits exactly, adjust or add ONE token in tokens.css and use it everywhere this pattern occurs.
  • The sticky header row stays readable while events scroll under it: the shared role's blur applies there (not to the static gutter if it never overlaps content; then tint only).
  • Same treatment in Day, Week and Month (month weekday header), and the phone layouts; every theme (light + dark), photo and gradient backgrounds.
  • No borders added; separation by tint only.
    Screenshots before/after: Week and Day, light + dark, gradient and photo background, 1440 + 390 (attach, do not commit). Layout-sweep contrast check for the gutter and header labels.
Owner report from calternal.cloud (2026-09-27, Calendar Week view, dark theme): "the header row/column don't need to be black, make them clear/gray tinted. just a clear background with enough tint so that the text remains readable and the row/column feels lifted!" Observed: the day-name header row, the all-day row and the time gutter column render as near-black opaque bands over the gradient background, while the grid itself is translucent. ## Required - Header row (day names), all-day row and time gutter: a clear, lightly tinted glass that lets the background through and reads as "lifted" (slightly lighter than the grid in dark themes, slightly darker/greyer in light themes), text ≥ 4.5:1. - **Code reuse (owner rule):** use an EXISTING shared glass role from packages/ui/src/tokens.css (`.glass-chrome-static` / `.glass-card` / the tint tokens from #207). No new hard-coded colours or a calendar-specific blur. If no role fits exactly, adjust or add ONE token in tokens.css and use it everywhere this pattern occurs. - The sticky header row stays readable while events scroll under it: the shared role's blur applies there (not to the static gutter if it never overlaps content; then tint only). - Same treatment in Day, Week and Month (month weekday header), and the phone layouts; every theme (light + dark), photo and gradient backgrounds. - No borders added; separation by tint only. Screenshots before/after: Week and Day, light + dark, gradient and photo background, 1440 + 390 (attach, do not commit). Layout-sweep contrast check for the gutter and header labels.
Author
Owner

Starting #247 on job/cal-glass, based on dev at 200d171ea35e1de53ad56e6c1d7fcef95881f0a3. I’m checking the existing glass tokens, calendar layout and tag sidebar query before changing them. I’ll include #245 in this branch and attach real-build screenshots for the requested view/theme/background/viewport cases.

Starting #247 on `job/cal-glass`, based on `dev` at `200d171ea35e1de53ad56e6c1d7fcef95881f0a3`. I’m checking the existing glass tokens, calendar layout and tag sidebar query before changing them. I’ll include #245 in this branch and attach real-build screenshots for the requested view/theme/background/viewport cases.
Author
Owner

Finding for #245: app-sidebar.svelte loads only GET /api/v1/tags; that endpoint counts rows in the shared tags table (calternal-tags/src/index.rs::tag_counts). Calendar categories are stored in the separate cached calendar_events.tags_json column (calendar/migrations/0003_event_tags.sql and cache sync), so Events cannot appear in the sidebar list or its counts. I’m adding Calendar’s cached Event counts to that same sidebar source and wiring its tag link to a deep-linkable Calendar filter.

Finding for #245: `app-sidebar.svelte` loads only `GET /api/v1/tags`; that endpoint counts rows in the shared `tags` table (`calternal-tags/src/index.rs::tag_counts`). Calendar categories are stored in the separate cached `calendar_events.tags_json` column (`calendar/migrations/0003_event_tags.sql` and cache sync), so Events cannot appear in the sidebar list or its counts. I’m adding Calendar’s cached Event counts to that same sidebar source and wiring its tag link to a deep-linkable Calendar filter.
Author
Owner

Finding: the existing tagTree() adds exact-tag counts to descendant counts for parent rows. Returning a Calendar API count for every nested prefix would count Event memberships twice. The Calendar tags endpoint now returns exact category counts and lets tagTree() aggregate parents. Its targeted regression test also verifies duplicate categories and malformed cached tag JSON return 200 with stable counts.

Finding: the existing tagTree() adds exact-tag counts to descendant counts for parent rows. Returning a Calendar API count for every nested prefix would count Event memberships twice. The Calendar tags endpoint now returns exact category counts and lets tagTree() aggregate parents. Its targeted regression test also verifies duplicate categories and malformed cached tag JSON return 200 with stable counts.
Author
Owner

Correction to my earlier count note: calternal-tags::index::tag_counts returns distinct-object counts at every path prefix. I aligned the Calendar endpoint with that contract and updated the reused tagTree to use each prefix aggregate instead of adding descendant counts again. The Calendar route test and tagTree regression test now cover these semantics.

Correction to my earlier count note: calternal-tags::index::tag_counts returns distinct-object counts at every path prefix. I aligned the Calendar endpoint with that contract and updated the reused tagTree to use each prefix aggregate instead of adding descendant counts again. The Calendar route test and tagTree regression test now cover these semantics.
Author
Owner

Review captures

The attached contact sheets and ZIP contain all 32 before/after captures from the production SPA and a real local server.

Before, desktop

Before Calendar glass at 1440px

Before, phone

Before Calendar glass at 390px

After, desktop

After Calendar glass at 1440px

After, phone

After Calendar glass at 390px

Download the complete 32-image matrix

Decision

DESIGN §33 did not define which Calendar records a shared Event category selects. The ?tag= filter shows Calendar Events, Logs, and Tasks with the exact tag or a nested tag. It hides untagged Notes, Files, and Photos. The query remains in Calendar links as the view and date change, and the active tag chip clears it.

## Review captures The attached contact sheets and ZIP contain all 32 before/after captures from the production SPA and a real local server. **Before, desktop** ![Before Calendar glass at 1440px](https://git.kayg.org/attachments/e1d34e0c-2ad5-4393-961f-f5b471a4d702) **Before, phone** ![Before Calendar glass at 390px](https://git.kayg.org/attachments/1d881314-e275-4154-bb14-9e1ae8ffbfe4) **After, desktop** ![After Calendar glass at 1440px](https://git.kayg.org/attachments/8446beb8-28f3-4f1d-aa89-aae90ddab850) **After, phone** ![After Calendar glass at 390px](https://git.kayg.org/attachments/fdd01c47-51d8-4d78-a999-c2f858d64d6f) [Download the complete 32-image matrix](https://git.kayg.org/attachments/068a7d31-3c9f-40c4-8a06-cb15f849e560) ## Decision DESIGN §33 did not define which Calendar records a shared Event category selects. The `?tag=` filter shows Calendar Events, Logs, and Tasks with the exact tag or a nested tag. It hides untagged Notes, Files, and Photos. The query remains in Calendar links as the view and date change, and the active tag chip clears it.
Author
Owner

The integrated real-server probe logged calendar Event from Log: NO RESPONSE (b'timed out') during fixture setup. A prior Calendar Event create completed with HTTP 201 in 23.6s. I am waiting for the single run to finish to establish whether this is an API failure or only a fixture timeout under the current workload.

The integrated real-server probe logged `calendar Event from Log: NO RESPONSE (b'timed out')` during fixture setup. A prior Calendar Event create completed with HTTP 201 in 23.6s. I am waiting for the single run to finish to establish whether this is an API failure or only a fixture timeout under the current workload.
Author
Owner

The corrected integrated real-server run also logged calendar linked Note create: NO RESPONSE (b'timed out'). It occurred after 120 Photos fixture uploads and a 20-request duplicate Calendar-account storm; all storm requests returned the expected HTTP 409, and the fixture uploads returned HTTP 201/204 but were SLOW. The earlier run timed out on Calendar Event-from-Log setup under the same workload.

The corrected integrated real-server run also logged `calendar linked Note create: NO RESPONSE (b'timed out')`. It occurred after 120 Photos fixture uploads and a 20-request duplicate Calendar-account storm; all storm requests returned the expected HTTP 409, and the fixture uploads returned HTTP 201/204 but were SLOW. The earlier run timed out on Calendar Event-from-Log setup under the same workload.
Author
Owner

Resuming #247 on job/cal-glass for final verification. Branch HEAD: 4890c685621790635f49dcc3dac2cfd68fdaddbf; local dev: a2dca85ba850c8af4587cfec17f8793d654e7637; merge base: ac048aa4b8828ada23e2e6145739a70e146af1df. The Calendar wash and 32-image review matrix are already committed, and the screenshots are attached above. I’m merging current dev once, then running the requested final gates and one adversarial round.

Resuming #247 on `job/cal-glass` for final verification. Branch HEAD: `4890c685621790635f49dcc3dac2cfd68fdaddbf`; local `dev`: `a2dca85ba850c8af4587cfec17f8793d654e7637`; merge base: `ac048aa4b8828ada23e2e6145739a70e146af1df`. The Calendar wash and 32-image review matrix are already committed, and the screenshots are attached above. I’m merging current `dev` once, then running the requested final gates and one adversarial round.
Author
Owner

Verification findings after merging dev once:

  • bun e2e/layout-sweep.mjs --only calendar-week-busy checked 4 screens. It reported no Calendar contrast failures, but the 390px phone Week screen failed six button.dayhead.touch-hit checks: each rendered below the 44px minimum (rounded in the output as 44×48). This is a separate touch-target gap in the Calendar header and needs follow-up.
  • cargo test failed only calternal-collab/tests/hostile_clients.rs::continuous_typing_is_saved_within_the_maximum_wait, with no save during 5 s of typing. Other listed Rust test targets passed. This is SLOW-only under the shared host load, so I am recording it without rerunning the suite.

The one Calendar Event tag adversarial probe passed, including Unicode/bidi, a 65,536-byte category, 10 malformed inputs, and 24 parallel reads.

Verification findings after merging `dev` once: - `bun e2e/layout-sweep.mjs --only calendar-week-busy` checked 4 screens. It reported no Calendar contrast failures, but the 390px phone Week screen failed six `button.dayhead.touch-hit` checks: each rendered below the 44px minimum (rounded in the output as 44×48). This is a separate touch-target gap in the Calendar header and needs follow-up. - `cargo test` failed only `calternal-collab/tests/hostile_clients.rs::continuous_typing_is_saved_within_the_maximum_wait`, with `no save during 5 s of typing`. Other listed Rust test targets passed. This is SLOW-only under the shared host load, so I am recording it without rerunning the suite. The one Calendar Event tag adversarial probe passed, including Unicode/bidi, a 65,536-byte category, 10 malformed inputs, and 24 parallel reads.
Author
Owner

Final report — #247

Built: Calendar Day and Week headers, the all-day row, the time gutter, and the Month weekday row use the shared tinted glass wash. The sticky header uses the shared blur; the static gutter gets tint only. The readability floor checks the wash over theme backgrounds and user photo backgrounds. The branch also retains the Calendar Event tag sidebar/API slice from #245.

Files: packages/ui/src/tokens.css, packages/ui/src/components/calendar/TimeGrid.svelte, packages/ui/src/components/calendar/MonthGrid.svelte, apps/web/src/routes/calendar/[view]/[date]/+page.svelte, apps/web/src/lib/appearance/readability.ts and its tests, apps/web/src/lib/themes.test.ts, apps/web/e2e/layout-sweep.mjs, apps/web/e2e/calendar-glass-review.mjs, docs/DESIGN.md; the #245 slice also changes the Calendar tag API/view, sidebar, generated API contract/client, and their tests.

Screenshots: The production build regenerated all 32 before/after captures after the dev merge. The updated matrix is in artifacts/calendar-glass-review/ and artifacts/calendar-glass-review/calendar-glass-review-merged-dev.zip; these files are ignored and are not committed. The issue's preceding comment has the attached before/after sheets and original full matrix.

Merge and push: Merged dev once. git push origin job/cal-glass returned Everything up-to-date. Head SHA: 30e4c2dbae9c031fbee03e0c82d4270f11acbae7.

Gates (verbatim summaries):

  • cargo fmt --check: empty output; exit code 0.

  • cargo clippy --all-targets -- -D warnings:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 57.68s
    
  • cargo test:

    ---- continuous_typing_is_saved_within_the_maximum_wait stdout ----
    thread 'continuous_typing_is_saved_within_the_maximum_wait' (1486512) panicked at crates/calternal-collab/tests/hostile_clients.rs:394:5:
    no save during 5 s of typing
    test result: FAILED. 10 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 12.33s
    error: test failed, to rerun pass `-p calternal-collab --test hostile_clients`
    
  • bun run check:

    svelte-check found 0 errors and 0 warnings
    
  • bun run test:

     Test Files  86 passed (86)
          Tests  606 passed (606)
       Duration  148.65s (transform 67%, environment 12%, import 11%, tests 7%, setup 2%)
    
  • Calendar Event tag adversarial probe:

    calendar Event tag probe: Unicode/bidi, 65536-byte category, 10 malformed inputs, and 24 parallel tag/range/search reads passed
    

Remaining work: cargo test stopped on the single 5-second collaboration save deadline while the shared host was compiling other worktrees; this is recorded as SLOW-only and was not rerun. The Calendar layout sweep found six phone Week day-header targets below 44px (reported as 44×48 after rounding); it reported no Calendar contrast failures. I filed that separate accessibility follow-up as #273.

Decision not stated in DESIGN: The shared wash token uses the existing card alpha with --paper-2 in light themes and --surface in dark themes. This keeps the tint theme-aware without a Calendar-specific colour or blur.

## Final report — #247 **Built:** Calendar Day and Week headers, the all-day row, the time gutter, and the Month weekday row use the shared tinted glass wash. The sticky header uses the shared blur; the static gutter gets tint only. The readability floor checks the wash over theme backgrounds and user photo backgrounds. The branch also retains the Calendar Event tag sidebar/API slice from #245. **Files:** `packages/ui/src/tokens.css`, `packages/ui/src/components/calendar/TimeGrid.svelte`, `packages/ui/src/components/calendar/MonthGrid.svelte`, `apps/web/src/routes/calendar/[view]/[date]/+page.svelte`, `apps/web/src/lib/appearance/readability.ts` and its tests, `apps/web/src/lib/themes.test.ts`, `apps/web/e2e/layout-sweep.mjs`, `apps/web/e2e/calendar-glass-review.mjs`, `docs/DESIGN.md`; the #245 slice also changes the Calendar tag API/view, sidebar, generated API contract/client, and their tests. **Screenshots:** The production build regenerated all 32 before/after captures after the `dev` merge. The updated matrix is in `artifacts/calendar-glass-review/` and `artifacts/calendar-glass-review/calendar-glass-review-merged-dev.zip`; these files are ignored and are not committed. The issue's preceding comment has the attached before/after sheets and original full matrix. **Merge and push:** Merged `dev` once. `git push origin job/cal-glass` returned `Everything up-to-date`. Head SHA: `30e4c2dbae9c031fbee03e0c82d4270f11acbae7`. **Gates (verbatim summaries):** - `cargo fmt --check`: empty output; exit code 0. - `cargo clippy --all-targets -- -D warnings`: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 57.68s ``` - `cargo test`: ```text ---- continuous_typing_is_saved_within_the_maximum_wait stdout ---- thread 'continuous_typing_is_saved_within_the_maximum_wait' (1486512) panicked at crates/calternal-collab/tests/hostile_clients.rs:394:5: no save during 5 s of typing test result: FAILED. 10 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 12.33s error: test failed, to rerun pass `-p calternal-collab --test hostile_clients` ``` - `bun run check`: ```text svelte-check found 0 errors and 0 warnings ``` - `bun run test`: ```text Test Files 86 passed (86) Tests 606 passed (606) Duration 148.65s (transform 67%, environment 12%, import 11%, tests 7%, setup 2%) ``` - Calendar Event tag adversarial probe: ```text calendar Event tag probe: Unicode/bidi, 65536-byte category, 10 malformed inputs, and 24 parallel tag/range/search reads passed ``` **Remaining work:** `cargo test` stopped on the single 5-second collaboration save deadline while the shared host was compiling other worktrees; this is recorded as SLOW-only and was not rerun. The Calendar layout sweep found six phone Week day-header targets below 44px (reported as 44×48 after rounding); it reported no Calendar contrast failures. I filed that separate accessibility follow-up as #273. **Decision not stated in DESIGN:** The shared wash token uses the existing card alpha with `--paper-2` in light themes and `--surface` in dark themes. This keeps the tint theme-aware without a Calendar-specific colour or blur.
Author
Owner

Correction to my resumption note: the Calendar glass implementation and review runner are committed; the screenshot PNGs are not in Git. They remain in ignored artifacts/ and the earlier review comment has the attached matrix. The refreshed post-merge captures are also ignored.

Correction to my resumption note: the Calendar glass implementation and review runner are committed; the screenshot PNGs are not in Git. They remain in ignored `artifacts/` and the earlier review comment has the attached matrix. The refreshed post-merge captures are also ignored.
Author
Owner

Starting #247 follow-up on branch job/cal-glass. HEAD: 30e4c2dbae9c031fbee03e0c82d4270f11acbae7; base dev: 4787d78f8f788c3fee9477ba4474beb1f9c91747. I am tracing the calendar header overflow and adding a layout-sweep assertion, then I will run the requested focused checks.

Starting #247 follow-up on branch `job/cal-glass`. HEAD: `30e4c2dbae9c031fbee03e0c82d4270f11acbae7`; base `dev`: `4787d78f8f788c3fee9477ba4474beb1f9c91747`. I am tracing the calendar header overflow and adding a layout-sweep assertion, then I will run the requested focused checks.
Author
Owner

The first calendar sweep reported a phone Week label intersection. Geometry showed the cell clip began at x=69.97 while the sticky corner ended at x=69.59; the affected label ended at x=58.53 and was fully clipped. The assertion treated that empty clipped remainder as an intersection. I updated it to require positive visible text area. Follow-up bun e2e/layout-sweep.mjs --only calendar-week --screenshots artifacts/247-layout-sweep-week: checked 16 screens and LAYOUT SWEEP PASSED.

The first calendar sweep reported a phone Week label intersection. Geometry showed the cell clip began at x=69.97 while the sticky corner ended at x=69.59; the affected label ended at x=58.53 and was fully clipped. The assertion treated that empty clipped remainder as an intersection. I updated it to require positive visible text area. Follow-up `bun e2e/layout-sweep.mjs --only calendar-week --screenshots artifacts/247-layout-sweep-week`: `checked 16 screens` and `LAYOUT SWEEP PASSED`.
Author
Owner

Fresh production screenshots

The production SPA and real local server generated all 32 Week/Day captures: light and dark themes, gradient and photo backgrounds, at 1440 px and 390 px. The 4 contact sheets and full matrix are attached here.

Before, desktop

Before Calendar glass at 1440 px

Before, phone

Before Calendar glass at 390 px

After, desktop

After Calendar glass at 1440 px

After, phone

After Calendar glass at 390 px

Download all 32 screenshots and contact sheets

## Fresh production screenshots The production SPA and real local server generated all 32 Week/Day captures: light and dark themes, gradient and photo backgrounds, at 1440 px and 390 px. The 4 contact sheets and full matrix are attached here. **Before, desktop** ![Before Calendar glass at 1440 px](https://git.kayg.org/attachments/65ed5b79-357b-4b5c-b0ef-6c39114b7449) **Before, phone** ![Before Calendar glass at 390 px](https://git.kayg.org/attachments/e29adb53-b7fd-4d84-8e4d-b4a6ba990ec2) **After, desktop** ![After Calendar glass at 1440 px](https://git.kayg.org/attachments/fda1d2b0-1270-4c06-b1ed-311dff802b3b) **After, phone** ![After Calendar glass at 390 px](https://git.kayg.org/attachments/50efbfa1-c82f-468b-a681-7b4179f25f11) [Download all 32 screenshots and contact sheets](https://git.kayg.org/attachments/64eeb9f9-7c2c-40c5-828f-09ef308295f8)
Author
Owner

Isolated collaboration test reruns

Each command ran only continuous_typing_is_saved_within_the_maximum_wait in calternal-collab:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 15s
     Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9)

running 1 test
test continuous_typing_is_saved_within_the_maximum_wait ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.82s
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.48s
     Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9)

running 1 test
test continuous_typing_is_saved_within_the_maximum_wait ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.57s
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.44s
     Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9)

running 1 test
test continuous_typing_is_saved_within_the_maximum_wait ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.61s
## Isolated collaboration test reruns Each command ran only `continuous_typing_is_saved_within_the_maximum_wait` in `calternal-collab`: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 15s Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9) running 1 test test continuous_typing_is_saved_within_the_maximum_wait ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.82s ``` ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 0.48s Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9) running 1 test test continuous_typing_is_saved_within_the_maximum_wait ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.57s ``` ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 0.44s Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9) running 1 test test continuous_typing_is_saved_within_the_maximum_wait ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.61s ```
Author
Owner

Completion report

Branch: job/cal-glass
Head: 5ebefcca68c1c38ed45d5888e4e8c1fbd499c927 (pushed to origin/job/cal-glass)

Changes

  • packages/ui/src/components/calendar/TimeGrid.svelte: clip each weekday and all-day header cell at the live right edge of the sticky gutter. Recompute the inset after horizontal scroll and resize. The sticky corner remains clear and does not cover the off-screen day.
  • apps/web/e2e/layout-sweep.mjs: assert that visible Day/Week header text does not intersect the gutter/corner, probe intermediate scroll positions in both directions on desktop and phone, and keep Month weekday labels inside their own cells. Ignore thumbnail stack count badges in the adjacent icon/label check because the badge intentionally overlays the icon.
  • packages/ui/src/components/calendar/ItemPreview.svelte: raise the file-list icon 1px so the icon centre aligns with the label's cap-height centre.

Commits:

  • ce9273f9 fix(calendar): clip headers at the sticky gutter
  • 5ebefcca fix(calendar): align preview icons with cap height

Gates

cargo fmt --check: exit 0; no output.

cargo clippy --all-targets -- -D warnings:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 05s

cargo test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 4m 31s

test continuous_typing_is_saved_within_the_maximum_wait ... ok
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.68s

The collaboration save test also passed alone three times:

Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 15s
Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9)

running 1 test
test continuous_typing_is_saved_within_the_maximum_wait ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.82s
Finished `test` profile [unoptimized + debuginfo] target(s) in 0.48s
Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9)

running 1 test
test continuous_typing_is_saved_within_the_maximum_wait ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.57s
Finished `test` profile [unoptimized + debuginfo] target(s) in 0.44s
Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9)

running 1 test
test continuous_typing_is_saved_within_the_maximum_wait ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.61s

bun run check:

Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/cal-glass/apps/web
Getting Svelte diagnostics...

svelte-check found 0 errors and 0 warnings

bun run test:

 Test Files  86 passed (86)
      Tests  606 passed (606)
   Start at  01:34:14
   Duration  32.05s (transform 59%, import 15%, environment 14%, tests 8%, setup 3%)

The focused Week layout sweep reported:

checked 16 screens
LAYOUT SWEEP PASSED

The rebuilt focused preview sweep had no desktop icon-alignment warnings. The 92-screen calendar sweep and preview follow-up still hit phone preview waitFor timeouts at 30 seconds. Month reported CLS 0.112 and 0.102 while loading at 390px. These are SLOW/load findings; the Day/Week gutter assertion and Month heading-cell assertion reported no violations.

Production glass review:

PASS calendar glass review captures: 32 screenshots in /home/kayg/Developer/calternal-wt/cal-glass/artifacts/calendar-glass-review

Fresh attached screenshots:

Decisions

DESIGN specifies keeping the corner clear but does not prescribe how to clip a scrolled header. I compute the clip inset from the sticky corner's current right edge, cap it to the cell width, and update it after scroll/resize. I used a 1px optical lift for preview icons because flex aligns the line box while the owner rule checks the text cap-height centre.

cargo clean removed 14.6 GiB. apps/web/build and apps/web/.svelte-kit were removed after the gates. No API changed, so no adversarial server round was needed.

## Completion report **Branch:** `job/cal-glass` **Head:** `5ebefcca68c1c38ed45d5888e4e8c1fbd499c927` (pushed to `origin/job/cal-glass`) ### Changes - `packages/ui/src/components/calendar/TimeGrid.svelte`: clip each weekday and all-day header cell at the live right edge of the sticky gutter. Recompute the inset after horizontal scroll and resize. The sticky corner remains clear and does not cover the off-screen day. - `apps/web/e2e/layout-sweep.mjs`: assert that visible Day/Week header text does not intersect the gutter/corner, probe intermediate scroll positions in both directions on desktop and phone, and keep Month weekday labels inside their own cells. Ignore thumbnail stack count badges in the adjacent icon/label check because the badge intentionally overlays the icon. - `packages/ui/src/components/calendar/ItemPreview.svelte`: raise the file-list icon 1px so the icon centre aligns with the label's cap-height centre. Commits: - `ce9273f9 fix(calendar): clip headers at the sticky gutter` - `5ebefcca fix(calendar): align preview icons with cap height` ### Gates `cargo fmt --check`: exit 0; no output. `cargo clippy --all-targets -- -D warnings`: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 05s ``` `cargo test`: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 4m 31s test continuous_typing_is_saved_within_the_maximum_wait ... ok test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.68s ``` The collaboration save test also passed alone three times: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 15s Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9) running 1 test test continuous_typing_is_saved_within_the_maximum_wait ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.82s ``` ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 0.48s Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9) running 1 test test continuous_typing_is_saved_within_the_maximum_wait ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.57s ``` ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 0.44s Running tests/hostile_clients.rs (target/debug/deps/hostile_clients-163ac981e400e8b9) running 1 test test continuous_typing_is_saved_within_the_maximum_wait ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 10 filtered out; finished in 3.61s ``` `bun run check`: ```text Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/cal-glass/apps/web Getting Svelte diagnostics... svelte-check found 0 errors and 0 warnings ``` `bun run test`: ```text Test Files 86 passed (86) Tests 606 passed (606) Start at 01:34:14 Duration 32.05s (transform 59%, import 15%, environment 14%, tests 8%, setup 3%) ``` The focused Week layout sweep reported: ```text checked 16 screens LAYOUT SWEEP PASSED ``` The rebuilt focused preview sweep had no desktop icon-alignment warnings. The 92-screen calendar sweep and preview follow-up still hit phone preview `waitFor` timeouts at 30 seconds. Month reported CLS 0.112 and 0.102 while loading at 390px. These are SLOW/load findings; the Day/Week gutter assertion and Month heading-cell assertion reported no violations. Production glass review: ```text PASS calendar glass review captures: 32 screenshots in /home/kayg/Developer/calternal-wt/cal-glass/artifacts/calendar-glass-review ``` Fresh attached screenshots: - [Before, desktop](https://git.kayg.org/attachments/3de465fa-6394-4043-9658-01048e27444f) - [After, desktop](https://git.kayg.org/attachments/ea745753-4379-487a-9df9-f4eb16a06abc) - [Before, phone](https://git.kayg.org/attachments/4df1bafa-6c21-42c4-9188-c5398178b28a) - [After, phone](https://git.kayg.org/attachments/e69dc0d9-9fea-4980-9e6f-339b317e9d8f) - [Full screenshot archive](https://git.kayg.org/attachments/dd9d1081-6184-4246-b9db-54f611126921) ### Decisions DESIGN specifies keeping the corner clear but does not prescribe how to clip a scrolled header. I compute the clip inset from the sticky corner's current right edge, cap it to the cell width, and update it after scroll/resize. I used a 1px optical lift for preview icons because flex aligns the line box while the owner rule checks the text cap-height centre. `cargo clean` removed 14.6 GiB. `apps/web/build` and `apps/web/.svelte-kit` were removed after the gates. No API changed, so no adversarial server round was needed.
Author
Owner

Starting continuation on branch job/cal-glass. Current HEAD: 5ebefcca68. Merge base with origin/dev before the required single merge: a2dca85ba8.

Starting continuation on branch job/cal-glass. Current HEAD: 5ebefcca68c1c38ed45d5888e4e8c1fbd499c927. Merge base with origin/dev before the required single merge: a2dca85ba850c8af4587cfec17f8793d654e7637.
Author
Owner

Calendar layout sweep after the dev merge checked 45 screens and reported these findings:

  • calendar-month 390 open/collapsed paper: CLS 0.112 against the 0.100 limit. This happened under concurrent server, browser and performance jobs on the shared host, so I classify it as load-related.
  • menu-calendar-title 1440 open paper: the sweep timed out clicking .mh-switch. The desktop sidebar was open; ModeHeader sets titleMenuAvailable false when the sidebar is visible, so this test path targets a title menu that is not rendered in that state. I left the existing check unchanged.
  • calendar-preview 390 open/collapsed paper: after clicking a file pile, the sweep timed out waiting for .cal-popover. The result needs review; I did not change the assertion.
Calendar layout sweep after the dev merge checked 45 screens and reported these findings: - `calendar-month 390 open/collapsed paper`: CLS 0.112 against the 0.100 limit. This happened under concurrent server, browser and performance jobs on the shared host, so I classify it as load-related. - `menu-calendar-title 1440 open paper`: the sweep timed out clicking `.mh-switch`. The desktop sidebar was open; `ModeHeader` sets `titleMenuAvailable` false when the sidebar is visible, so this test path targets a title menu that is not rendered in that state. I left the existing check unchanged. - `calendar-preview 390 open/collapsed paper`: after clicking a file pile, the sweep timed out waiting for `.cal-popover`. The result needs review; I did not change the assertion.
Author
Owner

The adversarial round found an editor history consistency bug and I filed it as #281. With seed 25608414, the existing probe pasted one image, sent 500 Ctrl+Z presses and 500 Ctrl+Y presses, then observed three .cal-image-block elements (3 !== 1). The existing assertion is unchanged. This is a non-SLOW data consistency finding; details and reproduction are in #281.

The adversarial round found an editor history consistency bug and I filed it as #281. With seed `25608414`, the existing probe pasted one image, sent 500 Ctrl+Z presses and 500 Ctrl+Y presses, then observed three `.cal-image-block` elements (`3 !== 1`). The existing assertion is unchanged. This is a non-SLOW data consistency finding; details and reproduction are in #281.
Author
Owner

The adversarial API round also got HTTP 502 for PUT /api/v1/appearance with a 200,000-character font ID; the local proxy said it could not connect to the backend. The server was alive at the end of the round. This may be transient under concurrent shared-host load, and I did not repeat the round. I filed the evidence and limitation in #282.

The adversarial API round also got HTTP 502 for `PUT /api/v1/appearance` with a 200,000-character font ID; the local proxy said it could not connect to the backend. The server was alive at the end of the round. This may be transient under concurrent shared-host load, and I did not repeat the round. I filed the evidence and limitation in #282.
Author
Owner

Completed the #247 dev merge follow-up. The merge commit is pushed to job/cal-glass.

Build

  • Merge commit: 659b6fee37edb3535b94fa0e994842fa2784852c (parents: 5ebefcca68c1c38ed45d5888e4e8c1fbd499c927, 976b804f99188feb300e391c1942836599e2d429).
  • packages/api-client/check-generated.sh passed after a production web build; generated OpenAPI client files were regenerated and checked, not hand-merged.
  • Conflict resolutions retain dev's calendar cache APIs with tagged range loads, preserve existing tag-filter behavior, and combine the sidebar apiFetch and portal imports. The E2E layout merge retains dev's !consistencyOnly guard and the calendar header sweep for day/week views.
  • No existing test expectations were changed.

Gates

cargo fmt --check exited 0 with no output.

cargo clippy --all-targets -- -D warnings:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 8m 41s

cargo test exited 0. The following lines are copied from its output:

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 50 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 131.65s
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.81s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.69s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.66s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 74.02s
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.95s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.25s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.23s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.68s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.00s
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 31.38s
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 24.98s
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.70s
test result: ok. 9 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.82s
test result: ok. 17 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 0.42s
test result: ok. 35 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.52s
test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.90s
test result: ok. 486 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s
test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.41s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.57s
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.17s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.43s
test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.83s
test result: ok. 48 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.28s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.39s
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.37s
test result: ok. 117 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 40.62s
test result: ok. 95 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 60.41s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
test result: ok. 42 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 4.06s
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
test result: ok. 25 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.87s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.48s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.94s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 4.04s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 57 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 10.26s
test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.01s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.41s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

bun run --cwd apps/web check:

$ svelte-kit sync && svelte-check --tsconfig ./tsconfig.json
Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/cal-glass/apps/web
Getting Svelte diagnostics...

svelte-check found 0 errors and 0 warnings

bun run --cwd apps/web test:

Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method

 Test Files  90 passed (90)
      Tests  635 passed (635)
   Start at  03:08:07
   Duration  103.63s (transform 62%, environment 14%, import 13%, tests 9%, setup 2%)

  Transform  |component| transforming modules took 180.21s · 56% 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

Review findings and known gaps

  • The layout sweep checked 45 screens and exited 1: menu-calendar-title 1440 open paper timed out clicking .mh-switch; phone month CLS measured 0.112 (limit 0.100) in open and collapsed paper; phone calendar preview timed out in open and collapsed paper. ModeHeader does not render the title menu while the desktop sidebar is visible. The CLS occurred during concurrent host load. Assertions were left unchanged.
  • The one adversarial round was capped at 15 minutes and exited 124 during attack2.py's final sync section. It did not reach the final restart probe. Hostile-byte checks reported ==== HOSTILE BYTES FINDINGS 0; media thumbnail generation exceeded 10 seconds and that header check was skipped. A ZIP mid-stream probe exceeded 30 seconds and was classified SLOW.
  • The adversarial editor probe found image duplication after 500 undo and 500 redo actions (one pasted .cal-image-block became three; seed 25608414). I filed the reproduction as #281.
  • The API probe received a proxy HTTP 502 for an oversized appearance font update; the server was alive at the end of the main API round. This may be transient under shared-host load. I filed the evidence as #282.
  • The API round's other findings were classified SLOW under shared-host load. No test expectation was weakened.

Decisions

  • For tagged year views, use the existing cachedRange path so tag filters remain active. Use cachedYear for unfiltered year views to retain dev's calendar cache behavior.
  • Keep the desktop title-menu E2E check unchanged and report that its current open-sidebar setup has no .mh-switch target.

Branch

Head: 659b6fee37edb3535b94fa0e994842fa2784852c.
Push: job/cal-glass to origin succeeded.

Completed the #247 dev merge follow-up. The merge commit is pushed to `job/cal-glass`. ## Build - Merge commit: `659b6fee37edb3535b94fa0e994842fa2784852c` (parents: `5ebefcca68c1c38ed45d5888e4e8c1fbd499c927`, `976b804f99188feb300e391c1942836599e2d429`). - `packages/api-client/check-generated.sh` passed after a production web build; generated OpenAPI client files were regenerated and checked, not hand-merged. - Conflict resolutions retain dev's calendar cache APIs with tagged range loads, preserve existing tag-filter behavior, and combine the sidebar `apiFetch` and portal imports. The E2E layout merge retains dev's `!consistencyOnly` guard and the calendar header sweep for day/week views. - No existing test expectations were changed. ## Gates `cargo fmt --check` exited 0 with no output. `cargo clippy --all-targets -- -D warnings`: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 8m 41s ``` `cargo test` exited 0. The following lines are copied from its output: ```text test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 50 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 131.65s test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.81s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.69s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.66s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 74.02s test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.95s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.25s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.23s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.68s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.00s test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 31.38s test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 24.98s test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.70s test result: ok. 9 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.82s test result: ok. 17 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 0.42s test result: ok. 35 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.52s test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.90s test result: ok. 486 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.41s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.57s test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.17s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.43s test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.83s test result: ok. 48 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.28s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.39s test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.37s test result: ok. 117 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 40.62s test result: ok. 95 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 60.41s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s test result: ok. 42 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 4.06s test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s test result: ok. 25 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.87s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.48s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.94s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 4.04s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 57 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 10.26s test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.01s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.41s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` `bun run --cwd apps/web check`: ```text $ svelte-kit sync && svelte-check --tsconfig ./tsconfig.json Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/cal-glass/apps/web Getting Svelte diagnostics... svelte-check found 0 errors and 0 warnings ``` `bun run --cwd apps/web test`: ```text Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Test Files 90 passed (90) Tests 635 passed (635) Start at 03:08:07 Duration 103.63s (transform 62%, environment 14%, import 13%, tests 9%, setup 2%) Transform |component| transforming modules took 180.21s · 56% 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 ``` ## Review findings and known gaps - The layout sweep checked 45 screens and exited 1: `menu-calendar-title 1440 open paper` timed out clicking `.mh-switch`; phone month CLS measured `0.112` (limit `0.100`) in open and collapsed paper; phone calendar preview timed out in open and collapsed paper. `ModeHeader` does not render the title menu while the desktop sidebar is visible. The CLS occurred during concurrent host load. Assertions were left unchanged. - The one adversarial round was capped at 15 minutes and exited 124 during `attack2.py`'s final `sync` section. It did not reach the final restart probe. Hostile-byte checks reported `==== HOSTILE BYTES FINDINGS 0`; media thumbnail generation exceeded 10 seconds and that header check was skipped. A ZIP mid-stream probe exceeded 30 seconds and was classified SLOW. - The adversarial editor probe found image duplication after 500 undo and 500 redo actions (one pasted `.cal-image-block` became three; seed `25608414`). I filed the reproduction as #281. - The API probe received a proxy HTTP 502 for an oversized appearance font update; the server was alive at the end of the main API round. This may be transient under shared-host load. I filed the evidence as #282. - The API round's other findings were classified SLOW under shared-host load. No test expectation was weakened. ## Decisions - For tagged year views, use the existing `cachedRange` path so tag filters remain active. Use `cachedYear` for unfiltered year views to retain dev's calendar cache behavior. - Keep the desktop title-menu E2E check unchanged and report that its current open-sidebar setup has no `.mh-switch` target. ## Branch Head: `659b6fee37edb3535b94fa0e994842fa2784852c`. Push: `job/cal-glass` to `origin` succeeded.
Author
Owner

Merged in 104b7db2 (svelte-check 0/0, web 676/676, generated client OK).

Merged in 104b7db2 (svelte-check 0/0, web 676/676, generated client OK).
kayg closed this issue 2026-09-28 02:12:02 +00:00
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#247
No description provided.