[Feature] Deliver external calendar mutations through a durable idempotent outbox #17

Closed
opened 2026-07-20 14:42:13 +02:00 by zemion · 3 comments
Owner

Goal

Make local Calendar state authoritative and deliver mutations to external calendar systems through a durable, retryable, idempotent outbox with reconciliation rather than making remote network success part of an API transaction.

Acceptance Criteria

  • Local desired-state changes and their outbox intents commit atomically.
  • Stable idempotency keys and supersession/coalescing prevent duplicate obsolete delivery.
  • Workers use bounded claims/leases, exponential retry with jitter, and safe recovery after crashes.
  • CalDAV writes/deletes use conditional ETags where available and preserve remote identifiers/provenance.
  • Conflicts and permanent failures remain explicit, reviewable desired state; reconciliation can resume without blind overwrite.
  • Pull synchronization and outbound delivery do not echo or lose concurrent changes.
  • Tenant/source authorization, disabled/read-only sources, credential failures, and remote deletion are handled explicitly.
  • Worker/runtime health exposes pending, retrying, conflict, dead, and oldest-age signals without leaking event content.
  • Tests cover duplicate dispatch, crash recovery, retries, supersession, conflicts, reconciliation, tenant isolation, and provider unavailability.

Current State

Integrated on remote main; the complete Calendar suite passes.

## Goal Make local Calendar state authoritative and deliver mutations to external calendar systems through a durable, retryable, idempotent outbox with reconciliation rather than making remote network success part of an API transaction. ## Acceptance Criteria - [ ] Local desired-state changes and their outbox intents commit atomically. - [ ] Stable idempotency keys and supersession/coalescing prevent duplicate obsolete delivery. - [ ] Workers use bounded claims/leases, exponential retry with jitter, and safe recovery after crashes. - [ ] CalDAV writes/deletes use conditional ETags where available and preserve remote identifiers/provenance. - [ ] Conflicts and permanent failures remain explicit, reviewable desired state; reconciliation can resume without blind overwrite. - [ ] Pull synchronization and outbound delivery do not echo or lose concurrent changes. - [ ] Tenant/source authorization, disabled/read-only sources, credential failures, and remote deletion are handled explicitly. - [ ] Worker/runtime health exposes pending, retrying, conflict, dead, and oldest-age signals without leaking event content. - [ ] Tests cover duplicate dispatch, crash recovery, retries, supersession, conflicts, reconciliation, tenant isolation, and provider unavailability. ## Current State Integrated on remote `main`; the complete Calendar suite passes.
Author
Owner

Codex State: in progress

The durable idempotent outbox, worker/capability boundary, migrations, retry/backoff, ETag conflict handling, ambiguous-success reconciliation, administrative operations, and scheduling integration are implemented in the shared local worktrees but not committed or present on remote main.

Verification on 2026-07-20: Calendar 75/75 tests passed; focused Core worker/config tests passed; Scheduling integration tests passed in the preceding implementation pass; Ruff and diff checks pass. Keep open until the cross-repository slice is isolated and integrated.

## Codex State: in progress The durable idempotent outbox, worker/capability boundary, migrations, retry/backoff, ETag conflict handling, ambiguous-success reconciliation, administrative operations, and scheduling integration are implemented in the shared local worktrees but not committed or present on remote `main`. Verification on 2026-07-20: Calendar 75/75 tests passed; focused Core worker/config tests passed; Scheduling integration tests passed in the preceding implementation pass; Ruff and diff checks pass. Keep open until the cross-repository slice is isolated and integrated.
Author
Owner

Codex State: progress

Summary

  • Durable, idempotent CalDAV outbox, leases, retry/backoff, conflict/dead state, reconciliation, admin operations, worker recovery, and safe bulk copy/detach are implemented and partitioned into local commits.

Changed Files

  • govoplan-core 15596f0
  • govoplan-calendar a6cd64e
  • govoplan-calendar 2ad6e9d
  • govoplan 8b80afb

Verification

  • Calendar backend: 84 passed
  • Core Calendar outbox worker: 2 passed
  • Ruff and diff checks passed

Next / Blocked

  • Review and push the local commits; keep the issue open until they are present on remote main.

Suggested status label: status/in-progress

## Codex State: progress ### Summary - Durable, idempotent CalDAV outbox, leases, retry/backoff, conflict/dead state, reconciliation, admin operations, worker recovery, and safe bulk copy/detach are implemented and partitioned into local commits. ### Changed Files - `govoplan-core 15596f0` - `govoplan-calendar a6cd64e` - `govoplan-calendar 2ad6e9d` - `govoplan 8b80afb` ### Verification - `Calendar backend: 84 passed` - `Core Calendar outbox worker: 2 passed` - `Ruff and diff checks passed` ### Next / Blocked - Review and push the local commits; keep the issue open until they are present on remote main. Suggested status label: `status/in-progress`
Author
Owner

Codex State: done

Summary

  • Durable idempotent Calendar outbox, bounded leases, retries, supersession, reconciliation, conflict handling, observability, and tenant/source controls are integrated on remote main.

Verification

  • Calendar suite: 102 passed.
## Codex State: done ### Summary - Durable idempotent Calendar outbox, bounded leases, retries, supersession, reconciliation, conflict handling, observability, and tenant/source controls are integrated on remote main. ### Verification - `Calendar suite: 102 passed.`
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-calendar#17
No description provided.