From a9b840f66d35d6216c7b5789dea828cfca4688b5 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Wed, 9 Sep 2026 02:03:30 +0200 Subject: [PATCH] fix(ui): anchor help to headings and document grouped navigation 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_admin/backend/manifest.py | 8 +++++++- webui/src/features/admin/AdminOverviewPanel.tsx | 2 +- webui/src/features/admin/ConfigurationChangesPanel.tsx | 3 ++- webui/src/features/admin/ConfigurationPackagesPanel.tsx | 3 ++- webui/src/features/admin/GovernanceTemplatesPanel.tsx | 3 ++- webui/src/features/admin/LanguagePackagesPanel.tsx | 2 +- webui/src/features/admin/ModuleManagementPanel.tsx | 3 ++- webui/src/features/admin/SystemSettingsPanel.tsx | 3 ++- webui/src/features/admin/TenantModuleManagementPanel.tsx | 2 +- 9 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/govoplan_admin/backend/manifest.py b/src/govoplan_admin/backend/manifest.py index d19bd39..986649d 100644 --- a/src/govoplan_admin/backend/manifest.py +++ b/src/govoplan_admin/backend/manifest.py @@ -153,7 +153,9 @@ manifest = ModuleManifest( id="admin.workspace", title="Use the administration workspace", summary="The administration workspace shows only the sections supplied by enabled modules and allowed by the current account's permissions.", - body="System and tenant administration share one workspace. Available sections can include settings, configuration changes and packages, governance templates, groups, and module lifecycle controls. A missing section normally means that its owning module is disabled or the current account lacks the required authority. System appearance settings select a validated palette default. Changing the separate palette lock additionally requires policy-write authority; a system lock suppresses tenant and personal palette choices, while an unlocked default remains inheritable and overridable. The separate advanced-override policy is disabled by default and also requires policy-write authority. Enabling it permits tenants to inherit or narrow access to Core's versioned, accessibility-validated personal accent, surface, and status editor; palette locks continue to win. Opening lists and creation or edit dialogs does not save changes. If an authorized section reports a load failure, reload after deployment and report the frontend diagnostic; do not broaden permissions or recreate records to work around a render failure.", + body="The documentation book belongs beside each administration heading, including module and " + "language management; operational actions remain in the action row. " + "System and tenant administration share one workspace. Available sections can include settings, configuration changes and packages, governance templates, groups, and module lifecycle controls. A missing section normally means that its owning module is disabled or the current account lacks the required authority. System appearance settings select a validated palette default. Changing the separate palette lock additionally requires policy-write authority; a system lock suppresses tenant and personal palette choices, while an unlocked default remains inheritable and overridable. The separate advanced-override policy is disabled by default and also requires policy-write authority. Enabling it permits tenants to inherit or narrow access to Core's versioned, accessibility-validated personal accent, surface, and status editor; palette locks continue to win. Opening lists and creation or edit dialogs does not save changes. If an authorized section reports a load failure, reload after deployment and report the frontend diagnostic; do not broaden permissions or recreate records to work around a render failure.", documentation_types=("admin", "user"), audience=("tenant_admin", "system_admin", "operator"), translations={ @@ -164,6 +166,8 @@ manifest = ModuleManifest( "Konto berechtigt ist." ), "body": ( + "Das Dokumentationsbuch steht neben der jeweiligen Verwaltungsüberschrift, auch bei Modul- " + "und Sprachverwaltung; ausführbare Aktionen bleiben in der Aktionszeile. " "Das Öffnen von Listen sowie Anlage- oder Bearbeitungsdialogen speichert keine Änderungen. Meldet ein berechtigter Bereich einen Ladefehler, laden Sie nach der Bereitstellung neu und melden Sie die Oberflächendiagnose; erweitern Sie keine Berechtigungen und legen Sie keine Datensätze erneut an, um einen Darstellungsfehler zu umgehen. " "System- und Mandantenadministration teilen sich einen Arbeitsbereich. Verfügbare Bereiche können Einstellungen, " "Konfigurationsänderungen und -pakete, Governance-Vorlagen, Gruppen und die Steuerung des Modul-Lebenszyklus umfassen. " @@ -330,6 +334,7 @@ manifest = ModuleManifest( body=( "The system navigation setting starts from module-declared defaults. Tenant settings take precedence over the system order and visibility, and personal settings take precedence over both. A system lock prevents tenant and user preferences from hiding an entry but does not prevent them from moving it. Removing the system preference restores module defaults. Navigation policy changes presentation only: module entitlement, View policy, and permissions still decide whether a surface is accessible." " Use the shared layout editor to drag modules and separators, add or restore available modules, remove entries from the rail, and label groups. Keyboard handles support Space, arrows, Enter, and Escape; arrow buttons also move individual entries. Collapsed rails retain group dividers. Changes stay in the page draft until Save, and Use inherited layout restores live module defaults rather than copying them. Removing a navigation entry never uninstalls a module or deletes its records." + " Standard grouping needs no saved system configuration: Work; Services and cases; Records and documents; Communication; Meetings and decisions; Data and assurance; People and responsibility. Empty or unauthorized groups stay absent. Expanded rails show headings without divider lines; collapsed rails replace headings with horizontal group boundaries. The editor distinguishes inheritance, custom grouping and an explicitly flat layout. A deliberately flat layout is not silently reset. Use inherited layout and Save removes only the system override; it does not erase tenant or personal preferences. Personal over tenant over system over standard remains the baseline, and higher-level visibility locks remain enforced." ), documentation_types=("admin",), audience=("system_admin",), @@ -349,6 +354,7 @@ manifest = ModuleManifest( "nur die Darstellung; Modulberechtigung, View-Richtlinie und Zugriffsrechte bestimmen weiterhin, ob eine Oberfläche " "erreichbar ist." " Im gemeinsamen Anordnungseditor ziehen Sie Module und Trennlinien, ergänzen verfügbare Module, entfernen Einträge aus der Leiste und benennen Gruppen. Tastaturgriffe unterstützen Leertaste, Pfeile, Eingabe und Escape; Pfeilschaltflächen verschieben einzelne Einträge ebenfalls. Eingeklappte Leisten behalten Gruppentrenner. Änderungen bleiben bis zum Speichern im Seitenentwurf. Geerbte Anordnung verwenden stellt die aktuellen Modulstandardwerte wieder her, statt sie zu kopieren. Das Entfernen eines Navigationseintrags deinstalliert kein Modul und löscht keine Datensätze." + " Die Standardgruppierung benötigt keine gespeicherte Systemkonfiguration: Arbeit; Leistungen und Vorgänge; Akten und Dokumente; Kommunikation; Termine und Entscheidungen; Daten und Qualitätssicherung; Personen und Verantwortung. Leere oder nicht berechtigte Gruppen bleiben verborgen. Ausgeklappte Leisten zeigen Überschriften ohne Trennlinien; eingeklappt werden daraus horizontale Gruppengrenzen. Der Editor unterscheidet Vererbung, eigene Gruppierung und eine ausdrücklich ungegliederte Anordnung. Eine bewusst ungegliederte Anordnung wird nicht stillschweigend zurückgesetzt. Geerbte Anordnung verwenden und Speichern entfernt nur die Systemanpassung, nicht Mandanten- oder persönliche Einstellungen. Die Rangfolge persönlich vor Mandant vor System vor Standard bleibt erhalten; übergeordnete Sichtbarkeitssperren bleiben wirksam." ), } }, diff --git a/webui/src/features/admin/AdminOverviewPanel.tsx b/webui/src/features/admin/AdminOverviewPanel.tsx index a33d699..b33f908 100644 --- a/webui/src/features/admin/AdminOverviewPanel.tsx +++ b/webui/src/features/admin/AdminOverviewPanel.tsx @@ -30,7 +30,7 @@ export default function AdminOverviewPanel({ settings, onSelect, availableSectio some((value) => value !== null && value !== undefined)); return ( - }> + } description="i18n:govoplan-admin.system_wide_governance_and_tenant_local_access_m.cda72499" loading={loading} error={error} actions={<>}> {overview && <> {hasSystemMetrics && <>
i18n:govoplan-admin.system.bc0792d8
diff --git a/webui/src/features/admin/ConfigurationChangesPanel.tsx b/webui/src/features/admin/ConfigurationChangesPanel.tsx index d6f786c..12ef86f 100644 --- a/webui/src/features/admin/ConfigurationChangesPanel.tsx +++ b/webui/src/features/admin/ConfigurationChangesPanel.tsx @@ -128,11 +128,12 @@ export default function ConfigurationChangesPanel({ settings, canApprove }: {set <> } description="i18n:govoplan-admin.safety_controlled_configuration_requests_approva.e8259509" loading={loading} error={error} success={message} - actions={<>}> + actions={<>}> } description="i18n:govoplan-admin.import_preflight_approve_apply_and_export_module.29aec929" loading={loading} error={error || parsedPackage.error || parsedSuppliedData.error || ""} success={message} - actions={<>}> + actions={<>}>
diff --git a/webui/src/features/admin/GovernanceTemplatesPanel.tsx b/webui/src/features/admin/GovernanceTemplatesPanel.tsx index eb7bc44..4cf3ae1 100644 --- a/webui/src/features/admin/GovernanceTemplatesPanel.tsx +++ b/webui/src/features/admin/GovernanceTemplatesPanel.tsx @@ -225,11 +225,12 @@ export default function GovernanceTemplatesPanel({ <> } description={description} loading={loading} error={error} success={success} - actions={<>} variant="primary" onClick={openCreate} disabled={!canWrite} disabledReason={!canWrite ? ADMIN_INTERFACE_I18N.governanceWriteRequired : undefined} />}> + actions={<>} variant="primary" onClick={openCreate} disabled={!canWrite} disabledReason={!canWrite ? ADMIN_INTERFACE_I18N.governanceWriteRequired : undefined} />}>
row.id} emptyText={i18nMessage("i18n:govoplan-admin.no_central_value_templates_found.081149fa", { value0: kind })} /> diff --git a/webui/src/features/admin/LanguagePackagesPanel.tsx b/webui/src/features/admin/LanguagePackagesPanel.tsx index 9b0c0d2..7f85d14 100644 --- a/webui/src/features/admin/LanguagePackagesPanel.tsx +++ b/webui/src/features/admin/LanguagePackagesPanel.tsx @@ -192,12 +192,12 @@ export default function LanguagePackagesPanel({ return ( } description="i18n:govoplan-admin.language_package_administration_description.lp001" loading={loading} error={error} success={success} actions={<> - } diff --git a/webui/src/features/admin/ModuleManagementPanel.tsx b/webui/src/features/admin/ModuleManagementPanel.tsx index 3960a74..6d393f1 100644 --- a/webui/src/features/admin/ModuleManagementPanel.tsx +++ b/webui/src/features/admin/ModuleManagementPanel.tsx @@ -401,11 +401,12 @@ export default function ModuleManagementPanel({ settings, canWrite, canAccessMai <> } description="i18n:govoplan-admin.installed_modules_active_runtime_state_and_saved.f33907dd" loading={loading} error={error} success={success} - actions={<>}> + actions={<>}> {catalog && <> diff --git a/webui/src/features/admin/SystemSettingsPanel.tsx b/webui/src/features/admin/SystemSettingsPanel.tsx index 836d6d8..555704f 100644 --- a/webui/src/features/admin/SystemSettingsPanel.tsx +++ b/webui/src/features/admin/SystemSettingsPanel.tsx @@ -82,11 +82,12 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint return ( } description="i18n:govoplan-admin.instance_wide_defaults_and_tenant_governance_cap.096a4f97" loading={loading} error={error} success={success} - actions={<>}> + actions={<>}>
diff --git a/webui/src/features/admin/TenantModuleManagementPanel.tsx b/webui/src/features/admin/TenantModuleManagementPanel.tsx index d1f3e23..ca80e0a 100644 --- a/webui/src/features/admin/TenantModuleManagementPanel.tsx +++ b/webui/src/features/admin/TenantModuleManagementPanel.tsx @@ -211,6 +211,7 @@ export default function TenantModuleManagementPanel({ settings, scope, canWrite return ( } description={labels.description} loading={loading} error={error} @@ -231,7 +232,6 @@ export default function TenantModuleManagementPanel({ settings, scope, canWrite - } >