Migrate Vstest To Mtp
runceel/ReactiveProperty
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP).
Guides writing, fixing and migrating tests in Go repositories that use the gotest suite framework, including version differences and CI setup.
$ npx skills add mvrahden/go-test --skill writing-gotest-tests -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mvrahden/go-test writing-gotest-tests --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mvrahden/go-test.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/writing-gotest-tests .claude/skills/writing-gotest-tests && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "writing-gotest-tests" agent skill from https://github.com/mvrahden/go-test/tree/main/skills/writing-gotest-tests into .claude/skills/writing-gotest-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-gotest-tests", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mvrahden/go-test/tree/main/skills/writing-gotest-testsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mvrahden/go-test --skill writing-gotest-tests -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mvrahden/go-test writing-gotest-tests --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvrahden/go-test.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/writing-gotest-tests .agents/skills/writing-gotest-tests && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "writing-gotest-tests" agent skill from https://github.com/mvrahden/go-test/tree/main/skills/writing-gotest-tests into .agents/skills/writing-gotest-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-gotest-tests", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mvrahden/go-test --skill writing-gotest-tests -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mvrahden/go-test writing-gotest-tests --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvrahden/go-test.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/writing-gotest-tests .cursor/skills/writing-gotest-tests && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "writing-gotest-tests" agent skill from https://github.com/mvrahden/go-test/tree/main/skills/writing-gotest-tests into .cursor/skills/writing-gotest-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-gotest-tests", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mvrahden/go-test.git --path skills/writing-gotest-tests--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mvrahden/go-test --skill writing-gotest-tests -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mvrahden/go-test writing-gotest-tests --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvrahden/go-test.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/writing-gotest-tests .gemini/skills/writing-gotest-tests && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "writing-gotest-tests" agent skill from https://github.com/mvrahden/go-test/tree/main/skills/writing-gotest-tests into .gemini/skills/writing-gotest-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-gotest-tests", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mvrahden/go-test writing-gotest-testsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mvrahden/go-test --skill writing-gotest-tests -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mvrahden/go-test.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/writing-gotest-tests .github/skills/writing-gotest-tests && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "writing-gotest-tests" agent skill from https://github.com/mvrahden/go-test/tree/main/skills/writing-gotest-tests into .github/skills/writing-gotest-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-gotest-tests", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mvrahden/go-test --skill writing-gotest-tests -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mvrahden/go-test writing-gotest-tests --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvrahden/go-test.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/writing-gotest-tests .opencode/skills/writing-gotest-tests && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "writing-gotest-tests" agent skill from https://github.com/mvrahden/go-test/tree/main/skills/writing-gotest-tests into .opencode/skills/writing-gotest-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-gotest-tests", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
writing-gotest-testsGuides writing, fixing and migrating tests in Go repositories that use the gotest suite framework, including version differences and CI setup.
This skill covers writing, fixing, reviewing and restructuring tests in Go repositories that use the gotest framework (github.com/mvrahden/go-test), which inverts habits learned from the standard library and testify. It centers on TestSuite structs, gotest.T, BeforeEach and AfterAll hooks, Fixture types and the gotest CLI, and also covers migrating testify or standard-library tests to gotest and setting up or repairing CI. A reference folder covers assertions, CI, the CLI, config, fixtures and fuzzing.
Version handling comes first: the agent runs go tool gotest version, or reads go.mod before bootstrap, remembering that a replace line overrides the require version. The skill targets v1.26.0 and later and lists what differs on v1.25.x, such as the parallel suite config recipe, config values where zero keeps the default, Test*Async methods that are recognized but never rendered, and filtering individual Each rows with -run, which can deadlock the test binary. Features such as SuiteConfig.Exclusive and gotest spec --static need v1.27 or newer.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 577a818. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Go, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
goFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Writing gotest Tests loads about 3.1k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 1,500 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mvrahden/go-test at commit 577a818, republished under its MIT licence (© mvrahden). 1,500 words, ~3,075 tokens.
.claude/skills/writing-gotest-tests/SKILL.md (or your agent's skills folder). This skill also uses 18 other files; get the full folder from GitHub.gotest inverts habits learned from stdlib/testify. Follow this file's rules;
consult reference/ only when the task touches that area.
Version check (do this FIRST): run go tool gotest version (after
Bootstrap below); dev (replace directive) / dev (source checkout) mean
a source build — assume current behavior. Before Bootstrap, read go.mod
instead, remembering that a replace line overrides the require
version.
This skill describes v1.32. On an older release, read
reference/versions.md before writing anything: it lists what each older
release lacks or does differently, including rules below that fail there
(on v1.25.x, rules 1, 3 and 4). A rule tagged v1.27+ (or later) needs
that release; skip it on older ones.
The repo has the library; the CLI runs via Go's tool directive (requires Go ≥ 1.25; v1.30+ requires Go ≥ 1.26). One-time:
go get -tool github.com/mvrahden/go-test/cmd/gotest@$(go list -m -f '{{.Version}}' github.com/mvrahden/go-test)
go tool gotest versionKeep the @version: without it go get -tool upgrades the library pin,
which setup must never do (@latest only in a project with no pin yet). In
a vendored module (vendor/modules.txt) the go.mod edit breaks every build
until go mod vendor reruns, and gotest cannot run vendored at all (the
overlay's pkg/gotestruntime import is never vendored) — report, do not
work around.
Then every command is go tool gotest <args>; if Go reports the short name
ambiguous, use go tool github.com/mvrahden/go-test/cmd/gotest. Never a
global go install binary: it drifts from the pin and from the module's Go,
and releases after v1.28.1 refuse to run on either drift (FAIL: naming the
version or the Go it was built with, exit 2). That refusal is never a fault
in the tests; switch to go tool gotest instead of bumping the pin. (Bare
go run github.com/mvrahden/go-test/cmd/gotest fails on fresh consumers:
module pruning leaves the CLI's deps out of go.sum.)
In a go.work workspace the tool declared in any use module works from
the root and inside each module, at the highest pin. ./... is rejected at
the root, so name each module (go tool gotest ./svc/... ./lib/...) or run
inside one. The go.work go line must be at least the modules' go lines.
go test ignores gotest suites (signature incompatibility, by design).
gotest runs suites and never runs stdlib tests — it prints
[no suites] plus a stderr note when it skips them. Running only one
command silently misses tests. Always finish with:
go tool gotest ./...
go test ./...Add -race to both before calling anything done.
Write → lint → both runners → fix:
go tool gotest lint -fix ./...
go get -tool golang.org/x/tools/cmd/goimports
go tool goimports -l .lint -fix applies suggested fixes as TEXTUAL edits — no formatting pass
runs. A fix that strands or misses an import leaves the file uncompilable:
install goimports once via the tool directive (as above — plain go run
of it fails on missing go.sum entries), then always run
go tool goimports -w . after -fix and re-run the loop.
The linter catches direct misuse (t.T() escapes even inside closures,
outer-t in poll callbacks, testify idioms, focus leftovers, and
fail-guard: any if cond { gotest.Fail(t, …) } or if err != nil { t.Fatal(err) } guard — assertions halt on failure, so state them
directly: gotest.NoError(t, err), never a guarded fail). Fixes can
compose — a rewritten guard may itself be simplifiable — so re-run
lint -fix until it reports nothing. When two findings share a construct
the linter reports only the stronger one (integrity over style); fix what
it says before expecting style suggestions there.
Suppression follows rule tiers: integrity rules (poll-scope,
suite-lifecycle, focus, …) accept only per-line //nolint:<rule>;
style and migration rules can also be skipped project-wide via
.gotest.yml lint.skip or -skip-<rule> flags. The stdlib-test rule
flags every stdlib TestXxx(*testing.T) — when a stdlib test is
intentional (assertion-layer tests, benchmarks-adjacent code), mark its
package clause with //nolint:stdlib-test, or the lint run fails. The
linter does NOT catch: plain defer cleanup, shared mutable state in
parallel suites, or structural problems — those are your job, below.
Suites are structs, naming is the API. type XxxTestSuite struct{},
exported, methods func (s *X) TestBehavior(t *gotest.T). No TestMain,
no registration — the CLI generates the harness invisibly (never commit
the gotest_psuite_test.go/gotest_pxsuite_test.go files gotest generate writes; gotest clean removes them). F_/X_ prefixes
focus/exclude; Test*Async(t, done) declares async tests.
Lifecycle hooks own resources. Setup in BeforeEach (or BeforeAll
for expensive read-only state), teardown in AfterEach/AfterAll as
suite fields — NEVER defer or t.T().Cleanup in a test method. A plain
defer lints clean and is still wrong: it skips teardown verification
and blocks parallelization.
Do not imitate existing tests blindly. Observed failure: agents copy
a repo's existing SuiteConfig() verbatim, propagating anti-patterns. A
SuiteConfig() marker states intent: omit it entirely for defaults.
A duration the marker leaves at zero gets the default, as if the marker
were absent; gotest.NoDeadline disables one. On v1.26–v1.29 a
zero/omitted duration meant NO deadline instead — compose onto a preset
there.
Ask "why is this suite NOT parallel?" Observed failure: agents never parallelize unprompted, even when asked to improve tests. The recipe:
func (s *ShopTestSuite) SuiteConfig() gotest.SuiteConfig {
cfg := gotest.DefaultSuiteConfig()
cfg.Parallel = true
return cfg
}
type shopCtx struct{ inv *Inventory }
func (s *ShopTestSuite) BeforeEach(t *gotest.T) *shopCtx {
return &shopCtx{inv: NewInventory()}
}Every test method then takes (t *gotest.T, ctx *shopCtx) — the
generator enforces this. Legitimate reasons to stay sequential: Setenv
(panics in parallel tests), shared live resources without per-test
keys/schemas (-race is process-local and cannot see datastore
contention — it is necessary, not sufficient).
Poll, never sleep. gotest.Eventually(t, waitFor, tick, func(poll *gotest.R) { ... }) — assert a stable fixed point, not a transient
state. The callback's poll handle has only Errorf/FailNow/
Failed/Message; pass poll (not t) to assertions inside it.
Never call t.T().Helper() — call sites resolve automatically; the
linter flags it. Reach for t.T() only when nothing on gotest.T
(It, When, Context, TempDir, Setenv, Skipf, Errorf,
FailNow) covers the need.
Ask "why is this wall-clock-asserting suite NOT Exclusive?"
(v1.27+) — the counterpart to rule 4. A suite whose assertions or
timeout budgets measure elapsed time (latency bounds, timing budgets,
contended ports/containers) cannot share a saturated machine: mark it
SuiteConfig{Exclusive: true} (statically parsed like Parallel —
boolean literal only; see reference/config.md) and it dispatches
strictly alone after all other suites finish. A budget verdict taken
under load is not a verdict you can act on.
Write the condition, not the connective (v1.29+). t.When("email is valid"), never t.When("when email is valid"); t.It("creates the user"), never t.It("it creates the user"). The spec renders every
When label as when <condition> on every surface (terminal, JSON,
discovery, the editor's tree and Spec View) and the ✓/✗ glyph plays
the role of "it", so the word in the source is said twice. A When
that opens with its own connective (with …, given …, after …,
if …, …) is rendered as written. The behavior-wording rule flags
the redundant word and lint -fix drops it. Subtest names never
carry the connective — -run filters and snapshot keys are unaffected.
Fuzz targets are suite methods, and they assert a property
(v1.29+). func (s *XTestSuite) FuzzParse(f *gotest.F): f.Add
typed seeds first, then f.Fuzz(func(t *gotest.T, in …) { … }) whose
body asserts something the input must satisfy (round-trip, idempotence,
no panic is not enough — fuzz-no-oracle). Never a top-level
func FuzzX(*testing.F): gotest ignores it on every version. Struct
and named-type arguments are fine and fan out per field; the refused
shapes and the crasher loop are in reference/fuzzing.md. Search with
go tool gotest fuzz --for=30s ./...; a crasher becomes a seed through
gotest fuzz promote, never a hand-committed corpus file for a struct
target.
Gate on the environment with SuiteGuard, never a skip. A suite
that needs what a machine may lack (a DATABASE_URL, Docker, a
credential) declares func (s *X) SuiteGuard() string: empty runs the
suite, anything else skips it with that reason. It runs before the
suite's fixtures, config and BeforeAll, so the suite's own setup never
starts; t.T().Skip() in BeforeAll runs after setup has begun. Read
the environment only: fixture fields are still nil in the guard.
Enter only at a green pause point when: setup is duplicated across tests, a
third similar test is being added, a touched suite already smells, or you
were asked to clean up. Follow reference/refactoring.md for the ladder and
smells list. Non-negotiable safety invariants (tests protect nothing —
observed failure: agents restructure with no case accounting):
Capture the executed case LIST before and after, into separate files, and diff them:
go tool gotest -json ./... | grep -o '"Package":"[^"]*","Test":"[^"]*"' | sort -u > cases-before.txt
test -s cases-before.txtCapture the Package+Test PAIR — bare Test names collapse identically
named suites across packages, hiding whole-package deletions.
After the refactor, capture cases-after.txt the same way and run
diff cases-before.txt cases-after.txt. Enumerate every rename/merge
BEFORE editing; every diff line must map to that list. Coverage may
only grow.
Both runners + -race green before AND after.
Never delete or weaken an assertion without saying so in your report.
Never touch production code during a test refactor — a test that resists restructuring is a design finding to report.
Consider rule 4 (parallelization) part of every improvement pass.
package shop_test
import (
"example.com/shop"
"github.com/mvrahden/go-test/pkg/gotest"
)
type CartTestSuite struct {
cart *shop.Cart
}
func (s *CartTestSuite) BeforeEach(t *gotest.T) {
s.cart = shop.NewCart()
}
func (s *CartTestSuite) TestTotalsItems(t *gotest.T) {
s.cart.Add("apple", 2)
gotest.Equal(t, 2, s.cart.Count("apple"))
}reference/assertions.md — full assertion surface, Nil/NotNil type
guards, snapshot testingreference/config.md — literal config semantics, presets, compose formreference/fixtures.md — fixture DAG, shared fixtures, hooksreference/cli.md — the full CLI surface and flagsreference/refactoring.md — restructuring ladder, smells → movesreference/ci.md — CI workflow shape, the gotest action, linter coexistencereference/migration.md — testify/stdlib → gotestreference/fuzzing.md — fuzz targets, seeds, struct arguments, the crasher loopreference/versions.md — what older releases lack or do differently© mvrahden, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 18 other files in skills/writing-gotest-tests of mvrahden/go-test.
Open the folder on GitHubat commit 577a818
Writing gotest Tests next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Writing gotest Tests this skillmvrahden/go-test | 128 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Migrate Vstest To Mtprunceel/ReactiveProperty | 944 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Debug Playwright Prowquay/quay | 2.8k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| Bats Shell Testing Patternswshobson/agents | 40k | 12 repos | ~1.3k | Automated safety check: Pass | MIT | |
| Simple Modern Uvjlevy/simple-modern-uv | 301 | — | ~1.9k | Automated safety check: Pass | MIT | |
| NIC Testing Patternsnginx/kubernetes-ingress | 5.1k | — | ~2.8k | Automated safety check: Pass | Apache-2.0 |
runceel/ReactiveProperty
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP).
quay/quay
Deep-dive diagnosis of a Playwright test failure already isolated to one Quay Prow/OpenShift CI run: downloads its GCS artifacts (results.json, JUnit, build/pod logs, Jaeger traces), classifies real…
wshobson/agents
Writes unit tests for shell scripts with Bats: error-condition tests, fixtures and mocks, cross-shell checks, parallel runs, helper files and CI integration.
jlevy/simple-modern-uv
Start, selectively modernize, fully migrate, or update Python projects using simple-modern-uv practices: uv, ruff, BasedPyright, pytest, GitHub Actions CI, and tag-driven PyPI publishing.
nginx/kubernetes-ingress
Testing conventions for the NGINX Ingress Controller repo: Go table-driven tests, mandatory snapshot regeneration, Helm tests and Python pytest integration tests.
arpitg1304/robotics-agent-skills
Testing strategies, patterns, and tools for robotics software.
Works with
Categories
Guides writing, fixing and migrating tests in Go repositories that use the gotest suite framework, including version differences and CI setup. com/mvrahden/go-test), which inverts habits learned from the standard library and testify.T, BeforeEach and AfterAll hooks, Fixture types and the gotest CLI, and also covers migrating testify or standard-library tests to gotest and setting up or repairing CI.
Writing gotest Tests fits situations like: writing or fixing tests in a Go repo that uses the gotest framework; migrating testify or standard-library tests to gotest; setting up or repairing CI for a gotest repository; checking which gotest features work on an older version.
Run `npx skills add mvrahden/go-test --skill writing-gotest-tests -a claude-code`. Or copy the skill folder (skills/writing-gotest-tests in mvrahden/go-test) into .claude/skills/writing-gotest-tests in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mvrahden/go-test --skill writing-gotest-tests -a codex`. Or copy the skill folder (skills/writing-gotest-tests in mvrahden/go-test) into .agents/skills/writing-gotest-tests in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mvrahden/go-test --skill writing-gotest-tests -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/writing-gotest-tests, .gemini/skills/writing-gotest-tests, .github/skills/writing-gotest-tests and .opencode/skills/writing-gotest-tests in your project.
Going by SKILL.md and its folder, Writing gotest Tests needs Go for the scripts in its folder and the command-line tools its instructions call (go). Our summary lists: A Go repository using the gotest framework.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Writing gotest Tests is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Writing gotest Tests: Migrate Vstest To Mtp (runceel/ReactiveProperty, 944 stars), Debug Playwright Prow (quay/quay, 2.8k stars), Bats Shell Testing Patterns (wshobson/agents, 40k stars) and Simple Modern Uv (jlevy/simple-modern-uv, 301 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mvrahden (a GitHub user) maintains it in mvrahden/go-test, which has 128 GitHub stars. The repository was last updated on October 10, 2026.
Source: mvrahden/go-test on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.