steam-backlog-enforcer/steam_backlog_enforcer
Krzysztof kuhy Rudnicki e5d0627a30
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
fix(game_install): refuse to delete folders matching an allowed game's name
_remove_game_dirs deleted exactly one path at a time (the manifest's
current installdir, app-id gated by callers), but a real incident showed
that's not enough: an allowed game's install can end up split across
naming variants (spaced display name vs. installdir vs. a typo'd
variant), and any code path touching the wrong one risks destroying real
files. Add a fuzzy name-match safety net inside _remove_game_dirs itself
so it refuses to rmtree anything that plausibly names one of the
currently-allowed games, tolerating case/spacing/punctuation, spelled-out
numbers vs. digits vs. roman numerals, and minor typos -- independent of
whatever app-id gating the caller already does.

Extracted active_manual_picks/allowed_games/_pick_is_active out of
_actions.py into a new leaf module (_allowed_games.py) so game_install.py
can import allowed_games at the top level for this check without a
circular import (_actions.py already imports from game_install.py for
unrelated functions). _actions.py re-exports the two names other modules
still import from it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-25 15:50:29 +02:00
..
docs feat(enforcer): raise manual pick cap from 2 to 3 concurrent games 2026-07-23 18:05:29 +02:00
tests fix(game_install): refuse to delete folders matching an allowed game's name 2026-07-25 15:50:29 +02:00
__init__.py feat: steam 100 percent extension 2026-03-02 20:29:32 +01:00
_actions.py fix(game_install): refuse to delete folders matching an allowed game's name 2026-07-25 15:50:29 +02:00
_allowed_games.py fix(game_install): refuse to delete folders matching an allowed game's name 2026-07-25 15:50:29 +02:00
_cmd_done.py feat(enforcer): allow two concurrent manual picks 2026-07-19 17:28:23 +02:00
_enforce_loop.py feat(enforcer): allow two concurrent manual picks 2026-07-19 17:28:23 +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
_mcp.py fix(game_install): refuse to delete folders matching an allowed game's name 2026-07-25 15:50: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 Fix pre-existing CI failures from the MCP-server commit 2026-07-10 23:04:07 +02:00
_steam_state.py fix(enforcer): defer Steam restart while a game update is in progress 2026-07-18 15:59:47 +02:00
_total_block.py feat: block-gaming purges Steam/Proton filesystem remnants + helper packages 2026-07-04 17:25:08 +02:00
_web_dataset.py feat(enforcer): allow two concurrent manual picks 2026-07-19 17:28:23 +02:00
_web_server.py feat: add interactive web UI for backlog completion planning 2026-05-29 18:35:45 +02:00
_whitelist.py Remove whitelist exception cooldown; approve immediately 2026-07-10 22:57:39 +02:00
config.py feat(enforcer): raise manual pick cap from 2 to 3 concurrent games 2026-07-23 18:05:29 +02:00
enforcer.py feat(enforcer): allow two concurrent manual picks 2026-07-19 17:28:23 +02:00
game_install.py fix(game_install): refuse to delete folders matching an allowed game's name 2026-07-25 15:50: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 feat(enforcer): allow two concurrent manual picks 2026-07-19 17:28:23 +02:00
main.py fix(game_install): refuse to delete folders matching an allowed game's name 2026-07-25 15:50:29 +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