RoundTrip Status & Roadmap — August 11, 2026
Status: Snapshot, supersedes roundtrip-status-2026-08-10.md for anything it touches. That document is still accurate for everything it covers that isn't mentioned again here — scheduling, billing completion, Twilio, the old R-series backlog, AI cluster, docs/infra someday items. This document exists because two full audit passes (TRA-388, TRA-402) happened since Sunday's snapshot and materially changed the picture.
Part 1 — What's actually Done since Sunday
| Ticket | What |
|---|---|
| TRA-397 | Dead 08-dispatch-board.spec.ts config fixed, 5 tests recovered |
| TRA-390 | Offline mutation queue unit tests — 22 tests |
| TRA-391 | Photo capture unit tests |
| TRA-393 | authStore branching tests — surfaced TRA-414 (see below) |
| TRA-369 | Full remediation — real technician offline-mutation hook built, useTechMutations.ts deleted, classifier bug fixed at the root |
| TRA-402 | Full codebase ghost-code audit — the source of everything in Part 2 |
TRA-392's specs exist but have never been run against a live environment — npm run test:e2e still needs to happen before trusting the photo-capture E2E coverage as passing, not just present. Same for TRA-397's recovered suite.
Part 2 — The new critical thread: domain-integrity bypass pattern
TRA-402's single biggest finding: the same failure shape happened three independent times — a live endpoint bypasses a sensitive aggregate's guarded domain methods entirely, via hand-written raw SQL. Not three unrelated bugs; one recurring pattern, most likely from early rapid-building speed tradeoffs where raw SQL was faster to ship than wiring a full command chain, with the "proper" version built in parallel and never actually connected.
Recommended sequence
- TRA-408 (data audit) first, or in parallel with everything else. Read-only queries checking whether the guard-bypassing has already produced actual bad data (empty-required-field
Technicianrows, inconsistentTenantstates). Doesn't block anything else, and the answer changes how urgently 2-4 need to move. - TRA-359 (Tenant/Stripe), TRA-403 (Technician), TRA-404 (TenantUser) — the three actual fixes. TRA-359 is the most severe (real billing/subscription lifecycle) and already has a fully detailed scope from when it was originally filed; 403/404 are newly scoped from tonight's audit.
- TRA-409 (architecture test) lands alongside 1-3's fixes, not before. A red test with no fix in progress yet is just noise — this is specifically designed to prove it fails against the current, pre-fix code before anything's considered done.
Everything else TRA-402 found, lower urgency
| Ticket | What |
|---|---|
| TRA-405 | Client.PreferredTechnicianId permanently null — real API field, no write path |
| TRA-406 | Three small dead methods (ReturnPartUsage, UpdateNoteText, MarkRead) |
| TRA-407 | ClientNote — full test coverage, not even in the EF model. Worth the broader gut-check this ticket proposes: are there other tests like this? |
| TRA-410 | useTech.ts — third dead technician hook implementation, 4-month-old leftover confirmed via the case-study archive. Not yet done — flagged as a quick TRA-369 addendum but wasn't touched in that pass |
| TRA-411 | NotificationBell's SignalR wiring — built, connected to nothing, silently degraded to 60s polling |
| TRA-412 | Dead useLowStock hook + unused PageHeader.tsx component |
Two findings turned out to already be known, not new — noted on the existing tickets rather than duplicated: TechnicianRoute (TRA-139/222's real foundation, already schema-complete) and Quote/QuoteLineItem (TRA-144's own described scope, domain layer already done).
Part 3 — Technician offline work, still open
| Ticket | What |
|---|---|
| TRA-413 | RecordPartsPage.tsx has zero offline handling — same risk category as TRA-369, different page |
| TRA-414 | The interaction_required force-logout fix — decided Sunday, never implemented |
| TRA-374 | Photo offline queueing (AC08) — now has real, substantive technical scope (FormData isn't structured-cloneable, mobile storage-quota implications) rather than a vague "someday" |
Part 4 — Remaining from the original TRA-388 test-coverage batch
Not touched by tonight's CC session, still real and waiting: TRA-394 (useSyncStatus), TRA-395 (assign/reassign branch), TRA-396 (dead useInvoiceLineItems.ts), TRA-398 (registration E2E — still zero), TRA-399 (broader admin-CRUD E2E gap), plus the older TRA-364 (Tenant subscription-lifecycle tests) and TRA-365 (Playwright ROPC auth).
Part 5 — The identity/auth thread, paused mid-flow
This is where Sunday night's plan actually was before the audit cascaded into everything above:
- TRA-377 — the cleanup console tool is built and proven on
listin both environments, butcleanuphas never been run against a real candidate. Needs a fresh test email whenever that fatigue wears off. - TRA-384 + TRA-389 — the real remaining risk from the whole Entra saga, still queued, still real.
Suggested order, holding all of this together
- TRA-410 — quick, finishes what TRA-369 already started
- TRA-408 — cheap, informs how urgently the rest of Part 2 needs to move
- TRA-359 → TRA-403 → TRA-404 → TRA-409 — the real domain-integrity fix, in that order
- TRA-413, TRA-414 — small, real, quick technician-side fixes
- Part 4's remaining test batch, whenever there's a good block of time for it
- Part 5 — whenever a fresh test email stops feeling like a chore
Nothing here is a mandate — this is the map, not a commitment to walk it in exactly this order tonight.