From 1400a9f6a01e765223f06abfbd3d1cced833d6ef Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Sat, 22 Aug 2026 07:55:17 +0200 Subject: [PATCH] docs: complete public documentation baseline --- package.json | 2 +- pyproject.toml | 2 +- src/govoplan_booking/backend/manifest.py | 13 ++++++++++++- tests/test_manifest.py | 9 +++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 0141eb9..f8c2175 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/booking", - "version": "0.1.18", + "version": "0.1.19", "private": true, "description": "GovOPlaN Booking platform module seed.", "type": "module", diff --git a/pyproject.toml b/pyproject.toml index 1d0408c..e056d5a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-booking" -version = "0.1.18" +version = "0.1.19" description = "GovOPlaN Booking platform module seed." readme = "README.md" requires-python = ">=3.12" diff --git a/src/govoplan_booking/backend/manifest.py b/src/govoplan_booking/backend/manifest.py index b112f8a..9de3f0b 100644 --- a/src/govoplan_booking/backend/manifest.py +++ b/src/govoplan_booking/backend/manifest.py @@ -6,7 +6,7 @@ from govoplan_core.core.provider_governance import declared_module_architecture MODULE_ID = "booking" MODULE_NAME = "Booking" -MODULE_VERSION = "0.1.18" +MODULE_VERSION = "0.1.19" READ_SCOPE = "booking:workspace:read" WRITE_SCOPE = "booking:workspace:write" ADMIN_SCOPE = "booking:workspace:admin" @@ -72,6 +72,13 @@ DOCUMENTATION = ( layer="available", documentation_types=("admin", "user"), audience=("user", "operator", "module_admin", "product_owner"), + translations={ + "de": { + "title": "Modulgrenze von Booking", + "summary": "Buchungsverfahren für Räume, Ressourcen, Schalter, Ausstattung, Terminarten, öffentliche Zeitfenster, interne Reservierungen, Wartelisten, Absagen, Anwesenheit und Nichterscheinen.", + "body": "Dieses Repository ist derzeit ein Grundgerüst für ein Plattformmodul. Es registriert die Fachgrenze, Berechtigungsoberfläche, Rollenvorlagen und Dokumentationsmetadaten, bevor Laufzeit-APIs, Datenbankmodelle, Migrationen und WebUI-Routen eingeführt werden.", + } + }, order=100, related_modules=OPTIONAL_DEPENDENCIES, links=( @@ -82,7 +89,11 @@ DOCUMENTATION = ( ), ), metadata={ + "kind": "reference", "seed": True, + "consequence_classes": { + "seed_boundary": "Declares ownership and permissions only; no runtime workflow is available yet.", + }, "domain_objects": ['booking procedures', 'public and internal slot allocation', 'waiting lists', 'reservation lifecycle', 'attendance and no-show facts'], "first_slice": "Define booking type, slot, reservation, attendance, cancellation, and no-show concepts, then add APIs for tenant-local booking configuration.", }, diff --git a/tests/test_manifest.py b/tests/test_manifest.py index 1d4a9e3..fdbd588 100644 --- a/tests/test_manifest.py +++ b/tests/test_manifest.py @@ -15,6 +15,15 @@ class ManifestSeedTests(unittest.TestCase): self.assertEqual({permission.scope for permission in manifest.permissions}, {READ_SCOPE, WRITE_SCOPE, ADMIN_SCOPE}) self.assertEqual({role.slug for role in manifest.role_templates}, {"booking_manager", "booking_viewer"}) self.assertTrue(manifest.documentation) + topic = manifest.documentation[0] + self.assertEqual("reference", topic.metadata["kind"]) + self.assertIn("seed_boundary", topic.metadata["consequence_classes"]) + self.assertTrue( + all( + topic.translations.get("de", {}).get(field) + for field in ("title", "summary", "body") + ) + ) self.assertIsNone(manifest.route_factory) self.assertIsNone(manifest.migration_spec) self.assertIsNone(manifest.frontend)