From 7be855cf7ba2cff055e9e015e3ae8dffbb0b1d09 Mon Sep 17 00:00:00 2001 From: Dennis Westermann Date: Sat, 17 Oct 2026 17:44:06 +0200 Subject: [PATCH 1/2] chore(data): remove MapDefinitionSO without runtime reader MapDefinitionSO was written by the bootstrap scene generator and read by nobody at runtime; the headless lane cannot read a ScriptableObject at all. That is why its content was silently wrong for a whole sprint (five fields while MatchBootstrap registered fifteen). Type, MapBiomeType, MAP_Glutrinne.asset, the EditMode test, the generator section and MatchBootstrap.CanonicalHqCentreCells (its only reader) go away, each with its .meta. GUID and symbol search found no remaining reference. More than one map returns, if at all, after G5 as an engine-free map definition with its own decision. Fixes #127. Decision D-123 (draft; binding with the merge). Sim tests 778/778; Unity compile, generator run and Data EditMode tests not run. Co-Authored-By: Claude Fable 5.1 --- .../Tests/EditMode/Data/MapDefinitionTests.cs | 33 ----- .../EditMode/Data/MapDefinitionTests.cs.meta | 2 - Assets/_Project/Data/Maps.meta | 8 -- Assets/_Project/Data/Maps/MAP_Glutrinne.asset | 37 ------ .../Data/Maps/MAP_Glutrinne.asset.meta | 8 -- .../Editor/BootstrapSceneGenerator.cs | 41 ------ Assets/_Project/Scripts/Data/Maps.meta | 8 -- .../Scripts/Data/Maps/MapBiomeType.cs | 12 -- .../Scripts/Data/Maps/MapBiomeType.cs.meta | 2 - .../Scripts/Data/Maps/MapDefinitionSO.cs | 55 -------- .../Scripts/Data/Maps/MapDefinitionSO.cs.meta | 2 - .../Scripts/Gameplay/Match/MatchBootstrap.cs | 26 +--- CHANGELOG.md | 1 + docs/production/DecisionLog.md | 50 ++++++++ docs/production/ScopeLedger.md | 7 +- docs/tech/modules/MapExpansion_Spec.md | 9 +- .../04-issue-127-remove-map-definition-so.md | 49 ++++++++ .../04b-review-1-issue-127.md | 117 ++++++++++++++++++ 18 files changed, 229 insertions(+), 238 deletions(-) delete mode 100644 Assets/Tests/EditMode/Data/MapDefinitionTests.cs delete mode 100644 Assets/Tests/EditMode/Data/MapDefinitionTests.cs.meta delete mode 100644 Assets/_Project/Data/Maps.meta delete mode 100644 Assets/_Project/Data/Maps/MAP_Glutrinne.asset delete mode 100644 Assets/_Project/Data/Maps/MAP_Glutrinne.asset.meta delete mode 100644 Assets/_Project/Scripts/Data/Maps.meta delete mode 100644 Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs delete mode 100644 Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs.meta delete mode 100644 Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs delete mode 100644 Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs.meta create mode 100644 reports/v8.6.0/issue-lauf-2026-10-17/04-issue-127-remove-map-definition-so.md create mode 100644 reports/v8.6.0/issue-lauf-2026-10-17/04b-review-1-issue-127.md diff --git a/Assets/Tests/EditMode/Data/MapDefinitionTests.cs b/Assets/Tests/EditMode/Data/MapDefinitionTests.cs deleted file mode 100644 index 561971aa..00000000 --- a/Assets/Tests/EditMode/Data/MapDefinitionTests.cs +++ /dev/null @@ -1,33 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using Nova.Data; - -namespace Nova.Data.Tests -{ - [TestFixture] - public class MapDefinitionTests - { - [Test] - public void MapDefinition_ValidatesDimensionsAndSpawnPoints() - { - var map = ScriptableObject.CreateInstance(); - - map.Initialize( - mapName: "Dust Bowl 1v1", - biome: MapBiomeType.Desert, - width: 128, - height: 128, - spawnPoints: new Vector2[] { new Vector2(20f, 20f), new Vector2(100f, 100f) }, - resourceNodes: new Vector2[] { new Vector2(64f, 64f) } - ); - - Assert.IsTrue(map.IsValid()); - Assert.AreEqual("Dust Bowl 1v1", map.MapName); - Assert.AreEqual(MapBiomeType.Desert, map.Biome); - Assert.AreEqual(2, map.SpawnPoints.Count); - Assert.AreEqual(1, map.ResourceNodes.Count); - - Object.DestroyImmediate(map); - } - } -} diff --git a/Assets/Tests/EditMode/Data/MapDefinitionTests.cs.meta b/Assets/Tests/EditMode/Data/MapDefinitionTests.cs.meta deleted file mode 100644 index 78234d89..00000000 --- a/Assets/Tests/EditMode/Data/MapDefinitionTests.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: a18a6271566414973ba76d9ad11c1874 \ No newline at end of file diff --git a/Assets/_Project/Data/Maps.meta b/Assets/_Project/Data/Maps.meta deleted file mode 100644 index 455de55f..00000000 --- a/Assets/_Project/Data/Maps.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3b0d81bddd2a1426e8bb27dc498058ed -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Project/Data/Maps/MAP_Glutrinne.asset b/Assets/_Project/Data/Maps/MAP_Glutrinne.asset deleted file mode 100644 index 406d5fcd..00000000 --- a/Assets/_Project/Data/Maps/MAP_Glutrinne.asset +++ /dev/null @@ -1,37 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6e9d3d1437c224b09bc533559bd3f5c4, type: 3} - m_Name: MAP_Glutrinne - m_EditorClassIdentifier: Nova.Data::Nova.Data.MapDefinitionSO - _mapName: Glutrinne - _biome: 0 - _width: 128 - _height: 128 - _spawnPoints: - - {x: 5, y: 5} - - {x: 119, y: 119} - _resourceNodes: - - {x: 7, y: 7} - - {x: 117, y: 117} - - {x: 24, y: 40} - - {x: 100, y: 84} - - {x: 62, y: 62} - - {x: 54, y: 54} - - {x: 70, y: 70} - - {x: 54, y: 70} - - {x: 70, y: 54} - - {x: 44, y: 24} - - {x: 80, y: 100} - - {x: 44, y: 80} - - {x: 80, y: 44} - - {x: 24, y: 96} - - {x: 100, y: 28} diff --git a/Assets/_Project/Data/Maps/MAP_Glutrinne.asset.meta b/Assets/_Project/Data/Maps/MAP_Glutrinne.asset.meta deleted file mode 100644 index 3aacdebd..00000000 --- a/Assets/_Project/Data/Maps/MAP_Glutrinne.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2fc75419d63b14bd3b706c990cf6eee0 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Project/Editor/BootstrapSceneGenerator.cs b/Assets/_Project/Editor/BootstrapSceneGenerator.cs index 852883e0..42d30a20 100644 --- a/Assets/_Project/Editor/BootstrapSceneGenerator.cs +++ b/Assets/_Project/Editor/BootstrapSceneGenerator.cs @@ -4,7 +4,6 @@ using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UIElements; -using Nova.Data; using Nova.Gameplay.Audio; using Nova.Gameplay.CombatFeedback; using Nova.Gameplay.Match; @@ -71,7 +70,6 @@ public static void CreateBootstrapScene() GameObject ui = CreateUiObject(runner, camera); CreateMainMenuObject(runner, camera, ui, audio.MusicGroup); CreateVersionBadgeObject(); - EnsureGlutrinneMapAsset(); // The drop-in registry is rebuilt from whatever PF_* prefabs // currently exist under Assets/_Project/Art (usually zero — the @@ -267,45 +265,6 @@ private static void CreateMapObject(MatchRunner runner, GameObject ground) WireReference(blockout, "_groundRenderer", ground.GetComponent()); } - /// - /// The data-layer map asset. It records exactly the graybox-accurate - /// subset of the Glutrinne manifest layout — the two spawn points and - /// the five aetherium fields the canonical match registers since - /// Sprint 16.7. Primary-route dressing remains G4 scope - /// (docs/production/ScopeLedger.md) and is deliberately not invented here. - /// - private static void EnsureGlutrinneMapAsset() - { - const string mapPath = "Assets/_Project/Data/Maps/MAP_Glutrinne.asset"; - - MapDefinitionSO map = AssetDatabase.LoadAssetAtPath(mapPath); - if (map == null) - { - ArtAssetAutoSync.EnsureFolder("Assets/_Project/Data/Maps"); - map = ScriptableObject.CreateInstance(); - AssetDatabase.CreateAsset(map, mapPath); - } - - // Both lists are READ from MatchBootstrap, never restated here. - // They used to be literals, and they went stale: this baked the - // five-field layout with a comment claiming it was what - // MatchBootstrap registers, straight through the map changes of - // sprint 21 that took it to fifteen. Nobody caught it because - // MapDefinitionSO has no runtime consumer — which makes a wrong - // value cheap today and expensive on the day someone reads it. - Vector2Int[] hqCentres = MatchBootstrap.CanonicalHqCentreCells; - Vector2Int[] fieldCells = MatchBootstrap.CanonicalFieldCells; - - map.Initialize( - "Glutrinne", - MapBiomeType.Desert, - 128, - 128, - System.Array.ConvertAll(hqCentres, c => new Vector2(c.x, c.y)), - System.Array.ConvertAll(fieldCells, c => new Vector2(c.x, c.y))); - EditorUtility.SetDirty(map); - } - /// /// Input sampling, the world-space HUD markers (selection, rally /// flags, placement ghost), the build bar, the command card, the diff --git a/Assets/_Project/Scripts/Data/Maps.meta b/Assets/_Project/Scripts/Data/Maps.meta deleted file mode 100644 index 37bae84f..00000000 --- a/Assets/_Project/Scripts/Data/Maps.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e367d5c8c53824df4b3c48bce0656118 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs b/Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs deleted file mode 100644 index b581c039..00000000 --- a/Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Nova.Data -{ - /// - /// Enum defining map biome environments in Project Nova. - /// - public enum MapBiomeType : byte - { - Desert = 0, - Snow = 1, - JungleIndustrial = 2 - } -} diff --git a/Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs.meta b/Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs.meta deleted file mode 100644 index 061a7882..00000000 --- a/Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 62af6784fee134f7f8e3aaedcc0e3ee7 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs b/Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs deleted file mode 100644 index 1f3c51fc..00000000 --- a/Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace Nova.Data -{ - /// - /// ScriptableObject defining map layout, spawn points, resource locations, and biome profile. - /// Supports 1v1 and 2v2 maps across 3 biomes. - /// - [CreateAssetMenu(fileName = "NewMapDefinition", menuName = "Project Nova/Maps/Map Definition")] - public class MapDefinitionSO : ScriptableObject - { - [SerializeField] private string _mapName = "Untitled Map"; - [SerializeField] private MapBiomeType _biome = MapBiomeType.Desert; - [SerializeField] private ushort _width = 128; - [SerializeField] private ushort _height = 128; - [SerializeField] private List _spawnPoints = new List(); - [SerializeField] private List _resourceNodes = new List(); - - public string MapName => _mapName; - public MapBiomeType Biome => _biome; - public ushort Width => _width; - public ushort Height => _height; - public IReadOnlyList SpawnPoints => _spawnPoints; - public IReadOnlyList ResourceNodes => _resourceNodes; - - public void Initialize(string mapName, MapBiomeType biome, ushort width, ushort height, Vector2[] spawnPoints, Vector2[] resourceNodes) - { - _mapName = mapName; - _biome = biome; - _width = width; - _height = height; - - _spawnPoints.Clear(); - if (spawnPoints != null) _spawnPoints.AddRange(spawnPoints); - - _resourceNodes.Clear(); - if (resourceNodes != null) _resourceNodes.AddRange(resourceNodes); - } - - public bool IsValid() - { - if (_width == 0 || _height == 0) return false; - if (_spawnPoints.Count < 2) return false; // Must support at least 1v1 (2 players) - - for (int i = 0; i < _spawnPoints.Count; i++) - { - Vector2 sp = _spawnPoints[i]; - if (sp.x < 0f || sp.x >= _width || sp.y < 0f || sp.y >= _height) return false; - } - - return true; - } - } -} diff --git a/Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs.meta b/Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs.meta deleted file mode 100644 index 0493d496..00000000 --- a/Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 6e9d3d1437c224b09bc533559bd3f5c4 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Gameplay/Match/MatchBootstrap.cs b/Assets/_Project/Scripts/Gameplay/Match/MatchBootstrap.cs index 8b3e9288..724e33a4 100644 --- a/Assets/_Project/Scripts/Gameplay/Match/MatchBootstrap.cs +++ b/Assets/_Project/Scripts/Gameplay/Match/MatchBootstrap.cs @@ -322,15 +322,9 @@ public bool TryGetFieldInitialReserve(ushort fieldId, out long reserveAE) /// /// The same list as , readable WITHOUT a - /// live component. Editor tooling that bakes the canonical map reads - /// the layout from here instead of restating it: the field table - /// already stands in five places by necessity (Unity host, headless - /// scenario, three test mirrors — risk R-1 of sprint 21), and a sixth - /// copy in BootstrapSceneGenerator drifted silently through two map - /// changes before anyone noticed. Its comment still claimed "the five - /// fields MatchBootstrap registers" when there were fifteen. A copy - /// nobody reads is not harmless; it is a wrong answer waiting for its - /// first reader. + /// live component, so tooling can read the canonical layout instead of + /// restating it. (The map data asset that used to read it was removed + /// in #127, D-123.) /// public static Vector2Int[] CanonicalFieldCells { @@ -345,20 +339,6 @@ public static Vector2Int[] CanonicalFieldCells } } - /// - /// The two HQ footprint CENTRES in slot order (local, enemy), derived - /// from the same slot layouts the match spawns from — so the D-107 - /// point mirror p -> 124 - p holds by construction rather than by - /// a second hand-kept pair of literals. Same purpose as - /// : editor tooling reads, it does - /// not restate. - /// - public static Vector2Int[] CanonicalHqCentreCells => new[] - { - new Vector2Int(LocalLayout.HqOriginX + 1, LocalLayout.HqOriginY + 1), - new Vector2Int(EnemyLayout.HqOriginX + 1, EnemyLayout.HqOriginY + 1), - }; - /// Lower-left footprint origin of the human HQ (4, 4). public Vector2Int LocalHqOrigin => new Vector2Int(LocalPlayerLayout.HqOriginX, LocalPlayerLayout.HqOriginY); diff --git a/CHANGELOG.md b/CHANGELOG.md index 3af38f47..188a2736 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ die Versionierung folgt (in der aktuellen Doku-Phase) dem Dokumentationsstand de > erzeugt; MS-0 und MS-1 bleiben offen. ### Entschieden +- **D-123 (Entwurf): `MapDefinitionSO` abgeschafft.** Typ, `MapBiomeType`, `MAP_Glutrinne.asset`, der zugehörige EditMode-Test, der Generator-Abschnitt und `MatchBootstrap.CanonicalHqCentreCells` entfallen; das Asset hatte keinen Laufzeitleser (#127). - **D-108 berichtigt und neu gefasst: jedes eigene Gebäude wird Bauanker.** Die Erstfassung vom 2026-08-17 behauptete, der Code lasse *jedes* Gebäude als Anker gelten, und wollte diesen Zustand nur aussprechen. Das war falsch: diff --git a/docs/production/DecisionLog.md b/docs/production/DecisionLog.md index c00a15ca..9aee9e3a 100644 --- a/docs/production/DecisionLog.md +++ b/docs/production/DecisionLog.md @@ -3662,6 +3662,56 @@ berührt. Ansturm-Gegner ab. Wer ohne Menü startet (AutoStart, Harness), spielt diesen, nicht r8. +### D-123 | Entwurf | MapDefinitionSO wird abgeschafft (statt einen Konsumenten zu bekommen) + +**Status:** Entwurf aus dem Issue-Lauf vom 2026-10-17 (#127); verbindlich mit dem +Merge des PR. + +**Kontext:** `MapDefinitionSO` (Typ, `MapBiomeType`, Asset `MAP_Glutrinne.asset`) +wurde nur von `BootstrapSceneGenerator` beschrieben und von einem eigenen +EditMode-Test geprüft; kein Laufzeitcode las es. Genau deshalb blieb sein Inhalt +seit Sprint 21 falsch (fünf statt fünfzehn Felder), bis #125 den Generator auf +`MatchBootstrap.CanonicalFieldCells` umstellte. Die Gegenprobe über die GUIDs +findet in Szenen, Prefabs und Assets keinen weiteren Verweis. Die Karte lebt +tatsächlich in `MatchBootstrap.FieldLayouts`, den HQ-Slots, `MatchConfig` und +dem C#-Prädikat `GlutrinneTerrainMap`. Die Headless-Lane kompiliert `Nova.Data` +nicht und kann ein ScriptableObject nie lesen. Weitere Karten sind Post-MVP und +erst nach G5 mit eigener D-ID geplant (D-056). + +**Alternativen:** + +1. **Konsument geben:** `MatchBootstrap` liest die Lage aus dem Asset. Das Asset + hat nur `Vector2`-Listen für Spawns und Ressourcenknoten, keine Reserven, + kein Terrain, keine Feld-IDs, und die Sim kennt nur ganzzahlige Zellen. Die + Headless-Lane könnte es nicht lesen, es bliebe also eine zweite Wahrheit + neben der Sim. Ohne zweite Karte kauft das nichts. +2. **Behalten, wie es ist:** ein gepflegtes Artefakt ohne Zweck; jede + Kartenänderung müsste es mitziehen, ohne dass jemand sagen kann, wofür. +3. **Abschaffen:** Typ, Enum, Asset, Test und Generator-Abschnitt entfallen, die + kanonische Lage steht nur dort, wo sie gebraucht wird. + +**Entscheidung:** Alternative 3. `MapDefinitionSO`, `MapBiomeType`, +`MAP_Glutrinne.asset`, `MapDefinitionTests` und `EnsureGlutrinneMapAsset` werden +samt `.meta`-Dateien entfernt, ebenso `MatchBootstrap.CanonicalHqCentreCells` +(einziger Leser war der Generator). `CanonicalFieldCells` bleibt, weil +`AllFieldCells` darauf beruht. Eine Wiedereinführung ist nur als engine-freie +Kartendefinition (lesbar auch von der Headless-Lane) nach G5 mit eigener D-ID +zulässig. + +**Begründung:** Ohne Leser ist ein Datenartefakt nur Pflegelast und eine +Fehlerquelle. Vor der Mehrkarten-Entscheidung ist Abschaffen die ehrlichere +Variante; ein späterer Anlauf braucht ohnehin ein anderes Format. + +**Konsequenzen:** + +- Keine Sim-, Snapshot- oder Baseline-Änderung; die Headless-Tests sind nicht + betroffen. +- Die Feldlage steht weiterhin an mehreren Stellen literal (Unity-Host, + Headless-Szenario, Testspiegel). Diese Klasse von Spiegelstellen bleibt + ausdrücklich offen und ist nicht Teil dieser Entscheidung. +- Unity-Spuren (Kompilieren von `Nova.Editor`/`Nova.Data.Tests`, Generator-Lauf) + sind lokal nachzuholen; ältere Doku nennt das Asset historisch weiter. + ## Offene Punkte - Alle Sprint-4-Review-Befunde (105, davon 9 kritisch): 7 entscheidungsbedürftige kritische Befunde sind durch D-043–D-052 entschieden. diff --git a/docs/production/ScopeLedger.md b/docs/production/ScopeLedger.md index 34a6db5a..4a847371 100644 --- a/docs/production/ScopeLedger.md +++ b/docs/production/ScopeLedger.md @@ -1,6 +1,6 @@ # Scope-Ledger der Graybox-Spur -**Version:** 0.7.0 | **Status:** laufendes Register – Graybox-Entwurf D-067 plus verbindliche 12B-Abweichungen D-090 und D-102-Fünf-Feld-Stand | **Verantwortungsbereich:** Orchestrator / Technical Writer | **Sprint:** 16 +**Version:** 0.8.0 | **Status:** laufendes Register – Graybox-Entwurf D-067 plus verbindliche 12B-Abweichungen D-090 und D-102-Fünf-Feld-Stand | **Verantwortungsbereich:** Orchestrator / Technical Writer | **Sprint:** 16 ## Zweck @@ -40,8 +40,8 @@ funktionalen Anteil, das genannte Gate den vollständigen Inhalt. | Manifest-Schlüsselpfad | Graybox-Substitut | Rückkehr-Gate | D-ID-Klausel | |---|---|---|---| | `startStatePerPlayer.unitRoles` | Startaufstellung des Determinismus-Szenarios portiert; zusätzlich vier Infanterieeinheiten je Slot, damit überhaupt etwas zu sehen ist | G4 | D-067 K1, K2 | -| `map.id`, `map.biome` | die Karte heißt seit GB-003 Glutrinne und zeigt einen Wüsten-Blockout (Sandtönung, Kartenrand-Rahmen, Kristallmarker – reine Präsentation über `GlutrinneBlockoutView` plus Datenasset `MAP_Glutrinne.asset`); weiterhin kein Terrain-/Biom-System und keine Hindernisse, nur die Kantenlänge stimmt | G4 (G2: technisch korrektes Testlayout) | D-067 K1, K2 | -| `map.aetheriumFields` | seit D-102 sind fünf endliche Felder in Manifestanzahl und -reserven an festen, punktgespiegelten Zellen registriert und als Kristallmarker sichtbar; Startaufstellung, Headless-Szenario, Datenasset und Tests sind synchron, aber eine gespielte Abnahme beziehungsweise ein G4-Nachweis fehlt weiterhin | G4 (G2) | D-067 K1, K2; D-102 | +| `map.id`, `map.biome` | die Karte heißt seit GB-003 Glutrinne und zeigt einen Wüsten-Blockout (Sandtönung, Kartenrand-Rahmen, Kristallmarker – reine Präsentation über `GlutrinneBlockoutView`; ein Datenasset gibt es seit #127/D-123 nicht mehr); das Terrain ist ein reines C#-Prädikat (`GlutrinneTerrainMap`, D-109), ein Biom-System gibt es weiterhin nicht | G4 (G2: technisch korrektes Testlayout) | D-067 K1, K2 | +| `map.aetheriumFields` | seit D-102 sind fünf endliche Felder in Manifestanzahl und -reserven an festen, punktgespiegelten Zellen registriert und als Kristallmarker sichtbar; Startaufstellung, Headless-Szenario und Tests sind synchron, aber eine gespielte Abnahme beziehungsweise ein G4-Nachweis fehlt weiterhin | G4 (G2) | D-067 K1, K2; D-102 | | `map.primaryRouteCount` | keine Routenführung; die Ebene ist überall passierbar | G4 (G2) | D-067 K1, K2 | | `factions[1]` | seit dieser Sitzung Simulationswirklichkeit: 34 fraktionsaufgelöste Definitionen (`SimDefinitions`, Id-Regel und Provenienz per D-075), Slot-Fraktion im Economy-Snapshotblock v2 mit `SetSlotFaction`-Guard, fraktionsaufgelöste Kosten/Bauzeiten/Energie/Waffenwerte, Graybox-Farben aus den D-072-Paletten im `UnitViewManager` und Slot-Fraktionen im Debug-HUD. Verbleibend: das `weaponProfile` der Identität (eigene Zeile) und der untätige KI-Slot (eigene Zeile). Kein Gate-Nachweis — die Zeile bleibt bis zur auflösenden Evidence | G4 | D-067 K1, K2 | | `factions[1].identity.harvesterCargoAE` | seit dieser Sitzung im Code erfüllt: die Kapazität lebt in der Harvester-Definitionszeile (`SimUnitDefinition.CargoCapacityAE`), das `EconomySystem` klammert die Ernte fraktionsaufgelöst; die Entity-Store-Snapshotvalidierung deckelt auf das fraktionsübergreifende Maximum und bietet die pro-Entity-Fraktionsgrenze als Überladung. Kein Gate-Nachweis — die Zeile bleibt bis zur auflösenden Evidence | G4 | D-067 K1, K2 | @@ -153,3 +153,4 @@ implementierten Gefechtsfeedback fest. D-090 ist die führende Entscheidung. | 0.5.0 | 2026-08-05 | Sitzung GB-004: Zeile `persistence.pauseRequired` fortgeschrieben (Pause an P gebunden; kein Pausenmenü – Zeile bleibt bis G2) | Technical Writer | | 0.6.0 | 2026-08-08 | Separaten D-090-Abschnitt mit sämtlichen bekannten Abweichungen des ausgeführten Sprint-12-Strangs B ergänzt; Graybox-Hauptregister und Manifestverweise unverändert erhalten | Technical Writer / Agent (Umsetzung) | | 0.7.0 | 2026-08-10 | `map.aetheriumFields` auf D-102/Sprint 16.7 fortgeschrieben: fünf endliche Felder sind registriert, sichtbar und automatisiert gespiegelt; mangels gespielter Abnahme bleibt die Zeile bis zum Gate-Nachweis bestehen | Codex / Dennis Westermann | +| 0.8.0 | 2026-10-17 | #127/D-123: Verweis auf das Datenasset `MAP_Glutrinne.asset` in `map.id`/`map.biome` und `map.aetheriumFields` gestrichen (abgeschafft, kein Laufzeitleser); Terrain-Aussage auf den Stand D-109 berichtigt (`GlutrinneTerrainMap`) | Orchestrator | diff --git a/docs/tech/modules/MapExpansion_Spec.md b/docs/tech/modules/MapExpansion_Spec.md index 43aaec5f..1fbb6633 100644 --- a/docs/tech/modules/MapExpansion_Spec.md +++ b/docs/tech/modules/MapExpansion_Spec.md @@ -1,10 +1,10 @@ # Modulspezifikation – Map- & Biom-Erweiterung (`Nova.Presentation.Maps`) -**Version:** 1.1.1 | **Status:** historischer Prototyp-/Scaffolding-Stand gemäß D-055 – nicht verbindlich | **Verantwortungsbereich:** Level Designer / Lead Technical Director | **Sprint:** Phase 2 (Modul 19) +**Version:** 1.1.2 | **Status:** historischer Prototyp-/Scaffolding-Stand gemäß D-055 – nicht verbindlich | **Verantwortungsbereich:** Level Designer / Lead Technical Director | **Sprint:** Phase 2 (Modul 19) ## Zweck -Dieses Dokument beschreibt die Präsentations-Struktur der **Map- & Biom-Erweiterung** von *Hashkrieg*. Das Modul verwaltet Karten-Layouts (`MapDefinitionSO`) für 1v1- und 2v2-Gefechte, 2 bis 4 Spieler-Spawn-Punkte, Aetherium-Kristallknoten-Positionen sowie drei Biom-Umgebungen (`Desert`, `Snow`, `JungleIndustrial`). +Dieses Dokument beschreibt die Präsentations-Struktur der **Map- & Biom-Erweiterung** von *Hashkrieg*. Das Modul sollte Karten-Layouts für 1v1- und 2v2-Gefechte, 2 bis 4 Spieler-Spawn-Punkte, Aetherium-Kristallknoten-Positionen sowie drei Biom-Umgebungen (`Desert`, `Snow`, `JungleIndustrial`) verwalten. Die dafür gedachten Typen `MapDefinitionSO` und `MapBiomeType` samt Datenasset wurden mit #127 (D-123) entfernt, weil sie keinen Laufzeitkonsumenten hatten; dieser Text beschreibt nur noch den historischen Entwurf. ## Abhängigkeiten @@ -34,7 +34,7 @@ Dieses Dokument beschreibt die Präsentations-Struktur der **Map- & Biom-Erweite [ MatchRunner / Game Setup ] │ ▼ - [ MapDefinitionSO ] ──► Validate Map Dimensions & Spawn Points (IsValid) + [ Kartendefinition (entfernt, D-123) ] ──► Validate Map Dimensions & Spawn Points (historisch: IsValid) │ ├── Spawn Base HQs ─────► ConstructionSystem └── Spawn Aetherium ───► ResourceHarvestingSystem @@ -44,7 +44,7 @@ Dieses Dokument beschreibt die Präsentations-Struktur der **Map- & Biom-Erweite ## 2. Qualitätssicherung & Tests -* **Unit Tests:** [`MapDefinitionTests.cs`](../../../Assets/Tests/EditMode/Data/MapDefinitionTests.cs) (Validierung von Kartenabmessungen, Spawn-Punkten und Biom-Typen). +* **Unit Tests:** entfallen mit #127 (D-123); `MapDefinitionTests.cs` prüfte nur die Selbstvalidierung des entfernten Typs. ## Offene Punkte @@ -64,3 +64,4 @@ Dieses Dokument beschreibt die Präsentations-Struktur der **Map- & Biom-Erweite | 1.0.0 | 2026-07-24 | Historischen Prototyp-/Scaffolding-Stand dokumentiert | Modulverantwortliche | | 1.1.0 | 2026-07-24 | Freigabe gemäß D-055 entzogen und aktive Recovery-Verträge als führend verankert | Lead Technical Director | | 1.1.1 | 2026-07-25 | Testpfad korrigiert: `MapDefinitionSO`/`MapBiomeType` liegen nach der G0-B-Assembly-Bereinigung in `Nova.Data`, der Test in `Nova.Data.Tests` | Lead Technical Director | +| 1.1.2 | 2026-10-17 | `MapDefinitionSO`, `MapBiomeType`, Datenasset und Test entfernt (#127, D-123); toten Testlink gestrichen | Orchestrator | diff --git a/reports/v8.6.0/issue-lauf-2026-10-17/04-issue-127-remove-map-definition-so.md b/reports/v8.6.0/issue-lauf-2026-10-17/04-issue-127-remove-map-definition-so.md new file mode 100644 index 00000000..404d05f9 --- /dev/null +++ b/reports/v8.6.0/issue-lauf-2026-10-17/04-issue-127-remove-map-definition-so.md @@ -0,0 +1,49 @@ +--- +issue: 127 +paket: P-127 +branch: chore/127-remove-map-definition-so +agent: builder (sonnet) +datum: 2026-10-17 +status: DONE +--- +# MapDefinitionSO ohne Laufzeitkonsumenten abschaffen + +## Aufgabe +Issue #127 verlangt die Wahl: `MapDefinitionSO` einen Konsumenten geben oder abschaffen. Umgesetzt ist die Empfehlung der Triage (abschaffen): Typ, Enum, Asset, Test und Generator-Abschnitt entfallen, ebenso `MatchBootstrap.CanonicalHqCentreCells`. + +## Was geändert wurde (Files Changed) +- Assets/_Project/Scripts/Data/Maps/MapDefinitionSO.cs (+.meta) — gelöscht, kein Laufzeitleser +- Assets/_Project/Scripts/Data/Maps/MapBiomeType.cs (+.meta) — gelöscht, nur von obigem Typ benutzt +- Assets/_Project/Scripts/Data/Maps.meta — gelöscht (Ordner-.meta) +- Assets/_Project/Data/Maps/MAP_Glutrinne.asset (+.meta) — gelöscht +- Assets/_Project/Data/Maps.meta — gelöscht (Ordner-.meta) +- Assets/Tests/EditMode/Data/MapDefinitionTests.cs (+.meta) — gelöscht, einziger Test des Typs +- Assets/_Project/Editor/BootstrapSceneGenerator.cs — `using Nova.Data;`, Aufruf und `EnsureGlutrinneMapAsset` samt Doc-Kommentar entfernt (`Nova.Data` wird sonst in der Datei nicht gebraucht) +- Assets/_Project/Scripts/Gameplay/Match/MatchBootstrap.cs — `CanonicalHqCentreCells` entfernt (git grep: nur der Generator las sie); Kommentar von `CanonicalFieldCells` gekürzt, Property bleibt (`AllFieldCells`) +- docs/tech/modules/MapExpansion_Spec.md — Version 1.1.2, toten Testlink entfernt, Hinweise auf Wegfall (#127, D-123) +- docs/production/ScopeLedger.md — Zeilen 43/44: Verweis auf das Datenasset gestrichen, Terrain-Aussage auf Stand D-109 (C#-Prädikat) berichtigt +- docs/production/DecisionLog.md — D-123-Entwurf vor „## Offene Punkte"; Kopfversion/Verlauf unberührt +- CHANGELOG.md — eine Zeile unter Entschieden (#127) + +## Tests und Prüfungen +- `dotnet test tools/Nova.SimRunner.Tests/Nova.SimRunner.Tests.csproj -c Release`: 778/778 grün (gemessen). Hinweis: diese Lane kompiliert weder Gameplay noch Editor, belegt die C#-Änderungen also nicht. +- `python3 .github/scripts/check_docs.py`: OK, 203 Markdown-Dateien. `check_baseline_guard.py --self-test`: bestanden. +- `git grep` auf MapDefinitionSO / MapBiomeType / CanonicalHqCentreCells in .cs/.asmdef/.unity/.prefab/.asset: keine Treffer mehr. In Doku/Altberichten (GrayboxLog, Statusberichte, Sprintdokumente) bleibt das Asset historisch genannt, absichtlich nicht angefasst. +- GUID-Gegenprobe (git grep über Assets, ProjectSettings, Packages): MapBiomeType 62af6784…, Asset 2fc75419…, Maps-Ordner e367d5c8… und 3b0d81bd…, Test a18a6271… — jeweils nur in der eigenen gelöschten .meta. Skript-GUID MapDefinitionSO 6e9d3d14… steht nur in der gelöschten .meta und im gelöschten Asset. Kein Verweis bleibt. +- NICHT gelaufen: Unity (Kompilieren von Nova.Editor, Nova.Data.Tests, MatchBootstrap; Generator-Lauf; EditMode-Tests). Keine neuen Tests. Spielabnahme: nicht gespielt. + +## Entscheidung +D-123 (Entwurf): abgeschafft; Wiedereinführung nur als engine-freie Kartendefinition nach G5 mit eigener D-ID. Siehe docs/production/DecisionLog.md. + +## Nebenbefunde +- Die Feldlage steht weiterhin mehrfach literal (MatchBootstrap, Determinism10000Scenario, Testspiegel); bewusst offen. +- ScopeLedger Z. 44 nennt noch „fünf endliche Felder" (Drift, P-12-drift überlassen). +- Ältere Doku (GrayboxLog, StatusSnapshot, Sprintdokument 22) nennt das Asset historisch. +- Ich habe `git rm` und danach `git reset -q` (nur Index, um die Löschungen unstaged zu lassen) benutzt; Arbeitsbaum-Zustand ist wie gewünscht, Index entspricht HEAD. + +## Offene Fragen an den Inhaber +- Keine zwingenden. Bestätigung, dass vor der Mehrkarten-Entscheidung abgeschafft wird (so entschieden im D-123-Entwurf). + +## Commit-Titel und PR +Titel: `chore(data): remove MapDefinitionSO without runtime reader` +PR: Was: Typ, Enum, Asset, Test, Generator-Abschnitt und `CanonicalHqCentreCells` entfernt. Warum: kein Laufzeitleser, Inhalt war unbemerkt falsch (#127, D-123). Bereiche: Data, Editor, Gameplay/Match, Doku. Changelog: Entschieden, D-123. Unity-Spuren: nicht gelaufen (Kompilieren, Generator, EditMode). Spielabnahme: nicht gespielt; Restrisiko: Unity-Kompilierfehler in Editor/Gameplay möglich, in der Headless-Lane nicht sichtbar. Textkonflikt: Art-Commit 73f54b5 ändert MatchBootstrap.cs bei ca. Z. 367, mein Hunk endet um Z. 342; kein Überlapp zu erwarten, nicht durchprobiert. diff --git a/reports/v8.6.0/issue-lauf-2026-10-17/04b-review-1-issue-127.md b/reports/v8.6.0/issue-lauf-2026-10-17/04b-review-1-issue-127.md new file mode 100644 index 00000000..408cc047 --- /dev/null +++ b/reports/v8.6.0/issue-lauf-2026-10-17/04b-review-1-issue-127.md @@ -0,0 +1,117 @@ +--- +issue: 127 +paket: P-127 +branch: chore/127-remove-map-definition-so +reviewer: opus +runde: 1 +verdict: APPROVED +datum: 2026-10-17 +--- +# Review 1 zu P-127: MapDefinitionSO ohne Laufzeitkonsumenten abschaffen + +Unabhängiges Read-only-Review nach AGENTS.md §3. Ich habe keine Projektdatei geändert. Hilfsdateien liegen +unter `scratchpad/build-127/review/`. + +## Was geprüft wurde + +- `git status --short`, `git diff` (alle 16 Pfade) und der Builder-Bericht `04-issue-127-remove-map-definition-so.md`, + abgeglichen mit Issue #127, Analyse/Gegenprüfung `triage/issue-127.json` und Paketspezifikation `paket-P-127.json`. +- Schreibumfang: alle 16 geänderten Pfade liegen im Paket-Schreibumfang, dazu kommt der Bericht. Die vier + Guard-Dateien sind unverändert (`git diff HEAD --stat` leer). Der Index ist leer (`git diff --cached` leer), + die Löschungen liegen unstaged im Arbeitsbaum. +- GUID-Gegenprobe (selbst gemessen): GUIDs aus den sechs gelöschten `.meta`-Dateien aus `HEAD` gelesen und mit + `grep -rl` über `Assets/`, `ProjectSettings/` und `Packages/` des Arbeitsbaums gesucht: + `a18a6271…` (Test), `3b0d81bd…` (Data/Maps-Ordner), `2fc75419…` (Asset), `e367d5c8…` (Scripts/Data/Maps-Ordner), + `62af6784…` (MapBiomeType), `6e9d3d14…` (MapDefinitionSO). **Kein Treffer.** Die Ordner `Assets/_Project/Data/Maps` + und `Assets/_Project/Scripts/Data/Maps` existieren nicht mehr, verwaiste `.meta`-Dateien bleiben keine zurück. +- Symbolsuche: `git grep` auf `MapDefinitionSO|MapBiomeType|CanonicalHqCentreCells|MAP_Glutrinne|EnsureGlutrinneMapAsset|MapDefinitionTests` + findet keinen Code-, Szenen-, Prefab- oder Asset-Treffer mehr, nur historische Doku (GrayboxLog, StatusSnapshot, + ImplementationAudit, Sprintdokumente 01/21/22) und die neuen D-123-, Changelog- und Spec-Hinweise. +- Kompilierbarkeit ohne Unity, durch Lesen geprüft: `BootstrapSceneGenerator.cs` benutzt nach dem Entfernen von + `using Nova.Data;` keinen Typ aus `Assets/_Project/Scripts/Data/` mehr (alle dort deklarierten Typnamen gegen die + Datei geprüft). `LocalLayout`/`EnemyLayout` in `MatchBootstrap` haben weiter Leser (Z. 367/368/795/796). + `CanonicalFieldCells` bleibt über `AllFieldCells` (Z. 321) in Gebrauch. `Nova.Data.Tests` behält drei Testdateien + plus asmdef. +- Konfliktprobe mit dem Art-Branch (lesend, per `git merge-file` im Scratchpad, Merge-Basis `85c912b`): + - `MatchBootstrap.cs`, PR-Stand gegen `feat/generals-look-and-feel`: genau ein Konflikt bei `RestartMatch` + (`ApplyLocalMatchSeed` aus main gegen `ApplyLocalSkirmishFaction` aus 73f54b5). Derselbe Konflikt entsteht auch + mit dem unveränderten main-Stand `a6858d1`. Er gehört also nicht zu diesem PR. Der PR-Hunk (Z. 322–361) mischt sich + sauber mit dem Art-Hunk @367. + - `BootstrapSceneGenerator.cs`: konfliktfrei, sowohl gegen die Branch-Spitze als auch gegen den uncommitteten + Arbeitsbaum-Stand im Hauptbaum. Der Art-Branch fügt weder im Commit noch im Arbeitsbaum neue Leser von + `CanonicalHqCentreCells`, `MapDefinitionSO` oder `MapBiomeType` hinzu. +- Fachlich: Determinismus nicht berührt (keine Datei unter `Scripts/Simulation`, keine Baseline). D-123 ist + vollständig. Changelog-Zeile vorhanden. Spec- und ScopeLedger-Inhalte stimmen mit dem Code überein. + +## Nachgerechnete Ergebnisse (im Worktree, selbst ausgeführt) + +| Prüfung | Befehl | Ergebnis | Builder-Angabe | +|---|---|---|---| +| Headless-Tests | `dotnet test tools/Nova.SimRunner.Tests/Nova.SimRunner.Tests.csproj -c Release` | **778/778 bestanden**, 0 Fehler, 0 übersprungen (15 s) | 778/778, stimmt | +| Doku-Links | `python3 .github/scripts/check_docs.py` | **OK: 204 Markdown-Dateien**, 5 Quality-JSONs | 203. Die Differenz ist der danach geschriebene Builder-Bericht (203 getrackt + 1 untrackt), also plausibel und kein Widerspruch | +| Baseline-Guard Selbsttest | `python3 .github/scripts/check_baseline_guard.py --self-test` | bestanden, inklusive Negativkontrolle | stimmt | +| Baseline-Guard auf echtem Diff | `--changed-files <17 Pfade> --labels ` | „passed: only one side of the separation“ | (nicht angegeben) | +| Unity (Kompilieren Nova.Editor/Nova.Data.Tests/Gameplay, Generator, EditMode) | — | **nicht gelaufen** (Review-Rahmen) | nicht gelaufen, korrekt ausgewiesen | + +## Befunde + +### hoch +Keine. + +### mittel + +1. **Verbotener Git-Befehl benutzt** (Builder-Bericht, Nebenbefunde): Der Builder hat `git rm` und danach `git reset -q` + ausgeführt. `reset` ist im Paketrahmen ausdrücklich untersagt. Ich habe den Effekt geprüft: Der Index entspricht HEAD, + der Arbeitsbaum zeigt die gewollten Löschungen, kein Schaden. Der Builder hat es offen gemeldet. Deshalb ist das ein + Prozessbefund und kein Blocker. *Vorschlag:* Im Builder-Prompt künftig `rm`/`git rm --cached` vermeiden und reine + Dateisystem-Löschung vorschreiben. +2. **ScopeLedger ohne Kopfversion und Verlaufszeile** (`docs/production/ScopeLedger.md:3` und `:145ff`): Die Zeilen + `map.id`/`map.biome` (Z. 43) und `map.aetheriumFields` (Z. 44) wurden inhaltlich geändert, unter anderem die + Terrain-Aussage auf D-109 berichtigt. Version 0.7.0 und der Änderungsverlauf blieben unverändert. Bisher hat jede + inhaltliche Fortschreibung dieser Datei die Version erhöht (0.3.0–0.7.0). *Vorschlag:* 0.8.0 mit Verlaufszeile + „#127/D-123: Datenasset-Verweis gestrichen, Terrain-Aussage auf D-109“. Die Arbeit mit P-12-drift (schreibt danach + in dieselbe Datei) beim Integrieren abstimmen. + +### niedrig + +3. `docs/tech/modules/MapExpansion_Spec.md:22-27`: Die Spezifikation sah vor, auch die Biom-Liste auf den Wegfall + hinweisen zu lassen. Erledigt ist das indirekt über den Zweck-Absatz (Z. 7). Das reicht für ein historisches + Dokument, ist aber nicht wörtlich umgesetzt. +4. `docs/tech/modules/MapExpansion_Spec.md:67`: Als Autor der Verlaufszeile steht „Builder“, die übrigen Zeilen nennen + Rollen („Lead Technical Director“). *Vorschlag:* Rolle eintragen. +5. `Assets/_Project/Scripts/Gameplay/Match/MatchBootstrap.cs:324-327`: Der gekürzte Docstring begründet `public static` + noch mit „tooling can read“. Nach dem Wegfall des Generators gibt es außer `AllFieldCells` keinen statischen Leser + mehr. Das ist sachlich nicht falsch und laut Spezifikation gewollt („Property bleibt“), aber die Begründung ist jetzt + prospektiv. Kein Handlungszwang. +6. D-123 (`docs/production/DecisionLog.md`, Alternativen): Es gibt die geforderten drei Alternativen, aber nur 1 und 2 + tragen eine explizite Bewertung. Die Bewertung von 3 steckt in der „Begründung“. Formal ausreichend. + +## Nebenbefunde (nicht umsetzen) + +- `.gitignore` Z. 26: `reports/ # lokale …` — Git kennt keine Inline-Kommentare. Das Muster ist damit der + Literalstring samt Kommentar und ignoriert `reports/` **nicht** (`git check-ignore` meldet nichts, `git ls-files + --others --exclude-standard` listet den Bericht). Folge: `check_docs.py` zählt lokale Berichte mit, und der Hinweis + im Rahmen „reports/ ist gitignored“ stimmt faktisch nicht. Eigene Kleinst-Korrektur außerhalb dieses Pakets. +- Der Konflikt `ApplyLocalMatchSeed`/`ApplyLocalSkirmishFaction` in `MatchBootstrap.RestartMatch` zwischen main (`a6858d1`) + und dem Art-Branch besteht unabhängig von diesem PR und muss beim Rebase des Art-Branches gelöst werden. +- Die Nebenbefunde des Builders (Feldlage mehrfach literal, ScopeLedger Z. 44 „fünf Felder“, historische Asset-Nennungen) + kann ich bestätigen. Sie sind korrekt als offen markiert. + +## Ehrlichkeit des Builder-Berichts + +Stimmt. Testzahl 778/778 und Guard-Selbsttest decken sich mit meiner Messung. Die Abweichung der Doku-Zählung +(203/204) erklärt sich durch die Reihenfolge. GUID-Liste und Symbolsuche stimmen. Unity, Generator-Lauf, EditMode und +Spielabnahme sind als nicht gelaufen ausgewiesen. Den Art-Konflikt hat der Builder als „nicht durchprobiert“ markiert. +Das habe ich nachgeholt: kein Konflikt durch diesen PR. Den `git reset` hat er selbst offengelegt. + +## Empfehlung für den Inhaber + +**APPROVED.** Mergebar nach grüner Pflicht-CI, wenn vorher oder beim Integrieren Folgendes passiert: +1. ScopeLedger auf 0.8.0 mit Verlaufszeile setzen (Befund 2). +2. Vor dem Merge lokal in Unity öffnen: Nova.Editor, Nova.Gameplay und Nova.Data.Tests müssen fehlerfrei kompilieren. + Den Generator einmal laufen lassen (es darf kein `Assets/_Project/Data/Maps/` mehr entstehen) und die + Data-EditMode-Tests ausführen. Ist das nicht geschehen, im PR „Unity nicht gelaufen“ stehen lassen. Das Restrisiko + ist gering, weil alle Leser per Grep und GUID ausgeschlossen sind, ein Kompilierfehler im Editor-Assembly fiele in + der CI aber nicht auf. +3. Die Mehrkarten-Richtung bestätigen. Der D-123-Entwurf legt fest, dass eine Wiedereinführung nur als engine-freie + Kartendefinition nach G5 erfolgt. Das ist eine Inhaberentscheidung. From dd5af316a34dcbd9f8371f9bf1bc0c64adcebbb5 Mon Sep 17 00:00:00 2001 From: Dennis Westermann Date: Sat, 17 Oct 2026 18:05:36 +0200 Subject: [PATCH 2/2] docs(report): record the Unity lane results for this package EditMode 662/662 and PlayMode 15/15 measured on this branch with Unity 6000.5.4f1 via the lane script from #110; no failures, clean tree. Co-Authored-By: Claude Fable 5.1 --- .../04-issue-127-remove-map-definition-so.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reports/v8.6.0/issue-lauf-2026-10-17/04-issue-127-remove-map-definition-so.md b/reports/v8.6.0/issue-lauf-2026-10-17/04-issue-127-remove-map-definition-so.md index 404d05f9..99c392bc 100644 --- a/reports/v8.6.0/issue-lauf-2026-10-17/04-issue-127-remove-map-definition-so.md +++ b/reports/v8.6.0/issue-lauf-2026-10-17/04-issue-127-remove-map-definition-so.md @@ -47,3 +47,7 @@ D-123 (Entwurf): abgeschafft; Wiedereinführung nur als engine-freie Kartendefin ## Commit-Titel und PR Titel: `chore(data): remove MapDefinitionSO without runtime reader` PR: Was: Typ, Enum, Asset, Test, Generator-Abschnitt und `CanonicalHqCentreCells` entfernt. Warum: kein Laufzeitleser, Inhalt war unbemerkt falsch (#127, D-123). Bereiche: Data, Editor, Gameplay/Match, Doku. Changelog: Entschieden, D-123. Unity-Spuren: nicht gelaufen (Kompilieren, Generator, EditMode). Spielabnahme: nicht gespielt; Restrisiko: Unity-Kompilierfehler in Editor/Gameplay möglich, in der Headless-Lane nicht sichtbar. Textkonflikt: Art-Commit 73f54b5 ändert MatchBootstrap.cs bei ca. Z. 367, mein Hunk endet um Z. 342; kein Überlapp zu erwarten, nicht durchprobiert. + +## Unity-Spuren nachgefahren (Integrator, 2026-10-17) + +Nach dem Commit mit `tools/unity-tests/run_unity_tests.py` (Branch #110) auf diesem Worktree, Unity 6000.5.4f1, warme Library: **EditMode 662/662, PlayMode 15/15**, keine Fehlschläge, keine Compile-Fehler, Arbeitsbaum danach sauber. Die Zeile „Unity-Spuren: nicht gelaufen“ oben ist damit überholt; der PR-Text nennt die gemessenen Zahlen.