diff --git a/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md b/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md index f305afb..cae8881 100644 --- a/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md +++ b/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md @@ -75,6 +75,73 @@ removes the need for the trade. this instance is not the registrar. Read/project checks are unchanged. Cost documented in `docs/repository-standards_v0.1.md`. +**The registrar was never stood up (found 2026-08-21).** T01 shipped the guard — +non-registrar instances correctly refuse to mint — but no instance satisfies the +registrar condition, so nothing drains the queue. Twelve registrar-sync requests +had accumulated from `evidence-binder`, `kaizen-agentic`, `glas-harness` and +`agentic-resources` before anyone noticed. + +Surveyed on `railiance01`, the designated production registrar: + +| Prerequisite | State | +| --- | --- | +| Registrar signal | **fails** — hostname is `239.62.205.92.host.secureserver.net`, so the `railiance*` prefix heuristic never matches, and `STATEHUB_REGISTRAR` is unset | +| `repo-manager` clone | was absent; cloned 2026-08-21, `rmgr` installed into `~/.venvs/registrar` | +| `statehub` CLI | **not installable** — `pip install ~/state-hub` fails `ResolutionImpossible`; `hub-core` installs, the conflict is elsewhere | +| Checkout ownership | **999 files under `~/state-hub` owned by root**, because the `state-hub` pod bind-mounts `/home/tegwick` as a hostPath and runs as root. Blocks `git pull` and editable installs | +| Checkout lineage | **points at `gitea-remote`, not `forgejo-remote`** — the host was never swept by `forgejo-tier3-remote-url-sweep-playbook`. Its `evidence-binder` tracks a different lineage and cannot see `EBIND-WP-0002` at all | + +The hostname heuristic is the cheapest fix and the most misleading defect: it +reads as though a registrar exists whenever a host is named `railiance*`, but the +production host is not. Prefer the explicit `STATEHUB_REGISTRAR` signal and treat +the hostname fallback as unreliable, or drop it. + +Two consequences beyond this task: + +- **Security.** The `state-hub` pod mounts `/home/tegwick` **and + `/home/tegwick/.ssh`** as hostPath volumes. A workload with the operator's + private keys is a larger exposure than the registrar problem it surfaced. +- **The remote sweep is incomplete, and this gates the registrar fix.** Counted + 2026-08-21: + + | Host | `forgejo-remote` | `gitea-remote` | + | --- | --- | --- | + | workstation | 126 | 0 | + | `railiance01` | 7 | **70** | + + The two aliases are different servers — `forgejo-remote` is `92.205.62.239` + (railiance01), `gitea-remote` is `92.205.130.254` (coulombcore) — and both are + live. The workstation finished migrating; `railiance01` did not. + `forgejo-tier3-remote-url-sweep-playbook` still reads "Gitea remains canonical", + which was true when written on 2026-07-04 and is now stale guidance. + +### Why the registrar cannot simply be switched on + +The fix looked like one environment variable: the `state-hub` **deployment** has +`STATEHUB_REGISTRAR` unset, and that pod is the real automated instance — it +mounts `/home/tegwick` read-write, mounts `/home/tegwick/.ssh` at `/root/.ssh` +for push, and carries `STATE_HUB_SWEEP_HOSTNAME`. Host-level provisioning was the +wrong target. + +**Setting it today would be actively harmful.** The pod would begin minting +identifiers into 70 checkouts that track the superseded server and pushing them +there — writing hub primary keys into a lineage nothing reads, and re-animating +`gitea-remote` as a write target. + +Required order: + +1. Re-point `railiance01`'s checkouts to `forgejo-remote`, keeping `gitea` as the + rollback mirror the playbook specifies. Content diverges — `evidence-binder` + there is at `a715492` against the workstation's `9e3f4a6` — so this is a + reconcile, not a URL rewrite. +2. Then set `STATEHUB_REGISTRAR=1` on the deployment. + +Reversing the order mints into the wrong lineage at fleet scale. + +**Open question worth answering first:** the sweep pod is running now against +those 70 stale checkouts. Establish what it has been pushing to `gitea-remote` +before changing anything. + ## Re-register identifiers minted outside the registrar ```task