sched: gate scheduled resumes on the shared execution slot, with drain tracking (B2)
This commit is contained in:
@@ -191,8 +191,11 @@ await schedules.update_schedule(
|
||||
- One composition's stores nested inside another live composition's
|
||||
store subtree (without sharing its identical roots) is unsupported
|
||||
operator error; shared-store cross layouts are rejected outright.
|
||||
- Manual runs and resumes bypass scheduler capacity by design;
|
||||
capacity governs scheduled dispatch only.
|
||||
- Manual runs bypass scheduler capacity by design; capacity governs
|
||||
scheduled dispatch plus scheduled resumes. Resuming a scheduled
|
||||
interrupted run acquires a server execution slot first (rejected
|
||||
while saturated, without dispatching) and releases it when the
|
||||
resumed result is persisted.
|
||||
- A set `max_steps` budget cannot be cleared back to unset through
|
||||
update (recreate the schedule for an unbounded budget).
|
||||
- MCP-backed servers reject scheduler enablement for now.
|
||||
|
||||
@@ -337,11 +337,16 @@ all mutating admin ops clear the old revision's unadmitted work and
|
||||
advance the watermark BEFORE the revision bump or flag flip lands, so a
|
||||
crash can only leave the op unapplied (retryable), never a new revision
|
||||
that backfills. Occurrence pages carry the stored history plus a live
|
||||
held-candidate `pending` synthesis on the first page. Manual runs and
|
||||
resumes bypass scheduler capacity by design (unchanged API behavior);
|
||||
scheduler capacity governs scheduled dispatch only, and a scheduled
|
||||
interrupted run resumed manually reconciles its terminal history through
|
||||
recovery.
|
||||
held-candidate `pending` synthesis on the first page. Manual runs bypass
|
||||
scheduler capacity by design (unchanged API behavior); capacity governs
|
||||
scheduled dispatch plus scheduled resumes. A scheduled interrupted run
|
||||
resumed through the run API acquires a server execution slot through the
|
||||
scheduler's own accounting before dispatch — rejection leaves no resume
|
||||
attempt behind — holds the durable executing mark for the re-execution
|
||||
(visible to capacity and drain like any live execution), and releases
|
||||
the slot when its stopped result is persisted. A resumed scheduled run
|
||||
reconciles its terminal history live through the same idempotent
|
||||
recording as dispatch; restart recovery still repairs torn boundaries.
|
||||
|
||||
Known limitations: pointing one composition's stores inside another live
|
||||
composition's store subtree (without sharing its identical roots) is
|
||||
|
||||
Reference in New Issue
Block a user