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

@@ -2,66 +2,75 @@
## What This Is
A full C#/WPF rewrite of an existing PowerShell-based SharePoint Online administration and auditing tool. The app lets IT administrators manage permissions, analyze storage, search files, detect duplicates, manage site templates, and perform bulk operations across SharePoint Online and Teams sites. It's a local desktop tool used by MSPs and IT teams managing multiple client tenants.
A C#/WPF desktop application for IT administrators and MSPs to audit and manage SharePoint Online permissions, storage, files, and sites across multiple client tenants. Replaces a 6,400-line monolithic PowerShell script with a structured 10,071-line MVVM application shipping as a single self-contained EXE.
## Core Value
Administrators can audit and manage SharePoint/Teams permissions and storage across multiple client tenants from a single, reliable desktop application.
## Current State
**Shipped:** v1.0 MVP (2026-04-07)
**Status:** Feature-complete for v1 parity with original PowerShell tool
Tech stack: C# / WPF / .NET 10 / PnP Framework / Microsoft Graph SDK / MSAL / Serilog / CommunityToolkit.Mvvm
Tests: 134 automated (xUnit), 22 skipped (require live SharePoint tenant)
Distribution: 200 MB self-contained EXE (win-x64)
## Requirements
### Validated
(None yet — ship to validate)
- Full C#/WPF rewrite of all existing PowerShell features — v1.0
- Multi-tenant authentication with cached sessions — v1.0
- Thorough error handling (per-item reporting, no silent failures) — v1.0
- Modular architecture (separate files per feature area, DI, MVVM) — v1.0
- Self-contained single EXE distribution — v1.0
### Active
- [ ] Full C#/WPF rewrite of all existing PowerShell features
- [ ] Multi-tenant authentication with cached sessions (switch between client tenants instantly)
- [ ] Export all SharePoint/Teams accesses a specific user has across selected sites
- [ ] Simplified permissions reports (plain language, summary views, reduced jargon for untrained users)
- [ ] Storage metrics graph by file type (pie/donut and bar chart, toggleable) in Storage Metrics tab
- [ ] Thorough error handling cleanup (eliminate silent failures, proper error reporting)
- [ ] Modular architecture (separate files per feature area)
- [ ] Self-contained single EXE distribution (no .NET runtime dependency)
- [ ] Export all SharePoint/Teams accesses a specific user has across selected sites (UACC-01/02)
- [ ] Simplified permissions reports (plain language, summary views) (SIMP-01/02/03)
- [ ] Storage metrics graph by file type (pie/donut and bar chart, toggleable) (VIZZ-01/02/03)
### Out of Scope
- Cross-platform support (Mac/Linux) — Windows-only desktop tool, MAUI/Avalonia not justified
- Cross-platform support (Mac/Linux) — WPF is Windows-only; not justified for current user base
- SQLite or database storage — JSON sufficient for config, profiles, and templates
- Web-based UI — must remain a local desktop application
- Cloud/SaaS deployment — local tool by design
- Mobile support — desktop admin tool
- Real-time monitoring / alerts — requires background service, beyond scope
- Automated remediation (auto-revoke) — liability risk
- Content migration between tenants — separate product category
## Context
- **Existing codebase:** 6,400-line monolithic PowerShell script (`Sharepoint_ToolBox.ps1`) with WinForms UI
- **Current features to port:** Permissions reports, storage metrics, site templates, file search, duplicate detection, bulk operations (transfer, site creation, member addition), folder structure creation, localization (EN/FR)
- **SharePoint integration:** Currently uses PnP.PowerShell module; C# rewrite will use PnP Framework / Microsoft Graph SDK
- **Authentication:** Currently interactive Azure AD OAuth via PnP; new version needs multi-tenant session caching
- **Known issues in current app:** 38 silent catch blocks, 27 error suppressions, resource cleanup issues, UI freezes on large datasets, no operation cancellation
- **Localization:** English and French supported, key-based translation system
- **Report exports:** CSV and interactive HTML reports with embedded JS for sorting/filtering
- **v1.0 shipped** with full feature parity: permissions, storage, search, duplicates, bulk operations, templates, folder provisioning
- **Known tech debt:** FeatureTabBase dead code removed post-v1.0; bulk DataGrid row highlighting added post-v1.0; cancel test locale fix applied post-v1.0
- **Localization:** 199 EN/FR keys, full parity verified
- **Architecture:** 106 C# files + 16 XAML files across Core/Infrastructure/Services/ViewModels/Views layers
## Constraints
- **Platform:** Windows desktop only — WPF requires Windows
- **Distribution:** Self-contained EXE (~150MB) — no .NET runtime dependency for end users
- **Auth method:** Interactive browser-based Azure AD login (no client secrets or certificates stored)
- **Data storage:** JSON files for profiles, settings, templates — same format as current app for migration
- **SharePoint API:** PnP Framework / Microsoft Graph SDK for C# (replaces PnP.PowerShell)
- **Distribution:** Self-contained EXE (~200 MB) — no .NET runtime dependency
- **Auth method:** Interactive browser-based Azure AD login (no client secrets stored)
- **Data storage:** JSON files for profiles, settings, templates
- **SharePoint API:** PnP Framework / Microsoft Graph SDK
- **Local only:** No telemetry, no cloud services, no external dependencies at runtime
## Key Decisions
| Decision | Rationale | Outcome |
|----------|-----------|---------|
| Rewrite to C#/WPF instead of improving PowerShell | Better async/await, proper OOP, richer UI, better tooling — worth the investment for long-term maintainability | — Pending |
| WPF over WinForms | Modern data binding, MVVM pattern, richer styling for better UX | — Pending |
| Self-contained EXE | Users shouldn't need to install .NET runtime — simplifies distribution to clients | — Pending |
| Keep JSON storage | Simple, human-readable, sufficient for config/profiles — no need for SQLite complexity | — Pending |
| Multi-tenant session caching | MSP workflow requires fast switching between client tenants without re-authenticating each time | — Pending |
| Pie + bar chart toggle for storage | Gives users flexibility to view data in preferred format | — Pending |
| Rewrite to C#/WPF instead of improving PowerShell | Better async/await, proper OOP, richer UI, better tooling | ✓ Good — 10k LOC structured app vs 6.4k monolithic script |
| WPF over WinForms | Modern data binding, MVVM pattern, richer styling | ✓ Good — clean separation of concerns |
| Self-contained EXE | Users shouldn't need to install .NET runtime | ✓ Good — 200 MB single file, zero dependencies |
| Keep JSON storage | Simple, human-readable, sufficient for config/profiles | ✓ Good — atomic write-then-replace pattern works well |
| Multi-tenant session caching | MSP workflow requires fast switching between tenants | ✓ Good — per-clientId MSAL PCA with MsalCacheHelper |
| BulkOperationRunner pattern | Continue-on-error with per-item results for all bulk ops | ✓ Good — consistent error handling across 4 bulk features |
| Wave 0 scaffold pattern | Models + interfaces + test stubs before implementation | ✓ Good — all phases had test targets from day 1 |
---
*Last updated: 2026-04-02 after initialization*
*Last updated: 2026-04-07 after v1.0 milestone*