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

@ -3554,6 +3554,48 @@ abstract class AppLocalizations {
/// **'Flow: {flow} · Step: {step}'**
String approvalsFlowStepMeta(String flow, String step);
/// No description provided for @approvalsIntroHelp.
///
/// In en, this message translates to:
/// **'Paused flows waiting for your decision. Each card shows which flow is holding at which step and what data it puts in front of you — Approve resumes the flow, Reject stops it with your reason.'**
String get approvalsIntroHelp;
/// No description provided for @approvalsOriginLabel.
///
/// In en, this message translates to:
/// **'ORIGIN'**
String get approvalsOriginLabel;
/// No description provided for @approvalsOriginProject.
///
/// In en, this message translates to:
/// **'Project'**
String get approvalsOriginProject;
/// No description provided for @approvalsOriginRequested.
///
/// In en, this message translates to:
/// **'Requested'**
String get approvalsOriginRequested;
/// No description provided for @approvalsOriginRun.
///
/// In en, this message translates to:
/// **'Run'**
String get approvalsOriginRun;
/// No description provided for @approvalsApproveTooltip.
///
/// In en, this message translates to:
/// **'Resumes the flow at this step'**
String get approvalsApproveTooltip;
/// No description provided for @approvalsRejectTooltip.
///
/// In en, this message translates to:
/// **'Stops the flow — with your reason'**
String get approvalsRejectTooltip;
/// No description provided for @approvalsApproveButton.
///
/// In en, this message translates to:
@ -5683,6 +5725,18 @@ abstract class AppLocalizations {
/// **'Open Doctor'**
String get runsHubTooOldButton;
/// No description provided for @runsHubUpdateButton.
///
/// In en, this message translates to:
/// **'Update hub now'**
String get runsHubUpdateButton;
/// No description provided for @runsHubUpdateStarted.
///
/// In en, this message translates to:
/// **'Updating hub…'**
String get runsHubUpdateStarted;
/// No description provided for @runsLoadFailedTitle.
///
/// In en, this message translates to: