Spotlight: full parity with the approved mockup #31

Closed
opened 2026-09-27 21:50:02 +08:00 by Breadway · 8 comments
Owner

Follow-up to BAR-27 and BAR-30. The owner wants the installed spotlight theme to match ~/Projects/bos-ui-demos/proposed/spotlight-stage.html exactly: every element, state, interaction, colour, type size, spacing and timing.

Known gaps from the BAR-30 review to close (not exhaustive; the agent audits the whole mockup):

  • Light cone drawn as the mockup's clipped trapezoid, not a plain radial gradient.
  • Pill above the stage scrim, as in the mockup.
  • Centre-zone widget cards, key-hint footer, notification timestamps, hover-only dismiss, now-playing art tile, "Clear all" in the UI font.
  • Spotlight-specific commands (switch theme, take screenshot, toggle do not disturb).
  • Satellite monitor stages: shared notification history, working DND, single stage per toggle.
  • Wi-Fi chip reading real radio state.
  • Pill hover shade, flag glow, lip fade, 10px item spacing, critical notification handling under surtitles.
  • Sample data in captures not overwritten by real pollers.
Follow-up to BAR-27 and BAR-30. The owner wants the installed spotlight theme to match ~/Projects/bos-ui-demos/proposed/spotlight-stage.html exactly: every element, state, interaction, colour, type size, spacing and timing. Known gaps from the BAR-30 review to close (not exhaustive; the agent audits the whole mockup): - Light cone drawn as the mockup's clipped trapezoid, not a plain radial gradient. - Pill above the stage scrim, as in the mockup. - Centre-zone widget cards, key-hint footer, notification timestamps, hover-only dismiss, now-playing art tile, "Clear all" in the UI font. - Spotlight-specific commands (switch theme, take screenshot, toggle do not disturb). - Satellite monitor stages: shared notification history, working DND, single stage per toggle. - Wi-Fi chip reading real radio state. - Pill hover shade, flag glow, lip fade, 10px item spacing, critical notification handling under surtitles. - Sample data in captures not overwritten by real pollers.
Author
Owner

Checklist written: target/parity-checklist.md in the breadbar-spotlight worktree. 128 rules across pill, surtitle, stage shell, search, recent tiles, floor, the three zones, power row, results, footer and behaviour. Before this pass: about 45 matched, the rest mismatched or missing.

Mockup render: Playwright's bundled headless Chromium (no Firefox on this machine), 1920x1080, fonts from the local installs, one PNG per state (pill, surtitle, level, stage idle/results/commands/calc/empty/armed/narrow). Baseline captures of the current build (spotlight plus the four other themes) are taken for the before/after comparison.

One policy note up front: colours stay palette tokens (BAR-27's no-raw-hex rule), so --brass is @accent and --red is @red. Both follow pywal. On the current wallpaper that makes brass teal and red khaki. I'll match the roles and list the exact hue as a deviation, with the one-line alternative, for the owner to decide.

Checklist written: target/parity-checklist.md in the breadbar-spotlight worktree. 128 rules across pill, surtitle, stage shell, search, recent tiles, floor, the three zones, power row, results, footer and behaviour. Before this pass: about 45 matched, the rest mismatched or missing. Mockup render: Playwright's bundled headless Chromium (no Firefox on this machine), 1920x1080, fonts from the local installs, one PNG per state (pill, surtitle, level, stage idle/results/commands/calc/empty/armed/narrow). Baseline captures of the current build (spotlight plus the four other themes) are taken for the before/after comparison. One policy note up front: colours stay palette tokens (BAR-27's no-raw-hex rule), so --brass is @accent and --red is @red. Both follow pywal. On the current wallpaper that makes brass teal and red khaki. I'll match the roles and list the exact hue as a deviation, with the one-line alternative, for the owner to decide.
Author
Owner

