docs(android): the app's events screens, and the module rows that were never gated (Phase 14b) #225

Merged
whitlocktech merged 1 commits from docs/events-p14b-app into edge 2026-09-08 21:58:50 +00:00
Member

Events Phase 14b, docs half. One of two: android-app (Android-app#44), docs — both onto edge.

docs/android/PLAN.md gains M13, written before the code as this workstream requires. EVENTS_PLAN.md records 14b as built and EVENTS.md §J's Mobile row moves to built.

Absence of an answer is not an answer of absence

The rule the whole prerequisite fix rests on, and the reason M13 spends a section on it. The app could not tell a module that is not installed from a lookup that failedShardFeaturesRepository mapped every failure to "unknown", which canSee treats as visible — so on a site with no uo module every shard row rendered and every one of them 404d. Three states where the code had one:

  • a successful /public/modules read that omits the string hides the rows;
  • a failed read keeps the last answer that host gave;
  • a host that has never answered leaves the gate open.

§5 gains that beside the existing feature-gate guideline, with both failure directions spelled out, because the two gates fail differently and that difference is the bug. §6.1 gains the three public event reads.

Two defects recorded, and three more found by the walk

The milestone fixes two: the ungated module rows above, and a website path → route table wrong since the module-system cutover on 2026-08-12 — core's NAV is eight rows, not sixteen, and the nine shard rows moved to /uo/*. Two tests in the app's suite had been passing vacuously since that day.

The emulator walk then found three more, none of which 563 green tests could see: the three player game-data rows were never gated either (and the test meant to catch that asked the wrong question); score is DECIMAL(18,4) and a 318.5 made the whole response fail to decode, so a 200 rendered as a server error — latent on the public results table for every visitor; and a drawer route's view model outlives a sign-out, so a second account was shown the first account's participation history with no request made at all.

M13 records all five, because the argument for the walk is exactly that the suite was green on either side of each one.

Checks

docs has no CI. Every relative link and in-page anchor in the new sections was resolved by hand; the files are CRLF in the working tree and each diff is content-sized (--numstat 179/0, 43/13, 1/1), so none carries the \r\r\n full-file rewrite.

🤖 Generated with Claude Code

https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4

Events Phase 14b, docs half. One of **two**: `android-app` (Android-app#44), `docs` — both onto `edge`. `docs/android/PLAN.md` gains **M13**, written before the code as this workstream requires. `EVENTS_PLAN.md` records 14b as built and `EVENTS.md` §J's Mobile row moves to *built*. ## Absence of an answer is not an answer of absence The rule the whole prerequisite fix rests on, and the reason M13 spends a section on it. The app could not tell a module that is **not installed** from a lookup that **failed** — `ShardFeaturesRepository` mapped every failure to "unknown", which `canSee` treats as visible — so on a site with no `uo` module every shard row rendered and every one of them `404`d. Three states where the code had one: - a **successful** `/public/modules` read that omits the string **hides** the rows; - a **failed** read keeps the last answer that host gave; - a host that has **never** answered leaves the gate open. §5 gains that beside the existing feature-gate guideline, with both failure directions spelled out, because the two gates fail differently and that difference *is* the bug. §6.1 gains the three public event reads. ## Two defects recorded, and three more found by the walk The milestone fixes two: the ungated module rows above, and a **website path → route table wrong since the module-system cutover on 2026-08-12** — core's `NAV` is eight rows, not sixteen, and the nine shard rows moved to `/uo/*`. Two tests in the app's suite had been passing **vacuously** since that day. The emulator walk then found three more, none of which 563 green tests could see: the three *player* game-data rows were never gated either (and the test meant to catch that asked the wrong question); `score` is `DECIMAL(18,4)` and a `318.5` made the whole response fail to decode, so a `200` rendered as a server error — latent on the public results table for every visitor; and a drawer route's view model outlives a sign-out, so a second account was shown the first account's participation history with no request made at all. M13 records all five, because the argument for the walk is exactly that the suite was green on either side of each one. ## Checks `docs` has no CI. Every relative link and in-page anchor in the new sections was resolved by hand; the files are CRLF in the working tree and each diff is content-sized (`--numstat` 179/0, 43/13, 1/1), so none carries the `\r\r\n` full-file rewrite. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
wtclaude added 1 commit 2026-09-08 21:57:20 +00:00
Events Phase 14b, docs half. `docs/android/PLAN.md` gains **M13** — written before
the code, as the plan requires — and `EVENTS_PLAN.md` and `EVENTS.md` record 14b
as built.

M13 records the six org-lead decisions, the two defects the milestone fixes, and
the three the emulator walk found.

The prerequisite fix is the larger half of the milestone: the app could not tell a
module that is not installed from a lookup that failed, so on a site with no `uo`
module every shard row rendered and every one of them 404'd. **Absence of an
answer is not an answer of absence** — a successful module list that omits the
string hides the rows, a failed read keeps the last answer the host gave, and a
host that has never answered leaves the gate open. Capability and feature are two
gates that compose and answer different questions.

A second, older defect is recorded and fixed: the website path → route table had
been wrong since the module-system cutover on 2026-08-12, because core's `NAV` is
eight rows rather than sixteen and the nine shard rows moved to `/uo/*`. Two tests
in the app's suite had been passing vacuously since that day.

§5 gains the capability gate beside the feature gate, with the two failure
directions spelled out; §6.1 gains the three public event reads.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
whitlocktech merged commit c7c526a50b into edge 2026-09-08 21:58:50 +00:00
whitlocktech deleted branch docs/events-p14b-app 2026-09-08 21:58:51 +00:00
Sign in to join this conversation.
No description provided.