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:
Dev
2026-04-07 09:15:14 +02:00
parent b815c323d7
commit 724fdc550d
959 changed files with 6852 additions and 728 deletions

View File

@@ -0,0 +1,53 @@
# Retrospective
## Milestone: v1.0 — MVP
**Shipped:** 2026-04-07
**Phases:** 5 | **Plans:** 36 | **Commits:** 164 | **LOC:** 10,071
### What Was Built
- Complete C#/WPF rewrite replacing 6,400-line PowerShell monolith
- 10 feature tabs: Permissions, Storage, Search, Duplicates, Transfer, Bulk Members, Bulk Sites, Folder Structure, Templates, Settings
- Multi-tenant MSAL authentication with per-tenant token caching
- CSV and interactive HTML export across all scan features
- Bulk operations with continue-on-error, per-item reporting, retry, and cancellation
- Self-contained 200 MB EXE with full EN/FR localization (199 keys)
### What Worked
- **Wave 0 scaffold pattern**: Creating models, interfaces, and test stubs before implementation gave every phase testable targets from day 1
- **FeatureViewModelBase contract**: Establishing the async/cancel/progress pattern in Phase 1 meant Phases 2-4 had zero friction adding new features
- **BulkOperationRunner abstraction**: One shared helper gave consistent error semantics across 4 different bulk operations
- **Phase dependency ordering**: Foundation → Permissions → Storage → Bulk → Hardening prevented rework
- **Atomic commits per task**: Each plan produced clear, reviewable commit history
### What Was Inefficient
- **Phase 03 missing verification**: The only phase without a VERIFICATION.md — caught during milestone audit, but should have been produced during execution
- **Stale audit notes**: Phase 2 verification reported export buttons as hardcoded English, but they were actually already localized by the time of the audit — suggests verification reads code at a point-in-time snapshot that may not reflect later fixes
- **Cancel test locale mismatch**: The French locale test failure was flagged in Phase 3 plan 08 summary but deferred until post-milestone cleanup — should have been fixed inline
### Patterns Established
- Write-then-replace JSON persistence with SemaphoreSlim for thread safety
- TranslationSource singleton with PropertyChanged(string.Empty) for runtime culture switching
- ExecuteQueryRetryHelper for throttle-aware CSOM calls (429/503 detection)
- SharePointPaginationHelper with ListItemCollectionPosition for 5,000+ item lists
- CsvValidationService with auto-delimiter detection (comma/semicolon) and BOM handling
- DataGrid RowStyle DataTrigger for invalid-row visual highlighting
### Key Lessons
- Establish shared infrastructure patterns (auth, retry, pagination, progress) in Phase 1 — every subsequent phase benefits
- Test scaffolds (Wave 0) eliminate the "no tests until the end" anti-pattern
- Phase verifications should be mandatory during execution, not optional — catching Phase 03's gap at audit time is late
- Localization tests (key parity + diacritic spot-checks) are cheap and catch real bugs
---
## Cross-Milestone Trends
| Metric | v1.0 |
|--------|------|
| Phases | 5 |
| Plans | 36 |
| LOC | 10,071 |
| Tests | 134 pass / 22 skip |
| Timeline | 28 days |
| Commits | 164 |