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

@ -235,11 +235,11 @@ class AppLocalizationsDe extends AppLocalizations {
'Vier Schritte zu einem funktionierenden Hub. Live-Zustand — nach jeder Änderung aktualisieren.';
@override
String get welcomeChecklistAi => 'System-AI konfigurieren';
String get welcomeChecklistAi => 'System-KI konfigurieren';
@override
String get welcomeChecklistAiHint =>
'Einstellungen → System-AI. Wird für die KI-Suche und Fehlererklärungen gebraucht.';
'Einstellungen → System-KI. Wird für die KI-Suche und Fehlererklärungen gebraucht.';
@override
String get welcomeChecklistMcp => 'Öffentliche Capability-Quelle hinzufügen';
@ -253,14 +253,14 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get welcomeChecklistModuleHint =>
'Im Store ein Modul aus der Kategorie deiner Wahl installieren. Module sind sandboxed Ch∆In-Komponenten.';
'Im Store ein Modul aus der Kategorie Ihrer Wahl installieren. Module sind isolierte (sandboxed) Ch∆In-Komponenten.';
@override
String get welcomeChecklistFlow => 'Einen gespeicherten Flow starten';
@override
String get welcomeChecklistFlowHint =>
'Flows → einen wählen → Starten. Studio bringt einige Demo-Flows mit; auch ein eigener tut\'s.';
'Flows → einen wählen → Starten. Studio bringt einige Demo-Flows mit; ein eigener funktioniert genauso.';
@override
String get welcomeChecklistAllDone => 'Alle vier Schritte erledigt.';
@ -1619,18 +1619,18 @@ class AppLocalizationsDe extends AppLocalizations {
String get maintenanceResetConfirmButton => 'Zurücksetzen';
@override
String get welcomeChecklistAllSetTitle => 'Du bist eingerichtet.';
String get welcomeChecklistAllSetTitle => 'Sie sind eingerichtet.';
@override
String get welcomeChecklistAllSetBody =>
'Drei Stränge, an denen du als nächstes ziehen kannst:';
'Drei Stränge, an denen Sie als Nächstes ziehen können:';
@override
String get welcomeChecklistNextAuditTitle => 'Audit-Log lesen';
@override
String get welcomeChecklistNextAuditBody =>
'Jede Installation, jeder Flow-Lauf, jede Freigabe landet im hash-verketteten Log. Im Protokoll-Tab siehst du, was dein Hub gemacht hat.';
'Jede Installation, jeder Flow-Lauf, jede Freigabe landet im hash-verketteten Protokoll. Im Protokoll-Tab sehen Sie, was Ihr Hub gemacht hat.';
@override
String get welcomeChecklistNextAuditButton => 'Protokoll öffnen';
@ -1650,7 +1650,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get welcomeChecklistNextModuleBody =>
'Mit `chain new module <name>` ein Rust+WASM-Scaffold erzeugen. Das module-sdk übernimmt die WIT-Plumbing; du schreibst nur ein typisiertes invoke.';
'Mit `chain new module <name>` ein Rust+WASM-Gerüst erzeugen. Das module-sdk übernimmt die WIT-Anbindung; Sie schreiben nur ein typisiertes invoke.';
@override
String get welcomeChecklistNextModuleButton => 'Doku lesen';
@ -2991,7 +2991,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get setupScenTryingOutSub =>
'Ein unkomplizierter Arbeitsplatz auf diesem Rechner — ohne Signaturen, ohne Audit-Sperre.';
'Ein unkomplizierter Arbeitsplatz auf diesem Rechner — ohne Signaturpflicht, ohne Schreibschutz für das Prüfprotokoll.';
@override
String get setupScenTeamHub => 'Ein Team-Server';
@ -3182,6 +3182,41 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get setupStartCta => 'In 3 Fragen loslegen';
@override
String get setupPlanRunbookLocal =>
'Eingerichtet wird dieser Rechner; der Hub läuft lokal und wird bei Bedarf gestartet.';
@override
String get setupPlanRunbookService =>
'Eingerichtet wird dieser Rechner: Der Hub startet künftig automatisch beim Hochfahren (Hintergrund-Dienst). Für einen anderen Server führen Sie die Einrichtung dort aus.';
@override
String get setupPlanRunbookAirgap =>
'Vorgesehen für einen isolierten Server ohne Internet — Module und Updates kommen als Offline-Paket.';
@override
String get setupPlanRunbookContainer =>
'Vorgesehen für den Betrieb im Container — ein fertiges Compose-Beispiel wird mitgeliefert.';
@override
String get setupPlanAuditChain =>
'Jeder Schritt landet in einem lückenlosen, hash-verketteten Prüfprotokoll — Manipulation wird erkennbar.';
@override
String setupPlanDocs(int n) {
return 'Eine passende Leseliste ($n Kapitel) wird mit dem Einrichtungs-Protokoll unter ~/.chain/ gespeichert.';
}
@override
String get setupTrustedPublishersHint =>
'Wichtig: Hinterlegen Sie beim Hinzufügen der Quelle den Schlüssel des Herausgebers („Signatur-Schlüssel anheften“) — sonst akzeptiert der Hub jede formal gültige Signatur, egal von wem.';
@override
String get setupAddSignedSource => 'Signierte Quelle hinzufügen…';
@override
String get setupApplyNotes => 'Hinweise aus der Einrichtung';
@override
String get setupFreeTextHint =>
'z. B.: Eingehende Anträge vorprüfen und unvollständige markieren';