You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- package_docs: catch UnicodeDecodeError on non-UTF-8 PyPI
responses so they surface as the controlled empty-result
path instead of leaking a tool-level exception
- ranker/SymbolHit: return None for page-only symbol anchors
so get_docs() retrieves the whole page; SymbolHit.anchor is
now str | None
- persistent_cache: serialize execute()/commit()/stats updates
with threading.Lock — per the Python sqlite3 docs,
check_same_thread=False alone does not make a connection
safe for concurrent writes; without serialization concurrent
put() raised SystemError under load
Minor follow-ups picked up along the way: _empty_result helper
in package_docs, drop unused PackageDocsInput model, use
storage.db.get_cache_dir/get_index_path helpers from server.py,
import _NO_ANCHOR_KEY constant in smoke test.
Tests: UTF-8 decode path, page-only anchor=None contract,
concurrent put() across 20 threads. 261/261 pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments