[DTP-Worker 20260806_184624] VÉRIF axe NEUF « portabilité des NOMS de fichiers / structure arbre git (collision-casse · réservés Windows · chars illégaux · dot/espace terminal · symlinks) » → CLEAN 409 fichiers · 0 édition de prod
This commit is contained in:
committed by
Claude Code DTP Worker
parent
558225a74d
commit
40b023c2eb
@@ -1501,3 +1501,24 @@ journaux `05_activity_log/`. **0 date inventée.** Faux-positifs écartés par c
|
||||
**Conformité.** 0 édition de production (sweep read-only). `./run_ci.sh` inchangé = **33 PASS · 0 FAIL ·
|
||||
0 SKIP**. Fichiers : ce journal + 1 entrée mémoire. Sweep **rejouable** (stdlib pur) — **NON promu en
|
||||
gate** (#5, occurrence-zéro).
|
||||
|
||||
## Session `20260806_184624` — VÉRIF · axe NEUF « portabilité des NOMS de fichiers / structure de l'arbre git (collision-casse · réservés Windows · chars illégaux · dot/espace terminal · symlinks) » → CLEAN · 0 édition de production
|
||||
|
||||
**Choix de tâche.** `./run_ci.sh --static` au démarrage = **8 PASS · 0 FAIL · 0 SKIP** (gate complet = 33 jobs), arbre propre, roadmap `ROADMAP_8_WEEKS_OR_LESS.md` intégralement livrée/gatée (prod VPS / builds EAS / dépôts ONAPI hors périmètre worker · #8), `OPEN_DECISIONS_REGISTER.md` = arbitrages produit de Michel (non éditables). Objectif : un **axe teeth encore jamais balayé**.
|
||||
|
||||
**Axe NEUF (absent de la mémoire).** TOUS les balayages précédents portent sur le **contenu** des fichiers (comptes, slugs, schémas, encodage byte/NFC, dates) ou les **valeurs** des artefacts. Jamais éprouvé : la **portabilité de l'arbre lui-même** — les **noms de fichiers** et la **structure** du dépôt. Un checkout se fait sur macOS (case-insensitive/case-preserving) et Windows (NTFS : noms réservés, chars interdits, dot/espace terminal ignorés) — la CI, elle, tourne sous Linux (case-sensitive, POSIX permissif). Donc un futur agent qui commit `out/Data.json` à côté de `out/data.json`, ou un fichier `con.md`/`a:b.json`, garde la **CI verte sous Linux** tout en **cassant le `git checkout` sur Mac/Windows** (collision silencieuse : un des deux fichiers écrase l'autre / erreur d'invalid-argument). Faux-vert de portabilité, invisible à toute la chaîne de gates (aucun ne regarde les noms). Distinct de `runtime-encoding-integrity-sweep`/`unicode-nfc-normalization-sweep` (qui balaient le **contenu** octet/forme-NFC des fichiers, jamais leurs **chemins**).
|
||||
|
||||
**Détecteur (stdlib pur, rejouable).** Sur `git ls-files` (409 fichiers · 340 composants de chemin uniques) :
|
||||
- **Collision-casse** : chemin complet ET (dirname + basename lower) — deux entrées `tolower`-égales mais littéralement distinctes.
|
||||
- **Réservés Windows** : `CON/PRN/AUX/NUL/COM1-9/LPT1-9` (comparés sur le **stem** lower, avant la 1re extension — NTFS réserve aussi `nul.txt`).
|
||||
- **Chars illégaux NTFS** : `< > : " \ | ? *`.
|
||||
- **Chars de contrôle** : tout `ord(ch)<32` dans un composant.
|
||||
- **Dot/espace TERMINAL** de composant (`c != c.rstrip(" .")`) — Windows les strippe silencieusement → renommage fantôme.
|
||||
- **Longueur** : composant >255 octets, chemin >200 octets.
|
||||
- **Symlinks trackés** (`git ls-files -s` mode `120000`) : cible relative ? dans le repo ? résout sur disque ?
|
||||
|
||||
**Dents prouvées (mutants synthétiques, prod intouchée).** 6 classes discriminées end-to-end : collision `out/Data.json`⟷`out/data.json` **MORD** ; `con.md`, `nul.txt` (réservés) **MORDENT** ; `a:b.json`, `we|rd.md` (illégaux) **MORDENT** ; `ta\tb.md` (ctrl) **MORD** ; `folder.`, `x.md.` (dot terminal) + `folder ` `name.md ` (espace terminal) **MORDENT** ; l'échantillon réel + le cas légal `name .md` (espace **interne**, autorisé) **épargnés**. Un premier mutant trailing-space mal formé (`name .md`) a été correctement **épargné** par le détecteur → mutant corrigé en composant à espace **terminal**, pas le détecteur (validation croisée).
|
||||
|
||||
**Résultat.** Sur **409 fichiers trackés** : **0 collision-casse** (chemin + basename), **0 nom réservé Windows**, **0 char illégal/contrôle**, **0 dot/espace terminal**, **0 composant/chemin surdimensionné**. **1 symlink** tracké — `04_roadmap/ROADMAP.md → ROADMAP_8_WEEKS_OR_LESS.md` : cible **relative**, **dans le repo**, **résout** vers un fichier existant = portable et sûr (ni absolu, ni hors-repo, ni dangling). Arbre git **portable**.
|
||||
|
||||
**Conformité.** 0 édition de production (sweep read-only). `./run_ci.sh --static` inchangé = **8 PASS · 0 FAIL · 0 SKIP**. Fichiers : ce journal + 1 entrée mémoire (`tree-filename-portability-sweep`). Sweep **rejouable** (`git ls-files` + stdlib pur) — **NON promu en gate** (#5, occurrence-zéro).
|
||||
|
||||
Reference in New Issue
Block a user