1## Why23Crate Works needs pressure plates and gates as a real Sokoban stressor for the4engine. The mechanic must make a crate on a plate readable, support words and5multiple YOU objects as pressers, and preserve rule-driven transformations of6the gate and plate nouns. It also needs to survive the same boundaries as every7future mechanic: contacts, Undo, restore, sharing, and solver replay.89## What Changes1011- Add channel metadata to authored objects and validate it against the host12 channel palette.13- Treat current-noun `PLATE` and `GATE` entities as channel-linked circuit14 members while retaining the authored channel on their stable entity IDs.15- Make plate pressure occupancy-based and recompute gate openness at the end of16 each turn after contacts.17- Make a closed gate an unconditional movement blocker using the prior settled18 state; never add a synthetic `GATE IS STOP` rule.19- Define jammed gates, transformed-away gates, channel isolation, and settled20 `gateChanged`/`plateChanged` events.21- Preserve channel metadata through reset, Undo, restore, CommonJS export,22 pack installation, data-only sharing, and solver parity.2324The change does not implement switches with edge-triggered toggles, crushing,25custom gate predicates, or visual styling beyond the neutral shape marker26contract. It assumes the declarative mechanic state foundation in27`9e91d42`; this change adds gate behavior on that foundation.2829## Capabilities3031### New Capabilities3233- `channel-linked-gates`: occupancy plates, channel linking, unconditional34 closed-gate blocking, memoryless jam behavior, and mechanic events.3536### Modified Capabilities3738None.3940## Impact4142The engine movement/contact phases, object and mod schemas, normalized pack and43sharing paths, settled events, solver fixtures, and board presentation data44will change. Existing levels without channel metadata remain unchanged. Gate45and plate visuals are consumed by the design-owned renderer after the engine46contract is accepted.