REPORT 07.06.2026 (Nacht-Session 06.→07.06.) — Einstieg für neue Sessions
Vorgänger: REPORT-2026-06-06.md · ADRs:
app/ARCHITEKTUR.md1–40 · Audit:UI-UX-AUDIT-2026-06-06.md· Benchmark:BENCHMARK-OPENROUTER-2026-06-06.md
§1 Was diese Session geliefert hat (alles live + committed)
UX-Audit → 4 Blöcke (ADR-33/34): Undo-Toast + ConfirmDialog + Submit-Locks +
Pydantic-Validierung · display_name-Schicht (alle 1053 Artikel KI-poliert,
polish_names.py) · Settings-Split (Verwaltung eingeklappt) · Frische-Refresh,
clamp2, Non-Food-Gruppe · A11y (focus-visible, reduced-motion, Kontrast).
Feedback-Runde 1 (16 Punkte, ADR-35): Tagebuch komplett editierbar
(Mahlzeit/Zeit/Quell-Badges) · Scan-Popup für unbekannte EANs ·
PVG-Packungsgewichte (--pack-Batch: 339 befüllt) + manueller Preis +
store-Feld · Vorrats-Checkbox-Konzept (deplete_stock, Default AN; Gerichte
anteilig) · Favoriten-Filter/Stern · Scroll-Restore + Sheet-Browser-Back ·
eGYM-Sync-Fix (Netpulse 403 = tote Session!) · Bon-Highlight bleibend ·
kJ→kcal.
OpenRouter (ADR-37, Go erteilt): Worker-LLM = google/gemini-3.1-flash-lite
mit claude-CLI-Fallback (estimate E2E: 2,0 s statt 7–11 s; photo = echte
Vision 3 s; insights bleibt CLI-agentic). Bild-KI = Nano Banana 2 via
OR-Key: 🪄 am Gericht-Bild (generate/enhance), 512px-JPEG, Vorschau mit
Verwerfen/Nochmal/Übernehmen.
HF-Kette (ADR-36/38/39 — die harten Nüsse):
- Thermomix-Falle: öffentliche Rezeptseite redirected ALLE Varianten-IDs
auf Thermomix → Rezepte NUR noch via GET /gw/api/recipes/{id} (Token);
19/19 Gerichte repariert (/api/admin/hf-repair, Audit /hf-audit = 0).
- match_food war beidseitiges Substring („Wasser"→„Fruchtgummi
Wassermelone") → exakt + Basics-Stopliste + Längen-Score.
- Generika-Mapping: foods.hf_aliases (Stufe 0 im Matching) +
dish_ingredients.hf_name; Zuordnen-Dialog v2 am Gericht: alle Zutaten
(gemappte kompakt ✓, „ändern" lädt Gemini-Chips on-demand), Basics-Toggle,
Kaskade Chips → lokale Suche → 🌐 OFF-Suche mit Anlage (Beispiel:
HF „Kokosmilch" → Freshona, nie gekauft, per OFF angelegt). Einzelzutat-🔗
überall; Um-Zuordnung räumt Alias beim alten Artikel ab.
- Artikel-Split (ADR-39): eine artId = mehrere Sorten (Fund #568
Pudding Vanille+Schoko) → ⚠️-Chip + Split-Dialog; Importer hat jetzt
Namens-Präzedenz vor artId (sonst wachsen Splits wieder zusammen).
Gesplittet: 568=Schoko, 1076=Vanille. Bon-Liste je Artikel aggregiert.
Gericht-Detail kann jetzt: Kosten je Zutat + Summe/Portion, Vorrats-Ampeln ●◐○ (auch im PVG), HF-Name → Artikel-Anzeige, Essen-Loggen mit Zutaten-Abzug.
§2 Hart erarbeitet (nicht neu entdecken!)
- HF-Rezepte: NIE über die öffentliche Seite bei Varianten-Gerichten —
/gw/api/recipes/{id}ist varianten-treu, Schema identisch. - Netpulse/eGYM: abgelaufene Session = 403, nicht 401.
- claude -p Floor ≈ 2,5–3 s (Session-Init), Resume bringt nichts, stream-json +1 s. OR-Latenz: gemini-flash-lite ~1 s, Details im Benchmark-Doc.
- OR-Bild-Preise: $3/M auf der OR-Seite sind TEXT-Tokens; Bild = ~0,067 $/1024px (Nano Banana 2).
- OFF:
product not foundheißt oft nur „diese EAN" — Schwester-EANs prüfen; Write-Back-API existiert (product_jqm2.pl, Account nötig).
§3 Offene Punkte / Roadmap
- Jaqueline: Pocket-ID-User anlegen + Erstlogin + gemeinsame iPhone-Tour (Checklisten in den Chat-Berichten der Session).
- OFF-Write-Back (EANs/Makros zurückspenden) + USDA-FDC-Fallback-Stufe.
- 🤖 Woche füllen · Mehrfach-Scan (unverändert zurückgestellt).
- Klein: K-Classic Energy beim ersten Scan store=Kaufland geben · restliche „Sonstiges" (~21) · Spacing-Vollsweep (Tokens liegen) · ai-resolve/insights perspektivisch auch auf OR (agentic-Umbau nötig).
- Bild-KI: Batch „alle Gerichte ohne Foto" wäre ein 5-Zeiler im bestehenden Endpoint-Muster, wenn gewünscht.
§4 Betrieb unverändert
Cron-Worker laufen (ai-jobs 2-s-Loop, 07:45 Bons, 08:10 HF, 03:30 Backup).
OPENROUTER_API_KEY jetzt auch in der Container-Env (compose). Neue
Admin-Endpoints: hf-repair, hf-audit, backfill-diary-names. polish_names.py:
--groups, --pack, Namen-Default; alle OR-beschleunigt.
§5 Tagessession 07.06. — Capacitor-Hülle + SideStore-MVP (LIVE) 📱
Der PWA-Kamera-Knoten ist durchschlagen: native Capacitor-Hülle läuft auf
Dennis' iPhone, Live-Barcode-Scan funktioniert (erste echte Nutzung!).
Spec/Plan: docs/superpowers/{specs,plans}/2026-06-07-capacitor-sidestore-mvp*.
- Geräte-Code-Login (ADR-40): WKWebView kann kein WebAuthn → Einstellungen
erzeugen 8-stelligen Einmal-Code (
device_codes, 10 min),/api/auth/loginzeigt bei UASilverscaleAppeine Code-Seite,/api/auth/device-loginsetzt normale 180-Tage-Session. Curl+Playwright-verifiziert. app/ios-shell/: Capacitor-Remote-Modus (lädt Domain live → Frontend- Deploys erreichen die App ohne IPA-Rebuild), README = komplette Mac-Anleitung. Xcode-Projekt (ios/) kommt vom Mac-Klon.- SideStore-Realität (Doku stimmt nicht mehr mit alter Recherche überein): Installation heute via iloader + LocalDevVPN (kein AltServer/ jitterbugpair/StosVPN mehr). Stolpersteine dokumentiert: 2FA-Code der frischen Apple-ID kommt per SMS (keine „Apple-Geräte" vorhanden) · „SideStore could not determine UDID" = LocalDevVPN nicht verbunden — „bei Bedarf verbinden" reicht NICHT, manuell verbinden und AN lassen (sonst scheitert auch der 7-Tage-Auto-Refresh!).
- Sheet-Stack-Bugfix (Beifang, browser-unabhängig): Gestapelte Sheets
(FoodSheet→ScanSheet) schlossen sich gegenseitig übers Aufräum-popstate —
Essen-Loggen per Scan verschwand kommentarlos. Fix in
Sheet.svelte(modulweiter Stack, ein Listener, Aufräum-Pops geschluckt); Zurück-Geste schließt jetzt korrekt nur das oberste Sheet. Playwright-Repro + 2 Regressions-Checks grün. - Git-Workflow Mac↔VPS: Mac-Klon (
~/xcode/silverscale, clone viadennis@192.168.3.8:silverscale) kann jetzt direkt pushen (receive.denyCurrentBranch=updateInstead); scheitert sauber, wenn der VPS-Worktree dirty ist → dann hier erst committen. - Nebenschauplatz Terminal: tmux-Dauersession „claude" + Ghostty-Terminfo
- SSH-Keepalives (Details im Memory-Verzeichnis; Links = ⌘⇧+Klick).
- here.now-Skill installiert: MD-Doku wird ab jetzt als gerenderte URL
published (
~/.agents/skills/here-now/, anonyme Sites = 24 h).
Offen für die nächsten Sessions: 1. Jaqueline komplett: Pocket-ID-User + Erstlogin (§3.1) und SideStore auf ihrem iPhone (gleiche Apple-ID dfisch86@gmail.com, gleiche IPA, eigene Prozedur ~15 min, README in app/ios-shell). 2. 14.06. Refresh-Stichtag: Startet die App noch ohne manuellen Refresh? (= letztes MVP-Kriterium; erst danach 99-€-TestFlight-Frage.) 3. Spec-Checkliste in docs/superpowers/specs/ spiegelt den Live-Stand.