[Feature] Apply governed channel opt-in and preference decisions during expansion #7

Closed
opened 2026-07-31 14:48:11 +02:00 by zemion · 1 comment
Owner

Goal

Resolve each expanded audience member into explainable, channel-neutral delivery candidates while respecting opt-in/preference, consent, suppression, and Policy decisions.

Ownership

  • Addresses owns contact-point candidates and purpose/channel preference, consent, suppression, and validity facts.
  • Policy decides which channels are permitted and explains inherited limits/provenance.
  • Distribution Lists applies those provider decisions during expansion and records them.
  • Campaign chooses and freezes explicit hybrid-channel routing and fallback behavior.
  • A future Portal self-service UI may edit permitted preference facts through the same API; it is not required by this core work package.

Scope

  • Versioned channel-neutral candidate/result DTOs for email, postal, internal mail, and optional digital portal targets.
  • Purpose, effective time, preference/opt-in, consent/legal basis, suppression, address fallback, locale, and duplicate handling.
  • Stable usable, unresolved, invalid, suppressed, ambiguous, duplicate, and policy-blocked outcomes.
  • Applied decision provenance, source revisions, selected contact-point IDs, and bounded explanations.
  • Immutable expansion snapshot suitable for Campaign, Templates, Reporting, and Workflow.

Acceptance Criteria

  • A caller receives deterministic candidates plus an explanation for every excluded or unavailable target.
  • No preference implies only the configured/legal default; it never silently duplicates delivery across channels.
  • Missing Addresses or Policy integrations affect only the facts they provide and are reported explicitly.
  • Consumer snapshots do not change after preference, source, or policy revisions.
  • Hybrid Campaign routing remains explicit and auditable.

Parent: #5. Related: GovOPlaN/govoplan-addresses#9, GovOPlaN/govoplan-addresses#14, and GovOPlaN/govoplan-campaign#90.

## Goal Resolve each expanded audience member into explainable, channel-neutral delivery candidates while respecting opt-in/preference, consent, suppression, and Policy decisions. ## Ownership - Addresses owns contact-point candidates and purpose/channel preference, consent, suppression, and validity facts. - Policy decides which channels are permitted and explains inherited limits/provenance. - Distribution Lists applies those provider decisions during expansion and records them. - Campaign chooses and freezes explicit hybrid-channel routing and fallback behavior. - A future Portal self-service UI may edit permitted preference facts through the same API; it is not required by this core work package. ## Scope - Versioned channel-neutral candidate/result DTOs for email, postal, internal mail, and optional digital portal targets. - Purpose, effective time, preference/opt-in, consent/legal basis, suppression, address fallback, locale, and duplicate handling. - Stable usable, unresolved, invalid, suppressed, ambiguous, duplicate, and policy-blocked outcomes. - Applied decision provenance, source revisions, selected contact-point IDs, and bounded explanations. - Immutable expansion snapshot suitable for Campaign, Templates, Reporting, and Workflow. ## Acceptance Criteria - A caller receives deterministic candidates plus an explanation for every excluded or unavailable target. - No preference implies only the configured/legal default; it never silently duplicates delivery across channels. - Missing Addresses or Policy integrations affect only the facts they provide and are reported explicitly. - Consumer snapshots do not change after preference, source, or policy revisions. - Hybrid Campaign routing remains explicit and auditable. Parent: #5. Related: GovOPlaN/govoplan-addresses#9, GovOPlaN/govoplan-addresses#14, and GovOPlaN/govoplan-campaign#90.
Author
Owner

Implemented and published.

GovOPlaN/govoplan-policy commit a89c398 adds persisted hierarchical distribution-channel policy overrides with fail-closed malformed-policy handling. GovOPlaN/govoplan-dist-lists commit 8c54a5d resolves requested/default channels against address preference facts and Policy decisions, records provenance and exclusion reasons, and remains functional when optional providers are absent. Shared channel contracts are in Core commit 4cb334c.

Policy's 46-test suite, Distribution Lists focused tests, Ruff and WebUI TypeScript passed.

Implemented and published. GovOPlaN/govoplan-policy commit a89c398 adds persisted hierarchical distribution-channel policy overrides with fail-closed malformed-policy handling. GovOPlaN/govoplan-dist-lists commit 8c54a5d resolves requested/default channels against address preference facts and Policy decisions, records provenance and exclusion reasons, and remains functional when optional providers are absent. Shared channel contracts are in Core commit 4cb334c. Policy's 46-test suite, Distribution Lists focused tests, Ruff and WebUI TypeScript passed.
zemion removed the codex/ready
status
ready
labels 2026-07-31 21:03:34 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-dist-lists#7