fix: add explicit UTF-8 encoding to read_text() calls (#776)

On Windows with non-UTF-8 locale (e.g. GBK), Path.read_text() defaults
to platform encoding, breaking onboarding tests and any source code that
reads JSON/markdown with non-ASCII content.

5 files, 8 call sites fixed.
This commit is contained in:
mvalentsev
2026-04-16 16:00:29 +05:00
parent d4c942417a
commit 09fe2dda3c
5 changed files with 10 additions and 10 deletions
+1 -1
View File
@@ -308,7 +308,7 @@ class EntityRegistry:
path = (Path(config_dir) / "entity_registry.json") if config_dir else cls.DEFAULT_PATH path = (Path(config_dir) / "entity_registry.json") if config_dir else cls.DEFAULT_PATH
if path.exists(): if path.exists():
try: try:
data = json.loads(path.read_text()) data = json.loads(path.read_text(encoding="utf-8"))
return cls(data, path) return cls(data, path)
except (json.JSONDecodeError, OSError): except (json.JSONDecodeError, OSError):
pass pass
+1 -1
View File
@@ -25,4 +25,4 @@ def run_instructions(name: str):
print(f"Instructions file not found: {md_path}", file=sys.stderr) print(f"Instructions file not found: {md_path}", file=sys.stderr)
sys.exit(1) sys.exit(1)
print(md_path.read_text()) print(md_path.read_text(encoding="utf-8"))
+1 -1
View File
@@ -50,7 +50,7 @@ def _load_known_names_config(force_reload: bool = False):
if _KNOWN_NAMES_PATH.exists(): if _KNOWN_NAMES_PATH.exists():
try: try:
_KNOWN_NAMES_CACHE = json.loads(_KNOWN_NAMES_PATH.read_text()) _KNOWN_NAMES_CACHE = json.loads(_KNOWN_NAMES_PATH.read_text(encoding="utf-8"))
return _KNOWN_NAMES_CACHE return _KNOWN_NAMES_CACHE
except (json.JSONDecodeError, OSError): except (json.JSONDecodeError, OSError):
pass pass
+1 -1
View File
@@ -10,7 +10,7 @@ from mempalace.instructions_cli import AVAILABLE, INSTRUCTIONS_DIR, run_instruct
def test_run_instructions_valid_name(capsys): def test_run_instructions_valid_name(capsys):
"""Valid name prints the .md file content.""" """Valid name prints the .md file content."""
name = "init" name = "init"
expected = (INSTRUCTIONS_DIR / f"{name}.md").read_text() expected = (INSTRUCTIONS_DIR / f"{name}.md").read_text(encoding="utf-8")
run_instructions(name) run_instructions(name)
captured = capsys.readouterr() captured = capsys.readouterr()
assert captured.out.strip() == expected.strip() assert captured.out.strip() == expected.strip()
+4 -4
View File
@@ -157,7 +157,7 @@ def test_generate_aaak_bootstrap_entities_content(tmp_path):
wings = ["family"] wings = ["family"]
_generate_aaak_bootstrap(people, projects, wings, "personal", config_dir=tmp_path) _generate_aaak_bootstrap(people, projects, wings, "personal", config_dir=tmp_path)
content = (tmp_path / "aaak_entities.md").read_text() content = (tmp_path / "aaak_entities.md").read_text(encoding="utf-8")
assert "Riley" in content assert "Riley" in content
assert "RIL" in content # entity code assert "RIL" in content # entity code
assert "MemPalace" in content assert "MemPalace" in content
@@ -171,7 +171,7 @@ def test_generate_aaak_bootstrap_facts_content(tmp_path):
wings = ["projects"] wings = ["projects"]
_generate_aaak_bootstrap(people, projects, wings, "work", config_dir=tmp_path) _generate_aaak_bootstrap(people, projects, wings, "work", config_dir=tmp_path)
content = (tmp_path / "critical_facts.md").read_text() content = (tmp_path / "critical_facts.md").read_text(encoding="utf-8")
assert "Alice" in content assert "Alice" in content
assert "Acme" in content assert "Acme" in content
assert "work" in content.lower() assert "work" in content.lower()
@@ -190,7 +190,7 @@ def test_generate_aaak_bootstrap_collision(tmp_path):
{"name": "Alison", "relationship": "coworker", "context": "work"}, {"name": "Alison", "relationship": "coworker", "context": "work"},
] ]
_generate_aaak_bootstrap(people, [], ["work"], "work", config_dir=tmp_path) _generate_aaak_bootstrap(people, [], ["work"], "work", config_dir=tmp_path)
content = (tmp_path / "aaak_entities.md").read_text() content = (tmp_path / "aaak_entities.md").read_text(encoding="utf-8")
assert "ALI" in content assert "ALI" in content
assert "ALIS" in content assert "ALIS" in content
@@ -199,7 +199,7 @@ def test_generate_aaak_bootstrap_no_relationship(tmp_path):
"""Person without relationship string still generates entry.""" """Person without relationship string still generates entry."""
people = [{"name": "Bob", "context": "work"}] people = [{"name": "Bob", "context": "work"}]
_generate_aaak_bootstrap(people, [], ["work"], "work", config_dir=tmp_path) _generate_aaak_bootstrap(people, [], ["work"], "work", config_dir=tmp_path)
content = (tmp_path / "aaak_entities.md").read_text() content = (tmp_path / "aaak_entities.md").read_text(encoding="utf-8")
assert "BOB=Bob" in content assert "BOB=Bob" in content