Skip to content

Between-turn dev sessions crash after snapshot GC despite parked-turn retention #714

Description

@Volpestyle

Eve version

0.22.4

Where

Local dev (eve dev --no-ui) with the bundled local Workflow world.

Problem

A normal interactive session that has completed a turn and is waiting for the next user message can retain a disk BundleKey that points at an immutable .eve/dev-runtime/snapshots/<revision>/.../compiled-agent-manifest.json. After enough later dev snapshots are published and the old revision falls outside the 5-snapshot / 15-minute retention window, restarting Eve and sending the next ordinary user turn fails before model execution:

FatalError: Step "step//eve@0.22.4//turnStep" failed after 3 retries:
ENOENT: no such file or directory, open
.../.eve/dev-runtime/snapshots/<old-revision>/source/.../.eve/compile/compiled-agent-manifest.json

The durable session cursor is valid and the root session remains in the local workflow store, but its compiled runtime artifact is gone.

Relationship to #172

#172 covered a turn parked inside HITL and was fixed in 0.12.3 by preserving snapshots referenced by active durable workflow data. This is the between-turn variant: the child turn is terminal, while the root interactive session is still waiting for its next message. The current text-based workflow-data snapshot scanner does not discover the retained BundleKey in this local-world storage shape (the payload is serialized inside Uint8Array/base64 workflow data), so pruning still removes the revision.

Reproduction

  1. Start eve dev --no-ui.
  2. Create an interactive session and let turn 1 reach session.waiting normally.
  3. Preserve its sessionId and continuationToken.
  4. Publish enough later snapshots, or age the session and restart enough times, that the turn-1 snapshot is older than both the recent window and retain count.
  5. Restart eve dev and send turn 2 with the preserved continuation token.
  6. Observe LoadCompiledManifestError / ENOENT on the deleted revision.

Expected

A root interactive session waiting between turns keeps every runtime artifact required for its next durable continuation, or resumes against a compatible current artifact without duplicating the accepted message. Snapshot pruning must understand the local world's serialized workflow-data representation rather than relying only on raw path text.

Workaround validated downstream

Building once and running eve start serializes bundled artifacts instead of a dev snapshot path. A two-turn black-box test survived a process restart on the same session with exact-once replay and no ENOENT.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions