docs(android): plan M7 Part 2 — app UnifiedPush push notifications #21

Merged
whitlocktech merged 1 commits from docs/android-m7-part2-plan into main 2026-07-20 19:58:57 +00:00
Member

What & why

Plans M7 Part 2 (the Android app's push-notification integration) in docs/android/PLAN.md, now that Part 1 (backend) landedRunicGateway/website#78 merged 2026-07-20. Records the plan before coding, per the workspace convention. Docs-only; no code.

Changes (docs/android/PLAN.md)

  • Status flip — Part 1 (backend + docs) marked landed (was "in review") in the top status line, the "M7 plan" block, §8 item 3, and the §9 M7 milestone.
  • Detailed Part 2 plan — expanded the one-paragraph stub into a real phase plan, grounded in the merged contract (verified against the website source): the exact POST/GET/DELETE /auth/me/devices + GET|PUT /auth/me/notifications/* shapes, the eight-stream catalog, and the content-free { stream, ref } wire tickle. Ten work items (deps/manifest, core/push, Retrofit APIs + DTOs, endpoint↔backend lifecycle mirroring the M3 token teardown, the Notifications settings screen, deep-links, menu, permission UX, tests). Flags the cross-repo NTFY_ALLOWED_ORIGINS dependency for end-to-end testing. No backend work in Part 2.

Transport decision (per project owner)

The app embeds its own UnifiedPush distributorntfy is only the relay server, no second app installed, no Google Play Services. A foreground-service persistent connection to the shard's ntfy (reusing the M2 ShardStreamClient OkHttp/reconnect pattern) subscribes to the app's own random topic; the endpoint registered with the backend is that topic URL, exactly what POST /auth/me/devices expects. A PushTransport seam keeps the future FCM Play flavor cheap. Recorded the accepted tradeoff (an always-connected foreground service for instant delivery, as ntfy's own app does).

  • §13 — resolved the notification-tap deep-link open item; dropped the now-decided distributor-strategy question; recorded the embedded-distributor decision in the "Decided" list and §11.

AI disclosure

Authored with Claude Code (Claude Opus). Commits carry a Co-Authored-By: Claude trailer per org policy.

🤖 Generated with Claude Code

## What & why Plans **M7 Part 2** (the Android app's push-notification integration) in `docs/android/PLAN.md`, now that **Part 1 (backend) landed** — `RunicGateway/website#78` merged 2026-07-20. Records the plan before coding, per the workspace convention. Docs-only; no code. ## Changes (`docs/android/PLAN.md`) - **Status flip** — Part 1 (backend + docs) marked **landed** (was "in review") in the top status line, the "M7 plan" block, §8 item 3, and the §9 M7 milestone. - **Detailed Part 2 plan** — expanded the one-paragraph stub into a real phase plan, grounded in the *merged* contract (verified against the `website` source): the exact `POST/GET/DELETE /auth/me/devices` + `GET|PUT /auth/me/notifications/*` shapes, the eight-stream catalog, and the content-free `{ stream, ref }` wire tickle. Ten work items (deps/manifest, `core/push`, Retrofit APIs + DTOs, endpoint↔backend lifecycle mirroring the M3 token teardown, the Notifications settings screen, deep-links, menu, permission UX, tests). Flags the cross-repo `NTFY_ALLOWED_ORIGINS` dependency for end-to-end testing. **No backend work in Part 2.** ## Transport decision (per project owner) The app **embeds its own UnifiedPush distributor** — **ntfy is only the relay server, no second app installed, no Google Play Services**. A foreground-service persistent connection to the shard's ntfy (reusing the M2 `ShardStreamClient` OkHttp/reconnect pattern) subscribes to the app's own random topic; the endpoint registered with the backend is that topic URL, exactly what `POST /auth/me/devices` expects. A `PushTransport` seam keeps the future FCM Play flavor cheap. Recorded the accepted tradeoff (an always-connected foreground service for instant delivery, as ntfy's own app does). - **§13** — resolved the notification-tap deep-link open item; dropped the now-decided distributor-strategy question; recorded the embedded-distributor decision in the "Decided" list and §11. ## AI disclosure Authored with **Claude Code** (Claude Opus). Commits carry a `Co-Authored-By: Claude` trailer per org policy. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
wtclaude added 1 commit 2026-07-20 19:58:02 +00:00
Part 1 backend landed (website#78 merged); flip its status to landed and
expand the M7 plan block into a detailed Part 2 (app) plan, grounded in the
merged /auth/me/devices + notifications contract.

Transport decision (per user): the app EMBEDS its own UnifiedPush
distributor — ntfy is only the relay server, no second app installed, no
Google Play Services. A foreground-service persistent ntfy connection
(reusing the ShardStreamClient pattern) subscribes to the app's own topic;
the registered endpoint is that topic URL. A PushTransport seam keeps the
future FCM Play flavor cheap.

Also records the ten Part-2 work items, resolves the §13 notification-tap
deep-link open item, and drops the now-decided distributor-strategy question.

Co-Authored-By: Claude <noreply@anthropic.com>
whitlocktech approved these changes 2026-07-20 19:58:51 +00:00
whitlocktech merged commit 837b546f49 into main 2026-07-20 19:58:57 +00:00
whitlocktech deleted branch docs/android-m7-part2-plan 2026-07-20 19:58:57 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/docs#21
No description provided.