docs(android): record M2 (public shard + SSE) landed
Mark M2 done in the build-progress section: the public shard widgets over /public/shard/* (hub + champ/guild/governor/house boards) and the live SSE feed with self-driven reconnect/backoff (Android-app#7). Update the status line to "M0–M2 landed; M3 next". No API change — the app consumes the existing public shard surface. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Android App — Plan
|
||||
|
||||
Status: **M0 + M1 landed; M2 (public shard + SSE) next.** This document is the
|
||||
Status: **M0–M2 landed; M3 (auth) next.** This document is the
|
||||
design contract for the `RunicGateway/Android-app` repo. It was written before implementation so the
|
||||
API changes it depends on could be landed in `website/` and `docs/` first. The authoritative API
|
||||
reference is the committed OpenAPI spec at `website/server/swagger/swagger-output.json` (regenerated
|
||||
@@ -33,7 +33,21 @@ normalization, host rewriting, `ApiResult`/`UiState` mapping, and brand-color pa
|
||||
> safe). True codegen would first require authoring the spec's component schemas as real OpenAPI
|
||||
> models.
|
||||
|
||||
**M2–M4 (functional pass) and M5 (design pass) remain.**
|
||||
✅ **M2 — public shard** (2026-07-19, `RunicGateway/Android-app#7`, functional Kotlin pass): the public
|
||||
shard widgets (§6.2) over `/public/shard/*` — a shard hub (connection status, online count, latest
|
||||
economy, presence, staff online) plus live boards for champion spawns, guilds, governors (with
|
||||
on-demand term history) and falling houses (IDOC) — and the live **SSE** feed. `ShardStreamClient`
|
||||
consumes `/public/shard/stream` over OkHttp SSE and, unlike the browser `EventSource`, drives its own
|
||||
reconnect/backoff (reset on open, no read timeout for the idle keepalive), so a dropped feed degrades
|
||||
to "offline" rather than crashing (§7). Boards seed from a snapshot then merge `*.update` / `*.remove`
|
||||
SSE deltas in place via a reusable `LiveBoard`, mirroring the website's merge semantics; DTOs are
|
||||
hand-authored + spec-aligned (as recorded for M1) and the live frames decode into the same board
|
||||
DTOs. Wired into the shared drawer (§5), all strings externalized (§2). JVM unit tests (28) cover DTO
|
||||
/ live-frame decode, the board merge, event-text formatting (parity with `lib/shardEvents.js`), and
|
||||
SSE frame parsing. No backend/API change — the app is a pure consumer of the existing public shard
|
||||
surface.
|
||||
|
||||
**M3–M4 (functional pass) and M5 (design pass) remain.**
|
||||
|
||||
**Prerequisite progress (§8):** all v1 prerequisites are **done** (2026-07-19) — ✅ password reset
|
||||
(item 2; website#75 + docs#8), ✅ role-agnostic `/auth/me/*` self surface (item 1; website#76 + docs#10),
|
||||
|
||||
Reference in New Issue
Block a user