Ein eigenes Panel/area unter tab view und zwischen den beiden seiten panels.
ebenfalls in der größe vertikal veränderbar wie die beiden seiten panels
alles was in console landet soll da drin landen
Übernommen aus todo-notes/console-log.md beim Umzug auf das Issue-System (2026-09-12).
Angelegt: 2026-09-12 · 3ed8b68 — Describe every value kind in one table instead of spreading it over the code
Gemeldet von: admin
Ein eigenes Panel/area unter tab view und zwischen den beiden seiten panels.
ebenfalls in der größe vertikal veränderbar wie die beiden seiten panels
alles was in console landet soll da drin landen
---
*Übernommen aus `todo-notes/console-log.md` beim Umzug auf das Issue-System (2026-09-12).*
- **Angelegt:** 2026-09-12 · `3ed8b68` — Describe every value kind in one table instead of spreading it over the code
- **Gemeldet von:** admin
admin
added the todo-note label 2026-09-12 15:04:00 +02:00
Log-Schicht (src/editor/console/log.ts): Ringpuffer über 500 Zeilen, push(level, text) plus Event. console.log/info/debug/warn/error werden global abgefangen und weiterhin ans Original durchgereicht, Installation vor app.init() in main.ts, damit auch Pixis Warnungen aus der Renderer-Erzeugung ankommen. Mehrere Argumente werden mit Leerzeichen verbunden, Objekte kurz als JSON, Error als erste Stack-Zeile.
Panel (src/editor/console/ConsolePanel.ts): drittes Kind des Mittelbereichs unter dem sichtbaren Tab, immer da, Höhe per Splitter('y') bis auf 0 verstellbar (nicht persistiert, wie die Seitenpanel-Breiten auch nicht). Kopfzeile CONSOLE mit Clear-Button rechts; sonst wird nie automatisch geleert. Autoscroll nur, wenn man unten steht.
Zeitstempel je Zeile, HH:MM:SS, gedimmt in einer eigenen Spalte — als zweites Label statt als Textpräfix, sonst fände locate('<meldung>') die Zeile nicht mehr. Eine mehrzeilige Meldung (Stack) bekommt eine Zeit für alle Teilzeilen.
Stumme Stellen angeschlossen: Behavior-Laufzeitfehler rot, setNotice-Hinweise als normale Zeile — beide direkt an die Log-Schicht, nicht durch console. Sonst hätte jeder Play-Pausenwechsel und jeder Unit-Testlauf Zeilen erzeugt (18 setNotice-Aufrufstellen, 7 Editor-Testdateien).
world.log bleibt unverändert
Gemessen und bewusst so: src/runtime/ importiert nichts aus src/editor/, behaviorError(world) ist eine Abfrage an einen Lauf (ein globaler Ringpuffer fände nach dem zweiten Play noch den Fehler des ersten), die Unit-Tests laufen ohne Browser in Node, und die e2e-Checks lesen world.log als exakte String-Liste über den Hook. Der Log-Node schreibt ohnehin schon in beides — seine Zeile steht durch das Capture von selbst im Panel.
Nebenwirkung: sechs e2e-Checks hingen an der Canvas-Höhe
Die flachere Mitte (Panel-Starthöhe 300 px) drückt den Graph-Fit auf Zoom 0,60. Repariert wurden die Annahmen, nicht die Zahlen:
Abstand aus canvasRect().w; fix 2500 stößt an MIN_ZOOM = 0.25
Ein Fund am Messgerät:locate/locateAll addierten die unskalierte Pixi-Textbreite zur globalen Position. Im skalierten Graph-Canvas lag der Klickpunkt dadurch zu weit rechts (gemessen 32,77 statt 26,1 px) — fällt nur nicht auf, solange der Fit-Zoom 1 ist. Jetzt über getBounds().
Belegt
./check.sh
=== CHECK EXIT 0 ===, 831 Tests
voller e2e
ALL PASSED – 671 Checks (vorher 657), neuer Schritt 27
Jump-Run / Tetris / Actor
24 / 19 / 20
Gültigkeit
Neubau nach dem Lauf ergibt das byte-identische Bundle (cmp)
Gegenproben, jede an ihrer eigenen Stelle: Zeitstempel pro Zeile statt pro Aufruf, Stunden ungepolstert, Zeit im normalen statt gedimmten Stil, dazu die vier aus der Panel-Runde (Capture, Ringpuffer, Clear, Fehler-Level).
Umgesetzt in **c47fd5e**.
### Was gebaut wurde
- **Log-Schicht** (`src/editor/console/log.ts`): Ringpuffer über 500 Zeilen, `push(level, text)` plus Event. `console.log/info/debug/warn/error` werden global abgefangen und **weiterhin ans Original durchgereicht**, Installation vor `app.init()` in `main.ts`, damit auch Pixis Warnungen aus der Renderer-Erzeugung ankommen. Mehrere Argumente werden mit Leerzeichen verbunden, Objekte kurz als JSON, `Error` als erste Stack-Zeile.
- **Panel** (`src/editor/console/ConsolePanel.ts`): drittes Kind des Mittelbereichs unter dem sichtbaren Tab, immer da, Höhe per `Splitter('y')` bis auf 0 verstellbar (nicht persistiert, wie die Seitenpanel-Breiten auch nicht). Kopfzeile `CONSOLE` mit Clear-Button rechts; sonst wird nie automatisch geleert. Autoscroll nur, wenn man unten steht.
- **Zeitstempel** je Zeile, `HH:MM:SS`, gedimmt in einer **eigenen Spalte** — als zweites Label statt als Textpräfix, sonst fände `locate('<meldung>')` die Zeile nicht mehr. Eine mehrzeilige Meldung (Stack) bekommt eine Zeit für alle Teilzeilen.
- **Stumme Stellen angeschlossen:** Behavior-Laufzeitfehler rot, `setNotice`-Hinweise als normale Zeile — beide **direkt** an die Log-Schicht, nicht durch `console`. Sonst hätte jeder Play-Pausenwechsel und jeder Unit-Testlauf Zeilen erzeugt (18 `setNotice`-Aufrufstellen, 7 Editor-Testdateien).
### `world.log` bleibt unverändert
Gemessen und bewusst so: `src/runtime/` importiert nichts aus `src/editor/`, `behaviorError(world)` ist eine Abfrage an **einen** Lauf (ein globaler Ringpuffer fände nach dem zweiten Play noch den Fehler des ersten), die Unit-Tests laufen ohne Browser in Node, und die e2e-Checks lesen `world.log` als exakte String-Liste über den Hook. Der `Log`-Node schreibt ohnehin schon in beides — seine Zeile steht durch das Capture von selbst im Panel.
### Nebenwirkung: sechs e2e-Checks hingen an der Canvas-Höhe
Die flachere Mitte (Panel-Starthöhe 300 px) drückt den Graph-Fit auf Zoom 0,60. Repariert wurden die **Annahmen**, nicht die Zahlen:
| Annahme | Jetzt |
|---|---|
| „250 px unter der Mitte ist leer" | `__gm.emptySpot()` / `__gm.graph.emptySpot()` — gesucht statt geraten |
| „60 Pixel Drag = 60 Graph-Einheiten" | durch `__gm.graph.zoom()` geteilt |
| „ein Marquee über die Canvas erfasst alles" | vorher wieder `Fit` |
| „Node 2500 Einheiten wegparken" | Abstand aus `canvasRect().w`; fix 2500 stößt an `MIN_ZOOM = 0.25` |
**Ein Fund am Messgerät:** `locate`/`locateAll` addierten die *unskalierte* Pixi-Textbreite zur globalen Position. Im skalierten Graph-Canvas lag der Klickpunkt dadurch zu weit rechts (gemessen 32,77 statt 26,1 px) — fällt nur nicht auf, solange der Fit-Zoom 1 ist. Jetzt über `getBounds()`.
### Belegt
| | |
|---|---|
| `./check.sh` | `=== CHECK EXIT 0 ===`, **831 Tests** |
| voller e2e | **ALL PASSED – 671 Checks** (vorher 657), neuer Schritt 27 |
| Jump-Run / Tetris / Actor | **24 / 19 / 20** |
| Gültigkeit | Neubau nach dem Lauf ergibt das byte-identische Bundle (`cmp`) |
Gegenproben, jede an ihrer eigenen Stelle: Zeitstempel pro Zeile statt pro Aufruf, Stunden ungepolstert, Zeit im normalen statt gedimmten Stil, dazu die vier aus der Panel-Runde (Capture, Ringpuffer, Clear, Fehler-Level).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ein eigenes Panel/area unter tab view und zwischen den beiden seiten panels.
ebenfalls in der größe vertikal veränderbar wie die beiden seiten panels
alles was in console landet soll da drin landen
Übernommen aus
todo-notes/console-log.mdbeim Umzug auf das Issue-System (2026-09-12).3ed8b68— Describe every value kind in one table instead of spreading it over the codeUmgesetzt in
c47fd5e.Was gebaut wurde
src/editor/console/log.ts): Ringpuffer über 500 Zeilen,push(level, text)plus Event.console.log/info/debug/warn/errorwerden global abgefangen und weiterhin ans Original durchgereicht, Installation vorapp.init()inmain.ts, damit auch Pixis Warnungen aus der Renderer-Erzeugung ankommen. Mehrere Argumente werden mit Leerzeichen verbunden, Objekte kurz als JSON,Errorals erste Stack-Zeile.src/editor/console/ConsolePanel.ts): drittes Kind des Mittelbereichs unter dem sichtbaren Tab, immer da, Höhe perSplitter('y')bis auf 0 verstellbar (nicht persistiert, wie die Seitenpanel-Breiten auch nicht). KopfzeileCONSOLEmit Clear-Button rechts; sonst wird nie automatisch geleert. Autoscroll nur, wenn man unten steht.HH:MM:SS, gedimmt in einer eigenen Spalte — als zweites Label statt als Textpräfix, sonst fändelocate('<meldung>')die Zeile nicht mehr. Eine mehrzeilige Meldung (Stack) bekommt eine Zeit für alle Teilzeilen.setNotice-Hinweise als normale Zeile — beide direkt an die Log-Schicht, nicht durchconsole. Sonst hätte jeder Play-Pausenwechsel und jeder Unit-Testlauf Zeilen erzeugt (18setNotice-Aufrufstellen, 7 Editor-Testdateien).world.logbleibt unverändertGemessen und bewusst so:
src/runtime/importiert nichts aussrc/editor/,behaviorError(world)ist eine Abfrage an einen Lauf (ein globaler Ringpuffer fände nach dem zweiten Play noch den Fehler des ersten), die Unit-Tests laufen ohne Browser in Node, und die e2e-Checks lesenworld.logals exakte String-Liste über den Hook. DerLog-Node schreibt ohnehin schon in beides — seine Zeile steht durch das Capture von selbst im Panel.Nebenwirkung: sechs e2e-Checks hingen an der Canvas-Höhe
Die flachere Mitte (Panel-Starthöhe 300 px) drückt den Graph-Fit auf Zoom 0,60. Repariert wurden die Annahmen, nicht die Zahlen:
__gm.emptySpot()/__gm.graph.emptySpot()— gesucht statt geraten__gm.graph.zoom()geteiltFitcanvasRect().w; fix 2500 stößt anMIN_ZOOM = 0.25Ein Fund am Messgerät:
locate/locateAlladdierten die unskalierte Pixi-Textbreite zur globalen Position. Im skalierten Graph-Canvas lag der Klickpunkt dadurch zu weit rechts (gemessen 32,77 statt 26,1 px) — fällt nur nicht auf, solange der Fit-Zoom 1 ist. Jetzt übergetBounds().Belegt
./check.sh=== CHECK EXIT 0 ===, 831 Testscmp)Gegenproben, jede an ihrer eigenen Stelle: Zeitstempel pro Zeile statt pro Aufruf, Stunden ungepolstert, Zeit im normalen statt gedimmten Stil, dazu die vier aus der Panel-Runde (Capture, Ringpuffer, Clear, Fehler-Level).