Viewer jest samowystarczalny — bundle jest wpiekany do HTML jako
window.BUNDLE (nodes/edges/bodies), nie ma odczytu .md w runtime, więc
nie potrzeba manifestu ani konkretnej ścieżki serwowania. Źródłem danych
jest gen_viz.py, uruchamiany po zmianach w bundle'u.
Logika viewera (viz.js, viz.css, szkielet templates/viz.html) wstawiona
dosłownie z upstreamu — zweryfikowane bajt w bajt. gen_viz.py koryguje
wyłącznie zbieranie danych, w dwóch miejscach niezgodnych ze spec:
- _extract_links pomijał linki bundle-relative "/..." (generator.py:74),
czyli formę zalecaną w §5.1 — bundle zgodny ze spec dawał graf z 0
krawędzi. Sam viewer te linki rozumie (viz.js:297).
- _walk_concepts pomijał tylko index.md, więc zarezerwowany log.md
trafiał do grafu jako koncept typu "Unknown" (wbrew §3.1).
Wynik: 9 konceptów, 9 krawędzi (było 9 i 0).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>