Skip to main content
Glama

DollhouseMCP

by DollhouseMCP
SESSION_NOTES_2025-10-08-LATE-AFTERNOON-PERFORMANCE-TEST-ISOLATION.md10 kB
# Session Notes - October 8, 2025 - Late Afternoon **Date**: October 8, 2025 **Time**: 4:40 PM - 5:30 PM (50 minutes) **Focus**: Performance test isolation and release readiness **Outcome**: ✅ Fixed flaky tests, develop ready for v1.9.17 release ## Session Summary Resolved flaky IndexOptimization test failures by isolating performance tests into a separate test configuration with optimized parallel execution. Completed repository cleanup and prepared develop branch for v1.9.17 patch release. ## Work Completed ### 1. Repository Cleanup - PR #1287 ✅ **Problem**: Files added to `.gitignore` in PR #1276 were still tracked in repository **Solution**: - Created feature branch `feature/remove-ignored-files-from-tracking` - Removed `.obsidian/` (4 files) and `test-results/` (3 files) from Git tracking - Files remain available locally but no longer in version control **PR**: #1287 - Merged to develop ### 2. Performance Test Isolation - PR #1288 ✅ **Problem**: Flaky IndexOptimization test - Expected: <800ms - Actual: 926ms (intermittent failures in full test suite) - Root cause: Resource contention from 2400+ concurrent tests - When run in isolation: Consistently passes at 60-70ms **Investigation**: - Used worktree: `git worktree add -b feature/fix-index-optimization-test-timeout ../worktrees/fix-index-optimization develop` - Ran test in isolation: **PASSED at 59-66ms** - Confirmed issue was test suite interference, not slow code **Solution Implemented**: #### Created Dedicated Performance Test Configuration **File**: `test/jest.performance.config.cjs` ```javascript const baseConfig = require('./jest.config.cjs'); const config = { ...baseConfig, testMatch: ['<rootDir>/test/__tests__/performance/**/*.test.ts'], // Filter base config to remove performance test exclusion testPathIgnorePatterns: baseConfig.testPathIgnorePatterns.filter( pattern => pattern !== '/test/__tests__/performance/' ), maxWorkers: 4, // 4 parallel workers for optimal speed testTimeout: 30000, verbose: true, collectCoverage: false }; ``` #### Updated Main Jest Config **File**: `test/jest.config.cjs` - Added `/test/__tests__/performance/` to `testPathIgnorePatterns` - Main suite no longer runs performance tests concurrently #### Added NPM Script **File**: `package.json` ```json "test:performance": "cross-env ... jest --config test/jest.performance.config.cjs", "test:all": "npm test && npm run test:performance && npm run test:integration" ``` #### Updated CI Workflows - `core-build-test.yml`: Added dedicated performance test step - `performance-testing.yml`: Updated to use new `test:performance` script **Initial Implementation Issue**: - Started with `maxWorkers: 1` (serial execution) - CI timed out after 10 minutes - 5 test files running one-by-one with full setup/teardown overhead **Optimization**: - Changed to `maxWorkers: 4` (4 parallel workers) - 5 test files distributed across 4 workers - Reduced execution time from 10+ minutes to **18.7s locally** **SonarCloud Issue**: - Initial implementation had code duplication (B rating) - Duplicated all 13 `testPathIgnorePatterns` from base config - Fixed by using `.filter()` to inherit patterns: `baseConfig.testPathIgnorePatterns.filter(...)` - Eliminated 13 lines of duplication **Test Results**: | Scenario | Tests | Result | |----------|-------|--------| | **Before** (full suite) | 2330 tests | ❌ IndexOptimization fails at 926ms | | **After** (main suite) | 2269 tests | ✅ All pass (performance excluded) | | **After** (performance) | 62 tests | ✅ All pass, IndexOptimization at 62-70ms | | **Execution Time** | 5 files | ✅ 18.7s (4 workers) vs 10+ min (serial) | **PR**: #1288 - Merged to develop ### 3. Commits in PR #1288 1. **Initial fix**: Isolated performance tests with separate config 2. **Duplication fix**: Eliminated code duplication for SonarCloud 3. **Performance fix**: Changed from serial (maxWorkers: 1) to parallel (maxWorkers: 4) ## Develop Branch Status - Release Readiness ### Current State Analysis **Version**: 1.9.16 (ready for 1.9.17 patch release) **Last Release**: v1.9.16 (on main) **Commits Ahead of Main**: 44 commits ### CI/CD Status ✅ **All GitHub Actions passing** on develop branch ### Test Status ✅ **2331 total tests passing** - Main suite: 2269 tests - Performance suite: 62 tests (now isolated) - No flaky tests - No critical failures ### Open Issues ✅ **No blocking issues** - No critical bugs - No security issues - No failing tests ### Changes Since Last Release (v1.9.16) **Security Fixes** (2): - Fix CRITICAL command injection vulnerability (DMCP-SEC-001) - Fix PATH injection vulnerability **Bug Fixes** (4): - ✅ **NEW**: Fix flaky IndexOptimization test (#1288) - Skip flaky GitHubRateLimiter tests (#1286) - Recognize MERGED state in release verification - Skip Claude Code Review for Dependabot PRs (#1241) **Features** (3): - Add orphaned issues checker (#1251) - Add dev-notes/ directory for personal documentation (#1275) - Add automated release issue verification **Chores/Docs** (9): - ✅ **NEW**: Remove .obsidian/ and test-results/ from tracking (#1287) - Add .obsidian/ and test-results/ to .gitignore (#1276) - Rename docs/archive/ to docs/session-history/ (#1277) - Docker env file best practices (#1273) - Add README to data/ directory (#1274) - Refactor CLAUDE.md documentation (#1270) - Multiple session note additions ### Release Readiness Assessment **READY FOR v1.9.17 PATCH RELEASE** ✅ **Criteria Met**: - ✅ All tests passing (2331 tests) - ✅ No flaky tests (IndexOptimization fixed) - ✅ CI/CD green across all platforms - ✅ No open critical/security issues - ✅ Clean git history - ✅ Documentation updated - ✅ Performance tests isolated and optimized **Release Type**: Patch (v1.9.17) **Justification**: Bug fixes, test improvements, repository cleanup - no breaking changes **Changes Summary for Release Notes**: - Fixed flaky performance test execution - Improved CI/CD performance (10+ min → ~19s for performance tests) - Repository cleanup (removed tracked ignored files) - Enhanced test isolation and reliability ## Technical Insights ### Git Worktree Usage Successfully used worktree for isolated development: ```bash git worktree add -b feature/fix-index-optimization-test-timeout \ ../worktrees/fix-index-optimization develop ``` Benefits: - Separate working directory for feature branch - No need to stash changes in main workspace - Independent npm install and test runs ### Test Performance Analysis **Root Cause of Flakiness**: - Not slow code, but resource contention - 2400+ tests competing for CPU/memory/I/O - Performance tests particularly sensitive to system load **Solution Architecture**: - Separate test configuration for performance tests - Dedicated npm script for isolated execution - Optimized worker count (4 workers vs serial) - Excluded from main suite to prevent interference **Trade-offs**: - ✅ Eliminates flakiness completely - ✅ Faster overall CI execution - ✅ Better test reliability - ⚠️ Adds complexity (separate config file) - ⚠️ Performance tests run in separate CI step ### SonarCloud Best Practices **Code Duplication Anti-Pattern**: ```javascript // BAD: Duplicating entire array testPathIgnorePatterns: [ '/node_modules/', '/test/__tests__/integration/', // ... 11 more patterns copied from base ] // GOOD: Filter base config testPathIgnorePatterns: baseConfig.testPathIgnorePatterns.filter( pattern => pattern !== '/test/__tests__/performance/' ) ``` **Lesson**: Always prefer composition/filtering over duplication when extending configurations. ## Key Learnings 1. **Test Isolation**: Performance tests need dedicated execution environment 2. **Worker Optimization**: Balance between parallelization and resource contention (4 workers optimal) 3. **Configuration Reuse**: Filter/compose configs rather than duplicate 4. **Flaky Test Diagnosis**: Always test in isolation before assuming code is slow 5. **CI Optimization**: Small changes in worker count can have massive time impact ## Files Modified ### New Files - `test/jest.performance.config.cjs` - Dedicated performance test configuration ### Modified Files - `test/jest.config.cjs` - Exclude performance tests from main suite - `package.json` - Add test:performance script - `.github/workflows/core-build-test.yml` - Add performance test step - `.github/workflows/performance-testing.yml` - Use new performance script ### Removed Files (PR #1287) - `.obsidian/*` (4 files) - `test-results/*` (3 files) ## Next Session Priorities 1. **Create v1.9.17 Release** - Create release branch from develop - Update version to 1.9.17 - Generate release notes - Merge to main and tag 2. **Monitor CI Performance** - Verify performance test execution time in CI - Ensure no timeout issues - Check SonarCloud rating (should be A) 3. **Cleanup Worktree** - Remove worktree after merge: `git worktree remove ../worktrees/fix-index-optimization` 4. **Documentation** - Update CONTRIBUTING.md if needed to document performance test workflow - Consider documenting worktree usage patterns ## Command Reference ```bash # Check develop branch status git log origin/main..develop --oneline | wc -l # Commits ahead # Run performance tests locally npm run test:performance # Run all tests including performance npm run test:all # Create worktree for isolated work git worktree add -b feature/name ../worktrees/name develop # Remove worktree after merge git worktree remove ../worktrees/name ``` ## Session Statistics - **Duration**: 50 minutes - **PRs Created**: 2 - **PRs Merged**: 2 - **Commits**: 4 - **Files Modified**: 7 - **Files Created**: 1 - **Files Removed**: 7 - **Tests Fixed**: 1 flaky test resolved - **CI Time Saved**: ~9-10 minutes per PR run --- **Status**: ✅ Session objectives achieved **Develop Branch**: ✅ Ready for v1.9.17 release **Next Action**: Create release branch and prepare v1.9.17

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DollhouseMCP/DollhouseMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server