chore: complete v1.0 milestone
All checks were successful
Release zip package / release (push) Successful in 10s
All checks were successful
Release zip package / release (push) Successful in 10s
Archive 5 phases (36 plans) to milestones/v1.0-phases/. Archive roadmap, requirements, and audit to milestones/. Evolve PROJECT.md with shipped state and validated requirements. Collapse ROADMAP.md to one-line milestone summary. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
---
|
||||
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"
|
||||
---
|
||||
|
||||
<objective>
|
||||
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.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@C:/Users/dev/.claude/get-shit-done/workflows/execute-plan.md
|
||||
@C:/Users/dev/.claude/get-shit-done/templates/summary.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
@.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
|
||||
</context>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Fix French diacritic-missing strings in Strings.fr.resx</name>
|
||||
<files>SharepointToolbox/Localization/Strings.fr.resx</files>
|
||||
<action>
|
||||
Open `Strings.fr.resx` and fix ALL the following strings. The file is XML — edit the `<value>` 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 `<value>` content. Do NOT add or remove keys. Preserve all XML structure and comments.
|
||||
</action>
|
||||
<verify>
|
||||
<automated>dotnet msbuild SharepointToolbox/SharepointToolbox.csproj -t:Compile -p:DesignTimeBuild=true -v:quiet 2>&1 | tail -5</automated>
|
||||
</verify>
|
||||
<done>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.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Add self-contained single-file publish configuration to csproj</name>
|
||||
<files>SharepointToolbox/SharepointToolbox.csproj</files>
|
||||
<action>
|
||||
Add a new `<PropertyGroup>` block to `SharepointToolbox.csproj` specifically for publish configuration. Place it after the existing main `<PropertyGroup>` (the one with `<OutputType>WinExe</OutputType>`).
|
||||
|
||||
Add exactly these properties:
|
||||
|
||||
```xml
|
||||
<PropertyGroup Condition="'$(PublishSingleFile)' == 'true'">
|
||||
<SelfContained>true</SelfContained>
|
||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
|
||||
</PropertyGroup>
|
||||
```
|
||||
|
||||
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 `<PublishTrimmed>false</PublishTrimmed>` 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).
|
||||
</action>
|
||||
<verify>
|
||||
<automated>dotnet publish SharepointToolbox/SharepointToolbox.csproj -c Release -p:PublishSingleFile=true -o ./publish 2>&1 | tail -3 && ls ./publish/*.dll 2>/dev/null | wc -l</automated>
|
||||
</verify>
|
||||
<done>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.</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<verification>
|
||||
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`
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- 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
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.planning/phases/05-distribution-and-hardening/05-02-SUMMARY.md`
|
||||
</output>
|
||||
Reference in New Issue
Block a user