Unclassified

Verification Checklist — Account Success & BizOps

94 checks across data flow, UI rendering, Twin triggers, identity resolution, trust layer, connector filtering, and progressive hydration.


1. Data Flow (Checks 1–16)

#CheckFlowExpected ResultStatus
1OAuth token exchange completesAAccess token stored in encrypted vault☐
2Loader fetches records from source APIARaw records queued for Normalizer☐
3Normalizer maps source fields to canonical schemaAAll required fields populated☐
4Resolver matches entity to existing recordAMatch confidence ≥ threshold or new entity created☐
5Router determines entity type correctlyAAccount/Contact/Opportunity routed to correct table☐
6Writer persists entity to SpineARow exists in Supabase with correct workspace_id☐
7Assembler builds Entity 360 responseBAll source data merged into single response☐
8Twin receives entity change eventCEvent consumed within 500ms of write☐
9DLQ captures failed pipeline messagesAFailed message in DLQ with stage tag☐
10Retry logic re-processes DLQ messagesAMessage re-enters pipeline at correct stage☐
11Rate limiting respects source API limitsANo 429 errors from source APIs☐
12Incremental sync fetches only changed recordsASync uses last_modified cursor☐
13Full sync fetches all recordsAComplete dataset loaded on first sync☐
14Webhook ingestion processes real-time eventsAWebhook payload normalized within 2s☐
15Multi-workspace isolation enforcedAWorkspace A cannot read Workspace B data☐
16Pipeline metrics emitted per stageALatency, throughput, error rate per Worker☐

2. UI Rendering (Checks 17–34)

#CheckViewExpected ResultStatus
17CSM Hub loads account cardsCSM HubCards render with health, ARR, renewal date☐
18Morning briefing displays triggered accountsCSM HubTop 3–5 accounts with severity badges☐
19Unified timeline renders events chronologicallyCSM HubEvents from all sources in time order☐
20QBR prep assembles in < 15 secondsCSM HubFull account story with metrics and talking points☐
21Health heatmap renders all accountsIntelligenceGrid colored by health, sized by ARR☐
22Trigger feed updates in real-timeIntelligenceNew triggers appear without page refresh☐
23Segment comparison chart rendersIntelligenceEnterprise / Mid-Market / SMB health trends☐
24NRR forecast displays correctlyStrategicPredicted NRR for 1/2/4 quarters☐
25Revenue at risk table sorts by dollar valueStrategicHighest ARR at risk at top☐
26Founder Cockpit loads all widgetsBizOpsARR, burn, runway, pipeline, team pulse☐
27CEO View renders revenue trajectoryBizOpsRevenue waterfall chart with trend line☐
28COO View shows operational metricsBizOpsCycle times, bottlenecks, utilization☐
29CIO View displays connector healthBizOpsSync status, error rates, throughput☐
30Entity 360 profile loads in < 200msEntity 360Profile section renders first (progressive)☐
31Entity 360 timeline loads asyncEntity 360Timeline appears after profile without blocking☐
32Duplicate Resolution UI shows side-by-sideIdentityTwo entity cards with field comparison☐
33Trust badges display on all data fieldsAll viewsSource icon + confidence score visible☐
34Responsive layout works on tabletAll viewsNo horizontal scroll, readable at 768px☐

3. Twin Triggers (Checks 35–50)

#CheckTrigger TypeExpected ResultStatus
35Usage decline trigger firesusage_declineInsight created when usage drops > 30%☐
36Support spike trigger firessupport_spikeInsight created for 3+ P1 tickets in 7 days☐
37Champion left trigger fireschampion_leftInsight created when key contact departs☐
38Renewal risk trigger firesrenewal_riskInsight for renewal < 60 days + health < 50☐
39Expansion signal trigger firesexpansion_signalInsight for seat utilization > 85%☐
40Onboarding stall trigger firesonboarding_stallInsight for no milestone in 30 days☐
41Billing anomaly trigger firesbilling_anomalyInsight for failed payment or downgrade☐
42Engagement drop trigger firesengagement_dropInsight for zero logins in 14 days☐
43Trigger does not write to SpineAlltwin_insights table only, no Spine mutation☐
44Trigger includes evidence chainAllEvidence field references source data points☐
45Trigger severity is correctAllCritical/High/Medium/Low matches rules☐
46Duplicate triggers suppressedAllSame trigger for same entity within 24h ignored☐
47Trigger routes to correct viewAllCSM Hub for individual, Intelligence for portfolio☐
48Custom trigger evaluates correctlycustomUser-defined condition produces insight☐
49Trigger latency < 500msAllTime from entity write to insight creation☐
50Trigger disabled/enabled toggle worksAllDisabled trigger does not fire☐

