Draft owed milestone summaries across every project (every 10 minutes)
const url = 'https://example.com/api/cron/milestone-summaries';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/milestone-summariesHO-15533. Picks milestones whose summary_stale_at is older than 60 s, not done or dropped, not merged, not a failure younger than 30 minutes and not under a live draft lease, oldest stamp first, at most 5 per project and 40 per run, and runs the same summary refresh as the on-read scheduler, 3 at a time. Each refresh takes the row’s draft lease (summary_draft_claimed_at, 2 minutes) before any model call, so another machine, an overlapping run or a board read never pays twice for one draft. No refresh starts after 30 s; the run stops after 5 consecutive model failures. ok is false only when the pick read fails. Protected by CRON_SECRET via the x-cron-secret header. Scheduled by the milestone-summaries stage of the embedding-drain schedule in .slipstream.json.
Responses
Section titled “ Responses ”Run result
object
Missing or invalid CRON_SECRET