Dara Docs
ReferenceOperations

Reconciliation runbook

Reconciliation compares the financial ledger, the chain and the backing in one consistent read: one RPC node and one closed ledger per run (recorded on the run). It runs every RECONCILE_EVERY (10 minutes in production) and on demand (Admin → Reconciliation → Run now; roles PLATFORM_ADMIN, AUDITOR, RECONCILIATION_OPERATOR). A failing check opens an incident; nothing is corrected automatically. A check is SKIPPED_IN_FLIGHT when an intent touching the same balances is between submission and a closed ledger; the next run decides.

Checks

CheckComparesUsual causesAction
ledger_transactions_balancedEvery ledger transaction sums to zeroA bug or a manual database editStop manual postings; engineering
ledger_projection_matches_entriesBalance projections = sum of entriesSameSame
ledger_restricted_non_negativeNo restricted account below zeroSameSame
balance_matches_ledger:COLD/HOT/CUSTOMER:<account>Each account's on-chain trustline balance = its ledger position (available + held/reserved)A movement outside the platform (also an indexer incident); an intent applied whose handler did not run (CHAIN_OPERATION_UNRESOLVED)Find the movement in Dara Scan; follow its incident
trustline_states_matchAuthorization on-chain = what the platform believes (frozen customers revoked, others authorized)A revoke/authorize applied outside the platform, or a failed authorization changeRe-apply through the console (freeze / unfreeze), investigate who changed it
onchain_supply_matches_ledgerSum of all holdings on-chain = ledger supply (+ in-flight)Issuance or burn outside the platform; clawback without intentKey-compromise playbook (INCIDENT_RESPONSE.md)
ledger_supply_within_unexpired_backingLedger supply ≤ effective backing (attestations count 35 days)Attestation expired; backing reducedNew approved reserve snapshot, or burn
ledger_supply_equals_holdersLedger supply = customers + HOT + COLD positionsA posting bugEngineering
indexer_currentThe indexer is within MaxIndexerLag ledgers of the run's ledger (WARNING)Worker or node problemsSTELLAR_RPC_RUNBOOK.md; it clears by itself once the indexer catches up
indexed_supply_matches_holdingsSupply by indexed movements (issued − burned − clawed back) = every holding the indexer has seenA gap in indexing, or movements before the indexer start ledgerCheck INDEXER_GAP; the start ledger must precede the ceremony
no_supply_outside_known_trustlinesNothing held outside trustlines of accounts the platform createdUnknown holder, claimable balance, pool, contract balanceFollow the matching indexer incident
issuer_configurationThe issuer's signers, thresholds and flags = the ceremony layoutAn unapproved SetOptions on the issuerKey-compromise playbook

After a fix

Run reconciliation manually. Resolve the incident only when the run passes, with a note naming the cause.

On this page