Dispatch Systems · Research Reconciliation

The feature map, reality-checked

The container feature-idea map is the ambition — what a great Montréal drayage TMS could be. My code audit and Montréal integration plan are the reality — what actually exists, what's actually broken, and what's actually obtainable. Placed side by side, they correct and complete each other into one honest, sequenced plan.

3 research docs reconciled 13 feature clusters 34 code findings 2026-07-04
The reconciliation in one line

The two documents strongly agree on strategy — money-clock first, buy Terminal49, Telegram + Canadian moat — but the map assumes a working foundation that the audit proves isn't there yet, and it assumes a US-terminal world the Montréal plan shows doesn't apply. The map is right about where to go; the audit is right that you must fix the floor before you build the tower.

2
Lenses — ambition vs. ground truth
5
Points of strong consensus (act now)
5
Grounded corrections to the map
1
Foundation-first sequence out
01

The two lenses

These aren't competing conclusions — they're different vantage points on the same product. One looks in from the market; the others look out from the code and the Montréal terminals.

Lens A · outside-in

The Feature-Idea Map

CONTAINER-DISPATCH-FEATURE-MAP.md

A ~15-agent sweep of the commercial drayage market (PortPro, CargoWise, Terminal49, BlueCargo) and the operational domain. 13 feature clusters from the money-clock engine to street turns, chassis per-diem audit, the Canadian customs moat, and 3 market "white spaces."

Its thesis: drayage software is about clocks, gates, and money-automation — every dollar sits on a clock triggered by an event in someone else's system. Explicitly "ideas only, not a build spec."

Strength: vision & ambition. It knows where a great product goes. Blind spot: it assumes the current build works, and it's shaped by US ports.
Lens B · inside-out

My Audit + Montréal Plan

RESEARCH-container-dryvan · RESEARCH-montreal-terminal-integration

A 14-agent code audit (34 ranked findings, honest maturity) plus a 6-agent, live-researched Montréal terminal-integration plan grounded in CN, CPKC, Termont, and MGT reality.

Its thesis: the capture loop is excellent but there's demo-driven debt — polished screens over backends that drop the data — plus go-live blockers, and no single Montréal source gives a clean per-container push feed.

Strength: ground truth. It knows what's real, broken, and obtainable. Blind spot: narrower scope — it doesn't dream up the feature space the map does (customs, street turns, dispute letters).
02

Theme by theme

Ten themes where the two lenses meet. Each shows what the map proposes, what the research found, and the reconciled call.

Consensus — act with confidence Correction — reality overrides the map Foundation — must precede the map Vision — the map adds what the audit didn't
01

The money-clock (LFD · detention · per-diem)

Consensus + correction
Feature map

Cluster A is THE #1 value driver: multi-clock countdowns, pre-charge alerts, auto-invoice, per-diem audit, dispute packets. "Upgrade the existing detention/per-diem suggestion into a real engine" — prevents 60–80% of D&D.

My research

The "existing suggestion" is broken beneath the UI: per-customer detention terms are sent but never persisted (G9); per-diem is frontend-only and never accrues (G18); detention is computed two ways that disagree and can double-bill (G6/G8) with no timezone (G-TZ).

Reconciled: Agree it's the #1 priority — but you can't "upgrade" a stub. Fix the detention engine first (persist terms, single-source the clock), then build the multi-clock engine on a base that actually holds.
02

Holds as an AND-of-gates / availability

Correction
Feature map

Cluster B: model availability as a computed AND of gates, alert on holds. Describes it as net-new — "the fork has no hold/availability concept."

My research

The live container work lives in a separate Container Dispatch Platform backend that already has this: normalizeTerminalSignals collapses provider data into availability/holds/LFD/appointment/empty-return, with dispatch gating and promoteTerminalIntelToOrder.

Reconciled: More built than the map assumes. The holds-as-gates concept exists in the CDP seam — wire the data feed into it; don't re-architect the concept from scratch.
03

Buy the terminal data (Terminal49)

Strong consensus
Feature map

Cluster K / §16: BUY Terminal49 — drayage-native, holds/LFD/availability/FIRMS, webhooks, free tier ≤50/mo, ~$350/mo. Vizion (~$5/container) as the alternative. Don't build 9 carrier APIs by hand.

