v0.10.0 — Feature release: opt-in secret redaction, plus recall-quality and…
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)