testsAndMisc/python_pkg/steam_backlog_enforcer
Krzysztof kuhy Rudnicki 63354a9e2e steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data
Four bugs fixed:
- HLTB search returned 0 results for ~87 games with special chars (™, ®, &,
  standalone -, (Legacy), RHCP, etc.) — add _sanitize_search_name() and
  extend _build_search_variants() with Steam-suffix and edition stripping
- fetch_hltb_detail_missing returned immediately because `app_id not in rush`
  was always False (all keys present with -1) — fix to `rush.get(id,-1) <= 0`
- save_hltb_cache overwrote rush/leisure on confidence-only partial saves —
  now reads existing cache and preserves data when extras dicts are empty
- _filter_qualifying_games excluded 57 games with stale snapshot hours (-1)
  even though HLTB hours cache had valid data — add cache fallback

Result: stats shows Rush 64,670h / Leisure 136,807h / Worst 228,594h for
all 785 qualifying games with full rush+leisure detail.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 07:02:48 +02:00
..
tests steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
__init__.py feat: steam 100 percent extension 2026-03-02 20:29:32 +01:00
_cmd_done.py steam_backlog_enforcer: only prompt next pick after game is finished 2026-05-23 21:19:44 +02:00
_enforce_loop.py feat(steam_backlog_enforcer): harden whitelist against circumvention 2026-05-17 20:44:05 +02:00
_hltb_detail.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
_hltb_search.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
_hltb_types.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
_scanning_confidence.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
_stats.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
_whitelist.py feat(steam_backlog_enforcer): harden whitelist against circumvention 2026-05-17 20:44:05 +02:00
config.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
enforcer.py feat(steam_backlog_enforcer): harden whitelist against circumvention 2026-05-17 20:44:05 +02:00
game_install.py feat(steam_backlog_enforcer): harden whitelist against circumvention 2026-05-17 20:44:05 +02:00
hltb.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
install.sh feat: steam 100 percent extension 2026-03-02 20:29:32 +01:00
library_hider.py steam_backlog_enforcer: fix library_hider crash on invalid AppIDs + improve HLTB hour extraction 2026-05-22 15:59:18 +02:00
main.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
protondb.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
README.md feat: steam 100 percent extension 2026-03-02 20:29:32 +01:00
run.sh feat: robotgo improvements in phone focus bluetooth and printer scripts 2026-03-09 18:34:15 +01:00
scanning.py steam_backlog_enforcer: fix stats command — show real Rush/Leisure/Worst data 2026-05-28 07:02:48 +02:00
steam_api.py feat(steam_backlog_enforcer): harden whitelist against circumvention 2026-05-17 20:44:05 +02:00
steam-backlog-enforcer.service Harden runtime script deployment and enforce installer safety 2026-05-08 17:44:22 +02:00
store_blocker.py feat: robotgo improvements in phone focus bluetooth and printer scripts 2026-03-09 18:34:15 +01:00

Steam Backlog Enforcer

Forces you to 100% complete one Steam game at a time before moving on.

Features

  • Achievement tracking: Picks the next game by shortest HLTB completionist time
  • Store blocking: Blocks store.steampowered.com via /etc/hosts
  • Game uninstalling: Removes all installed games except the assigned one
  • Process enforcement: Kills unauthorized game processes
  • Tampering detection: Detects achievement unlocks on non-assigned games
  • HLTB integration: Estimates completion time with persistent cache

Setup

python -m python_pkg.steam_backlog_enforcer.main setup

Commands

Command Description
scan Scan library, fetch HLTB data, assign game
check Check if assigned game is complete
status Show current assignment and blocking
list List incomplete games from snapshot
skip Skip the currently assigned game
enforce Run enforcer (block, uninstall, kill)
unblock Remove store blocking
reset Reset all state
installed List currently installed Steam games
uninstall Interactively uninstall non-assigned games
setup First-time configuration

Enforce mode

sudo python -m python_pkg.steam_backlog_enforcer.main enforce

This will:

  1. Block Steam store in /etc/hosts
  2. Uninstall all games except the assigned one
  3. Continuously kill any unauthorized game processes

Game Uninstall

Directly removes appmanifest files and game directories from ~/.local/share/Steam/steamapps/. Preserves Proton versions and Steam Linux Runtime.

python -m python_pkg.steam_backlog_enforcer.main uninstall