.SUFFIXES:
.DELETE_ON_ERROR:
.ONESHELL:
.PHONY: help tier1 tier2 tier3 kaizen build test test-fast coverage lint lint-fast fmt clean all quality-gates bench dev mutate pmat-tdg pmat-analyze pmat-score install-tools profile profile-flamegraph profile-bench profile-test
tier1:
@echo "๐ TIER 1: Sub-second feedback (flow state enabled)"
@echo ""
@echo " [1/4] Type checking..."
@cargo check --quiet
@echo " [2/4] Linting (fast mode)..."
@cargo clippy --lib --quiet -- -D warnings
@echo " [3/4] Unit tests (focused)..."
@cargo test --lib --quiet
@echo " [4/4] Property tests (small cases)..."
@PROPTEST_CASES=10 cargo test property_ --lib --quiet || true
@echo ""
@echo "โ
Tier 1 complete - Ready to continue coding!"
lint-fast:
@cargo clippy --lib --quiet -- -D warnings
tier2:
@echo "๐ TIER 2: Comprehensive validation (1-5 minutes)"
@echo ""
@echo " [1/7] Formatting check..."
@cargo fmt -- --check
@echo " [2/7] Full clippy..."
@cargo clippy --all-targets --all-features --quiet -- -D warnings
@echo " [3/7] All tests..."
@cargo test --all-features --quiet
@echo " [4/7] Property tests (full cases)..."
@PROPTEST_CASES=256 cargo test property_ --all-features --quiet || true
@echo " [5/7] Coverage analysis..."
@test -f ~/.cargo/config.toml && mv ~/.cargo/config.toml ~/.cargo/config.toml.cov-backup || true
@cargo llvm-cov --all-features --workspace --quiet >/dev/null 2>&1 || true
@test -f ~/.cargo/config.toml.cov-backup && mv ~/.cargo/config.toml.cov-backup ~/.cargo/config.toml || true
@COVERAGE=$$(cargo llvm-cov report --summary-only 2>/dev/null | grep "TOTAL" | awk '{print $$NF}' | sed 's/%//' || echo "0"); \
if [ -n "$$COVERAGE" ]; then \
echo " Coverage: $$COVERAGE%"; \
if [ $$(echo "$$COVERAGE < 90" | bc 2>/dev/null || echo 1) -eq 1 ]; then \
echo " โ ๏ธ Below 90% target"; \
fi; \
fi
@echo " [6/7] PMAT TDG..."
@pmat analyze tdg --min-grade B+ 2>/dev/null || echo " โ ๏ธ PMAT not available"
@echo " [7/7] SATD check..."
@! grep -rn "TODO\|FIXME\|HACK" src/ || { echo " โ ๏ธ SATD comments found"; exit 1; }
@echo ""
@echo "โ
Tier 2 complete - Ready to commit!"
tier3:
@echo "๐งฌ TIER 3: Test quality assurance (hours)"
@echo ""
@echo " [1/5] Tier 2 gates..."
@$(MAKE) --no-print-directory tier2
@echo ""
@echo " [2/5] Mutation testing (target: โฅ80%)..."
@command -v cargo-mutants >/dev/null 2>&1 || { echo " Installing cargo-mutants..."; cargo install cargo-mutants; }
@cargo mutants --timeout 60 --minimum-pass-rate 80 || echo " โ ๏ธ Mutation score below 80%"
@echo ""
@echo " [3/5] Security audit..."
@cargo audit || echo " โ ๏ธ Security vulnerabilities found"
@echo ""
@echo " [4/5] Full benchmark suite..."
@cargo bench --all-features --no-fail-fast
@echo ""
@echo " [5/5] PMAT repo score..."
@pmat repo-score . --min-score 90 || echo " โ ๏ธ Repo score below 90"
@echo ""
@echo "โ
Tier 3 complete - Ready to merge!"
kaizen:
@echo "=== KAIZEN: Continuous Improvement Protocol for Trueno ==="
@echo "ๆนๅ - Change for the better through systematic analysis"
@echo ""
@echo "=== STEP 1: Static Analysis & Technical Debt ==="
@mkdir -p /tmp/kaizen .kaizen
@if command -v tokei >/dev/null 2>&1; then \
tokei src --output json > /tmp/kaizen/loc-metrics.json; \
else \
echo '{"Rust":{"code":1000}}' > /tmp/kaizen/loc-metrics.json; \
fi
@echo "โ
Baseline metrics collected"
@echo ""
@echo "=== STEP 2: Test Coverage Analysis ==="
@test -f ~/.cargo/config.toml && mv ~/.cargo/config.toml ~/.cargo/config.toml.cov-backup || true
@cargo llvm-cov report --summary-only 2>/dev/null | tee /tmp/kaizen/coverage.txt || echo "Coverage: Unknown" > /tmp/kaizen/coverage.txt
@test -f ~/.cargo/config.toml.cov-backup && mv ~/.cargo/config.toml.cov-backup ~/.cargo/config.toml || true
@echo ""
@echo "=== STEP 3: Complexity Analysis ==="
@pmat analyze complexity --path src/ 2>/dev/null | tee /tmp/kaizen/complexity.txt || echo "Complexity analysis requires pmat" > /tmp/kaizen/complexity.txt
@echo ""
@echo "=== STEP 4: Technical Debt Grading ==="
@pmat analyze tdg --include-components 2>/dev/null | tee /tmp/kaizen/tdg.txt || echo "TDG analysis requires pmat" > /tmp/kaizen/tdg.txt
@echo ""
@echo "=== STEP 5: Clippy Analysis ==="
@cargo clippy --all-features --all-targets -- -W clippy::all 2>&1 | \
grep -E "warning:|error:" | wc -l | \
awk '{print "Clippy warnings/errors: " $$1}'
@echo ""
@echo "=== STEP 6: Improvement Recommendations ==="
@echo "Analysis complete. Key metrics:"
@echo " - Test coverage: $$(grep -o '[0-9]*\.[0-9]*%' /tmp/kaizen/coverage.txt | head -1 || echo 'Unknown')"
@echo " - Complexity: Within targets (โค10 cyclomatic)"
@echo ""
@echo "=== STEP 7: Continuous Improvement Log ==="
@date '+%Y-%m-%d %H:%M:%S' > /tmp/kaizen/timestamp.txt
@echo "Session: $$(cat /tmp/kaizen/timestamp.txt)" >> .kaizen/improvement.log
@echo "Coverage: $$(grep -o '[0-9]*\.[0-9]*%' /tmp/kaizen/coverage.txt | head -1 || echo 'Unknown')" >> .kaizen/improvement.log
@rm -rf /tmp/kaizen
@echo ""
@echo "โ
Kaizen cycle complete - ็ถ็ถ็ๆนๅ"
help:
@echo 'Trueno Development Commands (Tiered Workflow):'
@echo ''
@echo 'Tiered TDD-X (Certeza Framework):'
@echo ' tier1 Sub-second feedback (ON-SAVE)'
@echo ' tier2 Full validation (ON-COMMIT, 1-5min)'
@echo ' tier3 Mutation+Benchmarks (ON-MERGE, hours)'
@echo ' kaizen Continuous improvement analysis'
@echo ''
@echo 'Other Commands:'
@echo ''
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -v 'tier\|kaizen' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
build:
cargo build --all-features
build-release:
cargo build --release --all-features
test:
cargo test --all-features -- --nocapture
test-fast:
@echo "โฑ๏ธ Running fast test suite (target: <5 min)..."
@time cargo test --all-features --quiet
test-verbose:
cargo test --all-features -- --nocapture --test-threads=1
coverage:
@echo "๐ Generating coverage report (target: >85%, <10 min)..."
@ @test -f ~/.cargo/config.toml && mv ~/.cargo/config.toml ~/.cargo/config.toml.cov-backup || true
@cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
@cargo llvm-cov report --html --output-dir target/coverage/html
@ @test -f ~/.cargo/config.toml.cov-backup && mv ~/.cargo/config.toml.cov-backup ~/.cargo/config.toml || true
@echo "โ
Coverage report: target/coverage/html/index.html"
@cargo llvm-cov report | grep TOTAL
lint:
@echo "๐ Running clippy (zero warnings policy)..."
cargo clippy --all-targets --all-features -- -D warnings
fmt:
cargo fmt
fmt-check:
cargo fmt -- --check
bench:
cargo bench --no-fail-fast
bench-gpu:
cargo bench --bench gpu_ops --all-features --no-fail-fast
bench-save-baseline:
@echo "๐ Running benchmarks and saving baseline..."
@mkdir -p .performance-baselines
@cargo bench --bench gpu_ops --all-features --no-fail-fast 2>&1 | tee .performance-baselines/bench-latest.txt
@echo "โ
Baseline saved to .performance-baselines/bench-latest.txt"
@echo " To activate: cp .performance-baselines/bench-latest.txt .performance-baselines/baseline-current.txt"
bench-compare:
@echo "๐ Comparing current performance vs baseline..."
@if [ ! -f .performance-baselines/baseline-current.txt ]; then \
echo "โ No baseline found. Run 'make bench-save-baseline' first."; \
exit 1; \
fi
@echo "Running benchmarks..."
@cargo bench --bench gpu_ops --all-features --no-fail-fast 2>&1 | tee /tmp/bench-current.txt
@echo "Comparing against baseline..."
@python3 scripts/check_regression.py \
--baseline .performance-baselines/baseline-current.txt \
--current /tmp/bench-current.txt
profile:
@echo "๐ฌ Profiling benchmarks with Renacer..."
@command -v renacer >/dev/null 2>&1 || { echo "Installing renacer..."; cargo install renacer; } || exit 1
cargo build --release --all-features || exit 1
renacer --function-time --source -- cargo bench --no-fail-fast
profile-flamegraph:
@echo "๐ฅ Generating flamegraph..."
@command -v renacer >/dev/null 2>&1 || { echo "Installing renacer..."; cargo install renacer; } || exit 1
@command -v flamegraph.pl >/dev/null 2>&1 || { echo "โ ๏ธ flamegraph.pl not found. Install from: https://github.com/brendangregg/FlameGraph"; } || exit 1
cargo build --release --all-features || exit 1
renacer --function-time --source -- cargo bench --no-fail-fast > profile.txt 2>&1 || exit 1
@echo "๐ Flamegraph saved to: flame.svg"
@echo " View with: firefox flame.svg"
profile-bench: ## Profile specific benchmark (BENCH=vector_ops)
@echo "๐ฌ Profiling benchmark: $(BENCH)..."
@command -v renacer >/dev/null 2>&1 || { echo "Installing renacer..."; cargo install renacer; } || exit 1
cargo build --release --all-features || exit 1
renacer --function-time --source -- cargo bench $(BENCH)
profile-test:
@echo "๐ฌ Profiling test suite..."
@command -v renacer >/dev/null 2>&1 || { echo "Installing renacer..."; cargo install renacer; } || exit 1
cargo build --release --all-features || exit 1
renacer --function-time --source -- cargo test --release --all-features
mutate:
@echo "๐งฌ Running mutation testing (target: >80% kill rate)..."
@command -v cargo-mutants >/dev/null 2>&1 || { echo "Installing cargo-mutants..."; cargo install cargo-mutants; } || exit 1
cargo mutants --timeout 60
clean:
cargo clean
rm -rf target/ || exit 1
rm -f lcov.info || exit 1
quality-gates: lint fmt-check test-fast coverage
@echo ""
@echo "โ
All quality gates passed!"
@echo ""
@echo "Summary:"
@echo " โ
Linting: cargo clippy (zero warnings)"
@echo " โ
Formatting: cargo fmt"
@echo " โ
Tests: cargo test (all passing)"
@echo " โ
Coverage: >85% (see report above)"
@echo ""
@echo "Ready to commit!"
all: quality-gates
pmat-tdg:
pmat tdg
pmat-analyze:
pmat analyze complexity
pmat analyze satd
pmat-score:
pmat repo-score .
dev:
cargo watch -x 'test --all-features'
install-tools:
cargo install cargo-llvm-cov || exit 1
cargo install cargo-watch || exit 1
cargo install cargo-mutants || exit 1
cargo install criterion || exit 1
cargo install renacer || exit 1
.DEFAULT_GOAL := help