Skip to main content

Workspace files

Workspace files provide each authenticated user with a folder hierarchy for notebooks, Markdown, CSV, and other uploaded objects. Users can browse, create, open, save, rename, move, clone, download, share, trash, restore, and inspect file history according to their effective permissions.

See Architecture, evidence and reproduction, and component references.

Assessment scope​

FieldValue
ActorsWorkspace user, collaborator, workspace administrator, and platform operator
Components assessedsparqd/oqullus, sparqd/bff-api, sparqd/workspace-file-management-backend, PostgreSQL, S3 or OSS, and sparqd/platform-stacks
Assessed environmentRealm gj76anadpsc; workspace w-t5e2kcxjd; Kubernetes context dev-north-alicloud
Assessed baselinesOqullus integration source f76e57dbb88d; deployed BFF API 9b2fd45a4da1; deployed workspace-file backend 5dcbb222241b; platform-stacks a71390d12463
Newer backend reviewedf82d4cc7ad1f; not deployed in the assessed workspace
Last verified4 September 2026
Review statusEngineering assessment recorded; product, security, and operations validation not yet recorded

Notebook execution and kernel state are assessed separately. This assessment covers the file object and folder lifecycle, ACLs, storage, browser behavior, history, recovery, failure handling, and scale boundaries. Dashboard and saved SQL-query persistence are excluded because they use other resource models.

Conditions for the assessed path​

  • The user is authenticated in the workspace and the BFF can exchange a token for the workspace-file backend audience.
  • PostgreSQL and the configured workspace S3 or OSS bucket are reachable.
  • Create, upload, edit, rename, and move require effective Editor or Maintainer access; share and delete require Maintainer access.
  • Sharing targets direct users only. Group sharing is not part of the current contract.
  • The live evidence covers the AliCloud OSS deployment. AWS S3 behavior is source-backed through the alternate storage adapter, not a claim of identical deployed evidence.
  • Version History in w-t5e2kcxjd is activity metadata, not content recovery, until REL-WSF-001 is closed.

Current capability boundary​

CapabilityCurrent stateBoundary
Browse foldersAvailableFolder and shared-item responses are unpaginated
Create folders and filesAvailable inside a selected folderRoot-page actions use the wrong response field and can fail to resolve the user's root
Open and editNotebook, Markdown, and CSV paths are recognizedOther file types are storage/download objects; type presentation is inconsistent
SaveAvailable through full-object replacementNo optimistic concurrency; see REL-NB-006 in the notebook assessment
Rename and moveAvailable with stable public IDsFolder move validation is authoritative in the backend; the client tree is only advisory
CloneFiles onlyFolder copy is not implemented
UploadMultiple files acceptedFull files traverse browser, BFF memory, and backend; no explicit size or concurrency boundary
DownloadFiles onlyFull content traverses backend and BFF and becomes a browser Blob although a direct resolve endpoint exists
ShareDirect user grants with viewer, editor, or maintainer roleNo group grants; copied list-view link is invalid; member selection is limited to the first 100 account members
Trash and restoreSoft delete, restore, and permanent delete existDestination is inferred and may be silently changed after failure; Trash paging, conflict recovery, cleanup deployment, and retained object versions are incomplete
History, diff, and revertUI and API are exposedNot operational in w-t5e2kcxjd: 173/173 history rows lack an object-version ID; diff can falsely succeed by comparing current content to itself, and View Changes ambiguously means selected-versus-newest rather than the change introduced by a revision
SearchBackend file search existsThe visible search only filters the currently loaded folder; backend search is unused by Oqullus
FavoritesUI is exposedReact-state only; it disappears on navigation or reload and has no backend model

Critical journeys​

JourneyRequired result
Browse and openShow only authorized children and distinguish an empty folder from a failed request
Create and uploadResolve the intended parent, enforce limits, report each file independently, and avoid duplicate or orphaned objects
Save and concurrent editReject stale writes or provide explicit conflict recovery
Rename and movePreserve canonical identity, open tabs, inherited access, and valid paths
Share and open linkGrant the intended resource and produce an authenticated canonical deep link
Unauthorized accessDeny metadata, content, history, and workflow output without leaking resource data
Large transferKeep BFF and browser memory bounded and expose progress, cancellation, timeout, and retry
Delete and restoreState retention, restore target, conflicts, and permanent deletion truthfully
History and revertRetain retrievable content versions and prove a selected version can be restored
Backend or storage failurePreserve visible prior state, identify partial completion, and offer a safe retry
Large folder or workspacePage and filter before materializing the complete authorized result set

