Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
a56c29e
feat(sleep): implement medically-grounded HMM classifier with cycle c…
Oct 25, 2026
27ae12d
feat(sleep): implement medically-grounded HMM classifier with artifac…
Oct 25, 2026
710980a
feat(sleep): add medical disclaimer to UI
Oct 25, 2026
11648af
fix(review): resolve CodeRabbit critical findings for compilation and…
Oct 25, 2026
fee56b6
fix(l10n): localize medical disclaimer
Oct 25, 2026
77b085e
fix(sleep): use 10th percentile for HR baseline and refined deep slee…
Oct 25, 2026
8b8983c
feat(alarm): pre-sync 45min before wake window for nightly HR baselin…
Oct 25, 2026
c109eed
feat(alarm): scientifically grounded light-sleep smart wake (v2)
Oct 25, 2026
8ee1b5e
fix(alarm): wire preSyncAt — extend band prompt lease 45min before wi…
Oct 25, 2026
83b95fb
fix(alarm): repair compile error and wire the trend window (review)
Oct 26, 2026
212230c
fix(review): address PR #630/#628 open points
mistral-vibe Nov 1, 2026
e865638
fix(ui): keep disclaimer visible on the sleep-detail load-failure bra…
mistral-vibe Nov 1, 2026
ca5c340
fix(review): address CodeRabbit findings on #630/#628
mistral-vibe Nov 1, 2026
2836c8c
refactor(smart-wake): drop dead hr_min_night fallback (Option A)
mistral-vibe Nov 2, 2026
746f366
merge main
abdulsaheel Nov 13, 2026
d19508e
drop unused local in the pre-sync wake test
abdulsaheel Nov 13, 2026
71e8f4c
merge main
abdulsaheel Nov 13, 2026
d49bc78
smart wake: cut windows by time, hold the fallback baseline to valid …
abdulsaheel Nov 13, 2026
8587788
test(graphs): scroll the chart into view before mounting when it star…
mistral-vibe Nov 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/data/backup_extras.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ const Map<String, String> kPrefsNotBackedUp = {
'alarm_latch_alert': 'pending latch alert for the old band arm',
'alarm_probe_pending': 'legacy pending hardware probe; never resume on another band',
'alarm_fired_at': 'last fire event from the old band, not the chosen schedule',
'smart_wake_fired_epoch': 'records that the early buzz fired for one arm on the old band; '
'a restored latch would suppress the buzz on the next night\'s arm',
'health_upload_last_ts': 'upload cursor for this installation',
'health_weight_perm_asked': 'WEIGHT write access is asked per install; '
'the new install has not asked yet',
Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/app_de.arb
Original file line number Diff line number Diff line change
Expand Up @@ -3509,6 +3509,10 @@
}
}
},
"sleepDetailMedicalDisclaimer": "Experimenteller Forschungsalgorithmus. Kein Medizinprodukt. Bei Schlafstörungen einen Arzt konsultieren.",
"@sleepDetailMedicalDisclaimer": {
"description": "Disclaimer shown on the sleep detail screen."
},
"pairBandNotSensor": "Dieses Gerät ist ein {label}, also ein Band und kein einfacher Sensor. Es wurde nichts gespeichert.",
"welcomeCoachKeyReentry": "Dein API-Schlüssel für den Coach bleibt im sicheren Speicher und wurde nicht gesichert. Gib ihn in den KI-Einstellungen erneut ein, um den Coach auf diesem Telefon zu nutzen.",
"welcomeSettingsSkipped": "{n, plural, =1{1 Einstellung in der Sicherung war nicht lesbar und wurde übersprungen} other{{n} Einstellungen in der Sicherung waren nicht lesbar und wurden übersprungen}}",
Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -16528,6 +16528,10 @@
}
}
},
"sleepDetailMedicalDisclaimer": "Experimental research algorithm. Not a medical device. Consult a physician for sleep disorders.",
"@sleepDetailMedicalDisclaimer": {
"description": "Disclaimer shown on the sleep detail screen."
},
"pairBandNotSensor": "That device is a {label}, a band, not a plain sensor. Nothing was saved.",
"@pairBandNotSensor": {
"description": "Shown when a device picked as a plain sensor turns out to be a band. Nothing was saved. {label} is the band’s name.",
Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/app_es.arb
Original file line number Diff line number Diff line change
Expand Up @@ -2927,6 +2927,10 @@
}
}
},
"sleepDetailMedicalDisclaimer": "Algoritmo experimental de investigación. No es un dispositivo médico. Consulta a un médico si tienes trastornos del sueño.",
"@sleepDetailMedicalDisclaimer": {
"description": "Disclaimer shown on the sleep detail screen."
},
"welcomeCoachKeyReentry": "Tu clave de API del asistente permanece en el almacenamiento seguro y no se incluyó en la copia. Vuelve a introducirla en los ajustes de IA para usar el asistente en este teléfono.",
"welcomeSettingsSkipped": "{n, plural, =1{1 ajuste de la copia no se pudo leer y se omitió} other{{n} ajustes de la copia no se pudieron leer y se omitieron}}",
"@welcomeSettingsSkipped": {
Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/app_fr.arb
Original file line number Diff line number Diff line change
Expand Up @@ -2898,6 +2898,10 @@
}
}
},
"sleepDetailMedicalDisclaimer": "Algorithme expérimental de recherche. Ce n'est pas un dispositif médical. Consultez un médecin en cas de troubles du sommeil.",
"@sleepDetailMedicalDisclaimer": {
"description": "Disclaimer shown on the sleep detail screen."
},
"welcomeCoachKeyReentry": "Votre clé API du coach reste dans le stockage sécurisé et n’a pas été sauvegardée. Saisissez-la à nouveau dans les réglages de l’IA pour utiliser le coach sur ce téléphone.",
"welcomeSettingsSkipped": "{n, plural, =1{1 réglage de la sauvegarde était illisible et a été ignoré} other{{n} réglages de la sauvegarde étaient illisibles et ont été ignorés}}",
"@welcomeSettingsSkipped": {
Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/app_hi.arb
Original file line number Diff line number Diff line change
Expand Up @@ -2898,6 +2898,10 @@
}
}
},
"sleepDetailMedicalDisclaimer": "प्रायोगिक शोध एल्गोरिदम। यह चिकित्सा उपकरण नहीं है। नींद से जुड़ी समस्याओं के लिए किसी चिकित्सक से परामर्श करें।",
"@sleepDetailMedicalDisclaimer": {
"description": "Disclaimer shown on the sleep detail screen."
},
"welcomeCoachKeyReentry": "आपके कोच की API कुंजी सुरक्षित स्टोरेज में रहती है और बैकअप में शामिल नहीं की गई। इस फ़ोन पर कोच इस्तेमाल करने के लिए इसे AI सेटिंग में फिर से दर्ज करें।",
"welcomeSettingsSkipped": "{n, plural, =1{बैकअप की 1 सेटिंग पढ़ी नहीं जा सकी और छोड़ दी गई} other{बैकअप की {n} सेटिंग्स पढ़ी नहीं जा सकीं और छोड़ दी गईं}}",
"@welcomeSettingsSkipped": {
Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/app_ru.arb
Original file line number Diff line number Diff line change
Expand Up @@ -7991,6 +7991,10 @@
}
}
},
"sleepDetailMedicalDisclaimer": "Экспериментальный исследовательский алгоритм. Это не медицинское устройство. При нарушениях сна обратитесь к врачу.",
"@sleepDetailMedicalDisclaimer": {
"description": "Disclaimer shown on the sleep detail screen."
},
"welcomeCoachKeyReentry": "API-ключ тренера остаётся в защищённом хранилище и не включён в резервную копию. Введите его снова в настройках ИИ, чтобы пользоваться тренером на этом телефоне.",
"welcomeSettingsSkipped": "{n, plural, one{{n} настройку из резервной копии не удалось прочитать, она пропущена} few{{n} настройки из резервной копии не удалось прочитать, они пропущены} many{{n} настроек из резервной копии не удалось прочитать, они пропущены} other{{n} настройки из резервной копии не удалось прочитать, они пропущены}}",
"@welcomeSettingsSkipped": {
Expand Down
1 change: 1 addition & 0 deletions lib/l10n/app_th.arb
Original file line number Diff line number Diff line change
Expand Up @@ -16391,6 +16391,7 @@
"whoopFirmwareWarningTitle": "ผู้ใช้ WHOOP: อย่าเชื่อมต่อกับแอป WHOOP อีก",
"whoopFirmwareWarningAction": "หากคุณใช้ OpenStrap หรือแอปโอเพนซอร์สอื่น หรือวางแผนจะเปลี่ยนไปใช้ในภายหลัง อย่าเชื่อมต่อสายรัดกับแอป WHOOP อย่างเป็นทางการอีก แอปอาจติดตั้งอัปเดตเฟิร์มแวร์โดยอัตโนมัติ ให้ถอนการติดตั้งหรือปิดใช้งานแอป WHOOP เพื่อไม่ให้แอปอัปเดตสายรัดของคุณ",
"whoopFirmwareWarningDetails": "มีรายงานเกี่ยวกับเฟิร์มแวร์ WHOOP 5.0 / MG เวอร์ชัน 50.43.1.0 และ 50.43.2.0 ว่าเข้าถึงข้อมูลไม่ได้ บลูทูธอาจยังเชื่อมต่อได้ OpenStrap ไม่สามารถออกโทเค็นสมาชิกที่ WHOOP ลงนามซึ่งจำเป็นต่อการปลดล็อกสายรัดที่ได้รับผลกระทบ เรากำลังหาทางแก้ไข แต่ยังไม่มีวิธีแก้ในตอนนี้",
"sleepDetailMedicalDisclaimer": "อัลกอริทึมวิจัยเชิงทดลอง ไม่ใช่อุปกรณ์ทางการแพทย์ หากมีปัญหาการนอนหลับ โปรดปรึกษาแพทย์",
"napAutoLogTitle": "บันทึกการงีบที่ชัดเจนโดยอัตโนมัติ",
"napAutoLogSub": "การงีบที่ตรวจพบและมีหลักฐานชัดเจนจะถูกเพิ่มโดยไม่ถาม คุณยังแก้ไขหรือลบได้",
"napAutoLogSaveFailed": "บันทึกการตั้งค่าไม่สำเร็จ ลองอีกครั้ง",
Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/app_zh.arb
Original file line number Diff line number Diff line change
Expand Up @@ -2898,6 +2898,10 @@
}
}
},
"sleepDetailMedicalDisclaimer": "实验性研究算法。非医疗设备。如有睡眠障碍,请咨询医生。",
"@sleepDetailMedicalDisclaimer": {
"description": "Disclaimer shown on the sleep detail screen."
},
"welcomeCoachKeyReentry": "教练的 API 密钥保留在安全存储中,未包含在备份内。请在 AI 设置中重新输入,以便在此手机上使用教练。",
"welcomeSettingsSkipped": "{n, plural, other{备份中有 {n} 项设置无法读取,已跳过}}",
"@welcomeSettingsSkipped": {
Expand Down
Loading