LifePlay-Revival/Docs/Migration/etat/OPT/REFAC/REFAC-INDEX.md

53 lines
4.6 KiB
Markdown
Raw Normal View History

# REFAC-INDEX : base de refactorisation du C++ de LifePlay (fiche C1)
2026-10-15, session Sonnet · OPT0-R, avec deux sous-agents Sonnet (C1a inventaire, C1b API). Lecture seule du code ; aucun build, éditeur, MCP ni commit. Point de départ : `etat\OB\OBA\OBA-T23-CODE-CART.md` et `OPT\OPT0\OPT0-A1-INV.md`.
## Contenu
| Fichier | Objet |
|---|---|
| REFAC-FONCTIONS.csv | inventaire des définitions de fonctions : module, fichier, ligne, classe, fonction, UFUNCTION Blueprint, statique, tick |
| REFAC-APPELS.csv | sites d'appel : appelant, appelé, fichier:ligne, interne ou moteur, colonne ambigu |
| REFAC-SANS-APPELANT.csv | fonctions sans appelant interne (avec la réserve moteur / Blueprint) |
| REFAC-INDEX-C1a.md | comptes bruts, fonctions les plus appelées et les plus longues, limites de l'analyse |
| REFAC-API-58.md | statut des API moteur dans les en-têtes 5.8, correctifs et contournements maison, candidats |
| REFAC-TRANSFO-T1.md à T6.md | une fiche de transformation par candidat |
## Comptes bruts (recomptés par mes soins)
| Mesure | Valeur | Vérification |
|---|---|---|
| Fonctions définies | 1011 (LifePlay 485, LPSandbox 132, StreetMapRuntime 93, LPModTools 82, LPAnimMeasure 77, LifePlayEditorTools 68, StreetMapImporting 43, LPAnimCore 31) | `wc -l` du CSV : 1012 lignes, en-tête comprise |
| Sites d'appel | 12 256 (internes 3169, moteur 9087) | `wc -l` du CSV : 12 257 lignes, en-tête comprise ; 3169 + 9087 = 12 256 |
| Sans appelant interne | 364 (176 sans réserve de cycle de vie ni d'exposition) | `wc -l` : 365 lignes |
| UFUNCTION Blueprint / statiques / Tick | 30 / 67 / 17 | rapport C1a, non recompté |
| Symboles moteur extraits / résolus dans les en-têtes 5.8 / tableau | 1089 `Classe::Membre` / 382 / 150 | rapport C1b, non recompté |
| API obsolète effectivement appelée | 0 (6 symboles marqués obsolètes dans les en-têtes : faux positifs ou déjà traités) | rapport C1b ; concorde avec OBA-T23 § 3.2 |
| Gardes de version `UE_VERSION_*` / `ENGINE_*_VERSION` | **10** (le rapport C1b en comptait 9) | Grep direct, voir T1 |
Vérifications faites sur les en-têtes 5.8 : `NavigationSystem.h:515-516` (K2_GetRandomLocationInNavigableRadius, BlueprintCallable), `NavigationSystem.h:1483-1485` (ancien nœud pur, déprécié 5.1), `SkinnedMeshComponent.h:1222-1223` (GetSkinnedAsset, pur), `KismetRenderingLibrary.h:210` (ImportFileAsTexture2D), `AutomationTest.h:63-65`.
## Résultat
**Aucune API moteur dépréciée n'est appelée** par le C++ suivi du jeu, de l'addon et de StreetMap (confirme OBA-T23). Six candidats de transformation, tous de faible gravité :
| Id | Candidat | Gravité | Niveau de preuve | Décision |
|---|---|---|---|---|
| T2 | étendre le banc LPTestStringCompat à ParseIntoArray | moyenne (préalable) | établi | à lancer en premier |
| T3 | LPMeshCompat vers GetSkinnedAsset + cast (56 nœuds) | volume moyen, risque faible | établi | après T2 |
| T5 | LPNavigationHelpers vers K2_GetRandomLocationInNavigableRadius (6 nœuds) | faible à moyen | établi / estimé | après T3 |
| T4 | Victory_LoadTexture2D_FromFile vers ImportFileAsTexture2D (5 assets) | moyenne | estimé | facultatif |
| T1 | retirer 10 gardes de version | faible | établi | décision de l'utilisateur (copie 5.5) |
| T6 | JSON écrit à la main en FJsonObject (1 site, addon) | très faible | estimé | facultatif |
Pas de candidat : `LPStringCompat` Contains / Find / Split (60 écarts du natif sur 3120 cas mesurés par OBA), `LPAssetRegistryHelpers` (le natif K2_GetAssetByObjectPath est impur), `LPDataCompat` (logique métier). Priorité d'ensemble : T2 d'abord ; les autres n'apportent qu'un nettoyage, aucun gain de performance n'est démontré.
## Limites
- Analyse lexicale (grep et expressions régulières, sans préprocesseur ni résolution de types) : les appels par délégué, par nom de chaîne ou depuis un Blueprint ne sont pas vus ; 1210 arêtes internes sont marquées ambiguës ; les fonctions écrites par macro ne sont pas comptées.
- Les en-têtes Private, Internal, ThirdParty et `Engine\Plugins` ne sont pas balayés pour le statut des API.
- 16 fichiers de l'addon, modifiés ou non suivis (liste dans REFAC-INDEX-C1a.md), ne sont pas analysés : LPSandbox est sous-compté. ModdingExtra et LPSandboxApp sont hors périmètre.
- Les Blueprints ne sont pas couverts : tous les appelants Blueprint des fiches T2 à T5 sont « à relever par MCP » (lot ultérieur, BUILD-GO).
- Dates de dernière modification des chiffres Blueprint (114, 385, 56, 6) : réimport historique, non HEAD.
- Les deux agents lisent ces fichiers avant d'agir : `lp-refac` (cartographie) et `lp-perf` (mesure).