Test Skill Quick Ref: Generate tests, analyze coverage, fill gaps, run TDD loops. Output: passing tests + coverage report in . YOU MUST EXECUTE THIS WORKFLOW. Do not just describe it. Generate real tests, run them, verify they pass, and produce coverage artifacts. Do not output a plan and stop. Modes | Mode | Trigger | What It Does | |------|---------|--------------| | | "generate tests", "write tests", "add tests" | Create tests for existing code | | | "test coverage", "coverage gaps", "missing tests" | Analyze coverage and fill gaps | | | "test strategy", "test architecture" | Recommend tes…

\"\ncheck \"SKILL.md has name: test\" \"grep -q '^name: test' '$SKILL_DIR/SKILL.md'\"\ncheck \"SKILL.md mentions TDD workflow\" \"grep -qi 'tdd' '$SKILL_DIR/SKILL.md'\"\ncheck \"SKILL.md mentions coverage analysis\" \"grep -qi 'coverage' '$SKILL_DIR/SKILL.md'\"\n\necho \"\"; echo \"Results: $PASS passed, $FAIL failed\"\n[ $FAIL -eq 0 ] && exit 0 || exit 1\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":694,"content_sha256":"76edf4607af082da129928955fc6fb59aa2bf50c1fe8fcadef6222ae03017999"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Test Skill","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"Quick Ref:","type":"text","marks":[{"type":"strong"}]},{"text":" Generate tests, analyze coverage, fill gaps, run TDD loops. Output: passing tests + coverage report in ","type":"text"},{"text":".agents/test/","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"paragraph","content":[{"text":"YOU MUST EXECUTE THIS WORKFLOW. Do not just describe it.","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"Generate real tests, run them, verify they pass, and produce coverage artifacts. Do not output a plan and stop.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Modes","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Mode","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Trigger","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"What It Does","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"generate","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"generate tests\", \"write tests\", \"add tests\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Create tests for existing code","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"coverage","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"test coverage\", \"coverage gaps\", \"missing tests\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Analyze coverage and fill gaps","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"strategy","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"test strategy\", \"test architecture\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Recommend test structure and patterns","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"tdd","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"tdd\", \"red green refactor\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Red-green-refactor loop for new features","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"Default mode is ","type":"text"},{"text":"generate","type":"text","marks":[{"type":"code_inline"}]},{"text":" when unspecified. Detect from user intent.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Step 0: Detect Language and Load Standards","type":"text"}]},{"type":"paragraph","content":[{"text":"Scan the project root for language markers. Stop at the first match:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Marker File","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Language","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Test Framework","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Coverage Command","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"go.mod","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Go","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"go test","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"go test -coverprofile=coverage.out ./...","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pyproject.toml","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"setup.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pytest","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pytest --cov --cov-report=term-missing","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"package.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"JS/TS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"jest or vitest","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"npx jest --coverage","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"npx vitest run --coverage","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Cargo.toml","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Rust","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"cargo test","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"cargo tarpaulin --out Lcov","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"Load ","type":"text"},{"text":"/standards","type":"text","marks":[{"type":"code_inline"}]},{"text":" for the detected language. Apply all testing conventions from the standards skill (naming, assertion style, structural rules).","type":"text"}]},{"type":"paragraph","content":[{"text":"Go-specific rules (from project CLAUDE.md):","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test file naming: ","type":"text"},{"text":"\u003csource>_test.go","type":"text","marks":[{"type":"code_inline"}]},{"text":". NEVER ","type":"text"},{"text":"cov*_test.go","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"*_extra_test.go","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test function naming: ","type":"text"},{"text":"Test\u003cUppercase>","type":"text","marks":[{"type":"code_inline"}]},{"text":" (e.g., ","type":"text"},{"text":"TestParseConfig_EmptyInput","type":"text","marks":[{"type":"code_inline"}]},{"text":").","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Prefer table-driven tests for multi-case functions.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"captureStdout","type":"text","marks":[{"type":"code_inline"}]},{"text":" for output functions and assert content.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Python-specific rules:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"pytest","type":"text","marks":[{"type":"code_inline"}]},{"text":" with ","type":"text"},{"text":"conftest.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" for shared fixtures.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"@pytest.mark.parametrize","type":"text","marks":[{"type":"code_inline"}]},{"text":" for multi-case functions.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Type hints on test helpers.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"JS/TS-specific rules:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"describe","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"it","type":"text","marks":[{"type":"code_inline"}]},{"text":" blocks with clear names.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Group by function or module under test.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Mock external services, not internal code.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Step 1: Analyze Existing Test Coverage","type":"text"}]},{"type":"paragraph","content":[{"text":"Run the coverage command for the detected language:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Go\ngo test -coverprofile=coverage.out ./... 2>&1 | tee .agents/test/coverage-raw.txt\ngo tool cover -func=coverage.out > .agents/test/coverage-func.txt\n\n# Python\npytest --cov --cov-report=term-missing --cov-report=json:.agents/test/coverage.json 2>&1 | tee .agents/test/coverage-raw.txt\n\n# JS/TS\nnpx jest --coverage --coverageReporters=text 2>&1 | tee .agents/test/coverage-raw.txt\n\n# Rust\ncargo tarpaulin --out Lcov 2>&1 | tee .agents/test/coverage-raw.txt","type":"text"}]},{"type":"paragraph","content":[{"text":"Parse the output. Build a ranked list of files by coverage percentage (lowest first).","type":"text"}]},{"type":"paragraph","content":[{"text":"If ","type":"text"},{"text":"/complexity","type":"text","marks":[{"type":"code_inline"}]},{"text":" is available, cross-reference: high-complexity + low-coverage = highest priority targets.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Step 2: Identify Gaps","type":"text"}]},{"type":"paragraph","content":[{"text":"From the coverage data, identify:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Untested files","type":"text","marks":[{"type":"strong"}]},{"text":" -- source files with no corresponding test file.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Uncovered functions","type":"text","marks":[{"type":"strong"}]},{"text":" -- exported/public functions with 0% coverage.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Uncovered branches","type":"text","marks":[{"type":"strong"}]},{"text":" -- functions with partial coverage (conditionals, error paths).","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing edge cases","type":"text","marks":[{"type":"strong"}]},{"text":" -- functions that only test the happy path.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Produce a gap list sorted by risk (high complexity + low coverage first):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"File | Coverage | Functions Missing Tests | Risk\n----------------------------|----------|------------------------|------\ninternal/parser/parse.go | 23% | ParseConfig, Validate | HIGH\ninternal/goals/measure.go | 45% | MeasureFitness | MEDIUM\nlib/utils.go | 89% | (edge cases only) | LOW","type":"text"}]},{"type":"paragraph","content":[{"text":"Write gap list to ","type":"text"},{"text":".agents/test/gaps.md","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Step 3: Generate Tests","type":"text"}]},{"type":"paragraph","content":[{"text":"For each gap (highest risk first), generate tests following language-specific patterns.","type":"text"}]},{"type":"paragraph","content":[{"text":"If the target needs a specialized test pattern, load the matching reference before writing tests:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Contract/API/CLI compatibility: ","type":"text"},{"text":"references/conformance-harnesses.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/conformance-harnesses.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Parsers, serializers, and untrusted inputs: ","type":"text"},{"text":"references/fuzzing.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/fuzzing.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Generated files, snapshots, and rendered output: ","type":"text"},{"text":"references/golden-artifacts.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/golden-artifacts.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Metamorphic/invariant-heavy behavior: ","type":"text"},{"text":"references/metamorphic-testing.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/metamorphic-testing.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Golden artifact update review: ","type":"text"},{"text":"references/golden-artifact-strategy.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/golden-artifact-strategy.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Real databases, services, queues, or APIs where mocks would hide failures: ","type":"text"},{"text":"references/real-service-e2e.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/real-service-e2e.md","title":null}}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Go: Table-Driven Tests","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"go"},"content":[{"text":"func TestParseConfig_Variants(t *testing.T) {\n tests := []struct {\n name string\n input string\n want *Config\n wantErr bool\n }{\n {name: \"valid minimal\", input: `name: foo`, want: &Config{Name: \"foo\"}},\n {name: \"empty input\", input: \"\", want: nil, wantErr: true},\n {name: \"invalid yaml\", input: `: bad`, want: nil, wantErr: true},\n }\n for _, tt := range tests {\n t.Run(tt.name, func(t *testing.T) {\n got, err := ParseConfig(tt.input)\n if (err != nil) != tt.wantErr {\n t.Errorf(\"ParseConfig() error = %v, wantErr %v\", err, tt.wantErr)\n return\n }\n if !reflect.DeepEqual(got, tt.want) {\n t.Errorf(\"ParseConfig() = %v, want %v\", got, tt.want)\n }\n })\n }\n}","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Python: Parametrized Tests","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"@pytest.mark.parametrize(\"input_val,expected\", [\n (\"valid\", Config(name=\"valid\")),\n (\"\", None),\n (None, None),\n])\ndef test_parse_config(input_val: str, expected: Config | None) -> None:\n result = parse_config(input_val)\n assert result == expected","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"JS/TS: Describe Blocks","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"typescript"},"content":[{"text":"describe(\"parseConfig\", () => {\n it(\"parses valid input\", () => {\n expect(parseConfig(\"valid\")).toEqual({ name: \"valid\" });\n });\n\n it(\"returns null for empty input\", () => {\n expect(parseConfig(\"\")).toBeNull();\n });\n\n it(\"throws on malformed input\", () => {\n expect(() => parseConfig(\": bad\")).toThrow();\n });\n});","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Generation Rules","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Read the source function first.","type":"text","marks":[{"type":"strong"}]},{"text":" Understand inputs, outputs, error conditions, and branches.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Cover every branch.","type":"text","marks":[{"type":"strong"}]},{"text":" Each ","type":"text"},{"text":"if","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"switch","type":"text","marks":[{"type":"code_inline"}]},{"text":", error return, and edge case gets at least one test case.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Assert exact expected values.","type":"text","marks":[{"type":"strong"}]},{"text":" Use ","type":"text"},{"text":"== expected","type":"text","marks":[{"type":"code_inline"}]},{"text":", not ","type":"text"},{"text":"!= nil","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"!= \"\"","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Name tests descriptively.","type":"text","marks":[{"type":"strong"}]},{"text":" The test name should describe the scenario: ","type":"text"},{"text":"\"empty input returns error\"","type":"text","marks":[{"type":"code_inline"}]},{"text":", not ","type":"text"},{"text":"\"test1\"","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test error paths explicitly.","type":"text","marks":[{"type":"strong"}]},{"text":" Verify error messages or error types, not just that an error occurred.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"One assertion focus per test case.","type":"text","marks":[{"type":"strong"}]},{"text":" Each table row or parametrized case tests one specific behavior.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Step 4: Run Generated Tests","type":"text"}]},{"type":"paragraph","content":[{"text":"After writing each test file, immediately run it:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Go\ngo test -v -run TestParseConfig ./internal/parser/\n\n# Python\npytest -xvs tests/test_parser.py\n\n# JS/TS\nnpx jest --verbose tests/parser.test.ts\n\n# Rust\ncargo test test_parse_config -- --nocapture","type":"text"}]},{"type":"paragraph","content":[{"text":"If tests fail:","type":"text","marks":[{"type":"strong"}]}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Read the failure output.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Determine if the test is wrong or the code has a bug.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If the test is wrong: fix the test assertion or setup.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If the code has a bug: report it but fix the test to match current behavior, noting the bug in the output.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Re-run until green.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Never commit failing tests (unless in TDD mode, Step red).","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Step 5: Output Coverage Report","type":"text"}]},{"type":"paragraph","content":[{"text":"Re-run coverage after adding tests:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Same commands as Step 1","type":"text"}]},{"type":"paragraph","content":[{"text":"Compare before/after. Write summary to ","type":"text"},{"text":".agents/test/summary.md","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"# Test Generation Summary\n\n**Language:** Go\n**Date:** 2026-03-27\n**Mode:** generate\n\n## Coverage Delta\n\n| Metric | Before | After | Delta |\n|--------|--------|-------|-------|\n| Overall | 52.3% | 71.8% | +19.5% |\n| internal/parser | 23.0% | 85.2% | +62.2% |\n| internal/goals | 45.0% | 67.3% | +22.3% |\n\n## Tests Added\n\n- `internal/parser/parse_test.go` -- 12 test cases (3 existing + 9 new)\n- `internal/goals/measure_test.go` -- 8 test cases (new file)\n\n## Remaining Gaps\n\n- `internal/render/` -- 34% coverage, complex template logic\n- `cmd/root.go` -- integration test needed\n\n## Bugs Found\n\n- `ParseConfig` does not validate empty name field (passes silently)","type":"text"}]},{"type":"paragraph","content":[{"text":"Create ","type":"text"},{"text":".agents/test/","type":"text","marks":[{"type":"code_inline"}]},{"text":" directory if it does not exist. All artifacts go there.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"TDD Mode","type":"text"}]},{"type":"paragraph","content":[{"text":"When mode is ","type":"text"},{"text":"tdd","type":"text","marks":[{"type":"code_inline"}]},{"text":", follow the red-green-refactor cycle:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Red: Write a Failing Test","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Understand the feature requirement from the user.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Write a test that describes the desired behavior.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run the test -- it MUST fail. If it passes, the test is not testing new behavior.","type":"text"}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Verify the test fails\ngo test -v -run TestNewFeature ./...\n# Expected: FAIL","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Green: Minimal Implementation","type":"text"}]},{"type":"ordered_list","attrs":{"order":4,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Write the minimum code to make the test pass. No extra logic, no optimization.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run the test -- it MUST pass now.","type":"text"}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"go test -v -run TestNewFeature ./...\n# Expected: PASS","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Refactor","type":"text"}]},{"type":"ordered_list","attrs":{"order":6,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Clean up the implementation. Remove duplication, improve naming, simplify logic.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run ALL tests -- everything must still pass.","type":"text"}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"go test ./...\n# Expected: all PASS","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Repeat","type":"text"}]},{"type":"ordered_list","attrs":{"order":8,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Pick the next behavior. Write the next failing test. Continue the cycle.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Log each cycle to ","type":"text"},{"text":".agents/test/tdd-log.md","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## Cycle 1: Parse empty config returns error\n- RED: TestParseConfig_EmptyInput -- FAIL (function not implemented)\n- GREEN: Added nil check in ParseConfig -- PASS\n- REFACTOR: Extracted validation to validateConfig() -- PASS\n\n## Cycle 2: Parse config validates name field\n- RED: TestParseConfig_MissingName -- FAIL (no name validation)\n- GREEN: Added name check -- PASS\n- REFACTOR: None needed -- PASS","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Strategy Mode","type":"text"}]},{"type":"paragraph","content":[{"text":"When mode is ","type":"text"},{"text":"strategy","type":"text","marks":[{"type":"code_inline"}]},{"text":", analyze and recommend (no code generation):","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Inventory existing tests.","type":"text","marks":[{"type":"strong"}]},{"text":" Count test files, test functions, assertion density.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Classify test types.","type":"text","marks":[{"type":"strong"}]},{"text":" Unit, integration, end-to-end, benchmark.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Identify structural gaps.","type":"text","marks":[{"type":"strong"}]},{"text":" Missing test directories, no CI integration, no fixtures.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Recommend architecture:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test directory structure matching source layout.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Shared fixtures and helpers.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Integration test separation (build tags in Go, markers in pytest).","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"CI pipeline integration.","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Output to ","type":"text","marks":[{"type":"strong"}]},{"text":".agents/test/strategy.md","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":".","type":"text","marks":[{"type":"strong"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"What Makes Good Tests vs Bad Tests","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Good Tests","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Assert behavioral correctness.","type":"text","marks":[{"type":"strong"}]},{"text":" Test what the function does, not that it exists.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use exact expected values.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"assert result == Config(name=\"foo\", count=3)","type":"text","marks":[{"type":"code_inline"}]},{"text":" -- verifies the full output.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Cover error paths.","type":"text","marks":[{"type":"strong"}]},{"text":" Error conditions are where bugs hide. Test them explicitly.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Descriptive names.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"TestParseConfig_InvalidYAML_ReturnsError","type":"text","marks":[{"type":"code_inline"}]},{"text":" tells you what broke when it fails.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Independent.","type":"text","marks":[{"type":"strong"}]},{"text":" Each test runs in isolation. No shared mutable state between tests.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Fast.","type":"text","marks":[{"type":"strong"}]},{"text":" Unit tests should run in milliseconds. Slow tests get skipped.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Bad Tests (Banned)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Coverage-padding.","type":"text","marks":[{"type":"strong"}]},{"text":" Tests that assert ","type":"text"},{"text":"!= nil","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"!= \"\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" solely to inflate coverage metrics. Every test must assert a specific expected value.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Zero-assertion smoke tests.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"func TestFoo(t *testing.T) { Foo() }","type":"text","marks":[{"type":"code_inline"}]},{"text":" -- proves nothing except \"doesn't panic.\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Tautological assertions.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"assert foo(x) == foo(x)","type":"text","marks":[{"type":"code_inline"}]},{"text":" -- tests the test framework, not the code.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Implementation-coupled tests.","type":"text","marks":[{"type":"strong"}]},{"text":" Tests that break when you refactor internals without changing behavior. Test the interface, not the implementation.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Flaky tests.","type":"text","marks":[{"type":"strong"}]},{"text":" Tests that depend on timing, network, or ordering. Mock external dependencies. Use deterministic inputs.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"If you find existing tests that match the \"bad\" patterns, flag them in the summary but do not delete them without user confirmation.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Specialized Test References","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/conformance-harnesses.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/conformance-harnesses.md","title":null}}]},{"text":" -- Contract, compatibility, schema, and process conformance patterns","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/fuzzing.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/fuzzing.md","title":null}}]},{"text":" -- Fuzz targets, seed corpora, invariants, and crash triage","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/golden-artifacts.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/golden-artifacts.md","title":null}}]},{"text":" -- Golden file modes, update discipline, and artifact diff review","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/real-service-e2e.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/real-service-e2e.md","title":null}}]},{"text":" -- Real-service integration tests with non-production safety gates","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Integration with Other Skills","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Skill","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Integration","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/standards","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Loaded in Step 0 for language-specific test conventions","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/complexity","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Cross-referenced in Step 2 to prioritize high-risk untested code","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/vibe","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"After test generation, run ","type":"text"},{"text":"/vibe","type":"text","marks":[{"type":"code_inline"}]},{"text":" to validate overall code quality","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/implement","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"During implementation, invoke ","type":"text"},{"text":"/test --mode=tdd","type":"text","marks":[{"type":"code_inline"}]},{"text":" for test-first workflow","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/bug-hunt","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Tests generated here help ","type":"text"},{"text":"/bug-hunt","type":"text","marks":[{"type":"code_inline"}]},{"text":" verify fixes","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Flags","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Flag","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Default","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--mode","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"generate","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Execution mode: generate, coverage, strategy, tdd","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--scope","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":".","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Directory or file to target (e.g., ","type":"text"},{"text":"./internal/parser/","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--min-coverage","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"none","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Target coverage percentage; keep generating until met","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--dry-run","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"off","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Show what tests would be generated without writing files","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Output Artifacts","type":"text"}]},{"type":"paragraph","content":[{"text":"All artifacts are written to ","type":"text"},{"text":".agents/test/","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"File","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Contents","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"coverage-raw.txt","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Raw coverage tool output","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"coverage-func.txt","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Per-function coverage breakdown (Go)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"coverage.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Machine-readable coverage (Python)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"gaps.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ranked list of coverage gaps","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"summary.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Before/after coverage delta and test inventory","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"tdd-log.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TDD cycle log (tdd mode only)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"strategy.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Test architecture recommendations (strategy mode only)","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Reference Documents","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/test.feature","type":"text","marks":[{"type":"link","attrs":{"href":"references/test.feature","title":null}}]},{"text":" — Executable spec: load standards + detect language, generate real passing tests (not a plan), coverage gap-fill, artifacts in .agents/test/ (soc-qk4b)","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"test","author":"@skillopedia","source":{"stars":375,"repo_name":"agentops","origin_url":"https://github.com/boshu2/agentops/blob/HEAD/skills/test/SKILL.md","repo_owner":"boshu2","body_sha256":"f483d9437b56337ae3e5bd82747bebbe14cb9806ea8c51cf3c8b202d47556671","cluster_key":"4519fb9b812953f2df58fd4856e650488b758b9c4cbb34c320429afb34411a00","clean_bundle":{"format":"clean-skill-bundle-v1","source":"boshu2/agentops/skills/test/SKILL.md","attachments":[{"id":"e550e077-0355-5111-adfa-95445b228303","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e550e077-0355-5111-adfa-95445b228303/attachment.md","path":"references/conformance-harnesses.md","size":2145,"sha256":"6e226dd9945feee9bdd23041e9b0ae81d251c67432c2f90e283e4c5a94551901","contentType":"text/markdown; charset=utf-8"},{"id":"36af5a72-2932-5ae9-8969-e05f53b62c61","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/36af5a72-2932-5ae9-8969-e05f53b62c61/attachment.md","path":"references/fuzzing.md","size":1670,"sha256":"90dde6a40e013d6c413cd296da37123af140f869fce4a96102346bcb8d532ad5","contentType":"text/markdown; charset=utf-8"},{"id":"fe06b6fd-3232-5126-b558-aa749742e989","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fe06b6fd-3232-5126-b558-aa749742e989/attachment.md","path":"references/golden-artifact-strategy.md","size":2002,"sha256":"1326d17ba2d7f061aac39728d032f7dd3ecde6e9d6ac3e886cf4889e0c58fbd1","contentType":"text/markdown; charset=utf-8"},{"id":"cea767c0-188e-57c6-84e4-728d3f79a133","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cea767c0-188e-57c6-84e4-728d3f79a133/attachment.md","path":"references/golden-artifacts.md","size":1712,"sha256":"daf924867ff7392e06e1286b08a2d26223fbcb0f69869328a211908ec8768e64","contentType":"text/markdown; charset=utf-8"},{"id":"f12e69a5-a1d8-5d53-acc8-88dfc54e7b1c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f12e69a5-a1d8-5d53-acc8-88dfc54e7b1c/attachment.md","path":"references/metamorphic-testing.md","size":2048,"sha256":"adfccb55676f274a79ba17970fd3f34f38a266fcf26373f47c24852976b71db7","contentType":"text/markdown; charset=utf-8"},{"id":"0233a898-4e19-5c76-89cd-59c8090cf810","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0233a898-4e19-5c76-89cd-59c8090cf810/attachment.md","path":"references/real-service-e2e.md","size":1583,"sha256":"9f88ce4953e1ce4c874cd4bb5b965fd5cb904d1d799b39d92a9cebc17519ccfc","contentType":"text/markdown; charset=utf-8"},{"id":"94d8f3c9-4143-59b8-a46b-9e75f7ccedf2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/94d8f3c9-4143-59b8-a46b-9e75f7ccedf2/attachment.feature","path":"references/test.feature","size":1234,"sha256":"4c3927abd3dcd79931cc01d5a3abc1a54a0ffdc54e55931109fe0ac1b166c579","contentType":"text/plain; charset=utf-8"},{"id":"4f56962b-ffac-5e3b-81a1-2a739d97d8bf","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4f56962b-ffac-5e3b-81a1-2a739d97d8bf/attachment.sh","path":"scripts/validate.sh","size":694,"sha256":"76edf4607af082da129928955fc6fb59aa2bf50c1fe8fcadef6222ae03017999","contentType":"application/x-sh; charset=utf-8"}],"bundle_sha256":"d6eb692357a9514dadb3c0d560b5bb7f6a509f514612e51bb6cb0957921a489f","attachment_count":8,"text_attachments":7,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":1,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/test/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"testing-qa","category_label":"Testing"},"exact_dupes_collapsed_into_this":0},"context":{"intent":{"mode":"task"},"window":"fork","sections":{"exclude":["HISTORY"]},"intel_scope":"topic"},"version":"v1","category":"testing-qa","consumes":["standards","repo-context"],"metadata":{"tier":"execution","dependencies":["standards","complexity"]},"produces":["result.json"],"practices":["tdd","property-based-testing","bdd-gherkin"],"import_tag":"clean-skills-v1","context_rel":[],"description":"Generate tests and coverage plans.","hexagonal_role":"supporting","output_contract":"test files, coverage report","skill_api_version":1}},"renderedAt":1782987709550}

Test Skill Quick Ref: Generate tests, analyze coverage, fill gaps, run TDD loops. Output: passing tests + coverage report in . YOU MUST EXECUTE THIS WORKFLOW. Do not just describe it. Generate real tests, run them, verify they pass, and produce coverage artifacts. Do not output a plan and stop. Modes | Mode | Trigger | What It Does | |------|---------|--------------| | | "generate tests", "write tests", "add tests" | Create tests for existing code | | | "test coverage", "coverage gaps", "missing tests" | Analyze coverage and fill gaps | | | "test strategy", "test architecture" | Recommend tes…