Two demos about the only metric that governs an assembly plant: minutes of line down. One shows when each plant stops and why. One shows what happens when something breaks, what the recovery options cost, and proves the rest of the plan was not disturbed. One shows the EDI exchange feeding both, and what each failure in it actually costs.
Hours until each plant stops, per part number, from on-hand plus in-transit against line consumption. Arithmetic, not a forecast.
Five inbound disruptions, verified recovery options ranked by cost per downtime hour avoided, and a hash-checked untouched-plan guarantee.
862 out, 997 back, 856 ahead of the truck, 810 three-way matched. Eight rules, each failure mapped to line risk, chargeback, receiving delay or blocked payment.
The grocery suite models outbound retail distribution, where the value is proving a load is legal before it departs. Inbound automotive is a different problem. Orders are not the uncertainty; the schedule is already known and released to suppliers. What varies is whether material actually shows up, in the right quantity, in the right sequence, in time to feed a line that consumes at a fixed takt. So the governing question moves from "is this load legal" to "when do we stop, and what is the cheapest legal way to not stop".
| Element | Count | Notes |
|---|---|---|
| Assembly and powertrain plants | 4 | 14 to 30 units/hour, 6 to 12 dock doors, one cross-border |
| Suppliers | 26 | 1 to 5 day lead times, some cross-border, roughly half with a qualified alternate |
| Parts | 34 | Frame rails through fastener kits; 7 are sequenced (JIS) |
| Inventory scenarios | 4 | normal, tight, launch ramp, peak build rate |
| Inbound shipments per plant | 445 to 988 | Depends on scenario and line rate |
Naming is deliberately generic. There are no real manufacturer, plant, or supplier names anywhere
in the data, the same rule the grocery suite follows for retailers. Everything is seeded: a given
scenario and seed reproduce byte-identically, and no datetime.now() appears in data
generation.
Both demos share one constraint engine. It always returns every rule with its measured value and its limit, pass or fail, because the complete trace is the product rather than a black-box OK.
| Rule | Checks |
|---|---|
trailer_payload | Container gross weight against 45,000 lb |
trailer_cube | Container cube against 3,800 ft³ |
receiving_window | Dock slot inside the plant's daily receiving window, judged modulo 24h |
dock_capacity | Concurrent arrivals in a slot hour against dock doors |
driver_hours_hos | Lane transit time against the 11 hour HOS limit |
sequence_integrity | JIS parts arrive as complete carts, ahead of the consumption they feed |
The clock says when a plant stops. Re-planning says what to do once something breaks. EDI health says which failures are on their way to becoming the next stop, and it is scored against the same clock, so an EDI fault on a part with forty hours of cover reads differently from the same fault on a part with three. Each demo stands alone, but the sequence clock, EDI, re-plan is the operational loop a plant IT organisation actually runs.
The data is synthetic and deliberately tuned so the failure modes are visible. The clock is arithmetic, not a forecast: it answers "when do we stop given what we already know", never "will this supplier miss". Recovery costs are illustrative parameters, not benchmarked freight rates. There is no claim here about better routing, better forecasting, or better prediction of anything.
What is claimed: the time-to-stop and downtime math is correct and hand-checkable, every shipment carries a complete constraint trace, recovery options are verified before they are offered, and the untouched part of a plan is proven byte-identical rather than assumed.
python -m src.web.app --port=5000 # then open /automotive/linedown
python -m pytest automotive_demos/tests/ -q
Package layout is automotive_demos/core/ for domain logic and
automotive_demos/web/ for the two Flask blueprints. The package is additive: it does not
import from or modify grocery_demos/ or clara_scfdp/.