Skip to content

Wynelson94/longhand

v0.9.4 Security

This release includes 1 security fix for security teams reviewing exposed deployments.

Published 15d MCP Data & Storage
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 1 known CVE

Topics

ai-memory anthropic chromadb claude-code forensic local-first
+6 more
lossless mcp mcp-server python recall sqlite

ReleasePort's take

Moderate signal
editorial:auto 12d

The MCP input bounds are now clamped to prevent unbounded SQLite LIMIT queries.

Why it matters: MCP input limits are enforced: LIMIT [1,1000], offset ≥0, query ≤2000 characters. Operators must ensure client libraries respect these bounds to avoid malformed queries.

Summary

AI summary

MCP input bounds are clamped to prevent unbounded SQLite LIMIT queries.

Changes in this release

Security High

MCP input bounds tightened: limit clamped to [1,1000] and offset floored at 0; query length capped at 2000 characters.

MCP input bounds tightened: limit clamped to [1,1000] and offset floored at 0; query length capped at 2000 characters.

Source: llm_adapter@2026-07-15

Confidence: high

Bugfix Medium

Parser no longer crashes on non-object JSON lines.

Parser no longer crashes on non-object JSON lines.

Source: llm_adapter@2026-07-15

Confidence: high

Bugfix Medium

Ingest lock is now race-safe.

Ingest lock is now race-safe.

Source: llm_adapter@2026-07-15

Confidence: high

Full changelog

Hardening release: closes the six findings left open after the v0.9.3 security audit (AUDIT-2026-05-28). No new features, no API changes.

Fixed

  • Parser no longer crashes on non-object JSON lines. A transcript line that is valid JSON but not an object (a bare list, string, or number) raised AttributeError and silently lost the rest of the session. Both the full-parse and live-tail paths now skip such lines. (#22)
  • Ingest lock is now race-safe. claim_ingest_lock used a check-then-write that let two racing processes both believe they held the lock. The lock is now claimed with an atomic O_CREAT|O_EXCL create; stale locks from dead PIDs are unlinked and re-claimed. (#22)

Security

  • MCP input bounds tightened. A negative limit could slip past the cap and become SQLite's unbounded LIMIT -1; limit is now clamped to [1, 1000] and offset floored at 0. Semantic queries are capped at 2,000 characters before reaching the ChromaDB ONNX encoder, across all query-taking tools. Local-only exposure either way, but defense-in-depth is cheap. (#22)

Internal

  • The posthog<3.0 pin is now documented in pyproject.toml: it deliberately constrains chromadb's transitive telemetry client (posthog ≥3 breaks chromadb's capture() calls and floods stderr — the v0.5.11 fix). It is not a dead dependency; do not remove it.
  • Un-skipped the fixless-episode forensic assertion in the test suite (it passes) and added coverage for the parser guard, lock atomicity, and MCP bounds. 273 → 280 tests.

Security Fixes

  • MCP input `limit` now clamped to [1,1000] and `offset` floored at 0; semantic queries limited to 2000 characters before ChromaDB ONNX encoding.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Wynelson94/longhand

Get notified when new releases ship.

Sign up free

About Wynelson94/longhand

Persistent local memory for Claude Code. Indexes every session JSONL verbatim into SQLite + ChromaDB for semantic recall (~126ms)

All releases →

Related context

Earlier breaking changes

  • v0.13.0 Deprecates several CLI commands; they will be removed at v1.0.

Beta — feedback welcome: [email protected]