[User Story] Deliver campaign messages to organizational function postboxes #16

Open
opened 2026-07-28 18:59:04 +02:00 by zemion · 1 comment
Owner

User story

As an institution, I want campaigns and other producers to deliver a message to an institutional function in an organizational unit rather than to one person, so that every currently responsible identity can access it through their account and responsibility changes do not break the address or history.

As a user holding several functions, I want to see selected postboxes together and keep others separate, while every message retains its source postbox, organization, function, security context, and audit history.

Domain ownership

  • Organizations owns units, structures, function types, and concrete functions.
  • Identity owns identities and accounts.
  • IDM owns effective identity-to-function assignments, delegation, acting-for context, and assignment lifecycle facts.
  • Access authorizes generic Postbox actions; a function assignment does not become an RBAC role merely to open the corresponding function postbox.
  • Postbox owns templates, stable addresses, containers, messages, delivery/routing records, visibility decisions, grouping preferences, and retention.
  • Campaign owns campaign preparation and per-target delivery evidence and uses only a versioned Postbox delivery capability.

Core journey

  1. Define a reusable function type and link concrete functions to organizational units.
  2. Define a Postbox template for that function type and unit scope; resolve stable unit-specific postbox addresses lazily, including vacant functions.
  3. Assign identities/accounts to concrete functions in IDM, with effective dates and delegation where allowed.
  4. Build a Campaign whose delivery channel targets one or more function/unit postbox addresses.
  5. Preview resolved addresses, vacancies, hierarchy-copy effects, classifications, and duplicates before committing delivery.
  6. Deliver idempotently and retain per-target evidence; eligible incumbents see the message according to the assignment/access snapshot and current-access policy.
  7. Reassignment changes current access without changing the postbox address or rewriting historical evidence.

Product rules

  • Postboxes are durable institutional containers, not personal or login-bound mailboxes.
  • Unified inboxes are projections; source containers and evidence are never merged.
  • Parent visibility/copy is disabled by default and must be explicit, bounded, explainable, classification-aware, and snapshotted at delivery time.
  • Vacancy must be visible and routable without silently granting an unrelated person access.
  • Channel fallback, duplication, acknowledgement, and retry semantics are explicit and auditable.
  • Optional Files, Notifications, Mail, Portal, Campaign, Workflow, Policy, Audit, and future encryption integrations use capabilities/events rather than implementation imports.

Acceptance criteria

  • The end-to-end path works for multiple incumbents, a vacancy, reassignment, delegation, and one bounded parent-copy rule.
  • A mixed campaign can deliver through Mail and/or Postbox according to an explicit channel policy without silent fallback.
  • The recipient report distinguishes accepted delivery, readable-by-current-holder, vacant, read/acknowledged, failed, retried, and outcome-unknown states.
  • Every access and routing decision is tenant-safe and explainable from function, unit, assignment, policy, and delivery provenance.

Ordered work packages

P1 foundation and first journey

  1. Postbox module manifest and capability contracts and domain model.
  2. IDM effective assignments and lifecycle events plus Organizations hierarchy/function types.
  3. Function-bound access resolution and function-scoped templates/stable addresses.
  4. Tenant-safe APIs and idempotent delivery, producer delivery capability, and security/lifecycle tests.
  5. Navigation/admin shell, inbox, and template/binding/routing administration.
  6. Campaign delivery adapter, currently blocked on the Postbox delivery foundation.
  7. Bounded hierarchy copy and vacancy escalation.

P2 extensions

