Runs pytest with coverage, finds one uncovered unit, and opens a PR adding a test for it — the smallest full MyThingsLab harness loop (issue → deterministic pre-work → one Engine call → PR → ledger).
- Check out the target ref in a
isolation.Workspacegit worktree. - Run the target repo's
pytest --cov=<package> --cov-report=jsonand parse it. - Pick the first uncovered function/method (by file, then line), skipping
__init__/dunder/private names. If coverage is 100%, do nothing (outcome=skipped). - Read one existing test from the matching
tests/test_<module>.pyfor style. - One Engine call — generate a single new test function. Against
NoopEngine, a fixed placeholder (def test_noop_placeholder(): assert True) exercises the read-write-PR path without asserting a real coverage gain. - Append the test, then open exactly one PR (head
my-tester/<issue>). Everygit/ghside effect is routed throughPolicy.evaluate(MyGuard) first; aDENYaborts withoutcome=failure. Never merges.
mytester run --issue 12 --repo owner/name --base main
mytester run --local-only # skip the PR; print the generated testpython -m venv .venv && source .venv/bin/activate
pip install -e ../my-things-core -e ../my-guard -e ".[dev]"
pytestMIT — see LICENSE.