v0.9.0 — Predicate Design Overhaul, Reject/Restore, Telemetry
Highlights
Predicate vocabulary overhaul — curated from 13 → 8 predicates based on a multi-project survey of real memory databases. uses_framework reclassified as multi-value (fixing silent data loss in production). PredicatePolicy is now the single source of truth for vocabulary, snapshot sections, synonym canonicalization, and LLM guidance.
New commands: reject and restore — first-class tools for managing distiller quality. Mark hallucinated facts as wrong, or recover facts that were superseded by an obsolete classification.
MCP tool-call telemetry — every tool invocation is timed and recorded. claude-memory stats --tools shows call counts, latency percentiles, and error rates.
Proactive memory recall — MCP instructions now direct Claude to check conventions before code generation, architecture before explanations, and decisions before refactoring. A/B testing showed this produces 76-line accurate architecture explanations vs honest refusals without memory.
Added
claude-memory reject <id_or_docid>command +memory.reject_factMCP tool — explicitly mark distiller hallucinations as wrong, closing associated conflictsclaude-memory restore --predicate NAMEcommand — recover facts superseded by obsolete single-value predicate classifications (Jaccard-based token overlap heuristic)- MCP tool-call telemetry:
mcp_tool_callstable,claude-memory stats --tools [--since DAYS], 90-day retention via Sweep CLAUDE_CONFIG_DIRenv var support for non-standard Claude Code config locations- Predicate synonym canonicalization at insert time (
has_convention→convention,primary_language→uses_language) - Novel predicate warnings at insert time
- NullDistiller emits
uses_languagefacts for detected language entities - Proactive memory recall guidance in MCP server instructions
- YARD documentation across 13 core source files (+473 lines)
Changed
uses_frameworkreclassified as multi-value — real projects use multiple frameworks (Rails + Turbo + Tailwind). Prior single-value classification silently superseded valid facts. Runclaude-memory restore --predicate uses_frameworkto recoverPredicatePolicyis single source of truth for vocabulary, snapshot sections, synonym canonicalization, and LLM guidance- Predicate vocabulary curated 13 → 8 based on multi-project usage data
Registry::COMMANDSstores{class:, description:}with direct class references- Plugin and gem descriptions rewritten to be outcome-focused
Fixed
StatsCommandbroken in production — usedSequel.sqlite(requires unlistedsqlite3gem). Now uses extralite adapter- Missing
embeddingscommand in shell completion output
Upgrade Notes
Schema: v12 → v14 (automatic). Migration 013 adds mcp_tool_calls. Migration 014 canonicalizes stale predicate names in existing facts.
Action required for uses_framework recovery: If your project uses multiple frameworks, past sessions may have superseded valid facts:
claude-memory restore --predicate uses_framework --dry-run # preview
claude-memory restore --predicate uses_framework # restorePruned predicates still work: preference, workflow, dependency, testing_strategy, tool_usage, ci_platform fall through to default multi-value policy. Existing facts are unaffected.
Full Changelog: v0.8.0...v0.9.0