Generated and pasted board backgrounds move into .backgrounds/ — the board root stops collecting the app's own pictures
New app-written background images (Theme tab ▸ Pattern, and Edit ▸ Paste as Board Background) now land in a hidden `.backgrounds/` folder at board root instead of beside index.md, matching the `.trash/` app-managed pattern. `background.image` stores the qualified relative reference (`.backgrounds/facets.png`); the resolver needed no change at all, since it already accepted any relative path inside the board root — the same mechanism that already resolved `art/backdrops/sunset.png` resolves the new location for free. `BoardWriter.writeBoardImage` now creates its destination folder if missing, since `.backgrounds/` won't exist until a board's first generated or pasted background. The Finder collision-ladder (`BoardStore.boardImageName`) is rescoped to `.backgrounds/`'s own contents, and its overwrite-in-place check now recognizes only the qualified form as "ours" — a legacy bare `background.image: facets.png` from before this change is read as a foreign reference rather than migrated, so a regeneration writes a fresh `.backgrounds/` file and orphans the old one in place, per the no-migration ruling. The Theme tab's Pattern/Solid mode-detection was updated to recognize both the legacy and current spellings as the generator's own output. The board loader needed no change: `.backgrounds/` is a hidden, non-UUID-shaped name, and `.skipsHiddenFiles` already keeps every hidden entry off the lane walk before any name-based exclusion is consulted — pinned with a new loader test. Deliberately did not add `.backgrounds` to IntegrityRules' claimed-name/squatter-displacement table: that table mirrors a specific existing DESIGN ruling this card doesn't amend. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -145,7 +145,15 @@ struct BoardThemeTabView: View {
|
||||
// Pattern, since that is the surface that made it; every other board — no image, or a
|
||||
// hand-placed one the app does not own — opens on Solid color, which is also the mode that
|
||||
// never overwrites a foreign picture by accident.
|
||||
_mode = State(initialValue: store.snapshot.backgroundImage.value == FacetsGenerator.fileName ? .pattern : .solid)
|
||||
//
|
||||
// Two spellings answer "is it ours" since the `.backgrounds/` ruling (2026-08-09): the
|
||||
// qualified reference every current write lands at (`BoardStore.boardImageName`), and the
|
||||
// legacy bare name a board written before that ruling still carries at board root — a board
|
||||
// moved from neither location by this check, so both keep opening on Pattern.
|
||||
let image = store.snapshot.backgroundImage.value
|
||||
let generatesThisImage = image == FacetsGenerator.fileName
|
||||
|| image == "\(BoardBackdrop.backgroundsFolderName)/\(FacetsGenerator.fileName)"
|
||||
_mode = State(initialValue: generatesThisImage ? .pattern : .solid)
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
|
||||
Reference in New Issue
Block a user