Update documentation to reflect Phase 4 completion: - Mark Phase 4 as complete in MIGRATION_STATUS.md - Update executive summary with Phase 4 achievements - Update CLAUDE.md migration status to reflect all phases complete - Document removal of 29 legacy files - Establish single source of truth: /capabilities/testdrive-jsui/js/ Phase 4 Cleanup Summary: - ✅ Removed /markitect/static/js/ directory (all JS files) - ✅ Removed /markitect/static/editor.js (unused) - ✅ Preserved /markitect/static/css/ (still in use) - ✅ Clean codebase with no duplicate JavaScript files Migration Status: FULLY COMPLETE - All 4 phases done 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
9.7 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Overview
TestDrive-JSUI is a standalone JavaScript UI rendering engine and testing framework. It's designed as an independent, reusable capability that provides:
- Interactive JavaScript UI for markdown editing/viewing
- Python-JavaScript test integration bridge
- Self-contained plugin architecture with no hardcoded paths
Migration Status
✅ MIGRATION FULLY COMPLETE - ALL PHASES
This capability migration is now fully complete including cleanup. The main MarkiTect application exclusively uses the capability location, and legacy files have been removed.
Current Status: ✅ Phase 4 Complete (December 16, 2025)
- All 24 original JavaScript files copied to capability ✅
- 84 automated tests passing (68 JS + 15 Python + 1 fixes) ✅
- Templates updated to use capability location ✅
- Main app fully using capability (no hybrid approach) ✅
- Verified in both view and edit modes ✅
- Legacy files removed - cleanup complete ✅
Key Facts:
- Main app status: Fully migrated to capability location
- Original files: REMOVED from
/markitect/static/js/(Phase 4 cleanup) - Single source of truth: All JavaScript in
/capabilities/testdrive-jsui/js/ - Testing: All rendering modes work correctly
- Migration: Fully complete - no further phases needed
Documentation: See MIGRATION_STATUS.md for complete migration details, all phases, and final verification results.
Build and Test Commands
Setup
# Complete setup (Python + JavaScript dependencies)
make testdrive-jsui-setup
# Check environment status
make testdrive-jsui-status
Testing
# Run all tests (recommended before commits)
make testdrive-jsui-test-all
# Run JavaScript tests only (Jest)
make testdrive-jsui-test-js
npm test
# Run specific JavaScript test
npm test -- --testNamePattern="SectionManager"
# Run Python integration tests only
make testdrive-jsui-test-python
pytest tests/ -v
# Run tests with coverage
npm run test:coverage
# Watch mode for development
make testdrive-jsui-watch
Linting and Formatting
# Lint JavaScript
make testdrive-jsui-lint-js
# Lint Python
make testdrive-jsui-lint-python
# Format Python code with black
make testdrive-jsui-format-python
Cleanup
make testdrive-jsui-clean
Architecture
Directory Structure
testdrive-jsui/
├── src/testdrive_jsui/ # Python package
│ ├── core/ # Core framework components
│ ├── components/ # UI component helpers
│ ├── utils/ # Utility functions
│ └── testing/ # Python-JS bridge
│ ├── js_test_runner.py # JavaScript test execution
│ └── integration.py # Pytest integration
├── js/ # JavaScript source (consolidated)
│ ├── core/ # Core JS: debug-system, section-manager
│ ├── components/ # UI components: dom-renderer, debug-panel
│ ├── controls/ # Control panels: edit, debug, status, contents
│ ├── plugins/ # JS plugins
│ ├── widgets/ # UI widgets
│ ├── utils/ # JS utilities
│ ├── tests/ # JavaScript tests
│ ├── config-loader.js # Configuration loader
│ ├── main.js # Original main entry point
│ └── main-updated.js # Refactored main entry
├── static/ # Static assets
│ ├── css/ # Stylesheets (editor, controls, themes)
│ ├── images/ # Image assets and icons
│ └── templates/ # HTML templates (index.html)
└── tests/ # Python tests
Key Design Principles
Plugin Independence
- Self-declaring: Plugin declares its own location - no hardcoded paths needed
- Single source of truth: All assets in one capability directory
- Clean boundaries: JSON config interface between Python and JavaScript
- No code mixing: JavaScript stays in
.jsfiles, never embedded in Python strings - Works regardless of installation location
Testing Architecture
- Dual-track testing: JavaScript tests (Jest) + Python integration tests (pytest)
- Python-JS bridge:
JavaScriptTestRunnerexecutes JS tests from Python - Test isolation: Proper setup/teardown with JSDOM environment
- Coverage integration: Combines Python and JavaScript coverage
Component Organization
- Core:
debug-system.js,section-manager.js- fundamental framework components - Components:
dom-renderer.js,debug-panel.js- UI rendering components - Controls:
control-base.js,edit-control.js,debug-control.js,status-control.js,contents-control.js- interactive control panels - All components are modular and testable in isolation
Python-JavaScript Bridge
The capability provides seamless integration between Python and JavaScript tests:
JavaScriptTestRunner (src/testdrive_jsui/testing/js_test_runner.py):
- Executes JavaScript tests via subprocess (Node.js + Jest)
- Parses JSON test results into Python dataclasses (
JSTestResult) - Provides methods:
run_js_tests(),run_specific_test(),list_available_tests() - Auto-discovers capability root if not specified
- Validates Node.js environment before execution
Usage Example:
from testdrive_jsui.testing import JavaScriptTestRunner
runner = JavaScriptTestRunner()
result = runner.run_js_tests(coverage=True)
assert result.success
assert result.tests_passed > 0
Jest Configuration
Located in package.json (no separate jest.config.js):
- Test environment: jsdom
- Test patterns:
**/js/tests/**/*.test.js - Coverage: Collects from
js/core/,js/components/,js/utils/ - Setup:
js/tests/jest.setup.js - Ignored files:
refactor-test-runner.js,setup.js
Pytest Configuration
Located in pyproject.toml:
- Test paths:
tests/,src/testdrive_jsui/tests/ - Markers:
@pytest.mark.javascriptfor JS integration tests - Coverage target: 58% minimum
- Addopts: Strict markers, verbose output, coverage reports
Development Workflow
Adding JavaScript Components
- Create component in appropriate
js/subdirectory (core/,components/,controls/, etc.) - Write tests in
js/tests/with naming:component-name.test.jsortest-component-name.js - Run tests:
npm test - Add Python integration tests if needed in
tests/
Adding Python Integration
- Create test in
tests/directory - Use
JavaScriptTestRunnerto execute JS tests from Python - Mark with
@pytest.mark.javascriptfor selective test execution - Run:
pytest tests/ -v -m javascript
Migration Strategy (Copy-First)
Status: ✅ ALL PHASES COMPLETE - See MIGRATION_STATUS.md for full details
The capability followed a copy-first, verify-later migration principle:
Phase 1: Copy ✅ COMPLETE (December 16, 2025)
- ✅ Copy all original files to
js/directory - ✅ Verify copies are correct
- ✅ Run all tests in capability
- ✅ Document current state
Phase 2: Dual-Track Testing (SKIPPED)
- Skipped as Phase 1 testing was comprehensive enough
Phase 3: Gradual Switch ✅ COMPLETE (December 16, 2025)
- ✅ Update templates to use capability location
- ✅ Test each change individually (view & edit modes)
- ✅ Maintain rollback capability (originals preserved)
- ✅ Monitor for issues (none found)
Phase 4: Cleanup ✅ COMPLETE (December 16, 2025)
- ✅ Remove original files (29 files deleted)
- ✅ Update documentation references
- ✅ Archive migration records
- ✅ Tag final migration commit
Final State: Migration fully complete. Main app exclusively uses capability location. Legacy files removed. Single source of truth: /capabilities/testdrive-jsui/js/. All tests passing. See MIGRATION_STATUS.md for complete history.
Common Development Tasks
Running Single Test
# JavaScript
npm test -- --testNamePattern="specific test name"
# Python
pytest tests/test_specific.py -v
Debugging Tests
# Verbose JavaScript output
npm run test:verbose
# Python with debug output
pytest tests/ -v -s
Checking Test Coverage
# JavaScript coverage (generates coverage/ directory)
npm run test:coverage
# Python coverage (included in pytest runs)
pytest tests/ -v --cov=testdrive_jsui --cov-report=html
Development Watch Mode
# Auto-rerun tests on file changes
make testdrive-jsui-watch
# or
npm run test:watch
Important Notes
Code Quality Standards
- ESLint: Standard config with Jest plugin, warns on
console, errors ondebugger - Black: Python formatting with 88 char line length
- MyPy: Strict typing for Python code (can be disabled for tests)
Test Execution Order
When running make testdrive-jsui-test-all:
- JavaScript tests (Jest)
- JavaScript fixes test (Python-based validation)
- Python integration tests (pytest)
- HTML manual tests (available for browser testing)
Node.js Requirements
- Node.js 16+ required for JavaScript testing
- npm automatically installs dependencies from
package.json - If Node.js unavailable, JavaScript tests gracefully skip with warning
Rendering Modes
The engine supports two modes:
'edit': Interactive editing mode with controls'view': View-only mode
Validate modes before rendering:
if engine.validate_mode('edit'):
html = engine.render_document(content, 'edit', config)