You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Wait states are gated at the validator (the rlm.watch.* host handlers
arrive with the communication series #2351/#2356), so the executor's wait
registration/timeout/settle/cancel paths and their tests are removed
entirely; quiescence, re-entry, and fan-out are unchanged. Review fixes:
a max_transitions pause mid-settle now records the transition index and a
resume continues after it (previously the settle re-fired already-fired
transitions, duplicating spawned work); eq/ne guards compare JSON-strictly
(a bool never equals a number, numbers compare numerically); contains
requires a non-empty list value at validation and is defensively false at
runtime; the max_transitions pause fires its own max_transitions_exceeded
milestone kind (no collision with the run-budget budget_exceeded, both
notice-able); the control-loop stall reports the pending entry whose input
source never settled, with a test; EVENT_WINDOW grows 50 -> 200 (the
pr-manager happy path is ~43 events before any retry); refinement
validateEdit accepts machine-form swarm edits (either dag or machine
object, never both). Also adds optional inputs: an input flagged optional
binds a null sentinel instead of waiting when its source state never
settled, which lets loop states (review with the previous fix report) run
their first round before the fixer exists; compiled dags never emit it.
- Added the swarm DAG executor: `rlm.swarm.run/status/stop/resume`validates a stored swarm, spawns ready nodes without holding the model turn open, resumes through collect polls, binds typed outputs into dependent prompts, enforces per-node and run budgets, retries failures, applies fail_fast/continue/escalate policies, cascades cancellation, and wakes the parent once per milestone.
1
+
- Added the state-machine swarm executor: `rlm.swarm.run/status/stop/resume`canonicalizes the stored swarm (dag sugar compiles to machine form), enters entry states, and drives the machine to quiescence — every settle evaluates its guarded transitions (fan-out legal, max_entries blocking recorded as transition_blocked, re-entry re-binds inputs), with bounded re-entry, per-entry foreach/budgets/retries, fail_fast/continue/escalate policies, cancellation cascades, and one quiet notice per milestone (finished/failed/paused/budget_exceeded/max_transitions_exceeded). `status()` reports per-state entries_used/max_entries and a transitions_fired usage count over a 200-event window. Wait states stay specified but gated: the watch host handlers (`rlm.watch.*`) arrive with the communication series, so the validator rejects wait blocks until then.
0 commit comments