precache: warm the set the engine actually asks for

genreFiles read s.file and instruments.pad.sampler. Neither shape exists: found sources carry samplePath, and the voice objects have no .sampler key at all, so addSampler returned at its first guard every time.

• It now reads the same set live.js schedules from -- sch.found srcIds union the sampler zone srcIds -- via buildSchedule, and resolves them through the player's own local resolver rather than s.url, which is…

• Deliberately NOT keyed off state.foundSources: the resolved state declares the whole crate, not the draw set, which would pull ~625 files / 100MB per genre.

▶ Play it: Rail Replacement Rapture — a bed-heavy genre where the found-sound layer carries the room https://stellate.app/?genre=transitwave&seed=3668&path=749.12536,768.12569,730.12569&xdur=13.122

27e62ad https://github.com/aboard-io/stellate/commit/27e62ad42d591d583adc6f32e74f70a7c94fd048