ClientVerse Troubleshooting Guide¶
This guide is for the people who keep a ClientVerse org running: the CRM administrator, the support team fielding "it's broken" tickets, and the implementation consultant during and after a deployment. It is organized by symptom โ jump to what the user is seeing and work back to the cause.
Audience-first. Users learning a feature start with the User Guide; people configuring the product use the Admin Guide and Configuration Reference (this guide points back to them). Troubleshooting assumes the product is installed and you are diagnosing a failure.
Default assumption: your org has Core only. Sections requiring the optional Modules add-on (Dispatch, Whitespace) carry a ๐งฉ badge. Without Modules, those objects, apps, and tabs won't exist โ a "missing object" there is expected, not a bug.
All package facts here (object/app names, permission sets, versions, counts) are cited from
the synced _package-facts/, never from memory.
1. How to use this guide¶
Every entry uses the same three-line shape โ Symptom (what's observed) โ Likely cause (the most common root cause; start here) โ Resolution (the step, or a pointer to the guide that owns the fix). Work top-down within a section; earlier entries are the more common causes. When an entry points at another guide, that guide owns the procedure โ this one only tells you which knob to look at.
Gather diagnostics first¶
Before escalating, collect these. Most ClientVerse issues are diagnosable from them.
Clientverse_Log__cโ the Core logging object. ClientVerse writes operational and error log rows here (and ๐งฉ Dispatch extends it withAction__c/Run_Item__clookups so digest activity is visible in the same place โ seedispatch.yaml). Filter by created date and by the feature you're chasing; the most recent error rows usually name the failing component. Confirm the support user has read access to it (see Permission problems).- Salesforce debug logs โ for an Apex / flow / batch failure, add a trace flag on the
running user (the Automated Process user for scheduled jobs, the integration user for
syncs) in Setup โ Debug Logs, reproduce, and read the stack. ClientVerse Core ships 17
triggers and 288 Apex classes and Modules adds 74 more (see
clientverse-core-1.1.7.json,clientverse-modules-0.4.0.json) โ the debug log tells you which one threw. - Setup Audit Trail โ for "it worked yesterday" problems, check who changed a permission set, validation rule, or scheduled job recently.
- Package versions โ from Setup โ Installed Packages, record the installed ClientVerse Core and ClientVerse Modules versions. Many issues below turn on the exact version (especially the Core โ Modules compatibility gate in Install & upgrade).
When you open a ticket or escalation, attach the relevant Clientverse_Log__c rows, the
debug log, and the two package versions. See Escalation.
2. Install & upgrade issues¶
ClientVerse Core is an unlocked package (namespace clientverse); ClientVerse Modules
is a managed package on top of Core. Install/upgrade problems almost always come down to
order and version compatibility. The full procedure lives in the
Implementation Guide; this section is for diagnosing a failed or
blocked install, not the happy path.
Modules 0.4.0 requires Core 1.1.7 โ installing on an older Core fails the dependency check¶
- Symptom: installing ClientVerse Modules 0.4.0 into an org running Core older than 1.1.7 fails with a missing-dependency / required-package-version error, naming a ClientVerse Core version the org doesn't have.
- Likely cause: Modules 0.4.0 declares a dependency on
ClientVerse Core Unlocked@1.1.7-6(package version id04tfj000000TYCnAAO). An org below that baseline is missing the required Core version, so the platform blocks the Modules install until Core is upgraded. Seeclientverse-modules-0.4.0.json(thedepends_onblock) andsync-report.md. - Resolution: upgrade Core to 1.1.7 first, then install Modules 0.4.0. This is the single most common Modules install blocker. Do not attempt to force the install past the dependency check.
This catches orgs that were previously fine. Modules 0.3.0 required only Core 1.1.4, so an org happily running 0.3.0 on Core 1.1.4, 1.1.5 or 1.1.6 is below the 0.4.0 floor. A working Modules org is not evidence that it is ready to upgrade Modules โ check the installed Core version explicitly.
Package installed in the wrong order (Modules before Core)¶
- Symptom: Modules install fails immediately, or installs but its objects/Apex reference Core objects that "don't exist."
- Likely cause: Modules is a managed add-on on top of Core. Core must be present (and at the required version, above) before Modules.
- Resolution: install Core first, Modules second. If Modules was somehow installed first and is in a broken state, uninstall it, confirm Core is at the required version, and reinstall Modules.
Install fails on a dependency or component conflict¶
- Symptom: the package install job fails partway with a component or dependency error (e.g. a metadata component already exists, or a referenced object is missing).
- Likely cause: a prior partial install, a hand-modified component colliding with the packaged one, or an org that doesn't meet a feature prerequisite.
- Resolution: read the install failure detail (it names the component), resolve the named collision, and retry. Always install into a sandbox first and promote โ never debug a failed install directly in production. The Implementation and Deployment docs own the sandbox-first procedure.
"I can't find the clientverse objects/fields after install" (namespace confusion)¶
- Symptom: after install, admins look for objects like
Accountextensions or custom objects and either can't find them or see API names prefixed unexpectedly. - Likely cause: namespace confusion. Both packages use the namespace
clientverse(see the two package JSONs). Core is unlocked, so in many orgs its components appear without a managed namespace prefix on the API name; Modules is managed. Admins searching for the wrong prefix conclude the component is missing. - Resolution: confirm the component is really absent before treating it as a bug. Search
Object Manager by label as well as API name, and cross-check the object list in
clientverse-core-1.1.7.json(148 Core objects) andclientverse-modules-0.4.0.json(21 Modules objects). If the object is on the Modules list and the org has Core only, it is correctly absent.
Upgrade ran but new fields/objects aren't visible to users¶
- Symptom: the package upgrade succeeded, but users still don't see new fields, tabs, or objects.
- Likely cause: new components ship without field-level security or tab visibility for existing users โ those are granted by permission sets, which an upgrade does not re-assign.
- Resolution: after any upgrade, re-check permission-set assignments against the new release. See Permission problems and the Admin Guide.
3. Permission problems¶
Almost every "I can't see X" in ClientVerse is a permission-set or permission-set-group assignment problem, not a data problem. Core ships 24 permission sets and 6 permission-set groups; Modules adds 3 permission sets (see the package JSONs). The Admin Guide owns the full access model and the permission-set โ app map; this section is the fast symptom lookup. The recurring trap throughout: object access and field-level security are granted by permission set, not profile โ so what one user sees, another (or an integration user) may not.
"I can't see the app" (app launcher is missing a ClientVerse app)¶
- Symptom: a user can't find
CV_BD,CV_Lawyer,CV_Marketing,CV_Intelligence,CV_Experience, orCV_Adminin the App Launcher (Core ships 6 apps), or ๐งฉCV_Dispatch_Setup(the one Modules app). - Likely cause: the user lacks the permission set / permission-set group that grants the app, or (for the Modules app) the org doesn't have Modules.
- Resolution: assign the appropriate permission-set group from the Admin Guide's access
map. Confirm the app name against
clientverse-core-1.1.7.json/clientverse-modules-0.4.0.jsonbefore concluding it's missing.
"I can't see a tab"¶
- Symptom: an object's tab is absent from an app's navigation for one user.
- Likely cause: tab visibility is granted by permission set; the user is missing it, or has it set to hidden on their profile and no permission set overrides it.
- Resolution: grant the permission set that exposes the tab. Core defines 52 tabs, Modules 9 โ if the tab is a Modules tab and the org is Core-only, it is correctly absent.
"I can't see an object / I get 'insufficient privileges'"¶
- Symptom: opening a record or list view returns insufficient privileges, or the object doesn't appear in Object Manager for that user.
- Likely cause: object-level CRUD is missing. ClientVerse grants object access through
data-access permission sets (e.g.
CV_Relationship_Data_Access,CV_Financial_Data_Access) rather than profiles. - Resolution: assign the data-access permission set that covers the object. For merge
operations specifically, the user needs
CV_Merge_Records; for bulk import,CV_Data_Import_Full_Access(see Data & import).
"I can see the record but a field is blank / read-only / missing"¶
- Symptom: a field the user expects is not on the page, is greyed out, or is empty even though data exists.
- Likely cause: field-level security (FLS) is permission-set-granted in ClientVerse.
A user (or an integration user) without the granting permission set sees the field as
hidden or read-only โ even if another user can see it. This is a known trap: don't assume
a field is accessible to one user just because another user has it (see
../../GOTCHAS.md). - Resolution: grant the permission set that includes that field's FLS. For integration/import failures caused by this, both the importing user and the integration user need their permission sets โ see Integration issues.
"They can see the records but not the buttons" โ Schema Access without User¶
- Symptom: after 1.1.7, a user can open an object's records and see its fields, but the ClientVerse components, buttons or actions in that area do nothing or aren't rendered.
- Likely cause: they hold only the area's
*_Schema_Accessset. That tier grants object, field, record-type and tab visibility and deliberately grants no Apex or LWC access โ it exists so reporting and integration users can see data without holding code access. - Resolution: assign the matching
*_Userset alongside it (e.g.CV_BD_Userin addition toCV_BD_Schema_Access), and confirmCV_Base_Accessis assigned. This is the most common new access ticket after the 1.1.7 restructure โ see Admin Guide ยง4.1.
A permission-set group seems to grant nothing¶
- Symptom: assigning a permission-set group doesn't give the expected access.
- Likely cause: the user was assigned a different group than intended, or the group's muting/permission-set membership differs from expectation.
- Resolution: verify against the 8 permission-set groups listed in
clientverse-core-1.1.7.jsonand the Admin Guide's mapping. Confirm the user holds the intended group (for executives, the canonical group isCV_Executive).CV_Admin_TeamandCV_Lawyer_Teamare new in 1.1.7 โ an org upgraded from 1.1.6 will not have anyone assigned to them yet.
4. Data & import issues¶
Import and data-entry failures in ClientVerse usually trace to a required field, a record type, a validation rule, or duplicate handling. The Migrations docs own bulk-load procedure and the Data Model / Data Dictionary owns field-level requirements โ cite those for specifics; the entries here are for diagnosing the failure.
Import rejects rows for a missing required field¶
- Symptom: a load (Data Loader, import wizard, integration) fails rows with a required field missing error.
- Likely cause: a required field โ or a required-on-record-type field โ isn't in the load file or is blank.
- Resolution: check the object's required fields in the
Data Dictionary and add them to the mapping. For administrative system
fields like
Production_ID__c, follow the migration mapping rather than inventing values.
"Records load but land with the wrong layout / picklists are wrong" (record type)¶
- Symptom: imported records open on an unexpected page layout, or picklist values the user expects are missing.
- Likely cause: record type wasn't set on import (Core defines 34 record types โ
see
clientverse-core-1.1.7.json), so records fell to the default record type, or the importing user's profile/permission set doesn't have the intended record type assigned. - Resolution: map the
RecordTypeId(or developer name) explicitly in the load, and confirm the importing user has access to that record type.
Import fails on a validation rule¶
- Symptom: rows are rejected with a custom error message from a validation rule.
- Likely cause: the data legitimately violates a rule, or a rule that should be bypassed for migration is firing on the load.
- Resolution: read the error โ it's the validation rule's own message. Fix the data, or,
for a controlled bulk migration, follow the migration runbook's guidance on a migration
context (e.g. the
CV_Data_Migrationpermission set and any documented bypass). Don't disable validation rules ad hoc in production.
Duplicate records / merge not behaving¶
- Symptom: imports create duplicates, or a user can't merge two records.
- Likely cause: duplicate rules / matching didn't catch the inbound records, or the user lacks merge permission.
- Resolution: for merge access, assign
CV_Merge_Records. There is also anOverride_Auto_Generated_Namepermission set for cases where the auto-named record needs a manual name on merge/create โ seeclientverse-core-1.1.7.jsonand the Admin Guide. For the matching logic itself, see the Data Model and Migrations docs.
Rollup numbers look wrong after a load¶
- Symptom: summary/rollup fields don't match the underlying records after a bulk import.
- Likely cause: rollups recalculate on DML; a bulk load may have bypassed them or they haven't finished.
- Resolution: an admin with
CV_Rollups_Admincan trigger/recalculate rollups. See the Admin Guide for the rollup administration procedure.
5. Integration issues¶
ClientVerse integrates with external PMS (3E, Aderant), ERM (Introhive, SigParser), and MAP
(Pardot / MCAE) systems, plus HR/AD, Vuture, and web forms. The
Integrations docs are the source of truth โ start at
00_Integration_Architecture.md. This
section covers the failures that surface in ClientVerse.
A sync stops bringing in records (PMS / ERM / MAP)¶
- Symptom: financial data, relationship/activity data, or marketing engagement stops updating; records go stale.
- Likely cause: the integration user's credentials expired, the scheduled sync job failed, or upstream the external system stopped sending.
- Resolution: check
Clientverse_Log__cfor sync error rows and the scheduled-job status, then the relevant per-system spec (PMS, ERM, MAP).
Sync runs but specific fields never populate¶
- Symptom: records sync, but certain fields stay empty even though the source has them.
- Likely cause: the integration user lacks field-level security on those fields.
This is the canonical trap โ FLS is permission-set-granted, so a field visible to a human
admin can still be invisible to the integration user (see
../../GOTCHAS.md). - Resolution: assign the integration user the permission set(s) that grant FLS on the affected fields. Both the importing user and the integration user need their permission sets.
Marketing send / engagement data out of sync (MAP)¶
- Symptom: Pardot / MCAE sends or engagement scores don't reflect in ClientVerse, or vice versa.
- Likely cause: the MAP connector sync is paused, mapping is misconfigured, or a
send is going through the external MAP path (relevant to ๐งฉ Dispatch's
Use_External_MAP__coption below). - Resolution: see
Integration_Marketing_Pardot_MCAE.md. If the affected sends originate from Dispatch with external MAP enabled, also see Dispatch issues.
6. ๐งฉ Dispatch issues¶
๐งฉ ClientVerse Modules โ Dispatch Requires the ClientVerse Modules package. Clients on Core only won't see this.
Dispatch is the data-driven notification/digest engine: an admin defines a
Dispatch_Definition__c (audience, content query, schedule, channel); a scheduled
Dispatch_Run__c evaluates it, creates one Dispatch_Run_Item__c per recipient, renders,
and delivers. Object/field meaning is in
dispatch.yaml; configuration procedure is in the
Configuration Reference and Admin Guide.
Digests aren't sending at all¶
- Symptom: a scheduled digest never goes out; no
Dispatch_Run__crecords appear at the expected time. - Likely cause (start here): the definition is inactive โ
Dispatch_Definition__c.Active__cis false, so the scheduler skips it. - Resolution: confirm
Active__cis checked on theDispatch_Definition__c. Then verify the schedule fields:Frequency__c,Run_Times__c, and for weekly/monthly cadenceDay_of_Week__c/Day_of_Month__c, plusTimezone__c(the schedule is evaluated in that timezone โ a wrong timezone makes a digest look "missed"). Seedispatch.yaml.
A run executed but nothing was delivered¶
- Symptom: a
Dispatch_Run__cexists butItems_Sent__cis 0 (or much lower than expected) and there are failures. - Likely cause: delivery failed โ read the run's roll-up counters and error text.
- Resolution: open the
Dispatch_Run__cand readRecords_Evaluated__c,Items_Created__c,Items_Sent__c,Items_Failed__c, and especiallyError_Summary__c(the aggregated error detail for the run). Drill into individualDispatch_Run_Item__crows for per-recipientStatus__c. Cross-referenceClientverse_Log__cfor the same window.
Items are skipped¶
- Symptom: fewer recipients got the digest than expected; some run items show as skipped.
- Likely cause: per-item suppression โ the
Dispatch_Run_Item__c.Skip_Reason__cfield records why (e.g. unsubscribed, no email, throttled, empty content). - Resolution: read
Skip_Reason__con the skippedDispatch_Run_Item__crows. Common causes: the subscriber opted out (Dispatch_Subscription__c.Unsubscribed_Date__cset orIs_Active__cfalse), the recipient has no deliverable address, or a section was empty and suppressed byDispatch_Section__c.Hide_If_Empty__c.
Sending stops mid-run โ daily contact-email limit hit¶
- Symptom: a run starts delivering, then the remaining items are skipped/deferred with a throttle-related skip reason; recurs at roughly the same volume each day.
- Likely cause: the daily contact-email limit guardrail.
Dispatch_Settings__cholds org-level throttling counters (and the last reset date) that cap how many contact emails Dispatch sends per day; once the counter is exhausted, further sends are held. - Resolution: check
Dispatch_Settings__cfor the current daily counter and reset date (seedispatch.yaml). If you are legitimately hitting the cap, stagger schedules across days or raise the limit per the Admin Guide โ and remember Salesforce's own org-wide single-day email limits sit underneath this guardrail.
Replies aren't routing back into Salesforce¶
- Symptom: recipients reply to a digest but the replies never appear in ClientVerse.
- Likely cause: reply routing isn't enabled or addressed correctly on the definition.
- Resolution: confirm
Dispatch_Definition__c.Enable_Reply_Routing__cis on and thatReply_To__c(andFrom_Address__c/From_Name__c) are set to addresses the routing flow can receive. Reply routing depends on the inbound flow being active โ check it ran in the debug log and that the inbound address is configured. Seedispatch.yaml.
Per-recipient content is wrong or empty¶
- Symptom: the digest body is missing sections or shows the wrong rows for a recipient.
- Likely cause: section visibility / context configuration โ
Dispatch_Section__c.Visibility_Rule__c, the data-table source (Dispatch_DataTable_Config__c), or the definition'sContext_Mode__c(per-recipient vs shared context). - Resolution: verify the section's
Visibility_Rule__candHide_If_Empty__c, the data table'sData_Source_Type__c/SOQL_Template__c, and the definition'sContext_Mode__c. The Configuration Reference owns digest authoring.
7. ๐งฉ Whitespace issues¶
๐งฉ ClientVerse Modules โ Whitespace Requires the ClientVerse Modules package. Clients on Core only won't see this.
Whitespace scores account/practice-area coverage gaps via a batch and surfaces the top
opportunities as WhiteSpace_Opportunity__c records (and an optional digest). Scoring is
driven by custom metadata: Whitespace_Scoring_Config__mdt, Whitespace_Score_Weight__mdt,
and Whitespace_Threshold__mdt. Cite
whitespace.yaml for meaning.
No opportunities are generated¶
- Symptom: the Whitespace dashboard/digest is empty; no
WhiteSpace_Opportunity__crecords are being created. - Likely cause (start here): scoring is disabled โ
Whitespace_Scoring_Config__mdt.Active__cis false, so the batch doesn't run. - Resolution: confirm
Active__conWhitespace_Scoring_Config__mdt. Then verify the batch actually executed (check the scheduled/Apex batch job status andClientverse_Log__c) and thatBatch_Size__cand the candidate population are sane. If the batch ran but produced nothing, the thresholds may be excluding everything โ see the next entry.
Scores look wrong or rank unexpectedly¶
- Symptom: opportunities appear, but the scores or ordering don't match expectations โ high-value gaps rank low, or everything clusters at one value.
- Likely cause: scoring weights or thresholds are misconfigured. The composite
Opportunity_Score__cis the weighted sum of the component scores (Score_Client_Tier__c,Score_Peer_Coverage__c,Score_Relationship_Strength__c,Score_Revenue_Potential__c), each capped by aWhitespace_Score_Weight__mdtrow; andCoverage_Status__cis driven byWhitespace_Threshold__mdthour thresholds. - Resolution: review the per-factor
Whitespace_Score_Weight__mdtrows (Factor_Name__c,Max_Points__c,Active__cโ a deactivated factor drops out of the composite) and theWhitespace_Threshold__mdtrows (Active_Hours_Threshold__c,Partial_Hours_Threshold__cper practice). After changing weights/thresholds, re-run scoring so existing records re-compute. Seewhitespace.yamland the Configuration Reference.
Opportunities generate but the digest doesn't send¶
- Symptom:
WhiteSpace_Opportunity__crecords exist, but no opportunity digest email goes out. - Likely cause: the digest is disabled or scheduled for a different time โ
Whitespace_Scoring_Config__mdt.Send_Digest__c,Digest_Day_Of_Week__c,Digest_Hour__c. - Resolution: confirm
Send_Digest__cis on and the day/hour are correct, and thatTop_Opportunity_Count__cis greater than zero. Seewhitespace.yaml.
8. Known issues & limitations¶
These are current, expected constraints โ not bugs to chase. They come from the synced
package facts; see the Flags in
sync-report.md.
Modules 0.4.0 requires Core 1.1.7¶
- What: Modules 0.4.0 declares a dependency on
ClientVerse Core Unlocked@1.1.7-6. An org on any earlier Core cannot install Modules 0.4.0 until Core is upgraded. The floor moved up from 1.1.4 in this release. - Impact: plan a Core upgrade before any Modules rollout on an org below 1.1.7 โ including orgs already running Modules 0.3.0 successfully. Full detail in Install & upgrade.
"Where is AI Chat / the Power BI component?" โ shipped in 0.4.0, off by default¶
- Symptom: someone with Modules 0.4.0 looks for the CV AI Chat tab or a Power BI / Tableau component and can't find it. Or the reverse: someone was told AI "isn't available" and wants to know when it lands.
- What: both AI and Analytics ship in Modules 0.4.0. This changed in this
release โ through 0.3.0,
analyticswas genuinely absent andaiwas configuration metadata only, and older documentation says so. They are now present but gated: nothing is visible to any user until the permission set is assigned. - Resolution: assign the relevant permission set โ
CV_AI_Chat_Userfor the chat,CV_BI_Visualizationfor BI embedding (both requireCV_Modules_Accessfirst). If the org is on Modules 0.3.0 or earlier, the components genuinely are absent and a Modules upgrade is required โ which also means a Core upgrade to 1.1.7 first. - Before enabling AI, note two things: queries run in
USER_MODEso record access is enforced, but CRM data is sent to Anthropic or OpenAI, and prompt-injection hardening is incomplete. That is a firm-policy decision, not a support action โ route it to whoever owns the firm's AI position rather than assigning the set on request. See the Admin Guide ยง14.
Low metadata annotation coverage¶
- What: object descriptions are now largely in place (Core 92%, Modules 90%), but most
fields still ship without a description or inline help (Core 36% of fields described,
Modules 11%; inline help 4% on both โ see
sync-report.md). Users won't find on-field help text for most fields. - Resolution: this is expected and tracked for backfill. Point users at the
Data Dictionary and the annotation catalogs
(
objects/*.yaml) for field meaning rather than relying on in-app help.
9. Escalation / where to get help¶
Resolve what you can with the diagnostics in ยง1, then escalate with that evidence attached.
- Confirm it's not configuration. Re-check the relevant section above โ permission-set
assignment, an
Active__cflag, a schedule field, or a thresholds/weights value resolves the large majority of tickets without code involvement. - Gather the diagnostic bundle.
Clientverse_Log__crows for the window, the Salesforce debug log for the failing user/job, the Setup Audit Trail entry if something changed, and both installed package versions (Core and Modules). See ยง1. - Route by area:
- Access / data / day-to-day admin โ the Admin Guide.
- Configuration of a feature (Dispatch digests, Whitespace scoring) โ the Configuration Reference.
- Install / upgrade / environment โ the Implementation Guide and Deployment docs.
- External sync failures โ the relevant Integration spec.
- A confirmed package defect โ escalate to the product/engineering owner with the
diagnostic bundle and the exact Core/Modules versions from
_package-facts/. - Stay customer-neutral and NDA-safe. When filing an escalation outside the firm, keep
customer names and firm-specific data out of the ticket per the documentation
conventions (
../_conventions.md).
Unresolved facts¶
- Dispatch reply-routing inbound setup. The exact inbound-email/flow configuration that
backs
Enable_Reply_Routing__cis described at the field level only; the operational setup procedure should be cross-linked once the Configuration Reference documents it. - Daily contact-email limit value.
Dispatch_Settings__cenforces a daily contact-email cap, but the default/configured limit value and how to change it are owned by the Admin Guide and not fixed in the package facts.