-
-
Notifications
You must be signed in to change notification settings - Fork 0
Transport Overview
The Transport Overview screen (/transport) is the live operations view of all device tasks
managed by the flow-orchestrator — every conveyor/ASRS/AMR/AutoStore movement in one place, with
all UUIDs resolved to human-readable codes.
Backed by GET /api/flow/device-tasks (flow-orchestrator, port 8085).
RBAC: DEVICE_VIEW required.
The screen opens on "Open + finished today" — the operator's working set: everything still running plus anything that completed today. Switch from the Show dropdown:
| Scope | Rows shown |
|---|---|
| Open + finished today (default) | Active tasks (REQUESTED / DISPATCHED) + anything that finished today |
| Open (active) only | Active tasks only |
| Completed | COMPLETED tasks |
| Failed | FAILED tasks |
| All recent | The full 500-task backend window |
Scope is applied client-side against a single 500-task newest-first backend window. Changing the scope does not trigger a new backend request. The equipment-family filter and equipment picker apply server-side (they do trigger a reload).
Click any row to open the detail + trace dialog for that transport.
| Field | Resolved from |
|---|---|
| HU | Payload huCode
|
| Origin |
useCatalog (location code) or listWorkplaces (GTP station code) |
| Destination | Same |
| Next hop | Same; falls back to destination for ASRS/AMR/AutoStore direct-delivery tasks |
| Equipment | Equipment catalog label |
| Actor |
actor field on the task |
When a task is linked to an induction queue entry — set by flow-orchestrator from the moment a
tote is requested for a workplace — the dialog fetches the full material-flow timeline for
that HU via GET /api/flow/hu-trace?huId= and renders each function point as a timestamped row:
| Field | Description |
|---|---|
point |
Function point in the HU's journey (e.g. request, retrieve, induct, arrive, queue, done, conveyor, storage, slot) |
event |
Event that triggered the transition (e.g. REQUESTED, RETRIEVED, INDUCTED, SCANNED, ARRIVED, QUEUED, DONE, RETURNING, RETURN_ARRIVED, STORED) |
decision |
Human-readable note on the routing or lifecycle decision made at this point |
fromPoint / toPoint
|
Origin and destination location or function point |
ts |
Timestamp of the trace row |
This append-only hu_transport_trace table (V11 migration, ADR-0007 Phase 3c-1) records a row at
every function point an HU passes — retrieved from slot, inducted, conveyor decision points,
arrival, queued at the station, presented, done, returning to storage (CONVEY), arrived back at
storage, stored back in the source slot — giving a complete material-flow audit trail per HU rather
than the coarse per-device-task list. Tasks without an induction entry (e.g. standalone
STORE tasks) fall back to showing only the clicked task.
Conveyor decision-point rows (Phase 3c-2): when the emulator recirculates a tote
(OPENWCS_EMULATOR_RECIRC_EVERY=N), the CONVEY result payload includes an ordered decisions
list (sorter RECIRCULATED/DIVERTED events). Flow writes one trace row per decision
before the ARRIVED row, so the timeline explains why a tote arrived later than or out of
order with others dispatched before it. The point column is sorter and the event column
is RECIRCULATED or DIVERTED; the decision column carries a human-readable explanation
(e.g. "missed divert (destination busy) — looping"). In normal operation (no recirculation)
only the final DIVERTED row is written.
Live conveyor scan rows (ADR-0008 Phase 3d-1): when a CONVEY is dispatched as a live-walk
leg (payload contains entryNode), RoutingService.decide() appends a SCANNED row to
hu_transport_trace for each scan that belongs to the transport — one row per conveyor node the
HU passes through, written in real time as the emulator/adapter walks the graph. Each row
records: point = the scanned node code, event = SCANNED, decision = the routing outcome
(e.g. "routed to MID via straight", "held: loop full", "No route plan: following divert default to SHIP", "destination reached"), toPoint =
the next hop. This gives a node-by-node timeline of the HU's physical journey before the final
ARRIVED row. Stray barcodes (no active induction entry) are answered by flow's routing engine
but produce no trace row.
The raw payload and result JSON (if non-empty) are pretty-printed at the bottom of the dialog — useful for diagnosing FAILED tasks.
Close with ✕, the Close button, or Escape.
Other services (today: Slotting and Replenishment) turn a plan into a real physical relocation by posting a single request to flow:
POST /api/flow/moves
{ "warehouseId", "huId", "huCode", "fromLocationId", "toLocationId", "family", "reason" }
Flow picks the transport shape from the two locations' storage block:
-
Same-system move (both locations in the same storage block): a single RELOCATE device task
(AutoStore family → BIN_RELOCATE) physically moves the handling unit from
fromLocationIdtotoLocationId. -
Cross-system move (the locations sit in different storage blocks): a RETRIEVE → CONVEY →
STORE chain, routed through the same conveyor-routing machinery the rest of transport uses,
tracked leg-by-leg in a
flow_move_chaintable. Each leg is idempotent (a re-fired callback never advances the chain twice). OptionaldestFamily/crossSystemrequest flags let the caller pin the destination family or force the chain.
On the terminal completion (the RELOCATE, or the final STORE for a chain) flow:
-
books the HU's destination location in inventory (
PUT /api/inventory/handling-units/{id}/location), and - fires the existing
HandlingUnitMovedtxlog audit (below).
Stock follows the HU, so no StockMoved is emitted for HU-bound moves — the stock rows ride
the HU and are already located by the registry booking, which avoids a double-apply. (The dormant
StockMoved / PutawayCompleted inventory projection is reserved for loose, non-HU stock and is
now proven on that path — see Inbound and Inventory.)
The hu_transport_trace above is flow-local — flow's own working record of a journey. The
durable, replayable system-of-record for physical moves lives in the shared
transaction log (txlog). Whenever a device task that physically relocates a
handling unit reaches a terminal state, flow-orchestrator appends a HandlingUnitMoved event:
| Aspect | Value |
|---|---|
| Commands audited |
STORE, RETRIEVE, RELOCATE and the AutoStore BIN_STORE / BIN_RETRIEVE / BIN_RELOCATE variants (CONVEY transport is not audited — it is not a stock-location change and is already on the trace) |
| Trigger | Once per task at its terminal transition (COMPLETED or FAILED), emitted from DeviceTaskService — the single chokepoint every device task passes through |
| Stream | hu-<huId> |
| Payload |
warehouseId, huId, huCode, command, family, equipmentId, fromLocationId, toLocationId, status, detail, deviceTaskId (from/to derived from the command's own payload: STORE → destination, RETRIEVE → source, RELOCATE → both) |
| Delivery | Best-effort (HttpTxLogClient, 2 s timeouts): a txlog hiccup is logged at WARN and never fails the device-task callback |
It is audit-only: HandlingUnitMoved is deliberately not consumed by the inventory stock
projection (the HU's location stays maintained by the registry booking,
PUT /api/inventory/handling-units/{id}/location), so there is no double-apply. This is the audit
foundation that the now-built slotting move-dispatch (POST /api/flow/moves, above) rides on.
Inventory's StockMoved / PutawayCompleted projection stays reserved for loose (non-HU) stock,
where there is no HU to follow; it is now proven on that path. See Roadmap-and-Status.
| Column | Notes |
|---|---|
| Status | REQUESTED → DISPATCHED → COMPLETED / FAILED |
| Family | Equipment type: CONVEYOR · ASRS · AMR · AUTOSTORE
|
| Command | e.g. CONVEY · STORE · RETRIEVE · TRANSPORT
|
| HU | Resolved handling-unit code |
| Origin / Destination | Resolved location code or GTP station code |
| Next hop | Resolved; falls back to destination for direct deliveries |
| Equipment | Resolved label from the equipment catalog |
| Correlation | Short id; hover for the full id and explanation |
| Created | Timestamp |
The search box matches id, status, family, command, HU code, resolved origin/destination, equipment label, and correlation id simultaneously. Auto-refresh runs every 4 s; toggle with the Auto-refresh switch in the header.
openWCS — open-source Warehouse Control System · summarized from build.md & docs/AS-BUILT.md (the repo docs are authoritative).
Design
Flows
- Areas
- Inbound and Inventory
- Slotting and Replenishment
- Goods-to-Person Stations
- Outbound Flow
- Equipment Integration
- Transport Overview
- Process Designer
- Mobile Process Designer
- Hardware Visualisation
- Host Integration
Reporting & Dashboards
Operations