-
fix(bridge): authoritative + observable uplink-config replication so every node ships to the hub
Release / version (push) Canceled after 0sRelease / frontend (push) Canceled after 0sRelease / linux (amd64) (push) Canceled after 0sRelease / linux (arm64) (push) Canceled after 0sRelease / windows (push) Canceled after 0sRelease / macos (push) Canceled after 0sRelease / release (push) Canceled after 0sBuild and Push Docker Image / build-and-push (push) Canceled after 0sreleased this
2026-06-21 11:46:23 +03:00 | 117 commits to main since this releaseA follower that joins after the uplink was configured (e.g. orangepi5-plus)
never enabled its own push bridge: the reconciler only seeded cluster_config
'while unset' and the seed/adopt paths were silent, so a stuck or partial state
never self-healed and was undiagnosable from logs.Rework reconcileBridgeConfig:
- The node(s) with a LOCAL uplink (env RAFT_BRIDGE_* / admin Apply) are the
source of truth. The leader re-asserts each cluster_config key that differs
every pass (idempotent self-heal), not just when unset; a local node keeps its
own config and never adopts. - 'Ships to hub' now covers push AND both (legacy) so a both-mode leader also
publishes; followers always adopt as push. - Every node WITHOUT a local uplink adopts the replicated config and (re)builds
its metric-stream bridge; a dedicated receiver (hub) keeps its config. - Log on publish/adopt, plus a throttled (≤1/2min) state line (is_leader,
local_mode, local_ships, cfg_has_secret/seeds/mode) so a stuck cluster is
diagnosable from logs alone.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01U3LvJu9qZfspPr21TW9ptvDownloads
- The node(s) with a LOCAL uplink (env RAFT_BRIDGE_* / admin Apply) are the