Files
consensus/Makefile
T
zeekayandHanzo Dev fe378a9557 cmd: delete six unshipped tools, make the shipped one honest and tested
Seven main packages sat at 0% coverage. Only cmd/consensus reaches a user:
.hanzo/workflows/release.yml builds it into the release artifact. The other
six were built by a Makefile CI never invokes, or by nothing at all, and
nothing in or outside the module imports them.

They did not merely go unused, they misreported. bench printed a 30k TPS
figure that was the throughput of a failed map lookup, its chain half unable
to start at all. checker exited 0 announcing "all health checks passed" while
asserting nothing. sim drew from rand and formatted it like a quorum. server
asserted its engine to an interface the engine does not implement, so health
was a hardcoded true, and it was in no build recipe. conformance printed a
1-of-3 accept as normal. params duplicated cmd/consensus.

cmd/consensus keeps only what it can prove. The engine "test" and "health"
actions started an engine, printed a check mark and asserted nothing, so they
would pass against a Start that does nothing; they are gone along with the
stale "not yet implemented" arms for constructors that do exist. What remains
is the parameter report, absorbing the -json flag from params.

An unknown -network no longer falls back to mainnet. A typo used to print
mainnet's K=21 while the operator read it as the network they asked for.

Its old test never called a single symbol from main.go: it reimplemented a
CLI in the test file, parsed flags main.go does not have, and passed with
main.go deleted. Replaced with tests pinned to config, each verified to fail
under a deliberate mutation of the code it covers.

The .gitignore build-artifact patterns were unanchored, so `consensus` and
`bench` matched the cmd/consensus and bench source directories and silently
untracked new files in both. Anchored to the root artifacts they meant.

Also drops the Makefile and scripts that drove the deleted binaries, the
zmq-bench target chain building a cmd/ package absent for many commits, and
the E2E server test that can now only ever skip.

cmd/consensus: 0.0% -> 100.0% of statements, 1302 lines deleted.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-15 22:38:07 -07:00

318 lines
11 KiB
Makefile