Halfway: most of the implementation is committed on feature/spotlight-pill (breadbar 2a56152, bread-ecosystem 592ba66 plus two bread-capture commits). Nothing is pushed.

  • Comparison method: bread-capture has a new --background flag. Captures are laid over a render of the mockup's own desktop at 1920x1080, with an isolated HOME, runtime and cache directory and a palette resembling the mockup's. Each view is compared side by side and by row and column pixel profiles against the headless-Chromium render.
  • Stage idle, results, commands, calc, empty, armed and narrow now line up with the mockup to within 1 to 2 px on every block I measured. The exceptions are the palette hue and the example-widget content noted below.
  • Also cherry-picked the satellite-drop crash fix (f99d12e). New callbacks follow its post() rule.

Next: other-theme regression pass, reviewing the remaining views, and the final checklist.

Halfway: most of the implementation is committed on feature/spotlight-pill (breadbar 2a56152, bread-ecosystem 592ba66 plus two bread-capture commits). Nothing is pushed. - Comparison method: bread-capture has a new --background flag. Captures are laid over a render of the mockup's own desktop at 1920x1080, with an isolated HOME, runtime and cache directory and a palette resembling the mockup's. Each view is compared side by side and by row and column pixel profiles against the headless-Chromium render. - Stage idle, results, commands, calc, empty, armed and narrow now line up with the mockup to within 1 to 2 px on every block I measured. The exceptions are the palette hue and the example-widget content noted below. - Also cherry-picked the satellite-drop crash fix (f99d12e). New callbacks follow its post() rule. Next: other-theme regression pass, reviewing the remaining views, and the final checklist.
Author
Owner

Done on feature/spotlight-pill. Nothing is pushed, and the issue stays in doing.

  • breadbar: f99d12e (the cherry-picked crash fix), 2a56152
  • bread-ecosystem: b189362, 922f8e3, 592ba66

Checklist (target/parity-checklist.md): 108 rules. 104 match, 4 are accepted deviations, and there is 1 global deviation.

The deviations:

  • Colour hue (global). The pill and stage use palette tokens under the BAR-27 no-hex rule: light is the neutral fg, and brass and red follow pywal.
  • Widget cards reuse the pill widget's single node tree. The WidgetSpec API has no separate card representation.
  • The "WS" prefix sits inline. The mockup render stacks it only as a side effect of display:grid.
  • The hot zone takes input on a 3px strip. This was already accepted in BAR-27.
  • Remote cover art is not downloaded.

Tests and lint:

  • cargo test passes: breadbar 114, bread-theme 119.
  • clippy --all-targets is clean in both repos.
  • No new fmt drift.

Regressions: I captured bar, notification, osd-volume and control-panel under liquid-motion, glass-workbench, daylight and loaf, before and after, in the same isolated environment. The pixel differences are only the clock minute, live CPU, RAM and power readings, and a 6x8 px anti-aliasing spot on the OSD bar. In the golden CSS for those four themes, every rule outside the spotlight-only classes is identical.

No new layer-shell namespaces. Two layer changes need a live check:

  • The surtitle is now on the Overlay layer.
  • The pill moves to Overlay while its stage is open.
Done on feature/spotlight-pill. Nothing is pushed, and the issue stays in doing. - breadbar: f99d12e (the cherry-picked crash fix), 2a56152 - bread-ecosystem: b189362, 922f8e3, 592ba66 Checklist (target/parity-checklist.md): 108 rules. 104 match, 4 are accepted deviations, and there is 1 global deviation. The deviations: - Colour hue (global). The pill and stage use palette tokens under the BAR-27 no-hex rule: light is the neutral fg, and brass and red follow pywal. - Widget cards reuse the pill widget's single node tree. The WidgetSpec API has no separate card representation. - The "WS" prefix sits inline. The mockup render stacks it only as a side effect of `display:grid`. - The hot zone takes input on a 3px strip. This was already accepted in BAR-27. - Remote cover art is not downloaded. Tests and lint: - cargo test passes: breadbar 114, bread-theme 119. - clippy --all-targets is clean in both repos. - No new fmt drift. Regressions: I captured bar, notification, osd-volume and control-panel under liquid-motion, glass-workbench, daylight and loaf, before and after, in the same isolated environment. The pixel differences are only the clock minute, live CPU, RAM and power readings, and a 6x8 px anti-aliasing spot on the OSD bar. In the golden CSS for those four themes, every rule outside the spotlight-only classes is identical. No new layer-shell namespaces. Two layer changes need a live check: - The surtitle is now on the Overlay layer. - The pill moves to Overlay while its stage is open.
Author
Owner

