# UQO WP 27 — The Invisible Hand of Machines. One-command no-API replication: `make replicate`. PY ?= .venv/bin/python W ?= 6 .PHONY: all setup test smoke calibrate scale classical pilot confirmatory library figures tables paper replicate clean all: test classical figures tables paper setup: uv sync --extra dev test: $(PY) -m pytest tests -q smoke: # 100 agents, fixed seed, zero paid calls, accounting verified $(PY) scripts/smoke_test.py calibrate: $(PY) scripts/10_calibration_sweep.py scale: $(PY) scripts/11_scale_benchmark.py classical: # 16 cells x 30 matched seeds, no API $(PY) -m market_agents.cli design configs/classical_confirmatory.yaml --workers $(W) --root results/runs $(PY) -m market_agents.cli design configs/exploratory.yaml --workers $(W) --root results/runs pilot: # paid: ~3 USD (OpenAI). Requires OPENAI_API_KEY in .env $(PY) -m market_agents.cli budget configs/pilot_openai.yaml $(PY) -m market_agents.cli design configs/pilot_openai.yaml --workers 3 --cache results/cache/llm_cache.sqlite --root results/runs confirmatory: # paid: ~30 USD (OpenAI) $(PY) -m market_agents.cli budget configs/confirmatory_openai.yaml $(PY) -m market_agents.cli design configs/confirmatory_openai.yaml --workers 5 --cache results/cache/llm_cache.sqlite --root results/runs library: # frozen decision library from recorded runs + replay at N = 1,000 (no API) $(PY) scripts/60_frozen_library.py theory: $(PY) scripts/90_theory_checks.py figures: $(PY) scripts/40_figures.py tables: $(PY) scripts/50_tables.py mkdir -p paper/figures paper/tables cp results/figures/*.pdf paper/figures/ cp results/tables/*.tex paper/tables/ paper: tables cd paper && latexmk -pdf main.tex replicate: test smoke classical theory figures tables # everything that needs no API key clean: cd paper && latexmk -C