[tox] envlist = lint, unit, integration no_package = true # ── Base ───────────────────────────────────────────────────────────────────── [testenv] allowlist_externals = timeout, perl, docker, mkdir, bash, grep commands_pre = pip install -e ".[dev]" --quiet setenv = TIMMY_TEST_MODE = 1 TIMMY_DISABLE_CSRF = 1 TIMMY_SKIP_EMBEDDINGS = 1 # ── Lint & Format ──────────────────────────────────────────────────────────── [testenv:lint] description = Check formatting (black), import order (isort), security (bandit), no inline CSS commands_pre = deps = black isort bandit>=1.8.0 commands = black --check --line-length 100 src/ tests/ isort --check-only --profile black --line-length 100 src/ tests/ bandit -r src/ -ll -s B101,B104,B307,B310,B324,B601,B608 -q bash -c 'files=$(grep -rl "/dev/null); if [ -n "$files" ]; then echo "ERROR: inline