feat: guided setup — persona re-audit fixes (grade-1 round)

- Regulated path finishes without a terminal: the signed-source
  state offers 'Add a signed source…' (stores dialog with pin-a-key)
  plus the per-module install buttons and a plain-language hint why
  pinning the publisher's key matters — instead of a hint with no
  affordance.
- Apply warnings (e.g. the empty-trusted-publishers caveat) surface
  selectable in the done state instead of being swallowed.
- Truthful preview: new lines state which machine is being set up
  (server/container targets configure THIS machine), that regulated
  profiles always get the hash-chained audit log (even with WORM
  off), and that the curated reading list is stored with the setup
  record.
- Language pass: onboarding checklist in Sie-form + 'System-KI'
  (was du-form + 'System-AI'), 'Audit-Sperre' jargon replaced,
  answers file moved to a private per-dialog temp dir.
- Screenshot harness: GUIDE_SHOTS_THEME=light for light-parity
  proof runs.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-13 01:20:59 +02:00
parent cf4024a4e2
commit ddac84ce8e
9 changed files with 308 additions and 33 deletions

View file

@ -5092,7 +5092,7 @@ abstract class AppLocalizations {
/// No description provided for @setupScenTryingOutSub.
///
/// In en, this message translates to:
/// **'A relaxed workspace on this machine — no signing, no audit locking.'**
/// **'A straightforward workstation on this machine — no signature requirement, no write-protected audit log.'**
String get setupScenTryingOutSub;
/// No description provided for @setupScenTeamHub.
@ -5395,6 +5395,60 @@ abstract class AppLocalizations {
/// **'Get started in 3 questions'**
String get setupStartCta;
/// No description provided for @setupPlanRunbookLocal.
///
/// In en, this message translates to:
/// **'This machine is being set up; the hub runs locally and starts on demand.'**
String get setupPlanRunbookLocal;
/// No description provided for @setupPlanRunbookService.
///
/// In en, this message translates to:
/// **'This machine is being set up: the hub will start automatically on boot (background service). For a different server, run the setup there.'**
String get setupPlanRunbookService;
/// No description provided for @setupPlanRunbookAirgap.
///
/// In en, this message translates to:
/// **'Intended for an isolated server without internet — modules and updates arrive as offline bundles.'**
String get setupPlanRunbookAirgap;
/// No description provided for @setupPlanRunbookContainer.
///
/// In en, this message translates to:
/// **'Intended for container operation — a ready-made compose example is included.'**
String get setupPlanRunbookContainer;
/// No description provided for @setupPlanAuditChain.
///
/// In en, this message translates to:
/// **'Every step lands in a gapless, hash-chained audit log — tampering becomes detectable.'**
String get setupPlanAuditChain;
/// No description provided for @setupPlanDocs.
///
/// In en, this message translates to:
/// **'A matching reading list ({n} chapters) is stored with the setup record under ~/.chain/.'**
String setupPlanDocs(int n);
/// No description provided for @setupTrustedPublishersHint.
///
/// In en, this message translates to:
/// **'Important: when adding the source, pin the publisher\'s key (\"pin signing key\") — otherwise the hub accepts any formally valid signature, no matter whose.'**
String get setupTrustedPublishersHint;
/// No description provided for @setupAddSignedSource.
///
/// In en, this message translates to:
/// **'Add a signed source…'**
String get setupAddSignedSource;
/// No description provided for @setupApplyNotes.
///
/// In en, this message translates to:
/// **'Notes from the setup'**
String get setupApplyNotes;
/// No description provided for @setupFreeTextHint.
///
/// In en, this message translates to: