2026-03-06 01:20:14 -05:00
|
|
|
[tox]
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
envlist = lint, unit, integration
|
|
|
|
|
no_package = true
|
2026-03-06 01:20:14 -05:00
|
|
|
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
# ── Base ─────────────────────────────────────────────────────────────────────
|
2026-03-06 01:20:14 -05:00
|
|
|
[testenv]
|
2026-03-11 09:52:57 -04:00
|
|
|
allowlist_externals = timeout, perl, docker, mkdir, bash, grep
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
commands_pre = pip install -e ".[dev]" --quiet
|
|
|
|
|
|
|
|
|
|
setenv =
|
|
|
|
|
TIMMY_TEST_MODE = 1
|
|
|
|
|
TIMMY_DISABLE_CSRF = 1
|
|
|
|
|
TIMMY_SKIP_EMBEDDINGS = 1
|
|
|
|
|
|
|
|
|
|
# ── Lint & Format ────────────────────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[testenv:lint]
|
2026-03-11 09:52:57 -04:00
|
|
|
description = Check formatting (black), import order (isort), security (bandit), no inline CSS
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
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
|
2026-03-11 09:52:57 -04:00
|
|
|
bash -c 'files=$(grep -rl "<style" src/dashboard/templates/ --include="*.html" 2>/dev/null); if [ -n "$files" ]; then echo "ERROR: inline <style> blocks found — move CSS to static/css/mission-control.css:"; echo "$files"; exit 1; fi; echo "No inline CSS — OK"'
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
|
|
|
|
|
[testenv:format]
|
|
|
|
|
description = Auto-format code with black + isort
|
|
|
|
|
commands_pre =
|
|
|
|
|
deps =
|
|
|
|
|
black
|
|
|
|
|
isort
|
|
|
|
|
commands =
|
|
|
|
|
black --line-length 100 src/ tests/
|
|
|
|
|
isort --profile black --line-length 100 src/ tests/
|
|
|
|
|
|
|
|
|
|
[testenv:typecheck]
|
|
|
|
|
description = Static type checking with mypy
|
|
|
|
|
commands =
|
|
|
|
|
mypy src --ignore-missing-imports --no-error-summary
|
|
|
|
|
|
|
|
|
|
# ── Test Environments ────────────────────────────────────────────────────────
|
2026-03-06 01:20:14 -05:00
|
|
|
|
|
|
|
|
[testenv:unit]
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
description = Fast tests — excludes e2e, functional, and external services
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/ -q --tb=short \
|
|
|
|
|
--ignore=tests/e2e \
|
|
|
|
|
--ignore=tests/functional \
|
|
|
|
|
-m "not ollama and not docker and not selenium and not external_api and not skip_ci" \
|
|
|
|
|
-n auto --dist worksteal
|
2026-03-06 01:20:14 -05:00
|
|
|
|
|
|
|
|
[testenv:integration]
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
description = Integration tests (marked with @pytest.mark.integration)
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/ -q --tb=short \
|
|
|
|
|
-m "integration and not ollama and not docker and not selenium and not external_api" \
|
|
|
|
|
-n auto --dist worksteal
|
|
|
|
|
|
|
|
|
|
[testenv:functional]
|
|
|
|
|
description = Functional tests — real HTTP, no mocking (excl slow + selenium)
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/functional/ -q --tb=short -n0 \
|
|
|
|
|
-m "not slow and not selenium"
|
|
|
|
|
|
|
|
|
|
[testenv:e2e]
|
|
|
|
|
description = End-to-end tests — full system, may be slow
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/e2e/ -q --tb=short -n0
|
|
|
|
|
|
|
|
|
|
[testenv:fast]
|
|
|
|
|
description = All tests except e2e, functional, and external
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/ -q --tb=short \
|
|
|
|
|
--ignore=tests/e2e \
|
|
|
|
|
--ignore=tests/functional \
|
|
|
|
|
-m "not ollama and not docker and not selenium and not external_api" \
|
|
|
|
|
-n auto --dist worksteal
|
2026-03-06 01:20:14 -05:00
|
|
|
|
|
|
|
|
[testenv:ollama]
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
description = Live LLM tests via Ollama (requires running Ollama)
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/ -q --tb=short -m ollama --timeout=120
|
|
|
|
|
|
|
|
|
|
# ── CI / Coverage ────────────────────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[testenv:ci]
|
|
|
|
|
description = CI test suite with coverage + JUnit XML (mirrors GitHub Actions)
|
|
|
|
|
commands =
|
|
|
|
|
mkdir -p reports
|
|
|
|
|
pytest tests/ \
|
|
|
|
|
--cov=src \
|
|
|
|
|
--cov-report=term-missing \
|
|
|
|
|
--cov-report=xml:reports/coverage.xml \
|
|
|
|
|
--cov-fail-under=73 \
|
|
|
|
|
--junitxml=reports/junit.xml \
|
|
|
|
|
-p no:xdist \
|
|
|
|
|
-m "not ollama and not docker and not selenium and not external_api"
|
2026-03-06 13:21:05 -05:00
|
|
|
|
|
|
|
|
[testenv:coverage]
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
description = Full coverage report (terminal + XML)
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/ -q --tb=short \
|
|
|
|
|
--cov=src \
|
|
|
|
|
--cov-report=term-missing \
|
|
|
|
|
--cov-report=xml \
|
|
|
|
|
--cov-fail-under=73 \
|
|
|
|
|
-p no:xdist \
|
|
|
|
|
-m "not ollama and not docker and not selenium and not external_api"
|
|
|
|
|
|
|
|
|
|
[testenv:coverage-html]
|
|
|
|
|
description = Coverage with HTML report
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/ -q --tb=short \
|
|
|
|
|
--cov=src \
|
|
|
|
|
--cov-report=term-missing \
|
|
|
|
|
--cov-report=html \
|
|
|
|
|
--cov-fail-under=73 \
|
|
|
|
|
-p no:xdist \
|
|
|
|
|
-m "not ollama and not docker and not selenium and not external_api"
|
|
|
|
|
|
|
|
|
|
# ── Pre-push (mirrors CI exactly) ────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[testenv:pre-push]
|
|
|
|
|
description = Local gate — lint + full CI suite (same as GitHub Actions)
|
|
|
|
|
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
|
2026-03-11 09:52:57 -04:00
|
|
|
bash -c 'files=$(grep -rl "<style" src/dashboard/templates/ --include="*.html" 2>/dev/null); if [ -n "$files" ]; then echo "ERROR: inline <style> blocks found — move CSS to static/css/mission-control.css:"; echo "$files"; exit 1; fi; echo "No inline CSS — OK"'
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
mkdir -p reports
|
|
|
|
|
pytest tests/ \
|
|
|
|
|
--cov=src \
|
|
|
|
|
--cov-report=term-missing \
|
|
|
|
|
--cov-report=xml:reports/coverage.xml \
|
|
|
|
|
--cov-fail-under=73 \
|
|
|
|
|
--junitxml=reports/junit.xml \
|
|
|
|
|
-p no:xdist \
|
|
|
|
|
-m "not ollama and not docker and not selenium and not external_api"
|
|
|
|
|
|
2026-03-11 10:19:46 -04:00
|
|
|
# ── Pre-commit (fast local gate) ────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[testenv:pre-commit]
|
|
|
|
|
description = Fast pre-commit gate — format check + unit tests (30s budget)
|
|
|
|
|
deps =
|
|
|
|
|
black
|
|
|
|
|
isort
|
|
|
|
|
commands =
|
|
|
|
|
black --check --line-length 100 src/ tests/
|
|
|
|
|
isort --check-only --profile black --line-length 100 src/ tests/
|
|
|
|
|
pytest tests/ -q --tb=short \
|
|
|
|
|
--ignore=tests/e2e \
|
|
|
|
|
--ignore=tests/functional \
|
|
|
|
|
-m "not ollama and not docker and not selenium and not external_api and not skip_ci" \
|
|
|
|
|
-n auto --dist worksteal
|
|
|
|
|
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
# ── Dev Server ───────────────────────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[testenv:dev]
|
|
|
|
|
description = Start dashboard with auto-reload (local development)
|
|
|
|
|
commands =
|
2026-03-11 10:37:20 -04:00
|
|
|
uvicorn dashboard.app:app --reload --host 0.0.0.0 --port 8000 \
|
|
|
|
|
--reload-exclude ".claude"
|
Consolidate test & dev workflows into tox as single source of truth (#160)
* Centralize all Python environments on tox
tox.ini is now the single source of truth for how every Python
environment runs — tests, linting, formatting, dev server, and CI.
No more bare `poetry run` outside of tox.
- Expand tox.ini from 4 to 15 environments (lint, format, typecheck,
unit, integration, functional, e2e, fast, ollama, ci, coverage,
coverage-html, pre-commit, dev, all)
- Rewire all Makefile test/lint/format/dev targets to delegate to tox
- Update .githooks/pre-commit to run `tox -e pre-commit`
- Update .pre-commit-config.yaml to use tox instead of poetry run
- Update CI workflow (lint + test jobs) to use `tox -e lint` and
`tox -e ci` instead of ad-hoc pytest/black/isort invocations
- Update CLAUDE.md to mandate tox usage and document all environments
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* refactor: modernize tox.ini for tox 4.x conventions
- Replace `skipsdist = true` (tox 3 alias) with `no_package = true`
- Use `poetry install --no-root --sync` for faster, cleaner dep installs
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): drop poetry install from lint/format tox envs
Lint and format only need black, isort, and bandit — not the full
project dependency tree. Override commands_pre to empty and use tox
deps instead. Fixes CI failure where poetry is not on PATH.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry run wrapper from all tox commands
Since commands_pre runs poetry install into the tox-managed venv,
all tools (pytest, mypy, black, etc.) are already on the venv PATH.
The poetry run wrapper is redundant and fails in CI where poetry
may not be installed globally.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
* fix(ci): remove poetry dependency, align local and CI processes
- Replace `poetry install` with `pip install -e ".[dev]"` in tox
commands_pre so all envs work without poetry installed
- Remove Poetry cache from GitHub Actions (only pip cache needed)
- Rename pre-commit env to pre-push: runs lint + full CI suite
(same checks as GitHub Actions, reports generated locally)
- Update CLAUDE.md to reflect new pre-push workflow
The local `tox -e pre-push` now runs the exact same lint + test +
coverage checks as CI, so failures are caught before pushing.
https://claude.ai/code/session_01MTUpqms1fgezZFrodGA8H5
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 15:54:09 -04:00
|
|
|
|
|
|
|
|
# ── All Tests (parallel) ─────────────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[testenv:all]
|
|
|
|
|
description = Run all tests in parallel
|
|
|
|
|
commands =
|
|
|
|
|
pytest tests/ -q --tb=short -n auto --dist worksteal
|