skills/tests-adversarial/SKILL.md
Write adversarial tests that intentionally stress failure paths. Use when hardening error handling, stress-testing assumptions, validating boundary behavior, or hunting silent failures.
npx skillsauth add outlinedriven/odin-codex-plugin tests-adversarialInstall 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.
Every line of code makes assumptions. Your job is to find them and violate them — systematically, not randomly. The goal is distrust, not coverage. A passing test suite proves nothing if it only tests the happy path.
For every function or module under test, ask these six questions:
Data:
State:
Environment:
Protocol:
test_rejects_negative_quantity, test_handles_empty_result_set, test_recovers_from_mid_write_crash.-race, Miri, or your language's equivalent. Tests that pass without sanitizers may hide undefined behavior.| Gate | Condition | |------|-----------| | Assumptions documented | Every implicit assumption in the code under test is written down | | Violations tested | Each documented assumption has at least one test that violates it | | Errors are meaningful | Every failure path produces a descriptive error, not silence or generic message | | Sanitizers pass | All tests pass under sanitizers / race detectors with zero warnings |
| Code | Meaning | |------|---------| | 0 | All assumptions identified, violated, and handled — error paths produce meaningful output | | 1 | Untested assumptions remain — some assumptions lack violation tests | | 2 | Silent failures found — code swallows errors or produces wrong output without signaling | | 3 | Crashes or panics discovered — unhandled exceptions, segfaults, or undefined behavior found |
testing
ODIN's compress-operations dispatcher under the Compressor/Extender role. Invoke on "tidy", "clean up", "tidy this file/memory/workspace/git/docs", or when active context (current file, diff, stack, memory directory) has structural rot to resolve before touching behavior. Detects target domain from context and routes to the sibling skill. Requires explicit target or clear active-context signal — do not invoke speculatively.
development
Cross-domain taste skill — apply distinctive judgment to any artifact (prose, code, design, decisions) instead of converging to AI defaults. Two modes — `audit` (judge work against the two-sided charter and portable anchors) and `anchor` (load register before producing). Auto-detects by phrasing; override via `/taste audit | anchor`. Trigger on "is this slop?", "overkill?", "elegant?", "taste-test this".
tools
One-shot bootstrap of strict-mode tooling per ecosystem plus per-task GOALS.md scaffolding so an agentic loop can self-verify. Writes typechecker/linter/schema-validator config for TS (strict + noUncheckedIndexedAccess + exactOptionalPropertyTypes), Python (Pyright strict, Ruff strict), Rust (Clippy deny-correctness), Go (golangci-lint with staticcheck), OCaml (dune --release); establishes `.agent-tasks/<id>/GOALS.md` per-task convention distinct from project-stable AGENTS.md. C++/Java/Kotlin and framework specifics (Spring Boot, Nest, React-strict) are out of scope. Trigger on new project bootstrap, agentic-task setup, "make this self-verifying", "set the loop's goal", "scaffold goals for this issue". Pairs with `llm-self-loop` runtime.
tools
Install git pre-commit hooks via the project's hook tool — Husky+lint-staged (JS), pre-commit (Python/OCaml), lefthook (Go), cargo-husky (Rust). Use when the user wants commit-time formatting, linting, type-checking, or test gates. Detects ecosystem first.