Implement governed hybrid campaign delivery

This commit is contained in:
2026-08-02 13:58:37 +02:00
parent b38597f2be
commit 7733265cc8
40 changed files with 2531 additions and 122 deletions
+24 -2
View File
@@ -40,6 +40,10 @@ from govoplan_core.core.distribution_lists import (
CAPABILITY_DISTRIBUTION_LIST_EXPAND,
CAPABILITY_DISTRIBUTION_LIST_SOURCE,
)
from govoplan_core.core.templates import (
CAPABILITY_TEMPLATE_CATALOG,
CAPABILITY_TEMPLATE_RENDERER,
)
from govoplan_core.core.operations import OperationalCheckProviderRegistration
from govoplan_core.core.provider_governance import declared_module_architecture
from govoplan_core.core.views import ViewSurface
@@ -170,7 +174,7 @@ PERMISSIONS = (
_permission(
"campaigns:campaign:send",
"Send campaigns",
"Start real Mail or Postbox delivery.",
"Start real Mail, Postbox, or printable delivery.",
"Campaigns",
),
_permission(
@@ -182,7 +186,7 @@ PERMISSIONS = (
_permission(
"campaigns:campaign:reconcile",
"Reconcile delivery",
"Resolve outcome-unknown Mail, Postbox, or IMAP attempts after inspection.",
"Resolve outcome-unknown Mail, Postbox, printable, or IMAP attempts after inspection.",
"Campaigns",
),
_permission(
@@ -368,6 +372,7 @@ manifest = ModuleManifest(
"notifications",
"addresses",
"dist_lists",
"templates",
"postbox",
"approvals",
"reporting",
@@ -432,6 +437,18 @@ manifest = ModuleManifest(
version_max_exclusive="0.2.0",
optional=True,
),
ModuleInterfaceRequirement(
name=CAPABILITY_TEMPLATE_CATALOG,
version_min="0.1.0",
version_max_exclusive="0.2.0",
optional=True,
),
ModuleInterfaceRequirement(
name=CAPABILITY_TEMPLATE_RENDERER,
version_min="0.1.0",
version_max_exclusive="0.2.0",
optional=True,
),
ModuleInterfaceRequirement(
name=CAPABILITY_POSTBOX_DELIVERY,
version_min="0.1.1",
@@ -545,6 +562,7 @@ manifest = ModuleManifest(
campaign_models.CampaignMessageActionAttempt,
campaign_models.ImapAppendAttempt,
campaign_models.PostboxDeliveryAttempt,
campaign_models.PrintOutputAttempt,
label="Campaigns",
),
retirement_notes="Destructive retirement drops campaign-owned database tables after the installer captures a database snapshot.",
@@ -564,6 +582,7 @@ manifest = ModuleManifest(
campaign_models.CampaignMessageActionAttempt,
campaign_models.ImapAppendAttempt,
campaign_models.PostboxDeliveryAttempt,
campaign_models.PrintOutputAttempt,
label="Campaigns",
),
),
@@ -1139,6 +1158,9 @@ manifest = ModuleManifest(
non_owned_concepts=(
"mail transport",
"postbox",
"distribution list",
"template definition and rendering",
"print artifact storage",
"durable address directory",
"file storage",
),