fix(12.1): align cloud browser contract — kind, provider_item_id, server freshness
Normalized cloud frontend for DocuVault v0.2.5: - Cloud UI classifies items by kind=folder/file (is_dir removed from all active paths) - Folder navigation uses provider_item_id (opaque provider ref) — DocuVault id kept for row identity - Server freshness (refresh_state, last_refreshed_at) mapped verbatim — no browser-clock evidence - Breadcrumb lineage built from explicit visited nodes — never split(provider_item_id) - CloudFolderTreeItem: expandable/icon/navigate/loadChildren all use kind and provider_item_id - Version bump 0.2.4 → 0.2.5 - SECURITY.md: T-12.1-11 through T-12.1-15 closed - 369 tests pass, npm audit clean, production build clean
This commit is contained in:
+22
@@ -437,3 +437,25 @@ pytest -q backend/tests/test_cloud_items.py backend/tests/test_cloud.py backend/
|
||||
89 passed
|
||||
```
|
||||
Bandit over modified files (`services/cloud_items.py`, `api/cloud/browse.py`, `tasks/cloud_tasks.py`): 0 HIGH, 0 MEDIUM findings.
|
||||
|
||||
---
|
||||
|
||||
## Phase 12.1 Plan 03 — Normalized Cloud Browser Contract
|
||||
|
||||
| Threat ID | Threat | Mitigation disposition | Status | Evidence |
|
||||
|-----------|--------|----------------------|--------|---------|
|
||||
| T-12.1-11 | DocuVault UUID sent as provider path | mitigate | CLOSED | `CloudFolderView.navigateTo` uses `item.provider_item_id`; `CloudFolderTreeItem.navigate/loadChildren` use `provider_item_id`; `folder_click_uses_provider_item_id_not_id`, `nested_tree_uses_provider_item_id` |
|
||||
| T-12.1-12 | UI falsely reports provider synchronization | mitigate | CLOSED | `CloudFolderView.load()` maps `data.freshness.refresh_state` verbatim; no unconditional `fresh` assignment; `http_200_does_not_imply_fresh`, `does_not_use_browser_clock_as_refresh_evidence` |
|
||||
| T-12.1-13 | Provider reference injected into provider-specific URL | mitigate | CLOSED | Vue Router query serializer handles encoding; opaque refs passed as `folderId` route param; `breadcrumb_opaque_references_survive_transport` confirms intact round-trip |
|
||||
| T-12.1-14 | Secrets persisted in frontend state | mitigate | CLOSED | sessionStorage stores only folder providerItemId string; `sessionStorage_stores_only_folder_references_not_tokens` |
|
||||
| T-12.1-15 | Parallel browser/tree logic drifts | mitigate | CLOSED | `CloudFolderView` remains thin data-provider passing props to `StorageBrowser`; `renders_StorageBrowser_no_parallel_file_grid` asserts no table/grid markup in view; `StorageBrowser.skeleton.test.js` confirms shared component contract |
|
||||
|
||||
### Phase 12.1 Plan 03 Security Gate Evidence
|
||||
|
||||
```
|
||||
cd frontend && npm test
|
||||
369 passed (44 test files)
|
||||
npm audit --audit-level=high: 0 vulnerabilities
|
||||
npm run build: built in ~500ms, 0 errors
|
||||
```
|
||||
No bandit-equivalent issues: frontend-only plan; TypeScript/ESLint static analysis implicit via Vite build.
|
||||
|
||||
Reference in New Issue
Block a user