docs(05-02): complete French locale and single-file publish plan
- 05-02-SUMMARY.md: 27 FR diacritic fixes + conditional PublishSingleFile - STATE.md: progress 97%, session updated, decisions recorded - ROADMAP.md: Phase 5 progress updated (2/3 summaries) - REQUIREMENTS.md: FOUND-11 marked complete
This commit is contained in:
@@ -19,7 +19,7 @@ Requirements for initial release. Each maps to roadmap phases.
|
|||||||
- [x] **FOUND-08**: Structured logging for diagnostics (Serilog or equivalent)
|
- [x] **FOUND-08**: Structured logging for diagnostics (Serilog or equivalent)
|
||||||
- [x] **FOUND-09**: Localization system supporting English and French with dynamic language switching
|
- [x] **FOUND-09**: Localization system supporting English and French with dynamic language switching
|
||||||
- [x] **FOUND-10**: JSON-based local storage for profiles, settings, and templates (compatible with current app's format for migration)
|
- [x] **FOUND-10**: JSON-based local storage for profiles, settings, and templates (compatible with current app's format for migration)
|
||||||
- [ ] **FOUND-11**: Self-contained single EXE distribution — no .NET runtime dependency for end users
|
- [x] **FOUND-11**: Self-contained single EXE distribution — no .NET runtime dependency for end users
|
||||||
- [x] **FOUND-12**: Configurable data output folder for exports
|
- [x] **FOUND-12**: Configurable data output folder for exports
|
||||||
|
|
||||||
### Permissions
|
### Permissions
|
||||||
@@ -125,7 +125,7 @@ Which phases cover which requirements. Updated during roadmap creation.
|
|||||||
| FOUND-08 | Phase 1 | Complete |
|
| FOUND-08 | Phase 1 | Complete |
|
||||||
| FOUND-09 | Phase 1 | Complete |
|
| FOUND-09 | Phase 1 | Complete |
|
||||||
| FOUND-10 | Phase 1 | Complete |
|
| FOUND-10 | Phase 1 | Complete |
|
||||||
| FOUND-11 | Phase 5 | Pending |
|
| FOUND-11 | Phase 5 | Complete |
|
||||||
| FOUND-12 | Phase 1 | Complete |
|
| FOUND-12 | Phase 1 | Complete |
|
||||||
| PERM-01 | Phase 2 | Complete |
|
| PERM-01 | Phase 2 | Complete |
|
||||||
| PERM-02 | Phase 2 | Complete |
|
| PERM-02 | Phase 2 | Complete |
|
||||||
|
|||||||
@@ -144,4 +144,4 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5
|
|||||||
| 2. Permissions | 7/7 | Complete | 2026-04-02 |
|
| 2. Permissions | 7/7 | Complete | 2026-04-02 |
|
||||||
| 3. Storage and File Operations | 8/8 | Complete | 2026-04-02 |
|
| 3. Storage and File Operations | 8/8 | Complete | 2026-04-02 |
|
||||||
| 4. Bulk Operations and Provisioning | 10/10 | Complete | 2026-04-03 |
|
| 4. Bulk Operations and Provisioning | 10/10 | Complete | 2026-04-03 |
|
||||||
| 5. Distribution and Hardening | 0/3 | Not started | - |
|
| 5. Distribution and Hardening | 2/3 | In Progress| |
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ gsd_state_version: 1.0
|
|||||||
milestone: v1.0
|
milestone: v1.0
|
||||||
milestone_name: milestone
|
milestone_name: milestone
|
||||||
status: verifying
|
status: verifying
|
||||||
stopped_at: "Completed 04-bulk-operations-and-provisioning-04-10-PLAN.md (checkpoint:human-verify pending)"
|
stopped_at: Completed 05-distribution-and-hardening-05-01-PLAN.md
|
||||||
last_updated: "2026-04-03T11:52:22.847Z"
|
last_updated: "2026-04-03T14:37:22.588Z"
|
||||||
last_activity: 2026-04-03 — Plan 04-10 complete — all 5 Phase 4 tabs wired in MainWindow
|
last_activity: 2026-04-03 — Plan 04-10 complete — all 5 Phase 4 tabs wired in MainWindow
|
||||||
progress:
|
progress:
|
||||||
total_phases: 5
|
total_phases: 5
|
||||||
completed_phases: 4
|
completed_phases: 4
|
||||||
total_plans: 33
|
total_plans: 36
|
||||||
completed_plans: 33
|
completed_plans: 35
|
||||||
percent: 100
|
percent: 100
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -92,6 +92,8 @@ Progress: [██████████] 100%
|
|||||||
| Phase 04-bulk-operations-and-provisioning P07 | 15 | 2 tasks | 11 files |
|
| Phase 04-bulk-operations-and-provisioning P07 | 15 | 2 tasks | 11 files |
|
||||||
| Phase 04-bulk-operations-and-provisioning P08 | 20min | 2 tasks | 6 files |
|
| Phase 04-bulk-operations-and-provisioning P08 | 20min | 2 tasks | 6 files |
|
||||||
| Phase 04-bulk-operations-and-provisioning P10 | 25min | 2 tasks | 7 files |
|
| Phase 04-bulk-operations-and-provisioning P10 | 25min | 2 tasks | 7 files |
|
||||||
|
| Phase 05-distribution-and-hardening P02 | 3min | 2 tasks | 2 files |
|
||||||
|
| Phase 05-distribution-and-hardening P01 | 2min | 2 tasks | 5 files |
|
||||||
|
|
||||||
## Accumulated Context
|
## Accumulated Context
|
||||||
|
|
||||||
@@ -180,6 +182,10 @@ Recent decisions affecting current work:
|
|||||||
- [Phase 04-bulk-operations-and-provisioning 04-09]: Duplicate standalone converter files (EnumBoolConverter.cs etc.) removed — already defined in IndentConverter.cs which is the established project pattern for all converters
|
- [Phase 04-bulk-operations-and-provisioning 04-09]: Duplicate standalone converter files (EnumBoolConverter.cs etc.) removed — already defined in IndentConverter.cs which is the established project pattern for all converters
|
||||||
- [Phase 04-bulk-operations-and-provisioning]: TemplatesView uses RenameInputDialog (custom WPF Window) instead of Microsoft.VisualBasic.Interaction.InputBox — avoids additional framework dependency
|
- [Phase 04-bulk-operations-and-provisioning]: TemplatesView uses RenameInputDialog (custom WPF Window) instead of Microsoft.VisualBasic.Interaction.InputBox — avoids additional framework dependency
|
||||||
- [Phase 04-bulk-operations-and-provisioning]: All value converters (EnumBoolConverter, StringToVisibilityConverter, ListToStringConverter) added to IndentConverter.cs — consistent co-location pattern
|
- [Phase 04-bulk-operations-and-provisioning]: All value converters (EnumBoolConverter, StringToVisibilityConverter, ListToStringConverter) added to IndentConverter.cs — consistent co-location pattern
|
||||||
|
- [Phase 05-distribution-and-hardening]: PublishSingleFile PropertyGroup is conditional on '' == 'true' — regular dotnet build and dotnet test are unaffected
|
||||||
|
- [Phase 05-distribution-and-hardening]: IncludeNativeLibrariesForSelfExtract=true required — PnP.Framework has native binaries that must bundle into the EXE
|
||||||
|
- [Phase 05-distribution-and-hardening]: IsThrottleException only checks top-level Message (not InnerException) — documented via nested-throttle test asserting false
|
||||||
|
- [Phase 05-distribution-and-hardening]: FR diacritics already present in Strings.fr.resx — FrStrings_ContainExpectedDiacritics test passes immediately (no diacritic repair needed for those 5 keys)
|
||||||
|
|
||||||
### Pending Todos
|
### Pending Todos
|
||||||
|
|
||||||
@@ -192,6 +198,6 @@ None yet.
|
|||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-04-03T08:26:10.563Z
|
Last session: 2026-04-03T14:37:22.584Z
|
||||||
Stopped at: Completed 04-bulk-operations-and-provisioning-04-10-PLAN.md (checkpoint:human-verify pending)
|
Stopped at: Completed 05-distribution-and-hardening-05-01-PLAN.md
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
|||||||
102
.planning/phases/05-distribution-and-hardening/05-02-SUMMARY.md
Normal file
102
.planning/phases/05-distribution-and-hardening/05-02-SUMMARY.md
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
---
|
||||||
|
phase: 05-distribution-and-hardening
|
||||||
|
plan: 02
|
||||||
|
subsystem: ui
|
||||||
|
tags: [resx, localization, french, publish, single-file, win-x64]
|
||||||
|
|
||||||
|
# Dependency graph
|
||||||
|
requires:
|
||||||
|
- phase: 04-bulk-operations-and-provisioning
|
||||||
|
provides: Phase 4 UI strings (Transfer, BulkMembers, BulkSites, FolderStruct, Templates) all added to Strings.fr.resx without accents
|
||||||
|
provides:
|
||||||
|
- Corrected French locale with proper diacritics for all 27 Phase 4 string keys
|
||||||
|
- Single-file self-contained publish configuration (win-x64, ~200 MB EXE, zero loose DLLs)
|
||||||
|
affects: [05-distribution-and-hardening, deployment, QA]
|
||||||
|
|
||||||
|
# Tech tracking
|
||||||
|
tech-stack:
|
||||||
|
added: []
|
||||||
|
patterns:
|
||||||
|
- "Conditional PropertyGroup for publish-only MSBuild properties — avoids polluting regular build/test with RuntimeIdentifier"
|
||||||
|
|
||||||
|
key-files:
|
||||||
|
created: []
|
||||||
|
modified:
|
||||||
|
- SharepointToolbox/Localization/Strings.fr.resx
|
||||||
|
- SharepointToolbox/SharepointToolbox.csproj
|
||||||
|
|
||||||
|
key-decisions:
|
||||||
|
- "PublishSingleFile PropertyGroup is conditional on '$(PublishSingleFile)' == 'true' — regular dotnet build and dotnet test are unaffected"
|
||||||
|
- "IncludeNativeLibrariesForSelfExtract=true required — PnP.Framework has native binaries that must bundle into the EXE"
|
||||||
|
- "PublishTrimmed remains false — PnP.Framework and MSAL use reflection; trimming breaks at runtime"
|
||||||
|
|
||||||
|
patterns-established:
|
||||||
|
- "Conditional PropertyGroup pattern for publish-only properties — activate via CLI flag, not default build"
|
||||||
|
|
||||||
|
requirements-completed: [FOUND-11]
|
||||||
|
|
||||||
|
# Metrics
|
||||||
|
duration: 3min
|
||||||
|
completed: 2026-04-03
|
||||||
|
---
|
||||||
|
|
||||||
|
# Phase 5 Plan 02: French Locale Fix and Single-File Publish Summary
|
||||||
|
|
||||||
|
**27 French diacritic corrections across all Phase 4 UI string keys, plus conditional win-x64 single-file publish producing one ~200 MB EXE with zero loose DLLs**
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
- **Duration:** ~3 min
|
||||||
|
- **Started:** 2026-04-03T11:53:46Z
|
||||||
|
- **Completed:** 2026-04-03T11:56:06Z
|
||||||
|
- **Tasks:** 2
|
||||||
|
- **Files modified:** 2
|
||||||
|
|
||||||
|
## Accomplishments
|
||||||
|
|
||||||
|
- Fixed all 27 French strings missing diacritics (accents, cedillas) across Transfer, BulkMembers, BulkSites, FolderStruct, Templates, and shared bulk-operation keys
|
||||||
|
- Added conditional `<PropertyGroup>` to csproj enabling `dotnet publish -p:PublishSingleFile=true` to produce a single self-contained EXE for win-x64
|
||||||
|
- Full test suite remains green: 134 pass, 22 skip (interactive MSAL tests — expected)
|
||||||
|
|
||||||
|
## Task Commits
|
||||||
|
|
||||||
|
Each task was committed atomically:
|
||||||
|
|
||||||
|
1. **Task 1: Fix French diacritic-missing strings** - `f7829f0` (fix)
|
||||||
|
2. **Task 2: Add self-contained single-file publish configuration** - `39517d8` (feat)
|
||||||
|
|
||||||
|
## Files Created/Modified
|
||||||
|
|
||||||
|
- `SharepointToolbox/Localization/Strings.fr.resx` — 27 string values corrected with proper French diacritics
|
||||||
|
- `SharepointToolbox/SharepointToolbox.csproj` — Added conditional PropertyGroup for PublishSingleFile + SelfContained + IncludeNativeLibrariesForSelfExtract
|
||||||
|
|
||||||
|
## Decisions Made
|
||||||
|
|
||||||
|
- `PublishSingleFile` PropertyGroup uses condition `'$(PublishSingleFile)' == 'true'` so normal builds and test runs are unaffected — no RuntimeIdentifier lock-in during development
|
||||||
|
- `IncludeNativeLibrariesForSelfExtract=true` is necessary because PnP.Framework includes native binaries that must be bundled
|
||||||
|
- `PublishTrimmed` stays false (pre-established project decision — PnP.Framework and MSAL rely on reflection)
|
||||||
|
|
||||||
|
## Deviations from Plan
|
||||||
|
|
||||||
|
None - plan executed exactly as written.
|
||||||
|
|
||||||
|
Also corrected `bulk.confirm.title` ("Confirmer l'operation" -> "Confirmer l'opération") and `templates.empty` ("Aucun modele enregistre." -> "Aucun modèle enregistré.") and `templates.opt.settings` ("Parametres du site" -> "Paramètres du site") which were not in the plan's numbered list but were clearly broken diacritics in the same file. These fell under Rule 1 (auto-fix bugs) as they were defects in the same file being edited.
|
||||||
|
|
||||||
|
## Issues Encountered
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## User Setup Required
|
||||||
|
|
||||||
|
None - no external service configuration required.
|
||||||
|
|
||||||
|
## Next Phase Readiness
|
||||||
|
|
||||||
|
- French locale is now complete with proper diacritics across all 4 phases of UI strings
|
||||||
|
- Single-file publish is ready: `dotnet publish SharepointToolbox/SharepointToolbox.csproj -c Release -p:PublishSingleFile=true -o ./publish`
|
||||||
|
- Two Phase 5 success criteria (French locale + single EXE) now satisfied
|
||||||
|
- Remaining Phase 5 work: Plan 01 (tests), Plan 03 (installer/README), Plan 04 (final QA)
|
||||||
|
|
||||||
|
---
|
||||||
|
*Phase: 05-distribution-and-hardening*
|
||||||
|
*Completed: 2026-04-03*
|
||||||
Reference in New Issue
Block a user