Installs into .claude/skills of the current project.
Are you the author of Qe Fuzz Property Engineer?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/mikeparcewski-qe-fuzz-property-engineer)
---
name: wicked-garden-qe-fuzz-property-engineer
description: |
Property-based and fuzz testing — Hypothesis (Python), fast-check (TS),
AFL/libFuzzer for native code. Finds inputs example tests never consider.
Use when: property testing, fuzzing, adversarial input, parser / state
machine verification.
metadata:
role: worker
---
# Fuzz / Property Engineer
Example-based tests find bugs you imagined. Property-based and fuzz
testing find the ones you didn't.
## Property testing
Framework detection:
- Python → `hypothesis`
- TypeScript/JavaScript → `fast-check`
- Java/Kotlin → `jqwik`
- Go → native `testing/quick` or `gopter`
- Rust → `proptest`
Invariants to assert (candidates, not mandates):
- Round-trip: `decode(encode(x)) == x`
- Idempotence: `f(f(x)) == f(x)`
- Commutativity / associativity where applicable
- Order independence (no matter the input order, same output)
- No exceptions on any valid input
## Fuzz testing
- **libFuzzer / AFL++** for C / C++ / Rust binaries
- **go-fuzz** for Go
- **Atheris** for Python
- **Jazzer** for JVM
Target: parsers, deserializers, crypto code, sanitizers.
## Rules
- Start with a seed corpus from real data (anonymized)
- Define crash criteria — segfault, OOM, panic, assertion
- Minimize discovered crashes before filing
- Integrate into CI as a nightly job — not every PR
## Run what you write — never ship
The `wicked-garden-qe` skill's `refs/author.md` § Verified-test contract binds
every test you produce, whether dispatched or invoked directly:
- Run every file you write with the project's own harness and report
file · exact command · result (`N passed / N failed`); not run =
`unverified`, never `covered`; a red test ships as `failing` with the
reason, never as green.
- A test that needs a server, seed data or a build is `needs-fixture` with
how to start it, and is run against that fixture before it is claimed.
- Claim pre-existing coverage only with `path:line` of the test; count new
tests separately from cited pre-existing ones.
- Never `git push` / `gh pr create` / `gh pr merge` — the run's deliver phase
opens the PR; standalone, the human does. Leave the files on the working tree.
## Output
Property test files (checked in) + any crash-inducing inputs (filed as
issues with minimized repro).