docs: create milestone v2.2 roadmap (5 phases, 11 requirements)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,12 +2,12 @@
|
||||
gsd_state_version: 1.0
|
||||
milestone: v2.2
|
||||
milestone_name: v2.2 Report Branding & User Directory
|
||||
status: defining-requirements
|
||||
stopped_at: Defining requirements
|
||||
status: roadmap-ready
|
||||
stopped_at: Roadmap created — ready to plan Phase 10
|
||||
last_updated: "2026-04-08T00:00:00Z"
|
||||
last_activity: 2026-04-08 — Milestone v2.2 started
|
||||
last_activity: 2026-04-08 — Roadmap created for v2.2 (Phases 10-14)
|
||||
progress:
|
||||
total_phases: 0
|
||||
total_phases: 5
|
||||
completed_phases: 0
|
||||
total_plans: 0
|
||||
completed_plans: 0
|
||||
@@ -20,17 +20,17 @@ progress:
|
||||
See: .planning/PROJECT.md (updated 2026-04-08)
|
||||
|
||||
**Core value:** Administrators can audit and manage SharePoint/Teams permissions and storage across multiple client tenants from a single, reliable desktop application.
|
||||
**Current focus:** v2.2 Report Branding & User Directory — HTML report logos, user directory browse mode
|
||||
**Current focus:** v2.2 Report Branding & User Directory — HTML report logos (Phases 10-12), user directory browse mode (Phases 13-14)
|
||||
|
||||
## Current Position
|
||||
|
||||
Phase: Not started (defining requirements)
|
||||
Phase: 10 (not started)
|
||||
Plan: —
|
||||
Status: Defining requirements
|
||||
Last activity: 2026-04-08 — Milestone v2.2 started
|
||||
Status: Roadmap ready — awaiting phase planning
|
||||
Last activity: 2026-04-08 — Roadmap created for v2.2
|
||||
|
||||
```
|
||||
v2.2 Progress: [░░░░░░░░░░] 0%
|
||||
v2.2 Progress: [░░░░░░░░░░] 0% (0/5 phases)
|
||||
```
|
||||
|
||||
## Accumulated Context
|
||||
@@ -39,15 +39,26 @@ v2.2 Progress: [░░░░░░░░░░] 0%
|
||||
|
||||
Decisions are logged in PROJECT.md Key Decisions table.
|
||||
|
||||
**v1.1 architectural notes:**
|
||||
- Global site selection (Phase 6) changes the toolbar; all tabs must bind to a shared `GlobalSiteSelectionViewModel` or equivalent. Use `WeakReferenceMessenger` for cross-tab site-changed notifications, consistent with v1.0 messenger usage.
|
||||
- Per-tab override (SITE-02) means each `FeatureViewModelBase` subclass stores a nullable local site override; null means "use global".
|
||||
- Storage Visualization (Phase 9) requires a WPF charting NuGet (LiveCharts2 recommended — actively maintained, WPF-native, self-contained friendly). Wire chart data binding to the existing storage scan result model.
|
||||
- Self-contained EXE constraint: charting library must not require runtime DLLs outside the publish output.
|
||||
**v2.2 architectural decisions (locked at roadmap):**
|
||||
- Logos stored as base64 strings in JSON (not file paths). `BrandingSettings.cs` holds MSP logo; `TenantProfile` holds client logo. File path is discarded after import. This decision is locked — all downstream phases depend on it.
|
||||
- Client logo lives on `TenantProfile`, NOT in `BrandingSettings`. Per-tenant ownership; prevents serialization and deletion awkwardness.
|
||||
- Export services use optional `ReportBranding? branding = null` parameter. All existing call sites compile unchanged. No new `IHtmlExportService` interface needed.
|
||||
- `GraphUserDirectoryService` is a new service, separate from `GraphUserSearchService`. Different pagination model (`PageIterator`), different cancellation needs.
|
||||
- Directory does NOT load automatically on tab open. Explicit "Load Directory" button required to avoid blocking UI on large tenants.
|
||||
- SVG logo support: rejected. XSS risk in data-URIs. PNG/JPG only.
|
||||
- No new NuGet packages for v2.2. All capabilities provided by existing stack (BCL, Microsoft.Graph 5.74.0, WPF PresentationCore).
|
||||
|
||||
**v1.1 architectural notes (carried forward):**
|
||||
- Global site selection (Phase 6) changes the toolbar; all tabs bind to shared `GlobalSiteSelectionViewModel`. `WeakReferenceMessenger` for cross-tab site-changed notifications.
|
||||
- Per-tab override (SITE-02): each `FeatureViewModelBase` subclass stores a nullable local site override; null means "use global".
|
||||
- Storage Visualization (Phase 9): LiveCharts2, WPF-native, self-contained friendly.
|
||||
|
||||
### Pending Todos
|
||||
|
||||
None.
|
||||
- Confirm `$filter=accountEnabled eq true and userType eq 'Member'` behavior without `ConsistencyLevel: eventual` against a real tenant before Phase 13 planning.
|
||||
- Verify Entra `bannerLogo` stream endpoint returns empty body (not HTTP 404) when no tenant branding is configured — determines error handling branch for BRAND-04 auto-pull.
|
||||
- Decide report header layout before Phase 11: logos side-by-side (current spec: `display: flex; gap: 16px`, MSP left + client right).
|
||||
- Decide "Load Directory" button placement before Phase 14: inside browse panel (recommended) or tab-level toolbar.
|
||||
|
||||
### Blockers/Concerns
|
||||
|
||||
@@ -56,5 +67,6 @@ None.
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-04-08
|
||||
Stopped at: Milestone v2.2 started — defining requirements
|
||||
Stopped at: Roadmap created for v2.2 — ready to plan Phase 10
|
||||
Resume file: None
|
||||
Next step: `/gsd:plan-phase 10`
|
||||
|
||||
Reference in New Issue
Block a user