Context
reconciliationReport.ts exposes an on-demand drift report comparing Horizon ledger records to persisted DB state (Issue #724).
Problem / Gap
Reconciliation is manual-only. Drift (MISSING_IN_DB, AMOUNT_MISMATCH, etc.) is not detected proactively, so indexer gaps can go unnoticed until user-facing data is wrong.
Proposed approach
- Register a scheduled job (via
jobGovernance.ts) that runs reconciliation over a rolling window.
- Emit structured logs and Prometheus counters when
status === 'DRIFT_DETECTED'.
- Optionally open a webhook or alert hook when drift exceeds configurable thresholds.
- Store the last successful reconciliation summary for the diagnostics bundle.
Acceptance criteria
Files/areas affected
backend/src/reconciliationReport.ts
backend/src/positionReconciliationJob.ts
backend/src/jobGovernance.ts
backend/src/metrics.ts
Context
reconciliationReport.tsexposes an on-demand drift report comparing Horizon ledger records to persisted DB state (Issue #724).Problem / Gap
Reconciliation is manual-only. Drift (
MISSING_IN_DB,AMOUNT_MISMATCH, etc.) is not detected proactively, so indexer gaps can go unnoticed until user-facing data is wrong.Proposed approach
jobGovernance.ts) that runs reconciliation over a rolling window.status === 'DRIFT_DETECTED'.Acceptance criteria
/metricsor job metrics endpoint.Files/areas affected
backend/src/reconciliationReport.tsbackend/src/positionReconciliationJob.tsbackend/src/jobGovernance.tsbackend/src/metrics.ts