/60-v2 — Data Wiring Audit & Plan
Verdict: the standalone /60-v2 page is architecturally wired correctly. Every data surface calls the right tool through the browser-safe path (/api/realtime-tool → mcp_call_tool → toolResult, authed by the user's Supabase session). The reason it looks empty is environment, not wiring: /60-v2 is deployed on staging, whose Supabase has £0 pipeline and QA-synthetic test meetings for this user. Production holds the real data (404 open deals, £1.06M, real analysed calls) — verified: every tool returns full data on prod.
So the #1 action is: get /60-v2 onto production, where the real CRM lives. Then close the handful of genuine wiring gaps below.
1. Surface-by-surface audit
| Surface | Page calls | Path | Wired? | Prod data | Staging data |
|---|---|---|---|---|---|
| Chat answer | t2.ask / askViaStream → /api/chat |
Session JWT | ✅ | ✅ real | ✅ (sparse) |
| Morning brief | loadBrief → search_meetings + pipeline_summary + list_tasks |
realtime-tool | ✅ | ✅ | empty (£0) |
| Judgement deck | loadBrief deck (tasks + pipeline-risk + commitments) |
realtime-tool | ✅ | ✅ (from 404 deals) | empty |
| Meeting canvas | loadMeeting → search_meetings + intelligence + transcript |
realtime-tool | ✅ | ✅ real transcript | QA-synthetic |
| Ops table | loadTable → pipeline_summary / search_records / list_tasks |
realtime-tool | ✅ | ✅ (record-level via #91) | sparse |
| Approvals | sixty_run_write_workflow |
realtime-tool | ✅ built, ⚠️ unverified on prod | needs a real write test | — |
| Pipeline card | pipeline_summary | realtime-tool | ✅ | ✅ | £0 |
Genuine gaps (not data-env):
- Voice — mic shows a "voice is in the /60 app" toast; the real
/api/realtime-sessionWebRTC isn't wired into the standalone page. - Status pill — static
60 · V3instead of a live gateway/healthcheck. - History / credits — route-to-app / static ring instead of the prototype's in-page popovers.
- Approval round-trip — built (mint → replay) but not yet exercised against a real prod write (safest: a task-create).
2. The plan
Phase 1 — Get /60-v2 to production (unblocks ALL real data)
The page + route + scoped styles are additive and legacy /60 is untouched, so this is low-risk for the existing app. Two options:
- A. Promote staging → main (PR #2402 lineage): carries every stream + /60-v2 commit. Broadest, but also rides the accumulated staging backlog (other teams' #2427/#2428, migrations, edge fns) — needs the migration/CI checks green first (the cron-category + dedupe fixes already landed; re-verify).
- B. Cherry-pick the /60-v2 + stream commits onto a clean
feat/60-v2-prodbranch off main → PR → merge. Surgical, ships only our work to prod, avoids the backlog. Recommended for speed + safety. The prod gateway already has all fixes (brain 98/96, record tools, voice-context, toolResult passthrough) — verified deployed. So once the app route is on prod,app.use60.com/60-v2renders real data immediately.
Phase 2 — Close the wiring gaps
- Voice — wire
useVoiceCallStarter/voiceCallStore+ the realtime driver intoSixty60V2Page's voice bar (reuse the plumbing from #2422; the standalone page needs its own hook-up). Speak-the-headline is server-side (gatewayspokenSummary) — already improved by voice-context (#90). - Status pill — poll gateway
/health, show live tool count / connected state. - History + credits — port the prototype's in-page popovers (history from the conversation store, credits from the billing/credits endpoint).
Phase 3 — Verify every archetype on prod with real data
Drive each surface on app.use60.com/60-v2 (or a prod-session headless run) and confirm real rendering: brief + deck populated from 404 deals, meeting canvas with a real transcript, ops table with real deal rows, a real approval round-trip (task-create — never an external send), analytics/chart. Fix any mapper drift found (e.g. the JSON-leak class of bug, already fixed for meetings — audit the rest).
Phase 4 — Rollout
/60-v2URL for the team (prod) → gather feedback.- Wire the org feature flag so V3 can become the default
/60per-org, then globally — retiring the separate URL. - Nightly eval SLO already guards the brain; add a light
/60-v2smoke to the canary.
3. Execution order
- Phase 1B — cherry-pick /60-v2 to prod → real data live (fastest win).
- Phase 3 — verify archetypes on prod, fix any mapper drift.
- Phase 2 — voice, status pill, history/credits (parallelisable).
- Phase 4 — rollout + make-default.
North star: app.use60.com/60-v2 shows Andrew's real pipeline, real meetings, real deck, working voice — pixel-matched to the prototype — then it becomes the default /60.
Prepared 7 Jul 2026 · Fable · audit verified live against prod + staging gateways.