repo-manager/src/repo_manager
tegwick 1be6d85397 feat(onboard): add rmgr repo-onboard, the missing managed_repos write path
hub-record-authority.yaml assigns managed_repos to repo-manager as
file-derived, but repo-manager exposed no command for it. The only working
path lived in the State Hub repo and defaulted to 127.0.0.1:8000, which is how
seven weeks of onboarding landed in a local cache instead of central.

Order follows ADR-010 decision 5: make the source file correct and reachable
first, then project it. Refuses to onboard when the classification file is
missing or invalid, has uncommitted changes, has no upstream, or has unpushed
commits — a hub record whose backing file is only local cannot be re-derived
by anyone else.

--api-base has no default on purpose. A silent localhost default is the
original defect, not a convenience.

A failed classification PATCH degrades to a warning rather than failing the
run: the authoritative record existing is what stops a repository from being
recoverable only through a discardable cache, and classification is a
projection of a committed file that can be re-derived later.

Refs CUST-WP-0067-T04

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-24 23:33:22 +02:00
..
commands feat(onboard): add rmgr repo-onboard, the missing managed_repos write path 2026-08-24 23:33:22 +02:00
parse feat: harden work-record and SBOM client contracts 2026-08-22 23:19:36 +02:00
__init__.py docs(RMGR-WP-0001): complete T04 implementation foundation 2026-08-09 22:41:26 +02:00
__main__.py feat(RMGR-WP-0002): dual-run writeback, flags, meter, SH facade 2026-08-09 23:19:56 +02:00
authority.py feat: finish register receiving and authority routing 2026-08-21 23:15:48 +02:00
cache.py feat(cache): add rebuild and provenance safeguards 2026-08-21 23:23:03 +02:00
classification.py feat: advance repository records and provenance 2026-08-21 22:07:48 +02:00
cli.py feat(onboard): add rmgr repo-onboard, the missing managed_repos write path 2026-08-24 23:33:22 +02:00
dual_run.py feat: finish register receiving and authority routing 2026-08-21 23:15:48 +02:00
gitops.py feat(RMGR-WP-0002): dual-run writeback, flags, meter, SH facade 2026-08-09 23:19:56 +02:00
idempotency.py feat(RMGR-WP-0002): dual-run writeback, flags, meter, SH facade 2026-08-09 23:19:56 +02:00
identifiers.py fix(identifiers): reject unproven assignments 2026-08-22 23:54:24 +02:00
index_store.py feat(cache): add rebuild and provenance safeguards 2026-08-21 23:23:03 +02:00
observe.py feat: harden work-record and SBOM client contracts 2026-08-22 23:19:36 +02:00
owner_interfaces.py feat(handoffs): publish owner task interfaces 2026-08-22 14:15:48 +02:00
prefix_registry.py feat: model repo standards and detect prefix collisions 2026-08-18 13:28:40 +02:00
provenance.py feat: advance repository records and provenance 2026-08-21 22:07:48 +02:00
record_identity.py feat: harden work-record and SBOM client contracts 2026-08-22 23:19:36 +02:00
registrar.py feat: interim identifier registrar (RMGR-WP-0005-T01) 2026-08-18 21:49:08 +02:00
sbom_client.py feat(sbom): project immutable Forgejo source refs 2026-08-22 23:34:01 +02:00
source_ref.py feat(sbom): project immutable Forgejo source refs 2026-08-22 23:34:01 +02:00
standards.py feat: harden work-record and SBOM client contracts 2026-08-22 23:19:36 +02:00
time.py feat: finish register receiving and authority routing 2026-08-21 23:15:48 +02:00
workloads.py feat(workloads): define authoritative reference contract 2026-08-22 14:03:07 +02:00