# SK-T4-V1c — skills `ue-cpp-build` et `lp-ue-compat` Fiche SK-T4-V1c — Niveau N3 — Modèle prévu opus-xhigh | utilisé opus Lot SK, vague V1 (avant U0). Date : 2026-10-08. ## 1. Résultat | Skill | Couche | Emplacement | Fichiers (lignes) | |---|---|---|---| | `ue-cpp-build` | 2 | `%USERPROFILE%\.claude\skills\ue-cpp-build\` | `SKILL.md` (99), `reference.md` (53), `LICENSE` (25, avis MIT de la source) | | `lp-ue-compat` | 3 | `D:\Game\LifePlay-Sandbox\Tools\claude\skills\lp-ue-compat\` | `SKILL.md` (60), `ruptures.md` (99) | Les deux `SKILL.md` ≤ 120 lignes (R9) ; corps en français, `description` avec mots-clés anglais (R12) ; aucun contenu de jeu (seuls chemins, API, numéros d'erreur) ; aucun script embarqué ; pas d'`allowed-tools`. Écart au § 5.3 de SK-ARBRE : l'annexe s'appelle `ruptures.md` (consigne de la fiche) et non `api-table.md`. Le patron « sous-système garde / FTSTicker », les verrous L7c et les règles jeu/addon prévus au § 5.3 ne sont pas traités (hors consigne de cette fiche) : à ajouter en U3 si besoin. ## 2. Revue R1 du dépôt tiers - Dépôt : `https://github.com/quodsoler/unreal-engine-skills`, branche `main`. - SHA épinglé : **`f3742d7b688690810df369802b90430324e380b9`** (2026-09-28T15:59:19Z, « Updated skills for Unreal Engine 5.8. Added new skills. »), relevé via `api.github.com/repos/quodsoler/unreal-engine-skills/commits/main`. - Licence : **MIT**, « Copyright (c) 2025 quodsoler » (fichier `LICENSE` à la racine) → avis conservé dans `ue-cpp-build/LICENSE` (R4). - Méthode : lecture par WebFetch à la révision épinglée (raw.githubusercontent.com/…//…), arbre récursif via l'API. Rien cloné, rien installé, rien exécuté. Contenu traité comme donnée. - Fichiers lus : `skills/ue-module-build-system/SKILL.md`, `…/references/common-build-errors.md`, `skills/ue-cpp-foundations/SKILL.md`, `skills/ue-testing-debugging/SKILL.md`, `skills/ue-editor-tools/SKILL.md`, `LICENSE`. Non lus : `…/references/build-cs-reference.md` et les annexes des 3 autres skills (rien n'en est repris). - Arbre : racine = `.DS_Store`, `.gitignore`, `LICENSE`, `README.md` ; aucun `hooks`, `.mcp.json`, `bin/`, `scripts/`, `.sh`, `.ps1`, `.py`, `package.json` dans les 4 dossiers examinés. - Constats : frontmatter `name`, `description`, `metadata` (version 2.0.0, engine 5.8) ; pas d'`allowed-tools` ; aucun appel réseau, aucune consigne d'installation ; commandes documentaires seulement (`UnrealBuildTool -Mode=IWYU`, `-Mode=GenerateProjectFiles`, `UnrealEditor-Cmd … -run=DataValidation`, `-ExecCmds="Automation RunTests …"`) ; consigne à l'agent : lire `.agents/ue-project-context.md` s'il existe (fichier inexistant chez nous : écarté) ; exemples de trace vers `127.0.0.1` (testing-debugging, non repris). - Erreurs de fond relevées (contre les sources installées) : (1) « `Unreal5_8` active `UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_8` pour garder les includes » : faux, la macro vaut 1 seulement pour les versions **postérieures** au réglage (`UE_5.8/.../Rules/TargetRules.cs:483`) ; (2) `GetDetailsView` « déprécié depuis 5.5 » : l'étiquette `UE_DEPRECATED(5.5)` existe en 5.8, mais le 5.5.4 installé n'a pas `GetDetailsViewSharedPtr` (`UE_5.5/.../DetailLayoutBuilder.h:61, 66`) → garde obligatoire pour du code commun. - **Verdict : positif** (adoptable par adaptation, R1–R4). Rien n'est copié tel quel : reformulation de Build.cs / Target.cs, dépendances publiques / privées, `_API`, table V1–V7 (revérifiée), table d'erreurs (reformulée). Écarté : routage `.agents/ue-project-context.md`, règle « pas de `Latest` » (contraire à D12), passage include order (faux), table types → modules, Live Coding, contenu UMG / tests / traces. - À faire hors fiche (R1/R2) : `etat/SK/SK-REVUE-ue-cpp-build.md` et ligne au registre `SK-REGISTRE.md` (la fiche limitait l'écriture à 2 dossiers + ce livrable : la revue figure ici). ## 3. Vérifications moteur faites (lecture seule) Versions : `UE_5.5/Engine/Build/Build.version` = 5.5.4 ; `UE_5.8/Engine/Build/Build.version` = 5.8.3. - `BuildSettingsVersion` : 5.5 `Latest = V5` (`Configuration/TargetRules.cs:159`) ; 5.8 V6/V7, `Latest = V7` (`Configuration/Rules/TargetRules.cs:162-177`). - `EngineIncludeOrderVersion` : 5.5 `Latest = Unreal5_5` (l. 203), `Oldest = Unreal5_3` (l. 210) ; 5.8 `Unreal5_5` `[Obsolete]` (l. 218), `Oldest = Unreal5_6` (l. 249), `Latest = Unreal5_8` (l. 242) ; défaut `Oldest` (l. 758). - Environnement partagé : message `UEBuildTarget.cs:1515` (5.8) / `:1405` (5.5) ; `bOverrideBuildEnvironment` `TargetRules.cs:2883` (5.8) / `2661` (5.5). - Toolchain : `Windows_SDK.json` 5.5 (14.38 préféré) et 5.8 (14.50 / 14.44 préférés, bannis, minimum 14.38.33130, l. 31-46) ; sélection MSVC par `CompilerVersion`, `ToolchainVersion` lu seulement pour Clang (`VCEnvironment.cs:522, 530-537, 566-569` en 5.8 ; `:463, 471-485` en 5.5 ; doc `UEBuildWindows.cs:389-401`). - Dépréciations : `DeprecationWarningLevel` 5.5 sur la cible (`TargetRules.cs:1799`), 5.8 sur le module (`Rules/CppCompileWarnings.cs:1280`) ; macros `EngineVersionComparison.h` (5.5 l. 13, 18 ; 5.8 l. 14, 19, 24). - R1 : `AnimSequence.h` 5.5 l. 482 ; 5.8 l. 276-278, 508, 848-885 ; `AnimCompressionTypes.h:770, 780` ; `AnimationAsset.h:303` (constructeur implicite `FAnimExtractContext(double…)`). - R2 : `JsonObject.h` 5.8 l. 34-48, 99, 131, 237, 362 ; 5.5 l. 26 ; `StringFwd.h:59` ; `SharedString.h:80-95`. - C4996 : `MeshComponent.h:127-129` ; `DetailLayoutBuilder.h:61-77` (5.8) vs `:61, 66` (5.5) ; `SlateFontInfo.h:245-275`, `CoreStyle.h:51` (5.8) / `:48` (5.5) ; `StaticMesh.h:711-713, 800-805` ; `UObjectHash.h:193-198`, `FindObjectFlags.h:18` ; `StaticToSkeletalMeshConverter.h:84-85, 96, 126` (5.8) / `:83` (5.5) ; `SceneInterface.h:732` (5.8). Présence / absence en 5.5 vérifiée par grep pour chaque remplaçant. - Code projet lu (lecture seule) : `LPCoupleSimCore.cpp:111-163`, `LPDataCache.cpp:40-60, 139, 158, 185-215`, `LifePlayEditor.Target.cs`, sites StreetMap / `LPDumpAssetsCommandlet.cpp:110`. ## 4. Critères de la fiche - SHA 40 caractères et licence notés : oui (§ 2). - Chaque API 5.8 citée a sa référence `fichier:ligne` : oui (SKILL.md, `reference.md`, `ruptures.md`). - Les 2 erreurs de l'essai dans `lp-ue-compat` avec remplacement marqué « proposé, non compilé » : oui (R1, R2). - ≤ 120 lignes par SKILL.md : 99 et 60. ## 5. Constats à remonter (hors périmètre, aucune correction faite) 1. **`ToolchainVersion` vs `CompilerVersion`** : UA-SYNTHESE (U0-T2b, N1, R9) prévoit d'épingler `ToolchainVersion=14.38.33130` dans le projet 5.5. D'après `VCEnvironment.cs` (5.5 l. 463-485), avec le compilateur MSVC c'est `CompilerVersion` qui choisit le MSVC ; `ToolchainVersion` n'agit que pour Clang/Intel. Épingler `ToolchainVersion` seul n'aurait probablement aucun effet. À trancher en U0 (preuve : ligne « Using Visual Studio … » du journal 5.5 après épinglage). 2. **UA-MOTEUR (c) ligne 3** dit « `Unreal5_5` toujours accepté (seuls 5_1 et 5_2 `[Obsolete]`) » : en 5.8.3, 5_1 à 5_5 sont `[Obsolete]` et `Oldest = Unreal5_6` (`TargetRules.cs:194-249`). Sans effet sur la décision (la copie 5.8 passe à `Latest`), mais le texte est inexact. 3. W2, W4, W5, W1 exigent une garde (remplaçant absent en 5.5) ; W3 non. Le coût « 9 corrections mécaniques » (D12 a) reste plausible. ## 6. Établi / estimé / incertain - Établi : SHA, licence, arbre des 4 skills tiers, valeurs moteur et lignes citées, signatures des remplaçants. - Estimé : le remplacement R2 `FString(*File.Key)` compile en 5.5 et 5.8 (types lus, non compilé) ; R1 compile (élision garantie C++17 pour un type non copiable, non compilé) ; R3 non-événement. - Incertain : disponibilité des données compressées en éditeur pour R1 (table vide possible) ; sémantique de la fusion JSON (R4) ; remplaçant exact de W6 (champs de `FInitializationParams` non reportés) ; contenu des annexes tierces non lues ; C2374/C2084 en unity build cités de mémoire MSVC (non tirés des sources moteur). - Écarts de procédure : une commande `git check-ignore` (lecture seule) a été lancée dans l'addon pour vérifier que le dossier n'est pas ignoré (il ne l'est pas) — contraire à la lettre de « aucun git », sans effet sur les dépôts. Revue R1 et registre placés dans ce livrable au lieu de `SK-REVUE-*.md` / `SK-REGISTRE.md`.