@@ -11,6 +11,50 @@ more like an iteration counter than a strict SemVer major).
1111
1212---
1313
14+ ## [ 0.3.2] — 2026-05-21
15+
16+ ### Added
17+
18+ - ** ` recall_query ` telemetry for hit-rate analysis.** Every ` GET /memory/query `
19+ call now appends one JSONL row to ` ~/.ccrecall/recall-query.log.jsonl ` :
20+ truncated query (80 chars), original ` queryLen ` , ` hitCount ` , ` projectId ` ,
21+ ` limit ` , ` maxTokens ` . Append failures are swallowed — telemetry must never
22+ affect endpoint response. Two opt-out knobs:
23+ ` CCRECALL_RECALL_TELEMETRY_OFF=1 ` disables writes; ` CCRECALL_RECALL_TELEMETRY_PATH `
24+ redirects the log (used by the test suite to keep host telemetry clean).
25+
26+ - ** ` scripts/recall-hit-rate-report.ts ` analysis tool.** Reads the telemetry log
27+ and cross-references the ` memories ` table to split zero-hit queries into two
28+ buckets — * literal mismatch* (keyword appears in some memory body but FTS5
29+ missed it) vs * truly absent* (keyword nowhere in any memory). Output (markdown
30+ or ` --json ` ): totals, hit rate, zero-hit breakdown, per-project counts,
31+ query-length percentiles, and up to 10 samples per category. Designed as the
32+ L0 quick-fix that feeds the v0.4.0 batch ordering: 1 day of instrumentation +
33+ 7 days of observation → evidence-driven decision between ` #28 ` surfacing UX,
34+ ` #15 ` tag first-class + Topic CJK, and ` #29 ` scorer epistemic.
35+
36+ ### Why
37+
38+ The cold-rate signal (96/116 memories never recalled, 4 batches of major events
39+ that landed in auto memory instead of ccRecall DB) needs an evidence base before
40+ the v0.4.0 batch can pick a direction. This release is pure instrumentation —
41+ no scoring, schema, or recall behaviour changes — so the 7-day observation
42+ period stays clean.
43+
44+ ### Notes
45+
46+ - Privacy: query string is truncated to 80 chars before logging. ` queryLen `
47+ preserves the original length so we can still characterise long-query
48+ distribution. Hashing was considered and rejected because hashing would
49+ prevent the substring cross-reference that splits literal-mismatch from
50+ truly-absent.
51+ - Performance: ` appendFileSync ` runs on the response path; E2E tests assert the
52+ total round-trip stays under 100ms even with telemetry on.
53+ - This release does NOT flip ` CCRECALL_SESSION_START_STRATEGY ` default — that
54+ ships with v0.4.0 once the metric evidence is in.
55+
56+ ---
57+
1458## [ 0.3.1] — 2026-05-13
1559
1660### Fixed
0 commit comments