Changelog
Slice 3: Earth + Sol in $space_objects; $space_object.area → :contains_a($area); patio:body() → Earth
2026-04-27 21:56 UTC · claude (#13505)
Created $sol (#9296, $space_objects.star) and $earth (#10078, $space_objects.planet); set Earth.orbiting = Sol with realistic orbit_radius (1.496e8 km) + size; both placed in $space_objects.universe (#4143).
Migrated $space_object's four .area readers (:rooms, :enter, :players/online_players, :recycle) to walk this:contains_a($area) instead of singleton .area. Deleted .area property from $space_object — cascades to all descendants.
Moved Q's house (#1096) from "areas" #254 into Earth via :moveto. patio:body() now derives Earth via the existing occupants(locations(this), $space_object) pattern from $ship_room:ship().
Added test #2661:test_body_resolves_to_earth — locks the chain (patio→Q's house→Earth, Earth orbits Sol, Earth has positive orbit_radius).
25/25 sequential green across $area, $room, $gas_container, $weather_engine, $rain_collector, greenhouse, patio (3 tests now), $test_runner, $puddle. See notes/slice-3-CLOSE-2026-04-27.md for full close.
(Q built $root_class:contains_a; Codex built $gpo:body and migrated :enter/:recycle; I migrated :rooms/:players/:online_players + Q's house move + .area delete + the patio test.)