38 KiB
Fiche GIREV-PRE — Niveau N2+ — Modèle prévu non précisé par la fiche | utilisé claude-sonnet-5-5 — Agent lp-cart — Skills sk-protocol, ue-cpp-build, lp-commandlets, lp-paths
GIREV-PRE : étude préliminaire de la révision unique de GI.uasset (liste, ordre, dumps, découpage, retour arrière) (2026-10-20)
Hors gabarit : la rubrique 3 est subdivisée (3.1 à 3.10) pour porter la liste ordonnée, les dumps à produire, le découpage, la durée et le retour arrière demandés par la fiche. Lecture seule : ni copie UE, ni MCP, ni éditeur, ni commandlet. Seul ce fichier est écrit. Descriptions neutres (doc 27) : les noms de sections et de morphs réservés ne sont pas cités. Les questions de cette étude sont numérotées GQ1 à GQ9 pour ne pas les confondre avec les Q7 et Q8 de CG2, le Q7 de KEY2 et le Q7 de FIX1-F6.
Ordre de l'utilisateur, cité : « Lance l'étude de la révision unique de GI (liste et ordre des modifications) » (BOSS-JOURNAL.md:1056). Règle : GI.uasset n'est révisé qu'une fois, en build 2 (BOSS-JOURNAL.md:693, :870).
Résumé (à lire en premier)
- La liste de la fiche n'est pas entièrement dans GI (établi, § 3.3). C8, Q7, Q8 et R7 visent
CharGen; le remappage de Y/N visePC; ERR-145 n'a pas de cause établie. Ces six points sortent de la révision de GI. Restent dans GI : C10, C11, D2, D9, D17, ERR-142, F7a, le message de F6 et les deux commandes de console. - Le message de F6 et C11 sont le même nœud (établi pour la position, § 3.2 M2) : le texte « copy your old … Content\Saves … » est le champ
Contentdu nœudK2Node_CallFunction_20748, que C11 supprime parce qu'il est orphelin (aucune liaison d'exécution dans le dump 5.8 du 2026-10-13). Les fiches F6 le traitent comme un message affiché : contradiction à lever avant d'écrire (GQ4). - D17 est en grande partie déjà couvert par le C++ (établi, § 3.2 M6) : le nœud appelle un assistant C++ qui journalise un avertissement pour tout chemin non résolu. Il ne reste que le cas « asset trouvé mais pas une texture ».
- D9 est bloqué par deux inconnues : la décision de comportement n'est pas prise (R06 § 5.5 n° 2) et la capacité du MCP à créer une variable locale n'est pas connue (§ 3.2 M8).
- Dumps 5.8 : le dump EventGraph de GI du 2026-10-14 10:38 est postérieur à la dernière sauvegarde de GI (10:33) et reste utilisable tant que le MD5 vaut
32fc0a97…. Trois dumps manquent ou sont à rafraîchir :SavePreset,GenerateAndApplyFloats,CalculateHeadtrack(§ 3.7). - Ordre : préparation, puis EventGraph (M1, M2, M6),
SavePreset(M3, M4, M5), enfin les fonctions à effet (M7, M8), clôture (§ 3.6). Trois sous-lots d'au plus 50 tours dans une seule session d'éditeur et un seul instantané (§ 3.8). Charge estimée : 50 à 90 écritures relues (§ 3.9).
1. Objet et périmètre
Un domaine : établir la liste exacte et ordonnée des modifications de Content/BPs/GI.uasset à faire en un seul passage (build 2, 2026.11.3.1a vers le 3 novembre, BOSS-ETAT.md:106), avec nœuds, nature, dépendances, risque, voie, preuve en jeu, dumps préalables, découpage, durée et retour arrière. Sources demandées : lot CG2 (CART, SPEC, TACHES, IMPL, VAL, DOC), référentiel CG de l'addon, ERR-142, KEY2, FIX1-F7-PRE, FIX1-F6-SPEC, QPERS-PRE, BOSS-ETAT « Reports en build 2 », CAM2. Hors périmètre : toute écriture, tout essai, la décision sur chaque point.
2. Commandes et lectures (exactes) avec compte brut
| # | Commande ou lecture | Résultat brut |
|---|---|---|
| 1 | Read lp-doc/gabarits.md (CART) |
gabarit lu |
| 2 | Read BOSS-ETAT.md:100-160, BOSS-JOURNAL.md:690-695, :767, :868-872 ; Grep `revision unique de GI[^ |
]{0,200}dansBOSS-JOURNAL.md` |
| 3 | Read 37_Feuille_De_Route_Alpha2.md:100-189 |
§ 2.7 = :148-151 (ne liste pas C8, C10…) |
| 4 | Read CG2-SPEC-01.md (226 l.), CG2-IMPL-01.md:140-249, CG2-TACHES.md:15-64 et :72, CG2-CART-01.md:1-140 |
cités en § 3 |
| 5 | Grep CG2-VAL-01.md, CG2-DOC-01.md (GI.uasset, B2, C10…) |
VAL :32-35, :143-144, :184 ; DOC :33-35 |
| 6 | Read CGREF1-T3-MCP.md:55-102, CGREF1-T3c-MCP.md:56-71, CGREF1-T7-TEST.md:14-53 (addon, Docs/etat/CG/CGREF1/) |
nœuds SavePreset, LoadDefaultTextures, GenerateAndApplyFloats |
| 7 | Grep Registre_Erreurs.md ERR-142|ERR-145 ; Read :49, :152 |
:149 (ERR-142), :152 (ERR-145), :49 (ERR-042) |
| 8 | Grep \bR7\b dans etat/REL/KEY2, puis dans etat |
KEY2 : aucun ; sens trouvé : BOSS-JOURNAL.md:767, CG2-TACHES.md:72 |
| 9 | Read FIX1-F7-PRE.md, FIX1-F6-SPEC.md, QPERS-PRE.md (entiers) |
cités en § 3 |
| 10 | Grep KEY2 (GI\.uasset|build 2|Y/N|remapp) ; Grep \bGI\b dans KEY2-SPEC-02.md (compte) |
KEY2-SPEC-01 :34, :246 ; KEY2-TACHES :35 ; KEY2-SPEC-02.md : 0 occurrence |
| 11 | Grep \bGI\b dans CAM2-SPEC-02.md ; Grep GI\.uasset|…build 2… dans CAM2-{CART,DIAG,TACHES,JOURNAL}*.md |
SPEC-02 :24-82 ; autres fiches CAM2 : aucune ligne |
| 12 | Grep r[ée]vision (unique )?(de |du |des )??GI|…|S1-BP (-o, *.md) dans etat` |
24 lignes ; STM1-SPEC-01 :87, STM1-SPEC-02 :54, STM1-SPEC-06 :39, SET1-PRE :123, COMMUN-17-BILAN :123, CAM2-SPEC-02 :58, :63 |
| 13 | git log --format="%h %ad %s" --date=short -8 -- Content/BPs/GI.uasset |
8 lignes ; tête : c4cf6f3 2026-10-14 STE : alpha 2026.10.2.1a, GI et TopRight …(CHG-347) |
| 14 | ls -l Content/BPs/GI.uasset ; git ls-files --eol ; md5sum |
52 686 555 octets, 14 oct. 10:33 ; i/-text w/-text attr/-text ; 32fc0a970ab194626e8dc07df3a9633d |
| 15 | rg --no-ignore -N --no-filename -o "^Commandlet : LPDumpFunction -BP=GI -Fn=\S+" -g "*LPDumpFunction*.txt" Docs/Migration/etat | sort | uniq -c |
55 variantes de -Fn= ; EventGraph ×16, SavePreset ×2, LoadPreset ×1, GenerateAndApplyStrings ×1, GeneratePerson ×1, * ×1 ; aucune ligne GenerateAndApplyFloats, aucune CalculateHeadtrack |
| 16 | même rg limité aux noms SavePreset|LoadPreset|GeneratePerson|GenerateAndApplyStrings|getSkeletalMeshFromPath ; rg -l "-Fn=\*" |
SavePreset : STE-D9_…20261011-051838, STE-H10V_…20261013-071350 ; -Fn=* : seulement portage55/L6f/L6f_LPDumpFunction_20260930-102202.txt (5.5) |
| 17 | Read dump CAM-B1-PRE_LPDumpFunction_20261013-083048.txt :1-12, :5262-5357, :14770-14830, :20255-20305 |
en-tête -Fn=EventGraph -Pins -Exec, 61 s, code 0 ; nœuds § 3.2 |
| 18 | Grep dump STE-ORG4cV_LPDumpFunction_20261014-103731.txt (nœuds M1, M2) ; en-tête |
en-tête : Date : 2026-10-14T10:38:41 duree : 66 s code de sortie : 0 ; lignes 5312, 5321, 14818, 20264, 20273 (5 lignes, en-têtes de nœuds et littéraux seulement) |
| 19 | Grep même dump bIncludeOnlyOnDiskAssets|K2Node_CallFunction_1048 |K2Node_CustomEvent_96 |
28582 (événement LoadDefaultTextures), 28601, 28604 ('true') ; autres : 12342 ('false'), 12368, 12384, 28669 |
| 20 | Grep dump STE-H10V_LPDumpFunction_20261013-071350.txt (nœuds SavePreset) |
135 (Concat_762), 141 (VariableSet_930), 1476-1479 (EndsWith, suffixe Characters\0.lpcharacter), 1482 (IfThenElse_2970), 1487 / 1503 (PrintString _0, _1), 2236-2299 (_81, _86, _88, _89, VariableSet_10, _91) |
| 21 | Read Source/LifePlay/LPAssetRegistryHelpers.cpp:1-60 ; Grep GetAssetByObjectPath dans Source |
:34-49 journalise GetAssetByObjectPath ECHEC ; 8 lignes (limite atteinte) |
| 22 | Grep (compte) GetAssetByObjectPath ECHEC dans le LifePlay.log du build LifePlay_Build_5.8_Development_COM23 |
Found 0 total occurrences across 0 files. |
| 23 | Grep même journal Command not recognized: r\.PostProcessAAQuality|r\.MorphTarget\.Mode is read only|Missing characters from save|missing crucial |
1202 ([2026.10.20-20.33.03:353][238]Command not recognized: r.PostProcessAAQuality 3), 1219 (Error: r.MorphTarget.Mode is read only!) ; aucune ligne Missing characters ni missing crucial |
| 24 | Grep CAM2-IMPL-06.md (set_pin_value|paquet|dirty|save_assets) |
:28, :53, :78 (leçon IMPL-06) |
| 25 | ls Tools/{Snapshot,Restore,PubCheck,UeState,FileCheck,RunCommandlet}.ps1 ; rg -n "GI" etat/REPO/FILE.md |
les 6 scripts présents ; FILE.md : 0 ligne contenant GI |
Écart de méthode : les .txt d'etat/ sont ignorés par git ; un Grep de dossier ne les voit pas (FIX1-F7-PRE § 2). Chaque dump a été lu par son nom, et les comptages de dumps (n° 15, 16) par rg --no-ignore (sans cela, résultat vide à tort).
3. Constats fichier:ligne
3.1 État de GI
- MD5
32fc0a970ab194626e8dc07df3a9633d, 52 686 555 octets (n° 14), égal à la référence deBOSS-JOURNAL.md:693et deCG2-IMPL-01.md:224. Arbre de travail propre pour ce fichier (absent dugit statusde départ). Dernier commit :c4cf6f3(2026-10-14), précédé de0745917,a08c134,b3ee785(n° 13). - Aucun ticket de la file du dépôt ne mentionne GI (n° 25).
- Plusieurs lots exigent que GI reste inchangé jusqu'à la build 2 :
COMMUN-17-BILAN.md:123,CAM2-SPEC-02.md:63,KEY2-CART-02-FICHE.md:33(égalité du MD5 exigée avant et après). Après la révision, la référence32fc0a97…change dans BOSS-ETAT et dans ces fiches. - Le doc 37 § 2.7 (
37_Feuille_De_Route_Alpha2.md:148-151) ne contient pas la liste C8, C10… : elle n'existe que dansBOSS-ETAT.md:143, avec la mention « à verser » ;BOSS-JOURNAL.md:767dit le report « à faire par une fiche ».
3.2 Modifications de GI : une fiche par modification
Notation : EG = /Game/BPs/GI.GI:EventGraph, SP = /Game/BPs/GI.GI:SavePreset. Les identifiants de nœuds se relisent par get_node_infos en tête de session (R1 de la SPEC CG2).
M1. Commandes de console inutiles au démarrage (QPERS-PRE, :44, :177)
- Où :
EG, événementUpdateGraphicsQuality(K2Node_CustomEvent_1324). Liaisons lues dans le dump 5.8CAM-B1-PRE…083048.txt:5274-5351(13 octobre) ; le dump du 14 octobreSTE-ORG4cV…porte les mêmes nœuds aux mêmes lignes (:5312,:5321,:20264,:20273: existence seule relue). - Chaîne lue :
CallFunction_244(r.ScreenPercentage) →CallFunction_11964(sg.PostProcessQuality) →CallFunction_11966(r.PostProcessAAQuality, concaténation…Operator_907,Conv_IntToStringCallFunction_11967, lectureVariableGet_3740) →CallFunction_311(sg.ShadowQuality) →CallFunction_11960(r.MorphTarget.Mode, concaténation…Operator_973,SelectStringCallFunction_316choisi parVariableGet_219, sortiethenvide : fin de chaîne). Le tronçon entreCustomEvent_1324etCallFunction_244(CallFunction_13544…CallFunction_15965) n'a pas été lu. - Nature : liaisons et suppressions.
- a)
break_pins(_11964.then →_11966.execute) et (_11966.then →_311.execute) ;connect_pins(_11964.then →_311.execute) ;delete_node_11966,…Operator_907,_11967,VariableGet_3740(seulement s'il n'a pas d'autre liaison). - b)
break_pins(_311.then →_11960.execute) ;delete_node_11960,…Operator_973,_316,VariableGet_219(sa seule sortie va à_316.bPickA ;VariableGet_220, lecteur deVariableSet_115, reste). - Les variables membres
PostProcessAAQualityetCPUSkinningrestent (réglages enregistrés, autres lecteurs et écrivains : dump:8581-8706,:20261-20295).
- a)
- Effet : aucun (établi) : le journal COM23 montre
Command not recognized: r.PostProcessAAQuality 3(LifePlay.log:1202) etError: r.MorphTarget.Mode is read only!(:1219) ;r.PostProcessAAQualityn'existe pas en 5.8 (QPERS-PRE.md:42). - Dépend de : rien. Risque : très faible (suppression de commandes rejetées) ; seule la rupture de la chaîne
thenest à contrôler. - Voie : MCP
lp-mcp-bp. Écritures estimées : 8 à 12. - Preuve en jeu : journal d'un build Development : 0 ligne
Command not recognized: r.PostProcessAAQualityet 0 ligner.MorphTarget.Mode is read only(avant : 1 et 1 par session) ; les lignesSet CVardesg.PostProcessQuality,sg.ShadowQualityetr.ScreenPercentagesont inchangées.
M2. C11 / D27 : nœuds orphelins de l'EventGraph, et message de F6 (CG2-SPEC-01.md:92, :193 ; CG2-CART-01.md:70 ; FIX1-F6-SPEC.md:85, :371)
- Où :
EG.K2Node_CallFunction_20748(?::ShowTutorial, brochesTitle,Content,Force,Warning;executeetthensans liaison dans le dump du 13 octobre :CAM-B1-PRE…:14818-14825).K2Node_CallFunction_13122(PrintString« Missing characters from save »,executesans liaison,then→CallFunction_340.execute :CAM-B1-PRE…:14791-14801).CallFunction_340reçoit aussiIfThenElse_2861.else (:14790) : il reste. Dans le dump du 14 octobre,_20748est à la même ligne (:14818) ; ses broches n'y ont pas été relues (estimé identique). - Contenu du nœud
_20748,Content: le texte demandant de recopier l'ancien dossierContent\Saves(CAM-B1-PRE…:14823). C'est le message visé parFIX1-F6-SPEC.mdQ7.FIX1-F6-PRE.md:96etFIX1-F6-SPEC.md:85le décrivent comme un message affiché ; le dump du 13 octobre montre qu'aucune exécution n'y mène ; le journal COM23 ne contient ni son texte ni celui duPrintString(n° 23 : un seul journal, sans preuve que le cas se soit présenté). - Nature : suppression (C11 :
delete_node_20748;break_pins(_13122.then →_340.execute) puisdelete_node_13122et ses entrées pures exclusives ;_340gardé). Alternative F6 :set_pin_valuesurContentet relier l'exécution (changement de comportement visible : le message deviendrait atteignable). - Dépend de : décision GQ4 (supprimer ou réécrire). Risque : très faible pour la suppression ; moyen pour la réécriture (réactive du code mort).
- Voie : MCP
lp-mcp-bp. Écritures estimées : 3 à 6 (suppression) ; plus si réécriture. - Preuve : statique (relecture
get_node_infos, compilation,CompileAllBlueprints, 0 Accessed None nouveau). Aucune preuve en jeu possible pour un code non exécuté ; pour la réécriture : charger une partie dont un slot manque et lire l'écran et le journal. - Piège :
K2Node_CallFunction_340n'est pas le même nœud dans le dump 5.5 (ShowTutorialTxt,L6f_dump_GI.txt:64588) : ne pas croiser avec le dump 5.5.
M3. C10 / D3 : traces de débogage mortes dans SavePreset (CG2-SPEC-01.md:91, :193 ; CGREF1-T3-MCP.md:98)
- Où :
SP. Nœuds :VariableSet_10(before,:2282),CallFunction_81(:2236),_88et_89(Left,:2272,:2277),_91(:2299),_0(:1487),_86(:2256),_1(:1503) du dump 5.8STE-H10V_…20261013-071350.txt. - Nature : suppression. Règle de la SPEC : supprimer seulement un nœud dont
executen'a aucune liaison et dont les sorties ne vont qu'à d'autres nœuds supprimés ; un nœud relié à un chemin atteignable est gardé et noté. La SPEC § 9 attend que seuls_0et_1soient supprimables ; le constat d'origine (IMPL v1, « E5 ») n'est plus dansCG2-IMPL-01.md(v4) : non relu. - Dépend de : rien. Risque : très faible. Voie : MCP. Écritures estimées : 4 à 8 (lecture groupée des 8 nœuds en tête).
- Preuve : statique (compilation, relecture) ; en jeu, l'enregistrement d'un préréglage reste conforme (M4, M5).
- Source : dump 5.8 (13 octobre), nœuds retrouvés par leur nom ; liaisons : lecture MCP de CGREF1-T3 (16 octobre).
M4. D2 : garde de fin de chemin de SavePreset (CG2-CART-01.md:45 ; CGREF1-T3-MCP.md:61, :97)
- Où :
SP.IfThenElse_2970←CallFunction_19325=EndsWith(File, "Characters\0.lpcharacter", IgnoreCase)(dump 5.8STE-H10V…:1476-1482) ;thennon relié (retour sans écrire) ;else→IfThenElse_10253(liaisons :CGREF1-T3-MCP.md:61). - Constat : le littéral contient un antislash, les chemins de session utilisent
/, etFilen'a pas d'extension quand il vient deCharGen(l'extension est ajoutée parAppend_762) : la garde ne se déclenche probablement jamais (estimé,CGREF1-T3-MCP.md:97). - Nature : décision d'abord. Options : (a) laisser (aucune écriture) ; (b) supprimer la garde et relier
FunctionEntry_799àIfThenElse_10253(≈ 5 écritures, comportement inchangé tant que la garde est inerte) ; (c) corriger le littéral : change le comportement si un appelant passe une extension ; non recommandé sans connaître le rôle voulu de la garde. - Dépend de : décision GQ1 ; M3 avant (même fonction). Risque : faible en (b), moyen en (c). Voie : MCP. Écritures : 0 à 5.
- Preuve en jeu : enregistrer un préréglage sous un nom ordinaire : le fichier est créé ; enregistrement depuis l'écran de création inchangé.
- Piège : une correction par
set_pin_valueseul ne marque pas le paquet (voir § 3.9, IMPL-06).
M5. ERR-142 : extension .lpcharacter ajoutée deux fois (Registre_Erreurs.md:149 ; COMMUN-14-BILAN.md:60, :123 ; CG2-VAL-01.md:184)
- Où :
SP.Append_762(Concat_StrStr, dump:135) :A←SelectString(Modules/ou vide selonStartsWith(File, "Saves")),B←File,C=.lpcharacter(CGREF1-T3-MCP.md:64) ; résultat →VariableSet_930(FullPath, dump:141). Une seconde chaîneSaveTxtrelitGetFullPath(CGREF1-T3-MCP.md:68-69) : elle suit la correction. - Nature : nœuds et liaison. Proposition (estimée) :
EndsWith(File, ".lpcharacter", IgnoreCase)(pure) etSelectString(A = vide, B =.lpcharacter,bPickA←EndsWith) relié àAppend_762.C à la place du littéral. Deux fonctions pures sans effet de bord ; la règle 4 de lp-mcp vise les gardes d'Accessed None, pas ce choix de valeur. Variante : deuxSetFullPathderrière une Branche (plus de nœuds). - Dépend de : M3 (même fonction, ordre) ; indépendante de CG2 C7 (qui filtre
..,/,\côtéCharGen). Risque : faible. Voie : MCP. Écritures estimées : 7 à 10. - Preuve en jeu : enregistrer sous
test.lpcharacter: un seul fichiertest.lpcharacter; soustest:test.lpcharacter; la liste de chargement n'affiche pas de doublon.
M6. D17 : texture par défaut absente du registre (CG2-CART-01.md:60 ; CGREF1-T3c-MCP.md:58-70, :116)
- Où :
EG, événementLoadDefaultTextures(K2Node_CustomEvent_96, dump 5.8STE-ORG4cV…:28582) :GetAssetByObjectPath(LPAssetRegistryHelpers,CallFunction_1048,bIncludeOnlyOnDiskAssets = 'true',:28601-28604) →GetAsset→CastToTexture2D(DynamicCast_3pour les textures par défaut,DynamicCast_2pour les visages :CGREF1-T3c-MCP.md:64-65) ;CastFailednon relié. - Constat nouveau : l'assistant C++ journalise un avertissement unique par chemin non résolu (
LPAssetRegistryHelpers.cpp:34-49, lot L5, ERR-027), donc « sans message » n'est plus vrai pour l'absence du registre. Reste le cas du cast (asset trouvé mais pas une texture). 0 occurrence de l'avertissement dans le journal COM23 (n° 22) : aucune texture par défaut non résolue dans cette session ; que l'événement ait été exécuté dans cette session n'est pas établi. - Nature : nœuds (au plus deux
PrintStringsur lesCastFailed, journal seul) ; ou aucune écriture si l'utilisateur ferme D17. - Dépend de : décision GQ3. Risque : très faible (journal seul ;
PrintStringn'imprime rien en Shipping,CG2-SPEC-01.md:115). Voie : MCP. Écritures : 0 ou 6 à 8. - Preuve : journal Development : aucune ligne nouvelle au démarrage normal ; l'effet du
PrintStringne se voit qu'avec un chemin volontairement faux (essai éditeur, hors fiche).
M7. F7a : avertissement CenterBrow dans CalculateHeadtrack (FIX1-F7-PRE.md:127, :137, :145, :182)
- Où : fonction
CalculateHeadtrack(44 nœuds, dump 5.5L6f_dump_GI.txt:42273-42296, lu de seconde main par FIX1-F7-PRE) :GetSocketLocation('CenterBrow')sur le maillage deFrom(K2Node_CallFunction_3) et deTo(K2Node_CallFunction_1) ; appelée par les AnimBPDailyetDaily_F(estimé). Aucun dump 5.8 (n° 15). - Nature : nœuds et liaisons : garde avant
_1et_3(IsValid(From),IsValid(To), maillage présent parGetSkinnedAsset), sinon retour sans calcul (voie A de F7-PRE, 4 à 8 nœuds, 2 coupures). Les sorties de la fonction ne sont pas connues : la branche « non valide » doit renvoyer des valeurs neutres (inconnu). - Dépend de : dump 5.8 de la fonction ; décision GQ6 (aucun effet visible, avertissement présent depuis la 4.27,
Registre_Erreurs.md:25d'après F7-PRE). Risque : faible pour le jeu, moyen pour la complexité (fonction appelée à chaque image par des AnimBP). Voie : MCP. Écritures estimées : 15 à 20. - Preuve en jeu : build Development, au moins un
SPAWNsuivi deDESTROY, 3 minutes de jeu : 0 ligneGetSocketInfoByName(CenterBrow)(avant : 141 à 6 138 lignes par session, 8 journaux sur 11) et les 521 autres lignes de sockets inchangées (FIX1-F7-PRE.md:150). Une session à 0 sansSPAWNne prouve rien.
M8. D9 : tirage sans alternative retenue (CG2-CART-01.md:52 ; CGREF1-T7-TEST.md:14-36 ; 06-rapport-audit.md:175)
- Où : fonction
GenerateAndApplyFloats(FunctionEntry_11268), boucleMacroInstance_7962(ForEachLoopWithBreaksurProbs), testIfThenElse_13010←CallFunction_106418(dé <= cumul), seule écriture deValue=VariableSet_1, application après la boucle parIfThenElse_0(section réservée →CallFunction_18SetMorphTarget,Value←VariableGet_8,bRemoveZeroWeight = true; sinonSwitchString_1→CallFunction_17).Valueest une variable locale, défaut estimé 0,0, illisible par MCP (CGREF1-T7-TEST.md:17-20). Lecture MCP 5.8 du 2026-10-16 ; aucun dump 5.8 (n° 15). - Constat : sans alternative retenue, la boucle atteint
Completed, l'application s'exécute avec la valeur initiale et retire le morph. 62 lignes du corpus sont concernées (CG2-CART-01.md:52). - Nature : nœuds et variable : distinguer « alternative retenue » de « aucune », puis sauter l'application dans le second cas. Une sortie
BreaketCompletedmènent au même endroit, donc il faut un indicateur : une variable locale booléenne posée dans la branche vraie (le MCP sait-il créer une variable locale ? inconnu) ou une valeur sentinelle deValueposée avant la boucle (les comparateurs ne sortent pas defind_node_types,lp-mcp§ 3). Même motif possible dansGenerateAndApplyStrings(dump 5.8 du 2026-10-10 présent) et…Bools(aucun dump) : non lu. - Dépend de : décision GQ2 (R06 § 5.5 n° 2 : « pas encore tranché ») ; dump 5.8 ; capacité MCP. Risque : moyen (change le résultat du chargement de préréglages). Voie : MCP. Écritures estimées : 12 à 20.
- Preuve en jeu : un préréglage de test dont le total des poids d'une ligne est inférieur à 100 % : la valeur du morph après chargement reste celle d'avant ; comparaison avec un préréglage complet inchangée.
M9 (conditionnelle, non planifiée). S1-BP : cadrage du studio (CAM2-SPEC-02.md:51, :58, :63 ; BOSS-JOURNAL.md:870-871)
- Où : valeur par défaut de la variable membre
CameraSceneTransformDefault(X -= d) et place du personnage (GI.ActorTransforms[…], à lire). Nature : valeur (par défaut de variable, hors graphe) : la voie MCP pour modifier un défaut de variable membre est inconnue. Retenue seulement si S1-C++ est impossible (lecture MCP de la pose deCharGenau prochain jeton). Risque : moyen (CameraSceneTransformDefaultsert d'autres vues). - STM1 S3 (PrintString dans GI :
STM1-SPEC-01.md:87) est conditionnelle de la même façon et n'est pas retenue (S1 C++ retenue).
3.3 Points de la fiche qui ne sont pas dans GI
| Point | Où il se trouve | Source |
|---|---|---|
| C8 (D21) | CharGen.PopulatePresets : ClearChildren entre CG.K2Node_CustomEvent_139 et VariableSet_508, Branche dans la boucle MacroInstance_64 |
CG2-SPEC-01.md:75, :190 ; CG2-IMPL-01.md:153, :237 |
| Q7 (CG2) | masquer le champ anti-déformation de CharGen (décision « oui » de l'utilisateur) |
CG2-TACHES.md:22 |
| Q8 (CG2) | fermer l'écran par GI.CloseCharGen au lieu de désactiver les boutons : écriture dans CharGen ; GI seulement lu (événement CustomEvent_101) ; suspendu jusqu'aux essais |
CG2-TACHES.md:23 ; CGREF1-T3-MCP.md:84 ; CG2-VAL-01.md:144 |
| R7 | 2 Accessed None GetSkeletalMesh dans une fonction Populate…SlidersDaz de CharGen, antérieurs à CG2 |
CG2-TACHES.md:72 ; BOSS-JOURNAL.md:767 |
| Remappage de Y/N (KEY2 Q7) | PC : K2Node_InputKey_2 et _5 |
KEY2-SPEC-01.md:34, :246 ; KEY2-TACHES.md:35 |
| ERR-145 | cause non établie (pistes : FirstPersonSM, C1Hidden) : C++ ou Person |
Registre_Erreurs.md:152 |
| F7b, F7c, F8b | Person et C++ | FIX1-F7-PRE.md:137 |
Condition IsMale de VisualMorph |
VisualMorph |
CG2-SPEC-01.md:195-196 |
Conséquence : ces points relèvent d'une révision de CharGen / PC / Person, pas de celle de GI. C8 et Q7 vont avec les fichiers CharGen (autre binaire) ; le report de BOSS-ETAT (:143) les range en « build 2 » sans dire que GI n'est pas le fichier.
3.4 Candidats « B2 » de la CART qui touchent GI et ne sont pas dans la liste
D1 (broches de sortie de SavePreset, incertain), D8 (conflits de morphs, décision), D10 (BlendPreset : collision x / ax), D12 (LoadPreset : trace StatOnly morte), n° 32 (ReadLine sans branche d'erreur), n° 37 (graphes non lus), n° 35 (listes fermées : hors lot) : CG2-CART-01.md:44, :51, :53, :55, :75, :83, :85. Non retenus par BOSS-ETAT :143 ; à demander (GQ5). Autres candidats nés de QPERS : les lignes r.SSS.Scale, r.DynamicRes.*, r.Streaming.PoolSize posées par UpdateGraphicsQuality (CAM-B1-PRE…:17106, :17113, :25642, :25656), jugées sans effet par QPERS-PRE :45, :50 (estimé) : non demandées.
3.5 Dépendances
- Décisions préalables : GQ4 avant M2 ; GQ1 avant M4 ; GQ3 avant M6 ; GQ2 et la capacité MCP avant M8 ; GQ6 avant M7.
- Même fonction : M3, M4, M5 dans
SavePreset; M1, M2, M6 dans l'EventGraph. Les faire à la suite évite de relire deux fois le graphe. - M3 avant M4 et M5 : les suppressions mortes simplifient la lecture de la tête de fonction ; M4 et M5 touchent des nœuds distincts (
IfThenElse_2970/Append_762). - Dumps 5.8 (§ 3.7) avant M4/M5 (rafraîchi), M7, M8.
- Externes : CG2 (VAL et build 2 de CharGen) n'a pas besoin de GI ; publication de la build 1 (vers le 24 octobre) avant tout accès en écriture à GI ; CAM2 (lecture MCP du studio, S1-C++) pour savoir si M9 existe ; KEY2 et CAM2 ne modifient pas GI mais leurs fiches comparent le MD5 de GI.
- Gel de
GI.uassetannoncé à toutes les sessions pendant la révision (lp-mcp§ 1 règle 7).
3.6 Ordre proposé (une seule session d'éditeur, un seul instantané)
- Préparation : gel annoncé ;
Snapshot.ps1 -Lot GIREV -Path Content\BPs\GI.uasset(MD5 attendu32fc0a97…) ; éditeur headless puislist_toolsets(lp-mcp§ 2) ;load_assetde GI ;is_dirty; compilation de référence de GI sans modification (durée et diagnostics « avant ») ; lectures de contrôle de tous les nœuds ci-dessous (tout écart arrête). - Sous-lot A,
EventGraph: M1, puis M2 (si GQ4 = supprimer), puis M6 (si GQ3 ≠ fermer). Compilation, journal propre,save_assets. - Sous-lot B,
SavePreset: M3, puis M4 (si GQ1 ≠ laisser), puis M5. Compilation, journal propre,save_assets. - Sous-lot C, fonctions à effet : M7 (si GQ6 = oui), puis M8 (si GQ2 = oui et capacité MCP établie). Compilation, journal propre,
save_assets. - Clôture :
is_dirty, date et MD5 du.uassetavant de fermer l'éditeur,git status --short -- Content/, fermeture,UeState= 0,RunCommandlet.ps1 -Lot GIREV -Commandlet CompileAllBlueprints(éditeur fermé), build Development, essai en jeu (§ 3.2, preuves).
Raison de l'ordre : du moins risqué au plus risqué (suppressions sans effet, puis réparations locales, puis changements de comportement) et par graphe, pour qu'un arrêt à la fin d'un sous-lot laisse GI cohérent.
3.7 Dumps 5.8 à produire avant (éditeur fermé, copie UE)
| Fonction | Dump 5.8 existant | À faire |
|---|---|---|
EventGraph (M1, M2, M6, Q8 en lecture) |
STE-ORG4cV…20261014-103731.txt (10:38, postérieur à la sauvegarde de GI à 10:33) ; liaisons de M1 et M2 lues dans CAM-B1-PRE…083048.txt (13 octobre) |
non tant que le MD5 de GI vaut 32fc0a97… (à recontrôler le jour du passage) ; relire les broches de _20748 par MCP |
SavePreset (M3, M4, M5) |
STE-H10V…20261013-071350.txt, antérieur au dernier commit de GI (c4cf6f3, 14 octobre) ; l'heure des commits du 13 octobre n'est pas relevée |
oui : .\Tools\RunCommandlet.ps1 -Lot GIREV -Commandlet LPDumpFunction -Args '-BP=GI -Fn=SavePreset -Pins -Exec' |
GenerateAndApplyFloats (M8) |
aucun (5.5 seulement, et lecture MCP du 2026-10-16) | oui : -Fn=GenerateAndApplyFloats ; ajouter GenerateAndApplyStrings (existant du 2026-10-10, à rafraîchir) et GenerateAndApplyBools (aucun) |
CalculateHeadtrack (M7) |
aucun (5.5 : L6f_dump_GI.txt:42273-42296) |
oui : -Fn=CalculateHeadtrack |
Quatre à six dumps ; 61 à 66 s pour l'EventGraph (n° 17, 18), moins pour une fonction (non mesuré). Le dump plein de GI en 5.8 n'existe pas (seul le 5.5 : n° 16). Un LPDumpFunction sur un AnimBP (Daily) pour confirmer les appelants de CalculateHeadtrack : accepté ou non par la commande, inconnu (FIX1-F7-PRE.md:201).
3.8 Découpage en sous-lots (une session de révision, un instantané)
| Sous-lot | Contenu | Écritures (estimées) | Fiche |
|---|---|---|---|
| A | préparation + M1 + M2 + M6 | 15 à 30 | 1 fiche N3 lp-mcp-bp, ≤ 50 tours |
| B | M3 + M4 + M5 | 11 à 25 | 1 fiche, ≤ 50 tours |
| C | M7 + M8 + clôture | 27 à 40 | 1 fiche, ≤ 50 tours (la clôture peut passer à l'orchestrateur) |
Chaque fiche finit par compilation, journal sans erreur ni avertissement nouveau, save_assets, MD5 noté. Un seul instantané en tête (A) ; un seul commit de GI.uasset à la fin, par le gardien. Chaque save_assets réécrit 52,7 Mo sur le disque : « révision unique » est entendue ici comme un instantané et un commit, pas comme une écriture disque unique (à confirmer, GQ7).
3.9 Voie, risques transverses, durée
- Voie : MCP
lp-mcp-bp, écritures unitaires relues (lp-mcp§ 1 règle 3). Alternative commandlet : aucun commandlet de modification de nœuds de GI n'existe en 5.8 (les 16LPFix*ont été retirés en U2,lp-commandlets) ; un nouveau demanderait une compilation C++ et un modèle (LPFixDeprecatedNodes) pour ≈ 8 modifications : non recommandé (estimé). - Leçon IMPL-06 (
CAM2-IMPL-06.md:28,:53,:78) :set_pin_valueseul ne marque pas le paquet ;save_assetsrenvoie vrai sans rien écrire. M4 (c) et toute réécriture de texte (M2) sont à risque. Règle : après unset_pin_valuesans autre écriture de graphe, marquer le paquet par une opération réversible (couper puis rétablir à l'identique une liaison du même nœud), vérifieris_dirty, puis date et MD5 du fichier avant de fermer l'éditeur. Les suppressions et liaisons (M1, M2, M3, M5…) marquent le paquet. - Permission : en mode auto, un
create_nodea été refusé deux fois dansCharGen(CG2-SPEC-01.md:210) ; la règle de permissionmcp__unreal-mcp__call_tooldoit être en place avant la session, et il faut compter un tour par écriture relue (CG2-IMPL-01.md:242-244). - Compilation de GI : décrite comme « longue » (
CG2-SPEC-01.md:94), durée non mesurée dans les sources lues ; la compilation de référence de l'étape 0 la mesure. - Durée estimée : 50 à 90 écritures relues (somme des fourchettes M1 à M8), donc 3 fiches de 25 à 45 tours. Base : 1 tour par écriture,
CG2-IMPL-01.md:242-244(cœur : 22 tours, C7 : 23 tours). La cadence d'horloge par tour n'est pas mesurée (CG2-SPEC § 8 annonçait ≈ 5 h pour 22 tours : estimation de SPEC, non confirmée). À prévoir : 3 créneaux de jeton UE (demi-journée à une journée chacun), plus un créneau de build et d'essai en jeu (≈ 1 h de jeu par l'utilisateur). Fenêtre : après la publication de la build 1 (≈ 24 octobre) et assez avant la build 2 (≈ 3 novembre) pour l'essai.
3.10 Retour arrière
- Instantané unique :
Tools\Snapshot.ps1 -Lot GIREV -Path Content\BPs\GI.uassetavant toute écriture ; manifeste cité dans chaque livrable ; MD5 de référence32fc0a970ab194626e8dc07df3a9633d. Retour à l'octet :Tools\Restore.ps1 -Lot GIREV -WhatIf, puis-Only Content\BPs\GI.uasset, éditeur fermé (CG2-SPEC-01.md:104). - Second filet : le fichier est identique à
c4cf6f3(arbre propre) : le gardien peut le restaurer depuis git sur ticket. - Retour partiel : un sous-lot enregistré et validé reste ; un sous-lot en échec se défait par les opérations inverses (liaisons rétablies) si le graphe est lisible, sinon restauration complète. Chaque
save_assetsde fin de sous-lot est précédé d'une compilation sans erreur ; en cas de plantage de l'éditeur, le fichier sur disque est l'état du derniersave_assets. - Après coup : tout retour arrière après l'essai en jeu ramène aussi la référence MD5 de BOSS-ETAT.
4. Établi / estimé / incertain
Établi (lu à la source) :
- MD5, taille, historique et arbre propre de GI (n° 13, 14) ; aucun ticket GI (n° 25).
- Les liaisons de M1 et la position de
_20748/_13122sans exécution entrante dans le dump 5.8 du 13 octobre (n° 17) ; les mêmes nœuds existent aux mêmes lignes dans le dump du 14 octobre (n° 18, existence seule). - Les nœuds de M3, M4, M5 existent dans le dump 5.8 du 13 octobre (n° 20), y compris le suffixe à antislash.
- Le nœud de M6 est dans le dump 5.8 le plus récent,
bIncludeOnlyOnDiskAssets = 'true'(n° 19) ; l'assistant C++ journalise les échecs (n° 21). - C8, Q7, Q8, R7, Y/N ne sont pas dans GI (§ 3.3, avec sources) ; ERR-145 n'a pas de cause.
- Les deux commandes de M1 sont rejetées au démarrage (journal COM23, n° 23).
- Aucun dump 5.8 de
GenerateAndApplyFloatsni deCalculateHeadtrack(n° 15) ; aucun dump plein de GI en 5.8 (n° 16). - Le doc 37 § 2.7 ne porte pas la liste (§ 3.1).
Estimé (déduit) :
- M2 :
_20748encore sans exécution entrante le 14 octobre (même ligne) ; l'absence de message « fichiers manquants » vient du code mort (une seule preuve : dump, sans exécution). - M4 : garde inerte ; M7 : appelants
DailyetDaily_F(FIX1-F7-PRE) ; M8 : défaut deValue= 0,0 ; décompte des écritures, durée et ordre de grandeur de la compilation ; l'absence d'effet der.SSS.*etr.DynamicRes.*(QPERS-PRE).
Incertain (essai qui trancherait) :
- Le MCP peut-il créer une variable locale ou modifier le défaut d'une variable membre ? (
describe_toolsetfiltré survariable, sans écriture.) - Les sorties de
CalculateHeadtracket le rôle exact des appelants (dump 5.8 + dump AnimBP). - Le motif de M8 existe-t-il dans
…Stringset…Bools? (lecture des dumps.) - Le tronçon de
UpdateGraphicsQualityentreCustomEvent_1324etCallFunction_244(lecture MCP). - Pourquoi la règle stricte de C10 ne retient d'abord aucun nœud (IMPL v1 non conservé).
- Durée de compilation de GI ; cadence d'horloge d'une écriture MCP.
- Si le message « fichiers manquants » est atteignable par un chemin que le dump n'affiche pas (relecture MCP de la broche
executede_20748).
5. Points à confirmer (repris par la fiche suivante)
- Relire par MCP
executeetthendeK2Node_CallFunction_20748etK2Node_CallFunction_13122(confirmation du code mort) avant de trancher GQ4. - Produire les dumps du § 3.7 et relire
GenerateAndApplyStrings/…Boolspour le motif de D9. describe_toolset(filtrevariable) : création de variable locale, défaut d'une variable membre.- Lire le tronçon de
UpdateGraphicsQualitynon relu et les autres lecteurs dePostProcessAAQualityetCPUSkinning(aucun nœud supprimé ne doit porter une autre liaison). - Recontrôler le MD5 de GI le jour du passage (
32fc0a97…) et le journal des lots qui comparent ce MD5. - Compilation de référence de GI : durée et diagnostics.
6. Questions pour la SPEC ou l'utilisateur
- GQ1 (D2) : quel est le rôle voulu de la garde
Characters\0.lpcharacter? Recommandation : laisser (a) ou supprimer (b) ; ne pas corriger le littéral (c) sans ce rôle. - GQ2 (D9) : un préréglage incomplet doit-il laisser le morph inchangé (correction) ou le remettre à zéro (comportement actuel) ? Décision pas prise (
06-rapport-audit.md:175). - GQ3 (D17) : fermer D17 (journal C++ déjà présent pour le chemin non résolu) ou ajouter les deux traces de cast ?
- GQ4 (message de F6 / C11) : supprimer le nœud mort et clore le message de F6, ou le réécrire et le relier (comportement nouveau pour le joueur) ?
- GQ5 : D1, D8, D10, D12, n° 32 et les lignes
r.SSS.*/r.DynamicRes.*entrent-ils dans la révision ? - GQ6 (F7a) : garder l'avertissement
CenterBrow(sans effet visible) hors de la révision ? Le coût est le plus élevé de la liste (15 à 20 écritures) pour un gain de journal. - GQ7 : « révision unique » = un instantané et un commit (une sauvegarde par sous-lot) ou une seule sauvegarde en fin de session (risque de perte en cas de plantage) ?
- GQ8 : confirmer que C8, Q7, Q8, R7 vont dans une révision de
CharGen(et Y/N dans une dePC), et que la ligne de BOSS-ETAT:143est corrigée en conséquence. - GQ9 : le doc 37 § 2.7 doit-il recevoir la liste (BOSS-JOURNAL
:767: « à faire par une fiche ») ?
Tours : 32 / 35 (28 jusqu'à la première écriture du livrable, un contrôle PubCheck, la réécriture, un second contrôle et le rendu du compte rendu ; Tools/FicheStats.py fait foi)
Constats
- Fichier écrit :
D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\GIREV\GIREV-PRE.md. - Fichiers à commiter :
A Docs/Migration/etat/REL/GIREV/GIREV-PRE.md(dépôt du jeu, brancheue5.8, par le gardien sur ticket). Aucun autre fichier écrit. - À verser :
lp-mcp§ 3 — le message de GI « copy your old … Content\Saves » est le champContentd'un nœudShowTutorialorphelin : lireexecuted'un nœud de message avant de le déclarer « affiché ». À verser :lp-commandlets— unrg --no-ignoreciblé sur lesLPDumpFunction*.txtdonne la couverture des dumps par fonction (-Fn=) ; un Grep de dossier suretat/saute les.txt.