My research

Independently reached the identical conclusion — and verified it for Montréal: Terminal49/VIZION is the only clean, no-BCO, no-LOA push across CN-Montréal, CP-Lachine, Termont, and MGT. Added the COGS reality (~$1–3/container on a $250–550 move).

Reconciled: The highest-confidence move in either document — two independent research paths converged on it. My Montréal plan is the grounded execution of the map's Cluster K. Do this.
04

Terminal appointments & auto-booking

Correction
Feature map

Cluster D / §16: leans on eModal's REST API (Pre-Gate, SprintPass Pro auto-requesting appointments, dual moves) + continuous slot monitoring and auto-book — the US "sniper" pattern.

My research

eModal is not the Montréal reality. Montréal runs on RDV Termont (DMS), MGT NET/gate, CONROO Gate Connect (new, May 2026), and CN Gate Appointment. Appointments can't be fully API-automated here — booking stays portal-side.

Reconciled: The map's appointment-automation is US-terminal-shaped. In Montréal: capture the slot on the leg (manual entry is fine), keep the portal logins, and watch CONROO — don't assume eModal auto-book.
05

Empties · dual transactions · street turns · chassis

Vision the map adds
Feature map

Clusters D/E/F: dual-transaction pairing (+50% duals), empty-return-by-SSL rules, street turns (>$400 each), chassis type-matching, split detection, and the chassis per-diem audit (15–30% of invoices wrong = recoverable money).

My research

The fork has an empties board, chainLeg, chassis registry, and new chassis exclusivity — but no type-matching, no per-diem accrual. My audit's scope didn't enumerate duals/street-turns; this is genuine feature space it didn't cover.

Reconciled: This is real ambition the audit didn't reach — high-value, but Phase 2+ (after foundation + money-clock + feed). The chassis per-diem audit is the standout: recoverable cash, and the driver taps already hold the evidence.
06

Rail — CN / CP Montréal

Consensus, grounded
Feature map

Cluster G (Montreal-critical): rail milestone tracking, a rail-LFD clock that starts at NOTIFICATION not arrival, rail vocabulary (ingate/outgate/cutoff/J-1). Terminal registry already lists CN Taschereau / CP Lachine.

My research

Grounded the data access: CN One portal (poll) + CPKC FastPass/Customer Station (LOA-gated), both covered by the aggregator. Flagged the Lachine (CAMTR rail) ≠ marine terminals trap so inference routes correctly.

Reconciled: Agree rail is Montréal-critical. The map identifies the right trigger (the notify event = rail-LFD start); my plan says the aggregator/CN One is where that signal actually comes from.
07

The Canadian moat (CBSA · bilingual)

Vision the map adds
Feature map

Cluster M — the strategic moat: CBSA PARS/PAPS/RNS customs release as a first-class gate, ACI eManifest, in-bond moves, bilingual EN/FR job cards, Quebec axle rules. BorderConnect API. "No US incumbent models this."

My research

Out of scope for both my audit and the terminal plan — I focused on container-status and code correctness, not customs. This is a real gap in my coverage.

Reconciled: The map is authoritative here and I defer to it. The customs + bilingual layer is its unique strategic contribution and the defensible niche — but it lands after the foundation and money-clock, as the map's own roadmap also sequences it.
08

AI copilot & the "white space" moats

Consensus + correction
Feature map

Cluster L + §17: extend "Sarah" to drayage; 3 uncontested white spaces — drayage voice AI (terminal/appointment calls), D&D dispute-letter generation (FMC §541.6), and tariff-parse + D&D prediction.

My research

The AI plumbing exists (telegramAiProvider, schema-locked) — but assistantBrain.js is untested and a prompt-injection surface (G-INJ): it parses [[ACTION]] tags out of LLM output that can execute actions, with uncapped spend.

Reconciled: The white spaces are a genuine moat and the assets exist — but harden the AI action path first (whitelist actions, add tests, cap spend) before wiring auto-executing drayage copilot features onto it.
09

Which codebase are we even building on?

Correction
Feature map

Targets "the container-dispatch fork on the shared PEVO/HHS Node backend" — one program, one backend.

