Files
Sharepoint-Toolbox/.planning/ROADMAP.md
Dev 0bc0babaf8 docs(phase-11): complete phase execution and verification
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 14:56:13 +02:00

118 lines
8.3 KiB
Markdown

# Roadmap: SharePoint Toolbox v2
## Milestones
-**v1.0 MVP** — Phases 1-5 (shipped 2026-04-07) — [archive](milestones/v1.0-ROADMAP.md)
-**v1.1 Enhanced Reports** — Phases 6-9 (shipped 2026-04-08) — [archive](milestones/v1.1-ROADMAP.md)
- 🔄 **v2.2 Report Branding & User Directory** — Phases 10-14 (active)
## Phases
<details>
<summary>✅ v1.0 MVP (Phases 1-5) — SHIPPED 2026-04-07</summary>
- [x] Phase 1: Foundation (8/8 plans) — completed 2026-04-02
- [x] Phase 2: Permissions (7/7 plans) — completed 2026-04-02
- [x] Phase 3: Storage and File Operations (8/8 plans) — completed 2026-04-02
- [x] Phase 4: Bulk Operations and Provisioning (10/10 plans) — completed 2026-04-03
- [x] Phase 5: Distribution and Hardening (3/3 plans) — completed 2026-04-03
</details>
<details>
<summary>✅ v1.1 Enhanced Reports (Phases 6-9) — SHIPPED 2026-04-08</summary>
- [x] Phase 6: Global Site Selection (5/5 plans) — completed 2026-04-07
- [x] Phase 7: User Access Audit (10/10 plans) — completed 2026-04-07
- [x] Phase 8: Simplified Permissions (6/6 plans) — completed 2026-04-07
- [x] Phase 9: Storage Visualization (4/4 plans) — completed 2026-04-07
</details>
### v2.2 Report Branding & User Directory (Phases 10-14)
- [x] **Phase 10: Branding Data Foundation** — Models, repository, and services for logo storage and user directory enumeration (completed 2026-04-08)
- [x] **Phase 11: HTML Export Branding + ViewModel Integration** — Inject logos into all 5 HTML report types; wire branding into export-triggering ViewModels and logo management commands (completed 2026-04-08)
- [ ] **Phase 12: Branding UI Views** — Settings and profile dialog logo sections with live preview; auto-pull client logo from Entra branding API
- [ ] **Phase 13: User Directory ViewModel** — Browse mode state, paginated directory load, member/guest filter, and department/job title columns
- [ ] **Phase 14: User Directory View** — Toggle panel in UserAccessAuditView, user selection to trigger existing audit pipeline
## Phase Details
### Phase 10: Branding Data Foundation
**Goal**: The application can store, validate, and retrieve MSP and client logos as portable base64 strings in JSON, and can enumerate a full tenant user list with pagination.
**Depends on**: Nothing (additive to existing infrastructure)
**Requirements**: BRAND-01, BRAND-03, BRAND-06
**Success Criteria** (what must be TRUE):
1. An MSP logo imported as a PNG or JPG file is persisted as a base64 string in `branding.json` and survives an application restart
2. A client logo imported per tenant profile is persisted as a base64 string inside the tenant's profile JSON and is not affected by other tenants' profiles
3. A file larger than 512 KB or not a valid PNG/JPG is rejected at import time with an error; no invalid data reaches the JSON store
4. `GraphUserDirectoryService.GetUsersAsync` returns all enabled member users for a tenant, following `@odata.nextLink` until exhausted, without truncating at 999
**Plans**: 3 plans
Plans:
- [x] 10-01-PLAN.md — Logo models, BrandingRepository, BrandingService with validation/compression
- [x] 10-02-PLAN.md — GraphUserDirectoryService with PageIterator pagination
- [x] 10-03-PLAN.md — DI registration in App.xaml.cs and full test suite gate
### Phase 11: HTML Export Branding + ViewModel Integration
**Goal**: All five HTML reports display MSP and client logos in a consistent header, and administrators can manage logos from Settings and the profile dialog without touching the View layer.
**Depends on**: Phase 10
**Requirements**: BRAND-05, BRAND-04
**Success Criteria** (what must be TRUE):
1. Running any of the five HTML exports (Permissions, Storage, Search, Duplicates, User Access) produces an HTML file whose header contains the MSP logo `<img>` tag when an MSP logo is configured
2. When a client logo is configured for the active tenant, the same HTML export header contains both the MSP logo and the client logo side by side
3. When no logo is configured, the HTML export header contains no broken image placeholder and the report renders identically to the pre-branding output
4. SettingsViewModel exposes browse/clear commands for MSP logo; ProfileManagementViewModel exposes browse/clear commands for client logo — both commands are exercisable without opening any View
5. Auto-pulling the client logo from the tenant's Entra branding API stores the logo in the tenant profile and falls back silently when no Entra branding is configured
**Plans**: 4 plans
Plans:
- [ ] 11-01-PLAN.md — ReportBranding model + BrandingHtmlHelper static class with unit tests
- [ ] 11-02-PLAN.md — Add optional branding param to all 5 HTML export services
- [ ] 11-03-PLAN.md — Wire IBrandingService into all 5 export ViewModels
- [ ] 11-04-PLAN.md — Logo management commands (Settings + Profile) and Entra auto-pull
### Phase 12: Branding UI Views
**Goal**: Administrators can see, import, preview, and clear logos directly in the Settings and profile management dialogs.
**Depends on**: Phase 11
**Requirements**: BRAND-02, BRAND-04 (view layer for Entra pull)
**Success Criteria** (what must be TRUE):
1. Opening Settings shows the MSP logo section: an import button, a live thumbnail preview of the current logo, and a clear button that removes the logo immediately
2. Opening a tenant profile dialog shows the client logo section with the same import/preview/clear controls
3. Importing a logo via the UI shows the thumbnail preview without requiring an application restart
4. Clicking "Pull from Entra" in the profile dialog fetches and displays the tenant's banner logo if one exists, and shows a clear user-facing message if none is configured
**Plans**: TBD
### Phase 13: User Directory ViewModel
**Goal**: The UserAccessAuditViewModel supports a full directory browse mode with paginated load, member/guest filtering, and department/job title display, fully testable without the View.
**Depends on**: Phase 10
**Requirements**: UDIR-01, UDIR-02, UDIR-03, UDIR-04
**Success Criteria** (what must be TRUE):
1. `UserAccessAuditViewModel` exposes a toggle property that switches between Search mode (existing people-picker behavior) and Browse mode (directory list behavior), with no regression to Search mode behavior
2. Invoking the load-directory command fetches all enabled member users via `PageIterator`, updates a progress observable with the running user count, and supports cancellation mid-load
3. A "Members only / Include guests" toggle filters the displayed list in-memory without issuing a new Graph request
4. Each user row in the observable collection exposes DisplayName, UPN, Department, and JobTitle; Department and JobTitle columns are visible and sortable in the ViewModel's `ICollectionView`
**Plans**: TBD
### Phase 14: User Directory View
**Goal**: Administrators can toggle into directory browse mode from the user access audit tab, see the paginated user list with filters, and launch an access audit for a selected user.
**Depends on**: Phase 13
**Requirements**: UDIR-05, UDIR-01 (view layer)
**Success Criteria** (what must be TRUE):
1. The user access audit tab shows a mode toggle control (e.g., radio buttons or segmented control) that visibly switches the left panel between the existing people-picker and the directory browse panel
2. In browse mode, selecting a user from the directory list and clicking Run Audit (or equivalent) launches the existing audit pipeline for that user, producing the same results as if the user had been found via search
3. While the directory is loading, the panel shows a "Loading... X users" counter and an active cancel button; the load button is disabled to prevent concurrent requests
4. When the directory load is cancelled or fails, the panel returns to a ready state with a clear status message and no broken UI
**Plans**: TBD
## Progress
| Phase | Milestone | Plans | Status | Completed |
|-------|-----------|-------|--------|-----------|
| 1-5 | v1.0 | 36/36 | Shipped | 2026-04-07 |
| 6-9 | v1.1 | 25/25 | Shipped | 2026-04-08 |
| 10. Branding Data Foundation | v2.2 | 3/3 | Complete | 2026-04-08 |
| 11. HTML Export Branding + ViewModel Integration | 4/4 | Complete | 2026-04-08 | — |
| 12. Branding UI Views | v2.2 | 0/? | Not started | — |
| 13. User Directory ViewModel | v2.2 | 0/? | Not started | — |
| 14. User Directory View | v2.2 | 0/? | Not started | — |