From 20ed19a9ac66393c4b1071fe227d8bdaa7933f41 Mon Sep 17 00:00:00 2001 From: argszero Date: Mon, 20 Jul 2026 10:46:08 +0800 Subject: [PATCH 1/2] emrg: filter evolution workspace from projects.yml, add TODO placeholder for empty repo - _touch_project: skip cwd under ~/.emrg/evolution so the engine's own workspace isn't tracked as a user project - New auto-discovered project entries get repo='TODO: fill in owner/repo' instead of empty string, so users know what to fill in --- emrg/server/daemon.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/emrg/server/daemon.py b/emrg/server/daemon.py index 92758811..9a806e7f 100644 --- a/emrg/server/daemon.py +++ b/emrg/server/daemon.py @@ -648,6 +648,10 @@ def _touch_project(self, cwd: str) -> None: they want automatically evolved. """ cwd = os.path.realpath(cwd) + # Don't track the evolution engine's own workspace as a project + evolution_cwd = str(self.EVOLUTION_CWD.resolve()) + if cwd == evolution_cwd or cwd.startswith(evolution_cwd + os.sep): + return self._projects_log.parent.mkdir(parents=True, exist_ok=True) now = datetime.now().isoformat() @@ -676,7 +680,7 @@ def _touch_project(self, cwd: str) -> None: projects[cwd] = { "name": name, "path": cwd, - "repo": "", + "repo": "TODO: fill in owner/repo", "auto_evolve": False, "interval": 1800, "last_active": now, From 5a9f8777f82d603a67b1ad5cadd2bbbcd11f9edb Mon Sep 17 00:00:00 2001 From: argszero Date: Mon, 20 Jul 2026 10:59:02 +0800 Subject: [PATCH 2/2] emrg: also filter evolution workspace from projects list API _handle_list_projects now skips entries whose path starts with ~/.emrg/evolution, matching the _touch_project filter. This keeps the evolution workspace out of the /rant project selector. --- emrg/server/daemon.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/emrg/server/daemon.py b/emrg/server/daemon.py index 9a806e7f..a616aa24 100644 --- a/emrg/server/daemon.py +++ b/emrg/server/daemon.py @@ -1811,6 +1811,7 @@ async def _handle_list_projects( self, writer: asyncio.StreamWriter ) -> None: """Read projects.yml and return all project entries.""" + evolution_cwd = str(self.EVOLUTION_CWD.resolve()) projects: list[dict] = [] try: if self._projects_log.exists(): @@ -1819,7 +1820,9 @@ async def _handle_list_projects( projects = [ {"name": p.get("name", ""), "repo": p.get("repo", ""), "path": p.get("path", ""), "auto_evolve": p.get("auto_evolve", False)} - for p in data if isinstance(p, dict) + for p in data + if isinstance(p, dict) + and not str(p.get("path", "")).startswith(evolution_cwd) ] except (yaml.YAMLError, OSError) as e: logger.exception("Failed to read projects.yml")