skills/do-test/SKILL.md
--- name: do-test description: Write or update tests for a code change. Operates in two modes: `unit` (module-scoped, fast, deterministic) and `integration` (crosses module / service / database boundaries). Intended to be invoked once per testable change from inside a do-issue-* or do-epic phase. Mode is required. argument-hint: mode: unit or integration user-invocable: true disable-model-invocation: false --- **Depends on:** mav-bp-unit-testing, mav-bp-integration-testing, mav-local-verificati
npx skillsauth add thermiteau/maverick skills/do-testInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Depends on: mav-bp-unit-testing, mav-bp-integration-testing, mav-local-verification, mav-scope-boundaries
Wraps test-writing work in a Maverick skill so the workflow report
records what was tested and the agent applies the project's testing
standards before writing tests. Invoke this skill once per testable
change from inside do-issue-solo /
do-issue-guided / do-epic Phase 5 —
typically as a sibling call to do-code, before the
commit for that task.
This skill is a thin wrapper. The actual test files are written by the orchestrating Claude Code session using its built-in tools (Read, Edit, Write, Bash). The skill's job is to pin the right standards for the mode and keep scope tight.
Run this first. If it exits non-zero, halt and report the stderr output to the user verbatim. Do not proceed.
uv run maverick preflight do-test
The check verifies the project is initialised and uv is on PATH.
`` must specify a mode:
unit — module-scoped, fast, deterministic. No network, no real
database, no real filesystem outside the test's own tmp_path.
Use this for any change that can be exercised through its public
surface in-process.integration — crosses module / service / database / external API
boundaries. Real I/O is allowed (and usually required). Slower;
reserved for changes whose behaviour only emerges across that
boundary.If no mode is specified, halt and ask the caller to pick one. Do not guess — getting the mode wrong invites flaky tests or fast-but-untrue coverage.
Apply mav-bp-unit-testing for the project's unit-testing
conventions (test framework, naming, fixture style, assertion
patterns).
tests/unit/test_<module>.py, <module>.test.ts, etc.) — check
how nearby modules are tested.mav-local-verification. The whole suite — not just
the new tests — must stay green.Apply mav-bp-integration-testing for the project's
integration-testing conventions (which real services are stood up,
fixture lifecycle, isolation strategy, slowness budget).
tests/integration/, e2e/, __tests__/integration/, etc.) and
have their own runner config.foo(),
don't mock foo()'s direct collaborators with such fidelity that
the test passes regardless of foo()'s behaviour. Mock at one hop
out: the network, the database, the clock.assert True placeholders. If you don't know how to test
the change, halt and ask rather than ship an empty test.mav-scope-boundaries.do-test is a subroutine of the calling workflow's
per-task loop — not a terminal action. Returning from this skill is a
hand-back to the caller's next numbered step, not a completion event
(#106).
When you return from this skill, do not post a closing summary, do not stop, do not treat green-tests as "task done." The calling workflow's loop still owns, in order:
skill-dispatch interval that wrapped this invocation
(uv run maverick report end skill-dispatch … --outcome success).uv run maverick report commit …).If you find yourself drafting a final summary after returning here,
that is the signal: scroll back to the calling workflow's per-task
loop and resume from the step immediately after the
/do-test invocation.
development
Implement a focused code change. Use this skill as the wrapper for any implementation work so the Maverick workflow report captures what was done and so the agent applies the project's coding standards before editing. Intended to be invoked once per task from inside a do-issue-* or do-epic phase, not standalone.
testing
How to stack a PR on top of an unmerged sibling branch, and how to retarget it to the repo's default branch once the sibling merges. Prevents orphan-merge incidents when a dependent story is ready before its parent.
development
Claim, lease, heartbeat, and release protocols for when multiple Claude Code instances may act on the same issue or epic concurrently. GitHub labels and marker comments are the coordination surface; local state is a cache.
documentation
Durability conventions for multi-instance Maverick workflows. Covers cold-start hydration from GitHub, marker-write protocols, push-per-task cadence, and recreating worktrees from remote branches. GitHub is the source of truth; local files are a cache.