Files
esh-pfi-infrastructure/persistent-memory.d/2026-09-21-gitea-orgs-and-the-dead-token.md
T
vh e52def115c memory: snapshot — the ops log, and a day spent on instruments that report without looking
Archived 15 entries (Recent decisions 14, Tried and abandoned 1) oldest-first
to archival-memory.md; 5 held back on the open-deferred-work guard and 164 on
the 14-day guard, so the index stays over the soft cap at 477 lines. An
over-cap file that keeps live decisions beats a scannable one that lost a
belayed item.

Four new detail files cover the day: the ops log and its four self-inflicted
failure modes, the Booth's two dead controls and the four-iteration layout
probe, the Gitea org grant plus the dead claude-bot token that had been
misreporting permissions, and the disk triage that rescued a LoRA adapter from
a directory this box sweeps at three days.

lv-mccarthy's run outcome remains unverified after two days and is the first
line of the in-flight section and step 1 of the handoff.
2026-09-21 14:26:55 -07:00

40 lines
2.4 KiB
Markdown

# `[2026-09-21]` claude-bot became an org Owner, repos moved to `pfi`, and a dead token had been misreporting permissions for months
**Operator ruling:** claude-bot is an **Owner** in `corviduo` (team 1), `pfi`
(team 4) and `vastblue` (team 5). Verified by reading membership back AND by
exercising it on claude-bot's own token: create/edit/delete in `pfi` all
succeed, `vh/*` correctly still 404s.
⚠ **Why not "admin on vh/*", which is what was originally asked:** `vh` is a
**USER account (id 1), not an organization** — `/orgs/vh` 404s. Gitea has no
namespace-scoped admin for a user namespace. Measured: per-repo `admin`
collaborator grants read but **not** settings (403 on PATCH) — repo settings are
owner-only. So the only working realization of "admin over vh/*" is the
**instance-wide site-admin flag**, which would have given claude-bot the same
blast radius as the token the credential-migration project exists to retire.
Surfaced rather than executed; the operator chose orgs instead.
**`vh/cicada` and `vh/draupnir` transferred into `pfi`** with SHAs preserved,
old paths 301ing, and — verified — **the old ssh remotes still resolve**, since
Gitea redirects git-over-ssh and not just the web URL. Repoint anyway: a remote
living on a redirect depends on the old path staying unclaimed.
⚠⚠ **`~/.config/claude-bot/gitea-token` IS DEAD** — it authenticates as
**nobody** (`/user` → `None`). I had cited its 403s and 404s twice, to the
operator and to a peer, as evidence that claude-bot lacked rights in `vh/*`. The
conclusion survived re-testing with a working credential, but the evidence was
worthless. **A credential that authenticates as nobody returns 403 and 404 for
everything, and that is indistinguishable from a permissions answer.** There
are FOUR token files in that directory; the working one for repo work is
**`gitea-token-repo-create`** (`write:organization`, `write:repository`,
`write:user`).
**Standing authorization (operator, same day):** routine vh-token use for
`vh/*` repo ops no longer gets a flag. Read it from the **vault** —
`secret get 'nh3-dev/.config/gitea/vh-token'` — verified byte-identical to the
disk copy and authenticating as `vh` (id 1, is_admin=True). ⚠ This did not make
the token low-blast-radius; it stopped the class of work being exceptional.
Recorded in auto-memory as `feedback_wrong_resource_before_wrong_peer` and in
`reference_infra_ops_vh_gitea_token_and_sdk_publish`.