301770321e
Multi-site join wiring (server + UI landed in theta-directory v2.3.0): - bootstrap/site-join.js: runs inside the sso-manager container (same self-contained rule as bootstrap.js); logs in as the bootstrap admin and calls /api/site/join. Idempotent: an already-joined node reports 'already a spoke'. - setup.sh step 5b: if setup.env sets CFG_MASTER_DIRECTORY_URL + CFG_MASTER_DIRECTORY_JOIN_KEY, run the join after the bootstrap. Only honored on first run (ensure_config reads setup.env once and ignores it once ./config/ exists), so an already-populated directory can never be merged. - setup.env.example documents both vars. - lint.yml also node --check's site-join.js.