docs(android): M12 phase 6 as landed #118

Merged
whitlocktech merged 1 commits from docs/android-theming-nav-phase-6 into edge 2026-08-08 12:59:20 +00:00
Member

Docs for Android-app phase 6 of M12 — drawer sections and added links (§6.3).

Three of its rows named paths the site does not serve, and it was missing two the site does. Checked against website/client/src/App.jsx:

  • no /site/news/<idOrSlug> — a news item renders on its category page; the site's one post-detail route is the newsletter's /site/newsletter/:id;
  • no /page/<slug> — CMS pages are served from a top-level /<slug>;
  • no /contact — the app's contact form is app-only, which §6.2 already said;
  • missing: /site/atlas/:slug and /site/market/vendors/:serial.

Phase 5 hit the same class of error in §6.2's row order. Both times the fix is the same: quote the website's own source beside the table, so the app's file now carries App.jsx's route list next to SiteHeader.jsx's NAV. A resolver that does not read the site's route table cannot be right by accident.

The four decisions taken before code

  • The /<slug> CMS catch-all is in, with the site's non-CMS top-level segments (admin, account, player, site, wiki, invite, preview, api, uploads) excluded. React Router ranks its static routes above /:slug and the app has to do the same, or a link to the admin panel opens an in-app 404 instead of the real thing in a browser. The reserved list is a second piece of cross-repo coupling; it buys the case that matters most, which is that a page the admin wrote opens natively.
  • A section is a static header with indented rows, always open. A collapsible group costs remembered state per section and can hide the row the admin meant to surface.
  • A hand-off link carries a trailing icon (ExitToApp, the only "leaves the app" glyph in material-icons-core; the extended artifact is not a dependency and phase 3 already spent the APK budget). A natively-resolved link stays indistinguishable from a coded row — that is the point of resolving it.
  • The Custom Tab's absolute URL comes from LocalAssetResolver, which already resolves any site-relative path against the base URL and is already provided at the app root.

Plus: a path carrying a query or fragment hands off rather than matching lossily, and a resolved link opens like any other drawer row (navigateTopLevel, detail screen or not).

Also

"Phase 6 as landed" — the AC-1 fast path, why section is deliberately not part of NavOverride.isEmpty, the dangling-reference rule, the isEntryVisible split, and what is not gated (added links) being as load-bearing as what is. §8's phase ticked.

Code: RunicGateway/Android-app#39.


  • AI-assisted: written with Claude Code (Claude Opus 5)
Docs for Android-app phase 6 of M12 — drawer sections and added links (§6.3). ### §6.3's link table was wrong about the website Three of its rows named paths the site does not serve, and it was missing two the site does. Checked against `website/client/src/App.jsx`: - **no `/site/news/<idOrSlug>`** — a news item renders on its category page; the site's one post-detail route is the newsletter's `/site/newsletter/:id`; - **no `/page/<slug>`** — CMS pages are served from a top-level `/<slug>`; - **no `/contact`** — the app's contact form is app-only, which §6.2 already said; - missing: `/site/atlas/:slug` and `/site/market/vendors/:serial`. Phase 5 hit the same class of error in §6.2's row order. Both times the fix is the same: quote the website's own source beside the table, so the app's file now carries `App.jsx`'s route list next to `SiteHeader.jsx`'s `NAV`. A resolver that does not read the site's route table cannot be right by accident. ### The four decisions taken before code - **The `/<slug>` CMS catch-all is in**, with the site's non-CMS top-level segments (`admin`, `account`, `player`, `site`, `wiki`, `invite`, `preview`, `api`, `uploads`) excluded. React Router ranks its static routes above `/:slug` and the app has to do the same, or a link to the admin panel opens an in-app 404 instead of the real thing in a browser. The reserved list is a second piece of cross-repo coupling; it buys the case that matters most, which is that a page the admin wrote opens natively. - **A section is a static header with indented rows**, always open. A collapsible group costs remembered state per section and can hide the row the admin meant to surface. - **A hand-off link carries a trailing icon** (`ExitToApp`, the only "leaves the app" glyph in `material-icons-core`; the extended artifact is not a dependency and phase 3 already spent the APK budget). A natively-resolved link stays indistinguishable from a coded row — that is the point of resolving it. - **The Custom Tab's absolute URL comes from `LocalAssetResolver`**, which already resolves any site-relative path against the base URL and is already provided at the app root. Plus: a path carrying a query or fragment hands off rather than matching lossily, and a resolved link opens like any other drawer row (`navigateTopLevel`, detail screen or not). ### Also "Phase 6 as landed" — the AC-1 fast path, why `section` is deliberately not part of `NavOverride.isEmpty`, the dangling-reference rule, the `isEntryVisible` split, and what is *not* gated (added links) being as load-bearing as what is. §8's phase ticked. Code: RunicGateway/Android-app#39. --- - [x] AI-assisted: written with Claude Code (Claude Opus 5)
wtclaude added 1 commit 2026-08-08 12:49:53 +00:00
Corrects §6.3's link-resolution table, which named three website paths the site
does not serve (/site/news/<idOrSlug>, /page/<slug>, /contact) and missed two it
does (/site/atlas/:slug, /site/market/vendors/:serial), and records the four
drawer decisions taken before code: the /<slug> CMS catch-all with the site's
reserved segments excluded, the static section header, the hand-off icon, and
reusing LocalAssetResolver for the Custom Tab's absolute URL.

Adds "Phase 6 as landed" and ticks the phase in §8.

Co-Authored-By: Claude <noreply@anthropic.com>
whitlocktech merged commit 9091f0c760 into edge 2026-08-08 12:59:20 +00:00
whitlocktech deleted branch docs/android-theming-nav-phase-6 2026-08-08 12:59:21 +00:00
Sign in to join this conversation.
No description provided.