rebreak-monorepo/docs/internal/SESSION_2026-06-08_handoff.md
chahinebrini 63fae25531 fix(android-protection): explicit specialUse FGS type — Samsung/Android 16 crash loop
RebreakVpnService.onStartCommand crashed with SecurityException because Android 16's validateForegroundServiceType rejects the implicit 2-arg startForeground(). Now passes FOREGROUND_SERVICE_TYPE_SPECIAL_USE explicitly (Google's documented best practice) and guards the call so a failed foreground promotion stops the service cleanly instead of crashing the app. Verified vs reported Galaxy A54 / Android 16 signature (97% of crash events, 1-user crash loop).

Bundles pending working-tree work across native/marketing/locales/mac + graphify-out rebuild. gitignore: google-services.json + /screenshots/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 22:33:28 +02:00

6.1 KiB

Session-Handoff 2026-06-07/08 — Magic-Windows E2E + Geräte-UI + Marketing-Prod

Marathon-Session. Stand: spät nachts 08.06. User macht Feierabend, schreibt die FAGS-Mail (Fachverband Glücksspielsucht meldet Interesse auf Vorstandsebene — strategisch riesig). Nächste Session vorbereitet (unten).


🏆 Das große Ding: ReBreak-Magic für Windows läuft E2E

Der komplette Flow ist live + verifiziert: Download (rebreak.org) → SmartScreen-Warnung → Pair (6-stelliger Code aus iPhone-App) → register → AdGuard-DNS-Client provisioniert → systemweiter Glücksspiel-Block am PC → Push „Neues Gerät verbunden" aufs iPhone. Gerät zeigt „mit ReBreak-Konto verbunden".

Zwei harte Backend-Bugs heute gefunden + gefixt (waren der Blocker)

  1. DNS-Token 64 Zeichen → AdGuard lehnt Client-ID ab (hostname label too long: got 64, max 63). Fix: randomBytes(24).hex = 48 Zeichen (register.post.ts), magic/status Regex {64}{1,63}. Commit db6db54 (gepusht + deployed).
  2. nginx-IP-Allow-Liste auf dns.rebreak.org (/control/-API) hatte die neue Staging-Box nicht drin → 403 Forbidden (sah aus wie falsches PW, war IP). Fix: allow 91.99.225.223; in /etc/nginx/sites-available/dns.rebreak.org auf rebreak-mdm + nginx-reload. Backup liegt da (.bak-*).

⚠️ Wichtige Lektion (kostete ~Stunde): falsche Box

  • ssh rebreak-server (49.13.55.22) = ALTE migrierte Box, läuft nur noch stale weiter. NICHT für Staging debuggen.
  • Echte Staging = staging.rebreak.org = 91.99.225.223 (backend/-Layout, pm2 rebreak-staging). Win-App + Deploy zeigen dahin. Memory reference_rebreak_server korrigiert.
  • AdGuard-Reproduktion + DB-Checks via Infisical-Pattern: source /etc/environment; infisical login --method=universal-auth --client-id=$INFISICAL_CLIENT_ID --client-secret=$INFISICAL_CLIENT_SECRET --silent --plaininfisical run --projectId=14b11b35-… --env=staging --token=….

Phase A (Backend) — live auf Staging (Commit a95e665)

4 Blöcke + Hard-Lock + Reveal:

  • Offline-Enroll → 410 (kein Klartext-PW-Download mehr); stationär nur via Magic
  • ProhibitDisablement im Mac-DNS-Template
  • Push „Neues Gerät verbunden" (mobile Tokens) aus magic/register
  • user_devices-Realtime-Migration (Publication)
  • Hard-Lock: server-PW (magic_removal_password) generiert/injiziert, Reveal NUR bei Account-Löschung (user/delete) + Kündigung (stripe/webhook) via Resend-Mail. Signing config-gated INAKTIV.

