SEARCH: palette section heading paints opaque white over a transparent palette (sticky-paint assertion fails on dev) #284

Closed
opened 2026-09-28 02:56:09 +00:00 by kayg · 5 comments
Owner

From #278's run (2026-09-28): the Search palette e2e's existing sticky-paint assertion fails on dev: the sticky group heading measures opaque white while the outer palette is transparent (glass). The heading must use the palette's own glass/tint (the shared overlay role from #246), not an opaque fill, and stay legible over scrolled results (progressive blur or the shared sticky-heading treatment). Keep the assertion; fix the paint. Light + dark screenshots of the palette scrolled.

From #278's run (2026-09-28): the Search palette e2e's existing sticky-paint assertion fails on dev: the sticky group heading measures opaque white while the outer palette is transparent (glass). The heading must use the palette's own glass/tint (the shared overlay role from #246), not an opaque fill, and stay legible over scrolled results (progressive blur or the shared sticky-heading treatment). Keep the assertion; fix the paint. Light + dark screenshots of the palette scrolled.
Author
Owner

Starting search-sticky on job/search-sticky, based on dev at 561c3eb5a7. I read CLAUDE.md, CONTEXT.md, and the overlay material rules in docs/DESIGN.md §34. I’m tracing the existing sticky-paint assertion and shared overlay tokens before editing.

Starting search-sticky on job/search-sticky, based on dev at 561c3eb5a755d25806988ce0421c3e4fe9011849. I read CLAUDE.md, CONTEXT.md, and the overlay material rules in docs/DESIGN.md §34. I’m tracing the existing sticky-paint assertion and shared overlay tokens before editing.
Author
Owner

Finding: .group-head used background: var(--glass-tint, var(--surface)), but the palette sets --glass-tint on its sibling .surface-background layer. CSS custom properties do not inherit across siblings, so the heading fell back to the opaque theme surface while the palette paint layer used --glass-clear-bg. The existing e2e assertion compares the heading paint to the actual palette paint layer; it remains an equality assertion.

Finding: `.group-head` used `background: var(--glass-tint, var(--surface))`, but the palette sets `--glass-tint` on its sibling `.surface-background` layer. CSS custom properties do not inherit across siblings, so the heading fell back to the opaque theme surface while the palette paint layer used `--glass-clear-bg`. The existing e2e assertion compares the heading paint to the actual palette paint layer; it remains an equality assertion.
Author
Owner

Production-build screenshots with the palette scrolled:

E2E finding: bun e2e/search.mjs --screenshots ../../artifacts/search-sticky passed the sticky-paint assertion and the listed Search flows, then exited 1 after PASS Files ⌘F opens the scoped search window. It timed out for 30 seconds waiting for .mode-header .mh-switch at apps/web/e2e/search.mjs:902 after navigating to a Calendar week. I left that Calendar assertion unchanged.

Production-build screenshots with the palette scrolled: - [Paper, desktop](https://git.kayg.org/attachments/4d73c5d4-458a-40fa-93eb-b269d030531a) - [Tokyo Night, desktop](https://git.kayg.org/attachments/02b2a58c-36a2-4b8e-bd36-423db687fa40) E2E finding: `bun e2e/search.mjs --screenshots ../../artifacts/search-sticky` passed the sticky-paint assertion and the listed Search flows, then exited 1 after `PASS Files ⌘F opens the scoped search window`. It timed out for 30 seconds waiting for `.mode-header .mh-switch` at `apps/web/e2e/search.mjs:902` after navigating to a Calendar week. I left that Calendar assertion unchanged.
Author
Owner

Implemented Forgejo #284 on job/search-sticky.

What changed

  • Search group headings use the shared glass-overlay glass-float glass-clear material. This gives each sticky heading the palette tint and shared blur while removing its separate border and shadow.
  • Kept the sticky-paint equality assertion. It now compares the heading with .surface-background.search-window, the layer that paints the palette's glass.
  • The e2e screenshot path captures the scrolled palette at desktop and phone sizes in Paper and Tokyo Night.

Screenshots from the production build, attached to this issue:

Files

  • apps/web/src/lib/components/search-dialog.svelte
  • apps/web/e2e/search.mjs

Commits and branch

  • 9884b188 — fix(search): use clear glass for sticky headings
  • Merged current dev once; merge commit cc21bb34f94fc2b195bef30e725af492412c2cb6
  • Head: cc21bb34f94fc2b195bef30e725af492412c2cb6
  • git push origin job/search-sticky: Everything up-to-date

Gates

  • cargo fmt --check: exit 0, no output.
  • cargo clippy --all-targets -- -D warnings:
    Finished dev profile [unoptimized + debuginfo] target(s) in 3m 12s
  • cargo test:
    Finished test profile [unoptimized + debuginfo] target(s) in 4m 16s
    test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.88s
  • bun run check:
    svelte-check found 0 errors and 0 warnings
  • bun run test:
    Test Files 107 passed (107)
    Tests 701 passed (701)
    Duration 33.20s (transform 50%, environment 20%, import 17%, tests 9%, setup 3%)
  • Production build:
    ✓ built in 41.87s
    Wrote site to "build"
    ✔ done
  • Search e2e passed the sticky-paint assertion and the Search flows through Files scope. It later exited 1 after PASS Files ⌘F opens the scoped search window, with TimeoutError: waitFor: Timeout 30000ms exceeded. waiting for .mode-header .mh-switch at apps/web/e2e/search.mjs:902 after Calendar week navigation. I left the Calendar assertion unchanged.
  • The first clippy invocation hit the shared sccache daemon's stale temp path in another worktree. The rerun with RUSTC_WRAPPER=/usr/bin/env passed above.
  • No API changed, so I did not run the API adversarial probe.

Decision not specified in DESIGN.md

The design defines shared overlay materials but does not specify sticky Search heading paint. I applied the palette's clear overlay role directly to each sticky heading, including its shared local blur, and removed the heading's independent edge and shadow.

Cargo and web build output was cleaned after the gates.

Implemented Forgejo #284 on `job/search-sticky`. ## What changed - Search group headings use the shared `glass-overlay glass-float glass-clear` material. This gives each sticky heading the palette tint and shared blur while removing its separate border and shadow. - Kept the sticky-paint equality assertion. It now compares the heading with `.surface-background.search-window`, the layer that paints the palette's glass. - The e2e screenshot path captures the scrolled palette at desktop and phone sizes in Paper and Tokyo Night. Screenshots from the production build, attached to this issue: - [Paper, desktop](https://git.kayg.org/attachments/4d73c5d4-458a-40fa-93eb-b269d030531a) - [Tokyo Night, desktop](https://git.kayg.org/attachments/02b2a58c-36a2-4b8e-bd36-423db687fa40) ## Files - `apps/web/src/lib/components/search-dialog.svelte` - `apps/web/e2e/search.mjs` ## Commits and branch - `9884b188` — `fix(search): use clear glass for sticky headings` - Merged current `dev` once; merge commit `cc21bb34f94fc2b195bef30e725af492412c2cb6` - Head: `cc21bb34f94fc2b195bef30e725af492412c2cb6` - `git push origin job/search-sticky`: `Everything up-to-date` ## Gates - `cargo fmt --check`: exit 0, no output. - `cargo clippy --all-targets -- -D warnings`: `Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 12s` - `cargo test`: `Finished `test` profile [unoptimized + debuginfo] target(s) in 4m 16s` `test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.88s` - `bun run check`: `svelte-check found 0 errors and 0 warnings` - `bun run test`: `Test Files 107 passed (107)` `Tests 701 passed (701)` `Duration 33.20s (transform 50%, environment 20%, import 17%, tests 9%, setup 3%)` - Production build: `✓ built in 41.87s` `Wrote site to "build"` `✔ done` - Search e2e passed the sticky-paint assertion and the Search flows through Files scope. It later exited 1 after `PASS Files ⌘F opens the scoped search window`, with `TimeoutError: waitFor: Timeout 30000ms exceeded.` waiting for `.mode-header .mh-switch` at `apps/web/e2e/search.mjs:902` after Calendar week navigation. I left the Calendar assertion unchanged. - The first clippy invocation hit the shared `sccache` daemon's stale temp path in another worktree. The rerun with `RUSTC_WRAPPER=/usr/bin/env` passed above. - No API changed, so I did not run the API adversarial probe. ## Decision not specified in DESIGN.md The design defines shared overlay materials but does not specify sticky Search heading paint. I applied the palette's clear overlay role directly to each sticky heading, including its shared local blur, and removed the heading's independent edge and shadow. Cargo and web build output was cleaned after the gates.
Author
Owner

Merged in 8778fd00.

Merged in 8778fd00.
kayg referenced this issue from a commit 2026-09-28 05:43:43 +00:00
kayg closed this issue 2026-09-28 05:43:43 +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#284
No description provided.