Issue #3616290: Give every bookable area its own outline on the map, so a big hall can be booked by section and subsection
An area's outline is data now, stored at the finest grain the hall is divided into: one per subsection, in a multi-line field on the section beside the names of those parts. Any area a configuration offers is drawn from the parts it covers, so the two halves of a balcony are two areas for the production that offers them apart and one area for the production that offers them together, with one geometry behind both.
Geometry is a fact about the room and grouping is a decision about a production, which is why no shape is stored on a configuration row: two productions could then disagree about where the balcony is.
The defect this fixes. Every pooled area of a section took its clickable shape from that section's map_element, so a hall offering half a balcony produced two areas pointing at the same outline and nothing a visitor could click. Nothing checked the named id existed either, so a typo left an area with no way in and no error anywhere. map_element is deleted, not kept alongside.
How the shapes are authored. The venue layout of #3616062 carries an Areas layer holding one shape per part of the hall, seeded from the outline it already has, else from a hull around that part's own seats, else as a box parked below the room for a part that holds no place at all. Drag and reshape them in a vector editor and upload the file back, exactly as for the seats. A part whose seats are all still parked gets no shape that trip: a hull around the parked grid would come back as that part's outline once the seats had moved into the room.
What falls out of the shape being data rather than a name in somebody's drawing:
- a hall with no artwork at all can be booked by area;
- a malformed outline is refused where it is written, so nothing fails silently;
- the picker draws the areas in a layer of its own, and the pass that hid the outline of a section offered place by place is gone: there is no artwork shape left to hide.
Also here. The venue package carries the outlines and, for the first time, the subsection names, which shipped without ever being exported; format version 4, and a version 3 package still imports. One fix found while reading the picker again: a full area announced itself aria-disabled and drew itself as refused, but still acted on a click or a key and leaned on the stepper clamping at its own top.
Deploying this to a site that has areas needs the new area_outlines base field installed and map_element uninstalled (pre-1.0, so no update hook), then one download and upload of the layout to give its areas their shapes.
Docs, the French translation and the tests are in the same branch. Kernel tests green on SQLite and on MySQL locally.
AI-Generated: Yes (Claude Code wrote the code and the tests on this branch, ran them, and drafted this description. I reviewed all of it before pushing.)