agentsclimarketplace

Tooling catalog

Skill xiaolai/tdd-guardian-for-claude/skills/tdd-guardian/tooling-catalog

Per-language catalog of test runners, coverage tools, coverage formats, mutation tools, and dry-run probe commands. Use when detecting a repository's test tooling or configuring a lane for any language.From its SKILL.md

Install
npx -y skills add xiaolai/tdd-guardian-for-claude --skill tooling-catalog

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 10 stars10 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

8.4 KB, as published. Nobody here has run it

Tooling Catalog

Reference data for configuring TDD Guardian lanes in any language. The detection method lives in commands/shared/detect-tooling.md; this skill holds the facts it needs.

Read the index below, identify the ecosystem, then read only that reference file. Loading the whole catalog wastes context — each file is self-contained.

Reference index

FileLanguages
references/js-ts.mdJavaScript, TypeScript, Node.js, Deno, Bun
references/python.mdPython
references/jvm.mdJava, Kotlin, Scala, Clojure, Groovy
references/dotnet.mdC#, F#, VB.NET
references/native.mdC, C++, Rust, Go, Zig, Swift, Objective-C
references/dynamic.mdRuby, PHP, Perl, Lua
references/functional.mdElixir, Erlang, Haskell, OCaml
references/data-mobile.mdDart/Flutter, R, Julia, Shell
references/e2e.mdCross-language e2e, integration, contract, and load tooling

Manifest fingerprints

Find every match, not just the first — a repo matching more than one is polyglot, and each ecosystem needs its own lane.

ManifestEcosystemReference
package.jsonNode/TSjs-ts.md
deno.json, deno.jsoncDenojs-ts.md
bunfig.tomlBunjs-ts.md
pyproject.toml, setup.py, setup.cfg, requirements.txt, tox.iniPythonpython.md
pom.xmlJava/Kotlin (Maven)jvm.md
build.gradle, build.gradle.ktsJava/Kotlin (Gradle)jvm.md
build.sbtScalajvm.md
deps.edn, project.cljClojurejvm.md
*.csproj, *.fsproj, *.sln, Directory.Build.props.NETdotnet.md
go.modGonative.md
Cargo.tomlRustnative.md
CMakeLists.txt, Makefile, meson.build, conanfile.txtC/C++native.md
build.zigZignative.md
Package.swift, *.xcodeprojSwiftnative.md
Gemfile, *.gemspecRubydynamic.md
composer.jsonPHPdynamic.md
cpanfile, Makefile.PLPerldynamic.md
*.rockspecLuadynamic.md
mix.exsElixirfunctional.md
rebar.configErlangfunctional.md
*.cabal, stack.yaml, package.yamlHaskellfunctional.md
dune-projectOCamlfunctional.md
pubspec.yamlDart/Flutterdata-mobile.md
DESCRIPTION + tests/testthat/Rdata-mobile.md
Project.tomlJuliadata-mobile.md
*.bats, test/bats/Shelldata-mobile.md

Coverage formats the gate can read

Every parser is implemented in scripts/tdd-guardian/lib/coverage.js and covered by tests/coverage.test.js.

FormatProduced byPer-line detail
istanbul-summaryJest, Vitest, nyc (coverage-summary.json)No
istanbul-finalJest, Vitest, nyc (coverage-final.json)Yes
lcovnode:test, c8, cargo-llvm-cov, lcov, Flutter, bisect_ppx, DenoYes
coberturatarpaulin, coverlet, gcovr, scoverage, covr, pytest-covYes
jacocoJaCoCo (Java/Kotlin/Scala/Groovy)Yes
cloverPHPUnit, PestYes
coverage-pycoverage.py / pytest-cov JSONYes
go-covergo test -coverprofileYes
simplecovSimpleCov .resultset.json (Ruby)Yes

Prefer a per-line format whenever more than one lane contributes coverage. Only per-line data merges as a true union; summary-only reports fall back to a weighted average that double-counts any line exercised by two lanes. Most tools can emit LCOV or Cobertura with one flag — take it.

Metrics each format actually measures

A dimension a tool does not measure is reported as null, not zero, and produces a WARNING rather than a gate failure. Set that threshold to 0 rather than chasing a number the tool cannot produce.

FormatLinesFunctionsBranchesStatements
istanbulyesyesyesyes
lcovyesyes (when FNF/FNH present)yes (when BRF/BRH present)mirrors lines
coberturayesfrom <method> elementsyesmirrors lines
jacocoyesyes (METHOD)yes (BRANCH)mirrors lines
cloveryesyesyes (conditionals)mirrors lines
coverage-pyyesnoyes (with --branch)same as lines
go-coveryesnonoyes
simplecovyesnono (without the branch flag)mirrors lines

Property-testing libraries

policy-core requires an S4-S6 case for every unit that has a law. That requirement is only real if a library exists to express it, so the catalog names one per ecosystem. Where the column says none in wide use, that is the honest answer: fall back to table-driven S2/S3 cases over a hand-written input set, and say so in the matrix rather than pretending a property was checked.

EcosystemLibraryNotes
JavaScript / TypeScriptfast-checkIntegrates with Vitest, Jest, and node:test; shrinks counterexamples
PythonhypothesisAlso has stateful testing for S5 state-machine invariants
Java / KotlinjqwikJUnit 5 engine; @Property alongside ordinary @Test
ScalaScalaCheckBundled with ScalaTest and munit
Clojuretest.checkclojure.spec generators feed it directly
C# / F#FsCheck, CsCheckFsCheck drives xUnit/NUnit from both languages
Gopgregory.net/rapidStdlib testing/quick exists but does not shrink; prefer rapid
Rustproptest, quickcheckproptest shrinks structurally; both integrate with cargo test
C / C++RapidCheckIntegrates with GoogleTest and Catch2
SwiftSwiftCheckSPM package; XCTest-compatible
Rubyrantly, prop_checkEither works with RSpec and minitest
PHPerisPHPUnit integration
ElixirStreamDataExUnitProperties ships in the ecosystem; strongest fit for S5
ErlangPropErAlso supports stateful/statem models
HaskellQuickCheck, hedgehoghedgehog generates and shrinks integrally
OCamlqcheckAlcotest and OUnit integrations
Dart / FluttergladosSmaller ecosystem; verify it still fits the project's Dart version
Rhedgehogtestthat-compatible
JuliaSupposition.jlHypothesis-derived
Zig, Lua, Perl, Shellnone in wide useUse table-driven S2/S3 cases and record the absence

Where properties pay and where they do not

Unit shapeWorth a property?
Serializer/parser pairYes — round-trip is the law: parse(print(x)) == x
Money, quantities, ledgersYes — conservation across operations
Sorting, ranking, dedupYes — ordering, permutation, and idempotence
Retry, cache, upsertYes — idempotence under repetition
Rate limiter, state machineYes — invariants across transitions (S5, stateful generators)
Search, ranking, compressionYes, as a metamorphic relation (S6) — there is no oracle to compare against
A formatter with three hard-coded stringsNo — S1/S2 says everything there is to say
A thin adapter over one HTTP callNo — the behavior is at the integration lane, not in a generator

When a language is not in the catalog

Do not guess a command. Instead:

  1. Read the CI config — the repo tells you what it runs.
  2. Read the project's own README/CONTRIBUTING for the documented test command.
  3. Ask the user, and state plainly that the ecosystem is not in the catalog.

Then check whether the tool can emit LCOV or Cobertura. Almost every coverage tool can, and either one makes the lane fully supported without any change to the plugin.

Scope

Covers the per-language facts: runners, coverage tools, report formats and paths, mutation tools, property-testing libraries, and probe commands. It is a reference table, not a procedure.

Does NOT cover:

QuestionWhere
How do I detect which of these a repo uses?commands/shared/detect-tooling.md
Which tier should this suite gate?tdd-guardian:lane-policy
How are thresholds enforced against the report?tdd-guardian:coverage-gate
How is the report parsed and merged?commands/shared/parse-coverage.md

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.