Fixes production search failures where 69% of user searches returned zero
results for critical nodes (webhook, merge, split batch) despite nodes
existing in database.
Root Cause:
- schema.sql missing nodes_fts FTS5 virtual table
- No validation to detect empty database or missing FTS5
- rebuild.ts used schema without search index
- Result: 9 of 13 searches failed in production
Changes:
1. Schema Updates (src/database/schema.sql):
- Added nodes_fts FTS5 virtual table with full-text indexing
- Added INSERT/UPDATE/DELETE triggers for auto-sync
- Indexes: node_type, display_name, description, documentation, operations
2. Database Validation (src/scripts/rebuild.ts):
- Added empty database detection (fails if zero nodes)
- Added FTS5 existence and synchronization validation
- Added searchability tests for critical nodes
- Added minimum node count check (500+)
3. Runtime Health Checks (src/mcp/server.ts):
- Database health validation on first access
- Detects empty database with clear error
- Detects missing FTS5 with actionable warning
4. Test Suite (53 new tests):
- tests/integration/database/node-fts5-search.test.ts (14 tests)
- tests/integration/database/empty-database.test.ts (14 tests)
- tests/integration/ci/database-population.test.ts (25 tests)
5. Database Rebuild:
- data/nodes.db rebuilt with FTS5 index
- 535 nodes fully synchronized with FTS5
Impact:
- ✅ All critical searches now work (webhook, merge, split, code, http)
- ✅ FTS5 provides fast ranked search (< 100ms)
- ✅ Clear error messages if database empty
- ✅ CI validates committed database integrity
- ✅ Runtime health checks detect issues immediately
Performance:
- FTS5 search: < 100ms for typical queries
- LIKE fallback: < 500ms (unchanged, still functional)
Testing: LIKE search investigation revealed it was perfectly functional,
only failed because database was empty. No changes needed.
Related: Issue #296 Part 2 (Part 1: v2.18.4 fixed adapter bypass)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements comprehensive improvements to the two-phase query optimization:
- **Ordering Stability**: Use CTE with VALUES clause to preserve exact Phase 1 ordering
Prevents any ordering discrepancies between Phase 1 ID selection and Phase 2 data fetch
- **Defensive ID Validation**: Filter IDs for type safety before Phase 2 query
Ensures only valid positive integers are used in the CTE
- **Performance Metrics**: Add detailed logging with phase1Ms, phase2Ms, totalMs
Enables monitoring and quantifying the optimization benefits
- **DRY Principle**: Extract buildMetadataFilterConditions helper method
Eliminates code duplication between searchTemplatesByMetadata and getMetadataSearchCount
- **Comprehensive Testing**: Add 4 integration tests covering:
- Basic two-phase query functionality
- Ordering stability with same view counts
- Empty results early exit
- Defensive ID validation
All tests passing (36/37, 1 skipped)
Build successful
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Two critical fixes for integration test failures:
**1. Foreign Key Constraint Violations**
Root cause: Tests inserted into template_node_configs without corresponding
entries in templates table, causing FK constraint failures.
Fixes:
- template-node-configs.test.ts: Pre-create 1000 test templates in beforeEach()
- template-examples-e2e.test.ts: Create templates in seedTemplateConfigs() and
adjust test cases to use non-conflicting template IDs
**2. Removed Tool References**
Root cause: Tests referenced get_node_for_task tool removed in v2.15.0.
Fixes:
- tool-invocation.test.ts: Removed entire get_node_for_task test suite
- session-management.test.ts: Replaced get_node_for_task test with search_nodes
Test results:
✅ template-node-configs.test.ts: 20/20 passed
✅ template-examples-e2e.test.ts: 13/13 passed
✅ tool-invocation.test.ts: 28/28 passed
✅ session-management.test.ts: 16 passed, 2 skipped
All integration tests now comply with foreign key constraints and use only
existing MCP tools as of v2.15.0.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix parameter validation tests to expect mode parameter in getTemplate calls
- Update database utils tests to use totalViews > 10 for quality filter
- Add comprehensive tests for template service functionality
- Fix integration tests for new pagination parameters
All CI tests now passing after template system enhancements
Major improvements based on comprehensive test suite review:
Test Fixes:
- Fix all 78 failing tests across logger, MSW, and validator tests
- Fix console spy management in logger tests with proper DEBUG env handling
- Fix MSW test environment restoration in session-management.test.ts
- Fix workflow validator tests by adding proper node connections
- Fix mock setup issues in edge case tests
Test Organization:
- Split large config-validator.test.ts (1,075 lines) into 4 focused files
- Rename 63+ tests to follow "should X when Y" naming convention
- Add comprehensive edge case test files for all major validators
- Create tests/README.md with testing guidelines and best practices
New Features:
- Add ConfigValidator.validateBatch() method for bulk validation
- Add edge case coverage for null/undefined, boundaries, invalid data
- Add CI-aware performance test timeouts
- Add JSDoc comments to test utilities and factories
- Add workflow duplicate node name validation tests
Results:
- All tests passing: 1,356 passed, 19 skipped
- Test coverage: 85.34% statements, 85.3% branches
- From 78 failures to 0 failures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove AI agent coordination files and progress tracking
- Remove temporary test results and generated artifacts
- Remove diagnostic test scripts from src/scripts/
- Remove development planning documents
- Update .gitignore to exclude test artifacts
- Clean up 53 temporary files total
- Fixed undefined variable reference in server.ts (possiblePaths)
- Fixed type mismatches in database performance tests
- Added proper type assertions for MCP response objects
- Fixed TemplateNode interface compliance in tests
All TypeScript checks now pass successfully.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed InMemoryTransport destructuring (object → array)
- Updated all callTool calls to new object syntax
- Changed getServerInfo() to getServerVersion()
- Added type assertions for response objects
- Fixed import paths and missing imports
- Corrected template and performance test type issues
- All 56 TypeScript errors resolved
Both 'npm run lint' and 'npm run typecheck' now pass successfully
- Fixed MSW event listener memory leaks
- Added proper database connection cleanup
- Fixed MSW server lifecycle management
- Reduced global test timeout to 30s for faster failure detection
- Added resource cleanup in all integration tests
This should resolve the GitHub Actions test hanging issue
- Fixed better-sqlite3 ES module imports across all tests
- Updated template repository method to handle undefined results
- Fixed all database column references to match schema
- Corrected MCP transport initialization
- All integration tests now passing
- Fix better-sqlite3 import statements to use namespace import
- Update test schemas to match actual database schema
- Align NodeRepository tests with actual API implementation
- Fix FTS5 tests to work with templates instead of nodes
- Update mock data to match ParsedNode interface
- Fix column names to match actual schema (node_type, package_name, etc)
- Add proper ParsedNode creation helper function
- Remove tests for non-existent foreign key constraints
- Add comprehensive test utilities for database testing
- Implement connection management tests for in-memory and file databases
- Add transaction tests including nested transactions and savepoints
- Test database lifecycle, error handling, and performance
- Include tests for WAL mode, connection pooling, and constraints
Part of Phase 4: Integration Testing