Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
1658599
suggestions update
HugoAnler Mar 28, 2026
5103372
feat: reduce Windows footprint — +11 services, +3 hosts, +8 reg keys\…
HugoAnler Mar 28, 2026
45add7f
feat: reduce Windows footprint — +11 services, +3 hosts, +8 reg keys
HugoAnler Mar 28, 2026
81985fc
feat: reduce Windows footprint — +11 services, +3 hosts, +8 reg keys
claude Mar 28, 2026
b2e4e9e
feat: reduce Windows footprint — +11 services, +3 hosts, +8 reg keys
HugoAnler Mar 28, 2026
6521ea8
feat: reduce Windows footprint — +11 services, +3 hosts, +8 reg keys
claude Mar 28, 2026
b043453
test: add tests for v2 optimizations + fix forbidden Spotlight key
claude Mar 28, 2026
f06968d
docs: update README and CLAUDE.md to reflect v2 optimizations
claude Mar 28, 2026
11343f2
feat: reduce Windows footprint — +11 services, +3 hosts, +8 reg keys
claude Mar 28, 2026
bfa2d34
fix: remove forbidden DisableWindowsSpotlightFeatures key (again)
claude Mar 28, 2026
42ba353
docs(CLAUDE.md): add mandatory operational rules for Git and validation
claude Mar 28, 2026
a68e898
merge: integrate user README with v2 optimization stats
claude Mar 28, 2026
1ca95fd
feat: 8 optimisations v3 + validateur 37 tests (rapport GitHub Summary)
claude Mar 29, 2026
4f09fcb
docs: mettre à jour README.md et CLAUDE.md (v3 — 8 optimisations)
claude Mar 29, 2026
dc11194
chore: add .gitignore (ignore Python __pycache__)
claude Mar 29, 2026
3744fe1
feat(v4): +7 services, +2 autologgers, +14 tâches, +7 hosts, swapfile…
claude Mar 30, 2026
58ce47b
test(v4): 38 tests passants — +3 tests MANDATORY_OPTIMIZATIONS +3 tes…
claude Mar 30, 2026
5e995a1
docs(v4): mettre à jour README et CLAUDE.md pour les ajouts v4
claude Mar 30, 2026
784813e
chore: supprimer suggestions.md (améliorations intégrées en v4)
claude Mar 30, 2026
0414c1a
Update CLAUDE.md with commit message guidelines
HugoAnler Mar 30, 2026
689e8b1
fix(section4): remplace wmic par PowerShell pour détecter l'espace di…
claude Mar 30, 2026
9159698
fix(section4+ci): ajoute -NonInteractive + corrige faux positif valid…
claude Mar 30, 2026
b8a6878
feat(v5): services NetSetupSvc/RpcLocator/UmRdpService, hosts pipe.ar…
claude Mar 31, 2026
9d71855
docs(v5): mise à jour README.md et CLAUDE.md (statistiques + sections…
claude Mar 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
317 changes: 312 additions & 5 deletions .github/scripts/validate_bat.py

Large diffs are not rendered by default.

22 changes: 16 additions & 6 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Validate win11-setup.bat
name: 🛡️ Validation win11-setup.bat

on:
push:
Expand All @@ -9,17 +9,27 @@ on:

jobs:
validate:
name: Static validation
name: "🔍 43 vérifications automatiques"
runs-on: ubuntu-latest

steps:
- name: Checkout
- name: "📥 Récupération du code"
uses: actions/checkout@v4

- name: Set up Python
- name: "🐍 Préparation Python"
uses: actions/setup-python@v5
with:
python-version: "3.x"

- name: Run static validation
run: python .github/scripts/validate_bat.py
- name: "🧪 Validation statique (43 tests)"
run: |
echo "## 🚀 Démarrage de la validation..." >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Info | Valeur |" >> $GITHUB_STEP_SUMMARY
echo "|------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| 📄 Script | \`win11-setup.bat\` |" >> $GITHUB_STEP_SUMMARY
echo "| 📏 Taille | $(wc -l < win11-setup.bat) lignes |" >> $GITHUB_STEP_SUMMARY
echo "| 📋 Règles | \`prerequis_WIN11.md\` |" >> $GITHUB_STEP_SUMMARY
echo "| 🤖 Validateur | \`.github/scripts/validate_bat.py\` |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
python .github/scripts/validate_bat.py
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
__pycache__/
*.pyc
*.pyo
60 changes: 51 additions & 9 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,22 @@ Il n'existe pas d'`autounattend.xml` dans ce dépôt (fichier séparé, hors dé
| 2 | Point de restauration — **toujours en premier** |
| 3 | Suppression fichiers Panther (mot de passe en clair 25H2) |
| 4 | Pagefile fixe 6 Go — vérification 10 Go libres avant |
| 5 | Mémoire : compression, SysMain/Prefetch désactivés |
| 6 | Télémétrie / Copilot / Recall / IA 25H2 |
| 7 | AutoLoggers (DiagTrack, DiagLog, SQMLogger, WiFiSession, CloudExperienceHostOobe, NtfsLog, ReadyBoot, AppModel, LwtNetLog) |
| 5 | Mémoire : compression, SysMain/Prefetch désactivés, `SwapfileControl=0` (swapfile.sys UWP ~256 Mo) |
| 6 | Télémétrie / Copilot / Recall / IA 25H2 / EventTranscript / MRT / TailoredExperiences / DesktopAnalytics |
| 7 | AutoLoggers (DiagTrack, DiagLog, SQMLogger, WiFiSession, CloudExperienceHostOobe, NtfsLog, ReadyBoot, AppModel, LwtNetLog, RadioMgr, RdrLog) |
| 8 | Windows Search — désactive web/Bing/Search Highlights (WSearch reste actif) |
| 9 | GameDVR, Delivery Optimization, Edge démarrage anticipé/arrière-plan (HKCU) |
| 10 | Politiques Windows Update |
| 11 | Vie privée, sécurité, WER, ContentDelivery, AppPrivacy |
| 11b | CDP, Clipboard (Win+V local activé, cloud désactivé), ContentDeliveryManager, HKCU privacy, Ink Workspace, Peernet, TCP sécurité, LLMNR, WPAD, SMBv1, Biométrie |
| 11b | CDP, Clipboard (Win+V local activé, cloud désactivé), ContentDeliveryManager, HKCU privacy, Spotlight suggestions (ActionCenter/Settings/TailoredExperiences HKCU), ShowSyncProviderNotifications=0, PreventDeviceMetadataFromNetwork=1, Ink Workspace, Peernet, TCP sécurité, LLMNR, WPAD, SMBv1, Biométrie |
| 12 | Interface Win10 (taskbar, widgets, menu contextuel, hibernation) |
| 13 | CPU : `SystemResponsiveness=10`, PowerThrottling off, sécurité TCP/IP (`DisableIPSourceRouting`, `EnableICMPRedirect=0`) |
| 13 | CPU : `SystemResponsiveness=10`, PowerThrottling off, sécurité TCP/IP (`DisableIPSourceRouting`, `EnableICMPRedirect=0`), `DisableBandwidthThrottling=1` (LanmanWorkstation), TCP Keep-Alive (`KeepAliveTime=300000`, `KeepAliveInterval=1000`) |
| 13b | Config avancée : bypass TPM/RAM, PasswordLess, NumLock, Snap Assist, menu alimentation, RDP conditionnel |
| 14 | Services → `Start=4` (90+ services, effectif après reboot) |
| 15 | `sc stop` immédiat + `sc failure DiagTrack` |
| 16 | Fichier `hosts` — blocage 57+ domaines télémétrie |
| 14 | Services → `Start=4` (113+ services, effectif après reboot) dont WinRM, RasAuto, RasMan, iphlpsvc, IKEEXT, PolicyAgent, fhsvc, AxInstSV, MSiSCSI, TextInputManagementService, GraphicsPerfSvc, NcdAutoSetup, lmhosts, CertPropSvc, AppReadiness, WorkFoldersSvc, RmSvc, SgrmBroker, NPSMSvc, AssignedAccessManagerSvc, autotimesvc, NetSetupSvc, RpcLocator, UmRdpService (conditionnel NEED_RDP=0) |
| 15 | `sc stop` immédiat (incluant les 24 nouveaux services v2+v3+v4+v5) + `sc failure DiagTrack` |
| 16 | Fichier `hosts` — blocage 72+ domaines télémétrie dont `eu/us.vortex-win.data.microsoft.com`, `inference.microsoft.com`, `arc.msn.com`, `redir.metaservices.microsoft.com`, `dmd.metaservices.microsoft.com`, `tsfe.trafficshaping.microsoft.com`, `rad.msn.com`, `ads.msn.com`, `adnxs.com`, `pipe.aria.microsoft.com`, `mobile.pipe.aria.microsoft.com` |
| 17a | GPO AppCompat (`DisableUAR`, `DisableInventory`, `DisablePCA`) |
| 17 | 73+ tâches planifiées désactivées (`schtasks /Change /Disable`) |
| 17 | 93+ tâches planifiées désactivées (`schtasks /Change /Disable`) |
| 18 | Suppression apps UWP (PowerShell `Remove-AppxPackage`) |
| 19 | Vidage `C:\Windows\Prefetch\` |
| 19b | Vérification intégrité système (SFC/DISM) + restart Explorer |
Expand All @@ -65,10 +65,52 @@ set NEED_PRINTER=1 # 0 = désactiver Spooler (pas d'imprimante)
set BLOCK_ADOBE=0 # 1 = activer le bloc Adobe dans hosts
```

## CI / Validation automatique

| Fichier | Rôle |
|---|---|
| `.github/workflows/validate.yml` | Déclenche `validate_bat.py` sur push/PR vers `Update` et `main` |
| `.github/scripts/validate_bat.py` | 43 tests statiques — règles lues depuis `prerequis_WIN11.md` + checks hardcodés + rapport GitHub Step Summary |

Tests clés : valeurs registre interdites, services protégés, apps protégées, WU intouché, hosts WU jamais bloqués, structure 20 sections, optimisations obligatoires, services v2/v3/v4/v5 désactivés, hosts v2/v3/v4/v5 bloqués, apps v3 présentes, tâches v4/v5 désactivées.

## Conventions de code

- Chaque section se termine par une ligne `echo [%date% %time%] Section N : ... >> "%LOG%"`
- Toutes les commandes redirigent vers `>nul 2>&1`
- Les services conditionnels utilisent `if "%NEED_X%"=="0" reg add ...`
- Les tâches planifiées avec espaces dans le chemin → appels `schtasks` individuels (pas de boucle `for`)
- Les clés HKCU s'appliquent à l'utilisateur courant (contexte FirstLogonCommands = premier utilisateur)

## Règles opérationnelles — Git et validation

Ces règles sont issues de problèmes concrets rencontrés lors de modifications sur ce dépôt. Elles sont **obligatoires**.

### 1. Toujours pousser les fichiers volumineux via `git` directement

Les outils MCP (`create_or_update_file`) ne peuvent pas gérer fiablement des fichiers de 90 Ko+ avec des caractères Unicode. Le contenu est tronqué ou corrompu silencieusement.

**Règle** : pour `win11-setup.bat`, `validate_bat.py` et tout fichier > 10 Ko, utiliser exclusivement :
```bash
git add <fichier>
git commit -m "message"
git push -u origin <branche>
```
Ne jamais passer le contenu d'un grand fichier en paramètre inline d'un outil MCP ou d'un agent.
Ne jamais mentionner Claude (claude.ai/code) dans le "message" de commit

### 2. Ne jamais lancer d'agents en arrière-plan sur les mêmes fichiers

Un agent lancé en arrière-plan (`run_in_background`) peut lire un état stale du dépôt (avant un commit récent) et pousser une version corrompue ou périmée du fichier, écrasant les corrections.

**Règle** : toute opération qui lit, modifie ou pousse `win11-setup.bat` ou `validate_bat.py` doit être effectuée **séquentiellement dans la session principale**. Aucun agent parallèle ou arrière-plan pour ces fichiers.

### 3. Exécuter le validateur avant tout premier push

Une clé registre interdite (ex. `DisableWindowsSpotlightFeatures`) qui passe inaperçue en local fait échouer la CI. Corriger en CI = commits supplémentaires inutiles.

**Règle** : avant le premier `git push` de toute modification de `win11-setup.bat`, toujours exécuter :
```bash
python3 .github/scripts/validate_bat.py
```
et vérifier que tous les tests passent (0 FAIL). Ne pousser qu'après validation locale réussie.
34 changes: 17 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,23 @@ Le script est organisé en **20 sections** qui s'exécutent séquentiellement :
| 2 | Création d'un point de restauration système (obligatoire avant toute modification) |
| 3 | Suppression des fichiers Panther (`C:\Windows\Panther`) — sécurité : mot de passe admin en clair (25H2) |
| 4 | Pagefile fixe à 6 Go sur C: (uniquement si ≥ 10 Go d'espace libre) |
| 5 | Optimisation mémoire : compression activée, Prefetch désactivé, SysMain arrêté, opt-out télémétrie PowerShell |
| 6 | Zéro télémétrie : 20+ clés registre — Copilot, Recall, DiagTrack, IA 25H2, Spotlight, Cloud Search, collecte Microsoft |
| 7 | AutoLoggers désactivés : DiagTrack, DiagLog, SQMLogger, WiFiSession, NtfsLog, ReadyBoot, AppModel, LwtNetLog, CloudExperienceHostOobe |
| 5 | Optimisation mémoire : compression activée, Prefetch désactivé, SysMain arrêté, opt-out télémétrie PowerShell, `SwapfileControl=0` (swapfile.sys UWP désactivé, ~256 Mo libérés) |
| 6 | Zéro télémétrie : 25+ clés registre — Copilot, Recall, DiagTrack, IA 25H2, Spotlight, Cloud Search, EventTranscript, MRT, TailoredExperiences, DesktopAnalytics |
| 7 | AutoLoggers désactivés : DiagTrack, DiagLog, SQMLogger, WiFiSession, NtfsLog, ReadyBoot, AppModel, LwtNetLog, CloudExperienceHostOobe, RadioMgr, RdrLog |
| 8 | Windows Search : désactivation recherche web, Bing, Search Highlights animés (WSearch reste actif) |
| 9 | GameDVR désactivé, Delivery Optimization désactivé, Edge démarrage anticipé/arrière-plan off (HKCU) |
| 10 | Politiques Windows Update : redémarrage rapide, réseau mesuré autorisé, notifications conservées |
| 11 | Vie privée & sécurité : Cortana, ID publicitaire, historique d'activité, géolocalisation, RemoteAssistance, saisie, AutoPlay, contenu cloud, cartes hors ligne, modèle vocal |
| 11b | CDP, Presse-papiers local Win+V activé (cloud/cross-device désactivé), ContentDeliveryManager, HKCU privacy, LLMNR, WPAD, SMBv1, Biométrie |
| 11b | CDP, Presse-papiers local Win+V activé (cloud/cross-device désactivé), ContentDeliveryManager, HKCU privacy, Spotlight suggestions (ActionCenter/Settings), notifications sync provider (OneDrive/tiers), métadonnées matériel réseau, LLMNR, WPAD, SMBv1, Biométrie |
| 12 | Interface Win10 : barre à gauche (HKLM), widgets supprimés, Teams/Copilot masqués, menu contextuel classique, "Ce PC" par défaut, Galerie/Réseau masqués, son démarrage off, hibernation off, Fast Startup off — centre de notifications conservé |
| 13 | Priorité CPU : `SystemResponsiveness = 10`, PowerThrottling off, TCP security |
| 13 | Priorité CPU : `SystemResponsiveness = 10`, PowerThrottling off, TCP security, `DisableBandwidthThrottling=1`, TCP Keep-Alive 5 min |
| 13b | Config système avancée : bypass TPM/RAM, PasswordLess, NumLock, Snap Assist, menu alimentation, RDP conditionnel |
| 14 | 90+ services désactivés via registre (`Start=4`) |
| 15 | Arrêt immédiat des services désactivés + `sc failure DiagTrack` |
| 16 | Fichier `hosts` : 57+ domaines de télémétrie bloqués en `0.0.0.0` (+ bloc Adobe optionnel) |
| 14 | 113+ services désactivés via registre (`Start=4`) dont WinRM, RasAuto, RasMan, iphlpsvc, IKEEXT, PolicyAgent, fhsvc, AxInstSV, MSiSCSI, TextInputManagementService, GraphicsPerfSvc, **NcdAutoSetup**, **lmhosts**, **CertPropSvc**, AppReadiness, WorkFoldersSvc, RmSvc, SgrmBroker, NPSMSvc, AssignedAccessManagerSvc, autotimesvc, **NetSetupSvc**, **RpcLocator**, **UmRdpService** (conditionnel NEED_RDP=0) |
| 15 | Arrêt immédiat des services désactivés (incluant les 24 nouveaux v2+v3+v4+v5) + `sc failure DiagTrack` |
| 16 | Fichier `hosts` : 72+ domaines de télémétrie bloqués en `0.0.0.0` dont `eu/us.vortex-win.data.microsoft.com`, `inference.microsoft.com`, `arc.msn.com`, `redir.metaservices.microsoft.com`, `dmd.metaservices.microsoft.com`, `tsfe.trafficshaping.microsoft.com`, `rad.msn.com`, `ads.msn.com`, `adnxs.com`, **`pipe.aria.microsoft.com`**, **`mobile.pipe.aria.microsoft.com`** (+ bloc Adobe optionnel) |
| 17a | GPO AppCompat : `DisableUAR`, `DisableInventory`, `DisablePCA`, `AITEnable=0` |
| 17 | 73+ tâches planifiées désactivées (télémétrie, CEIP, Recall, Copilot, Xbox, IA 25H2, MDM, Work Folders) |
| 18 | Suppression de 73 applications bloatware (UWP) via PowerShell |
| 17 | 93+ tâches planifiées désactivées (télémétrie, CEIP, Recall, Copilot, Xbox, IA 25H2, MDM, Work Folders, Input sync, LiveKernelReports, HelloFace, Sysmain, SpacePort, BrokerInfrastructure, CloudContent, WlanSvc/CDSSync, **SdbinstMergeDbTask**, **AutoEnrollmentTask**, **UserTask**, **NetworkStateChangeTask**, **UsersOptInToMapsUpdatesTask**) |
| 18 | Suppression de 74 applications bloatware (UWP) via PowerShell (dont Microsoft.MicrosoftJournal) |
| 19 | Nettoyage du dossier `C:\Windows\Prefetch` |
| 19b | Vérification intégrité système (SFC/DISM) + restart Explorer |
| 20 | Résumé d'exécution dans le log + fin du script |
Expand Down Expand Up @@ -145,11 +145,11 @@ Sur un Windows 11 déjà installé :

| Catégorie | Quantité |
|---|---|
| Clés registre modifiées | 135+ |
| Services désactivés | 90+ |
| Tâches planifiées désactivées | 73+ |
| Applications (UWP) supprimées | 73+ |
| Domaines de télémétrie bloqués | 57+ |
| Clés registre modifiées | 160+ |
| Services désactivés | 113+ |
| Tâches planifiées désactivées | 93+ |
| Applications (UWP) supprimées | 74+ |
| Domaines de télémétrie bloqués | 72+ |
| Options de configuration | 5 |

---
Expand All @@ -158,7 +158,7 @@ Sur un Windows 11 déjà installé :

| Fichier | Description |
|---|---|
| `win11-setup.bat` | Script principal d'optimisation post-installation (~997 lignes) |
| `win11-setup.bat` | Script principal d'optimisation post-installation (~1135 lignes) |
| `prerequis_WIN11.md` | Document de spécification : règles de conception, listes d'apps/services/tâches, contraintes techniques |
| `CLAUDE.md` | Fichier de configuration interne — structure du script, règles absolues, conventions |

Expand All @@ -168,7 +168,7 @@ Sur un Windows 11 déjà installé :

### Pourquoi pas de boucle pour les clés registre ?

Les 135+ appels `reg add` sont écrits individuellement et non factorisés dans une boucle `for`. Ce choix est délibéré :
Les 150+ appels `reg add` sont écrits individuellement et non factorisés dans une boucle `for`. Ce choix est délibéré :

- **Chemins et types hétérogènes** — chaque clé a sa propre ruche (`HKLM`, `HKCU`), son propre chemin, son type (`REG_DWORD`, `REG_SZ`, `REG_MULTI_SZ`) et sa valeur. Une boucle nécessiterait un tableau de paramètres plus complexe à maintenir que les appels directs.
- **Lisibilité et auditabilité** — un script de sécurité/optimisation doit pouvoir être relu ligne par ligne. Chaque `reg add` est explicite : on voit immédiatement ce qui est modifié, où et avec quelle valeur.
Expand Down
10 changes: 10 additions & 0 deletions prerequis_WIN11.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,9 @@ Ces services ne doivent **jamais** être désactivés :
| `TapiSrv` | Telephony (TAPI) — inutile sur PC de bureau sans modem/RNIS/softphone |
| `WFDSConMgrSvc` | Wi-Fi Direct Services Connection Manager — inutile sur PC de bureau fixe |
| `SessionEnv` | Remote Desktop Configuration — conditionnel `NEED_RDP=0` (complément TermService) |
| `NetSetupSvc` | Network Setup Service — ne tourne qu'à la configuration réseau initiale, inutile post-setup |
| `RpcLocator` | Remote Procedure Call Locator — service déprécié depuis Vista, inutile sur réseau moderne |
| `UmRdpService` | RDP User Mode Port Redirector — conditionnel `NEED_RDP=0` (inutile si RDP désactivé) |

> ⚠️ `WSearch` : **NE PAS ajouter à cette liste** — toujours conservé sans exception

Expand Down Expand Up @@ -310,6 +313,11 @@ Ces services ne doivent **jamais** être désactivés :
| `\Microsoft\Windows\DUSM\dusmtask` | Maintenance Data Usage Service — complément DusmSvc désactivé |
| `\Microsoft\Windows\Management\Provisioning\Cellular` | Approvisionnement réseau cellulaire — inutile sur PC de bureau |
| `\Microsoft\Windows\Management\Provisioning\Logon` | MDM provisioning au logon — inutile hors Intune/SCCM |
| `\Microsoft\Windows\Application Experience\SdbinstMergeDbTask` | Fusion base compatibilité applicative/télémétrie — v5 |
| `\Microsoft\Windows\CertificateServicesClient\AutoEnrollmentTask` | Inscription auto certificats Active Directory — inutile hors entreprise — v5 |
| `\Microsoft\Windows\CertificateServicesClient\UserTask` | Tâche utilisateur inscription certificats — inutile hors entreprise — v5 |
| `\Microsoft\Windows\SettingSync\NetworkStateChangeTask` | Synchronisation paramètres déclenchée sur changement réseau — v5 |
| `\Microsoft\Windows\Maps\UsersOptInToMapsUpdatesTask` | Opt-in mises à jour cartographiques (MapsBroker déjà désactivé) — v5 |

---

Expand Down Expand Up @@ -351,6 +359,8 @@ Ces services ne doivent **jamais** être désactivés :
| `outlookads.live.com` | Publicités Outlook |
| `fp.msedge.net` | CDN télémétrie Edge |
| `nexus.officeapps.live.com` | Télémétrie Office |
| `pipe.aria.microsoft.com` | Pipeline ARIA principal (hors Edge-spécifique) — v5 |
| `mobile.pipe.aria.microsoft.com` | Pipeline ARIA mobile — v5 |

> Adobe (commenté par défaut — activer si pas de logiciel Adobe) :
> `lmlicenses.wip4.adobe.com`, `lm.licenses.adobe.com`, `practivate.adobe.com`, `activate.adobe.com`
Expand Down
Loading
Loading