From e8f7e2c194f138a64e6224fcc3753df86b689dc9 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Mon, 3 Aug 2026 02:02:48 +0200 Subject: [PATCH] Repair release and interface CI gates --- .gitea/workflows/runtime-distribution.yml | 2 +- tests/test_release_repository_tag.py | 30 ++++ .../endpoint-surface-declarations.json | 128 ++++++++++++++++++ 3 files changed, 159 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/runtime-distribution.yml b/.gitea/workflows/runtime-distribution.yml index 422fcf3..13bad0a 100644 --- a/.gitea/workflows/runtime-distribution.yml +++ b/.gitea/workflows/runtime-distribution.yml @@ -59,7 +59,7 @@ jobs: git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan" - name: Bootstrap release sources working-directory: govoplan - run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --exclude-repo addideas-govoplan-website + run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo addideas-govoplan-website - name: Build release wheel roots and WebUI working-directory: govoplan run: | diff --git a/tests/test_release_repository_tag.py b/tests/test_release_repository_tag.py index d3238de..2a51238 100644 --- a/tests/test_release_repository_tag.py +++ b/tests/test_release_repository_tag.py @@ -340,6 +340,7 @@ def add_scoped_workflow_manifest(repo: Path) -> None: (backend / "__init__.py").write_text("", encoding="utf-8") (backend / "manifest.py").write_text( """from govoplan_core.core.modules import DocumentationCondition, DocumentationTopic, ModuleManifest, PermissionDefinition +from govoplan_core.core.provider_governance import declared_module_architecture def get_manifest(): @@ -368,6 +369,20 @@ def get_manifest(): conditions=(DocumentationCondition(required_scopes=("access:item:read",)),), metadata={"kind": "workflow"}, ), + DocumentationTopic( + id="access.admin.reference", + title="Administer access", + summary="Static administrator documentation for the release fixture.", + documentation_types=("admin",), + metadata={"kind": "reference"}, + ), + ), + architecture=declared_module_architecture( + layer="institutional_foundation", + kind="foundation", + maturity="scaffold", + documentation_ref="pyproject.toml", + known_limits=("Release-test fixture only.",), ), ) """, @@ -387,6 +402,7 @@ def replace_with_unscoped_workflow_manifest(repo: Path) -> None: manifest = repo / "src" / "govoplan_access" / "backend" / "manifest.py" manifest.write_text( """from govoplan_core.core.modules import DocumentationTopic, ModuleManifest +from govoplan_core.core.provider_governance import declared_module_architecture def get_manifest(): @@ -402,6 +418,20 @@ def get_manifest(): documentation_types=("user",), metadata={"kind": "workflow"}, ), + DocumentationTopic( + id="access.admin.reference", + title="Administer access", + summary="Static administrator documentation for the release fixture.", + documentation_types=("admin",), + metadata={"kind": "reference"}, + ), + ), + architecture=declared_module_architecture( + layer="institutional_foundation", + kind="foundation", + maturity="scaffold", + documentation_ref="pyproject.toml", + known_limits=("Release-test fixture only.",), ), ) """, diff --git a/tools/inventory/endpoint-surface-declarations.json b/tools/inventory/endpoint-surface-declarations.json index fccf3d3..2fcaaed 100644 --- a/tools/inventory/endpoint-surface-declarations.json +++ b/tools/inventory/endpoint-surface-declarations.json @@ -1581,6 +1581,134 @@ "path": "/workflow/definitions/{}/triggers", "rationale": "This capability-first module intentionally exposes a headless API for other modules and integrations.", "repository": "govoplan-workflow-engine" + }, + { + "category": "ui_reachable", + "method": "POST", + "path": "/addresses/contact-merges/{}/split", + "rationale": "The Addresses WebUI constructs the selected merge id and recovery action dynamically.", + "repository": "govoplan-addresses" + }, + { + "category": "ui_reachable", + "method": "POST", + "path": "/addresses/contact-merges/{}/undo", + "rationale": "The Addresses WebUI constructs the selected merge id and recovery action dynamically.", + "repository": "govoplan-addresses" + }, + { + "category": "intentionally_headless", + "method": "POST", + "path": "/addresses/contact-point-snapshots", + "rationale": "Campaign and other modules consume the governed contact-point snapshot capability without a direct Addresses screen.", + "repository": "govoplan-addresses" + }, + { + "category": "intentionally_headless", + "method": "GET", + "path": "/addresses/contact-point-snapshots/{}", + "rationale": "Campaign and other modules consume the governed contact-point snapshot capability without a direct Addresses screen.", + "repository": "govoplan-addresses" + }, + { + "category": "intentionally_headless", + "method": "POST", + "path": "/addresses/contact-point-sources/preview", + "rationale": "This capability endpoint previews a module-supplied contact source and is consumed by integrations rather than a direct screen.", + "repository": "govoplan-addresses" + }, + { + "category": "intentionally_headless", + "method": "POST", + "path": "/addresses/contact-points/resolve", + "rationale": "This governed recipient-resolution endpoint is consumed by Campaign and other modules.", + "repository": "govoplan-addresses" + }, + { + "category": "intentionally_headless", + "method": "GET", + "path": "/addresses/contacts/{}/redirect", + "rationale": "Stored references and module capabilities resolve merged-contact redirects without a direct user action.", + "repository": "govoplan-addresses" + }, + { + "category": "missing_ui", + "method": "GET", + "path": "/addresses/imports/{}", + "rationale": "The import flow can create, apply, and roll back a run, but the WebUI does not yet resume a saved run by id after navigation or reload.", + "repository": "govoplan-addresses", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-addresses/issues/22" + }, + { + "category": "ui_reachable", + "method": "GET", + "path": "/campaigns/{}/versions/{}/print-output/download", + "rationale": "The Campaign WebUI validates and follows the build artifact's server-provided download path.", + "repository": "govoplan-campaign" + }, + { + "category": "missing_ui", + "method": "GET", + "path": "/relationships", + "rationale": "IDM documents typed relationships but its current administration page exposes function assignments only.", + "repository": "govoplan-idm", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/11" + }, + { + "category": "missing_ui", + "method": "POST", + "path": "/relationships", + "rationale": "IDM documents typed relationships but its current administration page exposes function assignments only.", + "repository": "govoplan-idm", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/11" + }, + { + "category": "missing_ui", + "method": "PATCH", + "path": "/relationships/{}", + "rationale": "IDM documents typed relationships but its current administration page exposes function assignments only.", + "repository": "govoplan-idm", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/11" + }, + { + "category": "missing_ui", + "method": "POST", + "path": "/relationships/{}/revoke", + "rationale": "IDM documents typed relationships but its current administration page exposes function assignments only.", + "repository": "govoplan-idm", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/11" + }, + { + "category": "missing_ui", + "method": "GET", + "path": "/typed-groups", + "rationale": "IDM documents typed groups but its current administration page exposes function assignments only.", + "repository": "govoplan-idm", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/11" + }, + { + "category": "missing_ui", + "method": "POST", + "path": "/typed-groups", + "rationale": "IDM documents typed groups but its current administration page exposes function assignments only.", + "repository": "govoplan-idm", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/11" + }, + { + "category": "missing_ui", + "method": "PATCH", + "path": "/typed-groups/{}", + "rationale": "IDM documents typed groups but its current administration page exposes function assignments only.", + "repository": "govoplan-idm", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/11" + }, + { + "category": "missing_ui", + "method": "GET", + "path": "/typed-groups/{}/memberships", + "rationale": "IDM lacks the typed-group membership explanation surface for this existing API.", + "repository": "govoplan-idm", + "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-idm/issues/11" } ], "schema_version": 1