Unclassified

Verification Checklist — Account Success & BizOps

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


Canonical Surface Boundary Checks

Validate these in addition to the functional checks below:

  • customer-facing routes and marketed views resolve to User Workbench projections
  • The native Twin (Cloudflare iw-agent-runtime) is not exposed or described as the customer-facing product shell
  • approvals, HITL queues, and controlled mutation route to governance (embedded in Operational Workbench)
  • Twin runtime surfaces use the canonical Forest + Paper system language
  • Midnight Executive does not appear in runtime or customer-shell styling

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 Spine DB 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☐