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 14:58:57 -05: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) 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

## 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 14:58:02 -05: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 14:58:51 -05:00
whitlocktech merged commit 837b546f49 into main 2026-07-20 14:58:57 -05:00
whitlocktech deleted branch docs/android-m7-part2-plan 2026-07-20 14:58:57 -05: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.