Never silently serve another account's credentials

When a credential read fails or a stored blob is unreadable, the system reports 'not connected' instead of falling back to environment credentials that belong to a different business.

What it is

The resolver tracks why it has no value. It only uses the environment fallback for the legacy default org, and only after a successful read positively confirmed that no stored credentials exist. Transient read failures are never cached, so a blip cannot pin an empty result for the full TTL.

Also called: wrong company's data · tenant isolation · shows the wrong deals

See it
Never silently serve another account's credentials
Won
35%
Avg cycle
20d
Pipeline
$531k
JanSep
Two side-by-side states of the same panel: 'Connected — location abc…' and the degraded 'Not connected' with an error toast, illustrating the deliberate choice. Sample data — no customer information appears here.
How it works
  1. 1A stored-credentials read either succeeds, fails transiently, or returns an undecryptable blob.
  2. 2readFailed and storedCredsPresent flags record which happened.
  3. 3The env fallback is allowed only when neither flag is set.
  4. 4A transient failure is not written to the cache.
Why we built it

The comment names the consequence directly: 'The env-var location is a different GHL identity than any tenant's stored location — silently serving it when a stored read merely blipped (or the blob was unreadable) shows the WRONG company's deals and makes pipeline card moves snap back, because writes land in a location the next poll doesn't read from.' A separate note records the race the lazy client fixed: a module-level client evaluated before .env.local loaded stayed null for the process's whole life, so 'a tenant saw the WRONG GHL location until the server was restarted.'

The problem
  • A transient database blip could show one tenant another tenant's CRM data.
  • Writes landing in the wrong CRM location made board moves appear to revert.
  • An import-time race left credentials permanently unresolvable for a process.
Sound familiar?
What you get
A read failure degrades to 'not connected', never to the wrong identity.
No stale negative cache after a blip.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →