Skip to content

fix: kill two silent-fallback bugs behind disk-space discussion report (Wave 148) - #228

Draft
konjoinfinity wants to merge 4 commits into
mainfrom
claude/wave148-silent-fallback-bugs-8pauey
Draft

fix: kill two silent-fallback bugs behind disk-space discussion report (Wave 148)#228
konjoinfinity wants to merge 4 commits into
mainfrom
claude/wave148-silent-fallback-bugs-8pauey

Conversation

@konjoinfinity

Copy link
Copy Markdown
Collaborator

Summary

A user reported ending up with both the raw bf16 model and the compressed model on disk after squish pull qwen3:8b, then got a confusing "not found locally — pulling now" message after deleting the (correctly identified as redundant) raw folder. Tracing both symptoms turned up two independent, narrowly-scoped bugs, fixed here as separate commits:

  1. Silent fallback ambiguity (squish/catalog.py)_hf_list_files() collapsed every exception from the HuggingFace prebuilt-weights listing call into [], making a real network failure (bad proxy, expired token, rate limit) indistinguishable from "this repo genuinely has no prebuilt weights" — and neither case printed anything unless --verbose. _hf_list_files/_has_squish_weights now raise a new _PrebuiltCheckError (chaining the original exception) on real failure, and pull() always prints a distinct warning for that case (not gated on verbose), while the genuine "no prebuilt weights yet" case gets its own distinct, non-alarming message.

  2. Stale existence check in cmd_run (squish/cli.py) — the "is this model already downloaded" gate checked only for the raw bf16 directory name, but squish pull's fast prebuilt path never creates that directory, and a user who deletes it post-compression is doing the right thing. This fired a false "not found locally — pulling now" on every such run. The gate now reuses _resolve_presquished_dir — already used correctly elsewhere in the same file (_resolve_model) — instead of duplicating its fallback-chain logic.

Also bumps the version to 9.34.15 with a matching CHANGELOG.md entry.

Type of change

  • Bug fix
  • New feature
  • Performance improvement
  • Documentation update
  • Refactor / cleanup

Checklist

  • pytest tests/ passes locally (new tests: tests/test_wave148_pull_silent_fallback_warning.py, tests/test_wave148_run_existence_check.py)
  • ruff check squish/ tests/ reports no errors on changed files
  • No hardcoded absolute paths (no /Users/<name>/...)
  • No model weights, eval output files, or log files staged for commit
  • Changes are scoped to one logical concern per commit (catalog fix / cli fix / version bump are separate commits)
  • Performance-sensitive changes include a before/after squish bench run — N/A, no performance-sensitive path touched

Related issues

N/A


Generated by Claude Code

claude added 4 commits July 31, 2026 20:39
_hf_list_files() collapsed every exception from the HuggingFace prebuilt
listing call into an empty list, making a real network failure (bad proxy,
expired token, rate limit) indistinguishable from "this repo genuinely has
no prebuilt weights" -- and neither case printed anything unless --verbose.
A user could silently take the expensive raw-download-and-compress path
with zero explanation.

_hf_list_files/_has_squish_weights now raise a new _PrebuiltCheckError
(chaining the original exception) when the listing call itself fails.
pull() catches it separately and always prints a warning, and the genuine
"listed fine, no squish files yet" case now prints a distinct info message
instead of staying silent.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JGkR2xkrQxxYs4eZwhqHyo
cmd_run's auto-pull gate checked only for the raw bf16 directory name (via
_MODEL_SHORTHAND or CatalogEntry.dir_name), but squish pull's fast prebuilt
path never creates that directory, and a user who deletes it post-compression
is doing the right thing. Either way _expected_dir.exists() was False, so
squish run printed a false "not found locally -- pulling now" and
re-invoked cmd_pull on every run of an already-compressed model.

_resolve_presquished_dir already solves exactly this elsewhere in the same
file (_resolve_model) -- the gate just never called it. Reuse it instead of
duplicating the fallback-chain logic.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JGkR2xkrQxxYs4eZwhqHyo
test_wave79_startup_inference.py::test_version_is_9_34_8 hardcoded the
release string independently of tests/test_version.py's EXPECTED_VERSION,
so the 9.34.15 bump missed it and CI caught the mismatch.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JGkR2xkrQxxYs4eZwhqHyo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants