Corvus Java Evaluator
corvus-dotnet/Corvus.JsonSchema
Work on the Java port of the V5 standalone schema evaluator (src-java/corvus-json-schema, Maven artifact io.github.corvus-dotnet:corvus-json-schema): loader, compiler, the ASM bytecode generator…
Reviews test code in GitHub pull requests for isolation, public-API contract coverage, AAA structure, and correct exception assertions.
$ npx skills add axelixlabs/axelix --skill test-reviewer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install axelixlabs/axelix test-reviewer --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/axelixlabs/axelix.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agent_skills/test-reviewer .claude/skills/test-reviewer && 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 "test-reviewer" agent skill from https://github.com/axelixlabs/axelix/tree/master/.agent_skills/test-reviewer into .claude/skills/test-reviewer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-reviewer", 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/axelixlabs/axelix/tree/master/.agent_skills/test-reviewerType 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 axelixlabs/axelix --skill test-reviewer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install axelixlabs/axelix test-reviewer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/axelixlabs/axelix.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agent_skills/test-reviewer .agents/skills/test-reviewer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "test-reviewer" agent skill from https://github.com/axelixlabs/axelix/tree/master/.agent_skills/test-reviewer into .agents/skills/test-reviewer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-reviewer", 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 axelixlabs/axelix --skill test-reviewer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install axelixlabs/axelix test-reviewer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/axelixlabs/axelix.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agent_skills/test-reviewer .cursor/skills/test-reviewer && 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 "test-reviewer" agent skill from https://github.com/axelixlabs/axelix/tree/master/.agent_skills/test-reviewer into .cursor/skills/test-reviewer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-reviewer", 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/axelixlabs/axelix.git --path .agent_skills/test-reviewer--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 axelixlabs/axelix --skill test-reviewer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install axelixlabs/axelix test-reviewer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/axelixlabs/axelix.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agent_skills/test-reviewer .gemini/skills/test-reviewer && 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 "test-reviewer" agent skill from https://github.com/axelixlabs/axelix/tree/master/.agent_skills/test-reviewer into .gemini/skills/test-reviewer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-reviewer", 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 axelixlabs/axelix test-reviewerInstalls 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 axelixlabs/axelix --skill test-reviewer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/axelixlabs/axelix.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agent_skills/test-reviewer .github/skills/test-reviewer && 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 "test-reviewer" agent skill from https://github.com/axelixlabs/axelix/tree/master/.agent_skills/test-reviewer into .github/skills/test-reviewer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-reviewer", 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 axelixlabs/axelix --skill test-reviewer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install axelixlabs/axelix test-reviewer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/axelixlabs/axelix.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agent_skills/test-reviewer .opencode/skills/test-reviewer && 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 "test-reviewer" agent skill from https://github.com/axelixlabs/axelix/tree/master/.agent_skills/test-reviewer into .opencode/skills/test-reviewer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-reviewer", 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.
test-reviewerReviews test code in GitHub pull requests for isolation, public-API contract coverage, AAA structure, and correct exception assertions.
Test Reviewer is an agent skill from axelixlabs/axelix. Reviews test code in GitHub pull requests for isolation, public-API contract coverage, AAA structure, and correct exception assertions. Use whenever reviewing a PR that adds, modifies, or deletes tests (Java, Kotlin, TypeScript, JavaScript), when the user asks to review tests or test quality, when evaluating whether test changes are merge-ready, or when commenting on PR test coverage — even if the user only says "review this PR" and the diff includes test files.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering Android development, Test coverage and Pull requests. It works with Java, Kotlin, GitHub and JavaScript. The repository describes itself as: The source code of Axelix - a Delta Force for your Spring Boot ecosystem. The licence is LGPL-3.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1372f71. 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.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
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.
Test Reviewer loads about 3.2k tokens when it runs. Until then it costs about 120 tokens; SKILL.md has 1,332 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 axelixlabs/axelix at commit 1372f71, republished under its LGPL-3.0 licence (© axelixlabs). 1,332 words, ~3,210 tokens.
.claude/skills/test-reviewer/SKILL.md (or your agent's skills folder).Guide for AI agents reviewing test changes in GitHub pull requests for the Axelix monorepo (master/, sbs/, common/, front-end/).
Apply this skill whenever a PR creates, modifies, or deletes test files — including when test changes are a small part of a larger PR.
*Test.java, *Test.kt, *.test.ts, *.test.tsx, *.spec.ts, Cypress specs, or similar.If the PR has no test changes, do not apply this skill unless the user explicitly asks you to evaluate missing test coverage for new production code.
git diff / PR files API).public methods on interfaces or classes; prefer interface Javadoc as the contract source.blocked-by-ai-reviewer label and post one brief PR comment outlining why (see Blocking a PR).Tests must be isolated. Test A must not in any way possible depend on the data/outcome of test B. Every test must fully clean up after itself the changes it potentially made:
If the test does not clean that up — that is a bug and it must be addressed. We cannot merge such PR.
Look for:
@Transactional rollback, @DirtiesContext used as a crutch, no afterEach/@AfterEach cleanup).@Order, implicit reliance on execution sequence).Acceptable patterns: @BeforeEach / @AfterEach (or JUnit 5 equivalents) that reset state; transactional tests that roll back; fresh mocks per test; dedicated test containers with per-test schema/data setup.
The public API is the API that is:
public keyword and it ideally present on the interface and has a javadocDo not test the private/internal methods — these are the details of implementation. Good test just tests the contract. The contract is:
And so on.
Example — interface contract:
public interface AuthorityResolver {
/**
* Resolves the required {@link Authority} for the given request relative path.
*
* @param relativeRequestPath the relative request path with prefix already split. E.g. {@code /axelix-beans}
* is correct, {@code /actuator/axelix-beans} is not, {@code /beans/feed} is correct,
* {@code /api/external/beans/feed} is not.
* @param httpMethod the HTTP method (e.g. {@link HttpMethod#GET}).
*
* @return an {@link Optional} containing the required {@link Authority},
* or {@link Optional#empty()} if no authority is associated with the relative request path
*/
Optional<Authority> resolve(String relativeRequestPath, HttpMethod httpMethod);
}public class CachingAuthorityResolver implements AuthorityResolver {
private final AuthorityResolver delegate;
/**
* Resolves the required {@link Authority} for the given request relative path, possibly from cache
* if already resolved. If not - we just hit the delegate.
*/
public Optional<Authority> resolve(String relativeRequestPath, HttpMethod httpMethod) {
// implementation
}
}What we should test is:
Flag as 🔴 when:
@VisibleForTesting solely to assert internals.Flag as 🟡 when:
Tests should have clear stages: given, when, then. Patterns like
or any other duplications or permutations are bad. The golden rule is AAA — Arrange, Act, Assert. We never do things like Act, Assert, Act, Assert and so on. If we have to do that — this must be a separate test case. It must not be a single test case.
Required: One // given., one // when., one // then. per test method (Axelix convention from AGENTS.md).
Flag as 🔴 when: Multiple act/assert cycles in one test; missing stage comments; several scenarios packed into one @Test.
Acceptable: Parameterized tests (@ParameterizedTest) where each invocation is a single AAA scenario.
Tests must be present for all cases — both positive and negative. Most of the time both negative and positive cases can be derived from the contract (like by reading javadoc).
Example — derive cases from Javadoc:
public interface JwtDecoderService {
/**
* Parses the given JWT token and converts it into a {@link User}.
*
* @param token the JWT token to decode
* @return the reconstructed {@link User}
* @throws ExpiredJwtTokenException if the JWT token has expired
* @throws InvalidJwtTokenException if the JWT token is invalid or tampered with
* @throws JwtParsingException if the token cannot be parsed or contains insufficient data
*/
PasswordlessUser decodeTokenToUser(String token)
throws ExpiredJwtTokenException, InvalidJwtTokenException, JwtParsingException;
}We should not only test the successful user decoding from the token, but we should test the cases when we got the expired JWT, the JWS is not valid, or JWT cannot be parsed at all. These are negative cases and they absolutely must be present along with the "happy path".
Workflow: Build a contract checklist (inputs, success outputs, each documented exception, boundary values). Mark each item covered / missing.
Flag as 🔴 when: Documented failure modes or edge cases have no test.
Flag as 🟡 when: Coverage is plausible but contract checklist was not obvious from test names — suggest renaming or a missing-case comment in the PR.
The exception's error textual message is never a part of the contract. Some "errorCode" very well might be, but textual descriptive message — never. Thus, it should never be verified in tests as it is not the part of the contract.
For example, in the JwtDecoderService's case, checking for the exception's message in the test, whether this message contains something is bad. The message of the exception is not the part of the exception's contract. The nominal type IS the part of the exception's contract, but the message is not.
Assert: assertThrows(ExpiredJwtTokenException.class, ...) or assertThatThrownBy(...).isInstanceOf(...).
Do not assert: hasMessage, hasMessageContaining, expectErrorMessage, snapshot of exception text, unless the contract explicitly documents a stable machine-readable code (not prose).
Flag as 🔴 when: Tests assert exception message strings or human-readable descriptions.
| Level | Meaning | Merge |
|---|---|---|
| 🔴 Blocking | Violates isolation, tests internals, broken AAA, missing contract cases, or asserts exception messages | Do not approve until fixed |
| 🟡 Suggestion | Style, naming, optional implementation-guarantee coverage, clearer arrange setup | Approve with comments optional |
| 🟢 Note | Minor polish, unrelated to standards | Informational |
Any 🔴 finding means: we cannot merge such PR (for test-related defects).
When the review has one or more 🔴 blocking findings, take both actions on the PR:
blocked-by-ai-reviewer:Example:
## Test review — blocked
This PR cannot be merged until these blocking test issues are fixed:
- [isolation] `FooTest.bar` — shared DB state not cleaned up between tests
- [AAA] `BazTest.qux` — multiple act/assert cycles in one test
- [exception message] `QuxTest.fail` — asserts message text instead of exception type onlyDo not add the label or post a blocking comment when there are only 🟡 suggestions or 🟢 notes.
For each public entry point under test:
For REST or integration tests, the contract is the HTTP API (status codes, response body shape, auth behavior) — same rules apply.
@Nested inner classes when multiple groups of related tests exist for the same API; avoid a single @Nested for only one category.<SourceName>Test in the same Gradle/npm module as the source.var when the type is not obvious from the right-hand side (Java style guide in AGENTS.md).Use this structure in PR review comments or summary:
## Test review
**Scope:** [files / APIs reviewed]
### Contract coverage
| Case | Status |
|------|--------|
| [happy path / exception / edge] | ✅ covered in `FileTest.method` / ❌ missing |
### Findings
#### 🔴 Blocking
- **[file:line]** — [isolation | internal API | AAA | missing case | exception message] — [what's wrong] — [what to do]
#### 🟡 Suggestions
- **[file:line]** — [brief suggestion]
### Verdict
**[Approve tests / Request changes — N blocking issue(s)]**When the verdict is Request changes (any 🔴 findings), also apply Blocking a PR: add blocked-by-ai-reviewer and post the single brief blocking comment.
For inline GitHub comments on specific lines, one finding per comment is fine; the blocking PR comment must still be one summary message only. Cite the test method and link the production contract (interface Javadoc or export).
Copy and complete when reviewing:
- [ ] All changed tests are isolated (DB + shared state cleaned per test)
- [ ] Only public/exported API is exercised; no private/internal testing
- [ ] Each test: single given → when → then (one act, one assert phase)
- [ ] Positive + negative cases derived from contract are present
- [ ] Exceptions asserted by type only (no message text assertions)
- [ ] Implementation-declared guarantees (e.g. caching) covered when applicable© axelixlabs, LGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agent_skills/test-reviewer of axelixlabs/axelix.
Open the folder on GitHubat commit 1372f71
Test Reviewer 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 |
|---|---|---|---|---|---|---|
| Test Reviewer this skillaxelixlabs/axelix | 148 | — | ~3.2k | Automated safety check: Pass | LGPL-3.0 | |
| Corvus Java Evaluatorcorvus-dotnet/Corvus.JsonSchema | 200 | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Supercovsupercorp-ai/supercov | 152 | 1 repos | ~415 | Automated safety check: Pass | MIT | |
| Test Smell Detectionmicrosoft/testfx | 1k | 2 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Java TestingHoangNguyen0403/agent-skills-standard | 572 | — | ~1k | Automated safety check: Pass | MIT | |
| Code Reviewerjewbetcha/opentrace | 116 | 2 repos | ~1.1k | Automated safety check: Notes | MIT |
corvus-dotnet/Corvus.JsonSchema
Work on the Java port of the V5 standalone schema evaluator (src-java/corvus-json-schema, Maven artifact io.github.corvus-dotnet:corvus-json-schema): loader, compiler, the ASM bytecode generator…
supercorp-ai/supercov
Measures test coverage and code quality in a repository with the supercov CLI, and turns what it finds into small, focused tests or fixes.
microsoft/testfx
Audits existing tests in any language using formal, research-backed test smell names and the testsmells.org 19-smell academic taxonomy.
HoangNguyen0403/agent-skills-standard
Testing standards using JUnit 5, AssertJ, Mockito, Cucumber, and Spring Boot integration tests for Java.
jewbetcha/opentrace
Comprehensive code review skill for TypeScript, JavaScript, Python, Swift, Kotlin, Go.
QwenLM/qwen-code
Answers questions about code structure, history, bugs and PR risk using a CodeScope knowledge graph and semantic index built from the repository.
axelixlabs/axelix
Review configuration property changes in the Axelix project for breaking changes and migration-policy compliance.
axelixlabs/axelix
Refine and triage GitHub backlog by finding open issues that are stale, obsolete, or resolved by another path.
axelixlabs/axelix
Pick open GitHub issues in the Axelix monorepo that are suitable for unpaid volunteer contributors working in their spare time.
axelixlabs/axelix
Prepare an Axelix minor lockstep release — the pre-release housekeeping changes, a hand-editable release-notes draft, and the post-release bump to the next -SNAPSHOT.
axelixlabs/axelix
Create batched Dependabot-style pull requests for GitHub security findings in axelixlabs/axelix, grouped by dependency surface such as master/front-end, master/build.gradle.kts, or starter Gradle…
axelixlabs/axelix
Reviews changes in sbs/starter-domain for technology-agnostic domain logic, forbidden production dependencies, and Java 11+ compatibility.
Categories
Reviews test code in GitHub pull requests for isolation, public-API contract coverage, AAA structure, and correct exception assertions. Test Reviewer is an agent skill from axelixlabs/axelix. Reviews test code in GitHub pull requests for isolation, public-API contract coverage, AAA structure, and correct exception assertions.
Test Reviewer fits situations like: reviewing a PR that adds; deletes tests (Java; the user asks to review tests; evaluating whether test changes are merge-ready.
Run `npx skills add axelixlabs/axelix --skill test-reviewer -a claude-code`. Or copy the skill folder (.agent_skills/test-reviewer in axelixlabs/axelix) into .claude/skills/test-reviewer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add axelixlabs/axelix --skill test-reviewer -a codex`. Or copy the skill folder (.agent_skills/test-reviewer in axelixlabs/axelix) into .agents/skills/test-reviewer 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 axelixlabs/axelix --skill test-reviewer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-reviewer, .gemini/skills/test-reviewer, .github/skills/test-reviewer and .opencode/skills/test-reviewer in your project.
Going by SKILL.md and its folder, Test Reviewer needs the command-line tools its instructions call (git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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.
Test Reviewer is published under the LGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k 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 Test Reviewer: Corvus Java Evaluator (corvus-dotnet/Corvus.JsonSchema, 200 stars), Supercov (supercorp-ai/supercov, 152 stars), Test Smell Detection (microsoft/testfx, 1k stars) and Java Testing (HoangNguyen0403/agent-skills-standard, 572 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
axelixlabs (a GitHub organization) maintains it in axelixlabs/axelix, which has 148 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 10, 2026.
Source: axelixlabs/axelix on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.