test(skew): version-skew smoke — dev Studio against the released hub
Some checks failed
Security / Security check (push) Failing after 2s

Walks every sidebar page against an older, released chain binary
(hermetic fixture hub) and fails when any page claims 'unreachable'
although the hub answers, or renders raw error text. Run via the
platform repo's scripts/skew-smoke.sh as a Studio release gate.

Verified against the real pair hub 0.21.0 vs workspace 0.22.0: all
invariants hold. Two timing notes are handled explicitly: real-async
settles between navigations and an app teardown before the fixture
teardown keep grpc-dart's data-after-cancel race (unguarded
_responses.add, call.dart:395) from failing the walk spuriously;
the final fake-time pump drains the channel's 5-minute idle timer.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-19 02:08:48 +02:00
parent 66b26304fd
commit bfd58baa75
2 changed files with 162 additions and 0 deletions

View file

@ -6,6 +6,31 @@ lockstep.
## Unreleased
### Hardening round (test strategy, 2026-07-19)
- **Hermetic widget suites.** `HubService.instance` is injectable;
a scriptable fake (`test/support/fake_hub.dart`) answers every
member the pages touch and scripts per-RPC failures. The a11y and
responsive sweeps run against it — results no longer depend on
whether a hub happens to listen on the operator's machine (which
was the root of the historic a11y flake).
- **State-matrix sweep** (`state_matrix_test.dart`): every sidebar
page × hub condition (healthy / gone / too old / feature off) with
app-wide invariants — no "unreachable" claims while the hub
answers, no raw error text in the UI, classified states only.
- **Shared load-error view.** Store, Doctor, Audit, Approvals and
Federation no longer fold every load failure into "hub not
reachable"; `HubLoadErrorView` classifies into unreachable /
needs-newer-hub / load-failed-with-copyable-detail (new DE+EN
strings). Also fixed: the approvals page's hidden tab surfaced
load failures as uncaught async errors; the audit status bar
rendered the raw gRPC error wall instead of the friendly headline.
- **Version-skew gate.** `integration_test/skew_smoke_test.dart`
(run via the platform repo's `scripts/skew-smoke.sh`) boots the
released hub binary and walks every page with the same
invariants — the dev-Studio-against-old-hub combination is now a
release gate instead of a live-bug generator.
### Added (0.74.0)
- **Doctor findings deep-link to their page.** Summary tiles and