Skip to content

feat(export): 3D WebGL renderer for graph.html behind --viz 3d - #2235

Open
lopezonchain wants to merge 2 commits into
Graphify-Labs:v8from
lopezonchain:feat/3Dgraph
Open

feat(export): 3D WebGL renderer for graph.html behind --viz 3d#2235
lopezonchain wants to merge 2 commits into
Graphify-Labs:v8from
lopezonchain:feat/3Dgraph

Conversation

@lopezonchain

Copy link
Copy Markdown
  • 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.
@ivanmmurciaua

Copy link
Copy Markdown

Amazing PR

@lopezonchain

Copy link
Copy Markdown
Author
image

@maker95

maker95 commented Jul 28, 2026

Copy link
Copy Markdown

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

@graphify-labs graphify-labs Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 recursiongraphify/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).

return build_from_json(json.loads((FIXTURES / "extraction.json").read_text()))


def render(mode=None, **kwargs):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Health regressionrender()

15 callers depend on it (afferent coupling).

Grounded coupling-delta finding (deterministic), not an LLM guess.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants