Files
kontextual-engine/docs/cmis-profiled-access-points-implementation.md
2026-05-07 00:57:12 +02:00

2.1 KiB

CMIS Profiled Access Points Implementation

Date: 2026-05-06

Status: profile and mapper slices implemented.

Implemented Slice

src/kontextual_engine/core/cmis.py defines the CMIS profile and access-point boundary used by the future API adapter:

  • CMISBinding
  • CMISCapability
  • CMISAction
  • CMISAccessProfile
  • CMISAccessPoint
  • CMISDomainMapper
  • CMISObjectProjection

The layer is intentionally small. It decides whether a CMIS action is allowed for a profile and whether an engine asset may be exposed through an access point. It does not implement CMIS routes and does not duplicate asset storage, metadata, relationship, policy, or audit services.

Built-In Profiles

  • readonly-browser: Browser Binding read profile over public/internal assets.
  • governed-authoring: Browser Binding profile with selected create/update and content stream mutations.
  • admin-export: service-account-only export profile with broad visibility.
  • compat-tck: Browser Binding profile intended for selected OpenCMIS TCK compatibility tests.

Enforcement Boundary

Profiles can restrict exposure by:

  • CMIS capability,
  • mutation allowance,
  • actor type,
  • sensitivity,
  • asset type,
  • topic,
  • source system,
  • metadata deny rules.

Decisions return existing PolicyDecision objects so later CMIS routes can emit compatible diagnostics and audit records without inventing another policy model.

Mapper Slice

CMISDomainMapper projects existing engine state into CMIS-shaped envelopes:

  • repository info and CMIS 1.1 Browser Binding capability flags,
  • base type definitions for document, folder, relationship, policy, item, and secondary,
  • engine assets as CMIS document projections,
  • representation metadata as content stream descriptors,
  • asset versions as CMIS version properties,
  • relationship primitives as CMIS relationship objects,
  • profile-derived allowable actions.

The mapper returns None for assets or relationships that the access-point profile must not expose. It does not fetch from repositories directly; callers provide the asset, representations, versions, metadata records, and relationships they have already authorized or loaded.