Skip to content

feat: add Phase 3 durable effect execution - #326

Open
eshulman2 wants to merge 14 commits into
phase2/event-interpretationfrom
phase3/durable-effects
Open

feat: add Phase 3 durable effect execution#326
eshulman2 wants to merge 14 commits into
phase2/event-interpretationfrom
phase3/durable-effects

Conversation

@eshulman2

Copy link
Copy Markdown
Collaborator

Summary

  • add Redis and in-memory effect journals with atomic idempotent submission
  • lease due effects and recover abandoned executions after lease expiry
  • record structured success, precondition, retryable and terminal results
  • execute provider operations through a narrow registry with bounded exponential retry
  • index effect history by workflow run for inspection
  • add an idempotent Jira comment executor with provider-side recovery evidence
  • migrate resume acknowledgement comments from inline Jira calls to durable effects
  • run the effect sweeper alongside the queue worker

Stack

Correctness properties

  • intent is persisted before provider execution
  • duplicate submissions share one idempotency key and execute once
  • retries execute the effect without rerunning its originating station
  • expired execution leases are recoverable
  • terminal records cannot be replayed from a stale due-set entry
  • Jira comments are recovered by embedded effect identity after a crash between provider success and result persistence

Verification

  • uv run ruff check src/
  • uv run mypy src/forge/effects
  • uv run pytest tests/unit/ -q --strict-markers — 2,412 passed
  • uv run pytest tests/contracts tests/flows -q --strict-markers — 319 passed

@eshulman2
eshulman2 force-pushed the phase3/durable-effects branch from 9ca4ae5 to 6ca8089 Compare August 31, 2026 09:26
@eshulman2
eshulman2 marked this pull request as ready for review August 31, 2026 11:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant