REUSE: give the progressive edge blur filter stack one owner #799

Open
opened 2026-10-02 13:11:25 +00:00 by kayg · 3 comments
Owner

Context

Static rev-consistency review for #427 on origin/dev at c4a61e8cf090170f35b1bed3350d9de20c83ecd5. DESIGN §34 uses one shared progressive edge blur. The reuse gate requires one owner per primitive.

Evidence

  • packages/ui/src/components/ProgressiveBlur.svelte:36-152 declares the same five blur filters (1, 2, 4, 8 and 16 px) four times: one copy for each edge. The direction-dependent masks are different; the filters are identical.
  • packages/ui/src/tokens.css:1210-1231 declares the same five prefixed/unprefixed filters again for .glass-progressive-blur > span:nth-child(...).
  • ProgressiveBlur.svelte:17-20 emits progressive-blur plus the edge class, without glass-progressive-blur. A source search finds no emitted .glass-progressive-blur stack; the only similar component class is the distinct glass-progressive-blur-child on WeekBlob.
  • ProgressiveBlur.svelte:35 documents why filter values stay literal. Literal syntax is not the defect: the same browser recipe has five independent copies and one appears unused.

Expected and shared fix

Keep the filter recipe in one shared place, with literal filter syntax where needed. Keep edge-specific masks and fallback gradients separate. Remove the unused second stack or make the shared component consume it. Do not add runtime style measurement or change the approved blur strengths.

Test idea

A source guard should assert one owner for each progressive filter step and that all four edge directions use it. Test that reduced transparency and unsupported backdrop filters still hide the filter layers and show the fallback. The implementation job should capture all four edges at 390, 820 and 1440 px in light and dark on a macOS-emulated browser.

Searched open and closed issues for ProgressiveBlur, and read #157 and #207. Those closed issues concern overlay material. #577 and #219 require progressive blur on surfaces but do not cover the duplicated filter recipe and unused selector family.

## Context Static rev-consistency review for #427 on `origin/dev` at `c4a61e8cf090170f35b1bed3350d9de20c83ecd5`. DESIGN §34 uses one shared progressive edge blur. The reuse gate requires one owner per primitive. ## Evidence - `packages/ui/src/components/ProgressiveBlur.svelte:36-152` declares the same five blur filters (1, 2, 4, 8 and 16 px) four times: one copy for each edge. The direction-dependent masks are different; the filters are identical. - `packages/ui/src/tokens.css:1210-1231` declares the same five prefixed/unprefixed filters again for `.glass-progressive-blur > span:nth-child(...)`. - `ProgressiveBlur.svelte:17-20` emits `progressive-blur` plus the edge class, without `glass-progressive-blur`. A source search finds no emitted `.glass-progressive-blur` stack; the only similar component class is the distinct `glass-progressive-blur-child` on WeekBlob. - `ProgressiveBlur.svelte:35` documents why filter values stay literal. Literal syntax is not the defect: the same browser recipe has five independent copies and one appears unused. ## Expected and shared fix Keep the filter recipe in one shared place, with literal filter syntax where needed. Keep edge-specific masks and fallback gradients separate. Remove the unused second stack or make the shared component consume it. Do not add runtime style measurement or change the approved blur strengths. ## Test idea A source guard should assert one owner for each progressive filter step and that all four edge directions use it. Test that reduced transparency and unsupported backdrop filters still hide the filter layers and show the fallback. The implementation job should capture all four edges at 390, 820 and 1440 px in light and dark on a macOS-emulated browser. ## Duplicate search Searched open and closed issues for `ProgressiveBlur`, and read #157 and #207. Those closed issues concern overlay material. #577 and #219 require progressive blur on surfaces but do not cover the duplicated filter recipe and unused selector family.
Author
Owner

Starting the reuse pass for #727, #729, #730 and #799 on branch job/reuse.

Starting commit/base: 2f4482ded066d9c5d9c59130377907f7fd2916c9, the same commit as job/merge-round-7a. I will merge origin/dev and re-merge job/merge-round-7a once before final gates.

Starting the reuse pass for #727, #729, #730 and #799 on branch `job/reuse`. Starting commit/base: `2f4482ded066d9c5d9c59130377907f7fd2916c9`, the same commit as `job/merge-round-7a`. I will merge `origin/dev` and re-merge `job/merge-round-7a` once before final gates.
Author
Owner

Implemented in def1151dd. ProgressiveBlur.svelte now owns one literal 1/2/4/8/16 px filter recipe shared by all four edges; directional masks and both fallback paths remain separate. Removed the unused .glass-progressive-blur filter stack from tokens.css, preserving the concurrent #588 token changes.

Regression evidence: before the production change, the new test found no shared recipe rules; the first post-change run also caught its own matcher counting the @supports feature query. After scoping the matcher to declarations, bun run test --maxWorkers=1 src/lib/themes.test.ts -t '#799' passed: Test Files 1 passed (1) and Tests 2 passed | 74 skipped (76).

Implemented in `def1151dd`. `ProgressiveBlur.svelte` now owns one literal 1/2/4/8/16 px filter recipe shared by all four edges; directional masks and both fallback paths remain separate. Removed the unused `.glass-progressive-blur` filter stack from `tokens.css`, preserving the concurrent #588 token changes. Regression evidence: before the production change, the new test found no shared recipe rules; the first post-change run also caught its own matcher counting the `@supports` feature query. After scoping the matcher to declarations, `bun run test --maxWorkers=1 src/lib/themes.test.ts -t '#799'` passed: `Test Files 1 passed (1)` and `Tests 2 passed | 74 skipped (76)`.
Author
Owner

Finished on branch job/reuse at head b5544daeda. Consolidated progressive blur into one shared edge recipe while preserving directional masks and fallbacks. Focused regression checks passed (2 passed; 74 skipped), and bun run check passed with 0 errors and 0 warnings. The full serialized web suite ran 3,563.01s and failed only on 7 timeouts under host load (1,075/1,082 tests passed); details and exact output are in the final #727 report. Required production screenshot matrix could not run because the media sandbox guard detected 6,188 local threads (limit 4,096). No Rust source changed, so Rust crate gates were not applicable. No merge or push performed.

Finished on branch job/reuse at head b5544daedac6d8027a323167d9b188a5262d6eb5. Consolidated progressive blur into one shared edge recipe while preserving directional masks and fallbacks. Focused regression checks passed (2 passed; 74 skipped), and bun run check passed with 0 errors and 0 warnings. The full serialized web suite ran 3,563.01s and failed only on 7 timeouts under host load (1,075/1,082 tests passed); details and exact output are in the final #727 report. Required production screenshot matrix could not run because the media sandbox guard detected 6,188 local threads (limit 4,096). No Rust source changed, so Rust crate gates were not applicable. No merge or push performed.
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#799
No description provided.