--- 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*