This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
+6 more
Affected surfaces
ReleasePort's take
Moderate signalVersion v0.10.0 introduces opt‑in secret redaction at ingest and a retroactive `longhand redact` command, while fixing benign noise errors and capping the chromadb dependency to avoid pre‑1.0 versions.
Why it matters: Security engineers must enable redaction (config --set redact.enabled=true) to mask secrets; ops should run `longhand redact [--apply]` on existing stores. The release caps chromadb <1.0, eliminating exposure to unstable releases that could cause runtime failures.
Summary
AI summaryOpt-in secret redaction masks sensitive strings at ingest and retroactively scans existing stores.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
Caps chromadb dependency to <1.0 for all Python versions. Caps chromadb dependency to <1.0 for all Python versions. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Medium |
Adds opt-in secret redaction at ingest. Adds opt-in secret redaction at ingest. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Medium |
Adds `longhand redact` command for retroactive scanning and masking. Adds `longhand redact` command for retroactive scanning and masking. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Bugfix | Medium |
Fixes benign noise being counted as errors in error detector. Fixes benign noise being counted as errors in error detector. Source: llm_adapter@2026-07-15 Confidence: high |
— |
Full changelog
Feature release: opt-in secret redaction, plus recall-quality and toolchain hardening.
Added
- Secret redaction at ingest (opt-in).
longhand config --set redact.enabled=truemasks secret-shaped strings — Anthropic/OpenAI/AWS/GitHub/Google/Slack/Stripe keys, SSH key headers, JWTs, database URLs with passwords, SSNs, and Luhn-validated card numbers — at parse time, before they reach SQLite, the raw JSON blobs, or the vector index. Masks keep only the first/last 4 characters and the length (sk-a…wxyz (len=50)). Default is off: Longhand stays forensic unless you opt in. (#26) longhand redact— retroactive scan of an existing store. Reports pattern names and counts only (never the matched values);--applymasks matches in place across events, episodes, segments, and outcomes, and re-embeds changed vector documents. (#26)
Fixed
- Benign noise no longer counts as errors. The error detector now skips known-noise lines — Next.js streaming-SSR
data-dgst/<!--$!-->markers, "0 failing"/"Tests: 0 failed" summaries, emptyerror:fields,Error: Task not foundtool churn, and missing-GNU-timeoutprobes — while continuing to scan, so real errors in the same output still register. This was the main inflator of the unresolved-episode rate. Runlonghand analyze --allto re-extract episodes with the cleaner detector. (#25)
Security
- chromadb is now capped
<1.0for all Python versions (previously unbounded below 3.14) — a chromadb 1.x release can no longer break fresh installs. (#25)
Internal
- mypy is clean (21 → 0 errors) and the CI typecheck job is now blocking. (#25)
ruff formatadopted repo-wide and gated in CI. (#24)- 311 tests (280 → 311). The May 2026 audit report is archived under
docs/audits/. (#24–#26)
Security Fixes
- chromadb dependency capped to `<1.0` for all Python versions, preventing breakage from chromadb 1.x releases.
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
About Wynelson94/longhand
Persistent local memory for Claude Code. Indexes every session JSONL verbatim into SQLite + ChromaDB for semantic recall (~126ms)
Related context
Related tools
Earlier breaking changes
- v0.13.0 Deprecates several CLI commands; they will be removed at v1.0.
Beta — feedback welcome: [email protected]