docs(08-02): complete ViewModel Toggle Logic plan summary

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dev
2026-04-07 14:11:08 +02:00
parent e2c94bf6d1
commit c970342497
4 changed files with 79 additions and 15 deletions

View File

@@ -19,7 +19,7 @@
- [x] **SIMP-01**: User can toggle plain-language permission labels (e.g., "Can edit files" instead of "Contribute") - [x] **SIMP-01**: User can toggle plain-language permission labels (e.g., "Can edit files" instead of "Contribute")
- [x] **SIMP-02**: Permissions report includes summary counts and color coding for untrained readers - [x] **SIMP-02**: Permissions report includes summary counts and color coding for untrained readers
- [ ] **SIMP-03**: User can choose detail level (simple/detailed) for reports - [x] **SIMP-03**: User can choose detail level (simple/detailed) for reports
### Storage Visualization ### Storage Visualization
@@ -51,7 +51,7 @@ None deferred — all active requirements scoped to v1.1.
| UACC-02 | Phase 7 | Complete | | UACC-02 | Phase 7 | Complete |
| SIMP-01 | Phase 8 | Complete | | SIMP-01 | Phase 8 | Complete |
| SIMP-02 | Phase 8 | Complete | | SIMP-02 | Phase 8 | Complete |
| SIMP-03 | Phase 8 | Pending | | SIMP-03 | Phase 8 | Complete |
| VIZZ-01 | Phase 9 | Pending | | VIZZ-01 | Phase 9 | Pending |
| VIZZ-02 | Phase 9 | Pending | | VIZZ-02 | Phase 9 | Pending |
| VIZZ-03 | Phase 9 | Pending | | VIZZ-03 | Phase 9 | Pending |

View File

@@ -75,7 +75,7 @@ Plans:
2. The report shows summary counts per permission level with color indicators distinguishing high, medium, and low access levels 2. The report shows summary counts per permission level with color indicators distinguishing high, medium, and low access levels
3. A detail-level selector (simple / detailed) controls whether individual item-level rows are shown or collapsed into summary rows 3. A detail-level selector (simple / detailed) controls whether individual item-level rows are shown or collapsed into summary rows
4. Toggling modes and detail level does not require re-running the scan — it re-renders from the already-fetched data 4. Toggling modes and detail level does not require re-running the scan — it re-renders from the already-fetched data
**Plans:** 1/6 plans executed **Plans:** 2/6 plans executed
Plans: Plans:
- [ ] 08-01-PLAN.md — RiskLevel enum, PermissionLevelMapping, SimplifiedPermissionEntry, PermissionSummary (Wave 1) - [ ] 08-01-PLAN.md — RiskLevel enum, PermissionLevelMapping, SimplifiedPermissionEntry, PermissionSummary (Wave 1)
- [ ] 08-02-PLAN.md — PermissionsViewModel simplified mode, detail toggle, summary computation (Wave 2) - [ ] 08-02-PLAN.md — PermissionsViewModel simplified mode, detail toggle, summary computation (Wave 2)
@@ -106,5 +106,5 @@ Plans:
| 5. Distribution and Hardening | v1.0 | 3/3 | Complete | 2026-04-03 | | 5. Distribution and Hardening | v1.0 | 3/3 | Complete | 2026-04-03 |
| 6. Global Site Selection | 5/5 | Complete | 2026-04-07 | - | | 6. Global Site Selection | 5/5 | Complete | 2026-04-07 | - |
| 7. User Access Audit | 10/10 | Complete | 2026-04-07 | - | | 7. User Access Audit | 10/10 | Complete | 2026-04-07 | - |
| 8. Simplified Permissions | 1/6 | In Progress| | - | | 8. Simplified Permissions | 2/6 | In Progress| | - |
| 9. Storage Visualization | v1.1 | 0/? | Not started | - | | 9. Storage Visualization | v1.1 | 0/? | Not started | - |

View File

@@ -3,14 +3,14 @@ gsd_state_version: 1.0
milestone: v1.0 milestone: v1.0
milestone_name: milestone milestone_name: milestone
status: in-progress status: in-progress
stopped_at: Completed 08-01-PLAN.md stopped_at: Completed 08-02-PLAN.md
last_updated: "2026-04-07T12:07:33.162Z" last_updated: "2026-04-07T12:10:45.515Z"
last_activity: 2026-04-07 — Roadmap created (Phases 6-9), 10/10 requirements mapped last_activity: 2026-04-07 — Completed 08-01 (Permission Data Models and Mapping Layer)
progress: progress:
total_phases: 4 total_phases: 4
completed_phases: 2 completed_phases: 2
total_plans: 21 total_plans: 21
completed_plans: 16 completed_plans: 17
--- ---
# Project State # Project State
@@ -25,13 +25,13 @@ See: .planning/PROJECT.md (updated 2026-04-07)
## Current Position ## Current Position
Phase: 8 — Simplified Permissions Phase: 8 — Simplified Permissions
Plan: 1 of 6 Plan: 2 of 6
Status: Plan 08-01 complete, advancing to 08-02 Status: Plan 08-02 complete, advancing to 08-03
Last activity: 2026-04-07 — Completed 08-01 (Permission Data Models and Mapping Layer) Last activity: 2026-04-07 — Completed 08-02 (ViewModel Toggle Logic)
``` ```
v1.1 Progress: [ ] 0% v1.1 Progress: [████████░░] 81%
Phase 6 [ ] → Phase 7 [ ] → Phase 8 [ ] → Phase 9 [ ] Phase 6 [x] → Phase 7 [x] → Phase 8 [..] → Phase 9 [ ]
``` ```
## Performance Metrics ## Performance Metrics
@@ -57,6 +57,7 @@ Phase 6 [ ] → Phase 7 [ ] → Phase 8 [ ] → Phase 9 [ ]
| Phase 07-user-access-audit P08 | 2 | 2 tasks | 4 files | | Phase 07-user-access-audit P08 | 2 | 2 tasks | 4 files |
| Phase 07-user-access-audit P09 | 6 | 1 tasks | 1 files | | Phase 07-user-access-audit P09 | 6 | 1 tasks | 1 files |
| Phase 07-user-access-audit P10 | 5 | 1 tasks | 1 files | | Phase 07-user-access-audit P10 | 5 | 1 tasks | 1 files |
| Phase 08 P02 | 84 | 1 tasks | 1 files |
## Accumulated Context ## Accumulated Context
@@ -98,6 +99,7 @@ Decisions are logged in PROJECT.md Key Decisions table.
- [Phase 07-user-access-audit]: WeakReferenceMessenger.Default.Reset() in test constructor prevents cross-test contamination from message registrations - [Phase 07-user-access-audit]: WeakReferenceMessenger.Default.Reset() in test constructor prevents cross-test contamination from message registrations
- [Phase 07-09]: Guest badge (orange pill) and warning icon (⚠) use DataTrigger-driven Visibility on DataGridTemplateColumn cells — collapsed by default, visible only when IsExternalUser/IsHighPrivilege=True - [Phase 07-09]: Guest badge (orange pill) and warning icon (⚠) use DataTrigger-driven Visibility on DataGridTemplateColumn cells — collapsed by default, visible only when IsExternalUser/IsHighPrivilege=True
- [Phase 07-10]: Extended CreateViewModel to 3-tuple (vm, auditMock, graphMock) so debounce test can verify SearchUsersAsync calls - [Phase 07-10]: Extended CreateViewModel to 3-tuple (vm, auditMock, graphMock) so debounce test can verify SearchUsersAsync calls
- [Phase 08]: ActiveItemsSource returns Results or SimplifiedResults based on IsSimplifiedMode -- View binds to single property
### Pending Todos ### Pending Todos
@@ -109,6 +111,6 @@ None.
## Session Continuity ## Session Continuity
Last session: 2026-04-07T12:06:57Z Last session: 2026-04-07T12:10:45.513Z
Stopped at: Completed 08-01-PLAN.md Stopped at: Completed 08-02-PLAN.md
Resume file: None Resume file: None

View File

@@ -0,0 +1,62 @@
---
phase: 08-simplified-permissions
plan: 02
subsystem: viewmodel
tags: [permissions, simplified-mode, toggle, viewmodel, observable]
dependency_graph:
requires: [RiskLevel, PermissionLevelMapping, SimplifiedPermissionEntry, PermissionSummary, PermissionSummaryBuilder]
provides: [IsSimplifiedMode, IsDetailView, SimplifiedResults, Summaries, ActiveItemsSource]
affects: [08-03, 08-04]
tech_stack:
added: []
patterns: [computed-property-from-cache, partial-method-change-handlers, mode-toggle-without-rescan]
key_files:
created: []
modified:
- SharepointToolbox/ViewModels/Tabs/PermissionsViewModel.cs
decisions:
- "ActiveItemsSource returns Results (raw) or SimplifiedResults depending on IsSimplifiedMode -- View binds to this single property"
- "RebuildSimplifiedData called on toggle-on and after scan completion, not eagerly on every Results mutation"
- "IsDetailView defaults to true so first toggle to simplified mode shows detailed rows"
- "OnTenantSwitched resets SimplifiedResults and Summaries to empty arrays for clean state"
metrics:
duration: 84s
completed: 2026-04-07T12:10:22Z
tasks_completed: 1
tasks_total: 1
files_created: 0
files_modified: 1
---
# Phase 08 Plan 02: ViewModel Toggle Logic Summary
IsSimplifiedMode and IsDetailView toggles on PermissionsViewModel with computed SimplifiedResults, Summaries, and ActiveItemsSource -- all mode switches rebuild from cached Results without re-scanning SharePoint.
## Tasks Completed
### Task 1: Add simplified mode properties and summary computation to PermissionsViewModel
- **Commit:** e2c94bf
- **Files:** SharepointToolbox/ViewModels/Tabs/PermissionsViewModel.cs
- Added IsSimplifiedMode and IsDetailView observable properties with partial change handlers
- Added SimplifiedResults (IReadOnlyList<SimplifiedPermissionEntry>) and Summaries (IReadOnlyList<PermissionSummary>) as manually-raised properties
- Added ActiveItemsSource computed property returning correct collection for DataGrid binding
- RebuildSimplifiedData() wraps Results via SimplifiedPermissionEntry.WrapAll and builds summaries
- RunOperationAsync (both dispatcher and else branches) calls RebuildSimplifiedData when IsSimplifiedMode is active
- OnTenantSwitched resets SimplifiedResults and Summaries to empty arrays
## Deviations from Plan
None - plan executed exactly as written.
## Verification Results
- dotnet build succeeded with 0 errors, 0 warnings
- dotnet test PermissionsViewModelTests passed (1 passed, 0 failed, 0 skipped)
- IsSimplifiedMode, IsDetailView, SimplifiedResults, Summaries, ActiveItemsSource all present
- OnIsSimplifiedModeChanged calls RebuildSimplifiedData + raises ActiveItemsSource changed
- RunOperationAsync calls RebuildSimplifiedData when IsSimplifiedMode is true (both branches)
- OnTenantSwitched resets SimplifiedResults and Summaries
## Self-Check: PASSED
All modified files exist on disk. Task commit (e2c94bf) verified in git log. All 6 new members confirmed present in PermissionsViewModel.cs (26 occurrences across declarations, usages, and doc comments).