Eric's office towers are 9.5 inches deep; Etherfields boxes are 11.8 inches square. Spine-out they stand 2.3 inches proud of the shelf edge — clearly livable, it's how they sit today — but the lane model will honestly refuse forever: can't stand (11.8 > 9.5 depth), can't stack flat (same), so the opening warns NO PACKING FITS. The first deliberate misfit deserves first-class status. An assignment can now carry acknowledged: true. An acknowledged box takes the standing lane WITHOUT the height/depth check — the human has seen the overhang — while the width budget stays honest (nine acknowledged monoliths still overflow a 23.25-inch row). It drops out of misfit/laneless warnings everywhere: the wall diagram, the sheet, and bggpipe dims (which now says "overhangs, acknowledged" instead). Ways in: an "accept overhang" button in the opening's sheet (appears on any resident the lanes can't take; tap again to retract), or an acknowledge column (yes) in shelve --import. Once acknowledged, later imports needn't re-state it. Re-import hardening, prompted by Eric's "will a new import make a mess?": it's an upsert, not a reset — and now genuinely so. Previously a re-import preserved notes but silently wiped lane overrides; now notes, lanes, and acknowledgments all survive when the opening is unchanged (a move resets lane and acknowledgment — new spot, new verdict). Same fix in /api/locate: the lane-flip button used to wipe the hand-entered note because LocateBody.note defaulted to "" — it's now tri-state, None means leave it alone. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016jXZFSTZQKzAC8fqpWSz9g
250 lines
6.0 KiB
JSON
250 lines
6.0 KiB
JSON
{
|
|
"units": [
|
|
{
|
|
"name": "Library Kallax",
|
|
"openings": [
|
|
{
|
|
"id": "library-kallax-top",
|
|
"label": "Top",
|
|
"zone": "",
|
|
"width_in": 53.0,
|
|
"height_in": 38.0,
|
|
"depth_in": 15.4
|
|
},
|
|
{
|
|
"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"
|
|
},
|
|
{
|
|
"name": "Library Right Shelving",
|
|
"description": "To the right of the Kallax",
|
|
"openings": [
|
|
{
|
|
"id": "library-right-shelving-top",
|
|
"label": "Top",
|
|
"zone": "",
|
|
"width_in": 23.5,
|
|
"height_in": 25.0,
|
|
"depth_in": 9.5
|
|
},
|
|
{
|
|
"id": "library-right-shelving-a1",
|
|
"label": "A1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 10.25,
|
|
"depth_in": 9.5
|
|
},
|
|
{
|
|
"id": "library-right-shelving-b1",
|
|
"label": "B1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 10.75,
|
|
"depth_in": 9.5,
|
|
"description": ""
|
|
},
|
|
{
|
|
"id": "library-right-shelving-c1",
|
|
"label": "C1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 12.25,
|
|
"depth_in": 9.5,
|
|
"description": ""
|
|
},
|
|
{
|
|
"id": "library-right-shelving-d1",
|
|
"label": "D1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 9.5,
|
|
"description": ""
|
|
},
|
|
{
|
|
"id": "library-right-shelving-e1",
|
|
"label": "E1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 19.0,
|
|
"depth_in": 9.5,
|
|
"description": ""
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Library Left Shelving",
|
|
"description": "To the left of the Kallax",
|
|
"openings": [
|
|
{
|
|
"label": "Top",
|
|
"zone": "",
|
|
"width_in": 23.5,
|
|
"height_in": 25.0,
|
|
"depth_in": 9.5,
|
|
"id": "library-right-shelving-2-top"
|
|
},
|
|
{
|
|
"label": "A1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 10.25,
|
|
"depth_in": 9.5,
|
|
"id": "library-right-shelving-2-a1"
|
|
},
|
|
{
|
|
"label": "B1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 10.75,
|
|
"depth_in": 9.5,
|
|
"description": "",
|
|
"id": "library-right-shelving-2-b1"
|
|
},
|
|
{
|
|
"label": "C1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 12.25,
|
|
"depth_in": 9.5,
|
|
"description": "",
|
|
"id": "library-right-shelving-2-c1"
|
|
},
|
|
{
|
|
"label": "D1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 13.25,
|
|
"depth_in": 9.5,
|
|
"description": "",
|
|
"id": "library-right-shelving-2-d1"
|
|
},
|
|
{
|
|
"label": "E1",
|
|
"zone": "",
|
|
"width_in": 23.25,
|
|
"height_in": 19.0,
|
|
"depth_in": 9.5,
|
|
"description": "",
|
|
"id": "library-right-shelving-2-e1"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|