# MarkiTect - Advanced Markdown Engine # Makefile for common development tasks # Include capability discovery system include scripts/capability_discovery.mk # Set explicit default target .DEFAULT_GOAL := help .PHONY: help setup install install-dev uninstall install-home install-home-venv install-user-deps install-force-deps install-deps-venv install-system-deps list-deps setup-dev test test-js test-all build clean update status lint format check-deps venv-status update-digest add-diary-entry test-status test-new test-coverage test-arch test-foundation test-infrastructure test-integration test-domain test-service test-application test-presentation test-quick test-layers test-random test-random-seed test-random-repeat test-install-randomly test-clean test-tdd test-changed test-module test-cache-clean test-efficient cli-help chaos-validate chaos-matrix chaos-inject chaos-report cost-help # Default target help: @echo "MarkiTect Development Commands" @echo "==============================" @echo "" @echo "Environment Status:" @$(MAKE) --no-print-directory venv-status @echo "" @echo "Setup & Installation:" @echo " setup - Initial project setup (venv + install-dev)" @echo " install - Install markitect globally (recommended)" @echo " install-dev - Install package in development mode" @echo " uninstall - Remove global markitect installation" @echo " list-deps - List required dependencies for markitect" @echo " venv-status - Check if venv is active" @echo "" @echo "Advanced Installation:" @echo " install-user-deps - Install dependencies to user location only" @echo " install-system-deps - Install dependencies via system packages (sudo)" @echo " install-force-deps - Force install with --break-system-packages" @echo "" @echo "Development:" @echo " test - Run core tests (excluding capability-specific tests)" @echo " test-js - Run JavaScript UI tests" @echo " test-all - Run all tests (Python + JavaScript + Capabilities)" @echo " test-capabilities - Run all capability tests (delegated to capabilities)" @echo " test-status - Show test status summary without re-running" @echo " test-new - Create new test file template" @echo " test-coverage - Analyze test coverage" @echo " build - Build the package" @echo " package - Build distribution packages (wheel + sdist)" @echo " lint - Run code linting" @echo " format - Format code" @echo "" @echo "Capabilities & Extensions:" @echo " capabilities-list List all available capabilities" @echo " capabilities-help Show help for all capabilities" @echo " capabilities-status Show capability status" @echo "" @echo "Release Management (via capability):" @echo " release-status Show current release status" @echo " release-publish-gitea VERSION=x.y.z Complete release + Gitea upload" @echo " Run 'make capabilities-help' for all release commands" @echo "" @echo "Chaos Engineering:" @echo " chaos-validate - Run architectural independence validation" @echo " chaos-matrix - Show dependency matrix" @echo " chaos-inject LAYER=X TYPE=Y - Inject chaos into specific layer" @echo " chaos-report - Generate chaos engineering report" @echo "" @echo "Cost Tracking:" @echo " cost-help - Show cost tracking commands and usage" @echo "" @echo "Architectural Testing:" @echo " test-arch - Run all tests in architectural order" @echo " test-foundation - Run foundation layer tests only" @echo " test-infrastructure - Run infrastructure layer tests only" @echo " test-integration - Run integration layer tests only" @echo " test-domain - Run domain layer tests only" @echo " test-service - Run service layer tests only" @echo " test-application - Run application layer tests only" @echo " test-presentation - Run presentation layer tests only" @echo " test-quick - Run foundation + infrastructure only (fast)" @echo " test-layers - List all architectural layers" @echo "" @echo "Randomized Testing:" @echo " test-random - Run tests in random order (dependency detection)" @echo " test-random-seed SEED=X - Run with specific seed for reproducibility" @echo " test-random-repeat NUM=X - Run multiple random iterations" @echo " test-install-randomly - Install pytest-randomly plugin" @echo "" @echo "Test Efficiency (Issue #57):" @echo " test-clean - Clean test run (exclude workspaces, fresh cache)" @echo " test-tdd - Quick TDD tests for fast feedback (<30s)" @echo " test-fast - Skip slow tests for fast development feedback" @echo " test-changed - Run tests for changed files only" @echo " test-module MODULE=name - Run tests for specific module" @echo " test-cache-clean - Clean pytest cache" @echo " test-efficient - Enhanced test suite (exclude workspaces)" @echo "" @echo "Maintenance:" @echo " update - Update from upstream (git + submodules)" @echo " status - Show git status for repo and submodules" @echo " clean - Clean build artifacts" @echo " check-deps - Check dependency status" @echo " validate-js - Validate JavaScript syntax in templates" @echo "" @echo "Documentation:" @echo " update-digest - Update ProjectStatusDigest.md (requires Claude Code)" @echo " add-diary-entry - Add new entry to ProjectDiary.md (requires Claude Code)" @echo "" @echo "Capability Management:" @echo " capability-report - Generate capability discovery report" @echo " capability-search TERM=xyz - Search for functionality across capabilities" @echo " capability-validate FILE=path - Validate proper capability usage in file" @echo "" @echo "" @echo "Requirements Engineering:" @echo " validate-requirements - Analyze foundations before development" @echo " check-interface-compatibility INTERFACE=Name - Check interface compatibility" @echo " generate-dev-checklist FEATURE='Name' - Generate development checklist" @echo " validate-mocks - Validate mock object compatibility" @echo " pre-commit-validate - Complete pre-commit validation" @echo " view-requirements-examples - Show usage examples" @echo "" @echo "MarkiTect CLI Usage:" @echo " cli-help - Show detailed CLI usage targets and examples" @echo " cli-ingest [FILE=doc.md] - Process and store markdown files" @echo " cli-workflow-basic - Run complete basic workflow demo" @echo " cli-workflow-schema FILE=doc.md - Run schema generation workflow" # Python and virtual environment setup PYTHON := python3 VENV := .venv VENV_PYTHON := $(VENV)/bin/python VENV_PIP := $(VENV)/bin/pip # Check virtual environment status (read-only) venv-status: @if [ -f $(VENV)/bin/activate ] && [ -f $(VENV)/bin/python ]; then \ if [ -n "$$VIRTUAL_ENV" ] && [ "$$VIRTUAL_ENV" = "$$(realpath $(VENV))" ]; then \ echo " โœ… Virtual environment: Active in current shell"; \ elif [ -n "$$VIRTUAL_ENV" ]; then \ echo " โš ๏ธ Virtual environment: Different venv active ($$VIRTUAL_ENV)"; \ echo " Run 'deactivate' then 'source $(VENV)/bin/activate'"; \ else \ echo " ๐Ÿ“ Virtual environment: Ready but not activated"; \ echo " Run 'source $(VENV)/bin/activate' to activate"; \ fi; \ else \ echo " โŒ Virtual environment: Not found"; \ echo " Run 'make setup' to create and configure"; \ fi # Setup virtual environment and install package setup: $(VENV)/bin/activate install-dev @echo "โœ… Project setup complete!" $(VENV)/bin/activate: @echo "๐Ÿ”ง Creating virtual environment..." $(PYTHON) -m venv $(VENV) $(VENV_PIP) install --upgrade pip setuptools wheel # Install markitect globally (recommended approach) install: @echo "๐Ÿš€ Installing MarkiTect globally..." @echo "๐Ÿ“ฆ Creating user virtual environment with dependencies..." @$(MAKE) --no-print-directory install-deps-venv @echo "๐Ÿ  Installing markitect binary to ~/bin/..." @$(MAKE) --no-print-directory install-home-venv @echo "" @echo "โœ… MarkiTect installed successfully!" @echo "๐Ÿ’ก Make sure ~/bin is in your PATH:" @echo " export PATH=\"$$HOME/bin:$$PATH\"" @echo "" @echo "๐Ÿงช Test installation:" @echo " markitect version" # Remove global markitect installation uninstall: @echo "๐Ÿ—‘๏ธ Removing MarkiTect global installation..." @if [ -f "$$HOME/bin/markitect" ]; then \ echo " Removing binary: $$HOME/bin/markitect"; \ rm "$$HOME/bin/markitect"; \ echo " โœ… Binary removed"; \ else \ echo " โ„น๏ธ Binary not found at $$HOME/bin/markitect"; \ fi @if [ -d "$$HOME/.local/markitect-venv" ]; then \ echo " Removing virtual environment: $$HOME/.local/markitect-venv"; \ rm -rf "$$HOME/.local/markitect-venv"; \ echo " โœ… Virtual environment removed"; \ else \ echo " โ„น๏ธ Virtual environment not found"; \ fi @echo "โœ… MarkiTect uninstalled successfully!" # Install package in development mode install-dev: $(VENV)/bin/activate @echo "๐Ÿ“ฆ Installing MarkiTect in development mode..." $(VENV_PIP) install -e . # Install markitect binary to user's home bin directory install-home: $(VENV)/bin/activate @echo "๐Ÿ  Installing MarkiTect to ~/bin/..." @mkdir -p $$HOME/bin @PYTHON_PATH=$$(which python3); \ echo "#!/usr/bin/env python3" > $$HOME/bin/markitect; \ echo "import sys" >> $$HOME/bin/markitect; \ echo "import os" >> $$HOME/bin/markitect; \ echo "# Add project directory to Python path" >> $$HOME/bin/markitect; \ echo "sys.path.insert(0, '$(shell pwd)')" >> $$HOME/bin/markitect; \ echo "try:" >> $$HOME/bin/markitect; \ echo " from markitect.cli import main" >> $$HOME/bin/markitect; \ echo "except ImportError as e:" >> $$HOME/bin/markitect; \ echo " print('Error: MarkiTect dependencies not found.')" >> $$HOME/bin/markitect; \ echo " print('Please run: make install-deps')" >> $$HOME/bin/markitect; \ echo " print(f'ImportError: {e}')" >> $$HOME/bin/markitect; \ echo " sys.exit(1)" >> $$HOME/bin/markitect; \ echo "if __name__ == '__main__':" >> $$HOME/bin/markitect; \ echo " main()" >> $$HOME/bin/markitect @chmod +x $$HOME/bin/markitect @echo "โœ… MarkiTect installed to $$HOME/bin/markitect" @echo "๐Ÿ’ก Make sure $$HOME/bin is in your PATH to use 'markitect' command globally" @echo " Add this to your shell config: export PATH=\"\$$HOME/bin:\$$PATH\"" @echo "โš ๏ธ Dependencies needed: Run 'make install-deps' or 'make list-deps' for details" # Install markitect binary using user virtual environment install-home-venv: $(VENV)/bin/activate @echo "๐Ÿ  Installing MarkiTect to ~/bin/ (using user virtual environment)..." @if [ ! -d "$$HOME/.local/markitect-venv" ]; then \ echo "โŒ User virtual environment not found"; \ echo " Run 'make install-deps-venv' first"; \ exit 1; \ fi @mkdir -p $$HOME/bin @echo "#!$$HOME/.local/markitect-venv/bin/python" > $$HOME/bin/markitect @echo "import sys" >> $$HOME/bin/markitect @echo "import os" >> $$HOME/bin/markitect @echo "# Add project directory to Python path" >> $$HOME/bin/markitect @echo "sys.path.insert(0, '$(shell pwd)')" >> $$HOME/bin/markitect @echo "try:" >> $$HOME/bin/markitect @echo " from markitect.cli import main" >> $$HOME/bin/markitect @echo "except ImportError as e:" >> $$HOME/bin/markitect @echo " print('Error: MarkiTect dependencies not found.')" >> $$HOME/bin/markitect @echo " print('Please run: make install-deps-venv')" >> $$HOME/bin/markitect @echo " print(f'ImportError: {e}')" >> $$HOME/bin/markitect @echo " sys.exit(1)" >> $$HOME/bin/markitect @echo "if __name__ == '__main__':" >> $$HOME/bin/markitect @echo " main()" >> $$HOME/bin/markitect @chmod +x $$HOME/bin/markitect @echo "โœ… MarkiTect installed to $$HOME/bin/markitect (using user venv)" @echo "๐Ÿ’ก Make sure $$HOME/bin is in your PATH to use 'markitect' command globally" @echo " Add this to your shell config: export PATH=\"\$$HOME/bin:\$$PATH\"" @echo "โœ… Dependencies are isolated in: $$HOME/.local/markitect-venv" # List required dependencies for markitect list-deps: @echo "๐Ÿ“‹ MarkiTect Dependencies" @echo "========================" @echo "" @echo "Required dependencies:" @echo " markdown-it-py - Markdown parsing" @echo " PyYAML - YAML front matter parsing" @echo " click>=8.0.0 - CLI framework" @echo " tabulate>=0.9.0 - Table formatting" @echo " jsonpath-ng>=1.5.0 - JSON path queries" @echo " aiohttp>=3.8.0 - Async HTTP client" @echo " toml - TOML configuration parsing" @echo "" @echo "๐Ÿ”ง Installation options:" @echo " make install - Install globally (recommended)" @echo " make install-user-deps - Install user-local dependencies only" @echo " make install-system-deps - Install via apt + pip --user (requires sudo)" @echo " pip3 install --user [packages] - Manual user-local installation" @echo " pip install -e . - Install from project directory (dev mode)" # Install user-local dependencies for markitect (no sudo needed) install-user-deps: @echo "๐Ÿ“ฆ Installing MarkiTect dependencies (user-local)..." @echo "๐Ÿ Target Python: $$(which python3) (version: $$(python3 --version))" @echo "๐Ÿ“ pip3 location: $$(which pip3)" @echo "" @echo "๐Ÿ”ง Attempting user-local installation..." @if pip3 install --user markdown-it-py PyYAML "click>=8.0.0" "tabulate>=0.9.0" "jsonpath-ng>=1.5.0" "aiohttp>=3.8.0" toml 2>/dev/null; then \ echo "โœ… Dependencies installed successfully!"; \ else \ echo "โŒ User-local installation failed (externally-managed-environment)"; \ echo ""; \ echo "๐Ÿ”ง Alternative solutions:"; \ echo " 1. Use system packages: make install-system-deps"; \ echo " 2. Override restriction: make install-force-deps"; \ echo " 3. Create user venv: make install-deps-venv"; \ echo " 4. Use development setup: make setup"; \ echo ""; \ echo "๐Ÿ’ก Recommended: Try 'make install' for complete setup"; \ exit 1; \ fi @echo "๐Ÿงช Testing import..." @python3 -c "import sys; sys.path.insert(0, '$(shell pwd)'); import markitect.cli; print('โœ… MarkiTect imports successfully')" 2>/dev/null || echo "โš ๏ธ Import test failed - check if project path is correct" @echo "๐Ÿ’ก You can now use 'markitect' command if it's in your PATH" # Force install user-local dependencies (overrides externally-managed restriction) install-force-deps: @echo "๐Ÿ“ฆ Force installing MarkiTect dependencies (overriding restrictions)..." @echo "โš ๏ธ This uses --break-system-packages flag" @echo " Only use if you understand the implications" @echo "" @read -p "Continue with forced installation? [y/N]: " confirm; \ if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \ echo "๐Ÿ“ฆ Installing dependencies with --break-system-packages..."; \ pip3 install --user --break-system-packages markdown-it-py PyYAML "click>=8.0.0" "tabulate>=0.9.0" "jsonpath-ng>=1.5.0" "aiohttp>=3.8.0" toml; \ echo "โœ… Dependencies installed successfully!"; \ echo "๐Ÿงช Testing import..."; \ python3 -c "import sys; sys.path.insert(0, '$(shell pwd)'); import markitect.cli; print('โœ… MarkiTect imports successfully')" 2>/dev/null || echo "โš ๏ธ Import test failed"; \ echo "๐Ÿ’ก You can now use 'markitect' command if it's in your PATH"; \ else \ echo "โŒ Installation cancelled"; \ echo "๐Ÿ’ก Alternative: Use 'make install-system' or 'make install-deps-venv'"; \ fi # Install dependencies using a user virtual environment install-deps-venv: @echo "๐Ÿ“ฆ Installing MarkiTect dependencies using user virtual environment..." @echo "๐Ÿ’ก Creating virtual environment in ~/.local/markitect-venv" @mkdir -p $$HOME/.local @python3 -m venv $$HOME/.local/markitect-venv @$$HOME/.local/markitect-venv/bin/pip install --upgrade pip @echo "๐Ÿ“ฆ Installing main dependencies..." @$$HOME/.local/markitect-venv/bin/pip install markdown-it-py PyYAML "click>=8.0.0" "tabulate>=0.9.0" "jsonpath-ng>=1.5.0" "aiohttp>=3.8.0" toml @echo "๐Ÿ“ฆ Installing local markitect-content package..." @if [ -d "capabilities/markitect-content" ]; then \ $$HOME/.local/markitect-venv/bin/pip install -e capabilities/markitect-content; \ echo "โœ… markitect-content installed"; \ else \ echo "โš ๏ธ markitect-content directory not found, skipping"; \ fi @echo "โœ… Dependencies installed successfully!" @echo "๐Ÿงช Testing import..." @$$HOME/.local/markitect-venv/bin/python -c "import sys; sys.path.insert(0, '$(shell pwd)'); import markitect.cli; print('โœ… MarkiTect imports successfully')" 2>/dev/null || echo "โš ๏ธ Import test failed" @echo "๐Ÿ’ก Virtual environment created at: $$HOME/.local/markitect-venv" @echo "๐Ÿ’ก To use this, run 'make install-home-venv' instead of 'make install-home'" # Install system dependencies via apt (requires sudo) install-system-deps: @echo "๐Ÿ“ฆ Installing MarkiTect dependencies via apt..." @echo "โš ๏ธ This requires sudo and installs system packages" @echo "" @echo "Available system packages:" @echo " python3-yaml - PyYAML" @echo " python3-click - Click CLI framework" @echo " python3-tabulate - Tabulate" @echo " python3-aiohttp - Async HTTP client" @echo "" @echo "โš ๏ธ Note: Some packages (markdown-it-py, jsonpath-ng) may not be available via apt" @echo " You may need to combine this with 'make install-deps' for missing packages" @echo "" @read -p "Continue with apt installation? [y/N]: " confirm; \ if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \ echo "๐Ÿ“ฆ Installing available system packages..."; \ sudo apt update; \ sudo apt install -y python3-yaml python3-click python3-tabulate python3-aiohttp python3-toml; \ echo "๐Ÿ“ฆ Installing remaining packages with pip --user..."; \ pip3 install --user markdown-it-py "jsonpath-ng>=1.5.0"; \ echo "โœ… Dependencies installed successfully!"; \ echo "๐Ÿงช Testing import..."; \ python3 -c "import sys; sys.path.insert(0, '$(shell pwd)'); import markitect.cli; print('โœ… MarkiTect imports successfully')" 2>/dev/null || echo "โš ๏ธ Import test failed"; \ echo "๐Ÿ’ก You can now use 'markitect' command if it's in your PATH"; \ else \ echo "โŒ Installation cancelled"; \ echo "๐Ÿ’ก Alternative: Use 'make install' for automated setup"; \ fi # Install with development dependencies setup-dev: install-dev @echo "๐Ÿ› ๏ธ Installing development dependencies..." $(VENV_PIP) install pytest pytest-cov black flake8 mypy # Run tests test: $(VENV)/bin/activate @echo "๐Ÿงช Running core tests (excluding capability-specific tests)..." @if [ -f $(VENV)/bin/pytest ]; then \ PYTHONPATH=. $(VENV)/bin/pytest tests/ -v \ --ignore=capabilities/markitect-content/tests/ \ --ignore=capabilities/markitect-utils/tests/ \ --ignore=markitect/finance/tests/ \ --ignore=markitect/query_paradigms/tests/ \ --ignore=markitect/graphql/tests/ \ --ignore=markitect/plugins/tests/; \ else \ PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ -v \ --ignore=capabilities/markitect-content/tests/ \ --ignore=capabilities/markitect-utils/tests/ \ --ignore=markitect/finance/tests/ \ --ignore=markitect/query_paradigms/tests/ \ --ignore=markitect/graphql/tests/ \ --ignore=markitect/plugins/tests/ 2>/dev/null || \ PYTHONPATH=. $(VENV_PYTHON) -m unittest discover tests/ -v; \ fi # Capability-Specific Test Targets # Delegate to capability discovery system for testing capabilities test-capabilities: capabilities-test @echo "โœ… All capability tests completed" # Legacy test-capability-* targets are now handled by capability delegation # Use 'make capability-name-test' instead (e.g., 'make markitect-content-test') # JavaScript UI Testing Targets (Phase 5.1 - TestDrive-JSUI Integration) .PHONY: test-js test-js: ## Run JavaScript UI tests @echo "๐Ÿงช Running JavaScript UI tests..." @$(MAKE) --no-print-directory testdrive-jsui-test-all .PHONY: test-all test-all: test test-js test-capabilities ## Run all tests (Python + JavaScript + Capabilities) @echo "โœ… All test suites completed successfully!" # TDD8 Workflow Optimized Test Targets (Issue #57) # Fast test execution for TDD red phase test-red: $(VENV)/bin/activate @echo "๐Ÿ”ด TDD Red Phase - Fast test execution..." PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ -x --maxfail=1 --tb=short -q \ --ignore=capabilities/markitect-content/tests/ \ --ignore=capabilities/markitect-utils/tests/ \ --ignore=markitect/finance/tests/ \ --ignore=markitect/query_paradigms/tests/ \ --ignore=markitect/graphql/tests/ \ --ignore=markitect/plugins/tests/ # Comprehensive test execution for TDD green phase test-green: $(VENV)/bin/activate @echo "๐ŸŸข TDD Green Phase - Comprehensive validation..." PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ --tb=short \ --ignore=capabilities/markitect-content/tests/ \ --ignore=capabilities/markitect-utils/tests/ \ --ignore=markitect/finance/tests/ \ --ignore=markitect/query_paradigms/tests/ \ --ignore=markitect/graphql/tests/ \ --ignore=markitect/plugins/tests/ # Smart test selection - changed files only test-smart: $(VENV)/bin/activate @echo "๐Ÿง  Smart test selection - changed files only..." @changed_tests=$$(git diff --name-only HEAD~1 | grep test_ | tr '\n' ' '); \ if [ -n "$$changed_tests" ]; then \ PYTHONPATH=. $(VENV_PYTHON) -m pytest $$changed_tests -v; \ else \ echo "No test files changed, running fast subset"; \ $(MAKE) test-fast; \ fi # Ultra-fast test execution test-ultra-fast: $(VENV)/bin/activate @echo "โšก Ultra-fast test execution..." PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ -m "not slow" --maxfail=1 -x -q \ --ignore=capabilities/markitect-content/tests/ \ --ignore=capabilities/markitect-utils/tests/ \ --ignore=markitect/finance/tests/ \ --ignore=markitect/query_paradigms/tests/ \ --ignore=markitect/graphql/tests/ \ --ignore=markitect/plugins/tests/ # Test with performance monitoring test-perf: $(VENV)/bin/activate @echo "๐Ÿ“Š Test execution with performance monitoring..." PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ --durations=10 --tb=short \ --ignore=capabilities/markitect-content/tests/ \ --ignore=capabilities/markitect-utils/tests/ \ --ignore=markitect/finance/tests/ \ --ignore=markitect/query_paradigms/tests/ \ --ignore=markitect/graphql/tests/ \ --ignore=markitect/plugins/tests/ # Test health check test-health: $(VENV)/bin/activate @echo "๐Ÿฅ Test infrastructure health check..." @PYTHONPATH=. $(VENV_PYTHON) tools/testing_efficiency_optimizer.py diagnose # Clean all test caches (Enhanced for Issue #57) test-cache-clean-enhanced: $(VENV)/bin/activate @echo "๐Ÿงน Enhanced cache cleaning..." find . -name '.pytest_cache' -type d -exec rm -rf {} + 2>/dev/null || true find . -name '__pycache__' -type d -exec rm -rf {} + 2>/dev/null || true find . -name '*.pyc' -delete 2>/dev/null || true # Build the package build: $(VENV)/bin/activate @echo "๐Ÿ—๏ธ Building package..." $(VENV_PYTHON) -m build 2>/dev/null || \ $(VENV_PIP) install build && $(VENV_PYTHON) -m build # Build distribution packages with version info package: $(VENV)/bin/activate @echo "๐Ÿ“ฆ Building distribution packages..." @echo "" @echo "๐Ÿ“ Current version (setuptools-scm):" @$(VENV_PYTHON) -m setuptools_scm 2>/dev/null || echo " setuptools-scm not available" @echo "" @echo "๐Ÿงน Cleaning previous builds..." @rm -rf build/ dist/ *.egg-info/ 2>/dev/null || true @echo "๐Ÿ—๏ธ Building wheel and source distribution..." @$(VENV_PIP) install build setuptools-scm >/dev/null 2>&1 || true $(VENV_PYTHON) -m build --wheel --sdist @echo "" @echo "โœ… Packages built successfully:" @ls -lah dist/ 2>/dev/null || echo " No packages found" # Release management targets are provided by capabilities/release-management/Makefile # All capability targets are automatically discovered and available via delegation # Run 'make capabilities-help' to see all available capability commands # Chaos Engineering targets chaos-validate: @echo "๐Ÿ”ฅ Running architectural independence validation..." $(VENV_PYTHON) tools/chaos_test_runner.py validate-independence chaos-matrix: @echo "๐Ÿ—๏ธ Showing architectural dependency matrix..." $(VENV_PYTHON) tools/chaos_test_runner.py dependency-matrix chaos-inject: @echo "๐Ÿ’ฅ Injecting chaos into layer..." @if [ -z "$(LAYER)" ]; then \ echo "โŒ Usage: make chaos-inject LAYER=L1_Presentation TYPE=import_failure"; \ exit 1; \ fi $(VENV_PYTHON) tools/chaos_test_runner.py inject-layer-failure --layer $(LAYER) $(if $(TYPE),--injection-type $(TYPE)) chaos-report: @echo "๐Ÿ“„ Generating chaos engineering report..." $(VENV_PYTHON) tools/chaos_test_runner.py chaos-report # Code linting lint: $(VENV)/bin/activate @echo "๐Ÿ” Running linting..." @if [ -f $(VENV)/bin/flake8 ]; then \ $(VENV)/bin/flake8 markitect/ tests/; \ else \ echo "โš ๏ธ flake8 not installed. Run 'make setup-dev' first."; \ fi # Code formatting format: $(VENV)/bin/activate @echo "โœจ Formatting code..." @if [ -f $(VENV)/bin/black ]; then \ $(VENV)/bin/black markitect/ tests/; \ else \ echo "โš ๏ธ black not installed. Run 'make setup-dev' first."; \ fi # Update from upstream update: @echo "๐Ÿ”„ Updating from upstream..." @git status --porcelain | grep -q . && echo "โš ๏ธ Working directory not clean. Commit or stash changes first." && exit 1 || true git pull origin main git submodule update --remote @if git status --porcelain | grep -q "wiki"; then \ echo "๐Ÿ“ Committing wiki submodule update..."; \ git add wiki; \ git commit -m "Update wiki submodule to latest"; \ fi @echo "โœ… Update complete!" # Show git status status: @echo "๐Ÿ“Š Repository Status" @echo "===================" @echo "" @echo "Main Repository:" git status --short @echo "" @echo "Wiki Submodule:" @cd wiki && git status --short @echo "" @echo "Recent Commits:" git log --oneline -5 # Clean build artifacts clean: @echo "๐Ÿงน Cleaning build artifacts..." rm -rf build/ rm -rf dist/ rm -rf *.egg-info/ find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true find . -name "*.pyc" -delete 2>/dev/null || true @echo "โœ… Clean complete!" # Check dependency status check-deps: $(VENV)/bin/activate @echo "๐Ÿ“‹ Dependency Status" @echo "===================" @echo "" @echo "Python version:" $(VENV_PYTHON) --version @echo "" @echo "Installed packages:" $(VENV_PIP) list @echo "" @echo "Project dependencies:" $(VENV_PIP) check # Update project status digest (requires Claude Code) update-digest: @echo "๐Ÿ” Checking for Claude Code availability..." @if ! command -v claude >/dev/null 2>&1; then \ echo "โŒ Claude Code not found in PATH"; \ echo " This target requires Claude Code CLI to be installed"; \ echo " Visit: https://claude.ai/code for installation instructions"; \ exit 1; \ fi @echo "โœ… Claude Code found" @echo "๐Ÿ“ Updating ProjectStatusDigest.md..." @echo " Please ask Claude Code to update the project digest based on current state" @echo " Command: 'Please update ProjectStatusDigest.md with the current project state'" @echo "" @echo "๐Ÿ’ก Tip: You can also manually edit ProjectStatusDigest.md if needed" # Add new entry to project diary (requires Claude Code) add-diary-entry: @echo "๐Ÿ” Checking for Claude Code availability..." @if ! command -v claude >/dev/null 2>&1; then \ echo "โŒ Claude Code not found in PATH"; \ echo " This target requires Claude Code CLI to be installed"; \ echo " Visit: https://claude.ai/code for installation instructions"; \ exit 1; \ fi @echo "โœ… Claude Code found" @if [ ! -f ProjectDiary.md ]; then \ echo "โŒ ProjectDiary.md not found"; \ echo " Create the diary file first or run this from the project root"; \ exit 1; \ fi @echo "๐Ÿ“– Adding new entry to ProjectDiary.md..." @echo " Please ask Claude Code to add a new diary entry for recent work" @echo " Command: 'Please add a new entry to ProjectDiary.md summarizing recent progress'" @echo "" @echo "๐Ÿ“‹ Entry should include:" @echo " - Date ($(shell date +%Y-%m-%d))" @echo " - One-line progress characterization" @echo " - Contributors since last entry" @echo " - Time estimate and AI token usage" @echo " - One paragraph work summary" @echo "" @echo "๐Ÿ’ก Tip: New entries are added to the top for reverse chronological order" # Capability discovery and management targets capability-report: $(VENV)/bin/activate @echo "๐Ÿ“‹ Generating capability discovery report..." @$(VENV_PYTHON) tools/capability_discovery.py report capability-search: $(VENV)/bin/activate @if [ -z "$(TERM)" ]; then \ echo "โŒ Please specify search term: make capability-search TERM=issue_management"; \ exit 1; \ fi @echo "๐Ÿ” Searching for '$(TERM)' across capabilities..." @$(VENV_PYTHON) tools/capability_discovery.py search "$(TERM)" capability-validate: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "โŒ Please specify file path: make capability-validate FILE=path/to/file.py"; \ exit 1; \ fi @echo "โœ… Validating capability usage in $(FILE)..." @$(VENV_PYTHON) tools/capability_discovery.py validate "$(FILE)" # Git repository and API configuration GITEA_URL := http://92.205.130.254:32166 # Show test status summary without re-running tests test-status: $(VENV)/bin/activate @echo "๐Ÿ“Š MarkiTect Test Status Summary" @echo "===============================" @echo "" @echo "๐Ÿ“„ Test Files:" @find tests/ -name "test_*.py" -exec basename {} \; | sort | sed 's/^/ ๐Ÿ“ /' @echo "" @echo "๐Ÿ“Š Quick Stats:" @echo -n " Total test files: " @find tests/ -name "test_*.py" | wc -l @echo "" @if [ -f ".pytest_cache/CACHEDIR.TAG" ]; then \ echo "๐Ÿ’พ Last Test Results (cached):"; \ if [ -f ".pytest_cache/v/cache/lastfailed" ]; then \ echo " โŒ Recent failures detected"; \ echo -n " Failed tests: "; \ cat .pytest_cache/v/cache/lastfailed | jq -r 'keys[]' 2>/dev/null | wc -l || echo "Unknown"; \ else \ echo " โœ… No recent failures in cache"; \ fi; \ echo " ๐Ÿ“ Cache: .pytest_cache/ ($$(du -sh .pytest_cache/ 2>/dev/null | cut -f1 || echo 'Unknown size'))"; \ if [ -f ".pytest_cache/README.md" ]; then \ echo " ๐Ÿ“… Last run: $$(stat -c %y .pytest_cache/README.md 2>/dev/null | cut -d. -f1 || echo 'Unknown')"; \ fi; \ else \ echo "โ“ No test cache found - run 'make test' to generate results"; \ fi @echo "" @echo "๐Ÿ” For detailed status:" @echo " make test # Run all tests with full output" @echo " make test 2>&1 | grep -E 'PASSED|FAILED' # Show only results" @echo "" @if [ -f "test_status_report.md" ]; then \ echo "๐Ÿ“‹ Full Status Report: test_status_report.md"; \ echo " Last updated: $$(stat -c %y test_status_report.md 2>/dev/null || echo 'Unknown')"; \ else \ echo "๐Ÿ’ก Generate detailed report with test run data"; \ fi # Create new test file template test-new: $(VENV)/bin/activate @echo "๐Ÿงช Creating new test file" @echo "========================" @echo "" @read -p "Test name (e.g., feature_name): " test_name; \ if [ -z "$$test_name" ]; then \ echo "โŒ Test name cannot be empty"; \ exit 1; \ fi; \ test_file="tests/test_$$test_name.py"; \ if [ -f "$$test_file" ]; then \ echo "โŒ Test file already exists: $$test_file"; \ exit 1; \ fi; \ echo "๐Ÿ“ Creating: $$test_file"; \ echo '"""' > "$$test_file"; \ echo "Test for $$test_name functionality." >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo "This test module validates [describe what you're testing]." >> "$$test_file"; \ echo '"""' >> "$$test_file"; \ echo "import pytest" >> "$$test_file"; \ echo "from markitect import [import what you need]" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo "" >> "$$test_file"; \ class_name=$$(echo $$test_name | sed 's/_/ /g' | sed 's/\b\w/\U&/g' | sed 's/ //g'); \ echo "class Test$$class_name:" >> "$$test_file"; \ echo ' """Test suite for '$$test_name' functionality."""' >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo " def setup_method(self):" >> "$$test_file"; \ echo ' """Set up test environment."""' >> "$$test_file"; \ echo " pass" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo " def teardown_method(self):" >> "$$test_file"; \ echo ' """Clean up after tests."""' >> "$$test_file"; \ echo " pass" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo " def test_basic_functionality(self):" >> "$$test_file"; \ echo ' """Test basic '$$test_name' functionality."""' >> "$$test_file"; \ echo " # Arrange" >> "$$test_file"; \ echo " # TODO: Set up test data" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo " # Act" >> "$$test_file"; \ echo " # TODO: Execute the functionality" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo " # Assert" >> "$$test_file"; \ echo " # TODO: Verify expected results" >> "$$test_file"; \ echo " assert True # Replace with actual assertions" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo " def test_edge_cases(self):" >> "$$test_file"; \ echo ' """Test edge cases for '$$test_name'."""' >> "$$test_file"; \ echo " # TODO: Test boundary conditions, empty inputs, etc." >> "$$test_file"; \ echo " pass" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo " def test_error_handling(self):" >> "$$test_file"; \ echo ' """Test error handling for '$$test_name'."""' >> "$$test_file"; \ echo " # TODO: Test invalid inputs, exception cases" >> "$$test_file"; \ echo " pass" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo "" >> "$$test_file"; \ echo "if __name__ == '__main__':" >> "$$test_file"; \ echo " pytest.main([__file__, '-v'])" >> "$$test_file"; \ echo "โœ… Test file created: $$test_file"; \ echo ""; \ echo "๐ŸŽฏ Next steps:"; \ echo " 1. Edit the test file to add your specific tests"; \ echo " 2. Run: make test to check if it works"; \ echo " 3. Implement the actual functionality"; \ echo " 4. Run tests again to verify (TDD cycle)" # Analyze test coverage test-coverage: $(VENV)/bin/activate @echo "๐Ÿ“Š Analyzing test coverage..." @pytest --cov=markitect --cov-report=html --cov-report=term-missing tests/ @echo "โœ… Coverage report generated in htmlcov/" # ============================================================================ # Architectural Testing Targets # ============================================================================ # Run all tests in architectural order (reverse dependency) test-arch: $(VENV)/bin/activate @echo "๐Ÿ—๏ธ Running architectural test suite in reverse dependency order..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py # Run foundation layer tests only (Layer 7 - fastest feedback) test-foundation: $(VENV)/bin/activate @echo "๐Ÿข Running Foundation Layer tests (Layer 7)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --layer foundation # Run infrastructure layer tests only (Layer 5 - technical capabilities) test-infrastructure: $(VENV)/bin/activate @echo "๐Ÿ”ง Running Infrastructure Layer tests (Layer 5)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --layer infrastructure # Run integration layer tests only (Layer 6 - external systems) test-integration: $(VENV)/bin/activate @echo "๐ŸŒ Running Integration Layer tests (Layer 6)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --layer integration # Run domain layer tests only (Layer 3 - business logic) test-domain: $(VENV)/bin/activate @echo "๐Ÿ›๏ธ Running Domain Layer tests (Layer 3)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --layer domain # Run service layer tests only (Layer 4 - application services) test-service: $(VENV)/bin/activate @echo "โš™๏ธ Running Service Layer tests (Layer 4)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --layer service # Run application layer tests only (Layer 2 - use cases & workflows) test-application: $(VENV)/bin/activate @echo "๐Ÿš€ Running Application Layer tests (Layer 2)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --layer application # Run presentation layer tests only (Layer 1 - user interface) test-presentation: $(VENV)/bin/activate @echo "๐ŸŽฏ Running Presentation Layer tests (Layer 1)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --layer presentation # Run foundation + infrastructure only (quick feedback) test-quick: $(VENV)/bin/activate @echo "โšก Running quick test suite (Foundation + Infrastructure)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --quick # List all architectural layers and their test files test-layers: $(VENV)/bin/activate @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --list-layers # Advanced architectural testing options test-arch-verbose: $(VENV)/bin/activate @echo "๐Ÿ—๏ธ Running architectural test suite with verbose output..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --verbose test-arch-continue: $(VENV)/bin/activate @echo "๐Ÿ—๏ธ Running architectural test suite (continue on failures)..." @PYTHONPATH=src $(VENV_PYTHON) run_architectural_tests.py --continue-on-failure # Update .PHONY for advanced targets .PHONY: test-arch-verbose test-arch-continue # ============================================================================ # Randomized Testing Targets # ============================================================================ # Run tests in random order to detect hidden dependencies test-random: $(VENV)/bin/activate @echo "๐ŸŽฒ Running tests in randomized order..." @PYTHONPATH=src $(VENV_PYTHON) run_randomized_tests.py # Run tests with specific seed for reproducibility test-random-seed: $(VENV)/bin/activate @if [ -z "$(SEED)" ]; then \ echo "โŒ Please specify seed: make test-random-seed SEED=12345"; \ exit 1; \ fi @echo "๐ŸŽฒ Running tests with seed $(SEED)..." @PYTHONPATH=src $(VENV_PYTHON) run_randomized_tests.py --seed $(SEED) # Run multiple random iterations to find flaky tests test-random-repeat: $(VENV)/bin/activate @if [ -z "$(NUM)" ]; then \ echo "โŒ Please specify number of iterations: make test-random-repeat NUM=5"; \ exit 1; \ fi @echo "๐Ÿ”„ Running $(NUM) randomized test iterations..." @PYTHONPATH=src $(VENV_PYTHON) run_randomized_tests.py --repeat $(NUM) # Install pytest-randomly plugin for enhanced randomization test-install-randomly: $(VENV)/bin/activate @echo "๐Ÿ“ฆ Installing pytest-randomly plugin..." @$(VENV_PIP) install pytest-randomly @echo "โœ… pytest-randomly installed - now supports within-file randomization" @echo "๐Ÿ’ก Use --shuffle-within-file flag for enhanced randomization" # Advanced randomized testing options test-random-verbose: $(VENV)/bin/activate @echo "๐ŸŽฒ Running randomized tests with verbose output..." @PYTHONPATH=src $(VENV_PYTHON) run_randomized_tests.py --verbose test-random-enhanced: $(VENV)/bin/activate @echo "๐ŸŽฒ Running enhanced randomized tests (within-file shuffling)..." @PYTHONPATH=src $(VENV_PYTHON) run_randomized_tests.py --shuffle-within-file --verbose # Update .PHONY for randomized targets .PHONY: test-random-verbose test-random-enhanced # ============================================================================ # Test Efficiency Targets (Issue #57) # ============================================================================ # Clean test runner that excludes workspace directories and cleans cache test-clean: $(VENV)/bin/activate @echo "๐Ÿงน Running clean test suite (excluding workspaces, fresh cache)..." @echo " Cleaning pytest cache..." @rm -rf .pytest_cache/ @echo " Running tests with workspace exclusion..." @PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ -v \ --ignore=.markitect_workspace/ \ --cache-clear \ --tb=short # Quick test suite for TDD workflows (fast feedback) test-tdd: $(VENV)/bin/activate @echo "โšก Running TDD test suite for fast feedback..." @PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ \ --ignore=.markitect_workspace/ \ -x \ --tb=line \ -q \ -m "not slow and not integration and not e2e" # Run tests for changed files only (intelligent selection) test-changed: $(VENV)/bin/activate @echo "๐ŸŽฏ Running tests for changed files..." @if git diff --name-only HEAD~1 | grep -E "\.(py)$$" >/dev/null 2>&1; then \ echo " Detected Python file changes"; \ changed_files=$$(git diff --name-only HEAD~1 | grep -E "\.(py)$$" | tr '\n' ' '); \ echo " Changed files: $$changed_files"; \ PYTHONPATH=. $(VENV_PYTHON) -m pytest \ --ignore=.markitect_workspace/ \ -v \ --tb=short; \ else \ echo " No Python file changes detected"; \ echo " Running smoke tests instead..."; \ PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ \ --ignore=.markitect_workspace/ \ -m "smoke" \ -q; \ fi # Run tests for a specific module test-module: $(VENV)/bin/activate @if [ -z "$(MODULE)" ]; then \ echo "โŒ Please specify module: make test-module MODULE=markitect.cli"; \ exit 1; \ fi @echo "๐ŸŽฏ Running tests for module: $(MODULE)..." @PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ \ --ignore=.markitect_workspace/ \ -k "$(MODULE)" \ -v \ --tb=short # Clean up stale cache entries test-cache-clean: $(VENV)/bin/activate @echo "๐Ÿงน Cleaning test cache..." @if [ -d ".pytest_cache" ]; then \ echo " Removing pytest cache directory..."; \ rm -rf .pytest_cache/; \ echo " โœ… Cache cleaned"; \ else \ echo " โœ… No cache to clean"; \ fi # Enhanced test command with workspace exclusion (replace default test) test-efficient: $(VENV)/bin/activate @echo "๐Ÿงช Running efficient test suite (excluding workspaces)..." @PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ \ --ignore=.markitect_workspace/ \ -v \ --tb=short \ --maxfail=5 test-fast: $(VENV)/bin/activate @echo "โšก Running fast test suite (excluding slow tests)..." @PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ \ -m "not slow" \ -v \ --tb=short \ --maxfail=5 .PHONY: test-clean test-tdd test-changed test-module test-cache-clean test-efficient test-fast # ============================================================================ # MarkiTect CLI Usage Targets # ============================================================================ # Variables for CLI targets MARKITECT := PYTHONPATH=. $(VENV_PYTHON) -c "from markitect.cli import cli; import sys; cli(sys.argv[1:])" SAMPLE_DOC := test_frontmatter.md OUTPUT_FORMAT := table # Basic document operations cli-ingest: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "๐Ÿ“„ Processing sample document..."; \ $(MARKITECT) ingest $(SAMPLE_DOC); \ else \ echo "๐Ÿ“„ Processing document: $(FILE)"; \ $(MARKITECT) ingest $(FILE); \ fi cli-status: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "๐Ÿ“Š Checking status of sample document..."; \ $(MARKITECT) status $(SAMPLE_DOC); \ else \ echo "๐Ÿ“Š Checking status of document: $(FILE)"; \ $(MARKITECT) status $(FILE); \ fi cli-list: $(VENV)/bin/activate @echo "๐Ÿ“‹ Listing all processed documents..." @$(MARKITECT) list --format $(OUTPUT_FORMAT) cli-get: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "๐Ÿ“– Retrieving sample document..."; \ $(MARKITECT) get $(SAMPLE_DOC); \ else \ echo "๐Ÿ“– Retrieving document: $(FILE)"; \ $(MARKITECT) get $(FILE); \ fi # Schema operations cli-schema-generate: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "๐Ÿ”ง Generating schema from sample document..."; \ $(MARKITECT) schema-generate $(SAMPLE_DOC) --format json; \ else \ echo "๐Ÿ”ง Generating schema from document: $(FILE)"; \ $(MARKITECT) schema-generate $(FILE) --format json; \ fi cli-schema-ingest: $(VENV)/bin/activate @if [ -z "$(SCHEMA)" ]; then \ echo "โŒ Usage: make cli-schema-ingest SCHEMA=schema.json"; \ echo " Example: make cli-schema-ingest SCHEMA=my_schema.json"; \ exit 1; \ fi @echo "๐Ÿ“ฅ Ingesting schema: $(SCHEMA)" @$(MARKITECT) schema-ingest $(SCHEMA) cli-schema-list: $(VENV)/bin/activate @echo "๐Ÿ“‹ Listing stored schemas..." @$(MARKITECT) schema-list --format $(OUTPUT_FORMAT) cli-schema-get: $(VENV)/bin/activate @if [ -z "$(SCHEMA)" ]; then \ echo "โŒ Usage: make cli-schema-get SCHEMA=schema_name"; \ echo " Example: make cli-schema-get SCHEMA=my_schema.json"; \ exit 1; \ fi @echo "๐Ÿ“– Retrieving schema: $(SCHEMA)" @$(MARKITECT) schema-get $(SCHEMA) cli-validate: $(VENV)/bin/activate @if [ -z "$(FILE)" ] || [ -z "$(SCHEMA)" ]; then \ echo "โŒ Usage: make cli-validate FILE=document.md SCHEMA=schema.json"; \ echo " Example: make cli-validate FILE=test_frontmatter.md SCHEMA=generated_schema.json"; \ exit 1; \ fi @echo "โœ… Validating $(FILE) against $(SCHEMA)..." @$(MARKITECT) validate $(FILE) $(SCHEMA) cli-validate-detailed: $(VENV)/bin/activate @if [ -z "$(FILE)" ] || [ -z "$(SCHEMA)" ]; then \ echo "โŒ Usage: make cli-validate-detailed FILE=document.md SCHEMA=schema.json"; \ echo " Example: make cli-validate-detailed FILE=test_frontmatter.md SCHEMA=generated_schema.json"; \ exit 1; \ fi @echo "๐Ÿ” Validating $(FILE) with detailed errors..." @$(MARKITECT) validate $(FILE) $(SCHEMA) --detailed-errors --error-format text # AST operations cli-ast-show: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "๐ŸŒณ Showing AST for sample document..."; \ $(MARKITECT) ast-show $(SAMPLE_DOC); \ else \ echo "๐ŸŒณ Showing AST for document: $(FILE)"; \ $(MARKITECT) ast-show $(FILE); \ fi cli-ast-stats: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "๐Ÿ“ˆ Showing AST statistics for sample document..."; \ $(MARKITECT) ast-stats $(SAMPLE_DOC); \ else \ echo "๐Ÿ“ˆ Showing AST statistics for document: $(FILE)"; \ $(MARKITECT) ast-stats $(FILE); \ fi cli-ast-query: $(VENV)/bin/activate @if [ -z "$(FILE)" ] || [ -z "$(QUERY)" ]; then \ echo "โŒ Usage: make cli-ast-query FILE=document.md QUERY='JSONPath expression'"; \ echo " Example: make cli-ast-query FILE=test_frontmatter.md QUERY='$.headings[*].text'"; \ exit 1; \ fi @echo "๐Ÿ” Querying AST: $(QUERY)" @$(MARKITECT) ast-query $(FILE) '$(QUERY)' # Metadata operations cli-metadata: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "๐Ÿท๏ธ Showing metadata for sample document..."; \ $(MARKITECT) metadata $(SAMPLE_DOC) --format $(OUTPUT_FORMAT); \ else \ echo "๐Ÿท๏ธ Showing metadata for document: $(FILE)"; \ $(MARKITECT) metadata $(FILE) --format $(OUTPUT_FORMAT); \ fi # Database operations cli-query: $(VENV)/bin/activate @if [ -z "$(SQL)" ]; then \ echo "โŒ Usage: make cli-query SQL='SELECT statement'"; \ echo " Example: make cli-query SQL='SELECT * FROM files LIMIT 5'"; \ exit 1; \ fi @echo "๐Ÿ—„๏ธ Executing SQL query..." @$(MARKITECT) query '$(SQL)' --format $(OUTPUT_FORMAT) cli-schema-db: $(VENV)/bin/activate @echo "๐Ÿ—„๏ธ Showing database schema..." @$(MARKITECT) schema # Cache management cli-cache-info: $(VENV)/bin/activate @echo "๐Ÿ’พ Cache information..." @$(MARKITECT) cache-info cli-cache-clean: $(VENV)/bin/activate @echo "๐Ÿงน Cleaning cache..." @$(MARKITECT) cache-clean cli-cache-invalidate: $(VENV)/bin/activate @if [ -z "$(FILE)" ]; then \ echo "โŒ Usage: make cli-cache-invalidate FILE=document.md"; \ exit 1; \ fi @echo "๐Ÿ”„ Invalidating cache for $(FILE)..." @$(MARKITECT) cache-invalidate $(FILE) # Schema visualization cli-visualize-schema: $(VENV)/bin/activate @if [ -z "$(SCHEMA)" ]; then \ echo "โŒ Usage: make cli-visualize-schema SCHEMA=schema.json"; \ echo " Example: make cli-visualize-schema SCHEMA=generated_schema.json"; \ exit 1; \ fi @echo "๐ŸŽจ Visualizing schema: $(SCHEMA)" @$(VENV_PYTHON) visualize_schema.py $(SCHEMA) cli-visualize-schema-ascii: $(VENV)/bin/activate @if [ -z "$(SCHEMA)" ]; then \ echo "โŒ Usage: make cli-visualize-schema-ascii SCHEMA=schema.json"; \ echo " Example: make cli-visualize-schema-ascii SCHEMA=generated_schema.json"; \ exit 1; \ fi @echo "๐ŸŽจ Visualizing schema (ASCII mode): $(SCHEMA)" @$(VENV_PYTHON) visualize_schema.py $(SCHEMA) --ascii # Complete workflow examples cli-workflow-basic: $(VENV)/bin/activate @echo "๐Ÿ”„ Running basic MarkiTect workflow..." @echo " Step 1: Ingest document" @$(MARKITECT) ingest $(SAMPLE_DOC) @echo "" @echo " Step 2: Show status" @$(MARKITECT) status $(SAMPLE_DOC) @echo "" @echo " Step 3: Show AST statistics" @$(MARKITECT) ast-stats $(SAMPLE_DOC) @echo "" @echo "โœ… Basic workflow complete!" cli-workflow-schema: $(VENV)/bin/activate @echo "๐Ÿ”„ Running schema generation and validation workflow..." @if [ -z "$(FILE)" ]; then \ echo "โŒ Usage: make cli-workflow-schema FILE=document.md"; \ echo " Example: make cli-workflow-schema FILE=test_frontmatter.md"; \ exit 1; \ fi @echo " Step 1: Ingest document" @$(MARKITECT) ingest $(FILE) @echo "" @echo " Step 2: Generate schema" @$(MARKITECT) schema-generate $(FILE) --format json > temp_schema.json @echo " Schema saved to temp_schema.json" @echo "" @echo " Step 3: Validate document against generated schema" @$(MARKITECT) validate $(FILE) temp_schema.json @echo "" @echo " Step 4: Visualize schema" @$(VENV_PYTHON) visualize_schema.py temp_schema.json --ascii @echo "" @echo "โœ… Schema workflow complete!" @echo "๐Ÿ’ก Schema file: temp_schema.json" # Help for CLI targets cli-help: @echo "๐Ÿš€ MarkiTect CLI Usage Targets" @echo "=============================" @echo "" @echo "Document Operations:" @echo " cli-ingest [FILE=doc.md] - Process and store markdown file" @echo " cli-status [FILE=doc.md] - Show processing status" @echo " cli-list [OUTPUT_FORMAT=table] - List all processed documents" @echo " cli-get [FILE=doc.md] - Retrieve processed document" @echo " cli-metadata [FILE=doc.md] - Show document metadata" @echo "" @echo "Schema Operations:" @echo " cli-schema-generate [FILE=doc.md] - Generate JSON schema" @echo " cli-schema-ingest SCHEMA=schema.json - Store schema in database" @echo " cli-schema-list [OUTPUT_FORMAT=table] - List stored schemas" @echo " cli-schema-get SCHEMA=name - Retrieve stored schema" @echo " cli-validate FILE=doc.md SCHEMA=schema.json - Validate document" @echo " cli-validate-detailed FILE=doc.md SCHEMA=schema.json - Detailed validation" @echo " cli-visualize-schema SCHEMA=schema.json - Visualize schema (colorful)" @echo " cli-visualize-schema-ascii SCHEMA=schema.json - Visualize schema (ASCII)" @echo "" @echo "AST Operations:" @echo " cli-ast-show [FILE=doc.md] - Display AST structure" @echo " cli-ast-stats [FILE=doc.md] - Show AST statistics" @echo " cli-ast-query FILE=doc.md QUERY='JSONPath' - Query AST" @echo "" @echo "Database Operations:" @echo " cli-query SQL='SELECT...' - Execute SQL query" @echo " cli-schema-db - Show database schema" @echo "" @echo "Cache Management:" @echo " cli-cache-info - Show cache statistics" @echo " cli-cache-clean - Clear all caches" @echo " cli-cache-invalidate FILE=doc.md - Invalidate specific file cache" @echo "" @echo "Complete Workflows:" @echo " cli-workflow-basic - Basic ingest โ†’ status โ†’ stats workflow" @echo " cli-workflow-schema FILE=doc.md - Complete schema workflow" @echo "" @echo "๐Ÿ“‹ Variables:" @echo " FILE - Target markdown file (default: $(SAMPLE_DOC))" @echo " OUTPUT_FORMAT - Output format: table, json, yaml, simple (default: $(OUTPUT_FORMAT))" @echo " SCHEMA - JSON schema file" @echo " SQL - SQL query string" @echo " QUERY - JSONPath query expression" @echo "" @echo "๐Ÿ’ก Examples:" @echo " make cli-ingest FILE=my_document.md" @echo " make cli-list OUTPUT_FORMAT=table" @echo " make cli-schema-list OUTPUT_FORMAT=simple" @echo " make cli-validate FILE=doc.md SCHEMA=doc_schema.json" @echo " make cli-ast-query FILE=doc.md QUERY='$.headings[*].text'" @echo " make cli-query SQL='SELECT title FROM metadata WHERE status=\"draft\"'" # Update .PHONY for CLI targets .PHONY: cli-ingest cli-status cli-list cli-get cli-schema-generate cli-schema-ingest cli-schema-list cli-schema-get cli-validate cli-validate-detailed cli-ast-show cli-ast-stats cli-ast-query cli-metadata cli-query cli-schema-db cli-cache-info cli-cache-clean cli-cache-invalidate cli-visualize-schema cli-visualize-schema-ascii cli-workflow-basic cli-workflow-schema cli-help # ============================================================================ # Requirements Engineering Integration # ============================================================================ # Validate project requirements and foundations before development validate-requirements: $(VENV)/bin/activate @echo "๐Ÿ” Validating project requirements and foundations..." @PYTHONPATH=. $(VENV_PYTHON) tools/requirements_engineering_toolkit.py analyze # Check interface compatibility for specific interface check-interface-compatibility: $(VENV)/bin/activate @if [ -z "$(INTERFACE)" ]; then \ echo "โŒ Please specify interface: make check-interface-compatibility INTERFACE=IssueBackend"; \ exit 1; \ fi @echo "๐Ÿ”Œ Checking interface compatibility for $(INTERFACE)..." @PYTHONPATH=. $(VENV_PYTHON) tools/requirements_engineering_toolkit.py plan-interface --interface $(INTERFACE) # Generate development checklist for specific feature generate-dev-checklist: $(VENV)/bin/activate @if [ -z "$(FEATURE)" ]; then \ echo "โŒ Please specify feature: make generate-dev-checklist FEATURE='Your Feature Name'"; \ exit 1; \ fi @echo "๐Ÿ“‹ Generating development checklist for $(FEATURE)..." @PYTHONPATH=. $(VENV_PYTHON) tools/requirements_engineering_toolkit.py checklist --feature "$(FEATURE)" # Validate mock object compatibility validate-mocks: $(VENV)/bin/activate @echo "๐Ÿงช Validating mock object compatibility..." @if [ -f "tests/test_mock_compatibility.py" ]; then \ PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/test_mock_compatibility.py -xvs; \ else \ echo "โš ๏ธ Mock compatibility tests not found"; \ echo " Run 'make setup-mock-validation' to create them"; \ fi # Pre-commit validation including requirements pre-commit-validate: validate-requirements validate-mocks @echo "โœ… Pre-commit validation complete" # Setup mock validation test file setup-mock-validation: $(VENV)/bin/activate @echo "๐Ÿ”ง Setting up mock validation tests..." @if [ ! -f "tests/test_mock_compatibility.py" ]; then \ cp docs/integration/requirements_engineering_integration.md tests/temp_integration_guide.md; \ echo "๐Ÿ’ก Mock compatibility test template available in integration guide"; \ echo " Create tests/test_mock_compatibility.py based on the guide"; \ echo " See docs/integration/requirements_engineering_integration.md"; \ else \ echo "โœ… Mock validation tests already exist"; \ fi # View requirements engineering usage examples view-requirements-examples: $(VENV)/bin/activate @echo "๐Ÿ“– Requirements Engineering Usage Examples" @echo "=========================================" @echo "" @echo "Foundation Analysis:" @echo " make validate-requirements" @echo "" @echo "Interface Planning:" @echo " make check-interface-compatibility INTERFACE=IssueBackend" @echo " make check-interface-compatibility INTERFACE=PluginManager" @echo "" @echo "Feature Development:" @echo " make generate-dev-checklist FEATURE='New Plugin System'" @echo " make generate-dev-checklist FEATURE='CLI Enhancement'" @echo "" @echo "Mock Validation:" @echo " make validate-mocks" @echo " make setup-mock-validation" @echo "" @echo "Complete Workflow:" @echo " make pre-commit-validate" @echo "" @echo "๐Ÿ“‹ Prevention Demo:" @echo " PYTHONPATH=. $(VENV_PYTHON) examples/issue_59_prevention_demo.py" # Update .PHONY for requirements engineering targets .PHONY: validate-requirements check-interface-compatibility generate-dev-checklist validate-mocks pre-commit-validate setup-mock-validation view-requirements-examples # ============================================================================== # Cost Tracking Commands # ============================================================================== # Show cost tracking help and examples cost-help: @echo "MarkiTect Cost Tracking System" @echo "===============================" @echo "" @echo "The cost tracking system captures Claude token usage and generates" @echo "cost notes for issues. Currently tracks Claude API costs only." @echo "" @echo "๐Ÿ”ง Commands:" @echo " cost-help - Show this help" @echo " cost-note-issue ISSUE=X INPUT_TOKENS=N OUTPUT_TOKENS=M" @echo " - Generate cost note for issue" @echo "" @echo "๐Ÿ’ฐ Manual Cost Note Generation:" @echo " markitect cost session track ISSUE_ID 'ISSUE_TITLE' \\" @echo " --input-tokens N --output-tokens M \\" @echo " --summary 'Implementation description'" @echo "" @echo "๐Ÿ“Š Token Estimation Guidelines:" @echo " - Small changes (1-2 functions): 15k input, 8k output" @echo " - Medium features (multiple files): 30k input, 18k output" @echo " - Large features (TDD8 full cycle): 45k input, 28k output" @echo " - Complex systems (refactoring): 60k input, 35k output" @echo "" @echo "๐Ÿ’ก Examples:" @echo " make cost-note-issue ISSUE=136 INPUT_TOKENS=45000 OUTPUT_TOKENS=28000" @echo " markitect cost session track 136 'Index generation' --input-tokens 45000 --output-tokens 28000" @echo "" @echo "๐Ÿ“ Output: Cost notes saved to cost_notes/ directory" @echo "๐Ÿ’ฐ Currency: Costs calculated in USD and EUR" @echo "๐Ÿค– Model: Default claude-sonnet-4 pricing" # JavaScript validation for edit mode templates validate-js: $(VENV)/bin/activate @echo "๐Ÿ” Validating JavaScript syntax in templates..." @if command -v node >/dev/null 2>&1; then \ $(PYTHON) tools/validate_js_syntax.py; \ else \ echo "โš ๏ธ Node.js not available - skipping JavaScript validation"; \ echo " Install Node.js to enable JavaScript syntax checking"; \ fi