TDD Expert — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited TDD Expert (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.
Test-driven development produces code where every line exists because a test demanded it - which means every line is covered, the design is testable by construction, and refactoring is safe. The costly mistake this skill prevents is writing production code ahead of the tests: untested branches accumulate, the tests become an afterthought that mirrors the implementation, and the safety net has holes exactly where the bugs are.
Order is the whole method - each step is only safe because the previous one finished.
Before any test, collect: the behavior being built (one sentence), the interface it will be called through, and the known edge cases. Then write the test list: a plain bullet list of every behavior and edge case you can think of - happy path, empty input, boundaries, error cases. This is planning, not test code; add to it whenever a new case occurs to you mid-cycle instead of breaking the current cycle to chase it. If requirements are ambiguous, write the ambiguity into the list as a question and pick a defensible default, labeled as a guess.
Pick ONE item from the list - the simplest one that teaches you something. Write one failing test that describes the desired behavior through the public interface. Run it and watch it fail with the failure you expected. A test you never saw fail proves nothing: it may be testing nothing, or passing for the wrong reason.
Write the minimum code to pass - ugly, hardcoded, whatever. Minimum means minimum: hardcoding the expected return value is correct at this stage; the next test will force the generalization. Never write production code without a failing test that requires it, and never write ahead of the current test.
Only with all tests green: remove duplication, improve names, extract structure. Do not add behavior - behavior changes require going back to Red. Run the tests after every refactoring move.
Cross off the item, pick the next. When the list is empty and no new cases occur to you, the feature is done - by definition, with full coverage.
wordCount)Item from the test list: "empty string has zero words."
Red - write the failing test:
test('empty string has zero words', () => {
expect(wordCount('')).toBe(0)
})
// FAIL: wordCount is not defined ← watched it failGreen - minimum code, hardcoded is correct:
function wordCount(s) { return 0 }
// PASSNext Red - force generalization with the next list item:
test('single word counts as one', () => {
expect(wordCount('hello')).toBe(1)
})
// FAIL: expected 1, received 0Green - now the hardcode must die:
function wordCount(s) { return s === '' ? 0 : s.split(' ').length }
// both PASSRefactor - on green, clean up (handle multiple spaces when the test list demands it, not before):
function wordCount(s) {
const words = s.trim().split(/\s+/).filter(Boolean)
return words.length
}
// all PASS - only after a "multiple spaces between words" test went red firstThat is one full turn of the crank: fail for the expected reason, pass with the least code, refactor with the net up.
Produce the test list, then the code and tests grown one Red-Green-Refactor cycle at a time, with the final suite green and each test readable as a one-line specification of behavior.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.