Skip to content

Commit 60f8d5b

Browse files
committed
fix: re-create skill directory in _reconcile_skills after removal
After _unregister_skills removes a skill directory, _register_skills skips writing because the dir no longer passes the is_dir() check. Fix by ensuring the skill subdirectory exists before calling _register_skills so the next winning preset's content gets registered. Fixes the Claude E2E failure where removing a top-priority override preset left skill-based agents without any SKILL.md file.
1 parent fc15fdc commit 60f8d5b

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

src/specify_cli/presets.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -855,11 +855,22 @@ def _reconcile_skills(self, command_names: List[str]) -> None:
855855
return
856856

857857
resolver = PresetResolver(self.project_root)
858+
skills_dir = self._get_skills_dir()
859+
858860
for cmd_name in command_names:
859861
layers = resolver.collect_all_layers(cmd_name, "command")
860862
if not layers:
861863
continue
862864

865+
# Ensure skill directory exists so _register_skills can write to it.
866+
# After _unregister_skills removes a skill dir, this re-creates it
867+
# so the next winning preset's skill content can be registered.
868+
if skills_dir:
869+
skill_name, _ = self._skill_names_for_command(cmd_name)
870+
skill_subdir = skills_dir / skill_name
871+
if not skill_subdir.exists():
872+
skill_subdir.mkdir(parents=True, exist_ok=True)
873+
863874
top_path = layers[0]["path"]
864875
# Find the preset that owns the winning layer
865876
for pack_id, _meta in PresetRegistry(self.presets_dir).list_by_priority():

0 commit comments

Comments
 (0)