docs(phase-4): complete 04-03-PLAN.md — Folders API + audit helper
- Create 04-03-SUMMARY.md with full frontmatter, decisions, threat surface scan - Update STATE.md: plan 3/9, new decisions, session continuity - Update ROADMAP.md: mark 04-01, 04-02, 04-03 plans complete (3/9) - Update REQUIREMENTS.md: mark FOLD-01..FOLD-05 complete
This commit is contained in:
+9
-4
@@ -27,13 +27,13 @@ progress:
|
||||
| 1 | Infrastructure Foundation | ✓ Complete |
|
||||
| 2 | Users & Authentication | ✓ Complete (5/5 plans) |
|
||||
| 3 | Document Migration & Multi-User Isolation | ✓ Complete (5/5 plans, 10/10 UAT, security gate passed) |
|
||||
| 4 | Folders, Sharing, Quotas & Document UX | In Progress (1/9 plans complete) |
|
||||
| 4 | Folders, Sharing, Quotas & Document UX | In Progress (3/9 plans complete) |
|
||||
| 5 | Cloud Storage Backends | Not Started |
|
||||
|
||||
## Current Position
|
||||
|
||||
**Phase:** 04-folders-sharing-quotas-document-ux — In progress
|
||||
**Plan:** 2/9 — Wave 0 scaffolds complete (04-01); migration 0004 + put_object_raw complete (04-02)
|
||||
**Plan:** 3/9 — Wave 0 scaffolds (04-01), migration 0004 + put_object_raw (04-02), Folders API + audit helper (04-03)
|
||||
**Progress:** ██████░░░░ 60% (3/5 phases complete)
|
||||
|
||||
## Performance Metrics
|
||||
@@ -108,6 +108,10 @@ progress:
|
||||
| Wave 0 stubs: single-line body only | All Phase 4 stubs: body is only pytest.xfail("not implemented yet") — no assertion code; strict=False so xpass never breaks CI |
|
||||
| GIN index via op.execute() raw SQL | Alembic autogenerate cannot round-trip expression indexes; raw SQL with comment prevents re-creation on every --autogenerate run (issue #1390) |
|
||||
| put_object_raw not in StorageBackend ABC | audit-logs bucket is MinIO-only; local/WebDAV backends have no audit concept; MinIOBackend-only method |
|
||||
| write_audit_log uses session.flush() | D-14: caller owns the transaction; flush queues the audit entry without committing — commit remains caller's responsibility |
|
||||
| Breadcrumb uses iterative Python parent-walk | Not WITH RECURSIVE — ensures SQLite unit tests pass; cycle guard (visited set) prevents infinite loop on malformed data |
|
||||
| document_move_router is a separate APIRouter | PATCH /api/documents/{id}/folder placed in folders.py not documents.py; separate router with /api/documents prefix avoids circular import |
|
||||
| FTS plainto_tsquery wrapped in try/except | SQLite silently degrades to unfiltered results when plainto_tsquery unavailable; PostgreSQL works fully — no unit test breakage |
|
||||
|
||||
### Open Questions
|
||||
|
||||
@@ -146,6 +150,7 @@ _Updated at each phase transition._
|
||||
| Last session | 2026-05-25 — Phase 4 plans created (9 plans, 7 waves) + verification passed (0 blockers, 2 warnings) |
|
||||
| Last session | 2026-05-25 — Plan 04-01 executed: 30 Wave 0 xfail stubs across 5 test files; 39 xfailed total, zero new failures |
|
||||
| Last session | 2026-05-25 — Plan 04-02 executed: migration 0004 (pdf_open_mode, GIN FTS index, audit-logs bucket) + MinIOBackend.put_object_raw(); 122 tests pass |
|
||||
| Next action | Continue Wave 1 execution: run plan 04-03 |
|
||||
| Last session | 2026-05-25 — Plan 04-03 executed: write_audit_log() helper (flush-not-commit, never-raises) + FOLD-01..05 folder API + document sort/FTS/move; 122 pass, 0 new failures |
|
||||
| Next action | Continue Wave 2 execution: run plan 04-04 (shares API) |
|
||||
| Pending decisions | None |
|
||||
| Resume file | `.planning/phases/04-folders-sharing-quotas-document-ux/04-02-SUMMARY.md` |
|
||||
| Resume file | `.planning/phases/04-folders-sharing-quotas-document-ux/04-03-SUMMARY.md` |
|
||||
|
||||
Reference in New Issue
Block a user