agentleFS
gregwebsgregwebs/skills-sdlc/skills/verify/SKILL.md

verify

Skill20 starsChanged 44 days agoMITView on GitHub

Verify software by intentional testing.

188 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use instinct-export, instinct-import and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • TheKREATORSSkill

    instinct-export

    Export instincts from project/global scope to a file

    Also in 3 projects that use this

  • TheKREATORSSkill

    instinct-import

    Import instincts from file or URL into project/global scope

    Also in 3 projects that use this

  • AviadPSkill

    risk-assess

    Assess the risk and blast radius of a proposed code change before implementing it. Evaluates CI impact, framework-wide vs localized scope, rollback path, and identifies blindspots. Use when user says "what's the risk", "is this safe", "assess the impact", "risk assess", "blast radius", or before applying framework-wide or CI-affecting changes. Do NOT use for code quality review (use code-quality) or plan validation (use design-validator).

    Also in 3 projects that use this

  • diego-tobalinaSkill

    build-fix

    Fix build and compilation errors systematically. Run when build fails.

    Also in 6 projects that use this

  • AaravChadhaSkill

    secure

    Security review with a confidence gate - a finding exists only with a concrete exploit scenario and a high/medium/low confidence rating; everything else goes to a worth-hardening list, never inflated. Sweeps five surfaces: auth gates, secrets hygiene, injection and unsafe sinks, unsafe deserialization/crypto/transport, and LLM tool-use trust boundaries. Reports only, never fixes. Use when the user asks for a security review or to check vulnerabilities, secrets, or auth.

    Also in 3 projects that use this

  • ArvorCoSkill

    specify

    Create feature specification from natural language description. Use when starting a new feature or creating a spec. Triggers on: create spec, specify feature, new feature spec.

    Also in 10 projects that use this

  • +1 more from TheKREATORS

The file

Show its rules and text

We split this skill into the rules it gives an agent

19 rules. 0 are common, 19 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 167 edited versions we read keep these.

  • 19

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If altering code reduces the amount of verification needed or makes it easier, that is likely a worthwhile change to make.

    line 9
  2. Distinctive:

    Use strong typing to reduce edge cases.

    line 10
  3. Distinctive:

    Treat implementation and verification as separate reasoning tasks.

    line 13
  4. Distinctive:

    When deciding whether to add a test, ask:

    line 18
  5. Distinctive:

    When deciding whether testing is sufficient, ask:

    line 20
  6. Distinctive:

    Avoid unnecessary mocks, brittle implementation coupling, arbitrary sleeps, order dependencies.

    line 24
  7. Distinctive:

    Write seeds for creating data that is needed for testing and avoid duplicated setup.

    line 25
  8. Distinctive:

    Run progressively broader verification as more code is written, ending with e2e.

    line 29
  9. Distinctive:

    Every "not verified" or "not run" line must point to existing documentation or name the exact command you attempted and the exact error you …

    line 53
  10. Distinctive:

    Do not claim that the verification cannot be performed: there may be a way to get unblocked.

    line 56
  11. Distinctive:

    Before writing tests, identify:

    line 62
  12. Distinctive:

    Run relevant existing tests.

    line 74
  13. Distinctive:

    Look for counterexamples to code by probing:

    line 78
  14. Distinctive:

    When randomizing, lean towards inputs that will explore complicated state and code paths.

    line 96
  15. Distinctive:

    Use when behavior can be expressed as general invariants across many inputs.

    line 107
  16. Distinctive:

    Use when a trustworthy alternative implementation or oracle exists.

    line 127
  17. Distinctive:

    Consider fuzzing for code that processes:

    line 141
  18. Distinctive:

    Use discovered failures to create minimized permanent regression tests.

    line 152
  19. Distinctive:

    Add a test when the survivor represents a plausible defect that the test suite should detect.

    line 171