4. Identity Resolution (Checks 51–62)

#CheckExpected ResultStatus
51Email-based deterministic matchSame email across systems resolves to one entity☐
52Domain-based deterministic matchSame domain resolves account entities☐
53External ID match (SF ID ↔ Zendesk org)Cross-system IDs resolve correctly☐
54Probabilistic name match"Acme Corp" and "Acme Corporation" resolve☐
55Low-confidence match goes to HITL queueConfidence 0.5–0.8 surfaces for review☐
56HITL approval merges entitiesApproved match creates unified entity☐
57HITL rejection keeps entities separateRejected match adds to exclusion list☐
58Merge undo restores original entitiesUndo within 72 hours fully reverses merge☐
59Confidence score visible in Entity 360Match confidence shown in trust metadata☐
60No false merges on common names"John Smith" at different companies stays separate☐
61Batch resolution processes backlogQueued matches processed within SLA☐
62Resolution metrics trackedMatch rate, HITL volume, false positive rate☐

5. Trust Layer (Checks 63–72)

#CheckExpected ResultStatus
63Source attribution on every fieldOrigin system and sync timestamp present☐
64Confidence score calculated correctlyScore reflects source reliability × recency☐
65Conflict resolution: latest-winsMost recent value wins when configured☐
66Conflict resolution: highest-confidenceHighest confidence value wins when configured☐
67Conflict resolution: manualConflict surfaces for human decision☐
68Audit trail records all changesBefore/after values with timestamp and actor☐
69Govern approval blocks destructive actionMerge/delete blocked until approved☐
70Govern approval chain completesMulti-step approval resolves correctly☐
71Govern rejection cancels actionRejected action does not execute☐
72Trust metadata in Entity 360 responseSources array and lastSync in API response☐

6. Connector Filtering & Progressive Hydration (Checks 73–84)

#CheckExpected ResultStatus
73Connector filter by category worksCRM / Support / Billing filters correctly☐
74Connector filter by status worksActive / Paused / Error filters correctly☐
75Connector search by name worksTyping "Sales" shows Salesforce, SalesLoft☐
76Connector detail shows sync historyLast 10 syncs with status and record count☐
77Connector pause/resume worksPaused connector stops syncing, resume restarts☐
78Connector error state displaysFailed connector shows error message and retry☐
79Progressive hydration: profile firstEntity 360 profile renders in < 200ms☐
80Progressive hydration: timeline asyncTimeline loads without blocking profile☐
81Progressive hydration: insights asyncInsights load without blocking profile☐
82Progressive hydration: skeleton statesLoading skeletons shown for async sections☐
83Progressive hydration: error fallbackFailed section shows retry button, not crash☐
84Progressive hydration: cache hitCached Entity 360 serves in < 50ms☐

7. Cross-Cutting (Checks 85–94)

#CheckExpected ResultStatus
85RLS enforces workspace isolationQuery with wrong workspace_id returns 0 rows☐
86Auth token refresh worksExpired token auto-refreshes without user action☐
87Rate limiting on API endpoints429 returned after threshold exceeded☐
88CORS configured correctlyOnly allowed origins can call API☐
89Error responses follow standard format{ error: string, code: string, details?: object }☐
90Pagination works on list endpointsCursor-based pagination returns correct pages☐
91Webhook signature validationInvalid signatures rejected with 401☐
92Health endpoints respondAll 21 Workers return 200 on /health☐
93Logging structured and searchableJSON logs with request_id, workspace_id, stage☐
94Feature flags gate unreleased featuresDisabled flag hides feature from UI and API☐