Appearance
Lifecycle Statuses
Every meaningful entity in the Console has a status. Statuses are not free-form — each entity has a fixed set of values and a fixed set of transitions. This page is the reference.
Customer
| Status | Meaning | Reachable from |
|---|---|---|
active | Normal operating state. | suspended (via Reactivate) |
suspended | Sign-in blocked for all of the customer's users. Reason required. | active (via Suspend) |
churned | The customer has left. Data retained per policy. Reason required. | active, suspended (via Churn) |
A customer with non-deleted tenants cannot be deleted — you must delete the tenants first.
Tenant
| Status | Meaning | Reachable from |
|---|---|---|
provisioning | Being created on the target instance. | initial state |
active | Operating normally. | provisioning, suspended (via Resume) |
suspended | Paused; users cannot sign in. | active (via Suspend) |
deleting | Transient — tenant_delete job is purging Mongo data. | active, suspended (via Delete) |
deleted | Terminal. Mongo data purged; PG row retained for audit. Not reversible — use the pre-delete dump for manual recovery. | deleting (on job success) |
Tenants can be moved between customers (status unchanged) and migrated to a different instance via a migration job. Use Suspend / Resume when you need a reversible pause — Delete is terminal.
Instance
| Status | Meaning | Reachable from |
|---|---|---|
provisioning | Created in the Console but the agent has not reported in yet. | initial state |
active | Heartbeat current. | provisioning |
inactive | Heartbeat missing long enough that the Console no longer trusts state. | active |
decommissioned | Retired permanently. Cannot be undone. | any (via Decommission) |
Instance decommissioning cannot be undone and is gated by a confirmation dialog.
User
The user lifecycle applies to both internal users and customer/portal users.
| Status | Meaning |
|---|---|
invited | Invite sent; user has not completed acceptance. The invite can be re-sent. |
active | Signed in at least once and operational. |
deactivated | Access revoked. Sessions are invalidated. The user cannot sign in until reactivated. |
Release
See Releases & Deployments for the full state machine. Summary:
| Status | Meaning |
|---|---|
draft | Created; not yet deployed. |
in_progress | Flowing through the pipeline. |
paused | Awaiting approval, trigger, or manual resume. |
completed | All stages succeeded. |
failed | A stage failed terminally. |
rolled_back | At least one instance was rolled back. |
cancelled | Operator cancelled the release. |
archived | Hidden from the default view; purged after 30 days. |
Invoice
| Status | Meaning |
|---|---|
draft | Being prepared. Not yet sent. |
issued | Sent to the customer. |
paid | Fully paid. |
overdue | Past the due date and not paid. Surfaced with red styling. |
void | Cancelled; does not count toward customer totals. |
Payment
| Status | Meaning |
|---|---|
pending | Recorded but not yet processed. |
processing | In-flight with the payment provider. |
completed | Funds received and reconciled. |
failed | Processing failed. |
Discrepancy
The Discrepancies inbox surfaces tenant-level dangling data. Each finding has:
| Status | Meaning |
|---|---|
open | Detected in the current or a recent scan. Needs action. |
resolved | Operator purged the dangle (or the worker auto-purged). |
discarded | Operator dismissed from the current inbox. Not permanent — the next scan re-detects and flips back to open. Discard means "snooze until next audit cycle." |
auto_purged | The worker met strict age and inactivity criteria and purged without operator input. |
There are two kinds of discrepancy:
- Ghost — a PostgreSQL row with no MongoDB data.
- Orphan — MongoDB data with no PostgreSQL row.
Where statuses appear
- Badges on list rows and detail headers, colour-coded by severity (green = healthy, orange = warning, red = problem, grey = retired).
- Banners on detail pages when an entity is in a non-operating state.
- Filters on every list view, defaulted to the most useful subset (usually "active").

