From f97b7d9c8173c5b6b9771e4a72f7b5c27defb3a4 Mon Sep 17 00:00:00 2001 From: Kenso Grimm Date: Thu, 17 Sep 2026 10:03:38 +0200 Subject: [PATCH] docs: stillen Bruch der Verbraucher in Task 13-15 ausdruecklich eintragen Seit dem neuen Chunk-Format werfen overview.py und geometry.js, und props.js setzt still keine einzige Laterne mehr. Die drei Aufgaben, die das reparieren, bekommen den genauen Bruch und die Pflicht, ihre von Hand im alten Format gebauten Fixtures mitzuziehen. Dazu der Docstring von _line() als Bedingung statt als Tatsache. Co-Authored-By: Claude Opus 5 --- docs/superpowers/plans/2026-09-16-strassen.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/superpowers/plans/2026-09-16-strassen.md b/docs/superpowers/plans/2026-09-16-strassen.md index b130b72..3cc8c7f 100644 --- a/docs/superpowers/plans/2026-09-16-strassen.md +++ b/docs/superpowers/plans/2026-09-16-strassen.md @@ -1725,11 +1725,12 @@ In `tools/extract/leonida/emit.py` die Signatur und den Rumpf ersetzen. `_rings` def _line(line, i: int, j: int) -> list[list[float]]: """Ein Linienzug in Chunk-Koordinaten, richtungsunabhängig festgelegt. - normalize() dreht eine Linie in eine feste Laufrichtung. Das ist hier anders als bei den - früheren centerlines erwünscht: Die Laternen wählen ihre Seite seit Teil 2 aus der - Kantenrichtung *und* prüfen gegen die Gehwegfläche, hängen also nicht mehr an der - Listenposition (siehe props.js). Damit darf die Ausgabe sortiert und normalisiert werden, - und ein Lauf erzeugt wieder Datei für Datei dasselbe. + normalize() dreht eine Linie in eine feste Laufrichtung, und sortiert wird nach der Ausgabe + selbst. Beides ist nur zulässig, solange niemand Reihenfolge oder Laufrichtung eine Bedeutung + gibt — bei den früheren centerlines tat das vergeLampPoints() in props.js, das die Straßenseite + einer Laterne aus dem Listenindex ablas. sidewalkLampPoints() wählt die Seite aus der Geometrie + und prüft gegen die Gehwegfläche; erst damit darf die Ausgabe sortiert werden, und ein Lauf + erzeugt wieder Datei für Datei dasselbe. """ ox = SLICE["x0"] + i * CHUNK_SIZE oy = SLICE["y1"] - j * CHUNK_SIZE @@ -2202,6 +2203,8 @@ Die erzeugten Daten kommen erst in Task 16 in einen eigenen Commit — hier **ni ### Task 13: Browser — Geometrie der neuen Schichten +> **Seit Task 10 gebrochen, hier zu reparieren:** `buildChunkGeometry()` liest `chunk.roads.filter(...)` ohne Rückfall und wirft mit Chunks im neuen Format einen `TypeError`. Die Fixtures in `tests/geometry.test.js` sind von Hand im alten Format gebaut und merken das nicht — stell sie mit um, sonst prüfen sie weiter eine Schnittstelle, die es nicht mehr gibt. + **Dateien:** - Ändern: `src/world/geometry.js` - Test: `tests/geometry.test.js` (erweitern) @@ -2414,6 +2417,8 @@ git commit -m "feat(world): Fahrbahnmulde, Bordsteinwand und Markierungen bauen" ### Task 14: Browser — Materialien, Kollision, Laternen +> **Seit Task 10 still gebrochen, hier zu reparieren:** `props.js` liest `chunk.centerlines ?? []` und `chunk.roads ?? []`. Beide Schlüssel gibt es nicht mehr — es entsteht kein Fehler, sondern einfach **keine einzige Laterne** auf der ganzen Karte. Die Fixtures in `tests/props.test.js` sind im alten Format gebaut und merken das nicht. Nach dieser Aufgabe muss eine Laterne aus einem Chunk im neuen Format entstehen; prüf das mit einem Test, der genau so einen Chunk benutzt. + **Dateien:** - Ändern: `src/world/materials.js`, `src/world/streaming.js`, `src/world/props.js` - Test: `tests/materials.test.js`, `tests/streaming.test.js`, `tests/props.test.js` @@ -2597,6 +2602,8 @@ git commit -m "feat(world): Materialien, Kollision und Laternen für die neuen S ### Task 15: Minimap und Begehbarkeit +> **Seit Task 10 gebrochen, hier zu reparieren:** `overview.py` liest `chunk["roads"]` und `item["bridge"]` ohne Rückfall und wirft mit Chunks im neuen Format einen `KeyError`. Die Fixtures in `tools/extract/tests/test_overview.py` sind im alten Format gebaut; stell sie mit um. + **Dateien:** - Ändern: `tools/extract/overview.py` - Test: `tools/extract/tests/test_overview.py`