+
+ {t("insights.mood.discovery.title")}
+
+
+ {t("insights.mood.discovery.description")}
+
+
+ {moodPairs.map((pair) => {
+ const moodIsOutcome = pair.outcome === "MOOD";
+ const channelKey = moodIsOutcome ? pair.behaviour : pair.outcome;
+ const factorLabel = t(CHANNEL_LABEL_KEY[channelKey] ?? channelKey);
+ const up = pair.r >= 0;
+ const sentenceKey = moodIsOutcome
+ ? up
+ ? "insights.mood.discovery.moodUp"
+ : "insights.mood.discovery.moodDown"
+ : up
+ ? "insights.mood.discovery.outcomeUp"
+ : "insights.mood.discovery.outcomeDown";
+ return (
+ - ${pair.outcome}`}
+ className="flex flex-col gap-1 py-2 text-sm"
+ data-slot="mood-discovered-pair"
+ data-mood-role={moodIsOutcome ? "outcome" : "behaviour"}
+ data-direction={up ? "up" : "down"}
+ >
+
+ {t(sentenceKey, { factor: factorLabel })}
+
+
+ {t("insights.mood.discovery.stat", {
+ n: pair.n,
+ r: pair.r.toFixed(2),
+ q: pair.qValue.toFixed(3),
+ })}
+
+
+ );
+ })}
+
+
+ {t("insights.mood.discovery.footer", {
+ discovered: moodPairs.length,
+ tested: data.pairsTested,
+ })}
+
+
+ {t("insights.mood.discovery.disclaimer")}
+
+
+ );
+}
diff --git a/src/components/insights/mood/mood-insights-sections.tsx b/src/components/insights/mood/mood-insights-sections.tsx
index 56f705271..073d53f60 100644
--- a/src/components/insights/mood/mood-insights-sections.tsx
+++ b/src/components/insights/mood/mood-insights-sections.tsx
@@ -50,6 +50,7 @@ import {
MoodBetterDays,
type MoodBetterDayFactor,
} from "./mood-better-days";
+import { MoodDiscoveredRelations } from "./mood-discovered-relations";
/**
* v1.8.5 — additional Mood Insights sections.
@@ -250,6 +251,11 @@ export function MoodInsightsSections() {
bloodPressureSystolic={data.correlations.bloodPressureSystolic}
/>
+
+ {/* F3 — the FDR-controlled discovered mood relations. Self-fetches the
+ correlation-discovery surface and renders nothing when the operator
+ disabled it, while loading, or when no mood pair cleared the bar. */}
+