feat(approvals,runs): explain approvals in place + one-click hub update (0.81.0)

Approvals: the pending card now shows its full origin — flow, step,
run id (previously dropped at the Dart mapping layer), project, and
requested-at — under an ORIGIN heading, led by a one-line intro strip
that says what the inbox is and what Approve/Reject do. Approve/Reject
buttons carry tooltips; the history dialog gains project + run id.
Fixes the approvals doc drift (title/details/reviewer ->
prompt/show/timeout_seconds). Guard: approvals_origin_test renders the
card via the hermetic fake hub and pins every origin fact.

Runs: the "hub too old" state now leads with an in-place update button
(same `chain update apply` path as the Diagnose page), the Diagnose
deeplink demoted to secondary, with a CLI-absent fallback. Guard: two
new RunsLoadErrorView widget tests.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-26 15:50:41 +02:00
parent 14f824b8ef
commit 28f6fe1a9a
16 changed files with 613 additions and 115 deletions

View file

@ -2058,6 +2058,28 @@ class AppLocalizationsDe extends AppLocalizations {
return 'Flow: $flow · Schritt: $step';
}
@override
String get approvalsIntroHelp =>
'Hier warten pausierte Flows auf Ihre Entscheidung. Jede Karte zeigt, welcher Flow an welchem Schritt hält und welche Daten er Ihnen vorlegt — Freigeben setzt den Flow fort, Ablehnen stoppt ihn mit Ihrer Begründung.';
@override
String get approvalsOriginLabel => 'HERKUNFT';
@override
String get approvalsOriginProject => 'Projekt';
@override
String get approvalsOriginRequested => 'Angefordert';
@override
String get approvalsOriginRun => 'Lauf';
@override
String get approvalsApproveTooltip => 'Setzt den Flow an diesem Schritt fort';
@override
String get approvalsRejectTooltip => 'Stoppt den Flow — mit Ihrer Begründung';
@override
String get approvalsApproveButton => 'Freigeben';
@ -3366,6 +3388,12 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get runsHubTooOldButton => 'Diagnose öffnen';
@override
String get runsHubUpdateButton => 'Hub jetzt aktualisieren';
@override
String get runsHubUpdateStarted => 'Hub wird aktualisiert…';
@override
String get runsLoadFailedTitle => 'Läufe konnten nicht geladen werden';