Persist authored action idempotency across restarts and workers #202

Merged
timmy merged 1 commits from timmy/201-durable-idempotency into main 2026-08-07 14:38:07 +00:00
Owner

Closes #201

What changed

  • atomically reserve mutation keys in a bounded SQLite ledger shared by workers
  • replay confirmed issue creations, comments, replies, and reviews after process reconstruction
  • reject changed payloads and fail closed for orphaned pending mutations
  • expire/evict completed entries with an indexed timestamp and document persistent state configuration

Verification

  • RED: restart replay tests initially duplicated upstream issue/comment mutations
  • GREEN: python3 -m pytest tests/ -q → 304 passed
  • independent SQLite connections prove one reservation; orphaned pending mutation makes zero upstream calls
Closes #201 ## What changed - atomically reserve mutation keys in a bounded SQLite ledger shared by workers - replay confirmed issue creations, comments, replies, and reviews after process reconstruction - reject changed payloads and fail closed for orphaned pending mutations - expire/evict completed entries with an indexed timestamp and document persistent state configuration ## Verification - RED: restart replay tests initially duplicated upstream issue/comment mutations - GREEN: `python3 -m pytest tests/ -q` → 304 passed - independent SQLite connections prove one reservation; orphaned pending mutation makes zero upstream calls
timmy added 1 commit 2026-08-07 14:37:28 +00:00
feat: persist authored action idempotency (#201)
All checks were successful
CI / lint (pull_request) Successful in 16s
CI / build-frontend (pull_request) Successful in 4s
a5f63a6fa6
timmy merged commit 09b2898d1c into main 2026-08-07 14:38:07 +00:00
Sign in to join this conversation.
No reviewers
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-dashboard#202
No description provided.