chore: complete v1.0 milestone
Archive 5 phases (36 plans) to milestones/v1.0-phases/. Archive roadmap, requirements, and audit to milestones/. Evolve PROJECT.md with shipped state and validated requirements. Collapse ROADMAP.md to one-line milestone summary. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
94
.planning/milestones/v1.0-phases/03-storage/03-02-SUMMARY.md
Normal file
94
.planning/milestones/v1.0-phases/03-storage/03-02-SUMMARY.md
Normal file
@@ -0,0 +1,94 @@
|
||||
---
|
||||
phase: 03
|
||||
plan: 02
|
||||
title: StorageService — CSOM StorageMetrics Scan Engine
|
||||
subsystem: storage
|
||||
tags: [csom, storage-metrics, scan-engine, c#]
|
||||
status: complete
|
||||
|
||||
dependency_graph:
|
||||
requires:
|
||||
- 03-01 (StorageNode, StorageScanOptions, IStorageService, export stubs, test scaffolds)
|
||||
provides:
|
||||
- StorageService (IStorageService implementation — CSOM scan engine)
|
||||
affects:
|
||||
- 03-07 (StorageViewModel will consume IStorageService via DI)
|
||||
|
||||
tech_stack:
|
||||
added: []
|
||||
patterns:
|
||||
- CSOM StorageMetrics loading pattern (ctx.Load with f => f.StorageMetrics expression)
|
||||
- ExecuteQueryRetryHelper.ExecuteQueryRetryAsync for all CSOM round-trips
|
||||
- Recursive subfolder scan with system folder filtering (Forms/, _-prefixed)
|
||||
- CancellationToken guard at top of every recursive step
|
||||
|
||||
key_files:
|
||||
created:
|
||||
- SharepointToolbox/Services/StorageService.cs
|
||||
- SharepointToolbox/Services/Export/StorageCsvExportService.cs
|
||||
- SharepointToolbox/Services/Export/StorageHtmlExportService.cs
|
||||
- SharepointToolbox/Services/Export/SearchCsvExportService.cs
|
||||
- SharepointToolbox/Services/Export/SearchHtmlExportService.cs
|
||||
- SharepointToolbox/Services/Export/DuplicatesHtmlExportService.cs
|
||||
- SharepointToolbox.Tests/Services/StorageServiceTests.cs
|
||||
- SharepointToolbox.Tests/Services/SearchServiceTests.cs
|
||||
- SharepointToolbox.Tests/Services/DuplicatesServiceTests.cs
|
||||
- SharepointToolbox.Tests/Services/Export/StorageCsvExportServiceTests.cs
|
||||
- SharepointToolbox.Tests/Services/Export/StorageHtmlExportServiceTests.cs
|
||||
- SharepointToolbox.Tests/Services/Export/SearchExportServiceTests.cs
|
||||
- SharepointToolbox.Tests/Services/Export/DuplicatesHtmlExportServiceTests.cs
|
||||
modified: []
|
||||
|
||||
decisions:
|
||||
- StorageService.VersionSizeBytes is derived (TotalSizeBytes - FileStreamSizeBytes, Math.Max 0) — not stored separately; set on StorageNode model
|
||||
- System folder filter uses Forms/ and _-prefix heuristic — matches SharePoint standard hidden folders
|
||||
- LastModified uses StorageMetrics.LastModified with fallback to Folder.TimeLastModified — StorageMetrics.LastModified may be DateTime.MinValue for empty libraries
|
||||
|
||||
metrics:
|
||||
duration: "1 min"
|
||||
completed_date: "2026-04-02"
|
||||
tasks_completed: 1
|
||||
files_created: 13
|
||||
files_modified: 0
|
||||
---
|
||||
|
||||
# Phase 3 Plan 02: StorageService — CSOM StorageMetrics Scan Engine Summary
|
||||
|
||||
**One-liner:** CSOM scan engine implementing IStorageService using Folder.StorageMetrics with recursive subfolder traversal and ExecuteQueryRetryAsync on every round-trip.
|
||||
|
||||
## What Was Built
|
||||
|
||||
`StorageService` is the concrete implementation of `IStorageService`. It takes an already-authenticated `ClientContext` from the ViewModel and:
|
||||
|
||||
1. Loads all web lists in one CSOM round-trip, filtering to visible document libraries
|
||||
2. For each library root folder, loads `Folder.StorageMetrics` (TotalSize, TotalFileStreamSize, TotalFileCount, LastModified) and `TimeLastModified` as fallback
|
||||
3. With `FolderDepth > 0`, recurses into subfolders up to the configured depth, skipping `Forms/` and `_`-prefixed system folders
|
||||
4. Returns a flat `IReadOnlyList<StorageNode>` where library roots are at `IndentLevel=0` and subfolders at `IndentLevel=1+`
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Auto-fixed Issues
|
||||
|
||||
**1. [Rule 3 - Blocking] Phase 3 export stubs and test scaffolds were absent**
|
||||
- **Found during:** Pre-task check for 03-01 prerequisites
|
||||
- **Issue:** Plan 03-01 models and interfaces existed on disk but the 5 export service stubs and 7 test scaffold files were not yet created, preventing `StorageServiceTests` from being discovered and the test filter commands from working
|
||||
- **Fix:** Created all 5 export stubs (`StorageCsvExportService`, `StorageHtmlExportService`, `SearchCsvExportService`, `SearchHtmlExportService`, `DuplicatesHtmlExportService`) and 7 test scaffold files as specified in plan 03-01
|
||||
- **Files modified:** 12 new files in `SharepointToolbox/Services/Export/` and `SharepointToolbox.Tests/Services/`
|
||||
- **Commit:** 08e4d2e
|
||||
|
||||
## Test Results
|
||||
|
||||
| Test Class | Passed | Skipped | Failed |
|
||||
|---|---|---|---|
|
||||
| StorageServiceTests | 2 (VersionSizeBytes) | 2 (CSOM) | 0 |
|
||||
| DuplicatesServiceTests | 5 (MakeKey) | 2 (CSOM) | 0 |
|
||||
|
||||
Build: 0 errors, 0 warnings.
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- FOUND: SharepointToolbox/Services/StorageService.cs
|
||||
- FOUND: SharepointToolbox/Services/Export/StorageCsvExportService.cs
|
||||
- FOUND: SharepointToolbox.Tests/Services/StorageServiceTests.cs
|
||||
- FOUND: commit b5df064 (feat(03-02): implement StorageService...)
|
||||
- FOUND: commit 08e4d2e (feat(03-01): create Phase 3 export stubs and test scaffolds)
|
||||
Reference in New Issue
Block a user