fix(manifest): normalize distribution list contract ids

This commit is contained in:
2026-07-20 20:01:50 +02:00
parent c7bea69e26
commit 1444e50d8b
4 changed files with 9 additions and 9 deletions

View File

@@ -66,10 +66,10 @@ delivery-channel hints, provenance, and a policy/readiness state.
The first capabilities should be: The first capabilities should be:
- `distLists.source`: list visible distribution lists as reusable recipient - `dist_lists.source`: list visible distribution lists as reusable recipient
sources. sources.
- `distLists.expand`: expand a distribution list into immutable recipient rows. - `dist_lists.expand`: expand a distribution list into immutable recipient rows.
- `distLists.writer`: explain whether a caller can create or change a list. - `dist_lists.writer`: explain whether a caller can create or change a list.
Consumers must resolve those capabilities through core and must not import Consumers must resolve those capabilities through core and must not import
distribution-list ORM or service internals. distribution-list ORM or service internals.

View File

@@ -34,7 +34,7 @@ Tasks:
- add CRUD routes and permissions - add CRUD routes and permissions
- add local raw email/postal entries - add local raw email/postal entries
- add references to address contacts and address lists via capabilities - add references to address contacts and address lists via capabilities
- expose `distLists.source` and `distLists.expand` - expose `dist_lists.source` and `dist_lists.expand`
- add tests for expansion and snapshots - add tests for expansion and snapshots
## Milestone 3: Provider Integrations ## Milestone 3: Provider Integrations

View File

@@ -43,7 +43,7 @@ ROLE_TEMPLATES = (
DOCUMENTATION = ( DOCUMENTATION = (
DocumentationTopic( DocumentationTopic(
id="dist-lists.boundary", id=f"{MODULE_ID}.boundary",
title="Distribution list boundary", title="Distribution list boundary",
summary="Distribution lists model operational Verteiler separately from address-book lists and workflow Umlauf execution.", summary="Distribution lists model operational Verteiler separately from address-book lists and workflow Umlauf execution.",
body=( body=(
@@ -81,9 +81,9 @@ manifest = ModuleManifest(
), ),
optional_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR), optional_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR),
provides_interfaces=( provides_interfaces=(
ModuleInterfaceProvider(name="distLists.source", version=MODULE_VERSION), ModuleInterfaceProvider(name="dist_lists.source", version=MODULE_VERSION),
ModuleInterfaceProvider(name="distLists.expand", version=MODULE_VERSION), ModuleInterfaceProvider(name="dist_lists.expand", version=MODULE_VERSION),
ModuleInterfaceProvider(name="distLists.writer", version=MODULE_VERSION), ModuleInterfaceProvider(name="dist_lists.writer", version=MODULE_VERSION),
), ),
permissions=PERMISSIONS, permissions=PERMISSIONS,
role_templates=ROLE_TEMPLATES, role_templates=ROLE_TEMPLATES,

View File

@@ -15,7 +15,7 @@ class DistributionListsManifestTests(unittest.TestCase):
self.assertFalse(manifest.dependencies) self.assertFalse(manifest.dependencies)
self.assertIn("addresses", manifest.optional_dependencies) self.assertIn("addresses", manifest.optional_dependencies)
self.assertIn("auth.principalResolver", manifest.optional_capabilities) self.assertIn("auth.principalResolver", manifest.optional_capabilities)
self.assertIn("distLists.expand", {interface.name for interface in manifest.provides_interfaces}) self.assertIn("dist_lists.expand", {interface.name for interface in manifest.provides_interfaces})
self.assertIn("dist_lists:list:read", {permission.scope for permission in manifest.permissions}) self.assertIn("dist_lists:list:read", {permission.scope for permission in manifest.permissions})
self.assertIsNone(manifest.route_factory) self.assertIsNone(manifest.route_factory)
self.assertIsNone(manifest.migration_spec) self.assertIsNone(manifest.migration_spec)