From cfea0edb97feee769b8b497936cd3e1189d93962 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Sun, 12 Jul 2026 17:32:07 +0200 Subject: [PATCH] Model scheduling as poll-backed workflow --- README.md | 7 +++++++ src/govoplan_scheduling/backend/manifest.py | 5 ++++- tests/test_manifest.py | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d18fd6..a56d8fa 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,13 @@ The Scheduling manifest declares `poll` as a required dependency because availability collection and option/date poll primitives belong in `govoplan-poll`. +Scheduling should model each meeting-finding flow as a poll-backed workflow: +Poll owns candidate options, signed participation links, responses, visibility, +and result aggregation. Scheduling stores the scheduling-specific context and +uses Poll context fields to point back to its request or proposal resource. +Typical workflow steps are collect availability, rank candidates, decide, notify +participants, and hand off to Calendar or Appointments. + The manifest declares `access` and `evaluation` as optional dependencies. Scheduling may use Access for identity, groups, and permissions, and may trigger post-event or post-appointment feedback through Evaluation. It must not require diff --git a/src/govoplan_scheduling/backend/manifest.py b/src/govoplan_scheduling/backend/manifest.py index efadb13..0a52bd2 100644 --- a/src/govoplan_scheduling/backend/manifest.py +++ b/src/govoplan_scheduling/backend/manifest.py @@ -63,7 +63,8 @@ DOCUMENTATION = ( body=( "Scheduling owns meeting scheduling workflows, candidate slots, participant availability " "collection, conflict explanation, reminders, and decision handoff. It depends on Poll " - "for reusable availability matrices and can optionally trigger Evaluation for post-event feedback. " + "for reusable availability matrices and poll-backed workflow context, and can optionally " + "trigger Evaluation for post-event feedback. " "Access is optional: when installed, Scheduling can use principal resolution, permission " "evaluation, groups, and role templates; without it, reduced signed-link or local organizer " "flows remain possible." @@ -89,6 +90,8 @@ manifest = ModuleManifest( ), requires_interfaces=( ModuleInterfaceRequirement(name="poll.availability_matrix", version_min="0.1.8", version_max_exclusive="0.2.0"), + ModuleInterfaceRequirement(name="poll.workflow_context", version_min="0.1.8", version_max_exclusive="0.2.0"), + ModuleInterfaceRequirement(name="poll.signed_participation", version_min="0.1.8", version_max_exclusive="0.2.0", optional=True), ModuleInterfaceRequirement(name="evaluation.feedback", version_min="0.1.8", version_max_exclusive="0.2.0", optional=True), ), permissions=PERMISSIONS, diff --git a/tests/test_manifest.py b/tests/test_manifest.py index b5f02d4..3a67dee 100644 --- a/tests/test_manifest.py +++ b/tests/test_manifest.py @@ -19,6 +19,8 @@ class SchedulingManifestTests(unittest.TestCase): self.assertIn("auth.principalResolver", manifest.optional_capabilities) self.assertIn("evaluation", manifest.optional_dependencies) self.assertIn("poll.availability_matrix", {interface.name for interface in manifest.requires_interfaces}) + self.assertIn("poll.workflow_context", {interface.name for interface in manifest.requires_interfaces}) + self.assertIn("poll.signed_participation", {interface.name for interface in manifest.requires_interfaces}) if __name__ == "__main__":