Skip to content

v0.3.0 — Production Hardening

Latest

Choose a tag to compare

@awesome-pro awesome-pro released this 20 May 11:56
· 2 commits to main since this release
146f989

A hardening release. No new product features — the v0.2.0 feature set becomes safer to run in production. Every change is backward compatible; new configuration is opt-in and off by default.

Highlights

  • Structured logging — SmartMemo now logs under the smartmemo logger namespace and is silent by default (it attaches only a NullHandler). Applications opt in by configuring that logger.
  • SQLite concurrency safety — the store opens in WAL mode with a 5-second busy timeout, and writes are serialized by an internal re-entrant lock so one store instance is safe to use from multiple threads of a process. The guarantees are documented honestly: it is not a distributed cache.
  • Bug fix: cascade deletesPRAGMA foreign_keys is now enabled, so the schema's declared ON DELETE CASCADE foreign keys actually fire. Deleting or evicting a cache entry previously left orphan lookup_records and feedback_events rows behind.
  • async with supportasync with SmartMemo(...) as cache: guarantees cleanup; close() is unchanged.
  • Opt-in LLM-call retriesCacheConfig(retry=RetryConfig(...)) retries transient llm_function failures with bounded exponential backoff. Off by default; only the cache-miss path is retried. Adds the RetryConfig model and the LLMCallError exception.
  • CI & release safety — CI now tests Python 3.11–3.14, and the PyPI publish workflow runs the full test suite before building and releasing.
  • Adds CONTRIBUTING.md and tests for every new behavior (88 tests total).

See CHANGELOG.md for details.

🤖 Generated with Claude Code