Marketing — live auf PROD (rebreak.org)

  • Windows-Download-Seite /download/windows (PC-Schutz korrekt geframt) + Installer public/downloads/RebreakMagic-Setup.exe (3,7 MB, aus CI-Artefakt; im Repo, überlebt rsync --delete)
  • Trial-Klarheit: Hero „14 Tage kostenlos testen" + „danach ab 3,99 €/Monat" (löst free-vs-Preis-Verwirrung; 14-Tage-Trial existiert Stripe-seitig)
  • OS-Detection (useOS): Windows-Besucher → Windows-Download, Mac → Mac
  • Pricing: Device-Cross-Section + Header/Hamburger-Nav (Floating-Tabbar raus) — war nur auf Staging, jetzt Prod
  • Deploy: MARKETING_REMOTE_DIR=/var/www/marketing-prod ./scripts/deploy-marketing.sh. Fix: --info=progress2--progress (macOS-rsync-kompatibel).

Native UI-Polish (committet LOKAL, 6 Commits ahead von origin = db6db54)

e0eb171 e2e5a10 227c30c 77ce5e5 c3478f4 ca72437 — deployen erst per App-Rebuild:

  • Device-PNG-Icons (assets/devices/*.png statt Ionicons)
  • Geräte-Detail-Sheet (Tap → Status, verbunden-seit, HalfDonut), Row antippbar
  • Trash/Menü raus → chevron-forward (Entfernen am Gerät selbst/Cooldown)
  • Slot-Anzeige: 2 volle Progress-Circles (Mobil grün / Computer blau) + darunter animierter Gesamt-Verteilungs-Balken (eigener, kein native; grün/blau-Segmente + Legende). DeviceSlotDonut (segment-API, half-Modus vorhanden aber ungenutzt), DeviceDistributionBar.
  • Status-Pill in der Liste: Online (grün) / Cooldown · noch Xh (amber, aus releaseRequestedAt) / Ungeschützt (rot).

🚀 NÄCHSTE SESSION — der eigentliche Gamechanger (User-Priorität)

„ReBreak für Windows echt magic wie Mac" = iPhone-Supervision (no-erase Self-Bind) auf Windows portieren.

  • Warum Gamechanger: erreicht die breite Masse — alle mit iPhone/iPad ohne Mac (nur Windows). MDM-enforced → erzwingt Legend-Account → Business/Umsatz.
  • Technisch plausibel: supervise-magic (supervise-magic-phase-1) basiert auf go-ios (cross-platform Go → cross-compile nach Windows). Protokoll (lockdownd, MCInstall.SetCloudConfiguration, MobileBackup2) OS-agnostisch. Windows-usbmuxd via Apple Mobile Device Support (iTunes / „Apple Geräte"-App).
  • Ungeprüft (= Spike): ob go-ios' Windows-usbmuxd den schweren MobileBackup2-Flow durchzieht. FMI/SDP-Precondition (ErrorCode 211) = gleiche Wall wie Mac.
  • Spike-Plan: supervise-magic-Go-CLI für Windows cross-compilen → echtes x64-Windows + „Apple Geräte"-App + Test-iPhone (UTM-ARM64-VM taugt für iPhone-USB-Passthrough wahrscheinlich NICHT). rebreak-binder-Territorium.

Weitere offene Threads (Prio absteigend)

  • Native-Rebuild + Push der 6 lokalen UI-Commits (am iPhone testen: Detail-Sheet/Icons/Realtime/Rings/Status)
  • Phase B Sleep/Budget (Design: magic-hardlock-offboarding) — 1-Tag/Gerät-Budget, eskal. Cooldown 4/8/12/24h, Auto-Reaktivieren 10h-default, Sleep = AdGuard filtering off
  • Signing: Magic-Profile (Cert/Sign-Proxy) + Windows-Code-Signing gegen SmartScreen (Empfehlung: Azure Trusted Signing ~10$/Mon)
  • magic/status lastSeen-Heartbeat → für echten Online/Offline-Status der Magic-Geräte in der Liste
  • Pricing-Inkonsistenz: founding_desc „1 Monat Standard" vs Banner „3 Monate Legend" (+ „Standard" ist alter Plan-Name)

🧠 FAGS (Fachverband Glücksspielsucht) — strategisch

Vorstandsvorsitzender hat Interesse gemeldet (08.06.). Fachliche Validierung + Partnerschafts-/DiGA-Türen. User schreibt die Antwort-Mail. Bei Bedarf: rebreak-strategist / diga-regulatory für Tonalität + fachliche Positionierung.