HealthIOS · Test Plan

Updated 2026-05-20 · 75+ commits today · iPhone + 2 sims installed

📌 Co musisz zrobić TERAZ

✅ iPhone install DONE (2026-05-20 19:31)

1. Test fix: skeleton "Skipped" overwrite bug

✓ "✓ Sent NN KB gzipped" preserved nawet po subsequent retries
Wcześniej: każdy retry overwrote z "Skipped" mimo że success

2. Tailscale protection — alert banner + pre-flight

✓ Pre-flight 2s probe zamiast 30s timeout per failed upload
✓ Banner z 3-step troubleshooting (Tailscale status / toggle / WiFi vs cellular)

3. Hub-Claude komunikacja: Supabase claude_handoff

✓ Replaces git-based HANDOFF.md (eliminates race conditions)
Helper na Mac: ./scripts/handoff list/send/ack/resolve

1. Cold launch app (ZAWSZE PO MOIM INSTALL)

⚠️ Bez tego app dalej ma stare assets. Wszystkie fixes potrzebują fresh launch.

2. Test fix #1 (PoseFrameRecorder race — 5 min)

SUCCESS: start engine=vision → stop building payload — N frames
NADAL BUG: stop returned nil — wasCapturing=false frames=0 (zgłoś)

3. Test fix #2 Phase B (BG upload — survives lock)

BGUpload enqueued FILE.mov
BGUpload ✅ FILE.mov uploaded (XX MB) — completed mimo locked screen

4. Auto-detect peak hour (po 14d use)

⏳ Wymaga zebrania min 20 morning events przed pojawi się suggestion

5. Setup habits starter pack (NEW user)

✓ 3 habits dodane → Today card pokazuje je z streak counters
18
Ready to test
2
Pending Hub
6300+
LOC added
📲 Tools dla ciebie:
health-dashboard.f1th4p.workers.dev/test?token=... — ta strona
.../usage?token=... — live usage analytics
• App: Settings > App logs (real-time debug)

🆕 Today — verify per workflow

SHIPPED

Camera Quick Start auto-launch0b19744 / 9dfd63b

✓ Camera ON immediately, "Set 1" timer counting, voice cue "Set 1, ready"
SHIPPED

Skeleton upload status displayd40fe53

✓ "Last: ✓ Sent ~87 KB · HH:MM" zielony checkmark
⚠ "⚠ Skipped: no frames" gdy pose detection failed
○ "Off — toggle disabled" gdy toggle OFF (mimo że myślałeś że ON)
SHIPPED

Multi-region pain log z severity color5107b12 / 9bf988a

✓ History pokazuje 3 entries z różnymi kolorami
SHIPPED

"All good today" baseline + body-check protocols9bf988a

✓ Entry "All clear" zapisany z severity=0
✓ Po 3 dniach all-clear w rzędzie → PainLogStatusButton zmieni state na green "Clear streak · 3d"
SHIPPED

Caffeine entry edit (time + mg + delete)bf0385e / 264ca24

✓ Caffeine total przeliczone live w CaffeineBudgetCard
SHIPPED

Adaptive ★ badge dla most-tapped preset6017f48 / 32c083a

✓ Po 3 tapach na Espresso → ★ yellow badge + thicker yellow border pojawia się na tym chipie
SHIPPED

Adaptive Today reorder by dwell (14d)fbe7b2e

✓ Najbardziej-engaged card surface na góra group
⚠ Cold-start (<10 events) = default order (Drink → Camera → Caffeine)
SHIPPED

HabitsInventory starter packsec595b9

✓ 3 habits dodane automatycznie z dedup (jeśli już istnieje, skip)
SHIPPED

Habit "at risk" highlight (streak ≥3 + ≥18:00 nieukończony)c6d0b33

✓ HabitsInventoryCard row dla tego habitu pokazuje orange "at risk" badge + red flame + orange background
SHIPPED

Smart combos w AddMealSheet0d1d12f

✓ Tap combo → both items added do current sheet
SHIPPED

Auto re-parse legacy shake/meal0bdb205 / 9bcd718

✓ 3 separate items z proper grams + macros
SHIPPED

Watch habit check (1-tap z zegarka)d3a1d5f

✓ iPhone toggle primary pending habit (highest streak, unchecked today)
✓ Status na Watch "✓ Habit done"
SHIPPED

Anchor time suggestion z usage datab2cdc27

✓ Hint "✨ Suggested anchor: 07:00 [Adopt]"
✓ Tap Adopt → anchor zmieni się + reschedule notification
SHIPPED

Usage live dashboard (Europe/Warsaw TZ)62fd536

✓ Total events, top 15 by count, hour-of-day histogram (PL czas), weekday distribution, recent timeline 100
⏱ Time buckets dla each event reflect Europe/Warsaw NIE UTC
SHIPPED

Pain chronic pattern + clear streak signalbc0a109 / 665ef55

⚠ Chronic: red "Pattern: Left knee ×4 (avg 5.5/10)" w PainLogStatusButton
✓ Clear streak: green "Clear streak · Nd" gdy ≥3 consecutive clear days
SHIPPED

🐛 Fix #1: PoseFrameRecorder race conditionb3afaf0

✓ Settings > Recordings → "Last: ✓ Sent ~87 KB" zielony
❌ Gdy nadal "Skipped: not capturing" → zgłoś, refactor pójdzie głębiej
SHIPPED

🐛 Fix #2 Phase B: background URLSession (survives lock/suspend/kill)4e02547

[BGUpload] enqueued FILE.mov
[BGUpload] ✅ FILE.mov uploaded (XXB) — upload completed w background
[BGUpload] iOS resumed app dla session: ... — iOS wakes app post-completion
SHIPPED

iOS → Hub workout_meta multipart9f167e6

[Upload/BGUpload] attached workout_meta: NB
Hub side: D:\health-recordings\{stem}.workout_meta.json + .analysis.json ma workout_meta: {...} NOT null
SHIPPED

Friday reflection notificationa54d6f4

⏳ Wymaga aktualnego dnia (Friday eve / Sat morning), throttle 1× per Sat-Fri week
SHIPPED

Time-aware Today greetingbe23358

✓ Header pokazuje "Morning, Bartek" / "Evening wind-down" / etc. matching current hour
SHIPPED

Habits long-press → Ask coache58d566

✓ AskCoach opens z context-aware query (at-risk / high-streak / normal variants)
SHIPPED

Plan tab — CapacityBuckets tap-to-coach93eebd5

✓ AskCoachSheet opens z pre-filled query
✓ LLM auto-sends → odpowiedź z bucket-specific exercise suggestion
SHIPPED

🐛 Fix #2: auto-retry pending uploads (scenePhase.active)21f06de

[Upload] auto-retry N pending recording(s)
[Upload] auto-retry FILE.mov: ✅ Sent (X MB · Ys)
SHIPPED

In-app logger + auto-push do Supabasec7c8bdd

✓ Auto-flush co 5s (debounce) + on scenePhase.background
✓ Real-device only (sim skipped)

⏳ Pending verification (Hub-side)

PENDING HUB

Skeleton upload end-to-end630ef80 / Hub 7305b52

⏳ Hub-Claude HANDOFF czeka na pierwsze nagranie post-`d40fe53` build
PENDING HUB

Dashboard /usage shows real-device events11a04fe / b7da718

⏳ Events powinny pojawić się: tab_changed, sheet_opened, habit_toggle, drink_quick_log

📋 Test commands (Bartek convenience)

Cold launch + verify install

Verify sim/Catalyst WRITE block

✓ Zero new rows z sim use (real iPhone only writes)