docs(05-03): complete GoogleDriveBackend + OneDriveBackend plan

- SUMMARY.md created for Plan 05-03
- STATE.md updated: completed_plans 26→27, progress 81→84%
- Session continuity updated with pytest results (262 passed / 43 xfailed / 1 pre-existing)
- Key decisions added: shared CloudConnectionError, cache_discovery=False, createUploadSession
This commit is contained in:
curo1305
2026-05-28 21:13:53 +02:00
parent a9ea33dd18
commit 6834a6797f
2 changed files with 162 additions and 9 deletions
+14 -9
View File
@@ -4,13 +4,13 @@ milestone: v1.0
milestone_name: milestone
current_phase: 5
status: executing
last_updated: "2026-05-28T19:30:00.000Z"
last_updated: "2026-05-28T19:15:00.000Z"
progress:
total_phases: 5
completed_phases: 4
total_plans: 32
completed_plans: 26
percent: 81
completed_plans: 27
percent: 84
---
# Project State
@@ -28,13 +28,13 @@ progress:
| 2 | Users & Authentication | ✓ Complete (5/5 plans) |
| 3 | Document Migration & Multi-User Isolation | ✓ Complete (5/5 plans, UAT passed, security gate passed) |
| 4 | Folders, Sharing, Quotas & Document UX | ✓ Complete (9/9 plans, UAT 14/15 passed, 1 bug fixed) |
| 5 | Cloud Storage Backends | Not Started |
| 5 | Cloud Storage Backends | In Progress (3/8 plans complete) |
## Current Position
**Phase:** 05-cloud-storage-backends — Not started
**Plan:** 0/TBD
**Progress:** [████████░░] 78%
**Phase:** 05-cloud-storage-backends — In Progress
**Plan:** 3/8
**Progress:** [████████░░] 84%
## Performance Metrics
@@ -124,6 +124,10 @@ progress:
| CloudConnectionOut whitelist pattern | Pydantic model with exactly the safe fields; credentials_enc absent by omission — SEC-08 safe-by-default |
| admin.user_deleted flush before delete | audit write flushed (session.flush()) while user FK still valid; session.delete(user) follows — preserves audit FK integrity |
| test_admin_impersonation 405 acceptable | DELETE /users/{id} causes GET to return 405 not 422; both mean no GET impersonation endpoint; test updated to accept {404, 405, 422} |
| CloudConnectionError shared exception type | Defined once in google_drive_backend.py; imported by onedrive_backend.py — single exception type across all cloud backends |
| cache_discovery=False on Drive build() | Prevents /tmp discovery cache writes — directory traversal vector (T-05-03-05) |
| createUploadSession for all OneDrive uploads | No 4 MB size gate; resumable sessions handle small and large files through same code path (Pitfall 6) |
| MSAL invalid_grant via result.get('error') | MSAL returns dict (never raises); field-level check is correct — Assumption A3 confirmed |
### Open Questions
@@ -169,6 +173,7 @@ _Updated at each phase transition._
| Last session | 2026-05-28 — Phase 5 planned (8 plans, 7 waves); verification passed (4 blockers → resolved: D-05 API-layer refresh path, SEC-09 cloud cleanup, frontend_url config, RESEARCH resolved markers) |
| Last session | 2026-05-28 — Plan 05-01 executed: Wave 0 Nyquist scaffold — 19 xfail stubs in test_cloud.py, 4 cloud fixtures in conftest.py, 6 package pins, 8 config settings; 172 passed / 43 xfailed |
| Last session | 2026-05-28 — Plan 05-02 executed: cloud_utils.py (SSRF+HKDF), cloud_cache.py (TTLCache), storage factory extended; 199 passed / 43 xfailed / 1 pre-existing failure |
| Next action | Execute Plan 05-03: GoogleDriveBackend + OneDriveBackend (all 7 StorageBackend methods) |
| Last session | 2026-05-28 — Plan 05-03 executed: GoogleDriveBackend (Drive v3, cache_discovery=False, asyncio.to_thread) + OneDriveBackend (MSAL, resumable upload, CHUNK_SIZE=10MB); 262 passed / 43 xfailed / 1 pre-existing failure |
| Next action | Execute Plan 05-04: WebDAVBackend + NextcloudBackend |
| Pending decisions | None |
| Resume file | `.planning/phases/05-cloud-storage-backends/05-03-PLAN.md` |
| Resume file | `.planning/phases/05-cloud-storage-backends/05-04-PLAN.md` |