Skip to content

[Feature] tox for Python test/lint matrix + Rust MSRV verification #30

Description

@BcKmini

What problem does this solve?

tools/*.py claims "Python 3.8+ compatible" (README badge, docs/CONTRIBUTING.md) but nothing actually verifies that across versions — there's no Python job in CI at all, and the only local check is a handful of ad-hoc --help/smoke commands in Makefile's test-python target. This project has already shipped Python-version-shaped bugs before (see PR #29's fix for a syntax error that broke claude-pipeline on every version) that a real test suite would have caught immediately.

Similarly, rust/claude-tools declares a "Rust 1.75+" badge in the README but nothing enforces that MSRV — CI only builds against stable, so a dependency bump or a new-syntax usage could silently raise the real minimum version without anyone noticing.

Proposed solution

  • Python: add tox.ini + a small tests/ pytest suite covering all 8 CLI tools (functional, sandboxed HOME, subprocess-based — the same technique used to manually verify PR Add autonomy levels (L0-L4), claude-lessons tool, and MCP server guide #29). tox environments: py38..py313 (skip missing interpreters), lint (ruff check), fmt-check (ruff format --check). Wire into Makefile (new make tox target) and a new CI job running the matrix via actions/setup-python.
  • Rust: declare rust-version = "1.75" in rust/claude-tools/Cargo.toml (matches the README badge, makes cargo itself enforce it for consumers), add an MSRV job to CI (cargo msrv verify via cargo-msrv, the closest Rust-ecosystem equivalent to tox's multi-version testing), and a make msrv target.

Alternatives considered

Rewriting tools/*.py as an installable package (pyproject.toml + pip install -e .) so tox could use its normal package-based flow — rejected as unnecessary scope increase; these are standalone CLI scripts, not a library, and docs/CONTRIBUTING.md deliberately keeps them dependency-free and copy-paste-installable. tox.ini with skipsdist = true running pytest directly against tests/ gets the version-matrix benefit without that.

Additional context

Depends on tools/docs from #26/#27/#28 (PR #29) — this branch builds on top of it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions