Skip to content

Opt-in collector client for federated fleet intelligence (push/pull transport) #6479

Description

@JSONbored

Context

#1970 (opt-in federated fleet intelligence) requires a transport path for moving anonymized signal bundles between self-hosted instances: an operator either (a) exports/imports a signed bundle file manually/via CI, or (b) points their instance at a collector they run or trust, per #1970's own Requirements ("Operators choose to either... export/import a signed, anonymized signature bundle, or (b) point at a collector they run/trust"). This issue is the (b) transport client only — the bundle format (sibling issue, export side) and the trust-gating rule applied on import (#6477 design, consumed by the import-side sibling issue) are both separate, non-blocking pieces of work.

Requirements

  • Opt-in only, config-as-code via .loopover.yml (a collector URL/endpoint field, inherit | off | enabled shape matching this repo's existing per-repo toggle convention — see src/signals/focus-manifest.ts's FocusManifestReviewConfig pattern).
  • The client only ever talks to an operator-configured endpoint — never a hardcoded or auto-discovered default collector. No central/managed service is assumed anywhere in this codebase's self-host posture.
  • Supports both directions the config can express: push (submit this instance's exported bundle to the configured collector) and pull (fetch peer bundles from the configured collector) — reuse the export bundle's shape produced by the sibling export issue; do not invent a second bundle format.
  • Fail-safe and rate-limited: a collector that's unreachable, slow, or returns garbage must never block or slow down the review/gate path — this is a background, best-effort sync, not something the gate waits on.
  • Never sends code, diffs, GitHub logins, or repo names — only the anonymized bundle produced by the export path.

Deliverables

  • A collector HTTP client (push + pull) gated behind the .loopover.yml opt-in toggle.
  • Timeout/retry/backoff handling so a bad collector endpoint degrades gracefully.
  • Unit tests: opted-out produces zero network calls, opted-in push/pull happy paths, timeout/error paths don't propagate to the gate.
  • .loopover.yml.example / config/examples/loopover.full.yml updated with the collector-endpoint field.

Test Coverage Requirements

99%+ Codecov patch coverage on the diff (src/**) — including the off/on branches and both the timeout and malformed-response error paths.

Expected Outcome

An operator can configure a collector endpoint and have their instance push/pull anonymized bundles against it in the background, with zero effect on gate behavior if the collector is unavailable.

Links & Resources

Metadata

Metadata

Assignees

No one assigned

    Labels

    gittensor:featureGittensor-scored feature linked to a feature issue — scores a 0.25x multiplier.help wantedExtra attention is needed

    Projects

    Status
    In Progress

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions