From 081820a8d755b70786a0795a037f3343ce487fbb Mon Sep 17 00:00:00 2001 From: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:36:27 -0700 Subject: [PATCH 1/2] fix: allow mining directories without local mempalace.yaml When no mempalace.yaml or mempal.yaml exists in the source directory, return a default config (wing = directory name, room = general) instead of calling sys.exit(1). This lets users mine any directory into their palace without requiring init first. Closes #14. --- mempalace/miner.py | 22 +++++++++++++++++----- tests/test_miner.py | 16 +++++++++++++++- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/mempalace/miner.py b/mempalace/miner.py index 7b4e9491ff..d28e91b51a 100644 --- a/mempalace/miner.py +++ b/mempalace/miner.py @@ -279,16 +279,28 @@ def load_config(project_dir: str) -> dict: """Load mempalace.yaml from project directory (falls back to mempal.yaml).""" import yaml - config_path = Path(project_dir).expanduser().resolve() / "mempalace.yaml" + resolved_project_dir = Path(project_dir).expanduser().resolve() + config_path = resolved_project_dir / "mempalace.yaml" if not config_path.exists(): # Fallback to legacy name - legacy_path = Path(project_dir).expanduser().resolve() / "mempal.yaml" + legacy_path = resolved_project_dir / "mempal.yaml" if legacy_path.exists(): config_path = legacy_path else: - print(f"ERROR: No mempalace.yaml found in {project_dir}") - print(f"Run: mempalace init {project_dir}") - sys.exit(1) + print( + f" No mempalace.yaml found in {resolved_project_dir} " + "— using auto-detected defaults" + ) + return { + "wing": resolved_project_dir.name, + "rooms": [ + { + "name": "general", + "description": "All project files", + "keywords": ["general"], + } + ], + } with open(config_path) as f: return yaml.safe_load(f) diff --git a/tests/test_miner.py b/tests/test_miner.py index 337e949087..f7ec6a6348 100644 --- a/tests/test_miner.py +++ b/tests/test_miner.py @@ -6,7 +6,7 @@ import chromadb import yaml -from mempalace.miner import mine, scan_project +from mempalace.miner import load_config, mine, scan_project def write_file(path: Path, content: str): @@ -50,6 +50,20 @@ def test_project_mining(): shutil.rmtree(tmpdir) +def test_load_config_uses_defaults_when_yaml_missing(): + tmpdir = tempfile.mkdtemp() + try: + project_root = Path(tmpdir).resolve() + config = load_config(str(project_root)) + + assert isinstance(config, dict) + assert "wing" in config + assert "rooms" in config + assert config["wing"] == project_root.name + finally: + shutil.rmtree(tmpdir) + + def test_scan_project_respects_gitignore(): tmpdir = tempfile.mkdtemp() try: From 99d98499b638c7fe8d6573dd451e5a729cdbb124 Mon Sep 17 00:00:00 2001 From: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:36:57 -0700 Subject: [PATCH 2/2] fix: remove unused sys import --- mempalace/miner.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mempalace/miner.py b/mempalace/miner.py index d28e91b51a..025c15a827 100644 --- a/mempalace/miner.py +++ b/mempalace/miner.py @@ -8,7 +8,6 @@ """ import os -import sys import hashlib import fnmatch from pathlib import Path