--- phase: 05-distribution-and-hardening plan: 02 type: execute wave: 1 depends_on: [] files_modified: - SharepointToolbox/Localization/Strings.fr.resx - SharepointToolbox/SharepointToolbox.csproj autonomous: true requirements: - FOUND-11 must_haves: truths: - "All French strings display with correct diacritics when language is set to French" - "dotnet publish produces a single self-contained EXE with no loose DLLs" artifacts: - path: "SharepointToolbox/Localization/Strings.fr.resx" provides: "Corrected French translations with proper diacritics" contains: "Bibliothèque" - path: "SharepointToolbox/SharepointToolbox.csproj" provides: "Self-contained single-file publish configuration" contains: "PublishSingleFile" key_links: - from: "SharepointToolbox/SharepointToolbox.csproj" to: "dotnet publish" via: "PublishSingleFile + SelfContained + IncludeNativeLibrariesForSelfExtract properties" pattern: "PublishSingleFile.*true" --- Fix all French diacritic-missing strings in Strings.fr.resx and add self-contained single-file publish configuration to the csproj. Purpose: Addresses two of the four Phase 5 success criteria — complete French locale and single EXE distribution. These are independent file changes that can run parallel with Plan 01's test creation. Output: Corrected FR strings, publish-ready csproj. @C:/Users/dev/.claude/get-shit-done/workflows/execute-plan.md @C:/Users/dev/.claude/get-shit-done/templates/summary.md @.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md @.planning/phases/05-distribution-and-hardening/05-RESEARCH.md @SharepointToolbox/Localization/Strings.fr.resx @SharepointToolbox/SharepointToolbox.csproj Task 1: Fix French diacritic-missing strings in Strings.fr.resx SharepointToolbox/Localization/Strings.fr.resx Open `Strings.fr.resx` and fix ALL the following strings. The file is XML — edit the `` elements directly. Be careful to preserve the XML structure and encoding. Corrections (key -> wrong value -> correct value): 1. `transfer.sourcelibrary`: "Bibliotheque source" -> "Bibliothèque source" 2. `transfer.destlibrary`: "Bibliotheque destination" -> "Bibliothèque destination" 3. `transfer.mode.move`: "Deplacer" -> "Déplacer" 4. `transfer.conflict.overwrite`: "Ecraser" -> "Écraser" 5. `transfer.start`: "Demarrer le transfert" -> "Démarrer le transfert" 6. `transfer.nofiles`: "Aucun fichier a transferer" -> "Aucun fichier à transférer." 7. `bulkmembers.preview`: "Apercu" (in the value) -> "Aperçu" (preserve the rest of the value including any format placeholders) 8. `bulksites.execute`: "Creer les sites" -> "Créer les sites" 9. `bulksites.preview`: "Apercu" -> "Aperçu" (preserve format placeholders) 10. `bulksites.owners`: "Proprietaires" -> "Propriétaires" 11. `folderstruct.execute`: "Creer les dossiers" -> "Créer les dossiers" 12. `folderstruct.preview`: "Apercu ({0} dossiers a creer)" -> "Aperçu ({0} dossiers à créer)" 13. `folderstruct.library`: "Bibliotheque cible" -> "Bibliothèque cible" 14. `templates.list`: "Modeles enregistres" -> "Modèles enregistrés" 15. `templates.opt.libraries`: "Bibliotheques" -> "Bibliothèques" 16. `bulk.result.success`: "Termine : {0} reussis, {1} echoues" -> "Terminé : {0} réussis, {1} échoués" 17. `bulk.result.allfailed`: "Les {0} elements ont echoue." -> "Les {0} éléments ont échoué." 18. `bulk.result.allsuccess`: "Les {0} elements ont ete traites avec succes." -> "Les {0} éléments ont été traités avec succès." 19. `bulk.exportfailed`: "Exporter les elements echoues" -> "Exporter les éléments échoués" 20. `bulk.retryfailed`: "Reessayer les echecs" -> "Réessayer les échecs" 21. `bulk.validation.invalid`: fix "reimportez" -> "réimportez" (preserve rest of string) 22. `bulk.csvimport.title`: "Selectionner un fichier CSV" -> "Sélectionner un fichier CSV" 23. `folderbrowser.title`: "Selectionner un dossier" -> "Sélectionner un dossier" 24. `folderbrowser.select`: "Selectionner" -> "Sélectionner" Also check for these templates.* keys (noted in research): 25. `templates.capture`: if contains "modele" without accent -> "modèle" 26. `templates.apply`: if contains "modele" without accent -> "modèle" 27. `templates.name`: if contains "modele" without accent -> "modèle" IMPORTANT: Do NOT change any key names. Only change `` content. Do NOT add or remove keys. Preserve all XML structure and comments. dotnet msbuild SharepointToolbox/SharepointToolbox.csproj -t:Compile -p:DesignTimeBuild=true -v:quiet 2>&1 | tail -5 All 25+ FR strings corrected with proper French diacritics (e, a -> e with accent, a with accent, c with cedilla). Project compiles without errors. No keys added or removed. Task 2: Add self-contained single-file publish configuration to csproj SharepointToolbox/SharepointToolbox.csproj Add a new `` block to `SharepointToolbox.csproj` specifically for publish configuration. Place it after the existing main `` (the one with `WinExe`). Add exactly these properties: ```xml true win-x64 true ``` Using a conditional PropertyGroup so these properties only activate during publish (when PublishSingleFile is passed via CLI or profile). This avoids affecting normal `dotnet build` and `dotnet test` behavior. The existing `false` MUST remain in the main PropertyGroup — do NOT change it. After editing, verify the publish command works: ```bash dotnet publish SharepointToolbox/SharepointToolbox.csproj -c Release -p:PublishSingleFile=true -o ./publish ``` Confirm output is a single EXE (no loose .dll files in the publish folder). dotnet publish SharepointToolbox/SharepointToolbox.csproj -c Release -p:PublishSingleFile=true -o ./publish 2>&1 | tail -3 && ls ./publish/*.dll 2>/dev/null | wc -l SharepointToolbox.csproj has PublishSingleFile configuration. `dotnet publish -p:PublishSingleFile=true` produces a single SharepointToolbox.exe (~200 MB) with zero loose DLL files in the output directory. PublishTrimmed remains false. 1. FR resx compiles: `dotnet msbuild SharepointToolbox/SharepointToolbox.csproj -t:Compile -p:DesignTimeBuild=true -v:quiet` 2. Publish produces single EXE: `dotnet publish SharepointToolbox/SharepointToolbox.csproj -c Release -p:PublishSingleFile=true -o ./publish && ls ./publish/*.dll 2>/dev/null | wc -l` (expect 0) 3. Full test suite still green: `dotnet test SharepointToolbox.Tests/SharepointToolbox.Tests.csproj -v quiet` - Strings.fr.resx contains proper diacritics for all 25+ corrected keys - SharepointToolbox.csproj has PublishSingleFile + SelfContained + IncludeNativeLibrariesForSelfExtract in conditional PropertyGroup - PublishTrimmed remains false - dotnet publish produces single EXE with 0 loose DLLs - Existing test suite unaffected After completion, create `.planning/phases/05-distribution-and-hardening/05-02-SUMMARY.md`