R2.4 framework cleanup on the holder side. When a Slotted
host destructs, actively vacate every occupied slot via the
canonical Slotted.vacate(slot, candidate) chokepoint so
the held side's witness chain (onSlotReleased, posture
transitions, onUnwielded, …) fires. A naked
slots.clear() would leave occupants with a stale
getOccupiedHost() until lazy self-heal and would skip the
witness traffic.
Walk order: for a Container+Slotted+Containable host (avatar with a Wieldable in hand), the Container cleanup (most-derived) evacuates contents first, then THIS step vacates slots. A wielded sword that's also in the avatar's contents ends up in the outer container (via Container cleanup) AND cleanly unwielded (via this step).
Iteration safety: snapshot the (host, slot, candidate)
tuples first because host.vacate mutates the live map.
Instruction field consumed by
applyAdornments. The YAML data is an array ofAdornmentSpecentries; Phase 2 clones each and attaches it as a fixture. TheapplyExits/applyPopulatesprecedent — declarative content over the imperativeaddFixture.