## User story As an institution, I want campaigns and other producers to deliver a message to an institutional function in an organizational unit rather than to one person, so that every currently responsible identity can access it through their account and responsibility changes do not break the address or history. As a user holding several functions, I want to see selected postboxes together and keep others separate, while every message retains its source postbox, organization, function, security context, and audit history. ## Domain ownership - Organizations owns units, structures, function types, and concrete functions. - Identity owns identities and accounts. - IDM owns effective identity-to-function assignments, delegation, acting-for context, and assignment lifecycle facts. - Access authorizes generic Postbox actions; a function assignment does not become an RBAC role merely to open the corresponding function postbox. - Postbox owns templates, stable addresses, containers, messages, delivery/routing records, visibility decisions, grouping preferences, and retention. - Campaign owns campaign preparation and per-target delivery evidence and uses only a versioned Postbox delivery capability. ## Core journey 1. Define a reusable function type and link concrete functions to organizational units. 2. Define a Postbox template for that function type and unit scope; resolve stable unit-specific postbox addresses lazily, including vacant functions. 3. Assign identities/accounts to concrete functions in IDM, with effective dates and delegation where allowed. 4. Build a Campaign whose delivery channel targets one or more function/unit postbox addresses. 5. Preview resolved addresses, vacancies, hierarchy-copy effects, classifications, and duplicates before committing delivery. 6. Deliver idempotently and retain per-target evidence; eligible incumbents see the message according to the assignment/access snapshot and current-access policy. 7. Reassignment changes current access without changing the postbox address or rewriting historical evidence. ## Product rules - Postboxes are durable institutional containers, not personal or login-bound mailboxes. - Unified inboxes are projections; source containers and evidence are never merged. - Parent visibility/copy is disabled by default and must be explicit, bounded, explainable, classification-aware, and snapshotted at delivery time. - Vacancy must be visible and routable without silently granting an unrelated person access. - Channel fallback, duplication, acknowledgement, and retry semantics are explicit and auditable. - Optional Files, Notifications, Mail, Portal, Campaign, Workflow, Policy, Audit, and future encryption integrations use capabilities/events rather than implementation imports. ## Acceptance criteria - The end-to-end path works for multiple incumbents, a vacancy, reassignment, delegation, and one bounded parent-copy rule. - A mixed campaign can deliver through Mail and/or Postbox according to an explicit channel policy without silent fallback. - The recipient report distinguishes accepted delivery, readable-by-current-holder, vacant, read/acknowledged, failed, retried, and outcome-unknown states. - Every access and routing decision is tenant-safe and explainable from function, unit, assignment, policy, and delivery provenance. <!-- codex-postbox-work-packages-2026-07-28 --> ## Ordered work packages ### P1 foundation and first journey 1. [Postbox module manifest and capability contracts](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/1) and [domain model](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/2). 2. [IDM effective assignments and lifecycle events](https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/5) plus [Organizations hierarchy/function types](https://git.add-ideas.de/GovOPlaN/govoplan-organizations/issues/5). 3. [Function-bound access resolution](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/3) and [function-scoped templates/stable addresses](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/17). 4. [Tenant-safe APIs and idempotent delivery](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/4), [producer delivery capability](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/6), and [security/lifecycle tests](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/5). 5. [Navigation/admin shell](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/10), [inbox](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/11), and [template/binding/routing administration](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/12). 6. [Campaign delivery adapter](https://git.add-ideas.de/GovOPlaN/govoplan-campaign/issues/81), currently blocked on the Postbox delivery foundation. 7. [Bounded hierarchy copy and vacancy escalation](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/18). ### P2 extensions - [Per-user unified group projections](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/19) - [Postbox notifications](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/20) - [Files integration](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/7), [Portal integration](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/8), and [Mail bridge](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/9) - [E2EE-ready envelope/key architecture](https://git.add-ideas.de/GovOPlaN/govoplan-postbox/issues/15)
Author
Owner

Codex State: progress

The first end-to-end institutional Postbox path now exists locally: organization/function target -> current IDM incumbency/vacancy -> stable Postbox -> idempotent delivery -> inbox/read/ack/evidence/notification. Campaign can discover and call the optional delivery contract. Mixed-channel Campaign schema/reporting and bounded hierarchy copy remain open in #23/#81 and #18.

## Codex State: progress The first end-to-end institutional Postbox path now exists locally: organization/function target -> current IDM incumbency/vacancy -> stable Postbox -> idempotent delivery -> inbox/read/ack/evidence/notification. Campaign can discover and call the optional delivery contract. Mixed-channel Campaign schema/reporting and bounded hierarchy copy remain open in #23/#81 and #18.
zemion added
status
in-progress
and removed
status
ready
labels 2026-07-29 00:20:19 +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#16
No description provided.