Recovery screens¶
P4 implements the empty-state and notice recipes.
The web selftest renders the actual application and intercepts API responses to
make each empty or unavailable state deterministic. Failure scenes assert that
the form retains input. Run AF_PLAYWRIGHT_ARGS=recovery.spec.ts make web-selftest-container
to reproduce the captures; every image is also attached to the test report.
| Web state | Light | Dark |
|---|---|---|
| No project registered | ![]() |
![]() |
| No sessions | ![]() |
![]() |
| No tasks | ![]() |
![]() |
| No accounts | ![]() |
![]() |
| Cannot reach the daemon | ![]() |
![]() |
| Login expired | ![]() |
![]() |
| Create failed | ![]() |
![]() |
| Archive failed | ![]() |
![]() |
| Delete session failed | ![]() |
![]() |
| Task save failed | ![]() |
![]() |
| Connecting… | ![]() |
![]() |
| Sign in | ![]() |
![]() |
| Tokenless login | ![]() |
![]() |
| Persistent notice with Dismiss | ![]() |
![]() |
Login scenes assert a centred content column and a heading above the field/action. Zero-data scenes assert the rail has no duplicate empty message. Persistent notices have an explicit Dismiss button, whose click is asserted.



























