furtka/tests
Daniel Maksymilian Syrnicki 32ba522d59 fix(catalog): retry the boot-time sync and record failures as an error stage
On dual-stack LANs network-online.target is satisfied by the IPv6 SLAAC
address about a second before DHCPv4 lands, so the first
furtka-catalog-sync run died with 'Network is unreachable' and the next
attempt was the daily timer (OnBootSec=10min + up to 6 h jitter). The
state file stayed on 'checking' and the apps page showed 'checking…'
with nothing running — first hardware bench, 2026-08-25.

- furtka-catalog-sync.service: Restart=on-failure every 20 s, up to 8
  times in 15 min
- sync_catalog() writes stage 'error' + message on CatalogError, then
  re-raises (body moved to _sync_locked())
- apps page shows 'last sync failed: <error>' for that stage

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MScAinbyMdeNc7H2BZdnnG
2026-08-25 16:38:06 +02:00
..
test_api.py chore: ruff format 2026-05-11 20:10:04 +02:00
test_app.py fix(installer): put the 'pull the USB stick' step before the restart button 2026-08-25 16:25:25 +02:00
test_auth.py feat(auth): rate-limit failed logins with per-(user, IP) lockout 2026-04-22 17:27:14 +02:00
test_catalog.py fix(catalog): retry the boot-time sync and record failures as an error stage 2026-08-25 16:38:06 +02:00
test_cli.py fix(cli): fire on_install hooks on named CLI installs 2026-06-28 13:03:33 +02:00
test_deps.py chore: ruff format 2026-05-11 20:10:04 +02:00
test_diskprep.py fix(installer): release the target disk before archinstall partitions it 2026-08-25 15:18:39 +02:00
test_dockerops.py chore: ruff format 2026-05-11 20:10:04 +02:00
test_drives.py feat(installer): filter the boot USB out of the install drive picker 2026-04-28 12:09:19 +02:00
test_https.py fix(https): make HTTPS opt-in to stop the BAD_SIGNATURE trap on fresh installs 2026-04-21 19:30:04 +02:00
test_install_runner.py chore: ruff format 2026-05-11 20:10:04 +02:00
test_installer.py fix(install): copy app subdirectories so dependency hooks ship 2026-06-28 13:03:33 +02:00
test_manifest.py feat(apps): app-to-app dependencies with install + start hooks 2026-05-11 19:39:10 +02:00
test_passwd.py fix: unbreak upgrade path + install-lock race 2026-04-21 17:03:28 +02:00
test_reconciler.py fix(deps): give on_start hooks the consumer's stored credentials 2026-05-28 23:45:42 +02:00
test_scanner.py feat(furtka): resource-manager skeleton — manifest, scanner, CLI 2026-04-15 09:59:41 +02:00
test_sources.py feat(catalog): on-box apps catalog synced independently of core version 2026-04-20 14:16:02 +02:00
test_updater.py fix: unbreak upgrade path + install-lock race 2026-04-21 17:03:28 +02:00
test_webinstaller_assets.py fix(catalog): retry the boot-time sync and record failures as an error stage 2026-08-25 16:38:06 +02:00