Skip to content

Add save health, durable retries, and a clearer terminal dashboard - #67

Merged
Vasanthdev2004 merged 2 commits into
mainfrom
codex/save-health-dashboard
Sep 7, 2026
Merged

Vasanthdev2004 merged 2 commits into
mainfrom
codex/save-health-dashboard

Conversation

@Vasanthdev2004

Copy link
Copy Markdown
Owner

Summary

This turns save health into a visible, actionable part of the existing CLI/dashboard and makes offline recovery restart-safe.

  • Add shared protection states, last successful upload timestamps, actionable failures, and aggregate tray health.
  • Persist upload intent atomically with snapshots; retry with backoff in both watchers, or manually via gsg retry / dashboard U.
  • Retain queued snapshots through local retention. Block damaged snapshots without deleting their files/history, and allow explicit manual revalidation after repair.
  • Serialize backup, snapshot registration, upload, restore, and purge with a separate reentrant writer lock. A missed automatic close backup is persisted and retried before uploads/cloud restores.
  • Immediately protect games discovered during rescans and honor current pause/remove/destination settings before retries.
  • Polish gsg status for 80 columns and the Textual dashboard: search, compact/wide layouts, readable timestamps and labels, explicit Safety copies, scrollable health, collapsible activity, and clearer keyboard affordances.

Dashboard

Example dashboard in an 80-column terminal

The screenshot uses a synthetic example library; no personal saves or cloud credentials are included.

Verification

  • Full suite: 394 passed on Windows / Python 3.11, including actual rclone CAS round trips.
  • Ruff and strict mypy: clean.
  • Runtime dependency declaration check: clean; no new dependency.
  • Textual keyboard/search/restore interactions, stale cloud results, empty/error states, and 80×24 / 140×40 layouts exercised.
  • All 27 dashboard tests also passed in an isolated environment with Textual 0.80.0, the minimum supported version.
  • Independent safety review found and fixed deferred-close backup loss, stale retry settings, and endless damaged-snapshot retries.

Operational notes

  • Restart older watcher processes after upgrading so they use the new writer lock.
  • Automatic retries require gsg auto or gsg watch to be running.
  • Queued/blocked snapshots can temporarily exceed max_versions; preserving pending saves takes priority over disk retention.
  • Blocked historical snapshots need their original file recovered and an explicit manual retry; new healthy backups can still upload.
  • Existing records migrate without inventing upload intent or historical upload timestamps. Protected means a completed local-recorded upload, not a fresh remote availability check.
  • No version bump, release, or automatic merge.

@Vasanthdev2004
Vasanthdev2004 merged commit 90fd62f into main Sep 7, 2026
6 checks passed
@Vasanthdev2004 Vasanthdev2004 mentioned this pull request Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant