WIP: bread-theme: remove ~/.cache/wal fallback after one release cycle #51

Draft
Breadway wants to merge 1 commit from fix/eco-35-retire-wal-fallback into main
Owner

Merge gate: do not merge or release this preparation PR until both breadpaper and BOS have shipped the bread-owned palette cache path for at least one full release cycle. PAPER-5 and BOS-50 being marked done and ecosystem v0.8.0 existing do not establish that cycle. Record the actual consumer release evidence before clearing this gate.

load_palette now reads only the bread cache, then defaults, even when legacy wal data is present or the bread cache is invalid. Remove unused wal_cache_path and write_wal_cache APIs. Keep wal_cache_json because the bread-owned cache still uses it and deliberately supports third-party templates; preserve explicit wal-shaped JSON imports.

Verified all exact repository CI commands locally: pin lint, fmt, default/gtk/extract workspace clippy and tests separately, and extract workspace build. Cache regression coverage verifies ignored legacy data, valid bread data, and invalid bread data returning defaults. No actual user caches/configs, installed binaries, desktop sessions, or releases were changed.

Closes #35

Merge gate: do not merge or release this preparation PR until both breadpaper and BOS have shipped the bread-owned palette cache path for at least one full release cycle. PAPER-5 and BOS-50 being marked done and ecosystem v0.8.0 existing do not establish that cycle. Record the actual consumer release evidence before clearing this gate. load_palette now reads only the bread cache, then defaults, even when legacy wal data is present or the bread cache is invalid. Remove unused wal_cache_path and write_wal_cache APIs. Keep wal_cache_json because the bread-owned cache still uses it and deliberately supports third-party templates; preserve explicit wal-shaped JSON imports. Verified all exact repository CI commands locally: pin lint, fmt, default/gtk/extract workspace clippy and tests separately, and extract workspace build. Cache regression coverage verifies ignored legacy data, valid bread data, and invalid bread data returning defaults. No actual user caches/configs, installed binaries, desktop sessions, or releases were changed. Closes #35
fix(theme): retire the legacy wal cache fallback
All checks were successful
check / check (push) Successful in 2m36s
2852941060
Author
Owner

Moved this PR card to REVIEW for independent code review. The release gate still applies: do not merge or release until breadpaper and BOS have each shipped the bread-owned cache path for at least one full release cycle, with release evidence recorded. Local tags show breadpaper v0.2.0 (2026-09-29) and BOS v0.6.2 (2026-09-19), which do not establish that the required cycle has completed.

Moved this PR card to REVIEW for independent code review. The release gate still applies: do not merge or release until breadpaper and BOS have each shipped the bread-owned cache path for at least one full release cycle, with release evidence recorded. Local tags show breadpaper v0.2.0 (2026-09-29) and BOS v0.6.2 (2026-09-19), which do not establish that the required cycle has completed.
Author
Owner

Independent review of draft PR #51 at 28529410601f42177bab12a1876b6b7a19e6463d

Acceptance interpretation: (1) load_palette reads the bread-owned cache and defaults when it is absent or invalid, without consulting legacy ~/.cache/wal/colors.json; (2) remove the obsolete path and write APIs; (3) preserve explicit wal-shaped JSON parsing and serialization for imports and templates; (4) tests assert the observable fallback behavior.

bread-theme/src/palette.rs:72-80 reads only the bread-owned path and defaults on missing or invalid content. The old path and write APIs are removed from palette.rs and the public exports in lib.rs:18-20; wal_cache_json and the JSON parser remain. The regression in output.rs:519-548 demonstrates that valid legacy data is ignored, the new cache is read, and invalid new-cache data returns defaults despite a valid legacy file. CI is green for this head.

I found no implementation defect in the reviewed diff. The PR is intentionally draft; Forgejo's mergeable=false reflects draft state, not content conflicts. The explicit full release-cycle gate remains unsatisfied until both breadpaper and BOS ship the bread-owned path and the actual consumer releases are evidenced. Keep PR #51 draft and do not merge or release it before that gate. Bread-ecosystem is release-sensitive, so no merge attempted.

## Independent review of draft PR #51 at `28529410601f42177bab12a1876b6b7a19e6463d` Acceptance interpretation: (1) `load_palette` reads the bread-owned cache and defaults when it is absent or invalid, without consulting legacy `~/.cache/wal/colors.json`; (2) remove the obsolete path and write APIs; (3) preserve explicit wal-shaped JSON parsing and serialization for imports and templates; (4) tests assert the observable fallback behavior. `bread-theme/src/palette.rs:72-80` reads only the bread-owned path and defaults on missing or invalid content. The old path and write APIs are removed from `palette.rs` and the public exports in `lib.rs:18-20`; `wal_cache_json` and the JSON parser remain. The regression in `output.rs:519-548` demonstrates that valid legacy data is ignored, the new cache is read, and invalid new-cache data returns defaults despite a valid legacy file. CI is green for this head. I found no implementation defect in the reviewed diff. The PR is intentionally draft; Forgejo's `mergeable=false` reflects draft state, not content conflicts. The explicit full release-cycle gate remains unsatisfied until both breadpaper and BOS ship the bread-owned path and the actual consumer releases are evidenced. Keep PR #51 draft and do not merge or release it before that gate. Bread-ecosystem is release-sensitive, so no merge attempted.
Author
Owner

