- The Trestle intro comm now fires on the first discovered world (the
starter quest's own witness, `discoveredWorldCount`) instead of the
first planet in a foreign system, so the comm and the quest can never
drift; delayMs drops to 0 so it lands at the moment of discovery.
- The scene's `busy()` contract is now comm-type-aware: audio-only comms
(voice, no box, no pause) ride over in-progress actions like mining or
a scan sweep, while ack/visual comms still wait; modal windows and a
jump in flight block every type.
- Add the `comms-mine` dev harness that walks the type-aware busy
contract (free scene → real mining → audio comm mid-mining → jump) and
update the trestle dev scripts/tests to the new trigger and witness.
- Arm the pair on scene-create for loaded saves that already hold
discovered worlds, and widen the cdp-shot ready dump.
- Add ice-shop art/video assets.
- Wire 10 new comm beats (oac-tether, oac-scan, oac-upgrade, oac-minerals,
oac-fly-mine, oac-first-cluster, oac-research-complete, oac-tether2,
oac-relaunch, oac-explore) into data/comms.json with their triggers,
speech clips, and FIFO ordering
- Add trigger arming in GameScene (firstScan, tetherResearch, firstCluster,
minerals200, researchComplete) and SurfaceScene (tetherL2Launch)
- Make CommsHub.trigger idempotent so a double-click can't queue the same
comm twice
- Fix landing.json to use ice-surface-02/03.mp4 instead of rocky variants;
add the two new ice-surface videos and an ice-shop image
- Add speech clips intro-05 through intro-10 and research-complete
- Expand dev/comms-intro.mjs into a full 10-step walkthrough self-check,
add dev/comms-upgrade-hold page for screenshotting the longest comm, and
update dev/comms.test.mjs to cover the new roster