From c8fb895febb33ac5095fc6e45c6224a5867179ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?d=20=F0=9F=94=B9?= <258577966+voidborne-d@users.noreply.github.com> Date: Sat, 28 Mar 2026 19:06:42 +0000 Subject: [PATCH 1/2] fix: register_skill_dir returns existing SkillMeta for already-registered skills Fixes #29. When a skill is already registered, register_skill_dir() returned None, which caused fix_skill() to incorrectly report a failure. Now returns the existing SkillMeta instead of None when the skill_id is already present in the registry, making register_skill_dir() truly idempotent as its callers (fix_skill, _auto_register_skill_dirs) expect. --- openspace/skill_engine/registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openspace/skill_engine/registry.py b/openspace/skill_engine/registry.py index bb35dd8..a217458 100644 --- a/openspace/skill_engine/registry.py +++ b/openspace/skill_engine/registry.py @@ -321,7 +321,7 @@ class SkillRegistry: meta = self._parse_skill(skill_dir.name, skill_dir, skill_file, content) if meta.skill_id in self._skills: logger.debug(f"register_skill_dir: {meta.skill_id} already exists") - return None + return self._skills[meta.skill_id] self._skills[meta.skill_id] = meta self._content_cache[meta.skill_id] = content logger.info(f"Hot-registered skill: {meta.skill_id}") From aa16419e4696ab339343b771c5c59bd9d22ada79 Mon Sep 17 00:00:00 2001 From: Dennis-yxchen Date: Tue, 31 Mar 2026 14:58:01 +0800 Subject: [PATCH 2/2] docs: update register_skill_dir docstring to reflect idempotent return --- openspace/skill_engine/registry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openspace/skill_engine/registry.py b/openspace/skill_engine/registry.py index a217458..114f6d8 100644 --- a/openspace/skill_engine/registry.py +++ b/openspace/skill_engine/registry.py @@ -299,8 +299,8 @@ class SkillRegistry: skill_dir: Path to a directory containing ``SKILL.md``. Returns: - :class:`SkillMeta` if newly registered, ``None`` if already - present, the directory is invalid, or the skill fails safety checks. + :class:`SkillMeta` if newly registered or already present, + ``None`` if the directory is invalid or the skill fails safety checks. """ skill_file = skill_dir / "SKILL.md" if not skill_file.exists():