v103.0.2lumaweave2026-06-02

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