macos: jump() polling + boot-animation prelude \u2192 piece handoff
Two pieces of plumbing that make the macOS host feel like a real AC
session instead of a single-piece launcher:
1. piece_pending_jump(): reads globalThis.__pending_jump (set by the
prompt's system.jump() or a top-level jump()), clears the slot,
returns the requested piece name. main.c polls this between frames
and swaps pieces \u2014 destroys the old PieceCtx, loads <name>.mjs
from the current piece's directory, reframes/boots the new one.
Colon params strip cleanly ("clock:cdefg" \u2192 clock); @handle
pieces log and no-op for now (needs net).
2. AC_BOOT_ANIM=1 prelude: before piece_load(), the host runs the 120
shared boot_anim frames through the same SDL texture/present path
the piece uses. Handle / city / hour / title_scale / title reuse
the AC_SHOT_* env surface so a single config drives screenshots,
recordings, and live boots. Events drain during the prelude so the
window doesn't go unresponsive.
Verified: a test piece that calls system.jump("notepat") on boot
triggers the swap and notepat's audio starts emitting.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>