- hit() now passes rect-table as single arg (not destructured) per engine.spatial.aabb_contains_point(rect, px, py) signature. - update() honors SPOREL_CI=1 via 60-frame self-exit (matches spine- prototype pattern). Required for headless smoke (P0-S15).