diff --git a/scripts/bash/common.sh b/scripts/bash/common.sh index fb1ab8ec..1bf56b27 100644 --- a/scripts/bash/common.sh +++ b/scripts/bash/common.sh @@ -225,6 +225,8 @@ except Exception: local core="$base/${template_name}.md" [ -f "$core" ] && echo "$core" && return 0 - return 1 + # Return success with empty output so callers using set -e don't abort; + # callers check [ -n "$TEMPLATE" ] to detect "not found". + return 0 } diff --git a/scripts/powershell/common.ps1 b/scripts/powershell/common.ps1 index 5dee601b..3d6a77f2 100644 --- a/scripts/powershell/common.ps1 +++ b/scripts/powershell/common.ps1 @@ -163,7 +163,7 @@ function Resolve-Template { $presets = $registryData.presets if ($presets) { $sortedPresets = $presets.PSObject.Properties | - Sort-Object { if ($_.Value.priority) { $_.Value.priority } else { 10 } } | + Sort-Object { if ($null -ne $_.Value.priority) { $_.Value.priority } else { 10 } } | ForEach-Object { $_.Name } } } catch { diff --git a/src/specify_cli/extensions.py b/src/specify_cli/extensions.py index aa1491fe..0dfd40b7 100644 --- a/src/specify_cli/extensions.py +++ b/src/specify_cli/extensions.py @@ -739,7 +739,10 @@ class CommandRegistrar: return self._registrar.render_frontmatter(frontmatter) + "\n" + context_note + body def _render_toml_command(self, frontmatter, body, ext_id): - return self._registrar.render_toml_command(frontmatter, body, ext_id) + # Preserve extension-specific context comments for backward compatibility + base = self._registrar.render_toml_command(frontmatter, body, ext_id) + context_lines = f"# Extension: {ext_id}\n# Config: .specify/extensions/{ext_id}/\n" + return base.rstrip("\n") + "\n" + context_lines def register_commands_for_agent( self, diff --git a/src/specify_cli/presets.py b/src/specify_cli/presets.py index 5f2894f6..c1a9ef0c 100644 --- a/src/specify_cli/presets.py +++ b/src/specify_cli/presets.py @@ -1351,11 +1351,11 @@ class PresetCatalog: raise PresetError(f"Failed to save preset ZIP: {e}") def clear_cache(self): - """Clear the catalog cache.""" - if self.cache_file.exists(): - self.cache_file.unlink() - if self.cache_metadata_file.exists(): - self.cache_metadata_file.unlink() + """Clear all catalog cache files, including per-URL hashed caches.""" + if self.cache_dir.exists(): + for f in self.cache_dir.iterdir(): + if f.is_file() and f.name.startswith("catalog"): + f.unlink(missing_ok=True) class PresetResolver: