| Version | Supported |
|---|---|
| 0.10.x | ✅ current |
- Do not open a public issue for a security problem.
- Report privately via GitHub Security Advisories.
- Include a description, steps to reproduce, impact, and a suggested fix if you have one.
You will get an acknowledgement within 48 hours and a timeline for a fix.
TestGuard is a local CLI with a deliberately small surface:
- One runtime dependency, exact-pinned:
ajv, which validates every document the tool reads or writes against the spec. Install scripts are disabled (.npmrc).vitestis development-only. - No network access. Nothing is uploaded, fetched, or reported anywhere.
- No credentials. There is nothing to authenticate to.
- Writes are confined to
.testguard/in the probed project and to scratch git worktrees under the system temp directory, which are removed after each run. With--in-place, the mutated files are restored — on success, on failure, and onSIGINT/SIGTERM. - Publishing uses OIDC Trusted Publishing to npm and PyPI, so the release
pipeline holds no registry tokens and npm provenance attestations are
generated automatically. Homebrew publishing uses a dedicated SSH deploy
key scoped only to
raccioly/homebrew-tap; it cannot access this repository or any other repository.
testguard.claims.json contains replace strings that are written into
your source and then executed by your test runner, inside a worktree of
your repository. Treat the file exactly as you treat source:
- Review changes to it in pull requests.
- In CI, a pull request that edits the claims file has the same power as a
pull request that edits a test — no more, no less. Do not run
probeon untrusted pull requests with secrets in the environment, for the same reason you would not run their tests that way. - The schema rejects absolute paths and
..traversal in fault targets, so a fault cannot address files outside the probed project.
- Keep Node.js ≥ 20 and current.
- Prefer the default worktree mode; use
--in-placeonly when you need uncommitted changes probed. - Read
.testguard/evidence.jsonbefore sharing it: it contains file paths, test names, and content hashes of your project.