Skip to content

contract(authz): bind CalendarWeave runtime resource decisions to verified identity and tenant #160

Description

@seonghobae

Consumer outcome

CalendarWeave #2 requires an authenticated, tenant-safe standalone calendar path. The core already has ExternalIdentity(issuer,subject) and CalendarAuthorizationPort::authorize(identity, exact action/resource) -> TenantId. CalendarWeave must not self-assert tenant authority or carry a Keyverse operator credential at runtime.

Existing source inspected

  • main 7d9151cd2da260e118020c938c7358e2ee75d541: ADR-0008 RP validation, closed client onboarding/reconciliation.
  • PR103 5ac33256229321e9fccbb14a460c7d6de984444a: services/account_unification/app/org_authorization.py and authorization_plane.py contain software/menu PDP decisions.
  • Those decision responses have no verified issuer, authorized tenant, exact CalendarWeave action or collection/event binding. Caller-supplied AssignmentSnapshot structure is not independently verified membership. /authorization/*:decide is operator-protected; the start-login/PAT runtime gate cannot be assumed to authorize these routes.

Required owner contract

Provide a versioned, least-privilege runtime resource decision interface owned by Keyverse (or document an already implemented exact equivalent with immutable source and execution evidence). The spelling of a new endpoint is a proposal, not a requirement to duplicate an existing owner route.

Acceptance:

  1. Independently validate the approved CalendarWeave user-token issuer/signature/algorithm/audience/subject/time profile and authenticate a CalendarWeave-scoped service caller separately.
  2. Resolve (issuer,subject) through an authoritative current membership mapping, not an unverified caller tenant/org-path header or claim-only entitlement.
  3. Evaluate exact action (create_collection, create_event, read_events, update_event) and opaque collection/event references against resource binding without reading CalendarWeave application tables.
  4. Return an explicitly authorized tenant only for completed allow, bound to request correlation, issuer+subject, software unit, action/resource, policy revision and bounded freshness. Completed deny differs from unavailable/indeterminate.
  5. Deny missing/mismatched identity, resource, membership, role/scope, stale policy and dependency failures; preserve scalar opaque subject semantics rather than silently truncating CalendarWeave inputs.
  6. Do not distribute operator credentials to consumers, infer runtime authorization from menu/software allows, or copy Keyverse's identity/policy store into CalendarWeave.
  7. Publish immutable source/DTO and real positive/negative execution evidence. Existing Draft candidate, client-registration success and fixture-only JWT verification are not released/deployed acceptance.

Consumer plan and limits

The first authenticated CalendarWeave transport can operate on pre-provisioned collections through event create/get/If-Match update. The existing local operator is usable intermediate evidence, not a substitute for this final objective. CalendarWeave will reject unknown/malformed/mismatched/expired decisions before parsing or storage. No absent endpoint is mocked into a production success path.

Related to ContextualWisdomLab/CalendarWeave#2 and Keyverse #103/#102/#155/#158. Existing consumer compatibility paths remain intact. This request does not authorize production provisioning, secret access, deployment or bypass of PR gates.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions