Scrub a time slider across milestone snapshots and watch the 543-concept Nexus knowledge graph grow. Force-directed SVG, fade transitions on add/remove, per-snapshot growth deltas. Pure vanilla JS.
graph.json). The browser cannot run git log to reconstruct true history, and Nexus does not yet keep versioned graph snapshots in-repo. The earlier snapshots are derived deterministically from the current graph by group-introduction order, so node identity and edge structure are real — only the timing of when each concept was added is synthetic. A production temporal graph would either persist versioned snapshots as separate files (e.g. graph-2026-01.json) or expose a backend timeline API.
Pick a concept. The tool shows three relationships derived from the milestone data: the snapshot in which the concept was first introduced, its siblings (other concepts added in the same milestone), its prerequisites that already existed at that point, and the downstream concepts that now depend on it (added in this or later snapshots).
The tool defines an introduction order for the ~45 group codes used by
Nexus (T01..T35 plus the named groups like cloud, appsec,
purple-team, etc.). Each milestone admits the next slice of groups:
T01, T02, T03, T04, T05T06..T16T18..T35attack, blog, cloud, concept, scenario, tool, etc.)Edges are filtered at each snapshot — an edge is included only if both its endpoints exist at that point. So at 2026-01 you see a small dense Foundations cluster; by 2026-04 you see the full 543-node web. Layout is computed once on the full 2026-04 graph so positions stay stable as you scrub — only opacity changes.
Same approach as skill-tree-viz.html: spatial-bucket Coulomb repulsion (only
compares nodes within 3x3 grid cells) + Hooke spring along edges + gravity toward center,
~250 ticks of synchronous integration on boot. No D3, no vis.js, no Cytoscape.
Real: the 2026-04 snapshot, every node ID/label/group/url, every edge, the layout positions. Synthetic: the dates 2026-01 / 2026-02 / 2026-03 and the assignment of which group "appeared" in which milestone. Treat the timeline as a didactic projection, not a git-log replay.
To make this real: write a scripts/snapshot_graph.py that runs in CI weekly,
committing docs/learning-graph/snapshots/graph-YYYY-MM-DD.json. The HTML
would then fetch a snapshots/index.json manifest and load each real
snapshot. That work is out of scope for this PoC — the loop is illustrated here with
derived snapshots.