Skip to content

Persist filesystem WAL writer-epoch fencing across host restarts #714

Description

@flyingrobots

Defect

FilesystemWalStore::open reconstructs no writer-epoch state. External-action hosts therefore reacquire a static epoch with fixed fencing, process, host, and lease identities and no previous-epoch linkage on every process invocation. The store validates only in-memory epoch state, so durable request/claim/settlement processes do not prove fresh fencing or a persisted epoch chain.

Observed by flyingrobots/hello-echo#24. Blocks flyingrobots/hello-echo#11.

Acceptance

  • Persist writer-epoch acquisition and closure evidence in the filesystem WAL contract.
  • Recover the latest closed or active epoch and final commit evidence on open.
  • Provide a public host path that derives a fresh epoch, monotonic start LSN, new fencing and lease evidence, and exact previous-epoch linkage.
  • Refuse stale, duplicate, overlapping, or chain-gap acquisitions before append.
  • Exercise request, claim, settlement, recovery, and replay across separate processes.
  • Preserve the generic external-action protocol and application-neutral production vocabulary.

Hello Echo must consume the public contract rather than reconstructing epoch state.

Activity

  1. added
    type:bugMethod work type bug.
    bad-codeKnown code smell or defect filed for later
    roadmap-a1Roadmap A.1: bounded Hello external effects
    on Jul 30, 2026
  2. coderabbitai commented on Jul 30, 2026

    @coderabbitai
    Contributor
    🔗 Related PRs

    #598 - feat(warp-core): add filesystem WAL failure atomicity [merged]
    #670 - Add trusted causal anchor admission [merged]
    #683 - Execute admitted data-only operations in Echo [merged]
    #688 - Route executable-operation Actions through scheduler-owned Ticks [merged]
    #704 - Add durable external-action settlement protocol [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

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

    bad-codeKnown code smell or defect filed for laterlegend:testMethod legend test.priority:highMethod priority high.roadmap-a1Roadmap A.1: bounded Hello external effectsruntimeRuntime corespecSpec/Design documenttoolingTooling/CI/CLItype:bugMethod work type bug.

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions