Status: accepted for v1.0.0
Date: 2026-06-05
The current visualizer already proves the important product loop:
repository -> graph JSON -> self-contained interactive HTML map
Its largest pre-v1 problems are packaging, installability, safety contracts, testability, and release trust. They are not evidence that the product needs a different application stack.
A full rewrite would recreate already-working scanner, renderer, graph, interaction, responsive-layout, and authority-boundary behavior while enlarging the regression surface.
V1 will evolve the current implementation rather than rewrite it.
Retain:
- Node.js and ESM for scanner and renderer execution.
- Node standard-library-only installed runtime.
- Graph JSON as the explicit scanner/renderer boundary.
- Static self-contained HTML as the primary artifact.
- Inline SVG for deterministic hierarchy and reference visualization.
- Vanilla browser JavaScript for map interaction.
Change:
- Extract testable scanner and renderer modules behind the existing artifact contracts.
- Package one canonical runtime under the installable skill directory.
- Prefer authored plain CSS and remove the Tailwind build dependency unless implementation evidence shows a material reason to retain it.
- Manage large graphs with scoped views, budgets, filtering, and graceful limits before evaluating Canvas or WebGL.
Defer:
- React, Vue, Svelte, or another browser application framework.
- Canvas or WebGL rendering.
- A persistent web application or required local server.
- Artifact-contract changes made only to ease internal refactoring.
Node is portable across the intended coding-agent environments, naturally fits filesystem and JSON work, and supports a dependency-light installed runtime.
The single-file map is portable, inspectable, archiveable, and usable without a server or runtime dependency installation. It matches the generated-snapshot authority model.
SVG provides crisp labels, deterministic layouts, native interaction targets, and inspectable output. Focused and scoped views are a better first response to large-repository pressure than replacing the renderer without measurements.
The current browser behavior does not yet justify a framework runtime. Internal module boundaries and tests should address maintainability before adding a framework abstraction.
The renderer has one specialized visual language rather than a broad component system. Plain authored CSS removes a development dependency and generated-asset drift while preserving the self-contained artifact.
Positive:
- V1 work targets the actual release blockers.
- Existing behavior remains available to validate during refactoring.
- Installed runtime stays lightweight and inspectable.
- Artifact compatibility can remain stable while internals improve.
Tradeoffs:
- Vanilla browser JavaScript still requires disciplined module boundaries.
- SVG needs explicit graph-size budgets and scoped rendering.
- Removing Tailwind requires carefully preserving the current visual language.
- The modularization must avoid creating duplicate canonical runtime copies.
Revisit this decision only when evidence shows one or more of:
- Representative scoped SVG views remain too slow or memory-heavy.
- Browser state complexity repeatedly causes regressions despite modularization and tests.
- Multiple maintainers cannot safely evolve the renderer without a framework.
- The product requirements change from a generated static artifact to a persistent application.
Until then, stack replacement is not part of the v1 path.