docs(18-01): complete auto-take-ownership settings foundation plan
- 18-01-SUMMARY.md: plan execution summary - STATE.md: progress updated to 98%, decisions recorded, stopped-at updated - ROADMAP.md: phase 18 marked in-progress (1/2 summaries) - REQUIREMENTS.md: OWN-01 marked complete
This commit is contained in:
83
.planning/phases/18-auto-take-ownership/18-01-SUMMARY.md
Normal file
83
.planning/phases/18-auto-take-ownership/18-01-SUMMARY.md
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
phase: 18-auto-take-ownership
|
||||
plan: "01"
|
||||
subsystem: settings, models, services
|
||||
tags: [auto-take-ownership, settings, permission-entry, elevation-service, di]
|
||||
dependency_graph:
|
||||
requires: []
|
||||
provides: [AppSettings.AutoTakeOwnership, PermissionEntry.WasAutoElevated, IOwnershipElevationService, OwnershipElevationService, SettingsViewModel.AutoTakeOwnership]
|
||||
affects: [SharepointToolbox/Core/Models/AppSettings.cs, SharepointToolbox/Core/Models/PermissionEntry.cs, SharepointToolbox/Services/SettingsService.cs, SharepointToolbox/ViewModels/Tabs/SettingsViewModel.cs, SharepointToolbox/Views/Tabs/SettingsView.xaml]
|
||||
tech_stack:
|
||||
added: [IOwnershipElevationService, OwnershipElevationService, Microsoft.Online.SharePoint.TenantAdministration.Tenant.SetSiteAdmin]
|
||||
patterns: [fire-and-forget property setter pattern (matching DataFolder), DI transient registration]
|
||||
key_files:
|
||||
created:
|
||||
- SharepointToolbox/Services/IOwnershipElevationService.cs
|
||||
- SharepointToolbox/Services/OwnershipElevationService.cs
|
||||
- SharepointToolbox.Tests/Services/OwnershipElevationServiceTests.cs
|
||||
- SharepointToolbox.Tests/ViewModels/SettingsViewModelOwnershipTests.cs
|
||||
modified:
|
||||
- SharepointToolbox/Core/Models/AppSettings.cs
|
||||
- SharepointToolbox/Core/Models/PermissionEntry.cs
|
||||
- SharepointToolbox/Services/SettingsService.cs
|
||||
- SharepointToolbox/ViewModels/Tabs/SettingsViewModel.cs
|
||||
- SharepointToolbox/Views/Tabs/SettingsView.xaml
|
||||
- SharepointToolbox/Localization/Strings.resx
|
||||
- SharepointToolbox/Localization/Strings.fr.resx
|
||||
- SharepointToolbox/App.xaml.cs
|
||||
decisions:
|
||||
- "OwnershipElevationService.ElevateAsync uses Tenant.SetSiteAdmin from PnP.Framework (Microsoft.Online.SharePoint.TenantAdministration)"
|
||||
- "WasAutoElevated placed last with default=false in PermissionEntry positional record to avoid breaking all existing callsites"
|
||||
- "AutoTakeOwnership in SettingsViewModel follows fire-and-forget pattern matching DataFolder setter"
|
||||
metrics:
|
||||
duration: "~15 minutes"
|
||||
tasks_completed: 2
|
||||
files_modified: 8
|
||||
files_created: 4
|
||||
completed_date: "2026-04-09"
|
||||
---
|
||||
|
||||
# Phase 18 Plan 01: Auto-Take Ownership Settings Foundation Summary
|
||||
|
||||
**One-liner:** AppSettings, PermissionEntry, IOwnershipElevationService/impl, and SettingsView checkbox for auto-take-ownership toggle backed by full EN/FR localization and 10 new tests.
|
||||
|
||||
## Tasks Completed
|
||||
|
||||
| Task | Name | Commit | Files |
|
||||
|------|------|--------|-------|
|
||||
| 1 | Models + SettingsService + OwnershipElevationService + tests | 36fb312 | AppSettings.cs, PermissionEntry.cs, SettingsService.cs, IOwnershipElevationService.cs, OwnershipElevationService.cs, SettingsViewModel.cs, App.xaml.cs, 2 test files |
|
||||
| 2 | SettingsView XAML + localization | 20948e4 | SettingsView.xaml, Strings.resx, Strings.fr.resx |
|
||||
|
||||
## What Was Built
|
||||
|
||||
- `AppSettings.AutoTakeOwnership` bool property defaulting to `false`, round-trips through JSON.
|
||||
- `PermissionEntry.WasAutoElevated` optional positional parameter (last, default `false`) — zero callsite breakage.
|
||||
- `SettingsService.SetAutoTakeOwnershipAsync(bool)` persists toggle following same pattern as `SetLanguageAsync`/`SetDataFolderAsync`.
|
||||
- `IOwnershipElevationService` interface with `ElevateAsync(ClientContext, siteUrl, loginName, ct)`.
|
||||
- `OwnershipElevationService` wraps `Tenant.SetSiteAdmin` from PnP.Framework.
|
||||
- DI registration: `services.AddTransient<IOwnershipElevationService, OwnershipElevationService>()` in App.xaml.cs.
|
||||
- `SettingsViewModel.AutoTakeOwnership` property loads from settings on `LoadAsync()`, persists on set via fire-and-forget `SetAutoTakeOwnershipAsync`.
|
||||
- `SettingsView.xaml` "Site Ownership" section with `CheckBox` bound to `AutoTakeOwnership`, with description `TextBlock`.
|
||||
- EN/FR localization keys: `settings.ownership.title`, `settings.ownership.auto`, `settings.ownership.description`.
|
||||
- 10 new tests covering all behaviors; full suite: 328 passed, 28 skipped, 0 failed.
|
||||
|
||||
## Decisions Made
|
||||
|
||||
1. `OwnershipElevationService.ElevateAsync` uses `Tenant.SetSiteAdmin` (already available via PnP.Framework `Microsoft.Online.SharePoint.TenantAdministration`).
|
||||
2. `WasAutoElevated` placed last with `= false` default in the positional record — no existing callsite needed updating.
|
||||
3. `AutoTakeOwnership` ViewModel setter uses `_ = _settingsService.SetAutoTakeOwnershipAsync(value)` matching the `DataFolder` fire-and-forget pattern.
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
None - plan executed exactly as written.
|
||||
|
||||
## Test Results
|
||||
|
||||
- `dotnet build SharepointToolbox.slnx` — 0 errors, 0 warnings
|
||||
- `dotnet test ... --filter OwnershipElevation|SettingsViewModelOwnership` — 8/8 passed
|
||||
- `dotnet test ... --filter LocaleCompleteness` — 2/2 passed
|
||||
- Full suite — 328 passed, 0 failed, 28 skipped
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
All created files exist. All commits verified. Full test suite green.
|
||||
Reference in New Issue
Block a user