Files
kontextual-engine/workplans/KONT-WP-0014-cmis-object-content-maturity.md

445 lines
16 KiB
Markdown

---
id: KONT-WP-0014
type: workplan
title: "CMIS Object/Content Maturity Expansion"
domain: markitect
repo: kontextual-engine
status: completed
owner: codex
topic_slug: markitect
planning_priority: high
planning_order: 14
created: "2026-05-08"
updated: "2026-05-14"
state_hub_workstream_id: "ccfa90ee-be23-499b-a727-451a0d289df7"
---
# KONT-WP-0014: CMIS Object/Content Maturity Expansion
## Purpose
Raise the evidence-backed CMIS 1.1 Browser Binding object/content maturity
score in ways that fit `kontextual-engine` naturally. This workplan is now
closed around repository/type and object/content compatibility. Broader
read-side maturity for navigation, query, relationships, ACL discovery, and
change-token contracts has been split into `KONT-WP-0016`.
## Trigger
The fresh OpenCMIS assessment on 2026-05-08 completed successfully:
- Run ID: `run-20260508T103313Z`
- Maturity score: `23.81`
- Coverage: `2/9` groups
- `repository-type`: `38 pass`, `2 info`, `2 skipped`, `1 warning`, `0 fail`
- `object-content`: `22 skipped`, `0 fail`
The remaining useful maturity blocker is not Browser Binding session creation
anymore. It is capability depth: OpenCMIS skips object/content checks because
`cmis:folder` is not creatable in the compatibility profile.
## References
- `docs/cmis-opencmis-tck-implementation-evidence-2026-05-08T092113Z.md`
- `docs/cmis-1-1-capability-scorecard.md`
- `docs/cmis-profiled-access-points-implementation.md`
- `docs/blob-storage-content-streaming-workplan.md`
- `workplans/KONT-WP-0012-cmis-profiled-access-points.md`
- `workplans/KONT-WP-0013-cmis-browser-binding-tck-compatibility.md`
- `src/kontextual_engine/core/cmis.py`
- `src/kontextual_engine/api/app.py`
- `tests/cmis/`
- `/home/worsch/open-cmis-tck/profiles/assessments/cmis-browser-baseline.json`
## Architecture Boundary
CMIS remains an adapter over the native engine. Native asset identity,
classification, source grounding, representation/blob storage, policy, audit,
and workflow services remain authoritative.
Allowed architectural moves:
- Add a profile-scoped CMIS workspace/folder registry if needed for CMIS client
compatibility.
- Treat CMIS-created folders as adapter-managed workspace objects, not as the
engine's canonical knowledge organization model.
- Delegate CMIS document, metadata, and content mutations to existing engine
services.
- Improve Browser Binding request/response shape around capabilities the engine
already owns.
- Use conservative unsupported flags and diagnostics for advanced CMIS areas.
Disallowed architectural moves:
- Do not add AtomPub or Web Services bindings.
- Do not build a full ECM filing model, repository permission model, mutable
type system, PWC/checkin/checkout stack, or broad CMIS SQL engine unless a
later workplan justifies it.
- Do not bypass profile gates, policy decisions, audit events, blob
deduplication, or source-grounded asset semantics for TCK convenience.
## Desired Outcome
- OpenCMIS `object-content` checks execute beyond the current
`cmis:folder is not creatable` skip boundary.
- CMIS Browser Binding object/content actions use standard selector/action
shapes while still delegating to native services.
- Content stream read/write behavior is more compatible and better documented.
- The maturity scorecard is updated from fresh TCK evidence, with remaining
unsupported features explicitly classified.
## Implementation Evidence - 2026-05-08
Evidence file:
- `docs/cmis-opencmis-tck-wp0014-evidence-2026-05-08T134432Z.md`
Implemented in this pass:
- Profile-scoped CMIS workspace folder registry.
- Browser Binding `createFolder`, multipart/form `createDocument`,
`deleteTree`, `parent`, and `getObjectByPath` support.
- Workspace folder deletion that removes adapter-managed folders rather than
falling back to phantom virtual folder projections.
- Full parent folder projections for `getObjectParents`, including `cmis:path`
for OpenCMIS `getPaths()`.
- Document/folder type metadata alignment for emitted CMIS and Kontextual
properties.
- CMIS document version/read-side property projection while keeping versioning
operations unsupported.
- Single-parent projection for CMIS-authored documents when repository
multifiling remains advertised as unsupported.
Latest verification:
- Internal: `.venv/bin/python -m pytest tests/cmis --perf-history-disable`
-> `47 passed`.
- OpenCMIS: `run-20260508T134448Z` in
`/tmp/open-cmis-tck-kontextual-wp14-20260508T134432Z`.
Current external frontier:
- OpenCMIS now reaches action/operation-context maturity gaps:
`cmisaction=update`, `cmisaction=move`, filter trimming, async
`getObjectByPath`, and MIME normalization.
These are follow-up maturity items rather than the original folder-creatable
blocker.
## Implementation Evidence - 2026-05-08T15:33:16Z
Evidence file:
- `docs/cmis-opencmis-tck-wp0014-evidence-2026-05-08T153316Z.md`
Implemented in this pass:
- Browser Binding action aliases and path-addressed routes:
`cmisaction=update`, `cmisaction=move`, and `/browser/root/{path}`.
- MIME normalization and explicit content stream `Content-Type` headers.
- Metadata-backed standard property support for `cmis:name`,
`cmis:description`, and `cmis:secondaryObjectTypeIds`.
- Create-time secondary type id projection and invalid document type rejection.
- Removal of non-standard document `cmis:path` while preserving folder paths.
Latest verification:
- Internal: `.venv/bin/python -m pytest tests/cmis -q` -> `48 passed`.
- OpenCMIS: `run-20260508T153316Z` in
`/tmp/open-cmis-tck-kontextual-wp14-20260508T153146Z`.
- Maturity score: `19.05`; coverage remains `2/9` groups.
- `repository-type` is now partial/warning; `object-content` remains
infrastructure-blocked by concrete CRUD/content edge cases.
Current external frontier:
- `getObjectByPath` path-segment failures in child checks.
- No-content document content-stream semantics.
- Operation-context/property filter trimming, especially folder `cmis:path`.
- `bulkUpdate`, `deleteContent`, and change-token unsupported-action handling.
## Implementation Evidence - 2026-05-08T16:43:34Z
Evidence file:
- `docs/cmis-opencmis-tck-wp0014-evidence-2026-05-08T164334Z.md`
Implemented in this pass:
- Correct `relativePathSegment` behavior for document parents.
- Browser Binding operation-context trimming for property filters, allowable
actions, ACLs, and path segments.
- Total-count `numItems` semantics for Browser Binding children.
- Stable adapter-managed folder object IDs across folder rename/update.
- Nullable no-content document stream properties and empty compatibility streams.
- Range-aware content responses with sliced bodies, `206`, and `Content-Range`.
- `setContent` and `deleteContent` Browser Binding action aliases.
Latest verification:
- Internal focused CMIS tests: `20 passed`.
- Full suite: `160 passed, 14 skipped`.
- OpenCMIS: `run-20260508T164334Z` in
`/tmp/open-cmis-tck-kontextual-wp14-20260508T1643Z`.
- `repository-type`: `38 pass`, `2 info`, `1 skipped`, `1 warning`.
- `object-content`: `12 info`, `5 skipped`, `3 warning`, `3 fail`,
`3 infrastructure_error`.
Current external frontier:
- CMIS-specific exception mapping for invalid type operations.
- `bulkUpdateProperties` remains unsupported.
- `deleteContentStream` needs stronger representation-removal/tombstone
semantics.
- Change-token conflict behavior is not implemented.
- `createDocumentFromSource`/copy remains unsupported.
- Offset-zero range requests are still marked partial.
## Implementation Evidence - 2026-05-13T21:02:55Z
Evidence file:
- `docs/cmis-opencmis-tck-wp0014-evidence-2026-05-13T210255Z.md`
Implemented in this pass:
- CMIS Browser Binding exception mapping for `invalidArgument`, `constraint`,
`updateConflict`, `notSupported`, `objectNotFound`, and `permissionDenied`.
- `bulkUpdateProperties` for the `compat-tck` profile, using the existing
CMIS property update path and per-object change-token checks.
- Stronger `deleteContentStream` tombstone semantics with content-change
versioning and CMIS `constraint` responses for post-delete stream reads.
- Change-token conflict handling for property/content mutations.
- `createDocumentFromSource`/copy using representation blob-reference reuse.
- Offset-zero range classification as a full-stream response.
Latest verification:
- Internal CMIS suite: `.venv/bin/python -m pytest tests/cmis -q`
-> `55 passed`.
- Full suite: `.venv/bin/python -m pytest -q` -> `165 passed`,
`14 skipped`.
- OpenCMIS: `run-20260513T210255Z` in
`/tmp/open-cmis-tck-kontextual-20260513T230205Z`.
- Guide Board status: `completed`, with `0` unexpected findings.
- `repository-type`: `38 pass`, `2 info`, `1 skipped`, `1 warning`.
- `object-content`: `10 info`, `5 skipped`, `1 warning`.
Release-warning pass:
- OpenCMIS: `run-20260513T223537Z` in
`/tmp/kontextual-cmis-release-20260514-toolchain`.
- Guide Board status: `completed`, with `0` unexpected findings.
- `repository-type`: `38 pass`, `2 info`, `1 skipped`, `1 warning`.
- `object-content`: `10 info`, `5 skipped`, `0 warning`.
- Warning-adjusted selected-baseline score improved from `98.3%` to `99.1%`.
Current external frontier:
- The selected OpenCMIS Browser Binding repository/type and object/content
baseline is completed with warnings only.
- The only remaining warning is local HTTP instead of HTTPS.
- Further maturity work has been split into `KONT-WP-0016` so read-side
contracts can be designed deliberately before first release.
## D14.1 - Define CMIS maturity boundary and TCK profile semantics
```task
id: KONT-WP-0014-T001
status: done
priority: high
state_hub_task_id: "333f8ea0-0582-467d-a52d-7ef5cf6f34c0"
```
Acceptance:
- Document which maturity improvements are natural for `kontextual-engine` and
which remain out of scope.
- Define the `compat-tck` profile's special responsibilities, including whether
it may expose adapter-managed folders solely for compatibility.
- Update capability flags and unsupported-feature diagnostics so they match the
intended profile boundary before implementation starts.
## D14.2 - Design scoped virtual folder registry for compat profile
```task
id: KONT-WP-0014-T002
status: done
priority: high
state_hub_task_id: "30d02544-0325-490e-84d7-ebaa3825ee78"
```
Acceptance:
- A virtual folder registry design exists for CMIS-created workspace folders.
- Folder identity, parentage, lifecycle, visibility, path lookup, and audit
behavior are specified.
- The design keeps projection folders and CMIS-created workspace folders
distinguishable.
- Persistence expectations are explicit: in-memory first is acceptable for TCK
compatibility only if the follow-up durable boundary is documented.
## D14.3 - Implement createFolder and folder lifecycle in the CMIS adapter
```task
id: KONT-WP-0014-T003
status: done
priority: high
state_hub_task_id: "b5324bcb-67fe-4f28-9591-83e6361bfd01"
```
Acceptance:
- Browser Binding `createFolder` works for profiles that explicitly allow it.
- Read-only profiles still reject folder creation.
- Created folders can be retrieved, listed under parents, resolved by path, and
deleted or lifecycle-marked according to the profile.
- Folder operations emit audit/progress evidence and preserve actor context.
- OpenCMIS object/content tests no longer skip solely because `cmis:folder` is
not creatable.
## D14.4 - Complete Browser Binding object/content action parity
```task
id: KONT-WP-0014-T004
status: done
priority: high
state_hub_task_id: "f9323c25-4d81-42cd-b7e6-e40d7e0487cd"
```
Acceptance:
- Browser Binding action/form routes cover the supported subset of
`createDocument`, `setContentStream`, `updateProperties`, `deleteObject`, and
`getContentStream`.
- The implementation delegates to existing asset, metadata, content, policy, and
audit services.
- Unsupported standard `cmis:*` property mutations return CMIS-shaped
diagnostics rather than native validation leakage.
- Internal route tests exercise OpenCMIS-style action requests in addition to
existing convenience routes.
## D14.5 - Improve content stream fidelity
```task
id: KONT-WP-0014-T005
status: done
priority: medium
state_hub_task_id: "5feb6db8-24eb-4c20-8c3e-d530f396ef6a"
```
Acceptance:
- Content stream reads support headers expected by common CMIS clients,
including content length, content type, ETag, and content disposition.
- Range reads are supported or explicitly rejected with a clear standard-shaped
response.
- `appendContentStream` and `deleteContentStream` are either implemented
naturally through blob services or explicitly advertised as unsupported.
- Blob deduplication and digest verification remain intact.
Progress:
- Done for normal reads, no-content compatibility streams, partial body slicing,
`Content-Length`, `Content-Type`, `ETag`, and `Content-Range`.
- Done for `deleteContentStream` tombstone semantics and offset-zero range
classification.
- Done for Browser Binding `appendContent` / `appendContentStream` as
whole-object append through the deduplicating representation service, with a
composed-size guard.
## D14.6 - Transferred: natural navigation and query depth
```task
id: KONT-WP-0014-T006
status: cancelled
priority: medium
state_hub_task_id: "b1562023-807b-4fed-b794-6930fcc2274e"
```
Disposition:
- Removed from WP-0014 active scope and transferred to `KONT-WP-0016`.
- Historical partial progress remains useful input for the new workplan:
`getObjectByPath`, `getFolderParent`, parent path segments, and folder rename
path stability are already implemented.
## D14.7 - Transferred: relationships, ACL discovery, and change tokens
```task
id: KONT-WP-0014-T007
status: cancelled
priority: medium
state_hub_task_id: "60f7b222-6eea-4add-822d-3439d568d4f6"
```
Disposition:
- Removed from WP-0014 active scope and transferred to `KONT-WP-0016`.
- Historical partial progress remains useful input for the new workplan:
CMIS property/content mutation change-token conflict handling is already
implemented.
## D14.9 - Resolve OpenCMIS object/content blocker set
```task
id: KONT-WP-0014-T009
status: done
priority: high
state_hub_task_id: "3c075537-e05f-4240-acab-18c1d60a8efe"
```
Acceptance:
- Resolve or explicitly classify the remaining OpenCMIS object/content
blockers: CMIS exception mapping, `bulkUpdateProperties`,
`deleteContentStream`, change-token conflict handling,
`createDocumentFromSource`/copy, and offset-zero range classification.
- Rerun the OpenCMIS `repository-type` and `object-content` baseline.
- Persist the timestamped results and update the CMIS scorecard.
Progress:
- Done. The selected baseline now completes with warnings only and no
unexpected findings.
## D14.8 - Expand OpenCMIS assessment and update maturity scorecard
```task
id: KONT-WP-0014-T008
status: done
priority: high
state_hub_task_id: "c9514345-793c-489e-9dcc-86776db47cf4"
```
Acceptance:
- Rerun `repository-type` and `object-content` after folder/action changes.
- Persist a timestamped assessment result with normalized case counts and
capability interpretation.
- Expand selected OpenCMIS groups only after the baseline remains stable.
- Update `docs/cmis-1-1-capability-scorecard.md` from evidence, separating
preparation score, controlled-client usefulness, and market benchmark depth.
- Register final task/workstream status with State Hub.
## Suggested Implementation Order
1. Confirm profile boundary and capability flags.
2. Design and implement virtual folder registry plus `createFolder`.
3. Align Browser Binding object/content actions with OpenCMIS request shapes.
4. Rerun `object-content` and classify concrete failures.
5. Improve content stream fidelity if failures or common-client expectations
point there.
6. Transfer broader read-side maturity to `KONT-WP-0016`.
7. Expand TCK coverage and update the scorecard.
## Definition Of Done
- Internal CMIS tests pass.
- OpenCMIS baseline completes with object/content cases executing beyond the
previous folder-creatable skip.
- New object/content failures are classified by capability area and either
fixed or documented as unsupported by design.
- Documentation and State Hub reflect the evidence-backed maturity delta.
- Broader read-side maturity is tracked in `KONT-WP-0016` rather than remaining
open inside this object/content workplan.