# MarkiTect - Advanced Markdown Engine # Makefile for common development tasks .PHONY: help setup install test build clean update status dev lint format check-deps venv-status update-digest add-diary-entry list-issues show-issue list-open-issues create-issue close-issue close-issue-enhanced close-issues-batch test-from-issue tdd-start tdd-add-test tdd-finish tdd-status 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 release-status release-validate release-prepare release-build release-publish release-dry-run chaos-validate chaos-matrix chaos-inject chaos-report # 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)" @echo " install - Install package in development mode" @echo " dev - Install with development dependencies" @echo " venv-status - Check if venv is active" @echo "" @echo "Development:" @echo " test - Run all tests" @echo " test-status - Show test status summary without re-running" @echo " test-new - Create new test file template" @echo " test-coverage ISSUE=X - Analyze test coverage for issue" @echo " build - Build the package" @echo " lint - Run code linting" @echo " format - Format code" @echo "" @echo "Release Management:" @echo " release-status - Show current release status" @echo " release-validate - Validate repository for release" @echo " release-prepare VERSION=x.y.z - Prepare new release" @echo " release-build - Build release packages" @echo " release-publish VERSION=x.y.z - Publish complete release" @echo " release-dry-run VERSION=x.y.z - Test release preparation" @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 "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-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 "" @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 "Issue Management:" @echo " list-issues - Show all gitea issues with status and priority" @echo " list-open-issues - Show only open issues (active backlog)" @echo " create-issue TITLE='...' BODY='...' - Create a new issue (or BODY_FILE='/path/to/file.md')" @echo " show-issue ISSUE=X (or NUM=X) - Show detailed view of specific issue" @echo " close-issue ISSUE=X [COMMENT='reason'] - Close an issue and mark as completed" @echo " close-issue-enhanced ISSUE=X [WORK='description'] - Close issue with enhanced functionality" @echo " close-issues-batch NUMS='X Y Z' [COMMENT='reason'] - Close multiple issues at once" @echo " issues-get - Export compact issue index to ISSUES.index" @echo " issues-csv - Export issues as CSV for spreadsheet processing" @echo " issues-json - Export issues as JSON for programmatic processing" @echo " issues-high - Export only high/critical priority issues" @echo "" @echo "Test-Driven Development:" @echo " test-from-issue ISSUE=X - Generate test skeleton from issue (requires Claude Code)" @echo "" @echo "TDD Workspace:" @echo " tdd-start ISSUE=X - Start working on issue (with requirements validation)" @echo " tdd-add-test - Add test to current issue workspace" @echo " tdd-status - Show current workspace state" @echo " tdd-finish - Complete issue work (moves tests to main)" @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 @echo "โœ… Project setup complete!" $(VENV)/bin/activate: @echo "๐Ÿ”ง Creating virtual environment..." $(PYTHON) -m venv $(VENV) $(VENV_PIP) install --upgrade pip setuptools wheel # Install package in development mode install: $(VENV)/bin/activate @echo "๐Ÿ“ฆ Installing MarkiTect in development mode..." $(VENV_PIP) install -e . # Install with development dependencies dev: install @echo "๐Ÿ› ๏ธ Installing development dependencies..." $(VENV_PIP) install pytest pytest-cov black flake8 mypy # Run tests test: $(VENV)/bin/activate @echo "๐Ÿงช Running tests..." @if [ -f $(VENV)/bin/pytest ]; then \ PYTHONPATH=. $(VENV)/bin/pytest tests/ -v; \ else \ PYTHONPATH=. $(VENV_PYTHON) -m pytest tests/ -v 2>/dev/null || \ PYTHONPATH=. $(VENV_PYTHON) -m unittest discover tests/ -v; \ fi # 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 # 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 # 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 # 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 # 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 # Release management release-status: @echo "๐Ÿ” Checking release status..." $(VENV_PYTHON) release.py status release-validate: @echo "โœ… Validating release readiness..." $(VENV_PYTHON) release.py validate release-prepare: @echo "๐Ÿš€ Preparing release..." @if [ -z "$(VERSION)" ]; then \ echo "โŒ Usage: make release-prepare VERSION=1.0.0"; \ exit 1; \ fi $(VENV_PYTHON) release.py prepare --version $(VERSION) release-build: @echo "๐Ÿ“ฆ Building release packages..." $(VENV_PYTHON) release.py build $(if $(VERSION),--version $(VERSION)) release-publish: @echo "๐Ÿ“ข Publishing release..." @if [ -z "$(VERSION)" ]; then \ echo "โŒ Usage: make release-publish VERSION=1.0.0"; \ exit 1; \ fi $(VENV_PYTHON) release.py publish --version $(VERSION) release-dry-run: @echo "๐Ÿงช Dry run release preparation..." @if [ -z "$(VERSION)" ]; then \ echo "โŒ Usage: make release-dry-run VERSION=1.0.0"; \ exit 1; \ fi $(VENV_PYTHON) release.py prepare --version $(VERSION) --dry-run # 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 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 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" # Git repository and API configuration GITEA_URL := http://92.205.130.254:32166 REPO_OWNER := coulomb REPO_NAME := markitect_project ISSUES_API := $(GITEA_URL)/api/v1/repos/$(REPO_OWNER)/$(REPO_NAME)/issues # Issue workspace configuration WORKSPACE_DIR := .markitect_workspace CURRENT_ISSUE_FILE := $(WORKSPACE_DIR)/current_issue.json # List all gitea issues list-issues: $(VENV)/bin/activate @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py list-issues # Show detailed view of a specific issue show-issue: $(VENV)/bin/activate @ISSUE_NUM=""; \ if [ -n "$(ISSUE)" ]; then \ ISSUE_NUM="$(ISSUE)"; \ elif [ -n "$(NUM)" ]; then \ ISSUE_NUM="$(NUM)"; \ fi; \ if [ -z "$$ISSUE_NUM" ]; then \ echo "โŒ Please specify issue number: make show-issue ISSUE=5 (or NUM=5)"; \ exit 1; \ fi; \ PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py show-issue $$ISSUE_NUM # List only open issues (active backlog) list-open-issues: $(VENV)/bin/activate @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py list-open-issues # Create a new issue create-issue: @if [ -z "$(TITLE)" ]; then \ echo "โŒ Please specify issue title: make create-issue TITLE='Fix bug' BODY='Description'"; \ echo "โŒ Or use: make create-issue TITLE='Fix bug' BODY_FILE='/path/to/body.md'"; \ exit 1; \ fi @if [ -z "$(BODY)" ] && [ -z "$(BODY_FILE)" ]; then \ echo "โŒ Please specify either BODY='...' or BODY_FILE='/path/to/file.md'"; \ exit 1; \ fi @echo "๐Ÿ“‹ Creating new issue..." @echo "๐Ÿ“‹ Title: $(TITLE)" @if [ -n "$(BODY_FILE)" ]; then \ tea issue create --title "$(TITLE)" --description "$$(cat $(BODY_FILE))"; \ else \ tea issue create --title "$(TITLE)" --description "$(BODY)"; \ fi # Close an issue and mark as completed close-issue: $(VENV)/bin/activate @ISSUE_NUM=""; \ if [ -n "$(ISSUE)" ]; then \ ISSUE_NUM="$(ISSUE)"; \ elif [ -n "$(NUM)" ]; then \ ISSUE_NUM="$(NUM)"; \ fi; \ if [ -z "$$ISSUE_NUM" ]; then \ echo "โŒ Please specify issue number: make close-issue ISSUE=5 (or NUM=5)"; \ exit 1; \ fi; \ if [ -n "$(COMMENT)" ]; then \ echo "๐Ÿ”„ Closing issue #$$ISSUE_NUM with comment..."; \ PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py close-issue $$ISSUE_NUM --comment "$(COMMENT)"; \ else \ echo "๐Ÿ”„ Closing issue #$$ISSUE_NUM..."; \ PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py close-issue $$ISSUE_NUM; \ fi; \ echo "โœ… Issue #$$ISSUE_NUM closed successfully!" # Close issue using dedicated issue_closer.py script (enhanced functionality) close-issue-enhanced: $(VENV)/bin/activate @ISSUE_NUM=""; \ if [ -n "$(ISSUE)" ]; then \ ISSUE_NUM="$(ISSUE)"; \ elif [ -n "$(NUM)" ]; then \ ISSUE_NUM="$(NUM)"; \ fi; \ if [ -z "$$ISSUE_NUM" ]; then \ echo "โŒ Please specify issue number: make close-issue-enhanced ISSUE=5 (or NUM=5)"; \ exit 1; \ fi; \ if [ -n "$(WORK)" ]; then \ echo "๐Ÿ”„ Closing issue #$$ISSUE_NUM with completion message..."; \ PYTHONPATH=. $(VENV_PYTHON) tddai/issue_closer.py $$ISSUE_NUM --work-completed "$(WORK)"; \ elif [ -n "$(COMMENT)" ]; then \ echo "๐Ÿ”„ Closing issue #$$ISSUE_NUM with comment..."; \ PYTHONPATH=. $(VENV_PYTHON) tddai/issue_closer.py $$ISSUE_NUM --comment "$(COMMENT)"; \ else \ echo "๐Ÿ”„ Closing issue #$$ISSUE_NUM..."; \ PYTHONPATH=. $(VENV_PYTHON) tddai/issue_closer.py $$ISSUE_NUM; \ fi # Close multiple issues at once using issue_closer.py close-issues-batch: $(VENV)/bin/activate @if [ -z "$(NUMS)" ]; then \ echo "โŒ Please specify issue numbers: make close-issues-batch NUMS='42 43 44'"; \ exit 1; \ fi @if [ -n "$(COMMENT)" ]; then \ echo "๐Ÿ”„ Closing issues $(NUMS) with comment..."; \ PYTHONPATH=. $(VENV_PYTHON) tddai/issue_closer.py $(NUMS) --comment "$(COMMENT)"; \ else \ echo "๐Ÿ”„ Closing issues $(NUMS)..."; \ PYTHONPATH=. $(VENV_PYTHON) tddai/issue_closer.py $(NUMS); \ fi # Export compact issue index to ISSUES.index file (TSV format) issues-get: $(VENV)/bin/activate @echo "๐Ÿ“‹ Fetching issue index from gitea..." @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py issue-index --format tsv --sort number > ISSUES.index @echo "โœ… Issue index exported to ISSUES.index (TSV format)" @echo "๐Ÿ“„ File contents:" @cat ISSUES.index # Export issues as CSV for spreadsheet processing issues-csv: $(VENV)/bin/activate @echo "๐Ÿ“Š Exporting issues as CSV..." @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py issue-index --format csv --sort priority --include-state > ISSUES.csv @echo "โœ… Issues exported to ISSUES.csv" @wc -l ISSUES.csv | awk '{print "๐Ÿ“„ Total entries:", $$1-1, "(excluding header)"}' # Export issues as JSON for programmatic processing issues-json: $(VENV)/bin/activate @echo "๐Ÿ”ง Exporting issues as JSON..." @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py issue-index --format json --sort priority > ISSUES.json @echo "โœ… Issues exported to ISSUES.json" @echo "๐Ÿ“„ Sample entry:" @head -20 ISSUES.json # Export only high and critical priority issues issues-high: $(VENV)/bin/activate @echo "๐Ÿšจ Exporting high priority issues..." @echo "High priority issues:" > ISSUES.high.txt @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py issue-index --format tsv --filter-priority high --sort number >> ISSUES.high.txt @echo "" >> ISSUES.high.txt @echo "Critical priority issues:" >> ISSUES.high.txt @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py issue-index --format tsv --filter-priority critical --sort number >> ISSUES.high.txt @echo "โœ… High priority issues exported to ISSUES.high.txt" @cat ISSUES.high.txt # Generate test skeleton from gitea issue (requires Claude Code) test-from-issue: @ISSUE_NUM=""; \ if [ -n "$(ISSUE)" ]; then \ ISSUE_NUM="$(ISSUE)"; \ elif [ -n "$(NUM)" ]; then \ ISSUE_NUM="$(NUM)"; \ fi; \ if [ -z "$$ISSUE_NUM" ]; then \ echo "โŒ Please specify issue number: make test-from-issue ISSUE=1 (or NUM=1)"; \ exit 1; \ fi @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 "๐Ÿ” Checking for curl..." @if ! command -v curl >/dev/null 2>&1; then \ echo "โŒ curl not found - required for API access"; \ exit 1; \ fi @echo "โœ… curl found" @echo "๐Ÿ“‹ Fetching issue #$$ISSUE_NUM details..." @curl -s "$(ISSUES_API)/$$ISSUE_NUM" | jq -r 'if .title then "โœ… Issue #'"$$ISSUE_NUM"': " + .title + "\n\n๐Ÿงช Generating test skeleton...\n Please ask Claude Code to generate a test for this issue:\n\n Command: '"'"'Generate a test skeleton for issue #'"$$ISSUE_NUM"''"'"'\n\n๐Ÿ“‹ Issue Details:\n Title: " + .title + "\n Description: " + .body + "\n\n๐Ÿ“ Test Requirements:\n - Follow TDD principles (test first, then implementation)\n - Use pytest framework (existing project convention)\n - Place test in tests/ directory\n - Name test file: test_issue_'"$$ISSUE_NUM"'_*.py\n - Include docstring referencing issue #'"$$ISSUE_NUM"'\n - Test should initially fail (red state)\n\n๐Ÿ’ก After generation, run '"'"'make test'"'"' to verify test fails initially" else "โŒ Issue #'"$$ISSUE_NUM"' not found or API error\n Use '"'"'make list-open-issues'"'"' to see available issues" end' 2>/dev/null || echo "โŒ Issue #$$ISSUE_NUM not found or API error" # Start working on an issue (creates workspace with requirements validation) tdd-start: validate-requirements $(VENV)/bin/activate @ISSUE_NUM=""; \ if [ -n "$(ISSUE)" ]; then \ ISSUE_NUM="$(ISSUE)"; \ elif [ -n "$(NUM)" ]; then \ ISSUE_NUM="$(NUM)"; \ fi; \ if [ -z "$$ISSUE_NUM" ]; then \ echo "โŒ Please specify issue number: make tdd-start ISSUE=1 (or NUM=1)"; \ exit 1; \ fi; \ echo "๐Ÿš€ Starting TDD workflow with requirements validation..."; \ PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py start-issue $$ISSUE_NUM # Add test to current issue workspace tdd-add-test: $(VENV)/bin/activate @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py add-test # Show current workspace status tdd-status: $(VENV)/bin/activate @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py workspace-status # Complete issue work (move tests to main and cleanup) tdd-finish: $(VENV)/bin/activate @PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py finish-issue # 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 for a specific issue test-coverage: $(VENV)/bin/activate @ISSUE_NUM=""; \ if [ -n "$(ISSUE)" ]; then \ ISSUE_NUM="$(ISSUE)"; \ elif [ -n "$(NUM)" ]; then \ ISSUE_NUM="$(NUM)"; \ fi; \ if [ -z "$$ISSUE_NUM" ]; then \ echo "โŒ Please specify issue number: make test-coverage ISSUE=5 (or NUM=5)"; \ exit 1; \ fi; \ PYTHONPATH=. $(VENV_PYTHON) tddai_cli.py analyze-coverage $$ISSUE_NUM # ============================================================================ # 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 .PHONY: test-clean test-tdd test-changed test-module test-cache-clean test-efficient # ============================================================================ # 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