Skip to content

Make gittensor subnet integration an opt-in experimental plugin #5035

Description

@JSONbored

Problem

Self-host instances unconditionally sync the entire gittensor Bittensor-subnet miner registry from entrius/gittensor every hour (refresh-registry), regardless of whether the operator has any affiliation with the gittensor subnet. Traced from a reported "job queue pending is high despite low traffic" incident: a live self-host box (edge-nl-01) had 18 repos registered from the subnet file, 15 of which were unrelated third-party miner repos never installed on that instance.

gittensory is broadening beyond being a gittensor-subnet-only tool. Subnet integration needs to become an explicit opt-in plugin rather than a core dependency, so a self-host operator who isn't a gittensor miner has zero footprint from it: no fetch from the subnet registry, no local tracking of unrelated repos.

Requirements

  • A new experimental: manifest block (parallel to the existing features: block), with gittensor as its first key — a namespace for future opt-in ecosystem/network plugins as the product broadens.
  • Per-repo activation follows the existing resolveManifestOnlyFeature precedence (operator env kill-switch AND explicit per-repo .gittensory.yml opt-in, no allowlist fallback).
  • Self-host's refresh-registry cron job is skipped entirely (zero outbound contact with the subnet registry) when no repo on the instance has opted in.
  • Cloud/hosted behavior is completely unaffected.

Deliverables

  • Engine-level manifest parsing (experimental: block, parseExperimentalConfig/experimentalConfigToJson).
  • src/review/gittensor-wire.ts: the plugin's env kill-switch + per-repo resolution + a gittensorEnabledRepoFullNames helper.
  • Cron gate in src/index.ts skipping refresh-registry when nothing is opted in on self-host.
  • .gittensory.yml docs updated (config/examples/gittensory.full.yml, .gittensory.yml.example) documenting the new block.
  • Tests covering both sides of every new branch.

Non-goals (tracked separately)

Scoping registry/sync.ts's writes to only opted-in repos, and migrating the several CORE features currently gated on repositories.isRegistered (fidelity repair, signal snapshots, backfill, etc.) to isInstalled instead — that's a larger, higher-risk untangling tracked as its own epic, #5016.

Metadata

Metadata

Assignees

Labels

maintainer-onlyOwner-only work — yields no Gittensor points.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions