gabriel / muse public
feat patch task/force-track-whitelist #1 / 1
AI Agent gabriel · 149 days ago · Apr 26, 2026 · Diff

feat: add [force_track] whitelist to .museignore

Adds a [force_track] section that overrides both the built-in secrets blocklist and user ignore patterns for specific exact paths. Canonical use-case: self-signed dev TLS certs that must survive clean pulls.

Design: - Exact paths only in [force_track].paths — no glob expansion - Overrides *.key, *.pem, .env, and all other blocked patterns - load_force_track_paths() returns frozenset for O(1) lookup in walk_workdir - Updated init.py template documents [force_track] as a commented block - 23 new TDD tests; 202 existing ignore/snapshot tests still green

sha256:5861034489d3d53ff3c84f8b084d59fce2bdb682354d654210a67e05aba860ea sha
+39 ~8 symbols
sha256:59ccf13d3177032dfd996e14a1c00d7c62c637db723ce0617ad50fa5a29798fb snapshot
+39
symbols added
~8
symbols modified
0
dead code introduced
Semantic Changes 47 symbols
~ tests/test_force_track.py .py 35 symbols added
+ TestForceTrackWalkWorkdir class class TestForceTrackWalkWorkdir L155–299
+ test_env_file_included_when_force_tracked method method test_env_file_included_when_force_tracked L196–206
+ test_force_track_does_not_affect_unrelated_secrets method method test_force_track_does_not_affect_unrelated_secrets L285–299
+ test_force_track_exact_path_only_no_glob_expansion method method test_force_track_exact_path_only_no_glob_expansion L237–251
+ test_force_track_nonexistent_path_no_error method method test_force_track_nonexistent_path_no_error L253–263
+ test_force_track_overrides_user_ignore_patterns method method test_force_track_overrides_user_ignore_patterns L223–235
+ test_key_file_excluded_without_force_track method method test_key_file_excluded_without_force_track L156–166
+ test_key_file_included_when_force_tracked method method test_key_file_included_when_force_tracked L168–181
+ test_localhost_tls_use_case method method test_localhost_tls_use_case L265–283
+ test_non_force_tracked_secret_still_blocked method method test_non_force_tracked_secret_still_blocked L208–221
+ test_pem_file_included_when_force_tracked method method test_pem_file_included_when_force_tracked L183–194
+ TestLoadForceTrackPaths class class TestLoadForceTrackPaths L107–141
+ test_empty_paths_returns_empty_frozenset method method test_empty_paths_returns_empty_frozenset L129–134
+ test_no_force_track_section_returns_empty method method test_no_force_track_section_returns_empty L114–119
+ test_no_museignore_returns_empty_frozenset method method test_no_museignore_returns_empty_frozenset L108–112
+ test_paths_use_posix_separators method method test_paths_use_posix_separators L136–141
+ test_returns_frozenset_of_paths method method test_returns_frozenset_of_paths L121–127
+ TestLoadIgnoreConfigForceTrack class class TestLoadIgnoreConfigForceTrack L34–99
+ test_force_track_coexists_with_global_and_domain method method test_force_track_coexists_with_global_and_domain L84–95
+ test_force_track_empty_paths_list method method test_force_track_empty_paths_list L64–67
+ test_force_track_missing_paths_key method method test_force_track_missing_paths_key L69–72
+ test_force_track_multiple_paths method method test_force_track_multiple_paths L51–62
+ test_force_track_non_string_paths_silently_dropped method method test_force_track_non_string_paths_silently_dropped L74–82
+ test_force_track_section_parsed method method test_force_track_section_parsed L42–49
+ test_missing_section_returns_no_force_track_key method method test_missing_section_returns_no_force_track_key L35–40
+ test_no_museignore_returns_empty_config method method test_no_museignore_returns_empty_config L97–99
+ _init_code_repo function function _init_code_repo L149–152
+ MuseIgnoreConfig import import MuseIgnoreConfig L21–21
+ _BUILTIN_SECRET_PATTERNS import import _BUILTIN_SECRET_PATTERNS L26–26
+ annotations import import annotations L15–15
+ load_force_track_paths import import load_force_track_paths L21–21
+ load_ignore_config import import load_ignore_config L21–21
+ pathlib import import pathlib L17–17
+ pytest import import pytest L19–19
+ walk_workdir import import walk_workdir L26–26
~ muse/cli/commands/init.py .py 1 symbol added, 2 symbols modified
+ _MUSEIGNORE_FORCE_TRACK_BLOCK variable variable _MUSEIGNORE_FORCE_TRACK_BLOCK L305–314
~ muse/core/ignore.py .py 2 symbols added, 2 symbols modified
+ ForceTrackSection class class ForceTrackSection L56–65
+ load_force_track_paths function function load_force_track_paths L150–163
~ muse/core/snapshot.py .py 1 symbol added, 4 symbols modified
+ load_force_track_paths import import load_force_track_paths L61–61
← Older Oldest on task/force-track-whitelist
All commits
Newer → Latest on task/force-track-whitelist

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:5861034489d3d53ff3c84f8b084d59fce2bdb682354d654210a67e05aba860ea --body "your comment"