Merge pull request 'docs(android): record M2 (public shard + SSE) landed' (#14) from docs/android-m2-landed into main
Reviewed-on: #14 Reviewed-by: Colby Whitlock <whitlocktech@gmail.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# Android App — Plan
|
# 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
|
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
|
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
|
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
|
> safe). True codegen would first require authoring the spec's component schemas as real OpenAPI
|
||||||
> models.
|
> 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
|
**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),
|
(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