My research

The live container operation is a separate Container Dispatch Platform backend (~16.4k lines) that has already drifted from PEVO (16.8k) — different order prefix, its own terminal registry + Copilot. The React fork and the CDP backend are distinct trees.

Reconciled: A structural fact the map missed and everything depends on. Build against the CDP tree for terminal work; and because the backends drifted, every "shared" fix must be applied twice and verified.
10

The foundation the map is silent on

Foundation — must precede
Feature map

Silent. It's a feature-idea map — it assumes a working, sellable base to layer clusters onto.

My research

The base has go-live blockers: currency hardcoded USD on a CAD op (G1), a $750 preauth floor over-holding zone moves (G1b), "Heavy Haul Support" branding leaking onto customer pay pages (G2), no CASL STOP (G3), the dry-van fork's pricing self-destructs on first Save (G4) — plus lost-update concurrency (G5), no backup/DR (G-DR), the Telegram SPOF, and zero backend tests.

Reconciled: This is the single biggest thing the map omits. Its Phase 1 quietly assumes a floor that has holes in it. The audit's Wave 1 fixes must land before the map's roadmap begins.
03

The reconciled sequence

Neither document's roadmap is quite right alone. The map starts at "build the money-clock"; the audit says "the money-clock's base is broken and the product can't ship yet." Merged, foundation-first:

The correction that reorders everything

The feature map's Phase 1 is "make the money-clock real." But the detention engine it wants to upgrade doesn't persist, the container fork can't take a CAD payment cleanly, and the dry-van fork breaks its own pricing on Save. Stage 0 below is not in the map — and it gates the map's entire roadmap.

0

Fix the floor audit only · not in the map

Close the go-live blockers (currency + preauth floor + branding + CASL; dry-van G4 pricing self-destruct), single-source detention so it stops double-billing, persist per-customer terms (G9), and stand up backup/DR. De-demo the product: trace every good-looking screen's write path to storage.

→ Audit Wave 1 · Wave 1-DryVan
1

Make the money-clock real map Cluster A · now grounded

On the now-working detention base, build the multi-clock engine — LFD, detention, chassis per-diem, empty-return as separate countdowns with T-48h/T-24h/overdue pre-charge alerts, and POD-gated auto-invoicing. The map's #1 value driver, on a base that holds.

→ Map Cluster A + audit's fixed detention/per-diem
2

Buy the feed map Cluster K = Montréal plan

Add the terminal49 provider to the CDP registry + webhook; it drives holds/availability/LFD/empty-return into the seam that already models them. Verified Montréal coverage (CN-Montréal, CP-Lachine, Termont, MGT). Both documents' single highest-confidence move.

→ Two research paths converged here
3

The empty side + rail map D/E/F/G

Dual-transaction pairing, empty-return-by-SSL rules, street-turn matchback, chassis type-matching + per-diem audit (recoverable cash), and rail-LFD from the notify event. Appointments captured on the leg manually — the Montréal reality, not eModal auto-book.

→ Map's ambition, Montréal-grounded on appointments
4

The moat — Canadian edge + copilot map M/L + white spaces

CBSA PARS/PAPS/RNS as a first-class gate + bilingual FR (the map's defensible niche). Then, after hardening the AI action path (G-INJ), the three white spaces: drayage voice AI, FMC §541.6 dispute-letter generation, and tariff-parse + D&D prediction.

→ Map's strategic vision, secured first
Bottom line

The feature map and my research aren't rivals — they're the ambition and the ground truth, and they need each other. The map would have you start building the money-clock on a foundation with holes; the audit alone would fix the floor without a clear picture of the tower to build on top. Together they say: fix the floor (Stage 0), then build the money-clock (Stage 1), then buy the feed (Stage 2) — the one move both documents independently reached — then the empty side, then the Canadian moat.

Two things to carry into every step: the live terminal work is in the Container Dispatch Platform tree, not the shared PEVO backend (and the two have drifted — fix twice); and in Montréal there is no clean per-container push feed to be had for free, which is exactly why buying Terminal49 is the consensus spine. The map knows where to go. The research knows what's really under your feet. This sequence is both.