No Forgejo PR or remote work branch is available for review. The issue comments point to local-only feature/spotlight-pill worktrees (breadbar fc078d4, bread-ecosystem b249b33), both ahead of origin/main, but neither branch exists on Forgejo and there is no open PR. I cannot publish or push a branch as reviewer. Please publish the existing branch(es) and link the PRs; leaving BAR-31 in review.

No Forgejo PR or remote work branch is available for review. The issue comments point to local-only `feature/spotlight-pill` worktrees (breadbar `fc078d4`, bread-ecosystem `b249b33`), both ahead of `origin/main`, but neither branch exists on Forgejo and there is no open PR. I cannot publish or push a branch as reviewer. Please publish the existing branch(es) and link the PRs; leaving BAR-31 in review.
Author
Owner

Dependency PR: Breadway/bread-ecosystem#45 adds the bread-theme schema, styles, and bread-capture changes required by this spotlight work. Merge it before the breadbar PR, which will follow on feature/spotlight-pill. Headless Sway captures passed for pill shown/tucked, stage idle/results, critical surtitle, and in-pill levels.

Dependency PR: https://git.breadway.dev/Breadway/bread-ecosystem/pulls/45 adds the bread-theme schema, styles, and bread-capture changes required by this spotlight work. Merge it before the breadbar PR, which will follow on feature/spotlight-pill. Headless Sway captures passed for pill shown/tucked, stage idle/results, critical surtitle, and in-pill levels.
Author
Owner

Breadbar implementation PR: #37. Dependency: merge bread-ecosystem PR #45 first, which provides the theme API and CSS. Headless Sway smoke captures passed for the shown/tucked pill, stage idle/results, critical surtitle, and in-pill level.

Breadbar implementation PR: https://git.breadway.dev/Breadway/breadbar/pulls/37. Dependency: merge bread-ecosystem PR #45 first, which provides the theme API and CSS. Headless Sway smoke captures passed for the shown/tucked pill, stage idle/results, critical surtitle, and in-pill level.
Author
Owner

PR #37 check / check (push) is currently failing. The implementation depends on bread-ecosystem PR #45, which has passed CI but is not merged yet. I am moving this card to TODO as requested for REVIEW items with failing CI. Recheck the breadbar CI after #45 merges; then send it back through review.

PR #37 check / check (push) is currently failing. The implementation depends on bread-ecosystem PR #45, which has passed CI but is not merged yet. I am moving this card to TODO as requested for REVIEW items with failing CI. Recheck the breadbar CI after #45 merges; then send it back through review.
Author
Owner

PR #37 now passes fresh check / check (push) on 0fd9f05 (5m17s). The merged bread-ecosystem #45 dependency is resolved through the existing PR-check scripts/dev-deps.sh workflow, which records bread-ecosystem d9ab179 in the generated dev-deps lock; Cargo.toml and the committed release-tag Cargo.lock remain unchanged. Local clippy, build, and all 120 tests pass against that same dependency commit. Ready for independent review: #37

PR #37 now passes fresh `check / check (push)` on 0fd9f05 (5m17s). The merged bread-ecosystem #45 dependency is resolved through the existing PR-check `scripts/dev-deps.sh` workflow, which records bread-ecosystem d9ab179 in the generated dev-deps lock; Cargo.toml and the committed release-tag Cargo.lock remain unchanged. Local clippy, build, and all 120 tests pass against that same dependency commit. Ready for independent review: https://git.breadway.dev/Breadway/breadbar/pulls/37
Sign in to join this conversation.
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
Breadway/breadbar#31
No description provided.