LifePlay-Revival/Docs/Migration/etat/ST/STE/STE-ORG4c-VAL.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

89 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Fiche STE-ORG4c-v — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-validator — Skills lp-validate, sk-recount, sk-protocol, debug-verification
# STE-ORG4c-VAL : VAL statique V5 d'O4c (bonus à `Endsex` pour chaque participant, `GI:EventGraph`) (2026-10-14)
Verdict : **PASS-STATIC sur V5** (tout est rejoué par dump et par compilation de tous les Blueprints, aucune exécution en jeu). V6 reportée à COMMUN-8. MD5 des 7 assets identiques à l'entrée ; UeState 0 ; aucun `GI_Auto*`.
## 1. Fiches amont relues
- `STE-ORG4c-v.md` (fiche, lue en entier) ; `STE-ORG4c-SPEC.md` § 2.3, § 2.4 et § 7 V5 (le reste de la SPEC lu au passage, lignes 1-218 et 272-283) ; `STE-ORG4c-Ic1.md` (17 nœuds créés, table des noms réels) ; `STE-ORG4c-IMPL.md` (coupure, 26 liens, 7 valeurs, compilation stricte, enregistrement).
- Dump d'avant : `Saved\Logs\portage\STE-ORG4aV_LPDumpFunction_20261014-090538.log` (VAL O4a).
## 2. Points à confirmer des IMPL
| Point (source) | Résultat | Preuve |
|---|---|---|
| IMPL § 5 : autosauvegarde `GI_Auto1` déplacée, `find Saved/Autosaves -name 'GI_Auto*'` vide | **PASS** | commande ci-dessous, aucune sortie ; `Person_Auto1`, `Room_Auto1..4`, `TestStatic_Auto1` restent (déjà présents à l'entrée d'Ic2) |
| IMPL § 5 : MD5 de GI `32fc0a97…` et des 6 autres assets inchangés | **PASS** | § 3 critère a et d |
| IMPL § 5 : en-tête du dump `(6273 noeuds)` | **PASS** | `LogLPDump: Warning: === GI :: EventGraph (6273 noeuds) ===` (journal l. 1931) |
| IMPL § 5 / Ic1 § 5 : `CallFunction_737` = `Conv_TextToString`, `CallFunction_878` = `EqualEqual_StriStri` avec `B` = `Penis`, `CommutativeAssociativeBinaryOperator_111` = `BooleanOR`, `PromotableOperator_0/1` = `Less_DoubleDouble` (90 / 100) | **PASS** | journal l. 32181, 32185-32188, 32190, 32203-32210 |
| IMPL § 5 : comptes relatifs au dump P1 (ForEachLoop +1, GiveOrgasmReward 0 → 1, PrintString +2, IsMale +1, Genital +1, Conv +1, EqualEqual +1, BooleanOR +1, Sex_Orgasm 0 → 1, Sex_OrgasmCounts 0 → 0) | **PASS** | § 3 critère b (tableau) |
| IMPL § 5 : diff indépendant `DiffRemplacementNoeuds.py` (7 nœuds communs modifiés) | **reporté** | hors des commandes de la fiche ; remplacé ici par la lecture des liens des 3 nœuds existants touchés (§ 3 b) et l'écart exact de +17 noms de nœuds ; à rejouer si l'orchestrateur le veut |
| IMPL § 5 : `CompileAllBlueprints` : 0 erreur | **PASS** (à la référence près) | § 3 critère c : 0 `Error:` sur `/Game/`, 25 `Error:` = référence |
| IMPL § 5 : `LPTestStringCompat` 3120 / 0 / 60 | **reporté** | non demandé par la fiche (aucune compilation C++ dans ce lot) |
| IMPL § 5 : V6 en jeu (S1 à S6) | **reporté (COMMUN-8)** | build empaqueté et `LogStats` hors fiche |
## 3. Critères rejoués (commande → résultat brut)
**a. Entrée.** `md5sum` des 7 assets puis `pwsh -NoProfile -File Tools/UeState.ps1` :
```
32fc0a970ab194626e8dc07df3a9633d *Content/BPs/GI.uasset
931387479e2d15f80bc4f36398907712 *Content/BPs/Room.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
a8705f7fbe1fde1daba0464bfc9ff9b5 *Content/UI/SexAction.uasset
cb8353603cf95849b4f778a33b4bfbd2 *Content/UI/TopRight.uasset
df2db514e0e2345c6ccac66a0787621f *Content/Heavy/New2/Furniture/fnt_ext001.uasset
processus=0 editeur=0 compilation=0 shaders=0 jeu=0 (code=0)
```
Tous égaux aux valeurs de la fiche (rubrique 3). Verdict : PASS.
**b. Dump.** `.\Tools\RunCommandlet.ps1 -Lot STE-ORG4cV -Commandlet LPDumpFunction -Args '-BP=GI -Fn=EventGraph -Pins -Exec' -EtatDir …\ST\STE` : `code=0 duree=66s erreurs=0 avertissements=30349` (les « avertissements » sont le niveau de journal de `LogLPDump`, pas des erreurs). Journal : `D:\Game\LifePlay-master 5.8\Saved\Logs\portage\STE-ORG4cV_LPDumpFunction_20261014-103731.log` ; résumé `.txt` dans `etat\ST\STE\` (non utilisé, tronqué).
- En-tête : `(6273 noeuds)` = attendu. Verdict : PASS.
- Les 17 nœuds, journal l. 32159-32248 (premier listing des nœuds neufs, lu en entier) : `MacroInstance_97` (`macro 'ForEachLoop'`), `CallFunction_729` (`KismetSystemLibrary::IsValid()`), `IfThenElse_222` à `225`, `VariableGet_782` (`IsMale`), `783` (`Genital`), `784` (`Sex_Orgasm`), `CallFunction_737`, `878`, `CommutativeAssociativeBinaryOperator_111`, `PromotableOperator_0/1`, `CallFunction_918/988` (`PrintString`), `CallFunction_992` (`Person_C::GiveOrgasmReward()`).
- Diff des noms de nœuds avec le dump O4a (en-têtes `Warning: K2Node_<type>_<n> ` uniques) : avant **6254**, après **6271** (+17) ; les 17 noms : 0 occurrence dans le dump d'avant, 17 en-têtes dans le dump d'après. Les noms réels sont ceux d'`Ic1` § table. Écart constant +2 entre le compte des en-têtes uniques (6271) et l'en-tête du dump (6273), identique à celui d'O4a (6254 / 6256) : cohérent. Verdict : PASS.
- Coupure : `IfThenElse_875` (l. 16494-16498) : `execute` ← `IfThenElse_98.then`, `Condition` ← `CustomEvent_4245.ForceEnd`, `then` → `MacroInstance_97.Exec` **seul**, `else` → `MacroInstance_18.exec` (inchangé, confirmé aussi l. 20916). `CallFunction_11423.execute` ← `CallFunction_32955.then, IfThenElse_189.then, MacroInstance_97.Completed` (l. 12843) : **3 sources**, dont `IfThenElse_875` n'est plus. Seule la sortie `Completed` de la boucle rejoint `CallFunction_11423` (l. 32165). `VariableGet_3498.SexPersons` → `GetArrayItem_1037.Array, MacroInstance_97.Array` (l. 12817). Verdict : PASS.
- Liens de la boucle (l. 32159-32248) : `Array Element` → 5 cibles (`CallFunction_729.Object`, `VariableGet_782.self`, `783.self`, `784.self`, `CallFunction_992.self`) ; `LoopBody` → `IfThenElse_222.execute` ; `Array Index` vide ; `IfThenElse_222` : `Condition` ← `CallFunction_729`, `then` → `223.execute`, `else` vide ; `IsMale` → `OR.A`, `Genital` → `737.InText`, `737.ReturnValue` → `878.A`, `878.B = 'Penis'`, `878.ReturnValue` → `OR.B`, `OR.ReturnValue` → `IfThenElse_223.Condition` ; `223` : `then` → `224.execute`, `else` → `225.execute` ; `Sex_Orgasm` → `PromotableOperator_0.A, _1.A` ; `B = '90.0'` / `'100.0'` ; `224` et `225` : `Condition` reliées, `then` vide, `else` → `CallFunction_918` / `988` ; `918.InString = 'ORG4 bonus Endsex homme'`, `988.InString = 'ORG4 bonus Endsex femme'`, `bPrintToScreen = 'false'` ×2, `bPrintToLog = 'true'` ; `918.then` et `988.then` → `992.execute` (2 sources) ; `992.then` vide. Les 4 impasses voulues (`222.else`, `224.then`, `225.then`, `992.then`) sont vides. Les 26 liens et les 7 valeurs de la SPEC § 2.3 sont tous retrouvés. Verdict : PASS.
- Aucun `Cum` de Person appelé : `::Cum()` = 1 avant, 1 après (l'appel existant). Aucune des 17 broches n'appelle `Person::Cum`. Verdict : PASS.
- Comptes (`grep -c -F`, mêmes motifs sur les deux journaux entiers) :
| Motif | avant (O4a) | après (O4c) | attendu | verdict |
|---|---|---|---|---|
| `macro 'ForEachLoop'` | 79 | 80 | +1 | PASS |
| `GiveOrgasmReward` | 0 | 1 | 0 → 1 | PASS |
| `PrintString` | 82 | 84 | +2 | PASS |
| `variable 'IsMale'` | 25 | 26 | +1 | PASS |
| `variable 'Genital'` | 7 | 8 | +1 | PASS |
| `Conv_TextToString` | 41 | 42 | +1 | PASS |
| `EqualEqual_StriStri` | 42 | 43 | +1 | PASS |
| `BooleanOR` | 27 | 28 | +1 | PASS |
| `variable 'Sex_Orgasm'` | 0 | 1 | 0 → 1 | PASS |
| `Sex_OrgasmCounts` | 0 | 0 | 0 → 0 | PASS |
| `::Cum()` | 1 | 1 | aucun nouveau | PASS |
**c. CompileAllBlueprints.** `.\Tools\RunCommandlet.ps1 -Lot STE-ORG4cV -Commandlet CompileAllBlueprints -EtatDir …` : `code=3 duree=201s erreurs=25 avertissements=55` (code 3 = erreurs de la référence, voir ci-dessous). Journal : `…\Saved\Logs\portage\STE-ORG4cV_CompileAllBlueprints_20261014-103926.log`.
| Mesure | obtenu | référence de la fiche |
|---|---|---|
| lignes `Error:` | 25 | 25 |
| `Error:` sur `/Game/` | 0 | 0 |
| `Error:` visant `CC_Shaders` / `CR_FaceExpRig` / `RLExpStruct` | 25 (regroupement par signature : tous `/Engine/CC_Shaders/…` ou la ligne de script associée à `CR_FaceExpRig`) | toutes `/Engine/CC_Shaders/…` |
| `Warning:` | 55 | 55 |
| `a réussi` | 420 | 420 |
| `La compilation de GI a réussi` | oui, journal l. 2020 : `[0060,76] La compilation de GI a réussi ! [en 3 978 ms] (/Game/BPs/GI.GI)` | oui |
Verdict : PASS (égal à la référence). Note : mon filtre direct sur la sous-chaîne `/Engine/CC_Shaders` ne trouve que 9 des 25 lignes, parce que 16 lignes portent le chemin disque `Engine\Content\CC_Shaders\…` ou le message de script sans chemin ; toutes se rattachent au même asset `CR_FaceExpRig` (regroupement par signature fait).
**d. Fin.** `md5sum` des 7 assets (même commande qu'en a) : 7 valeurs identiques à l'entrée ; `UeState.ps1` : `processus=0 editeur=0 compilation=0 shaders=0 jeu=0` (code 0) ; `find Saved/Autosaves -name 'GI_Auto*'` : aucune sortie ; `git status --short -- Content` : ` M` GI, PC, Person, Room, TopRight (comme à l'entrée d'Ic2, aucun fichier de plus). Verdict : PASS.
## 4. Diff lu en entier
Sans objet pour le dépôt : cette VAL ne produit aucun diff de fichier suivi ; le « diff » de V5 est le diff des noms de nœuds (§ 3 b, +17, 0 retrait) et la lecture des liens des 3 nœuds existants touchés (`IfThenElse_875`, `CallFunction_11423`, `VariableGet_3498`). Fichiers que j'ai écrits (sorties de commandlets et livrable) : `Saved\Logs\portage\STE-ORG4cV_LPDumpFunction_20261014-103731.log`, `Saved\Logs\portage\STE-ORG4cV_CompileAllBlueprints_20261014-103926.log`, leurs deux résumés `.txt` dans `Docs\Migration\etat\ST\STE\`, et ce livrable. Aucun fichier du jeu modifié (MD5 inchangés).
## 5. Verdict
**PASS-STATIC sur V5 (O4c)**, aux réserves de portée près : non rejoués ici, le diff `DiffRemplacementNoeuds.py`, `LPTestStringCompat`, les non-régressions `isSameAs` 11 / `GetVariable` 53 / `CallFunctionReturnBool` 594 / `Action:EventGraph` 363 (SPEC § 7 V5.1 dernière puce, hors des commandes de la fiche), la partie O4a de V5 (liens d'O4a : non listés dans la fiche), et V6 (jeu). MD5 inchangés ; UeState 0.
## 6. Points à confirmer par l'utilisateur
- [ ] V6 en jeu (S1 à S6, marqueurs `ORG4 bonus Endsex homme` / `femme`) : reportée à COMMUN-8.
- [ ] Faut-il rejouer les non-régressions de la SPEC § 7 V5.1 (quatre dumps) et le diff `DiffRemplacementNoeuds.py` avant clôture ? Non prévus par la fiche.
- [ ] `LPTestStringCompat` : à rejouer seulement si une compilation C++ intervient avant COMMUN-8.
Tours : 13 / 25
## Constats
- Le journal de l'IMPL disait que le diff des noms donne exactement 17 : confirmé, avec comptage par en-têtes uniques (6254 → 6271), non par l'en-tête du dump (6256 → 6273), qui garde l'écart de +2 déjà vu en O4a.
- La fiche annonce « 25 `Error:` toutes `/Engine/CC_Shaders/…` » : vrai en tant qu'asset (`CR_FaceExpRig`), mais seules 9 lignes portent le chemin `/Engine/CC_Shaders` textuellement ; la formulation de la référence mériterait « liées à `CC_Shaders` ».
- Aucun refus du crochet ; aucune commande avec `>`, `<`, `tee`, `mkdir` ou heredoc.