feat(gitmirrors): declare sean/ex-mcp and give it a real-time codeberg backup #674
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/onboard-ex-mcp"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
Binjovi builds its own MCP server from
sean/ex_mcp—apps/binjovi_api/mix.exspins it by git ref. It had noForgejoRepository, noForgejoPushMirrorand no backup of any kind.make rebuildwipes Forgejo, so the next rebuild would have destroyed the source of Binjovi's MCP server, exactly assean/linuxwas lost on 2026-05-31.The fork itself is already safe —
codeberg.org/someara/ex-mcpwas seeded first, 46 refs, verified identical. This makes the backup declared and continuous instead of a one-off I did by hand.The rename
sean/ex_mcp→sean/ex-mcp.ProjectRegistryvalidates a project name withvalid_dns_name?(\A[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?\z), which rejects_, and several schema clauses assertrepo == "sean/<project>". The Hex application stays:ex_mcp; only the repository is renamed.Forgejo's redirect keeps the old clone URL working, so Binjovi's pin does not break before its own change lands — confirmed with
git ls-remoteand again by a cleanmix deps.get, which still resolvesex_mcp.git.mastertrunkmainAll three are in
branchFilterand all three exist — a filter naming an absent branch fails the whole push atomically.The onboarding cost, made visible
Two separate allowlists had to learn the name, which is exactly the friction this programme is meant to remove:
tests/gitmirror-fleet.shforgejopushmirrorsgrant inbinjovi/service-legacy-access.yaml, whose guard requires set equality with the fleetA false positive, fixed
The reconciler from #670 read only
gitmirrors/, sobinjovi-plansandhetzner-node-imagelooked unbacked. They are not — their mirrors moved to Binjovi and are recorded intests/binjovi-owned-mirrors.txt. It now reads that ledger, taking column 2 where it names a repository, becauseibmi-examples(mirror ofrpg-hello) andzerotierone(mirror ofZeroTierOne) prove the two columns differ.pipelinesandpipelines-operatorare exempted with evidence, not by assumption. Both belong to the retired system, and codeberg holds a strict superset of their Forgejo refs:The failure message now tells the next reader to run that same superset check before exempting anything.
Verification
The reconciler is green for the first time. That matters: a report that is permanently red is a report nobody reads.
Still to come: the Binjovi schema generation and catalog record that make
ex-mcpa build-and-tag project.https://claude.ai/code/session_01XdBRc9CHgFhAxCyHbdVtt6