3.3 KiB
gsd_state_version, milestone, milestone_name, status, stopped_at, last_updated, last_activity, progress
| gsd_state_version | milestone | milestone_name | status | stopped_at | last_updated | last_activity | progress | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.0 | v2.2 | v2.2 Report Branding & User Directory | roadmap-ready | Roadmap created — ready to plan Phase 10 | 2026-04-08T00:00:00Z | 2026-04-08 — Roadmap created for v2.2 (Phases 10-14) |
|
Project State
Project Reference
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 (Phases 10-12), user directory browse mode (Phases 13-14)
Current Position
Phase: 10 (not started) Plan: — Status: Roadmap ready — awaiting phase planning Last activity: 2026-04-08 — Roadmap created for v2.2
v2.2 Progress: [░░░░░░░░░░] 0% (0/5 phases)
Accumulated Context
Decisions
Decisions are logged in PROJECT.md Key Decisions table.
v2.2 architectural decisions (locked at roadmap):
- Logos stored as base64 strings in JSON (not file paths).
BrandingSettings.csholds MSP logo;TenantProfileholds client logo. File path is discarded after import. This decision is locked — all downstream phases depend on it. - Client logo lives on
TenantProfile, NOT inBrandingSettings. Per-tenant ownership; prevents serialization and deletion awkwardness. - Export services use optional
ReportBranding? branding = nullparameter. All existing call sites compile unchanged. No newIHtmlExportServiceinterface needed. GraphUserDirectoryServiceis a new service, separate fromGraphUserSearchService. 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.WeakReferenceMessengerfor cross-tab site-changed notifications. - Per-tab override (SITE-02): each
FeatureViewModelBasesubclass stores a nullable local site override; null means "use global". - Storage Visualization (Phase 9): LiveCharts2, WPF-native, self-contained friendly.
Pending Todos
- Confirm
$filter=accountEnabled eq true and userType eq 'Member'behavior withoutConsistencyLevel: eventualagainst a real tenant before Phase 13 planning. - Verify Entra
bannerLogostream 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
None.
Session Continuity
Last session: 2026-04-08
Stopped at: Roadmap created for v2.2 — ready to plan Phase 10
Resume file: None
Next step: /gsd:plan-phase 10