LifePlay-Revival/Docs/29_Projet_Stabilisation_V2.md

369 lines
47 KiB
Markdown
Raw Normal View History

---
name: Stabilisation V2 (ST)
overview: Avant toute livraison (décision utilisateur du 2026-10-09 : la V2.0 n'est publiée, par U8, qu'après la stabilisation et l'optimisation), traquer et corriger les défauts du jeu 5.8 — erreurs et accès à None au journal, défauts visibles en jeu, défauts remontés par les joueurs — jusqu'à une V2.0 stable, base de mesure du chantier d'optimisation (doc 30).
todos:
- id: phase0
content: Phase 0 — Fiche projet (ce document) validée par l'utilisateur
status: completed
- id: lot-sta
content: Lot STA — Audit / mesure : parcours types, classement de toutes les erreurs et AccessedNone par Blueprint et cause, registre des défauts connus
status: completed
- id: gate-gst
content: Porte G-ST — go / no-go et ordre des lots (utilisateur)
status: completed
---
# Stabilisation V2 (préfixe ST) — fiche projet (phase 0)
Modèle : modèle agnostique de séquençage (fichier Cursor `sandbox_addon_migration_ff11aeab.plan.md`, mémoire
`modele-sequencage`) : 0 fiche projet → 1 audit → 2 effort, risques, porte → 3 lots → 4 exécution → 5 évaluation.
## Objectif
Une V2.0 **stable** avant sa publication : aucun défaut visible connu non traité, journal d'un parcours type sans erreur inexpliquée,
nombre d'`AccessedNone` réduit et chaque restant justifié. Mesurable par `Tools/LogStats.ps1` sur des parcours fixes.
## Périmètre
- **Dans** : jeu 5.8 (branche `ue5.8`, non publiée ; `main` à la publication U8), C++ `Source/LifePlay`, Blueprints (correctifs par
commandlet ou en éditeur, comme en portage 5.5), configuration ; défauts au journal (erreurs, `AccessedNone`,
avertissements récurrents, à-coups `Gamethread hitch`) ; défauts visibles en jeu ; défauts remontés par les joueurs.
- **Hors** : optimisation, retrait ou remplacement de modules UE (doc 30) ; voie UE5 native U9 ; nouveau contenu ;
contrat des mods (figé : toute correction qui le toucherait = décision utilisateur dédiée).
## Défauts déjà connus (entrée de l'audit STA)
| Défaut | Origine | Source |
|---|---|---|
| Personnages enfoncés dans la rue (jusqu'aux genoux) — **prioritaire** (utilisateur 2026-10-13, défaut visuel ; Room street) — **traité, lot STG** (CHG-344 ; ERR-115, ERR-128, ERR-129). Cause établie par le moteur : capsule prise dans la collision simple du décor de rue (`STG-SF4b-DIAG.md`). Correctifs : C++ (boîte du sol, décors en Pawn Ignore, relevage des passants et du joueur S-F5 / S-F5j, écart de 50 cm S-F5k, relevage écarté d'une façade S-F5m / S-F5n, relevage dès la pose S-F5p) et collision complexe de l'asset de rue. En jeu : COMMUN-6, murs solides et pieds sur le pavé (J1, J2 OK) ; COMMUN-8, deux personnages enfoncés contre une façade (→ S-F5m / n) ; COMMUN-9, « des PNJ s'enfoncent et remontent » 2 à 4 s après l'arrivée (→ S-F5p) ; COMMUN-10, Q5 OK : « pas de personnes sous la rue ». Reste après l'alpha : façades fines (STG-POST1), points de `standIdle` posés trop bas au bord (STG-POST2) | ancien, présent en 5.5 | utilisateur 2026-10-09, `etat/U58/U7/U7-SUIVI.md` ; rappel 2026-10-13 ; `etat/ST/STG/STG-TACHES.md`, `etat/BOSS/COMMUN-10-BILAN.md` |
| Personnages qui se chevauchent parfois : deux personnages doivent occuper deux espaces distincts, séparés d'**au moins 10 cm** — **prioritaire** (utilisateur 2026-10-13, défaut visuel) — **traité, lot STG** (CHG-344 ; ERR-118, ERR-117, ERR-127) : contrôle des tiers dans le placement (Person), garde d'IsValid, place de meuble au maximum et non remplacée, garde `GI::Show` à 70 cm, joueur posé à 80 cm quand un Blueprint libère son siège sans marche (C7-a, défaut d'origine estimé). COMMUN-2 : 0 place partagée sur 1 256 relevés assis ; COMMUN-8, cas N2 à N5 et O1 à O4 OK (dont C7-a) ; rue sans chevauchement (O5). Reste : scènes de contact (hors règle, décision du 2026-10-13), PNJ debout dans un fauteuil (ERR-122, après l'alpha) | ancien (causes établies dans les graphes, `STG-C1-CART.md`) | utilisateur 2026-10-13 |
| Le personnage joueur glisse en marchant avec ZQSD : aucune animation de marche (M_Walk_Loop / B_Walk_Loop pour Michael / Bridget) — **dans l'alpha** (utilisateur 2026-10-13). « Marche : animation » 0 fois en COMMUN-2 et COMMUN-3 ; WalkAnim gardé par `LPAnimRedirect::IsGameTarget()`, qui lit `Saved/Config/Windows/LPAnimTarget.ini`, absent du jeu empaqueté (établi par `STG-WALK-DIAG.md` : garde fausse en jeu empaqueté et clips `/Game/Quaternius` jamais cuits) — **traité, lot STG** (CHG-344 ; ERR-121, ERR-119, ERR-126, ERR-130). Garde locale, clip cuit puis `ClipPath`, deux clips dupliqués sous `/Game/Heavy/Daz/<Bridget ou Michael>/Anim/` (hors git). COMMUN-4 : cas F1 et F2 OK (75 et 105 lancements). Suites : marche coupée à tort par un menu sans boîte visible (C6-b, réponse de l'utilisateur : pas de boîte visible) ; pieds à ≈ 10 cm du sol après un siège (maillage non redescendu au lever, M-Z) : COMMUN-10, Q4 OK, « plus de flottement après le lever » | 5.8 | utilisateur 2026-10-13 ; lot STG |
| Dossier de sauvegarde du jeu renommé de `LifePlay` en `LifePlay-Revival` — **traité** (lots REL-SAV et REL-ALPHA, ERR-042) : garde `LPSaveRelaunch.cpp` avant `WinMain` (relance avec `-UserDir`, Shipping toujours, Development seulement avec `LPSaveLocation.ini`) ; dossier au choix du joueur par `LPSaveLocation.ini` (`SaveDir=`) ; aucune reprise automatique des anciennes sauvegardes (R0) ; contrat des mods inchangé hors la lettre finale de la version (décision « Lettre acceptée »). Essais : E1 à E4 et E6 OK sur COMMUN-8 ; **E9 OK sur le Shipping `2026.10.2.1a`** (relance avec `-UserDir`, dossier créé, sauvegarde puis Continuer, ancien dossier identique). **Reste hors du dossier** : les personnages d'une partie sont écrits dans `<installation>\LifePlay\Content\Saves` (sauf `Saved`) ; E5 (chemin relatif) non fait, facultatif ; option du menu Misc hors alpha | 5.8 | utilisateur 2026-10-13 ; `etat/REL/ALPHA/REL-ALPHA-E9-RESULTAT.md` |
| ~364 `AccessedNone` et 5 erreurs par session (parcours U6) | 4.27 / 5.5 | `etat/U58/U6/U6-T3-AB.md` |
| 4 `Gamethread hitch` sur `MapMarkers_C.LPFocusWidgetComponent` ; 0 en U8-T5cr et U8-T5cr2 (correctif CHG-292 ; estimé : carte ouverte sur déclaration de l'utilisateur, aucune trace au journal). Les autres saccades et hitchs relèvent des fiches STE-H4, STE-H7, STE-H8 et STE-H9 (analyse en cours, `etat/ST/STE/`) — analyse faite (H7 à H9) ; correctifs STE-H10 commités (CHG-336 à 338) ; J6 : trames ≥ 50 ms par minute −12 % (`STE-J6-TRACE.md`) | 5.8 | U6, report U8 ; `etat/U58/U8/U8-T5cr2-VAL.md` |
| Brouillard aux niveaux Effects Low-Med non comparé 5.5 / 5.8 | 5.8 | U6, report U8 |
| Cuisson Shipping à froid (avertissement de cuisson `LegacyIterative` requis, `bUseZenStore=False`, vu au build U6) | 5.8 | U6 (doc 27, résultat U6), report U8 (doc 21) |
| Coiffure par défaut perdue (Bridget chauve) — corrigé en 5.8 (U7-T12), reste en V1.x | H1/H3a | `etat/U58/U7/U7-T11-CART.md` |
| Libellé moteur, bouton du nom d'un mod refusé, ordre d'affichage des mods par défaut (non retenus en U7) | U7 | `U7-SUIVI.md` |
| 210 acteurs externes orphelins (cartes gabarit absentes) | contenu | doc 21, U5 |
| Rafale `Attempted to access index 0 from array Floats_3_… of length 0` dans `GI_C:getBeautyValue` (pile `Room.GenerateUnknownNpcs` → `GI.GeneratePerson` → `getRandomAge`) : 2 591 lignes en 7 s autour des 8 premiers SPAWN (≈ 40 600 lignes de journal) contre 18 en U6 ; `GI` et `Room` inchangés depuis U6, probablement aléatoire (génération de PNJ inconnus) — non établi. Mesures suivantes : U8r 4, U8r2 72 (0,82 par SPAWN, 88 SPAWN), tous `getBeautyValue` | 5.8 (vu en U8) | `etat/U58/U8/U8-T5c-VAL.md`, `U8-T5cr-VAL.md`, `U8-T5cr2-VAL.md` |
| Index hors bornes hors rafale équivalents (713 / 702) ; `Accessed None` 364 → 223 (par personnage 20,2 → 14,9) ; propriétés nouvelles liées à la scène de couple : `CallFunc_getFirstDick_Person_1` ×1, `Actor` ×1 | U8-T5c | `etat/U58/U8/U8-T5c-VAL.md` |
| `No SkeletalMesh` : 7 971 lignes en U8r et 10 289 en U8r2, dont 70 à 77 % (70,7 % en U8r2, 76,8 % en U8r) d'un seul acteur `Person_C` ; famille déjà présente dans les références (871 et 2 723 lignes) — cause non établie | 5.8 (vu en U8) | `etat/U58/U8/U8-T5cr-VAL.md`, `U8-T5cr2-VAL.md` |
| `Accessed None … K2Node_CustomEvent_Person` dans `Room_C > Person_C:PlayIdle > PlayWorkDaily > PlayDaily > moveToPersonStand` : défaut d'origine (journaux C0 et J3, antérieurs à STE-R6), pas de fiche ouverte pour l'instant ; établi par STE, estimé par U8 (comptes non recomptés) ; ne bloque pas T11 selon l'avis de STE, la décision revient à l'utilisateur — classé ERR-089 (« F1 »), accepté sans correctif par l'utilisateur (2026-10-13) ; l'écart E-B1-1 (ERR-090) a disparu avec la garde `IsValid` de G-B1a (COMMUN-2) | origine (vu en U8-T5cr2) | `etat/U58/U8/U8-T5cr2-VAL.md` (requalification du 2026-10-11) |
| Gestionnaire de mods : textes longs (nom « Free Animations Pack (SoerGame, Fab ; mannequin UE5) », auteurs) qui débordent et masquent les flèches ▲/▼ ; demande utilisateur : agrandir la fenêtre, masquer (couper) le texte qui déborde, garantir que les deux zones ne se chevauchent pas — **non prioritaire** | ancien (5.5) | utilisateur 2026-10-09, `etat/U58/U7/U7-SUIVI.md` |
| Atelier de mods : `HairPipeline.ps1 -Step Inspect` sans les champs `"auto"` du guide → message incompréhensible (« Nous ne pouvons pas lier l'argument au paramètre Path… », `HairPipeline.ps1:215`) au lieu de « champ diffuse manquant » ; valider le JSON en entrée — **non prioritaire** | addon | U7-T16, 2026-10-09 |
| Atelier : contrôle « dependances A VERIFIER » de `Tools/HairMaterials.py` faux positif en 5.8 (le registre ne renvoie que le squelette ; matériaux pourtant cuits et rendus, U7-T16) — **non prioritaire** | addon / 5.8 | U7-T16, 2026-10-09 |
| Coiffure d'un mod décoché conservée par un personnage qui la porte (Jade) : comportement du contrat 5.5 (plugin toujours monté, doc 23 § 2.4), gardé en V2.0 ; à revoir (ex. retour à la coiffure par défaut) — **non prioritaire** | contrat 5.5 | utilisateur 2026-10-09 |
| `Accessed None` d'origine acceptés sans correctif : ERR-089 (« F1 »), ERR-091 (« F2 »), ERR-094 (« F-A »), ERR-095 (« F-B »), ERR-096 (`isSameAs`, bruit accepté) ; ERR-090 (écart E-B1-1) supprimé par G-B1a. COMMUN-4 session 2 : 40 avertissements, tous de ces familles et de `PersonCumming` | 4.27 (ERR-091, ERR-094) ; 5.5 (ERR-089, ERR-095) ; ERR-096 d'origine | `Registre_Erreurs.md` (ERR-089 à ERR-091, ERR-094 à ERR-096) ; `STE-H3f-DIAG.md`, `STE-H3h-DIAG.md` |
| ERR-097 : 378 avertissements `chargen` en une image à l'ouverture de `BodyShapeMenu` sans CharGen ouvert ; garde après l'alpha, précédée d'un dump | d'origine | `Registre_Erreurs.md` (ERR-097) ; `STE-H3i-DIAG.md` |
| ERR-098 : gel de 34,2 s après une recherche sur tous les bâtiments (tri de ≈ 49 425 résultats ; 40,9 s en 5.5). **Corrigé et validé en jeu** : COMMUN-6 J12 « recherche globale très rapide », COMMUN-7 « recherche All rapide » | d'origine (5.5) | `Registre_Erreurs.md` (ERR-098) ; `STE-GEL1-VAL.md`, `COMMUN-6-BILAN.md`, `COMMUN-7-BILAN.md` |
| C1 (ERR-105, ERR-111) : touche C et souris C1 mortes après CharGen en cours de partie (cause établie : `SpaceOn` laissé à faux) → B2r ; orientation de C1 figée (à côté de la tête après un lever, vue au plafond) → B2s ; COMMUN-7, L1 et L2 OK. Priorité de l'utilisateur : « injouable à cause de C1 » | 5.8 | `Registre_Erreurs.md` (ERR-105, ERR-111) ; `CAM-COMMUN6-DIAG.md` § 0, § 10 ; `COMMUN-7-BILAN.md` |
| Personnage assis qui disparaît de l'écran : ERR-125, bornes de rendu de la pose debout (→ B2q-a, B2q-b1 ; **validé** : COMMUN-9 P1 OK, COMMUN-10 Q6 OK) ; ERR-107, occlusion par un meuble (témoin T-occ, COMMUN-6 J6 : cas prouvé une fois ; évitement B2l après l'alpha) | 5.8 | `Registre_Erreurs.md` (ERR-107, ERR-125) ; `STG-B2q-DIAG.md` ; `CAM-COMMUN5-DIAG.md` |
| Caméra de scène et commandes pendant le sexe : ERR-108 (axe POV, corrigé, COMMUN-6 J7 OK), ERR-109 et ERR-112 (orbite, molette, Maj + souris, ZQSD, flèches). B2p-R / B2p-D : **cas M1 à M8 OK en COMMUN-8, scène de sexe validée pour l'alpha par l'utilisateur** | 4.27 (ERR-108, ERR-109) ; 5.8 (ERR-112) | `Registre_Erreurs.md` (ERR-108, ERR-109, ERR-112) ; `COMMUN-8-BILAN.md` |
| ERR-123 : couple qui flotte au-dessus du lit. Mesure M1d en COMMUN-6 : `lowestMinusUnder` ≈ 1 cm, le couple touche le lit (J10 OK) ; défaut perçu non expliqué, aucun correctif demandé | 5.8 (estimé) | `Registre_Erreurs.md` (ERR-123) ; `STG-C54-DIAG.md` ; `COMMUN-6-BILAN.md` |
| Couple et commandes pendant le sexe — **traité, validé avec l'alpha** : ERR-113 (couple hors de la pièce, sous le plancher) → B2p-E, B2p-F (murs `Wall*`, marge, pose libre de recouvrement), COMMUN-11 R1 à R3 OK ; ERR-114 (couple coincé dans un meuble) → B2p-F et G3 (`NotifyCoupleTeleported`), COMMUN-11 R5 OK, COMMUN-12 : 2 lignes de témoin, aucun KO rapporté ; ERR-100 (champ de filtre qui prend le clavier) → focus rendu à la vue, puis souris libre et panneau sur Alt (B2p-J). COMMUN-11 : R4 KO partiel (lit, pose sur des meubles) → B2p-H ; COMMUN-12 : glisser et rotation à la souris KO, Espace pris → B2p-J. L'utilisateur valide le comportement de l'alpha sur COMMUN-13 (16:00) | 5.8 (code récent) | `Registre_Erreurs.md` (ERR-113, ERR-114, ERR-100) ; `COMMUN-10-BILAN.md` ; `CAM-COMMUN9-DIAG.md` ; `etat/BOSS/COMMUN-11-BILAN.md`, `COMMUN-12-BILAN.md`, `COMMUN-13-BILAN.md` |
| ERR-099 : le champ « Translate » garde le focus, ZQSD est saisi dans le champ — mineur, après l'alpha | à établir | `Registre_Erreurs.md` (ERR-099) ; `COMMUN-5-BILAN.md` C5-6 |
| ERR-116 : murs, façades et murets traversables en extérieur (prix de S-F4b). **Traité avant l'alpha pour la rue** (collision complexe, COMMUN-6 J1 OK) ; autres extérieurs et variante fine après l'alpha (STG-POST1) | 5.8 | `Registre_Erreurs.md` (ERR-116) ; `STG-COMMUN5-ANALYSE.md` § 7 ; `COMMUN-6-BILAN.md` |
| Après l'alpha : ERR-110 (caméra POV et caméra de scène dans les têtes), ERR-124 (boîte et bande vertes du couple : `DrawDebugBox` inconditionnel, retiré des builds Shipping, **vérifié** : pas de `DrawDebugBox` dans le Shipping de livraison (`REL-ALPHA-T3-VAL.md`) ; en Development il reste affiché) | 5.8 | `Registre_Erreurs.md` (ERR-110, ERR-124) ; `BOSS-ETAT.md` l. 93 |
| Mineurs non instruits : ERR-122 (PNJ debout dans un fauteuil), ERR-131 (animation d'un meuble qui reste sur le joueur après un changement de pièce ; accessoire mal attaché) | d'origine (estimé) | `Registre_Erreurs.md` (ERR-122, ERR-131) |
## Décisions proposées (à valider)
| # | Proposition |
|---|---|
| S1 | Démarrage sur la branche `ue5.8` non publiée (décision utilisateur du 2026-10-09 : aucune livraison avant la stabilisation et l'optimisation, U8 différé) ; référence de mesure de départ : le build Development 5.8 de U6 et son relevé `etat/U58/U6/U6-T3-AB.md`. |
| S2 | Parcours de mesure fixes : nouvelle partie (liste des villes) + Continuer (sauvegarde de référence `Saved\SaveGames` + `Content\Saves`), scène d'éditeur de personnage, une scène de couple ; build Development empaqueté (mémoire « mesure en build empaqueté »). |
| S3 | Classement par impact : (1) visible en jeu / plantage, (2) erreur au journal, (3) `AccessedNone` groupés par Blueprint et nœud, (4) avertissements récurrents. Un lot = une famille de causes, pas un bug isolé. |
| S4 | Critère de sortie : parcours S2 sans erreur inexpliquée ; `AccessedNone` restants listés avec justification ; aucune régression A/B. |
| S5 | Publication : aucune pendant la stabilisation ; la V2.0 est publiée par U8 après la sortie de ST et d'OB (porte utilisateur) ; des V2.0.x par lot ou groupe de lots ensuite seulement. |
| S6 | Retours joueurs : un registre unique (doc 21 ou nouveau) alimente les lots. |
| S8 | Bissection des modules (question utilisateur 2026-10-09) : mesure de base avec `vin_Base` seul et aucun mod d'assets ; puis réintégration un module à la fois (modules texte cochés par défaut, autres modules texte, puis les 3 mods d'assets recuits), même parcours S2 et `LogStats` à chaque ajout, toute erreur nouvelle attribuée au module ajouté ; passage final tout coché (défauts de combinaison). |
| S7 | Boucle MCP (demande utilisateur 2026-10-09) : plugin Epic « Unreal MCP » évalué puis utilisé en éditeur pour l'aide IA (lot STM) ; écriture par MCP seulement après instantané et tracée ; le build empaqueté reste la référence de mesure. |
## Dépôts, outils, livrables
Jeu `D:\Game\LifePlay-master 5.8` (branche `ue5.8` → `main` à la publication U8) ; addon `LifePlay-Sandbox-5.8`. Outils :
`Tools/Build.ps1`, `BuildDebug.ps1` (`-NoUBA`), `LogStats.ps1`, commandlets `LP*` (skill `lp-commandlets`).
Livrables : `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\ST\<lot>\` (voir `etat/INVENTAIRE.md`) ; CHG au journal ;
reports au registre de `21_Sandbox_Addon.md`. Règle de méthode (lot DOCMV, CHG-300, 2026-10-10) : journal, registre, index
`README.md`, docs numérotées et `correctifs\` dans `D:\Game\LifePlay-master 5.8\Docs\` ; seuls les livrables de lot restent
dans `Docs\Migration\etat\`.
## Méthode et outillage (pratiques de la communauté, recherche web 2026-10-09)
Principe : on ne corrige que ce qu'on a mesuré, sur build empaqueté, sur un parcours rejouable, et on revérifie sur
le même parcours. Outils existants du projet en premier (`LogStats.ps1`, commandlets `LP*`, `LPTestStringCompat`).
1. **Mesure reproductible.** Parcours S2 fixes (sauvegarde de référence, mêmes étapes), build Development empaqueté
(Epic et les guides : les mesures en éditeur diffèrent nettement). `LogStats` avant / après chaque lot.
2. **Accessed None.** Le journal nomme Blueprint, propriété et nœud : regrouper par (Blueprint, nœud) puis chercher
POURQUOI la référence est vide (jamais affectée, Cast échoué, lecture avant création, ordre BeginPlay). Un garde
`IsValid` seul fait taire le message sans corriger : n'en mettre que si « vide » est un état normal, et le dire.
Piège connu : un nœud AND évalue ses deux entrées, il ne protège pas une lecture d'objet nul ; préférer une branche
`IsValid` (ou « Validated Get ») avant la lecture. Correctifs Blueprint par commandlet tracé (méthode du portage 5.5).
**Arrêt sur exception en PIE** (Epic) : préférence utilisateur « Blueprint Break on Exceptions » (section
Experimental ; emplacement 5.8 à confirmer par la recherche des préférences) — l'éditeur s'arrête sur le nœud fautif
avec pile d'appels et valeurs (fenêtre Watch, Execution Trace) au lieu d'une remontée du journal. Premier levier sur
les ~364 `AccessedNone` ; le build empaqueté confirme ensuite le correctif.
2b. **Défauts dans le temps (Visual Logger, Epic).** Enregistrer l'état au fil de la session et le revoir après coup
(fichier joignable à la fiche). Cas d'usage : personnages enfoncés dans la rue — tracer position, capsule et hauteur
du sol trouvée, comparer un personnage sain et un fautif. Animation : Rewind Debugger + Animation Insights.
2c. **Reproduction par commandes de triche.** Commandes `Exec` d'une sous-classe de `UCheatManager` (console active en
Development, retirée en Shipping) pour atteindre directement une scène de couple, l'éditeur de personnage ou une
ville : parcours S2 rejouables, base d'un futur scénario Gauntlet. Toute commande ajoutée = code de jeu, tracé (CHG).
3. **À-coups.** `t.HitchFrameTimeThreshold` + `DumpHitches` (écrit chaque à-coup au journal), `stat unit` pour situer
Game / Draw / GPU, puis trace **Unreal Insights** (canaux CPU + Frame, `-statnamedevents`, ~5 s autour de l'à-coup,
signets) ; les fonctions Blueprint n'apparaissent qu'en « Blueprint Time » : ajouter des scopes de profilage C++
autour des appels suspects.
4. **Mémoire / chargement.** `memreport -full` (significatif seulement en build empaqueté), trace
`-trace=memory,loadtime,file`, Memory Insights (étiquettes LLM, fuites, allocations vivantes).
5. **Plantages.** Dossier `Saved\Crashes` (journal, minidump `.dmp`, contexte XML) ; un minidump n'est exploitable
qu'avec les PDB du **même** build : archiver les PDB de chaque build distribué (un dossier par numéro de build,
à côté de `Releases`) et écrire le numéro de build en tête du journal, pour rattacher chaque retour ou plantage à
son build ; pour Shipping, activer « Include debug files » ; ouvrir dans Visual Studio ou WinDbg (VS affiche les
frames Blueprint dans la pile C++, Rare GDC 2023). Depuis UE 5.4, Epic ne reçoit plus les rapports des jeux
empaquetés : les retours joueurs passent par notre registre (S6), journal et dossier `Crashes` joints. Les
`ensure` et erreurs non fatales n'atteignent pas le CrashReportClient : `LogStats` les couvre.
6. **Non-régression automatisée.** **Gauntlet** (Epic) : lance le jeu empaqueté, pilote un scénario, analyse journaux
et plantages — candidat pour un test de fumée par build (démarrage, nouvelle partie, Continuer, éditeur de
personnage) ; séparer les échecs du banc de ceux du jeu (un plantage peut se cacher derrière une erreur générique du
banc, retour d'expérience 5.8 sur le MCP). Tests d'automatisation existants (`LPTestStringCompat`) gardés.
**Data Validation** (Epic) : règles sur les assets, en éditeur ou en ligne de commande (CI) ; ne détecte pas un
`Accessed None` au jeu, mais peut refuser à la cuisson une référence obligatoire non renseignée.
7. **Tri.** Dédupliquer par pile d'appels / (Blueprint, nœud) ; trier par fréquence × impact ; chaque cas : build,
étapes, journal ; pas de nouvelle fonctionnalité pendant un lot de stabilisation.
8. **Outils tiers** (ex. « Unreal Test Kit » sur Fab : bot de jeu, rapports JUnit) : affirmations de vendeur non
vérifiées ; évaluation à part avant tout usage.
**Outil Epic par famille de défaut** (recherche web 2026-10-09 ; un lot choisit son outil de preuve dans ce tableau) :
| Famille | Outil Epic | Règle d'usage |
|---|---|---|
| Logique Blueprint, `AccessedNone` | Blueprint Debugger (points d'arrêt, Watch, Execution Trace), Break on Exceptions | PIE pour trouver, build empaqueté pour confirmer |
| Comportement dans le temps (position, état, IA) | Visual Logger | enregistrement joint à la fiche |
| Animation | Rewind Debugger, Animation Insights, Pose Watch | plugin Animation Insights en éditeur seulement |
| À-coups, temps CPU | `stat unit` / `stat game`, `DumpHitches`, Unreal Insights | Development empaqueté, `-statnamedevents` |
| Mémoire, chargement | `memreport -full`, Memory Insights, trace `loadtime,file` | build empaqueté seulement |
| Invariants C++ | `check` / `verify` / `ensure` | pas d'effet de bord dans `check` (non exécuté en Shipping) ; `ensure` = signalé une fois, continue |
| Plantages | CrashReportClient, minidump + PDB du même build | collecte par notre registre (S6) |
| Non-régression | Automation (dont CQTest), Gauntlet | test de fumée par build, échec = build non diffusé |
| Assets | Data Validation | refus à la cuisson d'une référence obligatoire vide |
9. **Assistance IA par MCP (demande utilisateur 2026-10-09) : l'IA pilote l'éditeur pour réduire les manipulations
humaines et tester l'interaction avec l'éditeur.**
- **Établi (local)** : UE 5.8 livre le plugin Epic « Unreal MCP » (`Engine/Plugins/Experimental/ModelContextProtocol`,
« Anthropic MCP (Model Context Protocol) server implementation for Unreal Engine », expérimental, désactivé par
défaut) et « MCP Client Toolset » (bêta). Le projet a déjà `.mcp.json` → `http://localhost:8000/mcp` (adresse par
défaut) ; la session Claude Code voit un serveur `unreal-engine` en échec de connexion tant que l'éditeur ne
l'expose pas. Notre plugin `McpAutomationBridge` est désactivé pour V2.0 (D4) ; l'évaluation du MCP Epic était hors
chemin critique (D7) : elle devient le lot **STM**.
- **Outil de mise en place retenu (2026-10-09)** : « Hyper AI Studio » (Games by Hyper, Fab, gratuit, sans compte ni
activation, 5.8 seulement, documentation en ligne + doc Epic « Unreal MCP »), choisi parmi les outils Fab du compte
(écartés : Unreal MCP Setup Assistant sans doc, NexusMCP doc complète en chinois, NarshaADK en accès anticipé, Log
Viewer avec version Pro, BugSplat service en ligne). Installé dans le projet (`Plugins/Marketplace/HyperAIStudio`,
non commité) ; setup « Ready », endpoint `127.0.0.1:8000/mcp` répondant. Écarts corrigés à la main : 15 plugins
*Toolset* activés sans `TargetAllowList: ["Editor"]` (ajouté), `Optional` retiré de `McpAutomationBridge` (remis).
Fichiers générés (`CLAUDE.md`, `AGENTS.md`, `.hyperai/`) exclus localement ; les skills `lp-*` priment sur leurs
consignes. Instantané : `LifePlay_Backup_5.5\STM`. Erreur de démarrage de la sonde Automation corrigée dans notre
code (ERR-054, CHG-260).
- **Résultats STM-T2 à T4b (2026-10-09, CHG-262)** : éditeur lancé hors écran (`-RenderOffScreen
-ModelContextProtocolStartServer -ModelContextProtocolPort=8000`), `.uproject` non réécrit, session Claude Code
connectée (`/mcp`). Lecture : `initialize` 88 ms, appels 8-16 ms ; ~50 toolsets ; 91 outils HyperAIStudio
enregistrés sur 109, **tous « source candidate » (préversion vendeur), aucun « admitted »**. Testés et utiles :
carte ouverte, journal en direct filtré (`hyper_log_tail`), état de débogage d'un Blueprint
(`hyper_blueprint_debug_inspect`), relevé et diff stable (`hyper_blueprint_snapshot` / `_diff`), référenceurs
(`AssetTools.get_referencers`). Écriture (T4, `Content/BPs/TestStatic.uasset`) : outils **Epic**
(`BlueprintTools.set_node_position`, `compile_blueprint`, `AssetTools.save_assets`) → diff = 1 changement, retour
arrière par MCP → diff `identical`, puis fichier remis à l'octet par `git checkout` éditeur fermé (un
réenregistrement 5.8 réécrit l'en-tête : 25 919 → 26 029 octets). Écriture par HyperAIStudio : **inutilisable sous
Windows** — budget d'étape (ERR-055, contourné en validation par un patch ≥ 2 opérations) puis identifiant de
projet SHA-1 refusé par l'étape d'application qui exige SHA-256 (ERR-056) ; décision utilisateur : ne pas patcher
le plugin, défauts signalés au vendeur.
- **Règles d'usage** (mises à jour après T4c, 2026-10-09, CHG-266) :
1. **Rôles.** HyperAIStudio lit et vérifie ; les **outils Epic** de l'éditeur (`editor_toolset.*`) modifient.
Pas d'écriture par HyperAIStudio (ERR-055, ERR-056).
2. **Lecture d'un Blueprint.** Charger l'asset par `AssetTools.load_asset` (HyperAIStudio ne charge jamais) ;
localiser par `BlueprintTools.find_nodes`, lire par `get_connected_subgraph` / `get_node_infos` (fiables) ;
`read_graph_dsl` rend vide sur les gros graphes et `hyper_blueprint_snapshot` / `_diff` refuse les gros
Blueprints (`graph_source_bound_exceeded`, ex. `Person`, 20 Mo) : les réserver aux petits Blueprints.
3. **Écriture.** Instantané (`Snapshot.ps1`) ; modification par `create_node` / `connect_pins` / `break_pins` /
`delete_node` ; relecture des liaisons par `get_node_infos` ; `compile_blueprint` + `hyper_blueprint_debug_inspect`
(0 diagnostic) ; `save_assets` ; puis `CompileAllBlueprints` éditeur fermé. Retour arrière à l'octet :
instantané ou git, éditeur fermé (un réenregistrement 5.8 réécrit l'en-tête).
4. **Correctif `Accessed None`.** Un garde `IsValid` seulement si « vide » est un état normal, et l'écrire au CHG ;
préférer des branches en cascade à un AND / OR (évalue toutes ses entrées) ; comportement inchangé exigé.
5. **Preuve.** La PIE pilotée par MCP ne déroule pas un parcours d'interface (menus, chargement de ville) : la
preuve qu'un `Accessed None` disparaît reste le build empaqueté + `LogStats` sur le parcours S2.
6. **Volume.** Appels paginés et filtrés ; éviter `hyper_capability_report` et les `describe_toolset` complets
(75-116 Ko) ; `hyper_log_tail` ignore le filtre de catégorie : préférer le journal sur disque (`LogStats`).
7. **Copie partagée.** Éditeur MCP, commandlets et builds s'excluent ; avant un usage de la copie 5.8, gel annoncé
à **toutes** les sessions actives (`ListAgents`), pas seulement à celle du lot voisin (incident T4c : deux
sessions ont écrit dans `Tools/` et le journal pendant un gel annoncé à une seule) ; commit limité à ses
propres fichiers et lignes.
8. **Périmètre gratuit.** Seule la partie gratuite de HyperAIStudio est utilisée (aucun contrôle de licence dans le
plugin installé) ; l'offre payante Games by Hyper (« [Beta] Access to Hyper AI », palier EPIC et plus) sort des
critères de sélection (toutes fonctions dès l'origine, sans limite de temps) : non retenue.
9. **Pas de serveur MCP supplémentaire.** Les profils proposés par HyperAIStudio (ex. « Project Docs Filesystem
MCP » par `npx @modelcontextprotocol/server-filesystem`) restent désactivés : doublon de l'accès fichiers de
Claude Code, paquet téléchargé à chaque lancement, exposition du projet. Seul `unreal-mcp` (Epic) est utilisé.
10. **Mesure.** La mesure qui fait foi reste le build empaqueté.
Avertissements connus de l'éditeur 5.8 en culture française : 20 `LogAutomationTest: Error: Condition failed` du
test de fumée Epic `UnifiedError::FactoryMethod` (textes anglais attendus), présents avant HyperAIStudio.
- **Recommandation pour la porte G-STM** : adopter le MCP (`unreal-mcp` d'Epic + HyperAIStudio gratuit en lecture)
pour le **tri et le diagnostic** des `Accessed None` et pour les correctifs Blueprint **petits et réversibles**
(preuve T4c : ~5 min du diagnostic à l'enregistrement, ~30 appels) ; ne pas souscrire à l'offre payante ; garder
`McpAutomationBridge` désactivé (remplacé par le MCP d'Epic, retrait à trancher avec le chantier OB) ; inscrire
les règles 1 à 10 dans les skills `lp-*` (STM-T5).
- **Estimé (guides tiers, à vérifier en STM)** : serveur local sans authentification (ne jamais l'exposer hors de la
machine) ; appels d'outils exécutés en série sur le thread de jeu (attendre chaque résultat) ; commencer en lecture
seule, n'autoriser que des modifications petites et réversibles. Un plantage de l'éditeur peut apparaître côté
client comme une simple erreur HTTP 502 (retour d'expérience 5.8) : surveiller le processus et le journal de
l'éditeur en parallèle. Des serveurs tiers existent (StraySpark, ziggymar, ChiR24) : non retenus sans évaluation.
- **Usages visés** : lecture des graphes Blueprint fautifs d'un `Accessed None` (nœud, variable, ordre d'affectation)
sans export manuel ; requêtes du registre d'assets et des références (preuve d'usage pour OB) ; lancement de
commandlets / validation de données ; PIE scripté et captures pour un premier tri avant le build empaqueté ;
application de correctifs Blueprint **réversibles** après instantané. La mesure qui fait foi reste le build
empaqueté (S2) ; MCP n'en dispense pas.
- **Garde-fous** : éditeur de la copie 5.8 seulement ; instantané (`Snapshot.ps1`) avant toute écriture par MCP ;
chaque modification par MCP tracée (fiche, CHG) comme une modification manuelle ; plugin MCP activé en éditeur
uniquement, jamais dans un paquet (vérifier `Type`/plateformes du `.uplugin` et la liste des plugins cuits) ;
`.mcp.json` et `.claude/` jamais commités (règle `lp-paths`).
Sources : [Gauntlet (Epic)](https://dev.epicgames.com/documentation/en-us/unreal-engine/gauntlet-automation-framework-in-unreal-engine) ·
[Data Validation (Epic)](https://dev.epicgames.com/documentation/en-us/unreal-engine/data-validation-in-unreal-engine) ·
[Stat commands (Epic)](https://dev.epicgames.com/documentation/en-us/unreal-engine/stat-commands-in-unreal-engine) ·
[Memory Insights (Epic)](https://dev.epicgames.com/documentation/en-us/unreal-engine/memory-insights-in-unreal-engine) ·
[Unreal Insights après stat (guide)](https://uhiyama-lab.com/en/notes/ue/unreal-insights-profiling/) ·
[Optimisation à petit budget (T. Looman)](https://tomlooman.com/unreal-engine-optimization-talk/) ·
[Accessed None (guide)](https://bugnet.io/blog/how-to-fix-unreal-accessed-none-trying-to-read-property) ·
[Accessed None (forum Epic)](https://forums.unrealengine.com/t/accessed-none-trying-to-read-property-bad-blueprint-communication/418859) ·
[Minidumps (guide)](https://bugnet.io/blog/how-to-read-minidump-files-from-game-crashes) ·
[Plantages éditeur / Shipping (AccelByte)](https://docs.accelbyte.io/development-toolkit/developer-guides/others/ue-4-and-5/unreal-editor-and-shipping-build-crashes/) ·
[Plantage d'automatisation caché, MCP 5.8 (forum Epic)](https://forums.unrealengine.com/t/unreal-mcp-in-5-8-cause-an-unreal-automation-crash-hidden-behind-http-502-code/2735582) ·
[Unreal Test Kit (forum, vendeur)](https://forums.unrealengine.com/t/plopbox-unreal-test-kit-crash-hunter-test-explorer-perf-sentinel/2733246) ·
[Asserts (Epic)](https://dev.epicgames.com/documentation/unreal-engine/asserts-in-unreal-engine) ·
[Blueprint Debugger (Epic)](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprint-debugger-in-unreal-engine) ·
[Break on Exceptions (réf. API 4.26)](https://docs.unrealengine.com/4.26/en-US/API/Editor/UnrealEd/Settings/UEditorExperimentalSettings/) ·
[Visual Logger (Epic)](https://dev.epicgames.com/documentation/unreal-engine/visual-logger-in-unreal-engine) ·
[Rewind Debugger (Epic)](https://dev.epicgames.com/documentation/en-us/unreal-engine/animation-rewind-debugger-in-unreal-engine) ·
[Crash reporting (Epic)](https://dev.epicgames.com/documentation/unreal-engine/crash-reporting-in-unreal-engine?lang=en-US) ·
[Cheat Manager (Unreal Garden)](https://unreal-garden.com/tutorials/cheatmanager/) ·
[Tests automatisés, Sea of Thieves (Unreal Fest 2019)](https://www.unrealengine.com/events/unreal-fest-europe-2019/automated-testing-at-scale-in-sea-of-thieves) ·
[Rare, débogage UE5 dans Visual Studio (GDC 2023)](https://developer.microsoft.com/en-us/games/articles/2023/03/tips-from-rare-easier-debugging-unreal-engine-5-visual-studio/) ·
[Hyper AI Studio (doc vendeur)](https://gamesbyhyper.com/docs/project-foundations/hyper-ai-studio/) ·
[Unreal MCP in Unreal Editor (Epic)](https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-mcp-in-unreal-editor).
MCP : [Unreal MCP dans UE 5.8, configuration et sécurité (guide SEELE, FR)](https://www.seeles.ai/resources/blogs/fr/unreal/unreal-engine-ai-assistant-ue-5-8-mcp-setup-and-safety-a4c54c7f58) ·
[Unreal MCP Server (StraySpark, tiers)](https://www.strayspark.studio/docs/unreal-mcp-server) ·
[unreal-mcp (ziggymar, tiers)](https://mcpservers.org/servers/ziggymar/unreal-mcp) ·
[Unreal_mcp (ChiR24, tiers)](https://images.glama.ai/mcp/servers/ChiR24/Unreal_mcp) ·
[ue-mcp (db-lyon, tiers)](https://glama.ai/mcp/servers/db-lyon/ue-mcp).
Niveau de preuve : documentation Epic = établi pour la fonction de l'outil ; guides tiers = estimé ; vendeurs = non vérifié.
## Lot préalable : STM — boucle MCP (prévu après la V2.0 ; mené le 2026-10-09 avant toute livraison ; reste T5)
État au 2026-10-09 (SEQ1) : T1 à T4c faits (CHG-260, CHG-262, CHG-263, CHG-266), T4b bloqué, **T5 seul en attente**.
Aucune livraison n'ayant lieu avant la stabilisation et l'optimisation (décision utilisateur du 2026-10-09, plan 27
§ U8), la porte G-STM n'est liée à aucun Shipping : elle se tient quand l'utilisateur le décide, avant STA.
- STM-T1 (N1, web d'abord) : doc Epic et notes 5.8 de « Unreal MCP » (outils exposés, réglages, sécurité, limites).
**Fait** (§ Méthode, point 9 : outil HyperAIStudio retenu, CHG-260).
- STM-T2 (N0 + utilisateur) : activer le plugin dans l'éditeur de la copie 5.8 (instantané du `.uproject`), lancer
l'éditeur, connexion depuis Claude Code (`.mcp.json` existant), journal de démarrage. **Fait** (CHG-262).
- STM-T3 (N1) : **fait** (CHG-262) ; batterie en lecture seule (lister des assets, lire un Blueprint connu, interroger le registre, lancer
un commandlet inoffensif), mesures de latence et de stabilité ; preuve par l'échec : comportement si l'éditeur
tombe (erreur côté client, détection).
- STM-T4 (N3) : un correctif Blueprint réversible de bout en bout par MCP (instantané → modification → compilation
BP → contrôle → retour arrière à blanc). **Fait** (outils Epic, CHG-262) ; T4b (écriture par HyperAIStudio) :
bloquée par ERR-055 / ERR-056, plugin non patché (décision utilisateur).
- STM-T4c (2026-10-09, CHG-263) : efficacité sur un cas réel. **Correction faite** : `Accessed None … property
ContactMenu` (63 par session au parcours U6, 2e famille) dans `Person_C:UpdateDailyPose` (appelé par
`City.LoadCity` → `GI.MoveCity`). Cause : `Branch(OR(secondScreen, GI.ContactMenu.DummyPerson == self))` — le OR
évalue ses deux entrées et lit `DummyPerson` alors que le menu de contacts n'existe pas encore au chargement de la
ville. Correctif (« vide » est un état normal ici, d'où le garde) : `Branch(secondScreen)` → sortie si vrai ;
sinon `Branch(IsValid(GI.ContactMenu))` → vrai : branche d'origine sur l'égalité ; faux : `Switch` (même chemin que
l'égalité fausse) ; OR supprimé. Comportement identique, lecture protégée. Outils : Epic (`find_nodes`,
`get_connected_subgraph`, `create_node` ×3, `break_pins` ×2, `connect_pins` ×8, `delete_node`, `compile_blueprint`,
`save_assets`) ; contrôle `get_node_infos` + `hyper_blueprint_debug_inspect` (39 nœuds, compilé, 0 diagnostic) ;
`CompileAllBlueprints` code 0, 0 erreur, 0 avertissement. Temps : ~1 min de démarrage de l'éditeur, ~5 min du
diagnostic à l'enregistrement, ~30 appels MCP. **Preuve en jeu (U8-T5c, CHG-276) : PASS avec réserve** — archive Development U8 (cuisson complète U8-T3), même sauvegarde DC4 que U6 : 0 ligne `ContactMenu` (U6 : 63 événements + 2 du résumé), 15 SPAWN, `MoveCity` exécuté par Continuer ; réserve : les chemins d'origine en U6 (`CheckIfReachedFnt` 20, `Room_C` 20, `DressSavedActualActual` 8…) ne journalisent rien quand ils réussissent, absence non circulaire seulement pour `MoveCity` (estimé). Texte d'origine : reste à prouver en jeu (build empaqueté Development, `LogStats` :
`ContactMenu` 63 → 0 attendu, parcours STA-T1 ; U8 différé, SEQ1). Limites relevées : `read_graph_dsl` rend une chaîne vide sur ce graphe ;
`hyper_blueprint_snapshot` refuse `Person` (`graph_source_bound_exceeded`, Blueprint de 20 Mo, 134 graphes) ;
`hyper_log_tail` ignore le filtre de catégorie (réponse lourde) ; la PIE pilotée par HyperAIStudio
(`hyper_playtest_run`) ne sait pas dérouler un parcours d'interface (menus, chargement de ville) : la capture en PIE
d'un `Accessed None` de ce type n'est pas faisable par MCP seul.
- STM-T5 (orchestrateur + utilisateur) : **en attente** (recommandation écrite, § Méthode point 9, CHG-266) ; décision — MCP Epic adopté, `McpAutomationBridge` retiré ou gardé (lien OB),
règles d'usage inscrites dans les skills `lp-*` ; porte G-STM.
## Lot d'audit proposé (phase 1) : STA (lecture seule + mesures)
- STA-T1 (N1) : parcours S2 enregistrés, `LogStats` détaillé ; STA-T2 (N3) : classement des `AccessedNone` et erreurs
par Blueprint / nœud / cause probable ; STA-T3 (N1) : registre des défauts visibles (captures, étapes) ; STA-T4 (N4) :
effort et risques par famille, ordre recommandé → porte G-ST.
- **Découpage (SEQ1, 2026-10-09, règle de taille du plan 27)** : STA-T2 devient STA-T2a (N0, extraction des signatures
par `Tools/LogStats.ps1 -Pattern`, comptes bruts), STA-T2b-<famille> (N3, une fiche par famille de Blueprint, une
hypothèse de cause par fiche) et STA-T2c (N1, consolidation des comptes rendus) ; STA-T4 ne lit que les comptes rendus
de T1 à T3, pas les journaux.
- **Lot d'essai des gabarits (TPL1, 2026-10-09)** : fiches d'entrée au gabarit de `sk-orchestrate` § 3, livrables aux
gabarits de rôle de `lp-doc/gabarits.md`, registre `etat/ST/STA/STA-TACHES.md`, mesures par
`python -I Tools/FicheStats.py --lot STA`. Comparaison à U0–U7b (`Tools/FicheStats.py --lot U<n>`, doc 31) à l'EVAL de
STA : part des fiches hors budget (U7 : 6 sur 16), reprises, sections de gabarit manquantes relevées à la réception,
longueur des comptes rendus. Gabarits gardés si ces indicateurs baissent sans reprise de plus ; sinon allégés.
## Point d'étape du 2026-10-10 (lots STB, STC, STD, STE, STF, OBB, ETAT3)
Synthèse écrite par ETAT3-T6 à partir des registres et livrables de lot (chemins relatifs à `etat/`) ; un registre de lot
n'est pas une preuve : chaque ligne renvoie au livrable. Causes et statuts : `Registre_Erreurs.md`, ERR-058 à ERR-086
(table cause → ERR : `etat/DOC/ETAT3/ETAT3-T6-DOC.md`).
- **STB (corrections après G-ST), clos** : 12 correctifs, CHG-281 à CHG-292 (GI : BeautyStandards, tableaux lus sans test,
`clearScenePersons`, `determinePersonVars`, Interacting ; Person : `standIdle`, Headtrack, `assignHome` ; MainMenu ;
StreetMap_Static ; Room ; SexInterface ; garde C++ MapMarkers), précédés de STB-T0 (CHG-280, noms d'événements dans
`LPDumpFunction`). VAL **PASS** (`ST/STB/STB-VAL.md` § 5 : `CompileAllBlueprints` 418 / 418, 0 erreur, 0 avertissement ;
`LPTestStringCompat` 3120 / 0 / 60). Preuve en jeu STB-JEU **acceptée avec réserve** (`ST/STB/STB-JEU-VAL.md` § 5) :
signatures visées à 0, `Floats_3` 30 contre 1 107 sur la contre-épreuve U8 ; réserve : familles nouvelles du moteur de
scènes ni attribuées ni exclues faute de parcours identique. Régression **ERR-057** (réglages écrasés à l'ouverture du
menu) causée par CHG-286, retirée par **CHG-294** ; R13 / R14 rouverts (ERR-068). Évaluation : `ST/STB/STB-EVAL.md`.
- **Porte G-STM adoptée** par l'utilisateur (2026-10-10) : règles d'usage du MCP inscrites dans le skill `lp-mcp`, STM-T5
faite (`ST/STD/STD-TACHES.md:7`).
- **STD (diagnostics, lecture seule), clos** : trois DIAG acceptés. `ST/STD/STD-GIX-DIAG.md` : R06 et R07 / R08 défauts
d'affectation d'origine (4.27), R10 None normal ; `ST/STD/STD-SCN-DIAG.md` : familles F1 à F5 du moteur de scènes, aucune
ne vient de STB (F1, F2, F3, F5 préexistantes en 5.5 DC4, F4 préexistante en 5.8 avant STB) ; `ST/STD/STD-TXT-DIAG.md`
(partiel) : texte pâle de CharGen identique en 5.5, cause probable : aucune couleur de texte fixée. Décisions utilisateur
(`ST/STD/STD-TACHES.md:16-23`) : gardes simples pour R06, R07 / R08 et R10 ; deux lots H2 (F4) et H3 (F1 / F3) ; texte noir
sur deux widgets de CharGen ; exécution par le lot STE.
- **STE (correctifs après STD), planifié** : 7 fiches (`ST/STE/STE-TACHES.md`, ce registre fait foi sur celui de STD) :
STE-D, STE-GI, STE-TXT « fiche écrite » ; STE-H3, STE-H2, STE-VAL, STE-JEU « à écrire ». Départ après le commit des
fichiers de STC et la fin de son gel. Cibles au registre : ERR-062, ERR-063, ERR-065 (STE-GI), ERR-082 à ERR-084 (STE-H3),
ERR-085 (STE-H2).
- **STC (lot UI : vitesse caméra en slider, durée des scènes protégée)** : d'après `ST/STC/STC-TACHES.md`, T0 à T6 faites ou
acceptées, STC-VAL **acceptée, PASS** (V1 build 0 / 0, V2 418 / 418, V3 3120 / 0 / 60) ; restent V8 (archive) et J1
(preuve en jeu) ; CHG annoncé `CHG-296` (« à venir »), pas encore au journal ; fichiers du lot non commités à cette date.
- **STF (12 autres SpinBox de MainMenu), en attente** : STF-T0 faite, SPEC écrite en attente de la clôture de STC et du feu
vert (`ST/STF/STF-TACHES.md`).
- **OBB (bloquants de publication)** : OBB-T6 acceptée (`OB/OBB/OBB-T6-INV.md`) : L1 = la V1.5 publiée ne contient pas
l'addon, L2 = `TargetConfigurationDenyList` lu par le moteur et UBT 5.8 ; décision utilisateur : clé de CHG-279 conservée,
**B2 clos** ; OBB-T3 (B3, contrôles de paquet : CHG-301) et OBB-T1 (B1, `.git` de `Content\Modules` hors de l'arbre : CHG-304, CHG-307) faits ; OBB-T7 fait : Shipping 5.8 neuf, 4 contrôles de paquet à 0, B1 à B3 prouvés (CHG-308).
- **ETAT3 (CHG-297)** : depuis le 2026-10-10, les livrables de lot vivent dans `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\`
(texte `.md` / `.csv` suivi par git, le reste local) ; l'`etat\` de la copie 5.5 est une archive figée, sauf `etat\REPO\`
(réservations `NUMEROS.md`, tickets et journal du gardien). Registre du lot : `DOC/ETAT3/ETAT3-TACHES.md`.
- **DOCMV (CHG-300)** : décision utilisateur du 2026-10-10 (« Déplacer dans Docs\ ») ; journal, registre, index `README.md`,
docs 01-32 et `correctifs\` montés de `Docs\Migration\` à `Docs\` (41 renommages git) ; `Docs\Migration\` ne garde que
`etat\` ; skills, agent `lp-writer`, `CLAUDE.md` et outils mis aux nouveaux chemins. Registre du lot :
`DOC/DOCMV/DOCMV-TACHES.md`.
## Point d'étape du 2026-10-14 (alpha 2026.10.2.1a, livrée)
Synthèse écrite à partir des registres de lot et des bilans d'essai (chemins relatifs à `etat/`) ; un registre n'est pas une
preuve : chaque ligne renvoie au livrable. Objectif de l'utilisateur (2026-10-13) : build alpha 2026.10.2.1a, Shipping seule,
remise au plus tard le 2026-10-18. Décisions de l'utilisateur : poursuivre les corrections avant l'alpha ; gel des scènes de
sexe levé (`BOSS/COMMUN-6-TESTS.md`) ; ZQSD pour la caméra, flèches pour le couple, glisser-déposer (`CAM/CAM-B2p-SPEC.md`) ;
bonus d'orgasme affiché au même emplacement que chez l'auteur (`ST/STE/STE-ORG5-I2-SPEC.md`) ; priorité à C1
(`CAM/CAM-COMMUN6-DIAG.md` § 0) ; façades de la rue avant l'alpha (`ST/STG/STG-TACHES.md`) ; « bien on valide la scene de sexe
dans son ensemble pour l'alpha » (11:06, `BOSS/COMMUN-8-BILAN.md`) ; « bien je valide le comportement de l'alpha. Prépares la
build de livraison » (16:00, `BOSS/BOSS-JOURNAL.md`) ; « Lettre acceptée » pour la version (`REL/ALPHA/REL-ALPHA.md`).
- **Essais communs.** COMMUN-1 à COMMUN-13 construites (CheckPackage PASS) ; bilans `BOSS/COMMUN-2-BILAN.md` à
`COMMUN-13-BILAN.md` ; COMMUN-13 (T1 à T8 OK, validés en bloc) ; un plantage GPU à la fin de l'essai, hors scène, cause
extérieure estimée (`ST/STG/STG-COMMUN13-GPU-DIAG.md`), cité dans les défauts connus des notes de version.
- **STE.** H3d, H10, GEL1 PASS en jeu ; G16 PASS statique ; O4a, O4c et ORG5 (récompenses et affichage) validés
(COMMUN-8) ; G3 compilée, 2 lignes de témoin en COMMUN-12 ; garde `chargen` après l'alpha.
- **STG.** Enfoncement, chevauchement, marche animée : voir ERR-115, 118, 121 ; façades de la rue solides ; C7-a, B2q-b1,
S-F5m / n / p, M-Z validés en jeu (COMMUN-8 à 10).
- **CAM.** C1, C2, corrections B2f à B2s, pendant le sexe B2p-R à B2p-J (cycle Scene, C3, POV ; couple borné dans la pièce ;
panneau sur Alt ou clic molette ; icône d'aide) ; B3 (vue plafonnier) non faite.
- **REL.** Garde de sauvegarde : E1 à E4, E6, E9 OK ; `LPModGuard` accepte une lettre finale ; Shipping `4a9bbdb3`, archive
`LifePlay_Revival_2026.10.2.1a_Windows_Game.7z` (SHA-256 `89ed211d…`), 4 zips de mods, notes de version et annonces ;
32 builds obsolètes (59,24 Go) envoyés à la corbeille de Windows.
- **Hors alpha.** P7-H2 (crochet `ecriture-gardien`) : v1 69 / 69 mais VAL FAIL, v2 partielle, rien installé. EVAL-FAB-1 à 4 :
contenus Fab négatifs. Après l'alpha : B3, POV de scène dans les têtes, STG-POST1 et POST2, B2q-b2 à b4, garde STE-H3i, fauteuil,
`Content\Saves` hors du dossier de sauvegarde.