5.3 KiB
CMIS Deployment And Compatibility
Date: 2026-05-07
Status: Browser Binding subset implemented with profiled access points, conservative capability flags, and explicit unsupported diagnostics.
Endpoint Setup
Install the service dependencies and run the FastAPI application:
python3 -m pip install -e '.[service]'
uvicorn kontextual_engine.api.app:create_app --factory --host 127.0.0.1 --port 8000
The CMIS access-point catalog is available at:
GET /cmis
Each configured profile is exposed as a Browser Binding MVP access point:
GET /cmis/{access_point_id}/browser
GET /cmis/{access_point_id}/browser/types
GET /cmis/{access_point_id}/browser/children
GET /cmis/{access_point_id}/browser/object/{object_id}
GET /cmis/{access_point_id}/browser/content/{object_id}
GET /cmis/{access_point_id}/browser/acl/{object_id}
GET /cmis/{access_point_id}/browser/parents/{object_id}
GET /cmis/{access_point_id}/browser/query
GET /cmis/{access_point_id}/browser/relationships
GET /cmis/{access_point_id}/browser/changes
POST /cmis/{access_point_id}/browser/document
POST /cmis/{access_point_id}/browser/object/{object_id}/properties
POST /cmis/{access_point_id}/browser/object/{object_id}/content
POST /cmis/{access_point_id}/browser/object/{object_id}/delete
Supported access_point_id values:
readonly-browsergoverned-authoringadmin-exportcompat-tck
Actor context is passed through the existing service headers, especially:
X-Actor-IdX-Actor-TypeX-Correlation-IdX-Request-ScopeX-Policy-Scope
admin-export requires X-Actor-Type: service_account.
Profile Capability Matrix
| Capability | readonly-browser | governed-authoring | admin-export | compat-tck |
|---|---|---|---|---|
| Browser Binding repository info | yes | yes | yes | yes |
| Type definitions | yes | yes | yes | yes |
| Synthetic navigation | yes | yes | yes | yes |
| Projection-only parent maps | yes | yes | yes | yes |
CMIS capabilityMultifiling |
no | no | no | no |
| Descendants/folder tree services | no | no | no | no |
| Object reads | yes | yes | yes | yes |
| Content stream descriptors | yes | yes | yes | yes |
| ACL projection | discover | discover | discover | discover |
| Relationship projection | yes | yes | yes | yes |
| Change log projection | yes | yes | yes | yes |
| Query subset | document select only | document select only | document select only | document select only |
| Create document | no | yes | no | yes |
| Update properties | no | custom metadata only | no | custom metadata only |
| Set content stream | no | yes | no | yes |
| Delete object | no | delete-request lifecycle transition | no | delete-request lifecycle transition |
| Confidential/restricted visibility | hidden | hidden | service-account visible | hidden |
| AtomPub binding | deferred | deferred | deferred | deferred |
| Web Services binding | deferred | deferred | deferred | deferred |
Supported Query Subset
The MVP supports:
SELECT * FROM cmis:document
SELECT * FROM kontextual:document
Unsupported query grammar returns structured validation diagnostics. Full CMIS SQL joins and broader predicate parsing are intentionally deferred.
Compatibility Posture
This implementation is a CMIS 1.1 Browser Binding MVP, not a broad CMIS certification claim. It is suitable for:
- clients that can consume JSON Browser Binding-style repository, type, object, query, relationship, ACL, and change-log envelopes,
- controlled integrations that can target a specific profile,
- internal validation against deterministic fixtures,
- optional selected OpenCMIS TCK checks through
compat-tck.
It is not yet suitable for clients that require:
- AtomPub,
- SOAP/Web Services,
getDescendantsorgetFolderTree,- full CMIS SQL,
- mutating multifiling/unfiling,
- private-working-copy semantics,
- retention/hold mutation,
- rendition streams,
- bulk update properties,
- apply/remove policy,
- standard CMIS property mutation beyond
kontextual:metadata:<key>.
Optional OpenCMIS TCK
The optional harness boundary lives in:
tests/cmis/opencmis-tck/README.mdtests/cmis/opencmis-tck/tck-subset-map.jsontests/cmis/opencmis-tck/tck-result-template.json
Default Python tests validate the fixture/TCK mapping but do not execute Java/Maven. Optional TCK runs should target:
http://127.0.0.1:8000/cmis/compat-tck/browser
Record results using the compact result template and map failures back to capability groups before treating them as implementation bugs.
Operational Notes
- Hidden objects should be treated as not found by CMIS clients.
- Multiple parent folders are projection-only: assets may appear under several derived folder paths without changing canonical asset identity. The standard CMIS multifiling capability is advertised as unsupported because no add/remove filing mutation service is exposed.
- Relationship and change-log responses are filtered through the same visibility gates as object reads.
- Mutations always pass through engine services and produce normal engine audit events.
- Delete is a governed lifecycle transition to
delete_requested; after the transition the object is no longer exposed through CMIS reads. - Compatibility should be discussed per profile and per client rather than as a repo-wide binary property.