diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 6274e00..c7238ca 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -75,7 +75,7 @@ Plans: 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 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: - [ ] 08-01-PLAN.md — RiskLevel enum, PermissionLevelMapping, SimplifiedPermissionEntry, PermissionSummary (Wave 1) - [ ] 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 | | 6. Global Site Selection | 5/5 | 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 | - | diff --git a/.planning/STATE.md b/.planning/STATE.md index fa1eb69..e9c5421 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -3,14 +3,14 @@ gsd_state_version: 1.0 milestone: v1.0 milestone_name: milestone status: completed -stopped_at: Completed 08-04-PLAN.md -last_updated: "2026-04-07T12:14:33.370Z" -last_activity: 2026-04-07 — Completed 08-04 (Export Services Simplified Overloads) +stopped_at: Completed 08-05-PLAN.md +last_updated: "2026-04-07T12:18:26.872Z" +last_activity: 2026-04-07 — Completed 08-05 (Localization Keys and Export Wiring) progress: total_phases: 4 completed_phases: 2 total_plans: 21 - completed_plans: 19 + completed_plans: 20 --- # Project State @@ -25,12 +25,12 @@ See: .planning/PROJECT.md (updated 2026-04-07) ## Current Position Phase: 8 — Simplified Permissions -Plan: 4 of 6 -Status: Plan 08-04 complete, advancing to 08-05 -Last activity: 2026-04-07 — Completed 08-04 (Export Services Simplified Overloads) +Plan: 5 of 6 +Status: Plan 08-05 complete, advancing to 08-06 +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 [ ] ``` @@ -60,6 +60,7 @@ Phase 6 [x] → Phase 7 [x] → Phase 8 [..] → Phase 9 [ ] | Phase 08 P02 | 84 | 1 tasks | 1 files | | Phase 08 P03 | 77 | 1 tasks | 2 files | | Phase 08 P04 | 2 | 2 tasks | 2 files | +| Phase 08 P05 | 2 | 2 tasks | 4 files | ## 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 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]: FR translations use XML entities for accented chars matching existing resx convention ### Pending Todos @@ -114,6 +116,6 @@ None. ## Session Continuity -Last session: 2026-04-07T12:14:18.409Z -Stopped at: Completed 08-04-PLAN.md +Last session: 2026-04-07T12:18:26.870Z +Stopped at: Completed 08-05-PLAN.md Resume file: None diff --git a/.planning/phases/08-simplified-permissions/08-05-SUMMARY.md b/.planning/phases/08-simplified-permissions/08-05-SUMMARY.md new file mode 100644 index 0000000..7fe887a --- /dev/null +++ b/.planning/phases/08-simplified-permissions/08-05-SUMMARY.md @@ -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 `` in summary card template +- **Fix:** Replaced with `` +- **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