d2 emits SVG natively; its PNG path wants a ~150 MB headless-Chromium
download and prompts interactively, so every PNG here was produced by an
out-of-band magick step. There is no Chromium on this system. Dropping PNG
removes the dependency rather than trading one format for another, and cuts
docs/diagrams/ from 17 MB to 3.3 MB. SVG renders in Gitea and in clide
(`clide draw --file <path>`, which takes .d2 source directly), and diffs as
text.
One PNG is kept on purpose: design/star-map-concentric.png has no .d2 source.
Also renders the 7 star-map .d2 files for the first time. star-map-plan.md
listed their renders as a deliverable in March and the step never ran; the
new `make check-diagrams` is what surfaced it.
New: docs/diagrams/data-flow/wiki-generator-flow.d2 — which way the arrows
point for any file under wiki/. Every edge was read in the tool's own source
rather than inferred. It records the trap that keeps costing us: scaffold_bodies.py
writes a body page once and never overwrites it, and the generator then reads
that frontmatter directly — so a hand-edit there is not reverted, it is obeyed,
and silently changes world generation.
Two rendering traps found the expensive way and now written down:
- A d2 `|md` block becomes an SVG <foreignObject>. ImageMagick and flutter_svg
both silently drop it, so the legend was in the file and invisible in every
viewer except a browser. Plain labels render as real <text> everywhere.
- Container boxes fight the layout engine. Grouping nodes whose flow-depths
differ forces long edge routes; this diagram went from an unreadable 2.4:1
sprawl to a legible 0.75:1 by deleting five containers and changing nothing
else. Colour classes carry the grouping instead.
make diagrams / make check-diagrams render and gate. Repo-specific rules in
.claude/rules/diagrams.md; d2 syntax and the traps live in the user-scope
d2-diagram skill, whose PNG default was flipped to SVG to match.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two star map visualizations: topology view (hop-based layout)
and real-coordinate view (spatial positions).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Canvas now 16:9 with circle filling height. Radial fade gradient uses
userSpaceOnUse for true circular shape. Hop 15+ folded into final ring.
Margins trimmed to fit content.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Script now auto-converts to PNG after generating SVG. Tries magick,
convert, or rsvg-convert in order.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reproducible concentric-ring star map: Gateway at center, hop rings
radiating outward, sectors in cardinal wedges (N/E/S/W), alternating
band colors per sector, hop 15+ folded into final ring with fade-out
zone. Sol pinned due west.
Run: python3 tooling/generate-star-map-svg.py
Output: docs/diagrams/design/star-map-concentric.svg
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Six sector maps (core, N/S/E/W reach, deep frontier) plus overview.
Generated from star-map.json — currently stale after topology tuning,
will be regenerated once naming pass is complete.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
D2 source + PNG render showing all zone connections, access tiers,
z-levels, maintenance corridor routing, and dual entry vectors.
Vertical layout with color-coded access tiers per D-093.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>