The board wears a picture — background becomes a mapping, and the window chrome follows it under a thin frost

background is {color:, image:} and only a mapping at every level; the board's image paints the full window under a transparent title bar, with a thin-material frost strip keeping the chrome legible and the standard accommodations intact.

Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
2026-08-07 10:15:03 -04:00
parent 190a8e36f1
commit d5ad21c3da
37 changed files with 1182 additions and 76 deletions
+9 -3
View File
@@ -352,7 +352,7 @@ struct FixtureCoercionTests {
let cardTitleSeq = "40000000-0000-4000-8000-000000000004"
let cardIconColorInt = "50000000-0000-4000-8000-000000000005"
let cardBackgroundMap = "60000000-0000-4000-8000-000000000006"
let cardBackgroundInt = "70000000-0000-4000-8000-000000000007"
let cardBackgroundScalar = "70000000-0000-4000-8000-000000000007"
let cardDeletedBad = "80000000-0000-4000-8000-000000000008"
let result = try loadFixture("Valid/coercion.kanban")
@@ -371,8 +371,14 @@ struct FixtureCoercionTests {
#expect(try card(cardTitleInt).title == .valid("2048"))
#expect(try card(cardTitleSeq).title == .malformed(raw: "[a, b]"))
#expect(try card(cardIconColorInt).iconColor == .valid("42"))
#expect(try card(cardBackgroundMap).background == .malformed(raw: "{x: 1}"))
#expect(try card(cardBackgroundInt).background == .valid("12345"))
// **`background` is a mapping and only a mapping** (01-storage-format.md § Frontmatter,
// ruled 2026-08-06). So the two background cards say opposite things about one key:
// `{x: 1}` is a perfectly legal mapping that simply names neither subkey no colour, no
// trace, the unknown subkey riding along like any unknown key while the bare scalar
// `12345` has no reading at all, which is the golden pin on the retired shape.
#expect(try card(cardBackgroundMap).background == .missing)
#expect(try card(cardBackgroundScalar).background == .malformed(raw: "12345"))
#expect(try card(cardBackgroundScalar).background.rawText == "12345")
let deletedBad = try card(cardDeletedBad)
#expect(deletedBad.deleted == .malformed(raw: "definitely-not-a-date"))