Belts, splitters, and tunnels accepted items regardless of which edge
they arrived through, so a tile would take an item pushed into its own
output edge (e.g. two facing belts ping-ponged an item forever).
Add oppositeRotation() and an entersThroughOutputEdge() predicate, and
guard every acceptance site (tryPutItem, tryPushToTile, and the belt
transfer in moveItemsToNextTile) so an item entering through an output
edge is refused (REQ-MAT-ACCEPT-DIR). Building output-port deposits now
also refuse a belt that faces back into the building.
Update requirements (new REQ-MAT-ACCEPT-DIR; REQ-MAT-OUTPUT-PORT and
REQ-BLD-TUNNEL-ENTRY clarified) and tests (explicit feed direction on
direct deposits; new output-edge rejection cases per tile type).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DZR44tA8sn4dPqDzAVXyps