60 · Audit · Fable plan

/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-toolmcp_call_tooltoolResult, 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):


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:

Phase 2 — Close the wiring gaps

  1. Voice — wire useVoiceCallStarter/voiceCallStore + the realtime driver into Sixty60V2Page's voice bar (reuse the plumbing from #2422; the standalone page needs its own hook-up). Speak-the-headline is server-side (gateway spokenSummary) — already improved by voice-context (#90).
  2. Status pill — poll gateway /health, show live tool count / connected state.
  3. 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


3. Execution order

  1. Phase 1B — cherry-pick /60-v2 to prod → real data live (fastest win).
  2. Phase 3 — verify archetypes on prod, fix any mapper drift.
  3. Phase 2 — voice, status pill, history/credits (parallelisable).
  4. 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.