“Common” is measured: kept by at least 6 in 10 of the 167 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Core Principles

  1. Good Code is easy to verify and needs fewer tests If altering code reduces the amount of verification needed or makes it easier, that is likely a worthwhile change to make. Use strong typing to reduce edge cases.
  2. Verify behavior, not implementation details Treat implementation and verification as separate reasoning tasks. Derive expectations from requirements, contracts, documentation, and domain rules rather than the implementation.
  3. Optimize for fault detection Coverage is useful for identifying untested areas. It is not a measure of test quality. When deciding whether to add a test, ask:

    What plausible defect would this test detect that the existing tests would not? When deciding whether testing is sufficient, ask: If this implementation is subtly wrong, how likely is the current verification strategy to expose it?

  4. Keep tests deterministic, understandable, and maintainable Avoid unnecessary mocks, brittle implementation coupling, arbitrary sleeps, order dependencies. Write seeds for creating data that is needed for testing and avoid duplicated setup.
  5. Verify while coding Code should be verified immediately after writing it (or sooner). Run progressively broader verification as more code is written, ending with e2e. For bug fixes, strongly prefer reproducing with a regression test before fixing.

Workflow

  1. Develop Automated Tests See Test writing Process
  2. Perform manual verifications e2e tests in particular may not be worth automating.
  3. Perform an adversarial review Are the tests meeting these outlined standards and process? Is the specification/plan fully verified?
  4. Final Report Briefly report:

    • behavior that was verified
    • verification commands or checks run
    • important tests added or changed
    • stronger testing techniques used
    • remaining risks or under tested areas
    • Manual verifications or automated tests not ran on the CI must document how they were ran (pointing to other docs is good) and their result.

    Every "not verified" or "not run" line must point to existing documentation or name the exact command you attempted and the exact error you got as

    BLOCKED: <command> -> <error> Do not claim that the verification cannot be performed: there may be a way to get unblocked.

Test writing Process

  1. Understand the behavior Before writing tests, identify:

    • intended behavior and public contracts
    • important business rules
    • boundaries and edge cases
    • failure paths
    • state transitions
    • integration boundaries
    • existing test conventions

    Derive expectations from requirements, contracts, documentation, and domain rules rather than the implementation.

  2. Establish a Baseline Run relevant existing tests. Note any pre-existing failures and use coverage, when available, to identify potentially untested areas.
  3. Look for high-value test areas Look for counterexamples to code by probing:
    • changed or important behavior
    • boundary conditions
    • error handling
    • important branches and state transitions
    • regressions
    • integration behavior that could realistically fail
  4. Look for high-defect areas Think about areas likely to have subtle bugs before implementing; for each, state likely mistakes and plausible alternative interpretations, then come up with a check where the results differ (prefer asymmetric / boundary examples on both sides of the boundary).
  5. Choose appropriate techniques Unit test examples are not the only way to verify.
    • Leverage types and static analysis (linting or other tools) first.
    • property-based testing for invariants and large input spaces
    • differential testing when a trustworthy alternative implementation or oracle exists
    • fuzzing for parsers, protocols, serialization, untrusted input, and similar boundaries
    • mutation testing for important logic or subtle defects When randomizing, lean towards inputs that will explore complicated state and code paths.
  6. Review Inputs and Outputs For non-trivial logic, actively try to construct an input that breaks it. For high risk areas, independently re-derive the result without context on production code and compare.

Advanced Testing Methods

Property-based tests and proofs

Use when behavior can be expressed as general invariants across many inputs.

Look especially for:

  • round trips decode(encode(x)) == x
  • idempotence normalize(normalize(x)) == normalize(x)
  • preservation: sorting preserves the input elements
  • algebraic relationships
  • monotonicity
  • bounds
  • equivalence between transformations
  • invariants across state transitions

Differential tests

Use when a trustworthy alternative implementation or oracle exists.

Examples:

  • old implementation vs. replacement
  • reference implementation vs. optimized implementation
  • two independent libraries implementing the same specification
  • server calculation vs. client calculation
  • legacy parser vs. rewritten parser

Generate or collect diverse inputs and investigate disagreements.

Fuzz testing

Consider fuzzing for code that processes:

  • parsers
  • file formats
  • network input
  • protocol messages
  • untrusted text or binary data
  • serialization
  • compilers/interpreters
  • security-sensitive boundaries

Use discovered failures to create minimized permanent regression tests.

Mutation testing

Use for

  • tests moved to a new test seam- this can often produce tests that don't fail
  • important logic when ordinary test results and coverage do not provide enough confidence.

Mutation testing is particularly useful for determining whether tests would detect subtle changes to:

  • conditions
  • comparisons
  • arithmetic
  • boolean expressions
  • return values
  • control flow

Investigate surviving mutants.

Add a test when the survivor represents a plausible defect that the test suite should detect.

Equivalent or irrelevant mutants do not require tests.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.