Successor to s8n/auth-limbo following 2026-05-07 void-death incident. Production-grade auth/login gatekeeper aspiring to 2b2t queue robustness while explicitly avoiding pay-to-play / opaque-tier drama. AGPL-3.0. Java 21. Paper 1.21.x. Status: 0.1.0-SNAPSHOT, design phase. Architecture + roadmap docs land from parallel research agents in subsequent commits.
3 KiB
3 KiB
MISSION
AuthLimbo v2 exists to gate Minecraft logins on a hardened, AuthMe-backed public server (racked.ru) without losing players, leaking metadata, or introducing pay-to-play drama.
Three invariants are non-negotiable.
1. Privacy invariant
- No outbound telemetry. The plugin never phones home.
- No third-party SDKs. Stats, analytics, crash-reporting — all out.
- Local data stays local. Auth records, session tokens, and state files live on the operator's disk. The plugin never replicates them off-host.
- Logs are minimum-necessary. UUID + event class. No IPs in normal logs (debug-only). No chat content. No coords beyond what the bug report needs.
2. Reliability invariant
- No void deaths. A player who authenticates correctly must not die to gravity, void, or chunk-load races during the auth → spawn handoff. This is the bug v1 was written to patch (2026-05-07).
- Login is a serialised state machine. No racing tasks. Every transition is logged with timestamp + UUID + state.
- Failure modes are bounded. If the auth backend is down, players hold in limbo with a clear message — never get dumped into the live world half-authenticated.
- Restart-safe. A mid-login player when the server stops must re-enter the same flow on next join, not be stuck in a half-state.
3. No-drama invariant
- No paid priority. Ever. No queue-skip for money. See DRAMA-AVOIDANCE.md.
- No opaque tiers. If the server has trust levels, the criteria are in the repo, in plain English, and earned not bought.
- All policy changes via PR. Even operator-side. Anyone can read the history and see why a rule changed and when.
Operator
- Operator: s8n (
admin@s8n.ru) - Server: racked.ru (Minecraft Java, Paper 1.21.x, AuthMe-backed)
- Brand: racked.ru is the gameplay brand;
veiloris a separate security-company brand. Do not conflate. (See ai-lab memoryproject_brand_separation.md.)
Origin context
- 2026-05-07: racked.ru void-death incident. AuthMe post-login teleport raced against chunk load → players spawned into unloaded chunks → fell into void.
- v1 patch: F1 + F2 + F4 fixes landed in
s8n/auth-limbo1.1.0 (chunk-preload + delayed teleport + spawn-anchor verification). - v2 redesign: v1 worked, but the codebase was a rescue patch. v2 is the proper successor — reliability invariant baked into the architecture from line 1, not bolted on.
What "done" looks like for v2
A 1.0.0 release that:
- Has zero open void-death bugs and a regression test for each historical one.
- Survives a 200-concurrent-login storm test without dropping or dying.
- Carries a written security review of the auth path.
- Has an architecture doc that a new contributor can read in 30 minutes and understand the full state machine.
- Holds the no-drama invariant — no paid priority, no opaque tiers, policy changes via PR with reasoned commit messages.
When all five hold, we tag v1.0.0 and the design phase is over.