Skip to content

feat: durable missions with typed waits and explicit side-effect reconciliation #3518

Open

Description

@rudycelekli

Capability gap

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.

Activity

  1. ruvnet commented on Oct 2, 2026

    @ruvnet
    Owner

    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 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.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions