From 19ecc7845f8e0442ace5d3be7381611992276487 Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Sat, 25 Oct 2025 15:13:14 -0400 Subject: [PATCH] docs: Consolidate version history in CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes: - CHANGELOG.md now contains detailed version history (already has v4.2.11) - CLAUDE.md Version History section now: - References CHANGELOG.md for detailed history - Shows current version (4.2.11) - Includes brief highlights for recent versions only - Removed ~250 lines of detailed version documentation This makes documentation more maintainable - single source of truth for version history in CHANGELOG.md following Keep a Changelog format. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- CLAUDE.md | 168 ------------------------------------------------------ 1 file changed, 168 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 884fa845..6228ce52 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -232,174 +232,6 @@ For detailed version history and changelog, see [CHANGELOG.md](CHANGELOG.md). - Plugin data directory integration - HTTP REST API architecture with PM2 -**Improvements**: -- Enhanced data quality with consistent null handling - - `extractField()` now returns null for empty/whitespace-only strings - - Ensures database stores clean null values instead of empty strings - - Improves query efficiency and data consistency - -**Testing**: -- Added comprehensive regression test suite (49 tests) - - Tests v4.2.5 summary validation fixes (partial summaries preserved) - - Tests v4.2.6 observation validation fixes (partial observations preserved) - - Tests edge cases: missing fields, empty fields, whitespace, invalid types - - Tests data integrity: concept filtering, type validation, field preservation -- New test script: `npm run test:parser` -- All 49 tests passing with 100% coverage of critical parser edge cases - -**Code Quality**: -- Removed unused `extractFileArray()` function (replaced by `extractArrayElements()`) -- Improved function documentation with clearer descriptions -- TypeScript diagnostics clean - -**Technical Details**: -- Updated `src/sdk/parser.ts:163-169` extractField function -- Created `src/sdk/parser.test.ts` with comprehensive regression tests -- Added `test:parser` script to package.json -- All changes backward compatible with existing database schema - -### v4.2.6 -**Breaking Changes**: None (patch version) - -**Critical Bugfix**: -- Fixed overly defensive observation validation that was blocking observations from being saved - - Removed validation requiring title, subtitle, and narrative fields - - Parser now NEVER skips observations - always saves them - - Invalid or missing type defaults to "change" (generic catch-all type) - - Prevents critical data loss - partial observations are better than no observations - -**Impact**: -- Before: Missing title, subtitle, OR narrative caused entire observation to be discarded -- After: ALL observations preserved regardless of field completeness -- Even partial observations contain valuable data: concepts, files_read, files_modified, facts -- LLMs make mistakes - system must be resilient and save everything -- Consistent with v4.2.5 summary fix - partial data is always better than no data - -**Technical Details**: -- Updated `src/sdk/parser.ts:52-67` to never skip observations -- Uses "change" as fallback type for invalid/missing types (no schema change needed) -- Updated ParsedObservation interface to allow null for title, subtitle, narrative -- Database schema already supports nullable fields -- Parser now matches database schema constraints exactly -- Affects `parseObservations()` function used by worker service - -### v4.2.5 -**Breaking Changes**: None (patch version) - -**Critical Bugfix**: -- Fixed overly defensive summary validation that was blocking summaries from being saved - - Removed validation check that returned null when any required fields were missing - - Summaries are now always saved when `` tags are present, even if fields are incomplete - - Prevents critical data loss - partial summaries are better than no summaries - - Database schema already supports null/empty values for all fields - -**Impact**: -- Before: Missing a single field (e.g., `next_steps`) would cause entire summary to be discarded -- After: All summaries are preserved, maintaining session context even when incomplete -- This fix ensures continuity of the memory compression system - -**Technical Details**: -- Updated `src/sdk/parser.ts:137-147` to remove blocking validation -- Parser now returns ParsedSummary with whatever fields are available -- Affects `parseSummary()` function used by worker service - -### v4.2.4 -**Breaking Changes**: None (patch version) - -**Improvements**: -- Enhanced summary prompt clarity and reliability - - Removed optional skip_summary functionality (summaries now always generated) - - Clarified that summaries are mid-session checkpoints, not session endings - - Improved request field instructions to better form descriptive titles - - Changed wording from "discovered" to "learned" for consistency - -**Technical Details**: -- Updated `src/sdk/prompts.ts` to remove `WHEN NOT TO SUMMARIZE` section -- Added footer text clarifying summaries track progress within ongoing sessions -- Changed request field prompt from "Use their original sentiment" to "Form a title that reflects the actual request" -- Affects both observation and summary prompt generation - -### v4.2.3 -**Breaking Changes**: None (patch version) - -**Security**: -- Fixed FTS5 injection vulnerability in search functions - - Implemented proper double-quote escaping for FTS5 queries - - Added comprehensive test suite with 332 injection attack tests - - Affects: `search_observations`, `search_sessions`, `search_user_prompts` MCP tools - -**Fixes**: -- Fixed ESM/CJS compatibility for getDirname function in src/shared/paths.ts - - Detects context using `typeof __dirname !== 'undefined'` - - Falls back to `fileURLToPath(import.meta.url)` for ESM modules - - Resolves path resolution issues across hook (ESM) and worker (CJS) contexts -- Fixed Windows PowerShell compatibility issue with SessionStart hook - - Replaced bash-specific test command `[` with cross-platform npm install command - - Hook now runs `npm install` with quiet flags (fast and idempotent when dependencies exist) - -**Technical Details**: -- SessionSearch.ts now escapes double quotes in FTS5 queries: `query.replace(/"/g, '""')` -- Updated `plugin/hooks/hooks.json` SessionStart command to use standard shell syntax -- Changed from: `[ ! -d ... ] && cd ... && npm install && node ... || node ...` -- Changed to: `cd ... && npm install --prefer-offline --no-audit --no-fund --loglevel=error && node ...` -- Dependencies are installed in marketplace folder (parent of CLAUDE_PLUGIN_ROOT) where root package.json exists -- getDirname function now properly handles both CommonJS (__dirname) and ES modules (import.meta.url) - -### v4.2.0 -**Breaking Changes**: None (minor version) - -**Features**: -- User prompt storage with FTS5 full-text search -- New `user_prompts` table stores raw user input for every prompt -- New `search_user_prompts` MCP tool enables searching actual user requests -- Automatic FTS5 indexing of all user prompts for fast retrieval - -**Benefits**: -- Full context reconstruction from user intent → Claude actions → outcomes -- Pattern detection for repeated requests (identify when Claude isn't listening) -- Improved debugging by tracing from original user words to final implementation -- Historical search: "How many times did user ask for X feature?" - -**Implementation**: -- Migration 10: Creates user_prompts table with FTS5 virtual table and sync triggers -- UserPromptSubmit hook now saves prompts using claude_session_id (available immediately) -- Citations use `claude-mem://user-prompt/{id}` URI scheme - -### v4.1.0 -**Breaking Changes**: None (minor version) - -**Features**: -- Graceful session cleanup (marks complete instead of DELETE) -- Restored MCP search server from backup -- Updated dependencies (claude-agent-sdk 0.1.23, MCP SDK 1.20.1) - -**Fixes**: -- `/clear` command now skips cleanup to prevent session interruption -- Session workers can finish pending operations naturally - -### v4.0.0 -**Breaking Changes**: -- Data directory relocated to `${CLAUDE_PLUGIN_ROOT}/data/` -- Fresh start required (no migration from v3.x) -- Worker auto-starts in SessionStart hook - -**Features**: -- MCP Search Server with 8 specialized search tools -- FTS5 full-text search across observations, sessions, and user prompts -- Citation support with `claude-mem://` URIs -- HTTP REST API architecture with PM2 management -- Plugin data directory integration - -**Changes**: -- Improved session continuity -- Enhanced error handling -- Better process cleanup - -### Earlier Versions (v3.x) -- v3.9.17: MCP integration, hookSpecificOutput JSON format -- v3.7.1: SQLite storage backend -- Earlier: Mintlify documentation, statusline support - ## Key Design Decisions ### Graceful Cleanup (v4.1.0)