- DogLoader now covers the whole window (dock top + _loading layer),
dims the dashboard behind it ($background 80%), draws a centered
rounded panel with a running ASCII dog and a 🐾 paw trail
- block keyboard bindings (check_action) and drop focus while refreshing;
restore focus to models table afterwards
- removed the docked progress line (covered by the overlay)
- docs updated; tests: full-screen coverage + input blocking
Widget.loading is a Textual built-in reactive that swaps the widget for the
default dots spinner. Our dashboard used the same name, so setting it True
activated the built-in indicator (dots) instead of the dog loader. Renamed
to 'refreshing' and assert app.screen.loading stays False in tests.
- DogLoader widget: ASCII dog animating while data loads, shown as a
centered overlay and a docked progress line on the dashboard
- shown on timer auto-refresh and manual refresh (r)
- bump version to 1.0.4; CHANGELOG + README updated
- tests: hidden when idle, shown during refresh, frame animation
- cli.py: remove redundant cast to str (mypy strict, click 8.5+ types prompt);
annotate prompt result explicitly
- test_storage.py: use now-relative timestamps instead of hardcoded 2026-08
dates so history-filter tests do not rot over time
- add Gitea Actions CI workflow (.gitea/workflows/ci.yml)