Skip to content

feat(push): choose which notifications each device gets - #598

Merged
klNuno merged 14 commits into
mainfrom
boite/notification-kinds
Oct 19, 2026
Merged

klNuno merged 14 commits into
mainfrom
boite/notification-kinds

Conversation

@klNuno

@klNuno klNuno commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Note

Clanker Claude Opus 5.5 is responding on behalf of meetsu

Each device chooses which notifications it gets (approvals, questions, finished turns, errors), and the Android app now shows a question or an approval request even while it is open.

phone notification settings: Finished turned off, then the master switch off with the four kinds dimmed

what changed

  • Four kind switches sit under the notification switch, on the phone screen and in General on a desktop (NotificationKinds.svelte).
  • Every push carries its kind; a subscription stores its kinds and the core skips the others, forwarded group pushes included (push.ts).
  • push.kinds changes a device's kinds without resubscribing; paired devices may call it for their own subscription (access.ts).
  • An old subscription without kinds still gets every kind.
  • Permissions, plan approvals and settings cards that apply a change are approvals; every other ask is a question (requestKind).
  • The page shows its notices through the service worker for every machine: Android refuses new Notification(), so the app on its own origin showed none.
  • A page notice uses the push's tag and data, so a later push replaces it and a tap opens the right machine's thread, closed page included.

to question

pushCovers keeps the page quiet when push is on and the notice comes from a group member, assuming every member forwards to the device's push home. A member too old to forward would go silent while push is on.

verified

  • bun run check: 0 errors, architecture check included.
  • Core push, group relay, access and contract tests: 94 pass; four failed on main's push.ts.
  • UI notify, phone settings, endpoint, service worker, i18n and fake-client tests: 122 pass; the kind filter and cross-origin cases failed before.
  • Sizes against main 7593ddca, both built here (bun scripts/ci/budgets.ts measure): see Bundle size.
  • not verified: a real Web Push delivery, a physical Android or iOS phone, the Windows app.

Bundle size

uiDist +6,848 bytes (0.14 %): the four kind switches (NotificationKinds.svelte) with their strings in both catalogues, and the page notices sent through the service worker (notify.ts, sw.js). uiEntryChunk +166 bytes (0.03 %); coreJavaScript +1,915 bytes (0.04 %) for the per-subscription kinds in push.ts.

captures

Desktop, General:

desktop notification kinds

@coderabbitai

coderabbitai Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 53 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: beboite/boite/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 488d60dd-eda4-4627-9e07-6f20cedd55c2
📥 Commits

Reviewing files that changed from the base of the PR and between 9ea83fd and 1428ee5.

📒 Files selected for processing: 28
  • docs/phone.md
  • packages/contracts/src/access.ts
  • packages/contracts/src/index.ts
  • packages/contracts/src/messages.ts
  • packages/contracts/src/notification-text.ts
  • packages/core/src/access.ts
  • packages/core/src/push.ts
  • packages/core/test/group-relay.test.ts
  • packages/core/test/push.test.ts
  • packages/ui/public/sw.js
  • packages/ui/src/App.svelte
  • packages/ui/src/components/GeneralSettings.svelte
  • packages/ui/src/components/NotificationKinds.svelte
  • packages/ui/src/components/PhoneSettings.svelte
  • packages/ui/src/components/PhoneSettings.svelte.test.ts
  • packages/ui/src/lib/endpoint.test.ts
  • packages/ui/src/lib/endpoint.ts
  • packages/ui/src/lib/fake-client/pairing.ts
  • packages/ui/src/lib/notify.test.ts
  • packages/ui/src/lib/notify.ts
  • packages/ui/src/lib/service-worker.test.ts
  • packages/ui/src/lib/store.svelte.ts
  • packages/ui/src/lib/store/events.ts
  • packages/ui/src/lib/store/layout.svelte.ts
  • packages/ui/src/lib/store/notification-kinds.test.ts
  • packages/ui/src/lib/strings/en/settings.ts
  • packages/ui/src/lib/strings/fr/settings.ts
  • packages/ui/src/lib/workspace.svelte.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added documentation Improvements or additions to documentation core packages/core and packages/contracts ui packages/ui ci Workflows and CI scripts labels Oct 18, 2026
# Conflicts:
#	docs/ci.md
#	scripts/ci/budgets.json
# Conflicts:
#	docs/ci.md
#	scripts/ci/budgets.json
# Conflicts:
#	docs/ci.md
#	scripts/ci/budgets.json
# Conflicts:
#	docs/ci.md
#	scripts/ci/budgets.json
@klNuno

klNuno commented Oct 19, 2026

Copy link
Copy Markdown
Contributor Author

Note

Clanker Claude Opus 5.5 is responding on behalf of meetsu

#614 split strings.en.ts and strings.fr.ts into one file per part. When git merge origin/main stops on them, run bun scripts/migrate/split-catalogues.ts: it replays this branch's catalogue edits onto main's parts and stages them. A part both sides changed on the same lines keeps conflict markers.

# Conflicts:
#	packages/ui/src/lib/strings.en.ts
#	packages/ui/src/lib/strings.fr.ts
#	scripts/ci/budgets.json
# Conflicts:
#	docs/ci.md
#	scripts/ci/budgets.json
@klNuno

klNuno commented Oct 19, 2026

Copy link
Copy Markdown
Contributor Author

Note

Clanker Claude Opus 5.5 is responding on behalf of meetsu

#621 split packages/contracts/src/index.ts into one file per domain. When git merge origin/main stops on it, run bun scripts/migrate/split-contracts.ts: it replays this branch's contract edits onto main's domain files, rewrites their imports and stages them. A domain both sides changed on the same lines keeps conflict markers.

# Conflicts:
#	packages/contracts/src/index.ts
@klNuno
klNuno merged commit 28bc9cb into main Oct 19, 2026
30 checks passed
@klNuno
klNuno deleted the boite/notification-kinds branch October 19, 2026 09:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Workflows and CI scripts core packages/core and packages/contracts documentation Improvements or additions to documentation ui packages/ui

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant