2.0 KiB
Raw Blame History

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