Read-only Forgejo/GitHub repo-object drift report #578

Closed
opened 2026-07-22 08:09:48 +00:00 by coilyco-ops · 0 comments
Member

scripts/forgejo-github-reconcile.py (ward exec forgejo-github-reconcile) reports repo-object drift between Forgejo and GitHub across the four owned owners, read-only, no apply mode. Repo churn is rare enough that retire/create/reconcile stay hand-driven, so the report is the product.

Classifies each repo against three invariants:

  • I1 Forgejo holds only active repos (a GitHub-archived repo must not exist on Forgejo).
  • I2 the active set is identical by owner/name on both forges.
  • I3 a matched active pair agrees at the default-branch HEAD.

States: in-sync, fj-ahead, gh-ahead, diverged, retire-pending, retire-blocked-fj-ahead, missing-on-gh, missing-on-fj, owner-mismatch, fj-archived-gh-absent, retired-ok. Each row is annotated with its authoritative forge from the owner-scoped repo-authority policy (coilysiren is GitHub-native, coilyco-* are Forgejo-native), display-only.

Two enumeration guards, both from bugs the tool surfaced on itself: Forgejo listing uses per-owner /orgs + /users endpoints, never /repos/search (search dropped 4 of 54 repos); GitHub listing uses gh repo list, never the /users REST endpoint (which is public-only and dropped 27 of 109 private repos). Any owner enumerating to zero aborts the run.

First run: 36 drift states / 130 clean. Notables: repo-recall is retire-blocked-fj-ahead (Forgejo ahead of the archived GitHub copy), 21 retire-pending (archived on both, awaiting delete-from-FJ), galaxy-gen owner-mismatch (coilyco-gaming on FJ vs coilyco-flight-deck on GH).

`scripts/forgejo-github-reconcile.py` (`ward exec forgejo-github-reconcile`) reports repo-object drift between Forgejo and GitHub across the four owned owners, read-only, no apply mode. Repo churn is rare enough that retire/create/reconcile stay hand-driven, so the report is the product. Classifies each repo against three invariants: - I1 Forgejo holds only active repos (a GitHub-archived repo must not exist on Forgejo). - I2 the active set is identical by owner/name on both forges. - I3 a matched active pair agrees at the default-branch HEAD. States: in-sync, fj-ahead, gh-ahead, diverged, retire-pending, retire-blocked-fj-ahead, missing-on-gh, missing-on-fj, owner-mismatch, fj-archived-gh-absent, retired-ok. Each row is annotated with its authoritative forge from the owner-scoped repo-authority policy (coilysiren is GitHub-native, coilyco-* are Forgejo-native), display-only. Two enumeration guards, both from bugs the tool surfaced on itself: Forgejo listing uses per-owner /orgs + /users endpoints, never /repos/search (search dropped 4 of 54 repos); GitHub listing uses `gh repo list`, never the /users REST endpoint (which is public-only and dropped 27 of 109 private repos). Any owner enumerating to zero aborts the run. First run: 36 drift states / 130 clean. Notables: repo-recall is retire-blocked-fj-ahead (Forgejo ahead of the archived GitHub copy), 21 retire-pending (archived on both, awaiting delete-from-FJ), galaxy-gen owner-mismatch (coilyco-gaming on FJ vs coilyco-flight-deck on GH).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/infrastructure#578
No description provided.