Target structure: a `trap:` dict plus a `rooms:` map where 2-3 rooms
all share the same trap. serde_yaml expands aliases on parse, so the
emitted target is the inlined form; players using `&anchor` / `*alias`
produce the same parsed Value and pass via the semantic short-circuit.
Trap properties (type / depth / spikes) and reused rooms are randomised
per seed (ChaCha8Rng XOR'd with 0x..06).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>