From 0a7bd5b3b41355327747ba9ffddad6575bdec7bd Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Wed, 9 Sep 2026 02:03:46 +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. --- docs/FORMS_BOUNDARY.md | 4 ++++ docs/INTERFACE_PATTERN_MIGRATION.md | 6 ++++++ src/govoplan_forms/backend/manifest.py | 7 ++++++- webui/src/features/forms/FormDefinitionDialog.tsx | 5 +++-- webui/src/features/forms/FormsPage.tsx | 3 ++- webui/src/i18n/generatedTranslations.ts | 2 ++ 6 files changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/FORMS_BOUNDARY.md b/docs/FORMS_BOUNDARY.md index a7e2d76..3f29019 100644 --- a/docs/FORMS_BOUNDARY.md +++ b/docs/FORMS_BOUNDARY.md @@ -70,6 +70,10 @@ Form definitions should carry: option, constraint, draft, attachment, signature, policy, and handoff editing. - Forms Runtime performs value validation against the resolved definition; the definition owner does not persist submissions. +- Forms consumes Core's title-help and text-help layout contracts for its + catalogue and revision dialog. Workflow books sit beside their heading; + semantic documentation stays beside the Form meaning label for the exact + definition. The placement contract does not move content ownership to Core. ## Recovery And Operations diff --git a/docs/INTERFACE_PATTERN_MIGRATION.md b/docs/INTERFACE_PATTERN_MIGRATION.md index 879512a..5cde7f0 100644 --- a/docs/INTERFACE_PATTERN_MIGRATION.md +++ b/docs/INTERFACE_PATTERN_MIGRATION.md @@ -36,3 +36,9 @@ shared section-header toolbar surface. Core therefore owns viewport, search, state, heading, and narrow-layout geometry. These contracts do not change filter scope, permissions, revision semantics, or publication consequences. English and German catalogues cover the owned route and editor vocabulary. + +Documentation books belong immediately beside their contextual text. The +catalogue uses Core's workspace title and `titleHelp`; the revision dialog uses +its title help, and the separate Form meaning label carries semantic help for +that exact definition. Field help stays beside its label. This uses Core layout +contracts and does not change revision, publication, or runtime ownership. diff --git a/src/govoplan_forms/backend/manifest.py b/src/govoplan_forms/backend/manifest.py index 9f3b97c..c891595 100644 --- a/src/govoplan_forms/backend/manifest.py +++ b/src/govoplan_forms/backend/manifest.py @@ -371,6 +371,8 @@ manifest = ModuleManifest( title="Reusable form definitions", summary="Create immutable, versioned schemas consumed by Forms Runtime and institutional services.", body=( + "Documentation books sit beside Form definitions and the revision dialog title. The separate " + "Form meaning label carries the exact definition’s semantic documentation book. " "Each revision fixes field types, options, constraints, draft, attachment, signature, policy, and handoff requirements. " "Publishing is explicit; existing submissions continue to retain their exact revision. The catalogue, filter, empty states, " "section headings, and definition field groups use the shared responsive layout language and reflow at narrow widths without " @@ -398,6 +400,9 @@ manifest = ModuleManifest( "Unveränderliche versionierte Schemata erstellen, die Forms Runtime und institutionelle Services verwenden." ), "body": ( + "Dokumentationsbücher stehen neben Formulardefinitionen und dem Titel des Revisionsdialogs. " + "Die separate Bezeichnung Formularbedeutung trägt das Buch zur semantischen Dokumentation der " + "genauen Definition. " "Jede Revision legt Feldtypen, Optionen, Einschränkungen sowie Anforderungen an Entwurf, Anlagen, Signaturen, " "Richtlinien und Übergaben fest. Die Veröffentlichung erfolgt ausdrücklich; vorhandene Einreichungen behalten ihre " "exakte Revision. Katalog, Filter, Leerzustände, Abschnittsüberschriften und Feldgruppen der Definition verwenden die " @@ -518,7 +523,7 @@ manifest = ModuleManifest( "workflow instance", ), reference_packages=("product.service-to-decision",), - migration_docs=("docs/FORMS_BOUNDARY.md",), + migration_docs=("docs/FORMS_BOUNDARY.md", "docs/INTERFACE_PATTERN_MIGRATION.md"), recovery_docs=("docs/FORMS_BOUNDARY.md",), security_docs=("docs/FORMS_BOUNDARY.md",), operations_docs=("docs/FORMS_BOUNDARY.md",), diff --git a/webui/src/features/forms/FormDefinitionDialog.tsx b/webui/src/features/forms/FormDefinitionDialog.tsx index cd6a326..e4846d8 100644 --- a/webui/src/features/forms/FormDefinitionDialog.tsx +++ b/webui/src/features/forms/FormDefinitionDialog.tsx @@ -6,6 +6,7 @@ import { FormGrid, ConfirmDialog, Dialog, DocumentationHelpLink, + TextWithHelp, DismissibleAlert, FormField as Field, IconButton, @@ -193,6 +194,7 @@ export default function FormDefinitionDialog({ } onClose={requestClose} closeDisabled={busy} portal @@ -207,9 +209,8 @@ export default function FormDefinitionDialog({ }>
- {definition && <> - + }>Form meaning diff --git a/webui/src/features/forms/FormsPage.tsx b/webui/src/features/forms/FormsPage.tsx index 8af8132..a5a0fa2 100644 --- a/webui/src/features/forms/FormsPage.tsx +++ b/webui/src/features/forms/FormsPage.tsx @@ -162,6 +162,8 @@ export default function FormsPage({ settings, auth }: PlatformRouteContext) {
} scope="workspace" variant="collection" refreshable @@ -187,7 +189,6 @@ export default function FormsPage({ settings, auth }: PlatformRouteContext) { {total} } createAction={} - helpAction={} /> {error && {error}} diff --git a/webui/src/i18n/generatedTranslations.ts b/webui/src/i18n/generatedTranslations.ts index bb58a70..83e1b18 100644 --- a/webui/src/i18n/generatedTranslations.ts +++ b/webui/src/i18n/generatedTranslations.ts @@ -1,6 +1,7 @@ import type { PlatformTranslations } from "@govoplan/core-webui"; const en = { + "Form meaning": "Form meaning", "i18n:govoplan-forms.form_definitions": "Form definitions", "i18n:govoplan-forms.loading_reason": "Form definitions are still loading.", "i18n:govoplan-forms.busy_reason": "Another Form definition action is still running.", @@ -74,6 +75,7 @@ const en = { } as const; const de: Record = { + "Form meaning": "Formularbedeutung", "i18n:govoplan-forms.form_definitions": "Formulardefinitionen", "i18n:govoplan-forms.loading_reason": "Formulardefinitionen werden noch geladen.", "i18n:govoplan-forms.busy_reason": "Eine andere Aktion für Formulardefinitionen läuft noch.",