Rates Engine v0.5.0-rc.84
Pre-release
Pre-release
·
484 commits
to main
since this release
[v0.5.0-rc.84] — 2026-05-28
Tested against Stellar Protocol 23 (Whisk).
Added
ratesengine-ops resume-stalledsubcommand. Resumes every stalled backfill cursor with a remaining range in a single invocation, replacing the hand-rolled SQL+shell loop operators had been using to chase down the F-0020 cascade-residue gap. The subcommand readsingestion_cursors, filters tosource LIKE 'backfill%'rows whoselast_updatedis older than--min-lag(default 1 h) AND whoselast_ledgeris strictly less than the parsedtofromsub_source(<from>-<to>:<decoders>), then for each plan invokes the samerunBackfillChunkpath the regularbackfillsubcommand uses, with-resumesemantics. Flags:--min-lag,--max-resumes(safety cap),--source-filter(substring match against decoder CSV — e.g.defindexto target one source),--bucket,--parallel,--refresh-caggs,--dry-run. Per-cursor failures are logged and the loop continues; exit non-zero only when at least one cursor errored. Live dry-run on r1 found 167 candidate cursors, 50 actionable (cursors with remaining work) and 117 skipped (stale-by-time only — at-target, never vacuumed); the 50 actionable plans are the dominant population of the 1-2% per-source density gap. Two test files pin the parser (parseStalledCursor— 10 cases covering well-formed multi/single-decoder, at-target skip, inconsistent-cursor skip, garbage sub_source, overflow, CSV sort) and the filter chain (planResumeStalledsemantics — source-prefix → min-lag → source-filter → max-resumes precedence). Sequencing: cursors run serially in this first cut; concurrent operator invocations against disjoint--source-filtervalues are the parallel-across-cursors path. Aligns with the post-F-0020 operational posture documented indocs/operations/backfill-with-live-ingest.md.