{"slug":"strategy/growth/VERIFICATION_ACCOUNT_SUCCESS_AND_BIZOPS","title":"Verification Checklist — Account Success & BizOps","section":"strategy","sectionLabel":"Strategy","status":"unclassified","type":"document","path":"strategy/growth/VERIFICATION_ACCOUNT_SUCCESS_AND_BIZOPS.mdx","bytes":14377,"description":null,"updated":null,"source":"integratewise/Integratewise-docs-wiki","content":"\n> 94 checks across data flow, UI rendering, Twin triggers, identity resolution, trust layer, connector filtering, and progressive hydration.\n\n---\n\n## Canonical Surface Boundary Checks\n\nValidate these in addition to the functional checks below:\n\n- customer-facing routes and marketed views resolve to User Workbench projections\n- The native Twin (Cloudflare `iw-agent-runtime`) is not exposed or described as the customer-facing product shell\n- approvals, HITL queues, and controlled mutation route to governance (embedded in Operational Workbench)\n- Twin runtime surfaces use the canonical Forest + Paper system language\n- Midnight Executive does not appear in runtime or customer-shell styling\n\n---\n\n## 1. Data Flow (Checks 1–16)\n\n| #   | Check                                             | Flow | Expected Result                                     | Status |\n| --- | ------------------------------------------------- | ---- | --------------------------------------------------- | ------ |\n| 1   | OAuth token exchange completes                    | A    | Access token stored in encrypted vault              | ☐      |\n| 2   | Loader fetches records from source API            | A    | Raw records queued for Normalizer                   | ☐      |\n| 3   | Normalizer maps source fields to canonical schema | A    | All required fields populated                       | ☐      |\n| 4   | Resolver matches entity to existing record        | A    | Match confidence ≥ threshold or new entity created  | ☐      |\n| 5   | Router determines entity type correctly           | A    | Account/Contact/Opportunity routed to correct table | ☐      |\n| 6   | Writer persists entity to Spine                   | A    | Row exists in Spine DB with correct workspace_id    | ☐      |\n| 7   | Assembler builds Entity 360 response              | B    | All source data merged into single response         | ☐      |\n| 8   | Twin receives entity change event                 | C    | Event consumed within 500ms of write                | ☐      |\n| 9   | DLQ captures failed pipeline messages             | A    | Failed message in DLQ with stage tag                | ☐      |\n| 10  | Retry logic re-processes DLQ messages             | A    | Message re-enters pipeline at correct stage         | ☐      |\n| 11  | Rate limiting respects source API limits          | A    | No 429 errors from source APIs                      | ☐      |\n| 12  | Incremental sync fetches only changed records     | A    | Sync uses last_modified cursor                      | ☐      |\n| 13  | Full sync fetches all records                     | A    | Complete dataset loaded on first sync               | ☐      |\n| 14  | Webhook ingestion processes real-time events      | A    | Webhook payload normalized within 2s                | ☐      |\n| 15  | Multi-workspace isolation enforced                | A    | Workspace A cannot read Workspace B data            | ☐      |\n| 16  | Pipeline metrics emitted per stage                | A    | Latency, throughput, error rate per Worker          | ☐      |\n\n---\n\n## 2. UI Rendering (Checks 17–34)\n\n| #   | Check                                           | View         | Expected Result                                    | Status |\n| --- | ----------------------------------------------- | ------------ | -------------------------------------------------- | ------ |\n| 17  | CSM Hub loads account cards                     | CSM Hub      | Cards render with health, ARR, renewal date        | ☐      |\n| 18  | Morning briefing displays triggered accounts    | CSM Hub      | Top 3–5 accounts with severity badges              | ☐      |\n| 19  | Unified timeline renders events chronologically | CSM Hub      | Events from all sources in time order              | ☐      |\n| 20  | QBR prep assembles in < 15 seconds              | CSM Hub      | Full account story with metrics and talking points | ☐      |\n| 21  | Health heatmap renders all accounts             | Intelligence | Grid colored by health, sized by ARR               | ☐      |\n| 22  | Trigger feed updates in real-time               | Intelligence | New triggers appear without page refresh           | ☐      |\n| 23  | Segment comparison chart renders                | Intelligence | Enterprise / Mid-Market / SMB health trends        | ☐      |\n| 24  | NRR forecast displays correctly                 | Strategic    | Predicted NRR for 1/2/4 quarters                   | ☐      |\n| 25  | Revenue at risk table sorts by dollar value     | Strategic    | Highest ARR at risk at top                         | ☐      |\n| 26  | Founder Cockpit loads all widgets               | BizOps       | ARR, burn, runway, pipeline, team pulse            | ☐      |\n| 27  | CEO View renders revenue trajectory             | BizOps       | Revenue waterfall chart with trend line            | ☐      |\n| 28  | COO View shows operational metrics              | BizOps       | Cycle times, bottlenecks, utilization              | ☐      |\n| 29  | CIO View displays connector health              | BizOps       | Sync status, error rates, throughput               | ☐      |\n| 30  | Entity 360 profile loads in < 200ms             | Entity 360   | Profile section renders first (progressive)        | ☐      |\n| 31  | Entity 360 timeline loads async                 | Entity 360   | Timeline appears after profile without blocking    | ☐      |\n| 32  | Duplicate Resolution UI shows side-by-side      | Identity     | Two entity cards with field comparison             | ☐      |\n| 33  | Trust badges display on all data fields         | All views    | Source icon + confidence score visible             | ☐      |\n| 34  | Responsive layout works on tablet               | All views    | No horizontal scroll, readable at 768px            | ☐      |\n\n---\n\n## 3. Twin Triggers (Checks 35–50)\n\n| #   | Check                                 | Trigger Type     | Expected Result                                    | Status |\n| --- | ------------------------------------- | ---------------- | -------------------------------------------------- | ------ |\n| 35  | Usage decline trigger fires           | usage_decline    | Insight created when usage drops > 30%             | ☐      |\n| 36  | Support spike trigger fires           | support_spike    | Insight created for 3+ P1 tickets in 7 days        | ☐      |\n| 37  | Champion left trigger fires           | champion_left    | Insight created when key contact departs           | ☐      |\n| 38  | Renewal risk trigger fires            | renewal_risk     | Insight for renewal < 60 days + health < 50        | ☐      |\n| 39  | Expansion signal trigger fires        | expansion_signal | Insight for seat utilization > 85%                 | ☐      |\n| 40  | Onboarding stall trigger fires        | onboarding_stall | Insight for no milestone in 30 days                | ☐      |\n| 41  | Billing anomaly trigger fires         | billing_anomaly  | Insight for failed payment or downgrade            | ☐      |\n| 42  | Engagement drop trigger fires         | engagement_drop  | Insight for zero logins in 14 days                 | ☐      |\n| 43  | Trigger does not write to Spine       | All              | twin_insights table only, no Spine mutation        | ☐      |\n| 44  | Trigger includes evidence chain       | All              | Evidence field references source data points       | ☐      |\n| 45  | Trigger severity is correct           | All              | Critical/High/Medium/Low matches rules             | ☐      |\n| 46  | Duplicate triggers suppressed         | All              | Same trigger for same entity within 24h ignored    | ☐      |\n| 47  | Trigger routes to correct view        | All              | CSM Hub for individual, Intelligence for portfolio | ☐      |\n| 48  | Custom trigger evaluates correctly    | custom           | User-defined condition produces insight            | ☐      |\n| 49  | Trigger latency < 500ms               | All              | Time from entity write to insight creation         | ☐      |\n| 50  | Trigger disabled/enabled toggle works | All              | Disabled trigger does not fire                     | ☐      |\n\n---\n\n## 4. Identity Resolution (Checks 51–62)\n\n| #   | Check                                   | Expected Result                                    | Status |\n| --- | --------------------------------------- | -------------------------------------------------- | ------ |\n| 51  | Email-based deterministic match         | Same email across systems resolves to one entity   | ☐      |\n| 52  | Domain-based deterministic match        | Same domain resolves account entities              | ☐      |\n| 53  | External ID match (SF ID ↔ Zendesk org) | Cross-system IDs resolve correctly                 | ☐      |\n| 54  | Probabilistic name match                | \"Acme Corp\" and \"Acme Corporation\" resolve         | ☐      |\n| 55  | Low-confidence match goes to HITL queue | Confidence 0.5–0.8 surfaces for review             | ☐      |\n| 56  | HITL approval merges entities           | Approved match creates unified entity              | ☐      |\n| 57  | HITL rejection keeps entities separate  | Rejected match adds to exclusion list              | ☐      |\n| 58  | Merge undo restores original entities   | Undo within 72 hours fully reverses merge          | ☐      |\n| 59  | Confidence score visible in Entity 360  | Match confidence shown in trust metadata           | ☐      |\n| 60  | No false merges on common names         | \"John Smith\" at different companies stays separate | ☐      |\n| 61  | Batch resolution processes backlog      | Queued matches processed within SLA                | ☐      |\n| 62  | Resolution metrics tracked              | Match rate, HITL volume, false positive rate       | ☐      |\n\n---\n\n## 5. Trust Layer (Checks 63–72)\n\n| #   | Check                                     | Expected Result                               | Status |\n| --- | ----------------------------------------- | --------------------------------------------- | ------ |\n| 63  | Source attribution on every field         | Origin system and sync timestamp present      | ☐      |\n| 64  | Confidence score calculated correctly     | Score reflects source reliability × recency   | ☐      |\n| 65  | Conflict resolution: latest-wins          | Most recent value wins when configured        | ☐      |\n| 66  | Conflict resolution: highest-confidence   | Highest confidence value wins when configured | ☐      |\n| 67  | Conflict resolution: manual               | Conflict surfaces for human decision          | ☐      |\n| 68  | Audit trail records all changes           | Before/after values with timestamp and actor  | ☐      |\n| 69  | Govern approval blocks destructive action | Merge/delete blocked until approved           | ☐      |\n| 70  | Govern approval chain completes           | Multi-step approval resolves correctly        | ☐      |\n| 71  | Govern rejection cancels action           | Rejected action does not execute              | ☐      |\n| 72  | Trust metadata in Entity 360 response     | Sources array and lastSync in API response    | ☐      |\n\n---\n\n## 6. Connector Filtering & Progressive Hydration (Checks 73–84)\n\n| #   | Check                                  | Expected Result                                 | Status |\n| --- | -------------------------------------- | ----------------------------------------------- | ------ |\n| 73  | Connector filter by category works     | CRM / Support / Billing filters correctly       | ☐      |\n| 74  | Connector filter by status works       | Active / Paused / Error filters correctly       | ☐      |\n| 75  | Connector search by name works         | Typing \"Sales\" shows Salesforce, SalesLoft      | ☐      |\n| 76  | Connector detail shows sync history    | Last 10 syncs with status and record count      | ☐      |\n| 77  | Connector pause/resume works           | Paused connector stops syncing, resume restarts | ☐      |\n| 78  | Connector error state displays         | Failed connector shows error message and retry  | ☐      |\n| 79  | Progressive hydration: profile first   | Entity 360 profile renders in < 200ms           | ☐      |\n| 80  | Progressive hydration: timeline async  | Timeline loads without blocking profile         | ☐      |\n| 81  | Progressive hydration: insights async  | Insights load without blocking profile          | ☐      |\n| 82  | Progressive hydration: skeleton states | Loading skeletons shown for async sections      | ☐      |\n| 83  | Progressive hydration: error fallback  | Failed section shows retry button, not crash    | ☐      |\n| 84  | Progressive hydration: cache hit       | Cached Entity 360 serves in < 50ms              | ☐      |\n\n---\n\n## 7. Cross-Cutting (Checks 85–94)\n\n| #   | Check                                  | Expected Result                                     | Status |\n| --- | -------------------------------------- | --------------------------------------------------- | ------ |\n| 85  | RLS enforces workspace isolation       | Query with wrong workspace_id returns 0 rows        | ☐      |\n| 86  | Auth token refresh works               | Expired token auto-refreshes without user action    | ☐      |\n| 87  | Rate limiting on API endpoints         | 429 returned after threshold exceeded               | ☐      |\n| 88  | CORS configured correctly              | Only allowed origins can call API                   | ☐      |\n| 89  | Error responses follow standard format | `{ error: string, code: string, details?: object }` | ☐      |\n| 90  | Pagination works on list endpoints     | Cursor-based pagination returns correct pages       | ☐      |\n| 91  | Webhook signature validation           | Invalid signatures rejected with 401                | ☐      |\n| 92  | Health endpoints respond               | All 21 Workers return 200 on /health                | ☐      |\n| 93  | Logging structured and searchable      | JSON logs with request_id, workspace_id, stage      | ☐      |\n| 94  | Feature flags gate unreleased features | Disabled flag hides feature from UI and API         | ☐      |\n"}