6. Durchgang: Slots, JavaScript, Bibliotheken - jede Achse jetzt eine Pipeline-Stufe
Die vorigen Durchgaenge waren Handarbeit und liefen nur, wenn jemand daran
dachte. Jetzt sind alle drei automatisiert.
JAVASCRIPT - DIE RENDER-PROBE DECKTE 2 VON 15 FUNKTIONEN AB.
render_check.mjs schnitt per Regex genau ZWEI Funktionen heraus (renderM15,
renderBrk). renderKontext und 13 weitere waren nie abgedeckt - und genau dort
ist mir heute der d-statt-snap-Beinahefehler unterlaufen. Die Probe haette ihn
DURCHGELASSEN.
Neu geschrieben: die komplette app.js laeuft in einem VM-Kontext gegen ein
Minimal-DOM, jede render*-Funktion wird aufgerufen - zweimal, mit dem Fixture
UND mit einem leeren Snapshot (der Kaltstart, in dem jedes Feld fehlt).
13 Funktionen laufen durch. Mutationsprobe mit genau dem heutigen Fehler:
4 Treffer, waehrend node --check NICHTS meldet - der blinde Fleck ist damit zu.
Kein npm, kein jsdom: das DOM ist eine Attrappe von 20 Zeilen, Pruef- und
Laufumgebung bleiben derselbe Parser.
ZWEI NEUE STUFEN, beide mutationsgeprueft:
F) ELEMENT-IDs - JS gegen HTML. Stand: 133 IDs, keine verwaist, keine doppelt.
Kommentare werden vorher entfernt, sonst waeren die Beispiele im
Kopfkommentar zwei Dauer-Fehlalarme (die Lehre vom Linter).
G) ABHAENGIGKEITEN - jeder Import aus server.py/core/ gegen requirements.txt.
Stand: 39 Dateien, alle 9 externen Importe aufgefuehrt, keine Versionsdrift.
UND DIE PIPELINE HAT SICH SELBST ERWISCHT: mein erster Entwurf von Stufe G
importierte `ast` nicht. Der stille except-continue liess JEDE Datei
durchfallen, und die Stufe meldete "alle 0 externen Laufzeit-Importe sind
aufgefuehrt" - ein gruener Haken, hinter dem nichts geprueft wurde. Fuenfte
Wiederholung dieser Fehlerklasse. Gefangen hat es ruff F821 in derselben
Pipeline. Behoben doppelt: Import ergaenzt UND Plausibilitaetspruefung (weniger
Dateien gelesen als vorhanden oder 0 Importe -> Befund).
SLOTS - keine neuen Defekte, drei Punkte praezisiert:
· Kein geteilter Modul-Zustand. Die modulweiten Container in trailing.py und
trader.py sind reine Nachschlagetabellen, kein global-Statement. Die beiden
Instanzen sind tatsaechlich unabhaengig - Voraussetzung des ganzen Umbaus.
· set_sltp bleibt Slot-1-only, verhaelt sich aber SICHER: liegt nur eine
BRK-Position, gibt modify_sltp einen Fehlertext zurueck. Es fasst NICHT die
falsche Position an. Bekannte Grenze, kein Fehler.
· trail_brk.enabled wird nicht persistiert; _rebind_brk schaltet es nach einem
Neustart bedingungslos ein. Sichere Richtung, bewusst so gelassen.
BIBLIOTHEKEN: nichts fehlt, nichts driftet. pandas/scikit-learn stehen in
requirements-dev und werden in 0 Dateien importiert (so dokumentiert); numba,
joblib, tqdm, pandas_ta, rich, httpx sind Beifang und ungenutzt - kein
Handlungsbedarf, sie stehen nicht im Laufzeit-Pfad.
Struktureller Rest benannt: engine.py importiert weekly_review und
measurement_reminder, zwei Skripte der obersten Ebene - dieselbe Klasse wie der
frueher direkte backtest-Import. Hier entschaerft, weil lazy und in try, mit
sichtbarer Fehlermeldung. In Stufe G als projekteigen ausgenommen, mit
Begruendung im Code.
Pipeline jetzt A A2 A3 B B2 C C2 D E F G - alle gruen, 97 Tests, deployt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3391e04f32
commit
3fb9c3fd2e
@@ -9257,6 +9257,91 @@ liegen — meine Invariante war zu streng; (2) zwei inhaltsgleiche dicts sind
|
||||
mich selbst: auf einer frischen Maschine soll der Bot mit möglichst kleiner
|
||||
Oberfläche wieder laufen. Ergänzt wurde ausschliesslich `requirements-dev.txt`.
|
||||
|
||||
## ⚠⚠ SECHSTER DURCHGANG: SLOTS · JAVASCRIPT · BIBLIOTHEKEN (2026-08-20)
|
||||
|
||||
User-Auftrag. Diesmal wurde aus **jeder** der drei Achsen eine **Pipeline-Stufe**
|
||||
gemacht — die vorigen Durchgänge waren Handarbeit und liefen nur, wenn jemand
|
||||
daran dachte.
|
||||
|
||||
### JavaScript — die Render-Probe deckte 2 von 15 Funktionen ab
|
||||
|
||||
⚠⚠ **`tools/render_check.mjs` schnitt per Regex genau ZWEI Funktionen heraus**
|
||||
(`renderM15`, `renderBrk`). **`renderKontext` und 13 weitere waren nie
|
||||
abgedeckt** — und genau in `renderKontext` ist mir am selben Tag der
|
||||
`d`-statt-`snap`-Beinahe-Fehler unterlaufen. Die Probe hätte ihn **durchgelassen**.
|
||||
✅ **Neu geschrieben**: die **komplette** `app.js` läuft in einem VM-Kontext gegen
|
||||
ein Minimal-DOM, und **jede** gefundene `render*`-Funktion wird aufgerufen —
|
||||
zweimal: mit dem Fixture **und mit einem leeren Snapshot** (der Kaltstart, in dem
|
||||
jedes Feld fehlt; dort schlagen fehlende Null-Prüfungen zu, nicht bei vollen
|
||||
Daten). **13 Funktionen laufen durch.**
|
||||
✅ **Mutationsprobe mit genau dem heutigen Fehler:**
|
||||
```
|
||||
❌ renderKontext(Fixture): ReferenceError: d is not defined
|
||||
❌ render(Fixture): ReferenceError: d is not defined
|
||||
❌ renderKontext(leerer Snapshot): …
|
||||
```
|
||||
⚠ **`node --check` meldet dabei NICHTS** — die Datei ist syntaktisch einwandfrei.
|
||||
Das ist der blinde Fleck, den diese Stufe schliesst.
|
||||
⚠ Kein npm, kein jsdom: das DOM ist eine Attrappe von 20 Zeilen. Prüf- und
|
||||
Laufumgebung bleiben derselbe Parser (V8).
|
||||
|
||||
### Zwei neue Pipeline-Stufen
|
||||
|
||||
**F) ELEMENT-IDs** — greift die JS auf IDs zu, die es in der HTML nicht gibt, und
|
||||
gibt es doppelte? Stand: **133 IDs, keine verwaist, keine doppelt.**
|
||||
⚠ Kommentare werden vorher entfernt: `$("neu")` und `$("x")` stehen als
|
||||
**Beispiele** im Kopfkommentar von `app.js` und wären sonst zwei Dauer-Fehlalarme
|
||||
— und eine Prüfung mit Dauer-Treffern wird ignoriert (die Lehre vom Linter).
|
||||
**G) ABHÄNGIGKEITEN** — ist jeder Import aus `server.py`/`core/` in
|
||||
`requirements.txt`? Stand: **39 Dateien gelesen, alle 9 externen Importe
|
||||
aufgeführt**, keine Versions-Drift zwischen gepinnt und installiert.
|
||||
✅ Beide **mutationsgeprüft**: ID umbenannt → Befund; `feedparser` aus der Liste
|
||||
gestrichen → Befund.
|
||||
|
||||
⚠⚠ **UND DIE PIPELINE HAT SICH SELBST ERWISCHT.** Mein erster Entwurf von Stufe G
|
||||
importierte `ast` nicht. Der stille `except Exception: continue` liess dadurch
|
||||
**jede** Datei durchfallen — und die Stufe meldete *„alle 0 externen
|
||||
Laufzeit-Importe sind aufgeführt."* Ein grüner Haken, hinter dem **nichts**
|
||||
geprüft wurde: die **fünfte** Wiederholung dieser Fehlerklasse im Projekt.
|
||||
Gefangen hat es **`ruff F821` in derselben Pipeline**.
|
||||
✅ Behoben doppelt: `ast` importiert **und** eine Plausibilitätsprüfung
|
||||
(„weniger Dateien gelesen als vorhanden, oder 0 externe Importe → Befund"). Eine
|
||||
Stufe, die nichts gelesen hat, darf nicht „sauber" melden.
|
||||
|
||||
### Slots — keine neuen Defekte, drei Punkte präzisiert
|
||||
|
||||
✅ **Kein geteilter Modul-Zustand**: die modulweiten Container in `trailing.py`
|
||||
und `trader.py` (`_TF_LABELS`, `_PHASE_RANK`, `_RETCODE_MSG`) sind reine
|
||||
Nachschlagetabellen, kein `global`-Statement. Die beiden Instanzen sind
|
||||
tatsächlich unabhängig — das war die Voraussetzung des ganzen Umbaus.
|
||||
⚠ **`set_sltp` bleibt Slot-1-only, verhält sich aber SICHER**: liegt nur eine
|
||||
BRK-Position, gibt `modify_sltp` einen Fehlertext zurück (`if not self.ticket`).
|
||||
Es fasst also **nicht** die falsche Position an — die SL/TP-Felder der
|
||||
Trade-Leiste sind lediglich auf Slot 1 beschränkt. Bekannte Grenze, kein Fehler.
|
||||
⚠ **`trail_brk.enabled` wird NICHT persistiert** (nur `brk_ticket`).
|
||||
`_rebind_brk` schaltet es nach einem Neustart bedingungslos ein. Das ist die
|
||||
sichere Richtung — aber wer es bewusst abgeschaltet hat, bekommt es nach einem
|
||||
Neustart zurück. Bewusst so gelassen: eine BRK-Position ohne Trailing ist
|
||||
gemessen die schlechtere Variante.
|
||||
|
||||
### Bibliotheken
|
||||
|
||||
✅ **Nichts fehlt, nichts driftet.** `pandas` und `scikit-learn` stehen in
|
||||
`requirements-dev.txt` und werden in **0** Dateien importiert (so dokumentiert);
|
||||
`numba`, `joblib`, `tqdm`, `pandas_ta`, `rich`, `httpx` sind als Beifang anderer
|
||||
Pakete installiert und ebenfalls ungenutzt. Kein Handlungsbedarf — sie stehen
|
||||
nicht im Laufzeit-Pfad.
|
||||
⚠ **Struktureller Rest, jetzt benannt**: `core/engine.py` importiert
|
||||
`weekly_review` und `measurement_reminder` — zwei Skripte der obersten Ebene.
|
||||
Dieselbe Klasse wie der frühere `backtest_breakout_squeeze`-Import, der am 07.08.
|
||||
nach `core/squeeze_scan.py` gezogen wurde. **Hier entschärft**, weil beide
|
||||
**lazy** und in `try` importiert werden (1×/Tag bzw. 1×/Woche) und ein
|
||||
Fehlschlag sichtbar gemeldet wird. In Stufe G als projekteigen ausgenommen —
|
||||
mit Begründung im Code, damit es nicht als Versehen gelesen wird.
|
||||
|
||||
**Pipeline jetzt: A · A2 · A3 · B · B2 · C · C2 · D · E · F · G** — alle grün,
|
||||
97 Tests, deployt und verifiziert.
|
||||
|
||||
## ⚠⚠⚠ P(break) IST LIVE **INVERTIERT** — und es steuert echtes Geld (2026-08-19)
|
||||
|
||||
Die fällige Messung ist entscheidbar geworden: **n=530 entkoppelt** gegen die
|
||||
|
||||
Reference in New Issue
Block a user