feat(phase 3f graph): visual /graph view, server-rendered SVG, layered DAG
- internal/graph package: pure-Go layered top-down DAG layout
- LayerByLongestPath (multi-parent sits at max(parent-layer)+1)
- OrderInLayer (slug-sort, deterministic)
- Compute returns positions + edges + canvas size
- cycle-safe (depth-cap)
- web/graph.go handler: filter chips reused from tree_filter
- dim mode default (opacity 0.15 on non-matches)
- ?isolate=1 hides non-matches + prunes orphaned edges
- ?download=svg serves raw SVG attachment
- graph_svg.tmpl renders inline SVG: border colour by management
(mai blue / self green / external orange / mixed dashed purple),
opacity by status, tag pills, ×N multi-parent badge, click-navigate
- nav adds "graph" link; design.md §"Graph view" documents the surface
- 4 integration tests cover render, dim, isolate, SVG download
- 6 layout unit tests cover layering, ordering, cycle-guard