Files
testdrive-jsui/CLAUDE.md
tegwick f5ce02cf8d docs: Complete Phase 4 migration documentation
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>
2025-12-16 10:26:46 +01:00

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 .js files, 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: JavaScriptTestRunner executes 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.javascript for JS integration tests
  • Coverage target: 58% minimum
  • Addopts: Strict markers, verbose output, coverage reports

Development Workflow

Adding JavaScript Components

  1. Create component in appropriate js/ subdirectory (core/, components/, controls/, etc.)
  2. Write tests in js/tests/ with naming: component-name.test.js or test-component-name.js
  3. Run tests: npm test
  4. Add Python integration tests if needed in tests/

Adding Python Integration

  1. Create test in tests/ directory
  2. Use JavaScriptTestRunner to execute JS tests from Python
  3. Mark with @pytest.mark.javascript for selective test execution
  4. 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)

  1. Copy all original files to js/ directory
  2. Verify copies are correct
  3. Run all tests in capability
  4. 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)

  1. Update templates to use capability location
  2. Test each change individually (view & edit modes)
  3. Maintain rollback capability (originals preserved)
  4. Monitor for issues (none found)

Phase 4: Cleanup COMPLETE (December 16, 2025)

  1. Remove original files (29 files deleted)
  2. Update documentation references
  3. Archive migration records
  4. 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 on debugger
  • 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:

  1. JavaScript tests (Jest)
  2. JavaScript fixes test (Python-based validation)
  3. Python integration tests (pytest)
  4. 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)