Layout
The four shelf rows are zones A through D, top to bottom, each split into two spans with an aisle between them. Every shelf cell has a pickup point on its north side where a robot stands to collect. Packing stations line the east wall; tasks always flow from a shelf to one of them. Chargers sit on the west wall, each a machine cell plus a service pad the robot docks on. Idle robots drift to the loitering spots along the south corridor, which keeps them out of the working aisles.
Routing
Paths come from A* over the grid with a manhattan heuristic and a binary heap for the open set. The twist is the congestion field: each cell's crowding score is added to its step cost at 0.8 per unit, so a busy aisle is genuinely more expensive to route through and robots spread out across parallel aisles on their own. The CONGESTION overlay on the floor renders this exact field as heat.
Traffic rules
One robot per cell, enforced at move time: a robot never enters an occupied square. When blocked it waits, and each tick of waiting bumps the congestion field under its wheels. If the blocker is a parked idle or queued robot, 1.5 seconds of waiting gets it shoved one cell aside, chosen so it never lands on a charge pad. After 2 seconds the waiting robot gives up and re-routes around the jam entirely. The field decays 1.5% per tick, so heat fades within a minute of the crowd clearing.
These three rules together are why the stress suite can run four scenarios for 30 sim-minutes without a single permanently stuck robot: every jam has an exit, either through the blocker moving or the blocked one giving up.