running-tdd-cycles — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited running-tdd-cycles (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
For each new piece of behaviour:
1. Extract <requirement> — the smallest piece of logic that adds value.
2. RED → write ONE failing test that pins down <requirement>.
3. GREEN → write the minimal code that makes it pass.
4. REFACTOR → improve structure with the test as a safety net.
5. COMMIT → one logical change per commit (defer to committing-changes).
6. Repeat 2–5 until the task is done.
7. REVIEW → defer to reviewing-changes for the final pass.Always one requirement per cycle. If the cycle feels big, the requirement was too big — split it.
test_decodesV4Quote that loads a V5 fixture is silently broken: it passes but pins the wrong invariant, and the regression lands in the wrong place. Common causes: renamed a test and forgot to update the fixture; copy-pasted a fuzzy assertion from a sibling test without re-targeting it.should_X_when_Y naming where the framework allows it.null, empty collections, boundary values, concurrent access, errors) get their own RED-GREEN-REFACTOR cycles.hypothesis (Python), fast-check (JS/TS), or quickcheck (Haskell/Rust) for invariants. Example-based tests are for specific edge cases or documentation. See reference/property-based-testing.md.tests/strategies.py (or the project equivalent) for shared fixtures/strategies. Add new ones back to the shared module.pytest.mark.parametrize for multiple cases, hypothesis for properties.vi.fn() / jest.fn() mocks; @testing-library/* for components; fast-check for properties.t.Run(name, func(t *testing.T) {...}); t.Parallel() where safe.let for lazy fixtures, let! for eager; nested context for branching scenarios.forge test -vvv; parametric fuzz tests via function testFoo(uint256 x); bound(x, min, max) not if-guards. See solidity-conventions.If the discipline breaks: stop, identify the violated phase, revert to the last green state, resume from the right phase, note what went wrong.
End of RED: test exists, test fails, failure message names the missing behaviour, no false positive.
End of GREEN: all tests pass, the change is the minimum that could possibly work, the test wasn't modified, coverage didn't drop.
End of REFACTOR: all tests still pass, complexity (cyclomatic, length) at least no worse, duplication addressed, names readable, performance measured if performance was the goal.
Quick exploration belongs in a gitignored scratch file, not in production code or in the test suite:
test.py (see python-conventions and reference/scratch-testing.md).test.go with //go:build scratch tag (see go-conventions).script/Scratch.s.sol or chisel REPL (see solidity-conventions).Never use inline heredocs (uv run python << EOF, go run -, forge script --via-stdin) — the file pattern keeps history and stays inspectable.
committing-changes — commit after every successful GREEN or REFACTOR phase.reviewing-changes — final pass after the loop ends.python-conventions / go-conventions / solidity-conventions — language-specific test runner setup.engineering-philosophy — Small Steps, Investigate-Don't-Mask, KISS, YAGNI all apply directly.rules/tdd-workflow.md verbatim.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.