UX-WSF-001 — Use one root response contract
| Field | Value |
|---|---|
| Status | Open; source-verified |
| Severity | High |
| Components | sparqd/oqullus, sparqd/bff-api, sparqd/workspace-file-management-backend |
| Associated issues | Not opened |
Concrete observed case
GET /workspace/v2/users returns {folders: [...]}. General browsing accepts
folders, but root import, toolbar import, save/save-as fallback, and restore
fallback read roots || data. Oqullus tests mock {roots: [...]}, masking the
contract mismatch. Create-folder also requires a selected parent while the
root-page selection is empty.
Expected condition
One typed response contract resolves the signed-in user's own root explicitly. Root actions must not choose the first visible root, especially for platform administrators who can see multiple roots.
Why it matters
Create, import, save-as, and restore can fail at the Workspace landing page or target a different visible user's root if selection falls back to the first row.
Existing controls and workarounds
Enter the signed-in user's root folder before running a parent-dependent action.
Alternatives considered
- Recommended: return and consume an explicit
own_rootplus separately paged visible roots. - Standardize every caller on
foldersand select by owner. - Preserve multiple aliases — rejected because it continues hiding drift.
Component involvement
- The backend returns an explicit, typed own-root identity.
- BFF API documents and preserves the response contract.
- Oqullus consumes one schema in every root resolver and uses contract fixtures in tests.
Reproduction and verification
Follow WSF-S001.
Resolution conditions
Close when contract tests use the real response schema and all create, import, save-as, and restore paths target the correct root from the root page.
Validation and blockers
The mismatch is source-confirmed. A disposable live create/import check remains to prove every visible entry point on the deployed UI.