// Render-Probe: laesst renderM15 + renderBrk gegen ein Minimal-DOM laufen. // // ⚠⚠ WARUM ES DAS GIBT (2026-08-19): `node --check` prueft nur die SYNTAX. Ein // ReferenceError (falsche Variable im falschen Scope) ist syntaktisch // einwandfrei und faellt erst im Browser auf - dort bricht er aber den // GESAMTEN Render ab: alles ab der Fehlerstelle bleibt auf "—", und die // danach gerufenen Renderer laufen gar nicht mehr. Real passiert: die // RSI-Zeile griff in `renderM15(s)` auf `d.market` zu; das Dashboard zeigte // sechs leere Zeilen und eine komplett leere Breakout-Karte. // Python hat dafuer `ruff F821` - fuer JS gab es nichts Vergleichbares. // // Aufruf: node tools/render_check.mjs // Snapshot holen: curl -s http://127.0.0.1:8000/api/snapshot > snap.json import fs from "fs"; const snap = JSON.parse(fs.readFileSync(process.argv[2], "utf-8")); const src = fs.readFileSync("web/app.js", "utf-8"); const store = {}; const mk = (id) => ({ id, set textContent(v){ store[id]=v; }, get textContent(){return store[id]||"";}, set className(v){}, get className(){return "";}, classList:{add(){},remove(){},toggle(){}}, style:{}, value:"", title:"", addEventListener(){}, blur(){}, focus(){} }); const cache = {}; global.document = { getElementById: (id) => (cache[id] ||= mk(id)), querySelectorAll: () => [], querySelector: () => null, addEventListener(){}, get activeElement(){return null;}, createElement: () => mk("_") }; const m = src.match(/function renderM15\([\s\S]*?\n\}/); const b = src.match(/function renderBrk\([\s\S]*?\n\}/); const helfer = 'const _F=document.createElement("span");' + 'const $=(id)=>document.getElementById(id)||_F; const $streng=(id)=>document.getElementById(id);'; const fn = new Function("snapshot", helfer + "\n" + m[0] + "\n" + (b?b[0]:"function renderBrk(){}") + "\nrenderM15(snapshot.m15_setup, snapshot); renderBrk(snapshot);"); try { fn(snap); console.log(" ✅ renderM15 + renderBrk laufen OHNE Exception durch"); } catch (e) { console.log(" ❌ EXCEPTION: " + e.message); process.exit(1); } for (const k of ["m15-rsi","m15-m5","m15-motor","brk-pos","brk-state"]) console.log(" " + k.padEnd(12) + " = " + (store[k] || "(leer)"));