• v0.6.8 af2ffb44b7

    fix(uplink): cross-site MAC-collision guards, liveness from metric batches; app-icon proxy
    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-12 00:15:19 +03:00 | 227 commits to main since this release

    Docker-bridge agents on different machines derive identical MACs
    (02:42:… from equal bridge IPs), which broke three things on the hub:

    • a spoke's self-linked guest resolved to the HUB's own collector row
      and attached a foreign hypervisor topology to it, while the real
      guest row lost its parent (dokploy detaching from mika-pve);
    • the spoke node's own metric batches resolved to the hub's id=1 row
      and were skipped as 'our own machine' — no stats, no applications;
    • nothing maintained last_seen for replicated hosts (CmdHostLastSeen
      was never published), so remote cards stayed red while charts moved.

    Fixes:

    • UpsertConnectorHost: a remote-origin row never claims the local
      collector row; topology equal to the incoming external_id is shed
      (heals rows decorated before the guard); created rows fall back to a
      stable synthetic LAA MAC when the real one is taken;
    • applyHostUpsert skips remote agents whose MAC equals our own row;
    • applyMetricBatch resolves remote batches origin-first (MAC within
      origin, then name) and bumps the host's last_seen — a host streaming
      metrics is alive, cards go green without a heartbeat command;
    • hosts repo: GetHostByOriginAndName.

    New: server-side application-icon resolver (GET /api/v1/app-icons/:slug)
    — collapsed-name matching against the live selfh.st index
    ('nginxproxymanager' → 'nginx-proxy-manager', unique-prefix 'crafty' →
    'crafty-controller'), CDN candidates fetched once, 24h in-memory cache

    • browser cache headers; the frontend now asks the backend instead of
      hitting CDNs per client, keeping the favicon fallback.
    Downloads