docs(01-01): complete solution scaffold plan — SUMMARY, STATE, ROADMAP updated
- 01-01-SUMMARY.md created with deviations, decisions, and metrics - STATE.md: progress 13% (1/8 plans), 3 decisions added, metrics recorded - ROADMAP.md: Phase 1 marked In Progress (1/8 summaries) - REQUIREMENTS.md: FOUND-01 marked complete
This commit is contained in:
@@ -9,7 +9,7 @@ Requirements for initial release. Each maps to roadmap phases.
|
|||||||
|
|
||||||
### Foundation
|
### Foundation
|
||||||
|
|
||||||
- [ ] **FOUND-01**: Application built with C#/WPF (.NET 10 LTS) using MVVM architecture
|
- [x] **FOUND-01**: Application built with C#/WPF (.NET 10 LTS) using MVVM architecture
|
||||||
- [ ] **FOUND-02**: Multi-tenant profile registry — user can create, rename, delete, and switch between tenant profiles (tenant URL, client ID, display name)
|
- [ ] **FOUND-02**: Multi-tenant profile registry — user can create, rename, delete, and switch between tenant profiles (tenant URL, client ID, display name)
|
||||||
- [ ] **FOUND-03**: Multi-tenant session caching — user stays authenticated across tenant switches without re-logging in (MSAL token cache per tenant)
|
- [ ] **FOUND-03**: Multi-tenant session caching — user stays authenticated across tenant switches without re-logging in (MSAL token cache per tenant)
|
||||||
- [ ] **FOUND-04**: Interactive Azure AD OAuth login via browser — no client secrets or certificates stored
|
- [ ] **FOUND-04**: Interactive Azure AD OAuth login via browser — no client secrets or certificates stored
|
||||||
@@ -115,7 +115,7 @@ Which phases cover which requirements. Updated during roadmap creation.
|
|||||||
|
|
||||||
| Requirement | Phase | Status |
|
| Requirement | Phase | Status |
|
||||||
|-------------|-------|--------|
|
|-------------|-------|--------|
|
||||||
| FOUND-01 | Phase 1 | Pending |
|
| FOUND-01 | Phase 1 | Complete |
|
||||||
| FOUND-02 | Phase 1 | Pending |
|
| FOUND-02 | Phase 1 | Pending |
|
||||||
| FOUND-03 | Phase 1 | Pending |
|
| FOUND-03 | Phase 1 | Pending |
|
||||||
| FOUND-04 | Phase 1 | Pending |
|
| FOUND-04 | Phase 1 | Pending |
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5
|
|||||||
|
|
||||||
| Phase | Plans Complete | Status | Completed |
|
| Phase | Plans Complete | Status | Completed |
|
||||||
|-------|----------------|--------|-----------|
|
|-------|----------------|--------|-----------|
|
||||||
| 1. Foundation | 0/8 | Planning done | - |
|
| 1. Foundation | 1/8 | In Progress| |
|
||||||
| 2. Permissions | 0/? | Not started | - |
|
| 2. Permissions | 0/? | Not started | - |
|
||||||
| 3. Storage and File Operations | 0/? | Not started | - |
|
| 3. Storage and File Operations | 0/? | Not started | - |
|
||||||
| 4. Bulk Operations and Provisioning | 0/? | Not started | - |
|
| 4. Bulk Operations and Provisioning | 0/? | Not started | - |
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
---
|
||||||
|
gsd_state_version: 1.0
|
||||||
|
milestone: v1.0
|
||||||
|
milestone_name: milestone
|
||||||
|
status: planning
|
||||||
|
stopped_at: Completed 01-foundation-01-PLAN.md
|
||||||
|
last_updated: "2026-04-02T10:04:03.489Z"
|
||||||
|
last_activity: 2026-04-02 — Roadmap created, requirements mapped, all 42 v1 requirements assigned to phases
|
||||||
|
progress:
|
||||||
|
total_phases: 5
|
||||||
|
completed_phases: 0
|
||||||
|
total_plans: 8
|
||||||
|
completed_plans: 1
|
||||||
|
percent: 13
|
||||||
|
---
|
||||||
|
|
||||||
# Project State
|
# Project State
|
||||||
|
|
||||||
## Project Reference
|
## Project Reference
|
||||||
@@ -14,7 +30,7 @@ Plan: 0 of ? in current phase
|
|||||||
Status: Ready to plan
|
Status: Ready to plan
|
||||||
Last activity: 2026-04-02 — Roadmap created, requirements mapped, all 42 v1 requirements assigned to phases
|
Last activity: 2026-04-02 — Roadmap created, requirements mapped, all 42 v1 requirements assigned to phases
|
||||||
|
|
||||||
Progress: [░░░░░░░░░░] 0%
|
Progress: [█░░░░░░░░░] 13%
|
||||||
|
|
||||||
## Performance Metrics
|
## Performance Metrics
|
||||||
|
|
||||||
@@ -34,6 +50,7 @@ Progress: [░░░░░░░░░░] 0%
|
|||||||
- Trend: —
|
- Trend: —
|
||||||
|
|
||||||
*Updated after each plan completion*
|
*Updated after each plan completion*
|
||||||
|
| Phase 01-foundation P01 | 4 | 2 tasks | 14 files |
|
||||||
|
|
||||||
## Accumulated Context
|
## Accumulated Context
|
||||||
|
|
||||||
@@ -46,6 +63,9 @@ Recent decisions affecting current work:
|
|||||||
- Foundation: Use MsalCacheHelper for per-tenant token cache serialization — scope IPublicClientApplication per ClientId
|
- Foundation: Use MsalCacheHelper for per-tenant token cache serialization — scope IPublicClientApplication per ClientId
|
||||||
- Foundation: Never set PublishTrimmed=true — PnP.Framework and MSAL use reflection; accept ~150-200 MB EXE
|
- Foundation: Never set PublishTrimmed=true — PnP.Framework and MSAL use reflection; accept ~150-200 MB EXE
|
||||||
- Foundation: Establish AsyncRelayCommand + IProgress<T> + CancellationToken patterns before any feature work — retrofitting is the most expensive WPF refactor
|
- Foundation: Establish AsyncRelayCommand + IProgress<T> + CancellationToken patterns before any feature work — retrofitting is the most expensive WPF refactor
|
||||||
|
- [Phase 01-foundation]: Upgraded MSAL from 4.83.1 to 4.83.3 — Extensions.Msal 4.83.3 requires MSAL >= 4.83.3; minor patch with no behavioral difference
|
||||||
|
- [Phase 01-foundation]: Test project targets net10.0-windows with UseWPF=true — required to reference WPF main project; net10.0 is framework-incompatible
|
||||||
|
- [Phase 01-foundation]: Solution uses .slnx format (new .NET 10 XML solution) — dotnet new sln creates .slnx by default in .NET 10 SDK
|
||||||
|
|
||||||
### Pending Todos
|
### Pending Todos
|
||||||
|
|
||||||
@@ -59,6 +79,6 @@ None yet.
|
|||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-04-02
|
Last session: 2026-04-02T10:04:03.486Z
|
||||||
Stopped at: Roadmap created, STATE.md initialized — ready to run /gsd:plan-phase 1
|
Stopped at: Completed 01-foundation-01-PLAN.md
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
|||||||
161
.planning/phases/01-foundation/01-01-SUMMARY.md
Normal file
161
.planning/phases/01-foundation/01-01-SUMMARY.md
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
---
|
||||||
|
phase: 01-foundation
|
||||||
|
plan: 01
|
||||||
|
subsystem: infra
|
||||||
|
tags: [wpf, dotnet10, msal, pnp-framework, serilog, xunit, generic-host, csharp]
|
||||||
|
|
||||||
|
# Dependency graph
|
||||||
|
requires: []
|
||||||
|
provides:
|
||||||
|
- WPF .NET 10 solution scaffold (SharepointToolbox.slnx)
|
||||||
|
- Generic Host entry point with [STAThread] Main and Serilog rolling file sink
|
||||||
|
- All NuGet packages pre-wired (CommunityToolkit.Mvvm, MSAL, PnP.Framework, Serilog)
|
||||||
|
- xUnit test project with 7 stub test files (0 failed, 7 skipped)
|
||||||
|
affects:
|
||||||
|
- 01-02 (folder structure builds on this scaffold)
|
||||||
|
- 01-03 (ProfileService/SettingsService tests stubbed here)
|
||||||
|
- 01-04 (MsalClientFactory/SessionManager tests stubbed here)
|
||||||
|
- 01-05 (TranslationSource/LoggingIntegration tests stubbed here)
|
||||||
|
- 01-06 (FeatureViewModelBase tests stubbed here)
|
||||||
|
|
||||||
|
# Tech tracking
|
||||||
|
tech-stack:
|
||||||
|
added:
|
||||||
|
- CommunityToolkit.Mvvm 8.4.2
|
||||||
|
- Microsoft.Extensions.Hosting 10.0.0
|
||||||
|
- Microsoft.Identity.Client 4.83.3
|
||||||
|
- Microsoft.Identity.Client.Extensions.Msal 4.83.3
|
||||||
|
- Microsoft.Identity.Client.Broker 4.82.1
|
||||||
|
- PnP.Framework 1.18.0
|
||||||
|
- Serilog 4.3.1
|
||||||
|
- Serilog.Sinks.File 7.0.0
|
||||||
|
- Serilog.Extensions.Hosting 10.0.0
|
||||||
|
- Moq 4.20.72 (test project)
|
||||||
|
- xunit 2.9.3 (test project)
|
||||||
|
patterns:
|
||||||
|
- Generic Host entry point via static [STAThread] Main (not Application.Run override)
|
||||||
|
- App.xaml demoted from ApplicationDefinition to Page (enables custom Main)
|
||||||
|
- PublishTrimmed=false enforced to support PnP.Framework + MSAL reflection usage
|
||||||
|
- net10.0-windows + UseWPF=true in both main and test projects for compatibility
|
||||||
|
|
||||||
|
key-files:
|
||||||
|
created:
|
||||||
|
- SharepointToolbox.slnx
|
||||||
|
- SharepointToolbox/SharepointToolbox.csproj
|
||||||
|
- SharepointToolbox/App.xaml
|
||||||
|
- SharepointToolbox/App.xaml.cs
|
||||||
|
- SharepointToolbox/MainWindow.xaml
|
||||||
|
- SharepointToolbox/MainWindow.xaml.cs
|
||||||
|
- SharepointToolbox.Tests/SharepointToolbox.Tests.csproj
|
||||||
|
- SharepointToolbox.Tests/Services/ProfileServiceTests.cs
|
||||||
|
- SharepointToolbox.Tests/Services/SettingsServiceTests.cs
|
||||||
|
- SharepointToolbox.Tests/Auth/MsalClientFactoryTests.cs
|
||||||
|
- SharepointToolbox.Tests/Auth/SessionManagerTests.cs
|
||||||
|
- SharepointToolbox.Tests/ViewModels/FeatureViewModelBaseTests.cs
|
||||||
|
- SharepointToolbox.Tests/Localization/TranslationSourceTests.cs
|
||||||
|
- SharepointToolbox.Tests/Integration/LoggingIntegrationTests.cs
|
||||||
|
modified: []
|
||||||
|
|
||||||
|
key-decisions:
|
||||||
|
- "Upgraded MSAL from 4.83.1 to 4.83.3 — Extensions.Msal 4.83.3 requires MSAL >= 4.83.3; minor patch bump with no behavioral difference"
|
||||||
|
- "Test project targets net10.0-windows with UseWPF=true — required to reference main WPF project; plain net10.0 is framework-incompatible"
|
||||||
|
- "Solution uses .slnx format (new .NET 10 XML solution format) — dotnet new sln creates .slnx in .NET 10 SDK, fully supported"
|
||||||
|
|
||||||
|
patterns-established:
|
||||||
|
- "Generic Host + [STAThread] Main: App.xaml.cs owns static Main, App.xaml has no StartupUri, App.xaml is Page not ApplicationDefinition"
|
||||||
|
- "Stub test pattern: [Fact(Skip = reason)] with plan reference — ensures test suite passes from day one while tracking future implementation"
|
||||||
|
|
||||||
|
requirements-completed:
|
||||||
|
- FOUND-01
|
||||||
|
|
||||||
|
# Metrics
|
||||||
|
duration: 4min
|
||||||
|
completed: 2026-04-02
|
||||||
|
---
|
||||||
|
|
||||||
|
# Phase 1 Plan 01: Solution Scaffold Summary
|
||||||
|
|
||||||
|
**WPF .NET 10 solution with Generic Host entry point, all NuGet packages (MSAL 4.83.3, PnP.Framework 1.18.0, Serilog 4.3.1), and xUnit test project with 7 stub tests (0 failures)**
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
- **Duration:** 4 min
|
||||||
|
- **Started:** 2026-04-02T09:58:26Z
|
||||||
|
- **Completed:** 2026-04-02T10:02:35Z
|
||||||
|
- **Tasks:** 2
|
||||||
|
- **Files modified:** 14
|
||||||
|
|
||||||
|
## Accomplishments
|
||||||
|
|
||||||
|
- Solution scaffold compiles with 0 errors and 0 warnings on dotnet build
|
||||||
|
- Generic Host entry point correctly wired with [STAThread] Main, App.xaml demoted from ApplicationDefinition to Page
|
||||||
|
- All 9 NuGet packages added with compatible versions; PublishTrimmed=false enforced
|
||||||
|
- xUnit test project references main project; dotnet test shows 7 skipped, 0 failed
|
||||||
|
|
||||||
|
## Task Commits
|
||||||
|
|
||||||
|
Each task was committed atomically:
|
||||||
|
|
||||||
|
1. **Task 1: Create solution and WPF project with all NuGet packages** - `f469804` (feat)
|
||||||
|
2. **Task 2: Create xUnit test project with stub test files** - `eac34e3` (feat)
|
||||||
|
|
||||||
|
**Plan metadata:** (docs commit follows)
|
||||||
|
|
||||||
|
## Files Created/Modified
|
||||||
|
|
||||||
|
- `SharepointToolbox.slnx` - Solution file with both projects
|
||||||
|
- `SharepointToolbox/SharepointToolbox.csproj` - WPF .NET 10 with all packages, PublishTrimmed=false, StartupObject
|
||||||
|
- `SharepointToolbox/App.xaml` - StartupUri removed, App.xaml as Page not ApplicationDefinition
|
||||||
|
- `SharepointToolbox/App.xaml.cs` - [STAThread] Main with Host.CreateDefaultBuilder + Serilog rolling file sink
|
||||||
|
- `SharepointToolbox/MainWindow.xaml` + `MainWindow.xaml.cs` - Default WPF template (replaced in plan 01-06)
|
||||||
|
- `SharepointToolbox.Tests/SharepointToolbox.Tests.csproj` - xUnit + Moq, net10.0-windows, references main project
|
||||||
|
- 7 stub test files across Services/, Auth/, ViewModels/, Localization/, Integration/
|
||||||
|
|
||||||
|
## Decisions Made
|
||||||
|
|
||||||
|
- Upgraded MSAL from 4.83.1 to 4.83.3 — Extensions.Msal 4.83.3 pulls MSAL >= 4.83.3 as a transitive dependency; pinning 4.83.1 caused NU1605 downgrade error. Minor patch bump, no behavioral change.
|
||||||
|
- Test project targets net10.0-windows with UseWPF=true — framework incompatibility prevented `dotnet add reference` with net10.0; WPF test host is required anyway for any UI-layer testing.
|
||||||
|
- Solution file is .slnx (new .NET 10 XML format) — dotnet new sln in .NET 10 SDK creates .slnx by default; fully functional with dotnet build/test.
|
||||||
|
|
||||||
|
## Deviations from Plan
|
||||||
|
|
||||||
|
### Auto-fixed Issues
|
||||||
|
|
||||||
|
**1. [Rule 1 - Bug] MSAL version bumped from 4.83.1 to 4.83.3**
|
||||||
|
- **Found during:** Task 1 (NuGet package installation)
|
||||||
|
- **Issue:** `Microsoft.Identity.Client.Extensions.Msal 4.83.3` requires `Microsoft.Identity.Client >= 4.83.3`; plan specified 4.83.1 causing NU1605 downgrade error and failed restore
|
||||||
|
- **Fix:** Updated MSAL pin to 4.83.3 to satisfy transitive dependency constraint
|
||||||
|
- **Files modified:** SharepointToolbox/SharepointToolbox.csproj
|
||||||
|
- **Verification:** `dotnet restore` succeeded; build 0 errors
|
||||||
|
- **Committed in:** f469804 (Task 1 commit)
|
||||||
|
|
||||||
|
**2. [Rule 3 - Blocking] Test project changed to net10.0-windows + UseWPF=true**
|
||||||
|
- **Found during:** Task 2 (adding project reference to test project)
|
||||||
|
- **Issue:** `dotnet add reference` rejected with "incompatible targeted frameworks" — net10.0 test cannot reference net10.0-windows WPF project
|
||||||
|
- **Fix:** Updated test project TargetFramework to net10.0-windows and added UseWPF=true
|
||||||
|
- **Files modified:** SharepointToolbox.Tests/SharepointToolbox.Tests.csproj
|
||||||
|
- **Verification:** `dotnet test` succeeded; 7 skipped, 0 failed
|
||||||
|
- **Committed in:** eac34e3 (Task 2 commit)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Total deviations:** 2 auto-fixed (1 bug — version conflict, 1 blocking — framework incompatibility)
|
||||||
|
**Impact on plan:** Both fixes required for the build to succeed. No scope creep. MSAL functionality identical at 4.83.3.
|
||||||
|
|
||||||
|
## Issues Encountered
|
||||||
|
|
||||||
|
- dotnet new wpf rejects `-f net10.0-windows` as framework flag (only accepts short TFM like `net10.0`) but the generated csproj correctly sets `net10.0-windows`. Template limitation, not a runtime issue.
|
||||||
|
|
||||||
|
## User Setup Required
|
||||||
|
|
||||||
|
None - no external service configuration required.
|
||||||
|
|
||||||
|
## Next Phase Readiness
|
||||||
|
|
||||||
|
- Solution scaffold ready for plan 01-02 (folder structure and namespace layout)
|
||||||
|
- All packages pre-installed — subsequent plans add code, not packages
|
||||||
|
- Test infrastructure wired — stub files will be implemented in their respective plans (01-03 through 01-06)
|
||||||
|
|
||||||
|
---
|
||||||
|
*Phase: 01-foundation*
|
||||||
|
*Completed: 2026-04-02*
|
||||||
Reference in New Issue
Block a user