Update AGENTS.md: Phase 22 complete with 10 commits summary
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled

This commit is contained in:
Warren
2026-06-21 18:31:08 +08:00
parent a56207db0b
commit 2a0376cc58

View File

@@ -3639,49 +3639,58 @@ cargo test -p markbase-core --lib --features smb-server # ✅ 229 passed, 0 fai
---
**最后更新**2026-06-21
**版本**1.44WebDAV Phase 22 全面改進完成)
**版本**1.45WebDAV Phase 22 + 验证完成)
## Phase 22WebDAV 全面改進完成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()
```