Domain Invariant Assertion Skill
Systematically verify that domain invariants are enforced in code and covered by tests. Invariants are properties that must ALWAYS hold regardless of system state.
Trigger Conditions
- •Model struct or enum definitions change
- •Service business logic is modified
- •New financial operations are introduced
- •User invokes with "check invariants" or "domain-invariant-assertion"
Input Contract
- •Required: Path to models and service directories
- •Optional: Path to test files for coverage assessment
Output Contract
- •Inventory of all domain invariants found in the codebase
- •Pass/fail assessment for each invariant's enforcement in code
- •Pass/fail assessment for each invariant's test coverage
- •Missing invariant identification (invariants that SHOULD exist but don't)
Tool Permissions
- •Read: All Go source files, test files, model files
- •Write: None (read-only analysis)
- •Search: Grep for assertion patterns, validation methods, constraint checks
Execution Steps
- •Balance >= 0 (unless overdraft enabled)
- •Transfer amount > 0
- •Transfer source != destination
- •Account status transitions follow state machine
- •Card status transitions follow lifecycle
- •Currency is valid ISO 4217
- •Idempotency key is unique per operation
- •Balance-after = previous_balance +/- amount
- •
Verify code enforcement: For each invariant, find the code path that enforces it. Flag invariants with no enforcement.
- •
Verify test coverage: For each invariant, find property-based tests or unit tests that verify it. Flag invariants with no test coverage.
- •
Report: Produce a table of invariants with enforcement status and test coverage status.
Success Criteria
- •All known domain invariants are enforced in code
- •All known domain invariants have test coverage
- •No code path can bypass an invariant
References
- •
.cursor/rules/111-property-based-testing.mdc