push: off FCM — zero-dep web push (VAPID/RFC 8291) + direct APNs, per-device addressing, iOS firebase-ectomy master
- shared/push.mjs: vendor-free delivery, node:crypto/http2 only; RFC 8291 test vector + loopback e2e (mock push endpoint + mock APNs h2c) pass - push-tokens docs: kind webpush|apns, deviceId + label, topics array - new /api/push (self-notify, ntfy-style) + /api/push-devices; tell takes device: to address one device - senders migrated: mood, tell, scream (session.mjs), chat-manager, nanos - web: boot.mjs pushManager+VAPID, sw.js push/notificationclick handlers, firebase-messaging-sw self-unregisters, /api/firebase-config 410 - apple/: Firebase SDK removed (SPM, GoogleService-Info), raw APNs token to bios bridge; anonymous registration allowed, user-binds at login - rides along: dj piece audio plumbing in bios.mjs/disk.mjs (stream:speed, stream:peaks, dropped audio → dj)