[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CC05TKDFJ2YJ8FGGZGDAWZ":3,"skill-same:01M6CC05TKDFJ2YJ8FGGZGDAWZ":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":30,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6CC05TKDFJ2YJ8FGGZGDAWZ","go-testing-code-review",null,"Reviews Go test code for proper table-driven tests, assertions, and coverage patterns. Use when reviewing *_test.go files.","ray-manaloto\u002Fmacos-development-environment","ray-manaloto","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F227192835?v=4","01M6CBR7J13ZA01X5YB1A1QRJP","01M6CBR7P0S3NS8ZV81JYNST14",1,"MIT","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fgo-testing-code-review\u002FSKILL.md",[17,22,25],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":26,"categoryName":27,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[31,32,33,34,35,36,37,38,39,40,41,42],"code review","testing","review","go","code","go testing","go testing code review","test","table","coverage","use","files","2026-11-10 10:12:30",false,"---\nname: go-testing-code-review\ndescription: Reviews Go test code for proper table-driven tests, assertions, and coverage patterns. Use when reviewing *_test.go files.\n---\n\n# Go Testing Code Review\n\n## Quick Reference\n\n| Issue Type | Reference |\n|------------|-----------|\n| Test structure, naming | [references\u002Fstructure.md](references\u002Fstructure.md) |\n| Mocking, interfaces | [references\u002Fmocking.md](references\u002Fmocking.md) |\n\n## Review Checklist\n\n- [ ] Tests are table-driven with clear case names\n- [ ] Subtests use t.Run for parallel execution\n- [ ] Test names describe behavior, not implementation\n- [ ] Errors include got\u002Fwant with descriptive message\n- [ ] Cleanup registered with t.Cleanup\n- [ ] Parallel tests don't share mutable state\n- [ ] Mocks use interfaces defined in test file\n- [ ] Coverage includes edge cases and error paths\n\n## Critical Patterns\n\n### Table-Driven Tests\n\n```go\n\u002F\u002F BAD - repetitive\nfunc TestAdd(t *testing.T) {\n    if Add(1, 2) != 3 {\n        t.Error(\"wrong\")\n    }\n    if Add(0, 0) != 0 {\n        t.Error(\"wrong\")\n    }\n}\n\n\u002F\u002F GOOD\nfunc TestAdd(t *testing.T) {\n    tests := []struct {\n        name     string\n        a, b     int\n        want     int\n    }{\n        {\"positive numbers\", 1, 2, 3},\n        {\"zeros\", 0, 0, 0},\n        {\"negative\", -1, 1, 0},\n    }\n\n    for _, tt := range tests {\n        t.Run(tt.name, func(t *testing.T) {\n            got := Add(tt.a, tt.b)\n            if got != tt.want {\n                t.Errorf(\"Add(%d, %d) = %d, want %d\", tt.a, tt.b, got, tt.want)\n            }\n        })\n    }\n}\n```\n\n### Error Messages\n\n```go\n\u002F\u002F BAD\nif got != want {\n    t.Error(\"wrong result\")\n}\n\n\u002F\u002F GOOD\nif got != want {\n    t.Errorf(\"GetUser(%d) = %v, want %v\", id, got, want)\n}\n\n\u002F\u002F For complex types\nif diff := cmp.Diff(want, got); diff != \"\" {\n    t.Errorf(\"GetUser() mismatch (-want +got):\\n%s\", diff)\n}\n```\n\n### Parallel Tests\n\n```go\nfunc TestFoo(t *testing.T) {\n    tests := []struct{...}\n\n    for _, tt := range tests {\n        tt := tt  \u002F\u002F capture (not needed Go 1.22+)\n        t.Run(tt.name, func(t *testing.T) {\n            t.Parallel()\n            \u002F\u002F test code\n        })\n    }\n}\n```\n\n### Cleanup\n\n```go\n\u002F\u002F BAD - manual cleanup, skipped on failure\nfunc TestWithTempFile(t *testing.T) {\n    f, _ := os.CreateTemp(\"\", \"test\")\n    defer os.Remove(f.Name())  \u002F\u002F skipped if test panics\n}\n\n\u002F\u002F GOOD\nfunc TestWithTempFile(t *testing.T) {\n    f, _ := os.CreateTemp(\"\", \"test\")\n    t.Cleanup(func() {\n        os.Remove(f.Name())\n    })\n}\n```\n\n## Anti-Patterns\n\n### 1. Testing Internal Implementation\n\n```go\n\u002F\u002F BAD - tests private state\nfunc TestUser(t *testing.T) {\n    u := NewUser(\"alice\")\n    if u.id != 1 {  \u002F\u002F testing internal field\n        t.Error(\"wrong id\")\n    }\n}\n\n\u002F\u002F GOOD - tests behavior\nfunc TestUser(t *testing.T) {\n    u := NewUser(\"alice\")\n    if u.ID() != 1 {\n        t.Error(\"wrong ID\")\n    }\n}\n```\n\n### 2. Shared Mutable State\n\n```go\n\u002F\u002F BAD - tests interfere with each other\nvar testDB = setupDB()\n\nfunc TestA(t *testing.T) {\n    t.Parallel()\n    testDB.Insert(...)  \u002F\u002F race!\n}\n\n\u002F\u002F GOOD - isolated per test\nfunc TestA(t *testing.T) {\n    db := setupTestDB(t)\n    t.Cleanup(func() { db.Close() })\n    db.Insert(...)\n}\n```\n\n### 3. Assertions Without Context\n\n```go\n\u002F\u002F BAD\nassert.Equal(t, want, got)  \u002F\u002F \"expected X got Y\" - which test?\n\n\u002F\u002F GOOD\nassert.Equal(t, want, got, \"user name after update\")\n```\n\n## When to Load References\n\n- Reviewing test file structure → structure.md\n- Reviewing mock implementations → mocking.md\n\n## Review Questions\n\n1. Are tests table-driven with named cases?\n2. Do error messages include input, got, and want?\n3. Are parallel tests isolated (no shared state)?\n4. Is cleanup done via t.Cleanup?\n5. Do tests verify behavior, not implementation?\n","# Go Testing Code Review\n\n## Quick Reference\n\n| Issue Type | Reference |\n|------------|-----------|\n| Test structure, naming | [references\u002Fstructure.md](references\u002Fstructure.md) |\n| Mocking, interfaces | [references\u002Fmocking.md](references\u002Fmocking.md) |\n\n## Review Checklist\n\n- [ ] Tests are table-driven with clear case names\n- [ ] Subtests use t.Run for parallel execution\n- [ ] Test names describe behavior, not implementation\n- [ ] Errors include got\u002Fwant with descriptive message\n- [ ] Cleanup registered with t.Cleanup\n- [ ] Parallel tests don't share mutable state\n- [ ] Mocks use interfaces defined in test file\n- [ ] Coverage includes edge cases and error paths\n\n## Critical Patterns\n\n### Table-Driven Tests\n\n```go\n\u002F\u002F BAD - repetitive\nfunc TestAdd(t *testing.T) {\n    if Add(1, 2) != 3 {\n        t.Error(\"wrong\")\n    }\n    if Add(0, 0) != 0 {\n        t.Error(\"wrong\")\n    }\n}\n\n\u002F\u002F GOOD\nfunc TestAdd(t *testing.T) {\n    tests := []struct {\n        name     string\n        a, b     int\n        want     int\n    }{\n        {\"positive numbers\", 1, 2, 3},\n        {\"zeros\", 0, 0, 0},\n        {\"negative\", -1, 1, 0},\n    }\n\n    for _, tt := range tests {\n        t.Run(tt.name, func(t *testing.T) {\n            got := Add(tt.a, tt.b)\n            if got != tt.want {\n                t.Errorf(\"Add(%d, %d) = %d, want %d\", tt.a, tt.b, got, tt.want)\n            }\n        })\n    }\n}\n```\n\n### Error Messages\n\n```go\n\u002F\u002F BAD\nif got != want {\n    t.Error(\"wrong result\")\n}\n\n\u002F\u002F GOOD\nif got != want {\n    t.Errorf(\"GetUser(%d) = %v, want %v\", id, got, want)\n}\n\n\u002F\u002F For complex types\nif diff := cmp.Diff(want, got); diff != \"\" {\n    t.Errorf(\"GetUser() mismatch (-want +got):\\n%s\", diff)\n}\n```\n\n### Parallel Tests\n\n```go\nfunc TestFoo(t *testing.T) {\n    tests := []struct{...}\n\n    for _, tt := range tests {\n        tt := tt  \u002F\u002F capture (not needed Go 1.22+)\n        t.Run(tt.name, func(t *testing.T) {\n            t.Parallel()\n            \u002F\u002F test code\n        })\n    }\n}\n```\n\n### Cleanup\n\n```go\n\u002F\u002F BAD - manual cleanup, skipped on failure\nfunc TestWithTempFile(t *testing.T) {\n    f, _ := os.CreateTemp(\"\", \"test\")\n    defer os.Remove(f.Name())  \u002F\u002F skipped if test panics\n}\n\n\u002F\u002F GOOD\nfunc TestWithTempFile(t *testing.T) {\n    f, _ := os.CreateTemp(\"\", \"test\")\n    t.Cleanup(func() {\n        os.Remove(f.Name())\n    })\n}\n```\n\n## Anti-Patterns\n\n### 1. Testing Internal Implementation\n\n```go\n\u002F\u002F BAD - tests private state\nfunc TestUser(t *testing.T) {\n    u := NewUser(\"alice\")\n    if u.id != 1 {  \u002F\u002F testing internal field\n        t.Error(\"wrong id\")\n    }\n}\n\n\u002F\u002F GOOD - tests behavior\nfunc TestUser(t *testing.T) {\n    u := NewUser(\"alice\")\n    if u.ID() != 1 {\n        t.Error(\"wrong ID\")\n    }\n}\n```\n\n### 2. Shared Mutable State\n\n```go\n\u002F\u002F BAD - tests interfere with each other\nvar testDB = setupDB()\n\nfunc TestA(t *testing.T) {\n    t.Parallel()\n    testDB.Insert(...)  \u002F\u002F race!\n}\n\n\u002F\u002F GOOD - isolated per test\nfunc TestA(t *testing.T) {\n    db := setupTestDB(t)\n    t.Cleanup(func() { db.Close() })\n    db.Insert(...)\n}\n```\n\n### 3. Assertions Without Context\n\n```go\n\u002F\u002F BAD\nassert.Equal(t, want, got)  \u002F\u002F \"expected X got Y\" - which test?\n\n\u002F\u002F GOOD\nassert.Equal(t, want, got, \"user name after update\")\n```\n\n## When to Load References\n\n- Reviewing test file structure → structure.md\n- Reviewing mock implementations → mocking.md\n\n## Review Questions\n\n1. Are tests table-driven with named cases?\n2. Do error messages include input, got, and want?\n3. Are parallel tests isolated (no shared state)?\n4. Is cleanup done via t.Cleanup?\n5. Do tests verify behavior, not implementation?\n",{"name":5,"description":7},"main","716b17df3ef6719d88aeac180015008b7ddfff6f",".claude\u002Fskills\u002Fskills\u002Fgo-testing-code-review",0,"https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment","https:\u002F\u002Fgithub.com\u002Fray-manaloto","2026-08-03 16:55:50",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add ray-manaloto\u002Fmacos-development-environment --skill go-testing-code-review",{"tool":61,"command":62},"bunx","bunx skills add ray-manaloto\u002Fmacos-development-environment --skill go-testing-code-review",{"tool":64,"command":65},"pnpm","pnpm dlx skills add ray-manaloto\u002Fmacos-development-environment --skill go-testing-code-review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fgo-testing-code-review\u002FSKILL.md",true,[69,75,79],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"agents\u002Fopenai.yaml","REFERENCE","参考文档",165,"https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fcodex-skills\u002Fmatt-writing-fragments\u002Fagents\u002Fopenai.yaml",{"path":76,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Fmocking.md",5866,"https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fgo-testing-code-review\u002Freferences\u002Fmocking.md",{"path":80,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fstructure.md",5433,"https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fgo-testing-code-review\u002Freferences\u002Fstructure.md",[84,104,122,140,159,173],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":43},"01M6CC8DXNJ39YWERYTWCGGCGG","next-workflow-step","Use this skill when the user wants to transition to the next workflow step, wrap up a session cleanly, prepare a handoff, or says things like \"next step\", \"continue the workflow\", \"wrap up\", \"hand off\", \"move to the next phase\", \"what's next in embrace\", or \"prepare for \u002Fclear\". Also triggers when the current octo:embrace phase appears complete and no explicit next action is set.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fworkflow-toolkit\u002Fskills\u002Fnext-workflow-step\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[94,95,96,41,97,98,99,100,101,102,103],"next workflow step","workflow","up","session","user","wrap up","continue","handoff","prepare","SET",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":43},"01M6CC8BRZBQHEBXGMKPDM422P","source-discovery","This skill should be used when the user asks to \"find sources\", \"discover URLs\", \"catalog a source\", \"classify a URL\", \"search for libraries\", \"check what exists\", or mentions source discovery, URL cataloging, source classification, or research source management.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Fsource-discovery\u002FSKILL.md",[],[111,112,113,114,115,116,117,118,119,98,120,121],"discovery","source discovery","research","libraries","search","classification","find","check","management","catalog","find sources",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":43},"01M6CC89CGJP69A0PS22G2H1FV","review-synthesis","This skill should be used when the user asks to \"summarize review findings\", \"prioritize fixes\", \"rank review issues\", \"combine reviewer feedback\", \"create action items from review\", or mentions review synthesis, finding prioritization, severity ranking, or review result summarization.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Freview-synthesis\u002FSKILL.md",[],[33,129,130,131,132,133,134,98,135,136,137,138,139],"review synthesis","Synthesis","prioritize","create action","feedback","reviewer","summarize","prioritization","create","issues","severity",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":149,"publishedAt":43},"01M6CC872EZ9GRJY0HRCG0RT2M","research-scoring","This skill should be used when the user asks to \"score research\", \"check research quality\", \"evaluate coverage\", \"measure improvement\", \"assess research completeness\", or mentions research scoring, quality metrics, coverage gaps, improvement baseline, or research pipeline status.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Fresearch-scoring\u002FSKILL.md",[146],{"categoryNo":147,"categoryName":148,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",[150,113,151,152,153,154,155,156,118,98,40,157,158],"research scoring","status","coverage gaps","metrics","pipeline","baseline","quality","pipeline status","research quality",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":43},"01M6CC852HSDS1FE4EJAT0RHGR","notebooklm-integration","This skill should be used when the user asks to \"ingest into NotebookLM\", \"query NotebookLM\", \"add sources to notebook\", \"cross-source synthesis\", \"check stale sources\", or mentions NotebookLM, notebook integration, source ingestion, or knowledge consolidation.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Fnotebooklm-integration\u002FSKILL.md",[],[166,167,168,169,118,98,170,171,172,130],"notebooklm integration","notebooklm","integration","knowledge","ingestion","ingest","stale",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":180,"publishedAt":43},"01M6CC82Z4V3205KCJWQZPS2VG","evidence-synthesis","This skill should be used when the user asks to \"synthesize findings\", \"combine research\", \"cross-reference sources\", \"summarize evidence\", \"write a deep review\", or mentions evidence synthesis, finding consolidation, cross-source analysis, or research summarization.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Fevidence-synthesis\u002FSKILL.md",[179],{"categoryNo":147,"categoryName":148,"taxonomyType":20,"taxonomyTypeDesc":21},[181,130,182,135,113,183,184,185,98,186,33],"evidence synthesis","evidence","deep review","analysis","write","reference"]