steam-backlog-enforcer/steam_backlog_enforcer
Krzysztof kuhy Rudnicki 7554b58ab7
Some checks are pending
pre-commit / pre-commit (push) Waiting to run
Tests / test (3.10) (push) Waiting to run
Tests / test (3.11) (push) Waiting to run
Tests / test (3.12) (push) Waiting to run
feat: add block-gaming command (Stage 4) + guard-lib migration cleanup
Adds `block-gaming <days>`: uninstalls Steam, kills/uninstalls known game
launchers, and blocks Steam + game-website domains (hosts + iptables) for a
fixed number of days with no in-app way to lift it early. Enforcement is
tamper-resistant via guard-lib's package-block (bind-mounted lock file) and
re-asserted every enforce tick.

Also migrates store_blocker.py's hosts-file locking from raw chattr/mount
calls to guard-lib's file-guard, using the new `sync` subcommand (not
`pacman-relock`) so our own legitimate edits aren't reverted as drift.

Fixes found during live verification:
- iptables never blocked real IPs because DNS was resolved after /etc/hosts
  already redirected every blocked domain to 0.0.0.0 locally - reordered so
  iptables resolves first.
- Game-website blocks only covered bare apex domains; sites that
  301-redirect to www (e.g. newgrounds.com) sailed right through - added
  automatic www. variant generation.
- Launchers (e.g. prismlauncher) were only killed, never uninstalled -
  added best-effort pacman-package removal keyed off /proc/<pid>/exe.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AFNiYQQgSLAkiBXswyimPq
2026-07-04 11:45:54 +02:00
..
docs feat: add pick-manual command with 2-week enforcement lock 2026-05-30 17:15:37 +02:00
tests feat: add block-gaming command (Stage 4) + guard-lib migration cleanup 2026-07-04 11:45:54 +02:00
__init__.py feat: steam 100 percent extension 2026-03-02 20:29:32 +01:00
_cmd_done.py chore: set up as standalone repo 2026-05-28 07:21:29 +02:00
_enforce_loop.py feat: add block-gaming command (Stage 4) + guard-lib migration cleanup 2026-07-04 11:45:54 +02:00
_hltb_detail.py fix: HLTB count_comp=0 bug, false matches, and ProtonDB log noise 2026-05-28 20:40:51 +02:00
_hltb_search.py fix: HLTB count_comp=0 bug, false matches, and ProtonDB log noise 2026-05-28 20:40:51 +02:00
_hltb_types.py chore: set up as standalone repo 2026-05-28 07:21:29 +02:00
_scanning_confidence.py fix: HLTB count_comp=0 bug, false matches, and ProtonDB log noise 2026-05-28 20:40:51 +02:00
_stats.py feat: add pick-manual command with 2-week enforcement lock 2026-05-30 17:15:37 +02:00
_total_block.py feat: add block-gaming command (Stage 4) + guard-lib migration cleanup 2026-07-04 11:45:54 +02:00
_web_dataset.py feat: add pick-manual command with 2-week enforcement lock 2026-05-30 17:15:37 +02:00
_web_server.py feat: add interactive web UI for backlog completion planning 2026-05-29 18:35:45 +02:00
_whitelist.py chore: set up as standalone repo 2026-05-28 07:21:29 +02:00
config.py feat: add pick-manual command with 2-week enforcement lock 2026-05-30 17:15:37 +02:00
enforcer.py feat: add block-gaming command (Stage 4) + guard-lib migration cleanup 2026-07-04 11:45:54 +02:00
game_install.py chore: set up as standalone repo 2026-05-28 07:21:29 +02:00
hltb.py feat: add pick-manual command with 2-week enforcement lock 2026-05-30 17:15:37 +02: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 feat: add block-gaming command (Stage 4) + guard-lib migration cleanup 2026-07-04 11:45:54 +02:00
protondb.py fix: HLTB count_comp=0 bug, false matches, and ProtonDB log noise 2026-05-28 20:40:51 +02:00
scanning.py chore: set up as standalone repo 2026-05-28 07:21:29 +02:00
steam_api.py feat(steam_backlog_enforcer): harden whitelist against circumvention 2026-05-17 20:44:05 +02:00
store_blocker.py feat: add block-gaming command (Stage 4) + guard-lib migration cleanup 2026-07-04 11:45:54 +02:00