diff --git a/messages/de.json b/messages/de.json index 45a032940..13fe46be9 100644 --- a/messages/de.json +++ b/messages/de.json @@ -141,7 +141,7 @@ "aiSummaryDisclaimer": "Dieser Abschnitt wurde automatisch von einem KI-Modell erzeugt und ist nicht klinisch validiert. Er ersetzt keine ärztliche Beurteilung.", "packageReadme": "HealthLog Gesundheitsakte\n\nDieses Paket enthält:\n- report.pdf: den Gesundheitsbericht für die ärztliche Vorlage.\n- bundle.json: dieselben Daten als HL7-FHIR-R4-Dokument (Bundle), ePA-kompatibel.\n\nErstellt mit HealthLog.", "wellnessTitle": "Wellness-Zusammenfassung", - "wellnessDisclaimer": "Dies sind beschreibende Wellness-Werte, die aus deinen erfassten Signalen berechnet werden (0–100). Sie sind keine klinischen Beurteilungen oder Diagnosen.", + "wellnessDisclaimer": "Dies sind beschreibende Wellness-Werte, die aus den erfassten Signalen berechnet werden (0–100). Sie sind keine klinischen Beurteilungen oder Diagnosen.", "wellnessRecovery": "Erholung", "wellnessStress": "Stress", "wellnessStrain": "Belastung", @@ -5296,7 +5296,7 @@ "statusRevoked": "Widerrufen", "statusExpired": "Abgelaufen", "inactiveTitle": "Widerrufen und abgelaufen ({count})", - "shownOnce": "Nur einmal sichtbar. Erfassen Sie QR-Code und Passphrase jetzt — beide lassen sich später nicht wiederherstellen.", + "shownOnce": "Nur einmal sichtbar. Erfasse QR-Code und Passphrase jetzt — beide lassen sich später nicht wiederherstellen.", "qrLabel": "QR-Code", "qrAlt": "QR-Code mit Freigabelink und Passphrase", "linkLabel": "Link", @@ -6856,7 +6856,7 @@ "title": "Dokumente", "untitled": "Unbenanntes Dokument", "download": "Herunterladen", - "attachmentHint": "Diese Datei wird auf dein Gerät heruntergeladen (keine Vorschau in der Seite).", + "attachmentHint": "Diese Datei wird auf Ihr Gerät heruntergeladen (keine Vorschau in der Seite).", "exifNote": "Kamera-Metadaten (EXIF/GPS) wurden aus geteilten JPEG-, PNG- und WebP-Bildern entfernt." } }, @@ -8642,7 +8642,7 @@ "daily": { "line": { "score": "Dein Gesundheitsscore heute liegt bei {score}.", - "allClear": "Heute braucht nichts deine Aufmerksamkeit — alles verläuft normal." + "allClear": "Heute braucht nichts deine Aufmerksamkeit." }, "push": { "title": "Dein Morgenüberblick", diff --git a/messages/en.json b/messages/en.json index 29fa9297c..82501a4bb 100644 --- a/messages/en.json +++ b/messages/en.json @@ -2662,11 +2662,11 @@ "fatFreeMassTitle": "Fat-free mass", "fatFreeMassBody": "Fat-free mass is everything in your body that is not fat — muscle, bone, organs, and water. Holding or building it while losing weight usually signals healthier body composition.", "fatMassTitle": "Fat mass", - "fatMassBody": "Fat mass is the total weight of fat in your body. Some fat is essential for hormones and energy storage, but too much — especially around the abdomen — raises long-term health risk.", + "fatMassBody": "Fat mass is the total weight of fat in your body. Some fat is essential for hormones and energy storage, but too much — especially around the abdomen — raises long-term health risk (WHO 2024).", "muscleMassTitle": "Muscle mass", "muscleMassBody": "Muscle mass is the estimated weight of the muscle in your body. More muscle supports strength, metabolism, and mobility, and it tends to need active effort to preserve as you age.", "visceralFatTitle": "Visceral fat", - "visceralFatBody": "Visceral fat is the fat stored deep in the abdomen around your organs. Unlike fat under the skin, a high level is closely linked to heart disease and type 2 diabetes, so lower is generally better. The scale shows a unitless rating (about 1–12 is the healthy range, 13 and up elevated); this is a separate scale from the imaging cm² thresholds clinicians use and is not interchangeable with them.", + "visceralFatBody": "Visceral fat is the fat stored deep in the abdomen around your organs. Unlike fat under the skin, a high level is closely linked to heart disease and type 2 diabetes (AHA, Circulation 2021), so lower is generally better. The scale shows a unitless rating (about 1–12 is the healthy range, 13 and up elevated); this is a separate scale from the imaging cm² thresholds clinicians use and is not interchangeable with them.", "leanBodyMassTitle": "Lean body mass", "leanBodyMassBody": "Lean body mass is your total weight minus body fat — muscle, bone, organs, and water combined. Tracking it alongside weight shows whether changes come from muscle or from fat.", "flightsClimbedTitle": "Flights climbed", @@ -2696,7 +2696,7 @@ "audioEventsTitle": "Loud sound events", "audioEventsBody": "Loud sound events flag moments when noise around you reached a level that can harm hearing with enough exposure. Frequent events are a cue to seek quieter surroundings or hearing protection.", "daylightTitle": "Time in daylight", - "daylightBody": "Time in daylight is how long you spend in outdoor light each day. Regular daylight supports a healthy sleep-wake rhythm and mood, and time outdoors is linked to eye health.", + "daylightBody": "Time in daylight is how long you spend in outdoor light each day. Regular daylight supports a healthy sleep-wake rhythm and mood (CDC 2024), and time outdoors is linked to eye health.", "bloodGlucoseTitle": "Blood glucose", "bloodGlucoseBody": "Blood glucose is the amount of sugar in your blood, the body's main energy source. It rises after eating and settles between meals. As general guidance for adults without diabetes, a fasting reading under 100 mg/dL is normal, 100–125 is prediabetes, and 126 or above falls in the diabetes range (ADA 2024). A single high reading does not diagnose — a clinician confirms with a repeat test, and people managing diabetes use different, clinician-set targets.", "skinTemperatureTitle": "Skin temperature", @@ -2708,7 +2708,7 @@ "wristTemperatureTitle": "Wrist temperature", "wristTemperatureBody": "Wrist temperature is measured while you sleep and reported as the difference from your personal baseline, not an absolute value. A steady reading is normal, while a sustained rise can hint at illness, intense training, or a menstrual-cycle change.", "fallsTitle": "Falls", - "fallsBody": "This counts the hard falls your wearable detects. Zero is the goal; a rising count is a mobility-risk signal worth raising with a clinician, especially for older adults.", + "fallsBody": "This counts the hard falls your wearable detects. Zero is the goal; a rising count is a mobility-risk signal worth raising with a clinician, especially for older adults (CDC STEADI 2024).", "sixMinuteWalkTitle": "Six-minute walk distance", "sixMinuteWalkBody": "This is an estimate of how far you could walk in six minutes — a long-standing clinical test of mobility and cardiopulmonary endurance. The wearable figure is a proxy, not the supervised clinical test; a steady or rising trend is the useful read.", "stairAscentSpeedTitle": "Stair ascent speed", @@ -8642,7 +8642,7 @@ "daily": { "line": { "score": "Your health score today is {score}.", - "allClear": "Nothing needs your attention today — everything's tracking normally." + "allClear": "Nothing needs your attention today." }, "push": { "title": "Your morning briefing", diff --git a/messages/es.json b/messages/es.json index 6eb0a7634..fc6cbd9c5 100644 --- a/messages/es.json +++ b/messages/es.json @@ -8642,7 +8642,7 @@ "daily": { "line": { "score": "Tu puntuación de salud hoy es {score}.", - "allClear": "Hoy nada requiere tu atención: todo evoluciona con normalidad." + "allClear": "Hoy nada necesita tu atención." }, "push": { "title": "Tu resumen matinal", diff --git a/messages/fr.json b/messages/fr.json index 75b440440..e5839646e 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -8642,7 +8642,7 @@ "daily": { "line": { "score": "Ton score de santé aujourd'hui est de {score}.", - "allClear": "Rien ne requiert ton attention aujourd'hui — tout évolue normalement." + "allClear": "Rien ne requiert ton attention aujourd'hui." }, "push": { "title": "Votre résumé du matin", diff --git a/messages/it.json b/messages/it.json index af20a22e4..744b0e761 100644 --- a/messages/it.json +++ b/messages/it.json @@ -8642,7 +8642,7 @@ "daily": { "line": { "score": "Il tuo punteggio di salute oggi è {score}.", - "allClear": "Oggi nulla richiede la tua attenzione — tutto procede normalmente." + "allClear": "Oggi nulla richiede la tua attenzione." }, "push": { "title": "Il tuo riepilogo mattutino", diff --git a/messages/pl.json b/messages/pl.json index 09a3333d7..5e5e0bb6c 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -8642,7 +8642,7 @@ "daily": { "line": { "score": "Twój dzisiejszy wynik zdrowia to {score}.", - "allClear": "Dziś nic nie wymaga Twojej uwagi — wszystko przebiega normalnie." + "allClear": "Dziś nic nie wymaga Twojej uwagi." }, "push": { "title": "Twoje poranne podsumowanie", diff --git a/src/components/insights/coach-panel/coach-input.tsx b/src/components/insights/coach-panel/coach-input.tsx index a2b0e64ff..477937b5d 100644 --- a/src/components/insights/coach-panel/coach-input.tsx +++ b/src/components/insights/coach-panel/coach-input.tsx @@ -49,8 +49,13 @@ import { useTranslations } from "@/lib/i18n/context"; * fire two requests in parallel. * * v1.4.22 B4: the disclaimer ("Coach replies are generated …") moved - * out of the composer and into the sources rail footer, so the - * composer stays focused on the input affordance. + * out of the composer and into the sources rail footer. DISC-01 + * (v1.18.6) later dropped that per-page copy too, in favour of the + * one-time onboarding acknowledgment; the only in-surface "not medical + * advice" text left in this namespace is `errorNoProvider`, shown only + * when no provider is connected. The real non-diagnostic boundary is + * the guard stack (system prompt, prose-grounding check, outbound + * refusal), not a rendered disclaimer line. * * v1.18.7 (W-coach C-UI): voice dictation returns to the web composer. * The earlier placeholder mic was dropped in v1.4.25 because it did diff --git a/src/components/insights/coach-panel/sources-rail.tsx b/src/components/insights/coach-panel/sources-rail.tsx index 91a880423..3f286df51 100644 --- a/src/components/insights/coach-panel/sources-rail.tsx +++ b/src/components/insights/coach-panel/sources-rail.tsx @@ -242,10 +242,13 @@ export function SourcesRail({ className, activeScopeLabel }: SourcesRailProps) { })} {/* v1.12.0 — the clinical-decisions disclaimer used to render - here AND at the bottom of the message thread. Both are now - consolidated into a single line directly above the composer - (always visible, every viewport), so the rail no longer - carries its own copy. */} + here AND at the bottom of the message thread. DISC-01 + (v1.18.6) dropped both per-page copies in favour of the + one-time onboarding acknowledgment + (`onboarding.disclaimer.acknowledge`); the guard stack + (system prompt, prose-grounding check, outbound refusal) + carries the real non-diagnostic boundary. The rail renders + no disclaimer of its own. */} ); }