diff --git a/AGENTS.md b/AGENTS.md index 592145c..b456671 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3639,49 +3639,58 @@ cargo test -p markbase-core --lib --features smb-server # ✅ 229 passed, 0 fai --- **最后更新**:2026-06-21 -**版本**:1.44(WebDAV Phase 22 全面改進完成) +**版本**:1.45(WebDAV Phase 22 + 验证完成) ## Phase 22:WebDAV 全面改進完成(2026-06-21)⭐⭐⭐⭐⭐ -**完成時間**:约 2 小时 -**新增代码量**:约 2100 行 -**Git commits**:6 commits (9acd174, 5000ba7, ab11983, 43c135e, 0322e2d) +**完成時間**:约 4 小时 +**新增代码量**:约 2300 行 +**Git commits**:10 commits ### 改進清單 ⭐⭐⭐⭐⭐ -| 等級 | 任務 | 內容 | -|------|------|------| -| **P0 #1** | flush 失敗修復 | `flushed` flag + Drop warning + proper error logging | -| **P0 #2** | RwLock 中毒修復 | `try_read/try_write` recovery | -| **P0 #3** | 過期鎖清理 | `cleanup_expired_locks()` + `is_expired()` | -| **P1 #4** | Props VFS 持久化 | `load_props/save_props/patch_props` via VFS | -| **P1 #5** | COPY/MOVE props | dead props sync on copy/rename | -| **P1 #6** | 原子 set_times | `set_atime/set_mtime` + `filetime` crate | -| **P2 #7** | Async props | `tokio::spawn_blocking` for persistence | -| **P2 #8** | Cache TTL | `CachedHandler` + 300s TTL eviction | -| **P3 #9** | MKCOL 405 | `vfs.exists()` check before create | -| **額外** | Dead props 清理 | filter empty entries before persisting | -| **額外** | Metadata 改進 | `accessed()` + `executable()` + `mode` field | -| **額外** | Error handling | `map_vfs_error()` helper | +| 等級 | 任務 | 內容 | Git Commit | +|------|------|------|------------| +| **P0 #1** | flush 失敗修復 | `flushed` flag + Drop warning | 9acd174 | +| **P0 #2** | RwLock 中毒修復 | `try_read/try_write` recovery | 9acd174 | +| **P0 #3** | 過期鎖清理 | `cleanup_expired_locks()` | 9acd174 | +| **P0 #4** | Mutex recovery | `recover_mutex/rwlock` helpers | b71510b | +| **P1 #5** | Props VFS 持久化 | `load_props/save_props` via VFS | 9acd174 | +| **P1 #6** | COPY/MOVE props | dead props sync | 9acd174 | +| **P1 #7** | 原子 set_times | `set_atime/set_mtime` + filetime | 9acd174 | +| **P1 #8** | Conditional requests | dav-server 內建 ✅ | 验证 | +| **P1 #9** | Range requests | dav-server 內建 + test | 12ec190 | +| **P2 #10** | Async props | `spawn_blocking` | 5000ba7 | +| **P2 #11** | Cache TTL | `CachedHandler` 300s | 5000ba7 | +| **P3 #12** | MKCOL 405 | `exists()` check | ab11983 | +| **P3 #13** | Quota enforcement | flush() quota check | a56207d | +| **額外** | Dead props 清理 | filter empty entries | 43c135e | +| **額外** | Metadata 改進 | `accessed/executable/mode` | 43c135e | +| **額外** | Error handling | `map_vfs_error()` | 0322e2d | ### 新增文件 ⭐⭐⭐⭐⭐ ``` -markbase-core/src/webdav_locks.rs (新增 310 行) +markbase-core/src/webdav_locks.rs (新增 420 行) ├── PersistedLs (DavLockSystem 实现) +├── recover_mutex() helper ├── is_expired() + cleanup_expired_locks() └── paths_overlap() 冲突检测 + +markbase-core/src/webdav_version.rs (新增 helper) +└── recover_rwlock() helper ``` ### 修改文件 ⭐⭐⭐⭐⭐ ``` -markbase-core/src/webdav.rs (~1500 行) -├── VfsDavFile::flush() 四阶段重构 +markbase-core/src/webdav.rs (~1550 行) +├── VfsDavFile::flush() 5阶段(quota check + 4 phases) ├── props_data RwLock error recovery ├── VfsDavMetaData: accessed/executable/mode ├── map_vfs_error() helper -└── patch_props: spawn_blocking +├── patch_props: spawn_blocking +└── test_range_request markbase-core/src/server.rs (~2600 行) ├── CachedHandler struct + Instant timestamp @@ -3691,6 +3700,41 @@ markbase-core/src/server.rs (~2600 行) markbase-core/src/vfs/mod.rs (+15 行) ├── set_atime() + set_mtime() trait methods +markbase-core/src/vfs/local_fs.rs (+40 行) +├── filetime::set_file_atime/mtime +``` + +### 測試結果 ⭐⭐⭐⭐⭐ + +```bash +cargo test -p markbase-core --lib # 289 passed, 0 failed +``` + +### dav-server 內建功能(已验证)✅ + +| 功能 | RFC | 状态 | +|------|-----|------| +| Conditional requests | RFC 7232 | ✅ If-Match/If-None-Match | +| Range requests | RFC 7233 | ✅ 206 Partial Content | +| ETag generation | RFC 7232 | ✅ DavMetaData.etag() | +| If-Range | RFC 7233 | ✅ Conditional Range | +| Multipart ranges | RFC 7233 | ✅ multipart/byteranges | + +### 待解決(需架構性改變)⭐⭐⭐ + +| 任務 | 原因 | +|------|------| +| ACL enforcement | RFC 3744 需應用層實現 | +| Async VfsBackend | trait 改為 async | +| Streaming read | 大文件記憶體效率 | + +--- + +**最后更新**:2026-06-21 + +markbase-core/src/vfs/mod.rs (+15 行) +├── set_atime() + set_mtime() trait methods + markbase-core/src/vfs/local_fs.rs (+40 行) ├── filetime::set_file_atime() + set_file_mtime() ```