From 0e03c3e77ea2870363c94ff2f4f497d2b804081d Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Wed, 9 Sep 2026 02:03:29 +0200 Subject: [PATCH] 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. --- src/govoplan_cases/backend/manifest.py | 5 +++++ tests/test_interface_documentation_contract.py | 7 ++++--- webui/src/features/cases/CaseDecisionDialog.tsx | 2 +- webui/src/features/cases/CaseDetailPage.tsx | 4 ++-- webui/src/features/cases/CaseShareDialog.tsx | 2 +- webui/src/features/cases/CasesPage.tsx | 3 ++- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/govoplan_cases/backend/manifest.py b/src/govoplan_cases/backend/manifest.py index 5c0d197..df9b0da 100644 --- a/src/govoplan_cases/backend/manifest.py +++ b/src/govoplan_cases/backend/manifest.py @@ -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 " diff --git a/tests/test_interface_documentation_contract.py b/tests/test_interface_documentation_contract.py index e6cd069..08386e8 100644 --- a/tests/test_interface_documentation_contract.py +++ b/tests/test_interface_documentation_contract.py @@ -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={}", list_page) + self.assertNotIn("helpAction=", list_page) for component in ( "ActionBlockerHint", - "DocumentationHelpLink", + 'TextWithHelp as="div" help={}', "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={}", "ReferenceSelect", "useUnsavedDraftGuard", ): diff --git a/webui/src/features/cases/CaseDecisionDialog.tsx b/webui/src/features/cases/CaseDecisionDialog.tsx index 76f42a8..14dd5d1 100644 --- a/webui/src/features/cases/CaseDecisionDialog.tsx +++ b/webui/src/features/cases/CaseDecisionDialog.tsx @@ -103,6 +103,7 @@ export default function CaseDecisionDialog({ } onClose={onClose} closeDisabled={busy} portal @@ -123,7 +124,6 @@ export default function CaseDecisionDialog({ } >
- {error ? {error} : null}

The server verifies your current acting assignment, the effective Mandate, the exact Case revision, evidence, and legal basis before recording the outcome. diff --git a/webui/src/features/cases/CaseDetailPage.tsx b/webui/src/features/cases/CaseDetailPage.tsx index 388817e..3b5b996 100644 --- a/webui/src/features/cases/CaseDetailPage.tsx +++ b/webui/src/features/cases/CaseDetailPage.tsx @@ -5,6 +5,7 @@ import { ActionToolbar, ActionBlockerHint, Button, DocumentationHelpLink, + TextWithHelp, DismissibleAlert, FormField, IconButton, @@ -335,7 +336,6 @@ export default function CaseDetailPage({ settings, auth }: PlatformRouteContext) />

) : null} - {error && @@ -350,7 +350,7 @@ export default function CaseDetailPage({ settings, auth }: PlatformRouteContext)
{humanize(record.case_type_key)} -

{record.title}

+ }>

{record.title}

diff --git a/webui/src/features/cases/CaseShareDialog.tsx b/webui/src/features/cases/CaseShareDialog.tsx index 8023439..85c2913 100644 --- a/webui/src/features/cases/CaseShareDialog.tsx +++ b/webui/src/features/cases/CaseShareDialog.tsx @@ -173,6 +173,7 @@ export default function CaseShareDialog({ } onClose={close} closeDisabled={busy} portal @@ -193,7 +194,6 @@ export default function CaseShareDialog({ } >
- {error ? ( {error} ) : null} diff --git a/webui/src/features/cases/CasesPage.tsx b/webui/src/features/cases/CasesPage.tsx index 4d58690..ffd9ae9 100644 --- a/webui/src/features/cases/CasesPage.tsx +++ b/webui/src/features/cases/CasesPage.tsx @@ -90,6 +90,8 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
} scope="collection-pane" variant="collection" refreshable @@ -131,7 +133,6 @@ export default function CasesPage({ settings }: PlatformRouteContext) { {i18nMessage("i18n:govoplan-cases.case_count", { value0: total })} } - helpAction={} /> {error &&