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
{{ message }}
Repository navigation
feat: durable missions with typed waits and explicit side-effect reconciliation #3518
A workflow can persist a status, but long-running work still needs a durable execution boundary: wait for a typed human/external signal, restart after a process stops, and avoid repeating an uncertain external side effect.
Proposed first slice
Persist a small dependency graph of agent, signal, and external-action steps with an inspectable transition log.
Dispatch ready agent steps and expose typed signal waits through MCP tools.
Issue external action intents with stable idempotency keys and require a receipt to continue.
If an agent call or external action may have happened before a crash/timeout, block automatic replay until explicit reconciliation.
Write mission state atomically and restrict local storage permissions.
Acceptance
A focused test creates a mission, runs an agent step, waits for approval, resumes after persisted state reload, and finishes without rerunning completed steps. Timeout/crash simulations leave the uncertain step blocked. External actions need a matching key and receipt before downstream work runs. Concurrent callers cannot both claim the same pending agent step.
Limits for this slice
This is a local-file runtime, not a distributed exactly-once system. A provider's idempotency key only suppresses duplicates if that provider honors it; otherwise the operator must reconcile against the provider before retry.
Status: addressed by PR #3519 (open, unmerged — see that PR's review)
PR #3519 is GitHub's own linked closing PR for this issue and, read against this issue's "Proposed first slice" and acceptance criteria, implements all of it: a persisted step DAG with an inspectable event log, typed signal waits (including approval), idempotency-keyed action intents gated on an explicit reconciliation receipt, a crash/timeout path that becomes ambiguous rather than auto-replaying, atomic/permission-restricted on-disk state, and short exclusive locks preventing double-claiming a step — each with a matching test. However, main has since merged a different, incompatible mission_* implementation (ADR-406) under the same tool names for this same issue — see tonight's review comment on PR #3519 for the conflict. No action taken on this issue directly; it's tracked via that PR.
Activity
ruvnet commentedon Oct 2, 2026
Nightly triage — 2026-10-02
Status: addressed by PR #3519 (open, unmerged — see that PR's review)
PR #3519 is GitHub's own linked closing PR for this issue and, read against this issue's "Proposed first slice" and acceptance criteria, implements all of it: a persisted step DAG with an inspectable event log, typed signal waits (including
approval), idempotency-keyed action intents gated on an explicit reconciliation receipt, a crash/timeout path that becomesambiguousrather than auto-replaying, atomic/permission-restricted on-disk state, and short exclusive locks preventing double-claiming a step — each with a matching test. However,mainhas since merged a different, incompatiblemission_*implementation (ADR-406) under the same tool names for this same issue — see tonight's review comment on PR #3519 for the conflict. No action taken on this issue directly; it's tracked via that PR.Generated by Claude Code