feat: extend calendar scheduling reconciliation contract

This commit is contained in:
2026-08-20 07:44:16 +02:00
parent 8f642bd618
commit 0fae09ba3c
2 changed files with 36 additions and 0 deletions
+6
View File
@@ -217,6 +217,12 @@ Other stable runtime capabilities currently include:
- `payments.requests` - `payments.requests`
- `workflow.definitionContributions` and `workflow.runtimeWorker` - `workflow.definitionContributions` and `workflow.runtimeWorker`
`calendar.scheduling` keeps workflow modules independent of Calendar-owned
models and transport adapters. Consumers may create tentative events, promote
the selected event in place, and release unused events idempotently. The
provider returns bounded external-delivery and outbox references so consumers
can retain retry state without copying Calendar's synchronization internals.
`application_status.projection` lets a presentation module resolve the tenant `application_status.projection` lets a presentation module resolve the tenant
and display or request access to an owner-supplied, deliberately bounded and display or request access to an owner-supplied, deliberately bounded
applicant-status view. The provider retains policy, authorization, token, and applicant-status view. The provider retains policy, authorization, token, and
+30
View File
@@ -45,6 +45,15 @@ class CalendarEventRef:
outbox_operation_id: str | None = None outbox_operation_id: str | None = None
@dataclass(frozen=True, slots=True)
class CalendarEventReleaseRef:
event_id: str
accepted: bool = True
already_released: bool = False
external_state: str = "local_released"
outbox_operation_id: str | None = None
@dataclass(frozen=True, slots=True) @dataclass(frozen=True, slots=True)
class CalendarInvitationAttendeeRequest: class CalendarInvitationAttendeeRequest:
address: str address: str
@@ -156,6 +165,27 @@ class CalendarSchedulingProvider(Protocol):
) -> CalendarEventRef: ) -> CalendarEventRef:
... ...
def promote_event(
self,
session: object,
*,
tenant_id: str,
user_id: str | None,
event_id: str,
request: CalendarEventRequest,
) -> CalendarEventRef:
...
def release_event(
self,
session: object,
*,
tenant_id: str,
user_id: str | None,
event_id: str,
) -> CalendarEventReleaseRef:
...
@runtime_checkable @runtime_checkable
class CalendarOutboxProvider(Protocol): class CalendarOutboxProvider(Protocol):