Lanes
One lane at a time — the goal, the critical path, and the current wave of blockers.
Web — Public destination viewer
CORRECTED 2026-08-05 against the code — the original goal was flatly false and is preserved at the end for provenance. CURRENT STATE: apps/web/app/t/[hash]/route.ts dispatches ALL 14 canonical destination types. Coverage is mechanically gated in CI by check (b) of tests/unit/destination-type-parity.test.ts, which derives the type set from the Postgres enum on disk and fails if any type lacks a branch. The misleading contact-card fallback is gone: the contact path is guarded by `if (destType === "contact")` and the terminal branch returns unsupportedDestinationHtml() with a 404 for any unrecognized type. Nobody should re-implement a viewer. WHAT REMAINED, and its status after the feature/web session (2026-08-05): · DONE — deleted ~109 lines of unreachable code: handleVideoDestination and handleAudioDestination were shadowed by the 302 redirects to /v/[hash] and /a/[hash] that fire earlier in the dispatch, so neither function nor its orphan branch could ever run. · DONE — fixed a silent environment bug: every apps/web viewer route reads NEXT_PUBLIC_API_ORIGIN, but staging config set NEXT_PUBLIC_API_URL (apps/web-mobile's name) in THREE places — wrangler.jsonc, .env.staging.example and package.json's dev:staging. Nothing read it, so the STAGING viewer silently served PRODUCTION data. All three renamed. · DONE — wifi/bluetooth brought to iOS viewer parity per Matthew's 2026-08-05 call: per-credential copy buttons, password/PIN masked behind a reveal toggle (copy works while masked), monospaced values. Matches apps/ios .../Viewers/WifiViewer.swift + BluetoothViewer.swift. · HANDED TO BACKEND — https://staging.tactile.to is missing from STATIC_ALLOWED_ORIGINS in apps/api/tactile-api/src/utils/cors.ts, so the form's submit preflight gets a 403 from staging. Tracked as t_a615a44c in wave w_bbbef29e. · STILL OPEN — a real form submission has never been proven to store a row. Split out as t_557d52d9 (blocked on t_a615a44c). It is the only acceptance criterion in this wave never verified by anything but `tsc --noEmit`. VERIFIED-FALSE ORIGINAL GOAL (kept so nobody re-derives it): "app/t/[hash]/route.ts handles only 5 of 14 types. A customer scanning a live website, gallery, payment, video, audio, wifi, bluetooth, form, or link-hub tag hits a contact-card fallback that reads as 'this card link is no longer active.' The product silently fails for 9 of 14 types." — false as of commit b184285f.
Prove a form submit end-to-end against a live API
The only acceptance criterion in this wave never verified by anything but tsc --noEmit. Blocked on the API CORS allowlist entry (t_a615a44c).
No dependencies in this wave — nothing gates it, and nothing waits on it.