Scoped CMIS workspace folders with create, list, parent, path lookup, delete, and delete-tree behavior

This commit is contained in:
2026-05-08 16:47:30 +02:00
parent efb6152487
commit 06e3654aaa
6 changed files with 1103 additions and 23 deletions

View File

@@ -0,0 +1,123 @@
# CMIS WP-0014 OpenCMIS Evidence - 2026-05-08T13:44:32Z
## Scope
This note records the WP-0014 implementation evidence for raising CMIS 1.1
Browser Binding object/content maturity in `kontextual-engine`.
CMIS remains an adapter over native engine services. The work in this pass
focused on compatibility features that map naturally to existing assets,
representations, metadata, policy gates, and projection folders.
## Implemented
- Added profile-scoped adapter-managed workspace folders for CMIS-created
folders.
- Added Browser Binding `createFolder`, `createDocument`, `deleteTree`, and
singular `parent` selector handling.
- Added form-url-encoded and multipart Browser Binding action parsing without
introducing a new multipart dependency.
- Added document/folder path projection and Browser Binding `getObjectByPath`
support through the root selector.
- Tightened folder lifecycle so deleted workspace folders stop resolving as
phantom virtual folders.
- Returned full folder projections from `getObjectParents`, including
`cmis:path` for OpenCMIS `getPaths()`.
- Declared emitted document/folder custom properties in CMIS type metadata.
- Included CMIS document version/read-only properties expected by common CMIS
clients while keeping versioning operations unsupported.
- Prevented CMIS-authored documents from appearing multifiled when the
repository advertises `capabilityMultifiling=false`.
- Corrected document allowable actions so non-folder objects do not advertise
`canGetFolderParent`.
## Local Verification
Focused CMIS tests:
```bash
.venv/bin/python -m pytest tests/cmis --perf-history-disable
```
Result:
- `47 passed`
## OpenCMIS Run
Command shape:
```bash
cd /home/worsch/guide-board
source /home/worsch/open-cmis-tck/.local/toolchains/env.sh
PYTHONPATH=src python3 -m guide_board \
--extension-dir ../open-cmis-tck \
run \
--target /tmp/kontextual-cmis-compat-8010.json \
--assessment ../open-cmis-tck/profiles/assessments/cmis-browser-baseline.json \
--output-dir /tmp/open-cmis-tck-kontextual-wp14-20260508T134432Z
```
Result:
- Run ID: `run-20260508T134448Z`
- Run directory: `/tmp/open-cmis-tck-kontextual-wp14-20260508T134432Z`
- Harness status: `infrastructure_error`
- Scorecard: `/tmp/open-cmis-tck-kontextual-wp14-20260508T134432Z/reports/cmis-maturity-scorecard.md`
The scorecard still classifies the two mapped groups as infrastructure-blocked,
but the raw OpenCMIS output shows meaningful progress inside the test groups.
## Evidence Progression
Earlier WP-0014 runs stopped at foundational Browser Binding gaps:
- Unsupported `parent` selector.
- Folder custom properties declared by type metadata but missing from root
folder objects.
- Multipart `createDocument` action bodies not parsed because multipart
boundaries were lowercased.
- `deleteTree` unsupported during OpenCMIS cleanup.
- CMIS-created folders still resolving after deletion as generic virtual
folders.
- Document projections exposing undeclared custom fields such as
`kontextual:assetId`.
- OpenCMIS `getPaths()` failing because parent folder objects lacked
`cmis:path`.
The final run reaches deeper object/content behaviors:
- Repository info checks pass.
- Root folder test passes.
- Type definition enumeration runs.
- Document creation proceeds far enough to exercise update, move, delete-tree,
operation-context, and async object lookup tests.
- Delete-tree tests create many documents and report MIME warnings rather than
basic object-creation failures.
## Current Frontier
Remaining natural CMIS maturity items:
- Browser Binding action aliases: OpenCMIS sends `cmisaction=update` and
`cmisaction=move`; we currently expose `updateProperties` and do not support
move.
- Operation-context fidelity: `getObject()` and `getChildren()` currently
return more properties, ACLs, allowable actions, and path segments than
requested.
- MIME normalization: OpenCMIS expects `text/plain`; some created streams are
reported as `text/plain; charset=utf-8`.
- Async `getObjectByPath`: OpenCMIS async child/folder checks still hit a
`Not Found` path lookup case.
- Copy/move and secondary type mutation remain unsupported unless a later
workplan admits them.
## Interpretation
The adapter foundation is sounder after this pass. The failures are no longer
basic session, repository, folder-creatable, multipart action parsing, or parent
path hydration issues. They are now mostly CMIS client polish around action
aliases, response filtering, and optional ECM behaviors.
WP-0014 should remain active for follow-up maturity work, but the core
folder/object-content compatibility foundation is implemented.