feat(doctor): deep-link findings to the page where they are actioned

Doctor findings used to be dead-end statements — 'approvals
waiting for review' left the operator to find the approvals inbox
on their own. Every finding with a dedicated surface is now one
tap away from it:

- summary tiles: modules -> store, approvals -> approvals inbox,
  audit chain -> audit log (chevron affordance, tooltip + semantics
  button; the services tile stays plain — no dedicated page)
- modules/approvals panel rows link the same way
- the event-log headline opens the audit page next to the
  existing verify button
- host-services empty state gains a 'view the configuration'
  button opening the in-Studio config viewer the hint refers to
- the update banner's release-notes URL is now an underlined,
  clickable link instead of dead text

Tiles and the panel are public callback-driven widgets so the
widget tests pump them without a live hub. New DE+EN link labels.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-18 18:02:04 +02:00
parent c18bb7f357
commit e67e0c9e73
7 changed files with 525 additions and 139 deletions

View file

@ -1184,6 +1184,11 @@
}
},
"doctorSummaryDeclared": "deklariert",
"doctorLinkStore": "Store öffnen",
"doctorLinkApprovals": "Freigaben öffnen",
"doctorLinkAudit": "Protokoll öffnen",
"doctorLinkConfig": "Konfiguration ansehen",
"doctorLinkReleaseNotes": "Versionshinweise im Browser öffnen",
"doctorModulesPanelSummary": "{n, plural, =1{1 Modul} other{{n} Module}} · {m, plural, =1{1 Fähigkeit} other{{m} Fähigkeiten}}",
"@doctorModulesPanelSummary": {
"placeholders": {

View file

@ -1208,6 +1208,11 @@
}
},
"doctorSummaryDeclared": "declared",
"doctorLinkStore": "Open the store",
"doctorLinkApprovals": "Open approvals",
"doctorLinkAudit": "Open the audit log",
"doctorLinkConfig": "View the configuration",
"doctorLinkReleaseNotes": "Open the release notes in the browser",
"doctorModulesPanelSummary": "{n, plural, =1{1 module} other{{n} modules}} · {m, plural, =1{1 capability} other{{m} capabilities}}",
"@doctorModulesPanelSummary": {
"placeholders": {

View file

@ -3662,6 +3662,36 @@ abstract class AppLocalizations {
/// **'declared'**
String get doctorSummaryDeclared;
/// No description provided for @doctorLinkStore.
///
/// In en, this message translates to:
/// **'Open the store'**
String get doctorLinkStore;
/// No description provided for @doctorLinkApprovals.
///
/// In en, this message translates to:
/// **'Open approvals'**
String get doctorLinkApprovals;
/// No description provided for @doctorLinkAudit.
///
/// In en, this message translates to:
/// **'Open the audit log'**
String get doctorLinkAudit;
/// No description provided for @doctorLinkConfig.
///
/// In en, this message translates to:
/// **'View the configuration'**
String get doctorLinkConfig;
/// No description provided for @doctorLinkReleaseNotes.
///
/// In en, this message translates to:
/// **'Open the release notes in the browser'**
String get doctorLinkReleaseNotes;
/// No description provided for @doctorModulesPanelSummary.
///
/// In en, this message translates to:

View file

@ -2132,6 +2132,21 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get doctorSummaryDeclared => 'deklariert';
@override
String get doctorLinkStore => 'Store öffnen';
@override
String get doctorLinkApprovals => 'Freigaben öffnen';
@override
String get doctorLinkAudit => 'Protokoll öffnen';
@override
String get doctorLinkConfig => 'Konfiguration ansehen';
@override
String get doctorLinkReleaseNotes => 'Versionshinweise im Browser öffnen';
@override
String doctorModulesPanelSummary(int n, int m) {
String _temp0 = intl.Intl.pluralLogic(

View file

@ -2136,6 +2136,21 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get doctorSummaryDeclared => 'declared';
@override
String get doctorLinkStore => 'Open the store';
@override
String get doctorLinkApprovals => 'Open approvals';
@override
String get doctorLinkAudit => 'Open the audit log';
@override
String get doctorLinkConfig => 'View the configuration';
@override
String get doctorLinkReleaseNotes => 'Open the release notes in the browser';
@override
String doctorModulesPanelSummary(int n, int m) {
String _temp0 = intl.Intl.pluralLogic(