Eric's wall answered the orientation question with a screenshot full of red: the capacity model assumed one flat stack per opening, so his spine-out cubes read 200% full. His reviewer's prescription, built to its acceptance cases: each opening packs a FLAT lane (thinnest axes against interior height, claiming the widest flat box's width) and a STANDING lane beside it (boxes on edge against the remaining width; standing boxes must fit height and depth upright). The largest- footprint class lies flat, smaller boxes stand, any box's lane is flippable per-assignment (▬/▮ toggle in the opening view, ✱ marks an override), and ⚠ now means NO packing fits — not merely "tall stack". Unmeasured boxes take no lane but keep their honesty tag; dual fill bars show each lane's budget; a broken opening is never offered by the suggester. On the real wall: the double-wides and half the cubes went green (7 games = 13.12" flat + 2.91" standing), and the remaining warnings mark cubes that genuinely hold 12-16 boxes. Both reviewer acceptance tests pass verbatim. And the export gains the humanity Eric asked for: game pages say where each box lives, containers list their contents, and a shelves page draws the wall as it physically stands — proportional cells, zones, descriptions, every opening linking its residents. Publishing a shelf layout is a choice: --no-shelves keeps the layer out. "shelves" joins "art" as a reserved slug. 387 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016jXZFSTZQKzAC8fqpWSz9g
126 lines
3.0 KiB
JSON
126 lines
3.0 KiB
JSON
{
|
|
"units": [
|
|
{
|
|
"name": "Library Kallax",
|
|
"openings": [
|
|
{
|
|
"id": "library-kallax-a1",
|
|
"label": "A1",
|
|
"zone": "oversize",
|
|
"width_in": 26.5,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-a2",
|
|
"label": "A2",
|
|
"zone": "oversize",
|
|
"width_in": 26.5,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-b1",
|
|
"label": "B1",
|
|
"zone": "party",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4,
|
|
"description": "big boxes a-m"
|
|
},
|
|
{
|
|
"id": "library-kallax-b2",
|
|
"label": "B2",
|
|
"zone": "party",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4,
|
|
"description": "big boxes n-z"
|
|
},
|
|
{
|
|
"id": "library-kallax-b3",
|
|
"label": "B3",
|
|
"zone": "party",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4,
|
|
"description": "card rows standing"
|
|
},
|
|
{
|
|
"id": "library-kallax-b4",
|
|
"label": "B4",
|
|
"zone": "two-player",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-c1",
|
|
"label": "C1",
|
|
"zone": "general",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-c2",
|
|
"label": "C2",
|
|
"zone": "general",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-c3",
|
|
"label": "C3",
|
|
"zone": "general",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-c4",
|
|
"label": "C4",
|
|
"zone": "general",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-d1",
|
|
"label": "D1",
|
|
"zone": "general",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-d2",
|
|
"label": "D2",
|
|
"zone": "vintage wargames",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-d3",
|
|
"label": "D3",
|
|
"zone": "heavy",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"id": "library-kallax-d4",
|
|
"label": "D4",
|
|
"zone": "campaign",
|
|
"width_in": 13.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 15.4
|
|
}
|
|
],
|
|
"description": "Centerpiece of the game wall in the library"
|
|
}
|
|
]
|
|
}
|