• fix(bridge): authoritative + observable uplink-config replication so every node ships to the hub
    Release / version (push) Canceled after 0s
    Release / frontend (push) Canceled after 0s
    Release / linux (amd64) (push) Canceled after 0s
    Release / linux (arm64) (push) Canceled after 0s
    Release / windows (push) Canceled after 0s
    Release / macos (push) Canceled after 0s
    Release / release (push) Canceled after 0s
    Build and Push Docker Image / build-and-push (push) Canceled after 0s

    LastSkywalker released this 2026-06-21 11:46:23 +03:00 | 117 commits to main since this release

    A 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_01U3LvJu9qZfspPr21TW9ptv

    Downloads