Fiche OBB-T1-SPEC — Niveau N2 — Modèle prévu claude-opus-5-5 | utilisé claude-opus-5-5 — Agent orchestrateur (session « OBB ») — Skills sk-orchestrate, lp-lot, sk-change-safety # OBB-T1-SPEC : B1, dépôt git de `Content\Modules` hors de l'arbre (P1-b, `core.worktree`) (2026-10-10) Statut : **rédigée, non exécutable en l'état** (OBB-T1 suspendue par arbitrage Big Boss, `etat\BOSS\BOSS-JOURNAL.md`). Aucune modification faite par cette SPEC. Entrées : `OBB-T1a-INV.md` (accepté), `etat\OB\OBA\OBA-T5-EVAL.md` § 1 B1, `OBA-T23-PROJ-CART.md` A10. Décision utilisateur : G-OB-3 = P1 variante b + garde-fou P2 (OBB-TACHES l. 3-6). ## 1. Conditions d'entrée (toutes requises) | # | Condition | Contrôle | |---|---|---| | E1 | Tickets ETAT3-R3 / ETAT3-R4 commités (skills `lp-paths`, `lp-repo` des deux addons propres) **et** FIN-LOT de DOCMV, qui gèle ensuite ces deux skills (Big Boss, 2026-10-10) | `git -C D:\Game\LifePlay-Sandbox status --short -- Tools/claude/skills/lp-paths Tools/claude/skills/lp-repo` vide ; idem `LifePlay-Sandbox-5.8` | | E2 | Emplacement `` choisi par l'utilisateur (§ 2) | citation de l'accord dans le ticket | | E3 | Copie 5.5 (gelée) : accord explicite de l'utilisateur, demandé par Big Boss | **accord transmis par Big Boss (2026-10-10) : « approuvé pour OBB »** (déplacement de `Content\Modules\.git` 5.5 vers `D:\Game\LifePlay_ModulesGit\5.5.git`) ; à confirmer par l'utilisateur dans la session OBB avant le ticket 5.5 ; prévenir Big Boss avant d'agir (hors file : ne touche pas la copie UE 5.8) | | E4 | Copie 5.8 : `BUILD-GO` de Big Boss (le déplacement touche `Content\`) | ligne du `BOSS-JOURNAL.md` | | E5 | Dépôt Modules dans un état normal : pas d'`index.lock`, `MERGE_HEAD`, rebase ; aucun UnrealEditor / LifePlay lancé | `Test-Path`, `Get-Process` | ## 2. Emplacement du git-dir (décision utilisateur) **Décision utilisateur (2026-10-10) : option A, « LifePlay_ModulesGit (Recommandé) »** → `` = `D:\Game\LifePlay_ModulesGit\5.8.git`, `` = `D:\Game\LifePlay_ModulesGit\5.5.git`. Condition E2 remplie. | Option | Chemins | Pour | Contre | |---|---|---|---| | **A (recommandée)** | `D:\Game\LifePlay_ModulesGit\5.8.git`, `D:\Game\LifePlay_ModulesGit\5.5.git` | hors des deux copies, hors de `Content`, hors des builds ; nommage des dossiers voisins (`LifePlay_Backup_5.5`, `LifePlay_Build_…`, `LifePlay_Publication`) ; même volume `D:` (déplacement = renommage, sans recopie) | un dossier de plus à sauvegarder | | B | `D:\Game\LifePlay-master 5.8.modules.git` (et 5.5) | à côté de chaque copie | mêmes avantages, nom moins lisible | | C | sous `D:\Game\LifePlay_Backup_5.5\` | déjà sauvegardé | mélange un dépôt vivant avec les instantanés (que `Restore.ps1` lit) : rejetée | `D:` : 2,46 To libres (T1a § D) ; aucun dossier candidat n'existe déjà. ## 3. Procédure par copie (ticket `MOVE` au gardien ; 5.8 d'abord, 5.5 ensuite si E3) 1. **Photo avant** (lecture) : `git -C \Content\Modules rev-parse HEAD` ; `git -C … --no-optional-locks status --porcelain` (5.8 attendu : ` M Clothes4.txt`, 1 ligne, à **conserver** tel quel) ; `git -C … rev-list --all --reflog --count` (428) ; `du -sb \Content\Modules\.git` (450 763 872 o). 2. **Copie de sécurité** (`sk-change-safety`) : `robocopy \Content\Modules\.git D:\Game\LifePlay_Backup_5.5\OBB\modules-git-<5.8|5.5> /E /COPY:DAT` puis compte de fichiers et d'octets égaux (142 fichiers, 450 763 872 o). 3. **Déplacement** : `Move-Item -LiteralPath '\Content\Modules\.git' -Destination ''` (même volume). 4. **Configuration** : `git --git-dir='' config core.worktree '/Content/Modules'` ; `git --git-dir='' config core.bare` = `false`. 5. **Photo après** : `Test-Path -LiteralPath '\Content\Modules\.git'` = False (dossier **et** fichier) ; `git --git-dir='' --work-tree='\Content\Modules' rev-parse HEAD` = étape 1 ; `status --porcelain` identique octet pour octet à l'étape 1 ; `rev-list --all --reflog --count` = 428 ; `git -C status --short` (dépôt du jeu) identique à avant. 6. Retour arrière (proposé, jamais lancé sans accord) : `git --git-dir='' config --unset core.worktree` puis `Move-Item '' '\Content\Modules\.git'` ; la copie de l'étape 2 reste le filet. **Piège établi par lecture (nouveau)** : sans `.git` dans `Content\Modules`, `git -C \Content\Modules …` remonte au dépôt **du jeu** (`\.git`), où `/Content/Modules/` est ignoré (`.gitignore:83` 5.8, `:77` 5.5). Une commande oubliée ne échoue donc pas : elle répond pour le mauvais dépôt (`status` vide, `log` du jeu). Toute commande sur les modules doit passer par `--git-dir/--work-tree` ; le remplacement des 4 lignes de `lp-paths` est obligatoire, pas cosmétique. Contrôle conseillé dans `lp-paths` : `git --git-dir= rev-parse --show-toplevel` doit rendre `/Content/Modules`. ## 4. Remplacements (fiche lp-impl après E1 ; liste exhaustive de `OBB-T1a-INV.md` § 5) | Fichier | Lignes | Changement | |---|---|---| | `D:\Game\LifePlay-Sandbox\Tools\claude\skills\lp-paths\SKILL.md` (sert les deux copies par la jonction `.claude\skills`, T1a) et l'exemplaire `LifePlay-Sandbox-5.8` | 16, 66, 67 | forme `git --git-dir= --work-tree='\Content\Modules' status --porcelain` ; ligne 16 : « git-dir hors arbre `` » | | `…\skills\lp-repo\SKILL.md` (deux exemplaires) | 18 | « git-dir local `` hors arbre (un par copie) » | | `.gitignore` 5.8 `:82` ; 5.5 `:76` (5.5 : seulement si E3) | commentaire | « modules de jeu dans un dépôt local séparé (git-dir hors arbre ``, OBB) » ; la règle `/Content/Modules/` reste | | `Tools\CheckIntegrity.ps1` (5.8) | `Hash-Tree` `:35` | **décision de lot** : la référence `D:\Game\LifePlay_Backup_5.5\ref_modules_5.8.csv` contient 142 lignes `Content\Modules\.git\…` ; après le déplacement, `-Modules` signalera 142 fichiers absents. Recommandé : exclure `\.git\` des deux côtés de la comparaison (référence conservée, la modification CHG-287 de `Clothes4.txt` reste visible). Alternative : `-InitRef` (efface aussi l'écart `Clothes4.txt`). Script partagé : à déclarer à Big Boss avant écriture | | `Docs/Migration/21_Sandbox_Addon.md:227`, `27_Plan_Migration_UE58.md:59`, `29_Projet_Stabilisation_V2.md:317` | descriptions | fiche DOC (lp-writer) après la VAL, avec l'entrée CHG | Hors périmètre : `Config/DefaultGame.ini:74` (`DirectoriesToAlwaysStageAsNonUFS=(Path="Modules")`) reste inchangé ; les lignes historiques du Journal ne sont pas réécrites. ## 5. Validation (fiche VAL distincte, lp-validator) - Étape 5 de § 3 rejouée sur chaque copie traitée ; `CheckIntegrity.ps1 -Modules` : 0 écart hors `Clothes4.txt` (si l'option recommandée de § 4 est retenue). - `Tools\CheckPackage.ps1` (OBB-T3) sur le build neuf d'OBB-T7 : contrôle (1) PASS, 0 ligne `Modules/.git` au manifeste NonUFS. - Démarrage du build neuf et S2 sans erreur nouvelle (L12 : P1-b ramène l'état sans `.git` de V1.5 et DC4 ; les appelants Blueprint de `GetAllFilesFromFolder` n'ont pas besoin d'être établis pour ce retour à l'état antérieur). ## 6. Ordre imposé (arbitrage Big Boss, 2026-10-10, sur cette SPEC) 1. **Remplacements d'abord** (§ 4) : skills et scripts passent à `git --git-dir= --work-tree=\Content\Modules` explicites, **avant** le déplacement ou dans le même commit. Pendant la fenêtre, le `` n'existe pas encore : une commande échoue bruyamment (« not a git repository ») au lieu de répondre pour le dépôt du jeu. 2. **Déplacement ensuite** (§ 3) : copie 5.8 sous `BUILD-GO` ; copie 5.5 sur accord de l'utilisateur, phrase exacte citée dans le ticket (aucun accord obtenu à ce jour). Après la levée du gel DOCMV, **refaire le Grep de T1a** avant les remplacements : DOCMV change aussi des chemins dans `lp-paths` et `lp-repo` (Big Boss, 2026-10-10) ; la liste de § 4 n'est valable qu'après ce nouveau relevé. 3. **Contrôle** : Grep `git -C` + `Content[\\/]Modules` dans `D:\Game\LifePlay-Sandbox\Tools\claude`, `D:\Game\LifePlay-Sandbox-5.8\Tools\claude`, `%USERPROFILE%\.claude` et `Tools` des deux copies = 0 occurrence (témoin non nul : le même Grep avant les remplacements = 4) ; `git --git-dir= --work-tree=… status` fonctionne. 4. **Annonce** : `[OBB→BOSS] OBB-T1 FAIT` ; Big Boss diffuse à toutes les sessions. `CheckIntegrity.ps1` (§ 4) : accordé par Big Boss ; avant écriture, lui déclarer les lignes modifiées et les appelants du script (Grep dans `Tools` et dans les skills). Skills modifiés seulement après le commit d'ETAT3-R3/R4 (session « AR »). ## 7. Découpage prévu | Fiche | Agent | Copie UE | Dépend de | |---|---|---|---| | OBB-T1b (remplacements § 4, étape 1) | lp-impl | non | E1 ; déclaration `CheckIntegrity.ps1` à Big Boss | | OBB-R2 (ticket COMMIT d'OBB-T1b, après VAL statique) | lp-gardien | non | OBB-T1b | | OBB-R3 (ticket MOVE 5.8, étape 2) | lp-gardien | oui (BUILD-GO, `Content\`) | E2, E4, E5, OBB-R2 | | OBB-R4 (ticket MOVE 5.5) | lp-gardien | non (copie 5.5) | E3, OBB-R3 vérifié | | OBB-T1v (VAL § 5 et contrôle de l'étape 3) | lp-validator | non | OBB-R3 (et R4 si fait) | | OBB-T7 (build, contrôles, démarrage) | lp-builder + lp-validator | oui (BUILD-DEMANDE) | OBB-T1v, OBB-T3v | Numérotation des tickets indicative : OBB-R2 peut revenir au premier COMMIT d'OBB-T3 selon l'ordre réel.