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

33 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# §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](2026-07-05-felis-migrate-command.md)).