dev-team/skills/dev-property-testing/SKILL.md
Gate 5 of development cycle - ensures property-based tests exist to verify domain invariants hold for all randomly generated inputs.
npx skillsauth add lerianstudio/ring ring:dev-property-testingInstall 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.
Ensure domain logic has property-based tests to verify invariants hold for all randomly generated inputs.
Core principle: Property tests verify universal truths about your domain. If "balance is never negative" is a rule, test it with thousands of random inputs.
<block_condition>
This skill ORCHESTRATES. QA Analyst Agent (property mode) EXECUTES.
| Who | Responsibility | |-----|----------------| | This Skill | Gather requirements, dispatch agent, track iterations | | QA Analyst Agent | Write property tests, run quick.Check, report counterexamples |
MANDATORY: Load testing-property.md standards via WebFetch.
<fetch_required> https://raw.githubusercontent.com/LerianStudio/ring/main/dev-team/docs/standards/golang/testing-property.md </fetch_required>
REQUIRED INPUT:
- unit_id: [task/subtask being tested]
- implementation_files: [files from Gate 0]
- language: [go]
OPTIONAL INPUT:
- domain_invariants: [list of invariants to verify]
- gate4_handoff: [full Gate 4 output]
if any REQUIRED input is missing:
→ STOP and report: "Missing required input: [field]"
Task tool:
subagent_type: "ring:qa-analyst"
prompt: |
**MODE:** PROPERTY-BASED TESTING (Gate 5)
**Standards:** Load testing-property.md
**Input:**
- Unit ID: {unit_id}
- Implementation Files: {implementation_files}
- Language: {language}
- Domain Invariants: {domain_invariants}
**Requirements:**
1. Identify domain invariants from code
2. Create property functions (TestProperty_{Subject}_{Property} naming)
3. Use testing/quick.Check for verification
4. Report any counterexamples found
**Output Sections Required:**
- ## Property Testing Summary
- ## Properties Report
- ## Handoff to Next Gate
Parse agent output:
if "Status: PASS" in output:
→ Gate 5 PASSED
→ Return success with metrics
if "Status: FAIL" in output:
→ Dispatch fix to implementation agent
→ Re-run property tests (max 3 iterations)
→ If still failing: ESCALATE to user
## Property Testing Summary
**Status:** {PASS|FAIL}
**Properties Tested:** {count}
**Properties Passed:** {count}
**Counterexamples Found:** {count}
## Properties Report
| Property | Subject | Status |
|----------|---------|--------|
| {property_name} | {subject} | {PASS|FAIL} |
## Handoff to Next Gate
- Ready for Gate 6 (Integration Testing): {YES|NO}
- Iterations: {count}
| Domain | Example Properties | |--------|-------------------| | Money/Currency | Amount never negative, currency always valid, addition commutative | | User/Account | Email always valid format, password meets policy, status transitions valid | | Order/Transaction | Total equals sum of items, quantity always positive, state machine valid | | Date/Time | Start before end, duration always positive, timezone valid |
| Severity | Criteria | Examples | |----------|----------|----------| | CRITICAL | Counterexample found, invariant violated | quick.Check finds input that breaks property | | HIGH | No property tests, missing quick.Check | Zero TestProperty_ functions, no testing/quick usage | | MEDIUM | Incomplete properties, naming issues | Missing domain invariants, non-standard names | | LOW | Documentation, optimization | Missing property descriptions, generator tuning |
Report all severities. CRITICAL = immediate fix (invariant broken). HIGH = fix before gate pass. MEDIUM = fix in iteration. LOW = document.
| Rationalization | Why It's WRONG | Required Action | |-----------------|----------------|-----------------| | "Unit tests verify logic" | Unit tests verify SPECIFIC cases. Properties verify ALL cases. | Write property tests | | "No domain invariants" | Every domain has rules. "ID is unique", "amount > 0", etc. | Identify and test invariants | | "Too abstract" | Properties are concrete: "user.age >= 0 for all users". | Write property tests | | "quick.Check is slow" | Milliseconds to find bugs that would take hours to discover. | Write property tests |
development
Analyzes a Go service using lib-commons v2/v3 and generates a visual migration report showing every change needed to upgrade to lib-commons v4. Produces an interactive HTML page (via ring:visualize) and optionally generates refactoring tasks for ring:dev-cycle.
documentation
Patterns and structure for writing functional documentation including guides, conceptual explanations, tutorials, and best practices documentation.
development
Patterns and structure for writing API reference documentation including endpoint descriptions, request/response schemas, and error documentation.
documentation
Voice and tone guidelines for technical documentation. Ensures consistent, clear, and human writing across all documentation.