Merge backstop sweep (POST)
const url = 'https://example.com/api/cron/merge-backstop?dry_run=1&catch_up=1';const options = {method: 'POST'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url 'https://example.com/api/cron/merge-backstop?dry_run=1&catch_up=1'Scheduled hourly as the merge-backstop stage of the Slipstream hourly-sweeps
schedule (scripts/cron-merge-backstop.sh, which pages on nextCursor). The
pg_cron block in supabase/migrations/20260901000003_merge_backstop_hourly.sql is a
lockstep no-op (extension not installed). Same parameters as GET.
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Classify and report without writing any merge-close.
Widen the pass (200 tickets, 30 pushes per project, 7-day PR lookback) for a backlog drain.
Keyset cursor — only tickets with updated_at strictly before this timestamp; take it from a previous response’s nextCursor.
Responses
Section titled “ Responses ”Backstop run result
object
True when the ticket sweep stopped before every candidate was seen (full page or deadline).
Pass back as before to continue paging; null when nothing remains.
RepairMergedRolesWhereMergedAtSet counters.
object
SweepUnmergedTickets counters; null when that sweep threw.
SweepRecentGithubPrs counters; null when that sweep threw.
Missing or invalid CRON_SECRET