Pipeline: zwei neue Pruefstufen vor dem Commit (Typaritaet + JS-Render)
User: "baue alle und integriere in die pipeline vor dem commit". Beide Stufen
schliessen Luecken, die HEUTE real zugeschlagen haben.
A3) TYPPRUEFUNG (ty 0.0.73, Konfiguration in ty.toml)
Anlass: `paarweise(d)` wurde mit 1 von 2 Pflichtargumenten gerufen. py_compile
sah nichts (Syntax ok), ruff F821 auch nicht (der Name IST definiert), kein Test
deckte den Pfad ab - der Fehler schlug erst zur Laufzeit zu.
⚠ BEWUSST ENGES REGELSET: der volle ty-Lauf meldet 172 Befunde, davon 97
`unresolved-attribute` aus fehlenden MetaTrader5-Stubs. Eine Stufe mit
Dauer-Treffern wird ignoriert, und mit ihr die eine echte Meldung (die Lehre vom
07.08.). Aktiv sind nur die Aritaets-Regeln. `call-non-callable` und
`not-iterable` sind AUS - beide melden hier ausschliesslich Falsch-Positive aus
heterogenen dicts (`c["have"]()`, `"up" in c`); geprueft, nicht angenommen.
⚠ Der dokumentierte Einwand "Pruefumgebung != Laufumgebung" greift NICHT: ein
Typchecker fuehrt nichts aus, er kann also nicht divergieren. Er braucht auch
kein MT5.
⚠ Nebenbefund: die CLAUDE.md-Begruendung gegen mypy ("kaum Annotationen
vorhanden") ist veraltet - gemessen sind 305 von 443 Funktionen annotiert (69 %).
B2) RENDER-PROBE (tools/render_check.mjs gegen tests/fixtures/snapshot.json)
Anlass: `node --check` prueft nur SYNTAX. Der ReferenceError von heute Abend
(RSI-Zeile griff in renderM15(s) auf d.market zu) war syntaktisch einwandfrei
und brach im Browser den GESAMTEN Render ab - sechs leere Zeilen und eine leere
Breakout-Karte. Fuer Python gibt es ruff F821, fuer JS gab es nichts.
⚠ Laeuft gegen einen GESPEICHERTEN Snapshot, nicht gegen den laufenden Server -
der Hook darf nicht davon abhaengen, ob gerade ein Server laeuft.
⚠ KEIN ESLint: das braeuchte npm und node_modules, gegen die dokumentierte
Entscheidung ("kein npm, keine package.json").
BEIDE RICHTUNGEN VERIFIZIERT, je Stufe:
A3 Aritaetsfehler eingebaut -> "FEHLER too-many-positional-arguments",
1 Befund; zurueck -> gruen
B2 d.market zurueckgebaut -> "❌ EXCEPTION: d is not defined",
1 Befund; zurueck -> gruen
Beide haengen an tools/check_nfalle.py und laufen damit im pre-commit-Hook mit.
Fehlt das Werkzeug (ty nicht installiert, node nicht im PATH, Fixture fehlt),
wird die Stufe uebersprungen statt zu blockieren - eine frische Maschine darf am
Hook nicht haengenbleiben. Ein WERKZEUGFEHLER (Exit != 0/1) gilt dagegen
ausdruecklich NICHT als sauber.
ty in requirements-dev.txt gepinnt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
95b22e2add
commit
0fe51dea48
@@ -0,0 +1,34 @@
|
||||
# Typpruefung — BEWUSST ENGES Regelset (2026-08-19).
|
||||
#
|
||||
# ⚠⚠ Der volle Lauf meldet 172 Befunde, davon 97 `unresolved-attribute` aus
|
||||
# fehlenden MetaTrader5-Stubs. Eine Stufe mit Dauer-Treffern wird ignoriert,
|
||||
# und mit ihr die eine echte Meldung — das ist im Projekt dokumentiert
|
||||
# (ruff-Schweregrad-Trennung, 07.08.). Deshalb blockieren nur die Regeln,
|
||||
# die ECHTE Aufruffehler finden und hier nachweislich rauschfrei sind.
|
||||
#
|
||||
# Anlass ist ein realer Fehler vom 19.08.: `paarweise(d)` mit 1 von 2
|
||||
# Pflichtargumenten. py_compile, ruff F821 und pytest liessen ihn durch; er
|
||||
# schlug erst zur Laufzeit zu.
|
||||
[src]
|
||||
exclude = ["backtest_*.py", "analyze_*.py", "tests/**"]
|
||||
|
||||
[rules]
|
||||
# ── AKTIV: echte Aufruffehler ────────────────────────────────────────────
|
||||
missing-argument = "error"
|
||||
too-many-positional-arguments = "error"
|
||||
unknown-argument = "error"
|
||||
# ⚠ call-non-callable / not-iterable BEWUSST AUS: beide melden hier nur
|
||||
# Falsch-Positive aus heterogenen dicts (`c["have"]()` in den CHECKS,
|
||||
# `"up" in c` in news.py). Geprueft, nicht angenommen.
|
||||
call-non-callable = "ignore"
|
||||
not-iterable = "ignore"
|
||||
unresolved-import = "ignore"
|
||||
# ── AUS: braucht vollstaendige Stubs/Annotationen, sonst Dauer-Rauschen ──
|
||||
unresolved-attribute = "ignore"
|
||||
unsupported-operator = "ignore"
|
||||
invalid-argument-type = "ignore"
|
||||
no-matching-overload = "ignore"
|
||||
not-subscriptable = "ignore"
|
||||
possibly-missing-attribute = "ignore"
|
||||
invalid-assignment = "ignore"
|
||||
invalid-return-type = "ignore"
|
||||
Reference in New Issue
Block a user