6861a113d2
Two previously-unrelated "site slug" concepts existed: the Directory catalog's site Resource (site.slug, what group names and the resource tree actually use -- e.g. "E2E Site" / site_e2e) vs. site_config.js's siteSlug (the multi-site replication identity shown on the Multi-Site modal's "Local Site Slug" row, sourced only from a separately-set SITE_SLUG env var). Nothing ever kept them in sync -- a real deployment could show a real site name in the Directory tree and the literal "site-default" fallback on the Multi-Site modal for the exact same node, which is exactly what a live demo of the modal surfaced. Synced at the source: POST /resources now sets site_config's siteSlug to match, the moment this node's own site Resource is first created (bootstrap.js's initial call). Only for a still-default master -- never overwrites a real multi-site identity a join/promote has already established, and never touches a spoke's identity (the master's to assign via registration, not this node's own resource creation to decide). Verified against a real running container via docker-compose.multisite-e2e.yml's existing site-creation step.