[Task] Adopt Core recovery ledger for module-owned external and multi-resource effects #36

Closed
opened 2026-08-01 01:49:31 +02:00 by zemion · 5 comments
Owner

Objective

Apply the new Core recovery operation/checkpoint contract to consequential module operations instead of treating the shared primitive as automatic coverage. Parent: #13.

Acceptance criteria

  • Inventory operations spanning a database transaction, object storage, queue, filesystem, or external provider and classify each as atomic, compensation, snapshot restore, forward recovery, or irreversible.
  • Create owning-module child issues and prioritize Campaign delivery/build/retention, Files upload/deletion/integrity actions, Mail outbox/IMAP effects, connector sync, Dataflow/Workflow execution, and module lifecycle.
  • Record idempotency keys and canonical request hashes before side effects.
  • Record durable precondition/recovery evidence before entering running state and bind a fencing token where work may race across nodes.
  • Prevent partial or outcome-unknown effects from being reported as ordinary failure or blindly retried.
  • Require verified checks for success/recovery and expose unresolved operations through Ops.
  • Add module-permutation, crash-boundary, stale-fence, tampered-evidence, and retry tests plus user/admin documentation.

Current baseline

Core provides the schema, state machine, hash-chained checkpoints, secret rejection, idempotency conflict handling, and optional lease-fence binding. Campaign's shared artifact path has direct compensation and verification tests but is not yet recorded through the generic ledger.

## Objective Apply the new Core recovery operation/checkpoint contract to consequential module operations instead of treating the shared primitive as automatic coverage. Parent: #13. ## Acceptance criteria - [ ] Inventory operations spanning a database transaction, object storage, queue, filesystem, or external provider and classify each as atomic, compensation, snapshot restore, forward recovery, or irreversible. - [ ] Create owning-module child issues and prioritize Campaign delivery/build/retention, Files upload/deletion/integrity actions, Mail outbox/IMAP effects, connector sync, Dataflow/Workflow execution, and module lifecycle. - [ ] Record idempotency keys and canonical request hashes before side effects. - [ ] Record durable precondition/recovery evidence before entering running state and bind a fencing token where work may race across nodes. - [ ] Prevent partial or outcome-unknown effects from being reported as ordinary failure or blindly retried. - [ ] Require verified checks for success/recovery and expose unresolved operations through Ops. - [ ] Add module-permutation, crash-boundary, stale-fence, tampered-evidence, and retry tests plus user/admin documentation. ## Current baseline Core provides the schema, state machine, hash-chained checkpoints, secret rejection, idempotency conflict handling, and optional lease-fence binding. Campaign's shared artifact path has direct compensation and verification tests but is not yet recorded through the generic ledger.
Author
Owner

Codex State: progress

Summary

  • The institutional vertical now persists Cases and Committee aggregates transactionally and verifies their migrations and reconstruction path; no synthetic recovery success is claimed.

Verification

  • tools/checks/check-focused.sh: all focused backend suites and the SQL-backed institutional journey passed.

Next / Blocked

  • Keep this issue open for module-owned external or multi-resource effects that must adopt the Core recovery ledger and prove compensation/reconciliation behavior.

Suggested status label: status/in-progress

## Codex State: progress ### Summary - The institutional vertical now persists Cases and Committee aggregates transactionally and verifies their migrations and reconstruction path; no synthetic recovery success is claimed. ### Verification - `tools/checks/check-focused.sh: all focused backend suites and the SQL-backed institutional journey passed.` ### Next / Blocked - Keep this issue open for module-owned external or multi-resource effects that must adopt the Core recovery ledger and prove compensation/reconciliation behavior. Suggested status label: `status/in-progress`
Author
Owner

Codex State: progress

The first adoption slice is pushed.

  • Added a machine-checked cross-module operation inventory and recovery-mode classification in govoplan@9370f50.
  • Opened owning-module work items for Campaign, Files, Mail, Connectors, Dataflow, Workflow Engine, and Core lifecycle effects.
  • Added Core's committed, lease-fenced durable operation boundary with idempotent successful replay, explicit stale-fence takeover, hash-chain verification, compensation, and unresolved-state handling in govoplan-core@bca6a7c.
  • Adopted it for Campaign build publication in govoplan-campaign@dd09b06: request/precondition evidence commits before object writes, object and database manifests are verified, compensation proves absence, and failed cleanup remains recovery-required.

Verification: Core 525 passed, 3 skipped, 251 subtests; Campaign 337 passed, 16 subtests; inventory/meta tests passed. The parent remains open for Campaign delivery/retention and the other planned inventory rows.

## Codex State: progress The first adoption slice is pushed. - Added a machine-checked cross-module operation inventory and recovery-mode classification in `govoplan@9370f50`. - Opened owning-module work items for Campaign, Files, Mail, Connectors, Dataflow, Workflow Engine, and Core lifecycle effects. - Added Core's committed, lease-fenced durable operation boundary with idempotent successful replay, explicit stale-fence takeover, hash-chain verification, compensation, and unresolved-state handling in `govoplan-core@bca6a7c`. - Adopted it for Campaign build publication in `govoplan-campaign@dd09b06`: request/precondition evidence commits before object writes, object and database manifests are verified, compensation proves absence, and failed cleanup remains recovery-required. Verification: Core `525 passed, 3 skipped, 251 subtests`; Campaign `337 passed, 16 subtests`; inventory/meta tests passed. The parent remains open for Campaign delivery/retention and the other planned inventory rows.
zemion added
status
in-progress
and removed
status
ready
labels 2026-08-03 03:10:12 +02:00
Author
Owner

Codex State: progress

The Files object-effect slice is pushed.

  • govoplan-files@6baf2a4: lease-fenced upload/finalization and repair intent before object writes; independent database/object verification; rollback compensation; tamper quarantine; forward-recovered orphan cleanup; optional Encryption fail-closed behavior; operator documentation.
  • govoplan@5bef966: files.upload.finalize and files.integrity.reconcile are now machine-recorded as adopted.
  • Verification: Files 104 tests; Ruff clean; module-matrix run 308 completed successfully.

Files hard purge and remote write-sync remain planned because neither effect is implemented. Work now moves to Mail SMTP/IMAP effects.

## Codex State: progress The Files object-effect slice is pushed. - `govoplan-files@6baf2a4`: lease-fenced upload/finalization and repair intent before object writes; independent database/object verification; rollback compensation; tamper quarantine; forward-recovered orphan cleanup; optional Encryption fail-closed behavior; operator documentation. - `govoplan@5bef966`: `files.upload.finalize` and `files.integrity.reconcile` are now machine-recorded as adopted. - Verification: Files `104 tests`; Ruff clean; module-matrix run 308 completed successfully. Files hard purge and remote write-sync remain planned because neither effect is implemented. Work now moves to Mail SMTP/IMAP effects.
Author
Owner

Codex State: progress

Summary

  • All currently implemented consequential Campaign, Files, Mail, Connectors, Dataflow, Workflow Engine, and Core lifecycle paths now use the Core recovery ledger and are machine-inventoried.
  • Core lifecycle adoption closed Core#281 in 729b84d; the inventory and operator guidance were updated in 5e449b0 and govoplan-ops cdcb477.

Verification

  • Recovery inventory tests: 2 passed; consolidated focused checks passed.

Next / Blocked

  • Four planned rows remain intentionally non-adopted because the production effects do not exist yet: Files hard retention purge, Files writable connector sync, Mail provider-side mailbox mutation, and a production connector external mutation. Their features must enter through the declared recovery contracts before shipping.

Suggested status label: status/in-progress

## Codex State: progress ### Summary - All currently implemented consequential Campaign, Files, Mail, Connectors, Dataflow, Workflow Engine, and Core lifecycle paths now use the Core recovery ledger and are machine-inventoried. - Core lifecycle adoption closed Core#281 in 729b84d; the inventory and operator guidance were updated in 5e449b0 and govoplan-ops cdcb477. ### Verification - `Recovery inventory tests: 2 passed; consolidated focused checks passed.` ### Next / Blocked - Four planned rows remain intentionally non-adopted because the production effects do not exist yet: Files hard retention purge, Files writable connector sync, Mail provider-side mailbox mutation, and a production connector external mutation. Their features must enter through the declared recovery contracts before shipping. Suggested status label: `status/in-progress`
Author
Owner

Codex State: done

Summary

  • Every currently implemented consequential Campaign, Files, Mail, Connectors, Dataflow, Workflow Engine, and Core lifecycle effect now uses the Core recovery ledger and is machine-inventoried.
  • Idempotency, canonical request evidence, fencing, outcome-unknown handling, verified settlement, Ops visibility, crash/retry/tamper tests, and module-permutation evidence are in place.
  • Four inventory rows remain planned because their production effects do not exist: Files hard purge, Files writable connector sync, Mail provider-side mutation, and production connector external mutation. Their owning feature work is fail-gated by the declared recovery contracts.

Verification

  • Recovery inventory tests passed.
  • tools/checks/check-focused.sh passed, including 46 WebUI module permutations and full-product bundle budgets.
## Codex State: done ### Summary - Every currently implemented consequential Campaign, Files, Mail, Connectors, Dataflow, Workflow Engine, and Core lifecycle effect now uses the Core recovery ledger and is machine-inventoried. - Idempotency, canonical request evidence, fencing, outcome-unknown handling, verified settlement, Ops visibility, crash/retry/tamper tests, and module-permutation evidence are in place. - Four inventory rows remain planned because their production effects do not exist: Files hard purge, Files writable connector sync, Mail provider-side mutation, and production connector external mutation. Their owning feature work is fail-gated by the declared recovery contracts. ### Verification - `Recovery inventory tests passed.` - `tools/checks/check-focused.sh passed, including 46 WebUI module permutations and full-product bundle budgets.`
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan#36