chore: complete v1.0 milestone
All checks were successful
Release zip package / release (push) Successful in 10s

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:
Dev
2026-04-07 09:15:14 +02:00
parent b815c323d7
commit 655bb79a99
95 changed files with 610 additions and 332 deletions

View File

@@ -0,0 +1,141 @@
---
phase: 03-storage
plan: 01
subsystem: testing
tags: [csharp, xunit, moq, interfaces, models, storage, search, duplicates]
# Dependency graph
requires:
- phase: 02-permissions
provides: Phase 2 export service pattern, test scaffold pattern with Wave 0 stubs
provides:
- 7 core data models (StorageNode, StorageScanOptions, SearchResult, SearchOptions, DuplicateItem, DuplicateGroup, DuplicateScanOptions)
- 3 service interfaces (IStorageService, ISearchService, IDuplicatesService) enabling Moq-based unit tests
- 5 export service stubs (StorageCsvExportService, StorageHtmlExportService, SearchCsvExportService, SearchHtmlExportService, DuplicatesHtmlExportService) — compile-only skeletons
- 7 test scaffold files — 7 pure-logic tests pass, 15 export tests fail as expected (stubs), 4 CSOM tests skip
affects: [03-02, 03-03, 03-04, 03-05, 03-06, 03-07, 03-08]
# Tech tracking
tech-stack:
added: []
patterns:
- Wave 0 scaffold pattern — models + interfaces + stubs first, implementation in subsequent plans
- Inline pure-logic test helper (MakeKey) — tests composite-key logic before service class exists
- StorageNode.VersionSizeBytes as derived property (Math.Max(0, Total - FileStream)) — never negative
key-files:
created:
- SharepointToolbox/Core/Models/StorageNode.cs
- SharepointToolbox/Core/Models/StorageScanOptions.cs
- SharepointToolbox/Core/Models/SearchResult.cs
- SharepointToolbox/Core/Models/SearchOptions.cs
- SharepointToolbox/Core/Models/DuplicateItem.cs
- SharepointToolbox/Core/Models/DuplicateGroup.cs
- SharepointToolbox/Core/Models/DuplicateScanOptions.cs
- SharepointToolbox/Services/IStorageService.cs
- SharepointToolbox/Services/ISearchService.cs
- SharepointToolbox/Services/IDuplicatesService.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: []
key-decisions:
- "StorageNode.VersionSizeBytes is a derived property (Math.Max(0, TotalSizeBytes - FileStreamSizeBytes)) — not stored separately"
- "MakeKey composite key logic tested inline in DuplicatesServiceTests before Plan 03-04 creates the real class"
- "Export service stubs return string.Empty — compile-only skeletons until Plans 03-03 and 03-05 implement real logic"
patterns-established:
- "Wave 0 scaffold pattern: models + interfaces + export stubs created first; all subsequent plans have dotnet test --filter targets from day 1"
- "Pure-logic tests with inline helpers: test deterministic functions (MakeKey, VersionSizeBytes) before service classes exist"
requirements-completed: [STOR-01, STOR-02, STOR-03, STOR-04, STOR-05, SRCH-01, SRCH-02, SRCH-03, SRCH-04, DUPL-01, DUPL-02, DUPL-03]
# Metrics
duration: 10min
completed: 2026-04-02
---
# Phase 3 Plan 01: Wave 0 — Test Scaffolds, Stub Interfaces, and Core Models Summary
**7 core Phase 3 models, 3 service interfaces (IStorageService, ISearchService, IDuplicatesService), 5 export stubs, and 7 test scaffold files — 7 pure-logic tests pass immediately, 15 export tests fail as expected pending Plans 03-03/05**
## Performance
- **Duration:** ~10 min
- **Started:** 2026-04-02T13:22:11Z
- **Completed:** 2026-04-02T13:32:00Z
- **Tasks:** 2
- **Files modified:** 22 created
## Accomplishments
- Created all 7 data models defining Phase 3 contracts (storage, search, duplicate detection)
- Created 3 service interfaces enabling Moq-based ViewModel unit tests in Plans 03-07/08
- Created 5 export service stubs so test files compile before implementation; 7 pure-logic tests pass immediately (VersionSizeBytes + MakeKey composite key function)
- All 7 test scaffold files in place — subsequent plan verification commands have targets from day 1
## Task Commits
Each task was committed atomically:
1. **Task 1: Create all 7 core models and 3 service interfaces** - `b52f60f` (feat)
2. **Task 2: Create 5 export service stubs and 7 test scaffold files** - `08e4d2e` (feat)
**Plan metadata:** _(docs commit follows)_
## Files Created/Modified
- `SharepointToolbox/Core/Models/StorageNode.cs` - Tree node model with VersionSizeBytes derived property
- `SharepointToolbox/Core/Models/StorageScanOptions.cs` - Record for storage scan configuration
- `SharepointToolbox/Core/Models/SearchResult.cs` - Flat result record for file search output
- `SharepointToolbox/Core/Models/SearchOptions.cs` - Record for search filter parameters
- `SharepointToolbox/Core/Models/DuplicateItem.cs` - Item record for duplicate detection
- `SharepointToolbox/Core/Models/DuplicateGroup.cs` - Group record with composite key
- `SharepointToolbox/Core/Models/DuplicateScanOptions.cs` - Record for duplicate scan configuration
- `SharepointToolbox/Services/IStorageService.cs` - Interface for storage metrics collection
- `SharepointToolbox/Services/ISearchService.cs` - Interface for file search
- `SharepointToolbox/Services/IDuplicatesService.cs` - Interface for duplicate detection
- `SharepointToolbox/Services/Export/StorageCsvExportService.cs` - CSV export stub for storage
- `SharepointToolbox/Services/Export/StorageHtmlExportService.cs` - HTML export stub for storage
- `SharepointToolbox/Services/Export/SearchCsvExportService.cs` - CSV export stub for search
- `SharepointToolbox/Services/Export/SearchHtmlExportService.cs` - HTML export stub for search
- `SharepointToolbox/Services/Export/DuplicatesHtmlExportService.cs` - HTML export stub for duplicates
- `SharepointToolbox.Tests/Services/StorageServiceTests.cs` - 2 real tests (VersionSizeBytes), 2 CSOM stubs skip
- `SharepointToolbox.Tests/Services/SearchServiceTests.cs` - 3 CSOM stub tests skip
- `SharepointToolbox.Tests/Services/DuplicatesServiceTests.cs` - 5 real MakeKey tests pass, 2 CSOM stubs skip
- `SharepointToolbox.Tests/Services/Export/StorageCsvExportServiceTests.cs` - 3 tests fail until Plan 03-03
- `SharepointToolbox.Tests/Services/Export/StorageHtmlExportServiceTests.cs` - 3 tests fail until Plan 03-03
- `SharepointToolbox.Tests/Services/Export/SearchExportServiceTests.cs` - 6 tests fail until Plan 03-05
- `SharepointToolbox.Tests/Services/Export/DuplicatesHtmlExportServiceTests.cs` - 3 tests fail until Plan 03-05
## Decisions Made
- StorageNode.VersionSizeBytes is a derived property using Math.Max(0, Total - FileStream) — negative values clamped to zero, not stored separately
- MakeKey composite key logic is tested inline in DuplicatesServiceTests before Plan 03-04 creates the real class — avoids skipping all duplicate logic tests
- Export service stubs return string.Empty until implemented — compile without errors, enable test project to build
## Deviations from Plan
None - plan executed exactly as written. Task 1 files (models + interfaces) and Task 2 files (export stubs + test scaffolds) were all present from a prior planning commit; verified content matches plan specification exactly and build + tests pass.
## Issues Encountered
- Some files in Task 2 were pre-created during the Phase 3 research/planning commit (08e4d2e). Content verified to match plan specification exactly — no remediation needed.
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- All Phase 3 service contracts defined — Plan 03-02 can implement StorageService against IStorageService
- Test scaffold targets available: `dotnet test --filter "FullyQualifiedName~StorageServiceTests"` for each feature area
- 7 pure-logic tests pass, 15 export tests fail as expected (stubs), 4 CSOM tests skip — correct Wave 0 state
---
*Phase: 03-storage*
*Completed: 2026-04-02*