2.0 KiB
2.0 KiB
Features
- DM screen: info sheet (85% height, FormSheet) with shared media grid (3-col), partner profile link, image lightbox
- DM screen: avatar tap in header navigates to partner profile
- DM screen: info icon (ℹ) in header opens info sheet
- Coach: Instagram-style voice recording bar — trash (left) + waveform + timer (center) + send (right)
- Coach: silence/speech detection via audio metering — dots when silent, animated bars when speaking
- Coach: trash button flashes red briefly on cancel (Instagram-style)
- iOS Layer 3: Screen Time Passcode setup flow — generate code, set in iOS Settings, stored on backend
Fixes
- Android: Force Stop bypass blocked — Samsung SubSettings/FrameLayout class detection fixed in a11y tamper lock
- Android: Force Stop confirmation dialog now detected and blocked
- Android: a11y service label corrected to "ReBreak — Schutz" (HIGH_CONFIDENCE_KEYWORD match)
- Arabic STT: switched to Deepgram nova-3 (nova-2-general dropped Arabic support)
- DM: scroll-to-bottom now reliable via scrollToOffset(999999) on Android (scrollToEnd miscalculates content height)
- DM: voice recording timer uses Date.now() diff — eliminates Android setInterval jitter
- DM: voice bars fill full width via flex:1 + space-evenly
- DNS filter: own domains (rebreak.org, rebreak.app) bypass blocklist — fixes OAuth Google callback
Backend
- Mail classifier v1.2: FS-token +20pts, extreme-percent (≥100%) +20pts, casino in sender name +30pts, block threshold lowered 50→40
- Screen Time Passcode API: POST/GET /api/protection/screentime-passcode
- mail_classification_samples row-cap cron: max 100k rows, daily pruning (prevents disk-full)
Infrastructure
- CI/CD: race condition fixed — deploy lock prevents webhook + GH-Actions colliding
- CI/CD: health check retry loop (12×5s = 60s max) instead of single sleep 5
- Hetzner: 20GB block volume attached, Docker moved to /mnt/data (freed 14GB on root)
- Deepgram nova-2-general → nova-3 for all languages