Release-gate evidence for ECO-51 (recorded 2026-10-02)

Code review was already clean. This records the actual consumer release evidence the gate asks for. Conclusion: the gate is not satisfied, so PR #51 stays draft and unmerged and ECO-35 stays in REVIEW.

Code verification on head 2852941

  • cargo fmt -p bread-theme -- --check clean
  • cargo clippy -p bread-theme --all-targets --locked -- -D warnings clean
  • cargo test -p bread-theme --locked 122 passed, 0 failed
  • cargo test -p bread-theme --locked --features extract green
  • from_wal_json is still reached from non-test code (bread-theme/src/output.rs:110,120,122), so dropping the legacy fallback neither orphans it nor trips dead_code.
  • Removing wal_cache_path and write_wal_cache from the public API is safe: no repository in the workspace (bos, breadbar, breadpaper, breadbox, breadpad, bos-settings, breadmon, breadcloud) references either symbol.

Consumer release evidence

BOS (blocking):

  • Newest BOS tag is v0.6.2.
  • Every BOS tag from v0.2.0 through v0.6.2 still ships iso/airootfs/etc/skel/.cache/wal/colors.json and iso/airootfs/etc/skel/.cache/wal/wal.
  • iso/airootfs/etc/skel/.cache/bread/palette.json exists on main only. It was added by 3f37255 ("feat: drop python-pywal, move skel palette to bread-theme cache"), which is contained in no tag.
  • BOS has therefore never shipped the bread-owned path in any release.

breadpaper (partially satisfied):

  • v0.2.0-rc.1 and v0.2.0 (both 2026-09-29) contain 04cf194 (#6), which calls bread_theme::write_global_palette pinned to bread-ecosystem v0.8.0.
  • v0.8.0:bread-theme/src/output.rs:266-273 writes to palette_cache_path(), which resolves to $XDG_CACHE_HOME/bread/palette.json. breadpaper has shipped the bread-owned path.
  • However v0.2.0 is the only such release and it is three days old, so no later cycle has run.

What would clear the gate

  1. A BOS release tag that contains 3f37255.
  2. A breadpaper release newer than v0.2.0.

Until both exist, do not merge PR #51 and do not release the removal. ECO-35 and ECO-51 remain in REVIEW.

## Release-gate evidence for ECO-51 (recorded 2026-10-02) Code review was already clean. This records the actual consumer release evidence the gate asks for. Conclusion: **the gate is not satisfied, so PR #51 stays draft and unmerged and ECO-35 stays in REVIEW.** ### Code verification on head `2852941` - `cargo fmt -p bread-theme -- --check` clean - `cargo clippy -p bread-theme --all-targets --locked -- -D warnings` clean - `cargo test -p bread-theme --locked` 122 passed, 0 failed - `cargo test -p bread-theme --locked --features extract` green - `from_wal_json` is still reached from non-test code (`bread-theme/src/output.rs:110,120,122`), so dropping the legacy fallback neither orphans it nor trips dead_code. - Removing `wal_cache_path` and `write_wal_cache` from the public API is safe: no repository in the workspace (bos, breadbar, breadpaper, breadbox, breadpad, bos-settings, breadmon, breadcloud) references either symbol. ### Consumer release evidence **BOS (blocking):** - Newest BOS tag is `v0.6.2`. - Every BOS tag from `v0.2.0` through `v0.6.2` still ships `iso/airootfs/etc/skel/.cache/wal/colors.json` and `iso/airootfs/etc/skel/.cache/wal/wal`. - `iso/airootfs/etc/skel/.cache/bread/palette.json` exists on `main` only. It was added by `3f37255` ("feat: drop python-pywal, move skel palette to bread-theme cache"), which is contained in no tag. - BOS has therefore never shipped the bread-owned path in any release. **breadpaper (partially satisfied):** - `v0.2.0-rc.1` and `v0.2.0` (both 2026-09-29) contain `04cf194` (#6), which calls `bread_theme::write_global_palette` pinned to bread-ecosystem `v0.8.0`. - `v0.8.0:bread-theme/src/output.rs:266-273` writes to `palette_cache_path()`, which resolves to `$XDG_CACHE_HOME/bread/palette.json`. breadpaper has shipped the bread-owned path. - However `v0.2.0` is the only such release and it is three days old, so no later cycle has run. ### What would clear the gate 1. A BOS release tag that contains `3f37255`. 2. A breadpaper release newer than `v0.2.0`. Until both exist, do not merge PR #51 and do not release the removal. ECO-35 and ECO-51 remain in REVIEW.
All checks were successful
check / check (push) Successful in 2m36s
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/eco-35-retire-wal-fallback:fix/eco-35-retire-wal-fallback
git switch fix/eco-35-retire-wal-fallback

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff fix/eco-35-retire-wal-fallback
git switch fix/eco-35-retire-wal-fallback
git rebase main
git switch main
git merge --ff-only fix/eco-35-retire-wal-fallback
git switch fix/eco-35-retire-wal-fallback
git rebase main
git switch main
git merge --no-ff fix/eco-35-retire-wal-fallback
git switch main
git merge --squash fix/eco-35-retire-wal-fallback
git switch main
git merge --ff-only fix/eco-35-retire-wal-fallback
git switch main
git merge fix/eco-35-retire-wal-fallback
git push origin main
Sign in to join this conversation.
No reviewers
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/bread-ecosystem!51
No description provided.