feat(export): 3D WebGL renderer for graph.html behind --viz 3d - #2235
feat(export): 3D WebGL renderer for graph.html behind --viz 3d#2235lopezonchain wants to merge 2 commits into
Conversation
lopezonchain
commented
Jul 27, 2026
- New WebGL renderer (3d-force-graph, SRI-pinned like vis-network), selected with --viz 2d|3d on the main pipeline, cluster-only/label and export html, or with GRAPHIFY_VIZ_MODE.
- to_html() now builds a renderer-agnostic view model both renderers consume. 2d stays the default and its output is byte-identical, guarded by a test.
- 3D navigation: search, click-to-inspect, community filters, a "Show" control isolating 1-6 hops around the selection, an opt-in name overlay and keyboard shortcuts. Neighbour links keep the escaped data-nid listener from XSS + broken neighbor links: unescaped JSON.stringify in onclick attribute (export.py:325) #1838.
- Skill flag list gains --viz 3d via the core fragment; the aider/devin monoliths stay frozen against their pinned v8 blob.
- New WebGL renderer (3d-force-graph, SRI-pinned like vis-network), selected with --viz 2d|3d on the main pipeline, cluster-only/label and export html, or with GRAPHIFY_VIZ_MODE. - to_html() now builds a renderer-agnostic view model both renderers consume. 2d stays the default and its output is byte-identical, guarded by a test. - 3D navigation: search, click-to-inspect, community filters, a "Show" control isolating 1-6 hops around the selection, an opt-in name overlay and keyboard shortcuts. Neighbour links keep the escaped data-nid listener from Graphify-Labs#1838. - Skill flag list gains --viz 3d via the core fragment; the aider/devin monoliths stay frozen against their pinned v8 blob.
dfb003e to
38715dd
Compare
|
Amazing PR |
|
Nice and more contextual visualization, I believe that's the whole point about Graphify, provide precise context to the LLM and to programmers so both can easily visualize elements, find 'bottlenecks' , responsibility concentration, distribution , etc... nailed it @lopezonchain |
There was a problem hiding this comment.
Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).
Graphify reviewed this change.
Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).
Graphify review — findings
This PR adds a new --viz 3d option that renders graph.html as a WebGL-based 3D view (via a version-pinned 3d-force-graph bundle) in addition to the existing 2D vis.js renderer. The --viz 2d|3d flag is wired into the CLI for both the /graphify cluster paths and graphify export html, with an alternate GRAPHIFY_VIZ_MODE env var, argument validation, and help-text/README/CHANGELOG updates. It also refactors to_html() to build a renderer-agnostic view model consumed by both renderers, defaulting to 2D, and regenerates the associated skill-generation fixtures and changelog entries. Surface area touched: cli.py (arg parsing/validation), exporters/html.py (mode resolution and view-model refactor), README/CHANGELOG docs, and a large set of skillgen expected-output/fragment fixtures.
Worth a look
- mode not propagated through node_limit meta-graph recursion —
graphify/exporters/html.py:416· Escalate · high- agreed by 2 of 2 members but NOT verified (no proof, no reproducing execution) — consensus is not a verdict; needs human review
Analysis details — impact, health, verification
Impact & health
Graphify review
Impact — 1250 functions depend on the 1029 node(s) this change touches.
Health — this change adds coupling hotspots:
- worse:
to_html()— 19 callers, 7 callees - new:
render()— 15 callers, 3 callees
Verification — 1250 functions in the blast radius were not formally verified this run (proofs are advisory here).
Gate & verification
graphify gate
PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.
Advisory (not blocking):
- verification_scope: 1212 function(s) in the blast radius were not formally verified this run
· 1 grounded finding(s) anchored inline below; 1 more finding(s) on lines outside this diff (see the check run).
