test: deterministic operator-guide screenshot harness

integration_test/guide_shots_test.dart boots a hermetic hub
(HubFixture), seeds demo projects (open Bürgeramt; sealed
Ratsinformation and a setup.applied audit event only when the
runner confirms an isolated $HOME), launches the app in German +
dark mode, walks every sidebar page in Cmd order with
content-aware waits, opens the workspace switcher and the setup
wizard, and writes the guide PNGs via a driverless RepaintBoundary
capture. Driven by the platform repo's scripts/regen-studio-guide.sh.

Also fixes the hub fixture's binary resolution, dead since the
rename (it looked for 'fai' and ../chain_platform/): now $CHAIN_BIN,
'chain' on PATH, then ../fai_chain/target/{release,debug}/chain —
the integration tests actually run again instead of silently
skipping.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-13 00:47:41 +02:00
parent ed2c5ace26
commit cf4024a4e2
6 changed files with 346 additions and 16 deletions

View file

@ -5,6 +5,43 @@ version + `kStudioVersion` in `lib/main.dart` stay in lockstep.
## Unreleased
### Added (guided setup on grade-1 — steps A4/A5/B1 + doc automation)
- **Clickable next steps.** After apply, the wizard renders real
Studio actions instead of CLI text: start-hub button (polls until
the daemon answers), per-module install buttons with progress/done
states (capability-name install via the hub's store index), and an
open-the-starter-flow button navigating to Flows.
- **Signature dead end resolved.** Regulated plans explain in plain
language that modules come from a signed source; the preview offers
"allow installing from the public store" as one deliberate,
reversible switch (`allow_unsigned_modules`) that re-assembles the
plan. Air-gapped plans point to the offline-bundle path instead.
- **Fresh-install auto-open + honest framing.** On a fresh hub (no
config, no `setup-plan.yaml`) the wizard opens by itself, once per
run; the welcome CTA is now "In 3 Fragen loslegen" / "Get started
in 3 questions". After the wizard closes, the onboarding checklist
re-probes and states what the assistant already covered (applied
profile from `setup-plan.yaml`).
- **Free-text AI path (phase 1.2).** "Or just describe what you want
to do": the goal goes to the configured system AI, the reply is
validated against strict enum whitelists and comes back as an
editable "this is how I read your task" reflection feeding the same
preview/apply. Privacy line states local vs. provider processing;
without a system AI the menu path stands alone.
- **Nav manifest guard.** `test/nav_manifest_test.dart` generates
`docs/nav.generated.json` from the sidebar truth (ids, order = Cmd
numbers, DE+EN labels); the platform repo checks the operator guide
against the mirrored copy.
- **Guide screenshot harness.** `integration_test/guide_shots_test.dart`
boots a hermetic hub, seeds demo projects, walks every nav page,
the workspace switcher and the setup wizard, and writes the guide
PNGs — driven by the platform repo's `scripts/regen-studio-guide.sh`.
- **Fixed:** the integration-test hub fixture still looked for the
pre-rename `fai` binary and `chain_platform/` path, so its tests
silently skipped since the rename; it now resolves `$CHAIN_BIN`,
`chain` on PATH, and `../fai_chain/target/{release,debug}/chain`.
### Added (multi-project, stage ③ — sealed areas)
- **Sealed-area connection switch.** The workspace switcher now lists