---
phase: 05-distribution-and-hardening
plan: 03
type: execute
wave: 2
depends_on:
  - 05-01
  - 05-02
files_modified: []
autonomous: false
requirements:
  - FOUND-11

must_haves:
  truths:
    - "All unit tests pass including new helper tests and locale completeness tests"
    - "Published EXE exists as a single self-contained file"
    - "Application is ready for clean-machine smoke test"
  artifacts: []
  key_links: []
---

<objective>
Run the full test suite (including Plan 01's new tests and Plan 02's diacritic fixes), verify the publish output, and checkpoint for human smoke test on a clean machine.

Purpose: Final gate before shipping. Verifies all three workstreams integrate correctly and the published artifact is ready for distribution.
Output: Confirmed green test suite, verified publish artifact, human sign-off.
</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
@.planning/phases/05-distribution-and-hardening/05-01-SUMMARY.md
@.planning/phases/05-distribution-and-hardening/05-02-SUMMARY.md
</context>

<tasks>

<task type="auto">
  <name>Task 1: Run full test suite and verify publish artifact</name>
  <files></files>
  <action>
1. Run the full test suite to confirm all tests pass (including the new ExecuteQueryRetryHelper, SharePointPagination, and LocaleCompleteness tests from Plan 01, which should now pass thanks to Plan 02's diacritic fixes):

```bash
dotnet test SharepointToolbox.Tests/SharepointToolbox.Tests.csproj -v quiet
```

All tests must pass (except known Skip tests for interactive MSAL login). If the diacritic spot-check test (FrStrings_ContainExpectedDiacritics) fails, identify which strings still need fixing and fix them in Strings.fr.resx.

2. Run the publish command and verify the output:

```bash
dotnet publish SharepointToolbox/SharepointToolbox.csproj -c Release -p:PublishSingleFile=true -o ./publish
```

3. Verify single-file output:
   - Count DLL files in ./publish/ — expect 0
   - Confirm SharepointToolbox.exe exists and is > 150 MB (self-contained)
   - Note the exact file size for the checkpoint

4. If any test fails or publish produces loose DLLs, diagnose and fix before proceeding.
  </action>
  <verify>
    <automated>dotnet test SharepointToolbox.Tests/SharepointToolbox.Tests.csproj -v quiet && 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>Full test suite green (all new + existing tests pass). Publish produces single SharepointToolbox.exe with 0 loose DLLs.</done>
</task>

<task type="checkpoint:human-verify" gate="blocking">
  <name>Task 2: Human smoke test — EXE launch and French locale verification</name>
  <files></files>
  <action>
Present the published EXE to the user for manual verification. The automated work (test suite, publish) is complete in Task 1. This checkpoint verifies visual and runtime behavior that cannot be automated.

The published EXE is at ./publish/SharepointToolbox.exe (~200 MB self-contained).

Verification checklist for the user:
1. Single-file: ./publish/ contains only SharepointToolbox.exe (+ optional .pdb), no .dll files
2. Clean-machine launch: Copy EXE to a machine without .NET 10 runtime, double-click, verify main window renders
3. French locale: Switch to French in Settings, navigate all tabs, verify accented characters display correctly
4. Tab health: Click through all 10 tabs and confirm no crashes
  </action>
  <verify>User confirms "approved" after visual and functional verification.</verify>
  <done>Human confirms: EXE launches on clean machine, French locale displays correct diacritics, all tabs render without crashes.</done>
</task>

</tasks>

<verification>
Full test suite: `dotnet test SharepointToolbox.Tests/SharepointToolbox.Tests.csproj -v quiet`
Publish artifact: `ls ./publish/SharepointToolbox.exe` exists, `ls ./publish/*.dll 2>/dev/null | wc -l` returns 0
</verification>

<success_criteria>
- All unit tests pass (including new helper + locale tests)
- Published EXE is a single self-contained file (~200 MB)
- No loose DLL files in publish output
- Human confirms app launches and French locale is correct
</success_criteria>

<output>
After completion, create `.planning/phases/05-distribution-and-hardening/05-03-SUMMARY.md`
</output>
