Files
Felis/docs/changes/2026-06-27-username-reclaim-b3.md
T
flyemoji 096d59716e docs(changes): backfill detail docs for pre-ledger functional commits
Retroactively author 15 grouped detail docs covering the backend
functional (feat/fix) commits made before the change ledger was
established (fad48ff), closing the ledger's detail-doc axis for the
pre-convention history. Each doc groups a feature's constituent commits,
lists their SHAs with subjects, and carries a backfill note stating it
was reconstructed from git history on 2026-07-07 and not independently
re-verified (current tree green at 9911b8c).

Add a Detail docs section to INDEX.md linking every detail doc (the 6
existing + 15 backfill) to the commit(s) it covers, so a doc is findable
from the index without a column on the auto-generated ledger table. Catch
the table up with the missing 9911b8c row.

Scope: backend (Go/Java/K8s) only, per the ledger's stated convention
that frontend/panel commits are the collaborator's UI work; non-functional
commits (docs/style/chore/refactor) keep their table row without a
dedicated detail doc.
2026-07-07 20:55:51 +09:00

2.0 KiB
Raw Blame History

§B3 username-collision reclaim + account migration (ledger backfill)

  • Type: feature — retroactive ledger entry
  • Date: 2026-06-27 – 2026-07-05
  • Area: internal/api (internal-face reclaim/blacklist, account migrate), internal/store (migration 0006)
  • Commits:
    • a29571d feat(api): reclaim squatted usernames for Mojang-priority players (§B3, 正版优先) — POST /internal/player/reclaim bars the squatter UUID + stashes its data (30-day hold) in one transaction, idempotent, returns the first reclaim's expiry; GET /internal/player/blacklist/{mc_uuid} is the login-gate check
    • fdb6efb feat(account): migrate a live account's owned servers to a new account (§B3 inherit)
  • Tasks: #30 (B3 game-login + username-collision reclaim)

What it did

Built the data layer of the Mojang-priority collision flow: when the configured third-party Yggdrasil and official Mojang issue the same username under different UUIDs, the non-genuine squatter is displaced in favour of the real Mojang owner. Both tables are keyed by mc_uuid, so the genuine player — identical username, different UUID — is never caught by the bar. fdb6efb adds the inherit half: migrating an existing account's owned servers onto a new account.

Why

Two players cannot hold one username across two Yggdrasils; the spec resolves it in the genuine Mojang owner's favour with a 30-day data hold for the displaced squatter, told the truth about how long their data is kept (the first hold's window, never a fresh now()+30d on retry).

Backfill note. Reconstructed 2026-07-07 from the commit history. Handlers + the in-memory repo contract were unit-tested at each commit; the Postgres SQL path is integration-only, and the velocity collision-routing / limbo prompt / authlib dual-backend are code-only (Java) and out of this data-layer slice. Not independently re-verified for this doc; current tree green at 9911b8c. Related: the operator-facing /felis migrate command has its own doc (felis-migrate-command).