# Copyright (C) 2020-2025, Lux Industries Inc All rights reserved.
# See the file LICENSE for licensing terms.
.PHONY: all test build clean lint format check tools help benchmark \
coverage coverage-html coverage-95 \
install-tools examples examples-go examples-c examples-cpp examples-rust
# Default target
all: build test
# === BUILD TARGETS ===
# Build the commands. A failure here fails the build: swallowing it with
# `|| echo` is how this target came to report success while building nothing.
build: ## Build all tools and commands
@echo "๐Ÿ”จ Building..."
@go build -o bin/consensus ./cmd/consensus
@echo "โœ… Built:"
@ls -1 bin/
# === TEST TARGETS ===
# Run all tests
test: guard-no-trusted-dealer ## Run all tests
@echo "๐Ÿงช Running tests..."
@go test -race -timeout 5m -tags="!integration" ./... 2>&1 | grep -v "warning.*LD_DYSYMTAB" | grep -v "has malformed LC_DYSYMTAB"
# Run tests (verbose, showing warnings)
test-verbose: ## Run tests with all output including warnings
@echo "๐Ÿงช Running tests (verbose)..."
@go test -race -timeout 5m -tags="!integration" -v ./...
# Run tests with coverage
test-coverage: ## Run tests with coverage report
@echo "๐Ÿ“Š Running tests with coverage..."
@go test -race -timeout 5m -coverprofile=coverage.out -covermode=atomic ./...
@go tool cover -func=coverage.out
@echo "Coverage report: coverage.out"
# Generate HTML coverage report
coverage-html: test-coverage ## Generate HTML coverage report
@echo "๐Ÿ“Š Generating HTML coverage report..."
@go tool cover -html=coverage.out -o coverage.html
@echo "โœ… Coverage report generated: coverage.html"
# Ensure 95%+ coverage
coverage-95: ## Run tests and ensure 95%+ coverage
@echo "๐ŸŽฏ Running tests with 95% coverage target..."
@go test -race -timeout 5m -coverprofile=coverage.out -covermode=atomic ./...
@echo ""
@COVERAGE=$$(go tool cover -func=coverage.out | grep total | awk '{print $$3}' | sed 's/%//'); \
echo "๐Ÿ“Š Total Coverage: $$COVERAGE%"; \
if [ $$(echo "$$COVERAGE < 95" | bc) -eq 1 ]; then \
echo "โŒ Coverage $$COVERAGE% is below 95% target"; \
go tool cover -func=coverage.out | grep -v "100.0%"; \
exit 1; \
else \
echo "โœ… Coverage $$COVERAGE% meets 95% target!"; \
fi
# Run tests for AI package specifically
test-ai: ## Run AI package tests with coverage
@echo "๐Ÿค– Testing AI package..."
@go test -v -race -coverprofile=ai_coverage.out ./ai
@go tool cover -func=ai_coverage.out
# Run tests for core package specifically
test-core: ## Run core package tests with coverage
@echo "โš™๏ธ Testing core package..."
@go test -v -race -coverprofile=core_coverage.out ./core
@go tool cover -func=core_coverage.out
# Run a specific test
test-specific: ## Run a specific test (use TEST=TestName)
@if [ -z "$(TEST)" ]; then \
echo "Usage: make test-specific TEST=TestName"; \
exit 1; \
fi
@echo "๐Ÿงช Running test: $(TEST)"
@go test -race -v -run $(TEST) ./...
# Run tests for a specific package
test-package: ## Run tests for a specific package (use PKG=./ai)
@if [ -z "$(PKG)" ]; then \
echo "Usage: make test-package PKG=./ai"; \
exit 1; \
fi
@echo "๐Ÿงช Testing package: $(PKG)"
@go test -race -v $(PKG)
# === BENCHMARK TARGETS ===
# Run benchmarks
bench: ## Run performance benchmarks
@echo "โšก Running benchmarks..."
@go test -bench=. -benchmem ./config ./protocol/... ./engine/... ./photon ./core/... ./qzmq ./ai
# Run pure consensus benchmarks
benchmark: ## Run pure algorithm benchmarks without networking
@echo "๐Ÿš€ Running pure consensus benchmarks..."
@go test -bench=. -benchmem ./config ./protocol/... ./engine/... ./photon ./core/... ./qzmq
# Run massively parallel ZMQ benchmarks with Ginkgo
benchmark-zmq: check-ginkgo ## Run ZeroMQ transport benchmarks
@echo "๐ŸŒ Running transport benchmarks..."
go test -tags zmq -v ./qzmq -ginkgo.v
# Run Ginkgo tests in parallel
test-parallel: check-ginkgo ## Run tests in parallel with Ginkgo
@echo "โšก Running tests in parallel..."
ginkgo -p ./...
# === CODE QUALITY TARGETS ===
# Run linters
lint: ## Run linters
@echo "๐Ÿ” Running linters..."
@golangci-lint run ./... || echo "โš ๏ธ Some linter issues found"
# Format code
format: ## Format code
@echo "โœจ Formatting code..."
@go fmt ./...
@goimports -w . 2>/dev/null || echo "โš ๏ธ goimports not found, skipping"
# Check if code is properly formatted
check-format: ## Check if code is properly formatted
@echo "๐Ÿ” Checking code format..."
@if [ -n "$$(gofmt -l .)" ]; then \
echo "โŒ The following files need formatting:"; \
gofmt -l .; \
exit 1; \
fi
@echo "โœ… All files properly formatted"
# Run static analysis
static-analysis: ## Run static analysis
@echo "๐Ÿ” Running static analysis..."
@go vet ./...
@staticcheck ./... 2>/dev/null || echo "โš ๏ธ staticcheck not found, skipping"
# Guard: no trusted-dealer keygen in production (non-test) code
guard-no-trusted-dealer: ## Fail if trusted-dealer keygen helpers exist in non-test code
@echo "๐Ÿ”’ Guard: no trusted-dealer keygen in non-test code..."
@bash scripts/no-trusted-dealer-guard.sh
# Check for security vulnerabilities
security: guard-no-trusted-dealer ## Check for security vulnerabilities
@echo "๐Ÿ”’ Checking for vulnerabilities..."
@govulncheck ./... 2>/dev/null || echo "โš ๏ธ govulncheck not found, install with: go install golang.org/x/vuln/cmd/govulncheck@latest"
# Run pre-commit checks
pre-commit: check-format lint test ## Run pre-commit checks
@echo "โœ… All pre-commit checks passed"
# === DEPENDENCY TARGETS ===
# Update dependencies
update-deps: ## Update dependencies
@echo "๐Ÿ“ฆ Updating dependencies..."
@go get -u ./...
@go mod tidy
# Verify dependencies
verify-deps: ## Verify dependencies
@echo "๐Ÿ” Verifying dependencies..."
@go mod verify
# Tidy dependencies
tidy: ## Tidy go.mod and go.sum
@echo "๐Ÿงน Tidying dependencies..."
@go mod tidy
# === INSTALLATION TARGETS ===
# Install all development tools
tools: install-tools ## Install all development tools
# Install development tools
install-tools: ## Install development tools
@echo "๐Ÿ“ฆ Installing development tools..."
@go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
@go install honnef.co/go/tools/cmd/staticcheck@latest
@go install golang.org/x/tools/cmd/goimports@latest
@go install golang.org/x/vuln/cmd/govulncheck@latest
@$(MAKE) check-ginkgo
@echo "โœ… Development tools installed"
# === EXAMPLE TARGETS ===
# Build all integration examples
examples: examples-go examples-c examples-cpp examples-rust ## Build all integration examples
# Build Go integration examples
examples-go: ## Build Go integration examples
@echo "๐Ÿ”จ Building Go examples..."
@cd examples && go build -o ../bin/example-go ./go_sdk_example.go
@echo "โœ… Go examples built"
# Build C integration examples
examples-c: ## Build C integration examples
@echo "๐Ÿ”จ Building C examples..."
@cd pkg/c && $(MAKE) all || echo "โš ๏ธ C examples build failed"
@echo "โœ… C examples built"
# Build Rust integration examples
examples-rust: ## Build Rust integration examples
@echo "๐Ÿ”จ Building Rust examples..."
@cd pkg/rust && cargo build --release || echo "โš ๏ธ Rust examples build failed"
@echo "โœ… Rust examples built"
# === CLEAN TARGETS ===
# Clean build artifacts
clean: ## Clean build artifacts
@echo "๐Ÿงน Cleaning..."
@rm -rf bin/ coverage.out coverage.html *.coverage benchmark_report.txt *.prof
@$(MAKE) paper-clean
@cd pkg/rust && cargo clean 2>/dev/null || true
@echo "โœ… Clean complete"
# === PAPER TARGETS ===
# Build the PDF white paper
paper: check-latex ## Build PDF white paper
@echo "๐Ÿ“„ Building white paper..."
@cd paper && pdflatex main.tex
@cd paper && bibtex main
@cd paper && pdflatex main.tex
@cd paper && pdflatex main.tex
@echo "โœ… Paper built: paper/main.pdf"
# Clean paper build artifacts
paper-clean: ## Clean paper build artifacts
@echo "๐Ÿงน Cleaning paper build artifacts..."
@cd paper && rm -f *.aux *.bbl *.blg *.log *.out *.toc *.fdb_latexmk *.fls *.synctex.gz
# Watch and rebuild paper on changes (requires entr)
paper-watch: check-latex check-entr ## Watch and rebuild paper on changes
@echo "๐Ÿ‘€ Watching for paper changes..."
@find paper -name "*.tex" -o -name "*.bib" | entr -s 'make paper'
# === DOCUMENTATION TARGETS ===
# Build documentation site
docs: ## Build documentation site
@echo "๐Ÿ“š Building documentation..."
@cd docs && pnpm install && pnpm build
@echo "โœ… Documentation built in docs/out/"
# Run documentation dev server
docs-dev: ## Run documentation dev server
@echo "๐Ÿ“š Starting documentation dev server..."
@cd docs && pnpm dev
# Clean documentation build artifacts
docs-clean: ## Clean documentation build artifacts
@echo "๐Ÿงน Cleaning documentation..."
@cd docs && rm -rf .next out node_modules
@echo "โœ… Documentation cleaned"
# Show comprehensive help
help: ## Show this help
@echo "๐Ÿ”ง Lux Consensus Makefile"
@echo ""
@echo "Usage: make [target]"
@echo ""
@echo "๐Ÿ“‹ Main Targets:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
grep -E '^(all|build|test|coverage-95|clean|help):' | \
sort | awk 'BEGIN {FS = ":.*?## "}; {printf " %-20s %s\n", $$1, $$2}'
@echo ""
@echo "๐Ÿงช Test Targets:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
grep -E '^test-' | \
sort | awk 'BEGIN {FS = ":.*?## "}; {printf " %-20s %s\n", $$1, $$2}'
@echo ""
@echo "โšก Benchmark Targets:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
grep -E '^(bench|benchmark)' | \
sort | awk 'BEGIN {FS = ":.*?## "}; {printf " %-20s %s\n", $$1, $$2}'
@echo ""
@echo "๐Ÿ” Code Quality:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
grep -E '^(lint|format|security|pre-commit)' | \
sort | awk 'BEGIN {FS = ":.*?## "}; {printf " %-20s %s\n", $$1, $$2}'
@echo ""
@echo "๐Ÿ“ฆ Examples:"
@echo " # Achieve 95% test coverage"
@echo " make coverage-95"
@echo ""
@echo " # Clean and rebuild everything"
@echo " make clean build test"
@echo ""
@echo " # Build integration examples"
@echo " make examples"
# === CHECK TARGETS (Internal) ===
# Check if Ginkgo is installed
check-ginkgo:
@which ginkgo > /dev/null || (echo "๐Ÿ“ฆ Installing Ginkgo..."; go install github.com/onsi/ginkgo/v2/ginkgo@latest)
# Check if LaTeX is installed
check-latex:
@which pdflatex > /dev/null || (echo "โŒ pdflatex not found. Install LaTeX (e.g., brew install --cask mactex)"; exit 1)
@which bibtex > /dev/null || (echo "โŒ bibtex not found. Install LaTeX (e.g., brew install --cask mactex)"; exit 1)
# Check if entr is installed (for watch mode)
check-entr:
@which entr > /dev/null || (echo "๐Ÿ“ฆ Installing entr for watch mode..."; brew install entr || echo "โš ๏ธ Could not install entr. Install manually for watch mode.")
# === CI TARGETS ===
# Run CI checks (used by GitHub Actions)
ci: pre-commit coverage-95 ## Run all CI checks
@echo "โœ… All CI checks passed"