docs(08-05): complete localization keys and export wiring plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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:** 4/6 plans executed
|
**Plans:** 5/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 | 4/6 | In Progress| | - |
|
| 8. Simplified Permissions | 5/6 | In Progress| | - |
|
||||||
| 9. Storage Visualization | v1.1 | 0/? | Not started | - |
|
| 9. Storage Visualization | v1.1 | 0/? | Not started | - |
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ gsd_state_version: 1.0
|
|||||||
milestone: v1.0
|
milestone: v1.0
|
||||||
milestone_name: milestone
|
milestone_name: milestone
|
||||||
status: completed
|
status: completed
|
||||||
stopped_at: Completed 08-04-PLAN.md
|
stopped_at: Completed 08-05-PLAN.md
|
||||||
last_updated: "2026-04-07T12:14:33.370Z"
|
last_updated: "2026-04-07T12:18:26.872Z"
|
||||||
last_activity: 2026-04-07 — Completed 08-04 (Export Services Simplified Overloads)
|
last_activity: 2026-04-07 — Completed 08-05 (Localization Keys and Export Wiring)
|
||||||
progress:
|
progress:
|
||||||
total_phases: 4
|
total_phases: 4
|
||||||
completed_phases: 2
|
completed_phases: 2
|
||||||
total_plans: 21
|
total_plans: 21
|
||||||
completed_plans: 19
|
completed_plans: 20
|
||||||
---
|
---
|
||||||
|
|
||||||
# Project State
|
# Project State
|
||||||
@@ -25,12 +25,12 @@ See: .planning/PROJECT.md (updated 2026-04-07)
|
|||||||
## Current Position
|
## Current Position
|
||||||
|
|
||||||
Phase: 8 — Simplified Permissions
|
Phase: 8 — Simplified Permissions
|
||||||
Plan: 4 of 6
|
Plan: 5 of 6
|
||||||
Status: Plan 08-04 complete, advancing to 08-05
|
Status: Plan 08-05 complete, advancing to 08-06
|
||||||
Last activity: 2026-04-07 — Completed 08-04 (Export Services Simplified Overloads)
|
Last activity: 2026-04-07 — Completed 08-05 (Localization Keys and Export Wiring)
|
||||||
|
|
||||||
```
|
```
|
||||||
v1.1 Progress: [█████████░] 90%
|
v1.1 Progress: [██████████] 95%
|
||||||
Phase 6 [x] → Phase 7 [x] → Phase 8 [..] → Phase 9 [ ]
|
Phase 6 [x] → Phase 7 [x] → Phase 8 [..] → Phase 9 [ ]
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -60,6 +60,7 @@ Phase 6 [x] → Phase 7 [x] → Phase 8 [..] → Phase 9 [ ]
|
|||||||
| Phase 08 P02 | 84 | 1 tasks | 1 files |
|
| Phase 08 P02 | 84 | 1 tasks | 1 files |
|
||||||
| Phase 08 P03 | 77 | 1 tasks | 2 files |
|
| Phase 08 P03 | 77 | 1 tasks | 2 files |
|
||||||
| Phase 08 P04 | 2 | 2 tasks | 2 files |
|
| Phase 08 P04 | 2 | 2 tasks | 2 files |
|
||||||
|
| Phase 08 P05 | 2 | 2 tasks | 4 files |
|
||||||
|
|
||||||
## Accumulated Context
|
## Accumulated Context
|
||||||
|
|
||||||
@@ -103,6 +104,7 @@ Decisions are logged in PROJECT.md Key Decisions table.
|
|||||||
- [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
|
- [Phase 08]: ActiveItemsSource returns Results or SimplifiedResults based on IsSimplifiedMode -- View binds to single property
|
||||||
- [Phase 08]: InvertBoolConverter in Core/Converters namespace for reuse; summary cards use WrapPanel; row color triggers only match SimplifiedPermissionEntry
|
- [Phase 08]: InvertBoolConverter in Core/Converters namespace for reuse; summary cards use WrapPanel; row color triggers only match SimplifiedPermissionEntry
|
||||||
|
- [Phase 08]: FR translations use XML entities for accented chars matching existing resx convention
|
||||||
|
|
||||||
### Pending Todos
|
### Pending Todos
|
||||||
|
|
||||||
@@ -114,6 +116,6 @@ None.
|
|||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-04-07T12:14:18.409Z
|
Last session: 2026-04-07T12:18:26.870Z
|
||||||
Stopped at: Completed 08-04-PLAN.md
|
Stopped at: Completed 08-05-PLAN.md
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
|||||||
84
.planning/phases/08-simplified-permissions/08-05-SUMMARY.md
Normal file
84
.planning/phases/08-simplified-permissions/08-05-SUMMARY.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
phase: 08-simplified-permissions
|
||||||
|
plan: 05
|
||||||
|
subsystem: permissions-localization-export
|
||||||
|
tags: [localization, export, simplified-permissions, i18n]
|
||||||
|
dependency_graph:
|
||||||
|
requires: [08-02, 08-03, 08-04]
|
||||||
|
provides: [localized-simplified-ui, simplified-export-wiring]
|
||||||
|
affects: [PermissionsView.xaml, PermissionsViewModel.cs, Strings.resx, Strings.fr.resx]
|
||||||
|
tech_stack:
|
||||||
|
added: []
|
||||||
|
patterns: [resx-localization, export-branching, xaml-run-binding]
|
||||||
|
key_files:
|
||||||
|
created: []
|
||||||
|
modified:
|
||||||
|
- SharepointToolbox/Localization/Strings.resx
|
||||||
|
- SharepointToolbox/Localization/Strings.fr.resx
|
||||||
|
- SharepointToolbox/ViewModels/Tabs/PermissionsViewModel.cs
|
||||||
|
- SharepointToolbox/Views/Tabs/PermissionsView.xaml
|
||||||
|
decisions:
|
||||||
|
- "FR translations use XML entities for accented chars matching existing convention"
|
||||||
|
- "Hardcoded user(s) in XAML summary cards wired to lbl.summary.users localization key"
|
||||||
|
metrics:
|
||||||
|
duration_minutes: 2
|
||||||
|
completed: "2026-04-07"
|
||||||
|
tasks_completed: 2
|
||||||
|
tasks_total: 2
|
||||||
|
---
|
||||||
|
|
||||||
|
# Phase 08 Plan 05: Localization Keys and Export Wiring Summary
|
||||||
|
|
||||||
|
EN/FR localization keys for simplified permissions UI plus export command branching on IsSimplifiedMode to call simplified WriteAsync overloads.
|
||||||
|
|
||||||
|
## What Was Done
|
||||||
|
|
||||||
|
### Task 1: Add EN and FR localization keys for simplified permissions
|
||||||
|
|
||||||
|
Added 6 localization keys to both `Strings.resx` (EN) and `Strings.fr.resx` (FR):
|
||||||
|
|
||||||
|
| Key | EN Value | FR Value |
|
||||||
|
|-----|----------|----------|
|
||||||
|
| `chk.simplified.mode` | Simplified mode | Mode simplifie |
|
||||||
|
| `grp.display.opts` | Display Options | Options d'affichage |
|
||||||
|
| `lbl.detail.level` | Detail level: | Niveau de detail : |
|
||||||
|
| `rad.detail.detailed` | Detailed (all rows) | Detaille (toutes les lignes) |
|
||||||
|
| `rad.detail.simple` | Simple (summary only) | Simple (resume uniquement) |
|
||||||
|
| `lbl.summary.users` | user(s) | utilisateur(s) |
|
||||||
|
|
||||||
|
Keys inserted in alphabetical order among existing entries. FR translations use XML entities for accented characters (matching existing convention in the file).
|
||||||
|
|
||||||
|
Also wired the hardcoded `" user(s)"` text in `PermissionsView.xaml` summary cards to use the `lbl.summary.users` localization key via a `Run` binding to `TranslationSource.Instance`.
|
||||||
|
|
||||||
|
**Commit:** `60ddcd7`
|
||||||
|
|
||||||
|
### Task 2: Wire export commands to use simplified overloads
|
||||||
|
|
||||||
|
Updated `ExportCsvAsync` and `ExportHtmlAsync` in `PermissionsViewModel.cs` to branch on `IsSimplifiedMode`:
|
||||||
|
|
||||||
|
- When `IsSimplifiedMode` is true and `SimplifiedResults.Count > 0`, calls `WriteAsync(SimplifiedResults.ToList(), ...)` (simplified overload)
|
||||||
|
- Otherwise, calls the existing `WriteAsync(Results, ...)` (standard overload)
|
||||||
|
|
||||||
|
No changes to constructor signatures, `RunOperationAsync`, or any other methods.
|
||||||
|
|
||||||
|
**Commit:** `f503e6c`
|
||||||
|
|
||||||
|
## Deviations from Plan
|
||||||
|
|
||||||
|
### Auto-fixed Issues
|
||||||
|
|
||||||
|
**1. [Rule 2 - Missing Localization] Wired hardcoded "user(s)" in XAML summary cards**
|
||||||
|
- **Found during:** Task 1
|
||||||
|
- **Issue:** PermissionsView.xaml had hardcoded `<Run Text=" user(s)" />` in summary card template
|
||||||
|
- **Fix:** Replaced with `<Run Text="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[lbl.summary.users], Mode=OneWay}" />`
|
||||||
|
- **Files modified:** SharepointToolbox/Views/Tabs/PermissionsView.xaml
|
||||||
|
- **Commit:** 60ddcd7
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- `dotnet build` succeeds with 0 errors, 0 warnings
|
||||||
|
- 6 keys present in both Strings.resx and Strings.fr.resx
|
||||||
|
- 2 export methods branch on IsSimplifiedMode
|
||||||
|
- XAML summary card uses localized lbl.summary.users key
|
||||||
|
|
||||||
|
## Self-Check: PASSED
|
||||||
Reference in New Issue
Block a user