In the 3D demo, floors are ground overlays, not occupants: a plant and a
floor share a column in either commit order, and the plant keeps the column
occupant slot. Deliberate, tested contract — see
test/demos/integration/3d/floor_overlay_coexistence_test.gd:
- A plant on a column never vetoes a floor paint there, and the floor commit must not steal the occupant slot from the plant.
- A floor on a column never vetoes a plant there; the plant commits over it.
- Walls still mount on a shared plant+floor cell (the overlay floor keeps
publishing the
"floor"family they attach to), while a plant-only cell still refuses walls (a bush is not a mountable surface).
Why no exclusion rule exists
A "nature refuses floors / floors evict nature" rule was prototyped during
6.1 (profile denies_overlay_families + demo eviction) and reverted
before RC: it contradicts the coexistence tests above, which encode the
shipped design (planter boxes on patios, bushes along deck edges). Revisit
only as an explicit product decision — flipping the rule means rewriting
the coexistence suite, not just adding a veto.
If that decision ever lands, the authority split stays: the plugin would own a generic data-driven mechanism, the demo would own the family data and any destruction consequence (through the demolish lifecycle, never a parallel removal path).