Node color from cluster resolver — fixes the rainbow, raw.color per ownership contract
Wires the v103.0.1 resolver into buildGraphologyGraph. Replaces colorSuggestionEngine.pick("node-primary") — the arbitrary rotation that produced rainbow noise — with resolveClusterColor. Nodes are now colored by cluster/domain identity. raw.color set at build time per the ownership contract.
v103.0.22026-06-02
·colorSuggestionEngine.pick("node-primary") removed — this was the rainbow source (arbitrary nodeId-keyed rotation, ignored cluster entirely)
·resolveClusterColor(cluster, semantic, palette) wired — azure nodes get #3D8BD8, gold get #FFB347, violet get #8B5CF6 etc. — coherent neighborhoods
·Both the if(themeId) path and the legacy else-if(nodeColorScale) path unified into one cluster loop — cluster color is theme-independent (D2)
·Fallback: themeTokens.graph.nodeDefault (theme-resolved via getThemeRuntimeTokens already in scope) — NOT the static graphVisualTokens constant (Disconnect 3 fix deferred to .0.4)
·raw.color set per-element at build time (ownership contract layer 2) — style layer carries it, no extra writes needed