numObstructionsDetected

How many times a transporter was blocked behind one that had nothing to do at that instant.

What this measures is parking on the travel path. Zero means idle transporters clear the running lines; a positive count means they do not, and each count is one journey that had to wait for a parked transporter to be dispatched before it could pass. The simple AGV shop takes about forty a replication when its carts are left where they stop, delivers the same number of parts as when they are sent home, and pays for the difference in time in system.

It is not a stall detector, and cannot be: the detector reads one instant and an entity may seize the parked transporter the moment after. What turns a count into a stall is nothing arriving to move it, and a count cannot see that. numBlockedByIdleVehicle is the same condition measured as a duration and is the reading to put beside this one; the replication-end audit is the third, naming every transporter still waiting when the horizon fell. A count with a small duration beside it is congestion, and the remedy is a home base on a parking spur, off the running line. A count with most of the fleet behind it, or a run that ends with transporters still blocked, is a fleet that stopped, and that is the reading not to believe until it is explained.

A transporter going home or to a staging area that waits behind the idle transporter already standing there is not counted: that is the queue a shared staging area forms.

Counted rather than logged, so that the condition appears in the standard report, where an analyst will see it. Each instance is logged only at debug level.