mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-12 22:26:13 +00:00
Settle the suite-wide fallout of the wave
- The record-settings contract, slug-list, and section-frame tests follow the slugs that left the registry (layout children resolve their headings from the layout namespace, like production). - The orphaned settings.sections.<module>.title/description keys leave all six locales; the reverse-coverage guard flagged them the moment their nav entries stopped existing. - The operator-cap ledger read fails open on a read error — the reservation layer still meters against the same ledger, and a transient blip must not take the fallback chain down. - The reaper queue joins the subsystem surface; its healed count and the sweep's nag_dismissed join the job-fact vocabulary. - The intake-event contract fixture carries the full row the resource now declares; the workouts empty-state test asserts the source-neutral cue; the persister poll gates on rendered content first.
This commit is contained in:
1 parent
4eeaec74aa
commit
d2ff7cb769
14 files changed
+61
-92
No files matched your search
@@ -16,6 +16,21 @@ import * as React from "react";
|
||||
|
||||
import { useTranslations } from "@/lib/i18n/context";
|
||||
|
||||
/**
|
||||
* v1.37.19 — the layout-hub children left `SETTINGS_SECTION_SLUGS`; their
|
||||
* live headings resolve from `settings.sections.layout.<module>.*` (the
|
||||
* layout-groups registry), so the harness mirrors that mapping.
|
||||
*/
|
||||
const LAYOUT_CHILD_SLUGS = new Set([
|
||||
"dashboard",
|
||||
"insights",
|
||||
"medications",
|
||||
"mood",
|
||||
"labs",
|
||||
"illness",
|
||||
"vorsorge",
|
||||
]);
|
||||
|
||||
export function SettingsSectionFrame({
|
||||
slug,
|
||||
children,
|
||||
@@ -30,17 +45,22 @@ export function SettingsSectionFrame({
|
||||
}) {
|
||||
const { t } = useTranslations();
|
||||
const titleId = `settings-section-${slug}-title`;
|
||||
const isLayoutChild = LAYOUT_CHILD_SLUGS.has(slug);
|
||||
const titleKey = isLayoutChild
|
||||
? `settings.sections.layout.${slug}.title`
|
||||
: `settings.sections.${slug}.title`;
|
||||
const subtitleKey = isLayoutChild
|
||||
? `settings.sections.layout.${slug}.description`
|
||||
: `settings.sections.${slug}.subtitle`;
|
||||
|
||||
return (
|
||||
<section aria-labelledby={titleId} className="space-y-6">
|
||||
<div className="flex items-start justify-between gap-2">
|
||||
<div className="min-w-0">
|
||||
<h1 id={titleId} className="text-2xl font-bold tracking-tight">
|
||||
{t(`settings.sections.${slug}.title`)}
|
||||
{t(titleKey)}
|
||||
</h1>
|
||||
<p className="text-muted-foreground text-sm">
|
||||
{t(`settings.sections.${slug}.subtitle`)}
|
||||
</p>
|
||||
<p className="text-muted-foreground text-sm">{t(subtitleKey)}</p>
|
||||
</div>
|
||||
</div>
|
||||
{children}
|
||||
|
||||
Reference in new issue
Block a user