fix(ui): align contextual documentation with headings

Verified with the coordinated workspace changes by devkit full run
2026-09-08T225814-186389-0000-3e3ed7cd (all seven phases passed).
This shared UI pass does not mark the individual module reviews complete.
This commit is contained in:
2026-09-09 02:03:29 +02:00
parent 0337e0cf0b
commit 0e03c3e77e
6 changed files with 15 additions and 8 deletions
+5
View File
@@ -951,6 +951,8 @@ manifest = ModuleManifest(
title="Case lifecycle, access, and evidence reference",
summary="Explains revision, status, access, and reference fields together with their durable consequences.",
body=(
"Documentation books sit beside the Cases collection heading, the selected case title, and "
"the access or decision dialog title; field help stays with its label. "
"Title and status changes append an immutable case revision guarded by the "
"expected revision and a stable idempotency key. Every accepted change also "
"appends a timeline entry with actor, time, and change reason; a terminal "
@@ -979,6 +981,9 @@ manifest = ModuleManifest(
"Revisions-, Status-, Zugriffs- und Verweisfelder gemeinsam mit ihren dauerhaften Folgen erläutern."
),
"body": (
"Dokumentationsbücher stehen neben der Überschrift der Vorgangsliste, dem Titel des "
"ausgewählten Vorgangs und dem Titel des Zugriffs- oder Entscheidungsdialogs; Feldhilfe "
"bleibt bei der Feldbezeichnung. "
"Änderungen an Titel und Status ergänzen eine unveränderliche Vorgangsrevision, geschützt durch erwartete Revision und "
"stabilen Idempotenzschlüssel. Jede akzeptierte Änderung ergänzt außerdem einen Timeline-Eintrag mit handelnder Person, "
"Zeitpunkt und Änderungsgrund; ein abschließender Status verlangt zusätzlich die Berechtigung zum Schließen. Die Sichtbarkeit "
@@ -92,10 +92,11 @@ class CasesInterfaceDocumentationContractTests(unittest.TestCase):
REPO_ROOT / "webui/src/features/cases/CaseShareDialog.tsx"
).read_text(encoding="utf-8")
self.assertIn("DocumentationHelpLink", list_page)
self.assertIn("titleHelp={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}", list_page)
self.assertNotIn("helpAction=", list_page)
for component in (
"ActionBlockerHint",
"DocumentationHelpLink",
'TextWithHelp as="div" help={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}',
"FormField",
"useUnsavedDraftGuard",
"QUICK_ACCESS_RESULT_EVENT",
@@ -105,7 +106,7 @@ class CasesInterfaceDocumentationContractTests(unittest.TestCase):
self.assertIn(component, detail_page)
for component in (
"ConfirmDialog",
"DocumentationHelpLink",
"titleHelp={<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />}",
"ReferenceSelect",
"useUnsavedDraftGuard",
):
@@ -103,6 +103,7 @@ export default function CaseDecisionDialog({
<Dialog
open={open}
title={i18nMessage("i18n:govoplan-cases.decision_title", { value0: record.case_number })}
titleHelp={<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />}
onClose={onClose}
closeDisabled={busy}
portal
@@ -123,7 +124,6 @@ export default function CaseDecisionDialog({
}
>
<div className="case-decision-content" data-help-context-id="cases.decision.editor">
<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />
{error ? <DismissibleAlert tone="danger" resetKey={error}>{error}</DismissibleAlert> : null}
<p className="case-decision-explanation">
The server verifies your current acting assignment, the effective Mandate, the exact Case revision, evidence, and legal basis before recording the outcome.
+2 -2
View File
@@ -5,6 +5,7 @@ import { ActionToolbar,
ActionBlockerHint,
Button,
DocumentationHelpLink,
TextWithHelp,
DismissibleAlert,
FormField,
IconButton,
@@ -335,7 +336,6 @@ export default function CaseDetailPage({ settings, auth }: PlatformRouteContext)
/>
</div>
) : null}
<DocumentationHelpLink reference={CASES_DOCUMENTATION} />
</ActionToolbar>
<PageScrollViewport className="case-detail-viewport">
{error &&
@@ -350,7 +350,7 @@ export default function CaseDetailPage({ settings, auth }: PlatformRouteContext)
<div className="case-detail-title-row">
<div>
<span className="case-detail-eyebrow">{humanize(record.case_type_key)}</span>
<h1>{record.title}</h1>
<TextWithHelp as="div" help={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}><h1>{record.title}</h1></TextWithHelp>
</div>
<StatusBadge status={record.closed_at ? "inactive" : "active"} label={humanize(record.status_key)} />
</div>
+1 -1
View File
@@ -173,6 +173,7 @@ export default function CaseShareDialog({
<Dialog
open={open}
title={i18nMessage("i18n:govoplan-cases.case_access_title", { value0: record.case_number })}
titleHelp={<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />}
onClose={close}
closeDisabled={busy}
portal
@@ -193,7 +194,6 @@ export default function CaseShareDialog({
}
>
<div className="case-share-content">
<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />
{error ? (
<DismissibleAlert tone="danger" resetKey={error}>{error}</DismissibleAlert>
) : null}
+2 -1
View File
@@ -90,6 +90,8 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
<main className="cases-page">
<WorkspaceFrame className="cases-shell" label="Cases" interfaceId="cases.catalogue" helpContextId="cases.page.catalogue" helpModuleId="cases">
<WorkspaceActionBar
title="Cases"
titleHelp={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}
scope="collection-pane"
variant="collection"
refreshable
@@ -131,7 +133,6 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
</label>
<span className="cases-count">{i18nMessage("i18n:govoplan-cases.case_count", { value0: total })}</span>
</>}
helpAction={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}
/>
<PageScrollViewport className="cases-list-viewport">
{error &&