Findings​

Each linked finding contains the concrete case, expected condition, alternatives, component involvement, reproduction, and closure conditions.

IDFindingComponentsEvidenceImpact
SEC-WSF-001Authorize workflow output notebooks against the selected runWorkspace file backend, workflow authorization, BFF APISource-verifiedCritical
REL-WSF-001Make exposed history, diff, and revert recover contentWorkspace file backend, platform-stacks, object storage, OqullusLive aggregate + sourceCritical
DATA-WSF-001Reconcile PostgreSQL metadata with object-storage mutationsWorkspace file backend, object storageSource-verifiedHigh
DATA-WSF-002Key roots and ACLs by an immutable identity subjectWorkspace file backend, identity/account services, OqullusSource-verifiedHigh
PERF-WSF-001Bound upload and download memory and concurrencyOqullus, BFF API, workspace file backend, object storageSource-verifiedHigh
PERF-WSF-002Page and authorize before materializing listsWorkspace file backend, BFF API, OqullusSource-verifiedHigh at scale
OPS-WSF-001Protect workspace metadata capacity and recoveryPlatform stacks, KubeBlocks PostgreSQL, workspace file backendSource-verifiedCritical recovery boundary
UX-WSF-001Use one root response contract for root actionsOqullus, BFF API, workspace file backendSource-verifiedHigh
PROD-WSF-001Hide or complete Search and FavoritesOqullus, workspace file backendSource-verifiedMedium
UX-WSF-002Share the selected resource with a canonical deep linkOqullus, BFF API, workspace file backendSource-verifiedHigh
REL-WSF-002Do not present request failure as empty stateOqullus, BFF APISource-verifiedHigh
REL-WSF-003Report partial multi-file upload outcomesOqullus, BFF API, workspace file backendSource-verifiedMedium
REL-WSF-004Fail closed when historical diff content is unavailableWorkspace file backend, object storage, OqullusSource + live data shapeHigh
UX-WSF-003Require the user to confirm restore destination and nameOqullus, workspace file backend, BFF APISource-verifiedHigh
UX-WSF-004Separate changes introduced by a revision from comparison with currentOqullus, workspace file backendSource-verifiedMedium
LIFE-WSF-001Operate trash and object-version retention end to endWorkspace file backend, platform-stacks, object storageLive deployment + sourceHigh
PROD-WSF-002Define supported file types consistentlyOqullus, workspace file backendSource-verifiedMedium

Findings are observations, not accepted implementation commitments. Open design and validation work remains explicit in each finding.

Interim workarounds​

  • Enter the user's root folder before creating or importing an item.
  • Treat Version History as metadata-only in w-t5e2kcxjd; keep an external copy before destructive edits because diff and revert cannot retrieve prior bytes.
  • Avoid simultaneous edits and large uploads. Upload files individually and refresh after any mixed success or failure.
  • Open shared resources from the Workspace tree. Do not rely on the link copied by the list-view Share dialog.
  • Refresh before concluding a folder, Trash, or permission list is empty after a request error.
  • After Restore, locate the item and verify its parent; the current client can retry a different destination after the first request fails.
  • Use folder-local search as a filter only; it is not workspace-wide search.

Assessment maturity​

Scale: 0 absent, 1 ad hoc, 2 partly documented or automated, 3 routinely verified, 4 measured and improving.

LensScoreEvidence-backed assessment
Product and UX1Core operations exist, but root actions, sharing identity, Search, Favorites, file types, and failure states are inconsistent.
Architecture and data1Canonical IDs and ACL inheritance exist; history bytes and cross-store consistency are not assured.
Security and privacy1File/folder ACL enforcement exists; workflow output authorization has a source-confirmed gap and lacks controlled validation.
Infrastructure and operations1Two API replicas and one PostgreSQL replica are deployed; database recovery, cleanup, lifecycle enforcement, reconciliation, and operation metrics are not established for this feature.
Reliability and performance1Small happy paths work; transfer and listing limits are neither enforced nor measured, and partial failure recovery is incomplete.
Delivery, cost, and lifecycle1Exact deployed commits are recorded; storage retention, capacity boundaries, reviewer decisions, and ongoing verification are open.