chore: complete v1.0 milestone
All checks were successful
Release zip package / release (push) Successful in 10s
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:
53
.planning/RETROSPECTIVE.md
Normal file
53
.planning/RETROSPECTIVE.md
Normal 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 |
|
||||
Reference in New Issue
Block a user