Skip to content

Mirror-reconcile / deletion-prune sweep (cron-first, owned compute) #1

Description

@hyperpolymath

Goal

Scheduled mirror-reconcile / deletion-prune sweep for the estate: when a GitHub repo is deleted, its mirrors on the downstream git forges become orphans. Reconcile and prune them.

This is WS3 of the Estate Settings & Template Regularisation campaign (plan: dev-notes/estate-settings-template-regularisation-PLAN.md). Homed here in bitfuckit as the repo-plumbing tool.

Mechanism (cron-first)

  • Diff the live hyperpolymath/* GitHub repo list against each enabled downstream forge's repo list; a mirror whose GitHub origin no longer exists is an orphan → prune candidate.
  • Forges (7), name-deterministic at git@<forge>:hyperpolymath/<repo>.git, each gated per-repo by vars.<FORGE>_MIRROR_ENABLED == 'true': GitLab, Bitbucket, Codeberg, SourceHut, Disroot, Gitea, Radicle. (Source: standards/.github/workflows/mirror-reusable.yml.)
  • Registry = that forge set + the *_MIRROR_ENABLED vars. No separate registry needed.

Constraints (hard)

  • Report-only canary until a prune is explicitly confirmed — never auto-delete a mirror on first pass.
  • Fail-closed.
  • Owned compute only — host-crontab now → bag-of-actions (Tier-A fixed tap) as the sovereign target. No metered GitHub Actions ($0 Actions hard-stop / cost-governor). Runaway-impossible by construction.
  • Runner: bash + jq or Elixir .exs (no Nix/Python/npm).

Sequencing

Not immediate — critical but deferred per owner. Prereq: bitfuckit extracted out of the reposystem monorepo (campaign WS0).

Recommendation

Cron reconcile first (simpler, no always-on endpoint). Add a GitHub App repository.deleted webhook later only if latency matters.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions