[Feature] Integrate Campaign with Postbox as an explicit delivery channel #23

Open
opened 2026-07-28 23:01:06 +02:00 by zemion · 2 comments
Owner

Outcome

Campaign can validate, preview, queue, and evidence Postbox delivery without importing Postbox internals or silently changing channels.

Acceptance criteria

  • Campaign consumes postbox.delivery through a versioned Core capability.
  • Recipient data can select Mail, Postbox, both, or an explicit fallback order.
  • Build/review shows resolved function/unit destinations, vacancy, duplicates, classification, and hierarchy-copy effects.
  • Delivery is idempotent and recipient reports retain per-channel attempts and returned Postbox evidence.
  • Campaign remains usable when Postbox is absent.
## Outcome Campaign can validate, preview, queue, and evidence Postbox delivery without importing Postbox internals or silently changing channels. ## Acceptance criteria - Campaign consumes `postbox.delivery` through a versioned Core capability. - Recipient data can select Mail, Postbox, both, or an explicit fallback order. - Build/review shows resolved function/unit destinations, vacancy, duplicates, classification, and hierarchy-copy effects. - Delivery is idempotent and recipient reports retain per-channel attempts and returned Postbox evidence. - Campaign remains usable when Postbox is absent.
Author
Owner

Codex State: needs-info

Campaign now declares Postbox as optional, validates the postbox.delivery contract, exposes availability, and has a typed adapter that fails explicitly when unavailable. Persisted recipient channel policy, target mapping, queue attempts, review UI, and reports are intentionally not invented pending the product decisions also recorded on Campaign #81.

## Codex State: needs-info Campaign now declares Postbox as optional, validates the `postbox.delivery` contract, exposes availability, and has a typed adapter that fails explicitly when unavailable. Persisted recipient channel policy, target mapping, queue attempts, review UI, and reports are intentionally not invented pending the product decisions also recorded on Campaign #81.
zemion added
status
needs-info
codex/needs-human
and removed
status
ready
codex/ready
labels 2026-07-29 00:20:19 +02:00
Author
Owner

Codex State: progress

Summary

  • Implemented the typed delivery catalog and rejection/outcome-unknown contract used by Campaign without importing Postbox internals.
  • The Postbox provider resolves exact and template-derived unit/function/context targets, materializes derived addresses idempotently, and returns durable delivery evidence.
  • Campaign now supports explicit Mail/Postbox channel policies, multiple targets per row, optional field derivation, safe fallback, and absence of Postbox.

Changed Files

  • src/govoplan_postbox/backend/service.py
  • src/govoplan_postbox/backend/manifest.py
  • tests/test_service.py

Verification

  • Postbox pytest: 10 passed
  • Core/Postbox focused composition check: passed

Next / Blocked

  • Push and release the coordinated Core, Postbox, and Campaign versions.
  • Keep the integration issue open until Campaign surfaces downstream read/acknowledgement state and complete frozen-target provenance in its review experience.

Suggested status label: status/in-progress

## Codex State: progress ### Summary - Implemented the typed delivery catalog and rejection/outcome-unknown contract used by Campaign without importing Postbox internals. - The Postbox provider resolves exact and template-derived unit/function/context targets, materializes derived addresses idempotently, and returns durable delivery evidence. - Campaign now supports explicit Mail/Postbox channel policies, multiple targets per row, optional field derivation, safe fallback, and absence of Postbox. ### Changed Files - `src/govoplan_postbox/backend/service.py` - `src/govoplan_postbox/backend/manifest.py` - `tests/test_service.py` ### Verification - `Postbox pytest: 10 passed` - `Core/Postbox focused composition check: passed` ### Next / Blocked - Push and release the coordinated Core, Postbox, and Campaign versions. - Keep the integration issue open until Campaign surfaces downstream read/acknowledgement state and complete frozen-target provenance in its review experience. Suggested status label: `status/in-progress`
zemion added
status
in-progress
codex/ready
and removed
status
needs-info
codex/needs-human
labels 2026-07-29 02:04:13 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-postbox#23
No description provided.