[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D6M9MFSGTYPSA8YY8GYPRK":3,"skill-same:01M6D6M9MFSGTYPSA8YY8GYPRK":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6D6M9MFSGTYPSA8YY8GYPRK","review",null,"Review Playwright tests for quality. Use when user says \"review tests\", \"check test quality\", \"audit tests\", \"improve tests\", \"test code review\", or \"playwright best practices check\".","oabdelmaksoud\u002FSuperClaw","oabdelmaksoud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F50699149?v=4","01M6D5CVVN778ZCDP1WHS816SP","Omar Abdelmaksoud","01M6D5CW1RHNSKCJR85GJACBFT",2,"MIT","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-import\u002Fclaude-skills\u002Freferences\u002Fengineering-team\u002Fplaywright-pro\u002Fskills\u002Freview\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[5,27,28,29,30,31,32,33,34,35,36,37,38],"code review","playwright","test","code","best practices","audit","improve","quality","check","user","use","tests","2026-11-10 10:12:30",false,"---\nname: review\ndescription: >-\n  Review Playwright tests for quality. Use when user says \"review tests\",\n  \"check test quality\", \"audit tests\", \"improve tests\", \"test code review\",\n  or \"playwright best practices check\".\n---\n\n# Review Playwright Tests\n\nSystematically review Playwright test files for anti-patterns, missed best practices, and coverage gaps.\n\n## Input\n\n`$ARGUMENTS` can be:\n- A file path: review that specific test file\n- A directory: review all test files in the directory\n- Empty: review all tests in the project's `testDir`\n\n## Steps\n\n### 1. Gather Context\n\n- Read `playwright.config.ts` for project settings\n- List all `*.spec.ts` \u002F `*.spec.js` files in scope\n- If reviewing a single file, also check related page objects and fixtures\n\n### 2. Check Each File Against Anti-Patterns\n\nLoad `anti-patterns.md` from this skill directory. Check for all 20 anti-patterns.\n\n**Critical (must fix):**\n1. `waitForTimeout()` usage\n2. Non-web-first assertions (`expect(await ...)`)\n3. Hardcoded URLs instead of `baseURL`\n4. CSS\u002FXPath selectors when role-based exists\n5. Missing `await` on Playwright calls\n6. Shared mutable state between tests\n7. Test execution order dependencies\n\n**Warning (should fix):**\n8. Tests longer than 50 lines (consider splitting)\n9. Magic strings without named constants\n10. Missing error\u002Fedge case tests\n11. `page.evaluate()` for things locators can do\n12. Nested `test.describe()` more than 2 levels deep\n13. Generic test names (\"should work\", \"test 1\")\n\n**Info (consider):**\n14. No page objects for pages with 5+ locators\n15. Inline test data instead of factory\u002Ffixture\n16. Missing accessibility assertions\n17. No visual regression tests for UI-heavy pages\n18. Console error assertions not checked\n19. Network idle waits instead of specific assertions\n20. Missing `test.describe()` grouping\n\n### 3. Score Each File\n\nRate 1-10 based on:\n- **9-10**: Production-ready, follows all golden rules\n- **7-8**: Good, minor improvements possible\n- **5-6**: Functional but has anti-patterns\n- **3-4**: Significant issues, likely flaky\n- **1-2**: Needs rewrite\n\n### 4. Generate Review Report\n\nFor each file:\n```\n## \u003Cfilename> — Score: X\u002F10\n\n### Critical\n- Line 15: `waitForTimeout(2000)` → use `expect(locator).toBeVisible()`\n- Line 28: CSS selector `.btn-submit` → `getByRole('button', { name: 'Submit' })`\n\n### Warning\n- Line 42: Test name \"test login\" → \"should redirect to dashboard after login\"\n\n### Suggestions\n- Consider adding error case: what happens with invalid credentials?\n```\n\n### 5. For Project-Wide Review\n\nIf reviewing an entire test suite:\n- Spawn sub-agents per file for parallel review (up to 5 concurrent)\n- Or use `\u002Fbatch` for very large suites\n- Aggregate results into a summary table\n\n### 6. Offer Fixes\n\nFor each critical issue, provide the corrected code. Ask user: \"Apply these fixes? [Yes\u002FNo]\"\n\nIf yes, apply all fixes using `Edit` tool.\n\n## Output\n\n- File-by-file review with scores\n- Summary: total files, average score, critical issue count\n- Actionable fix list\n- Coverage gaps identified (pages\u002Ffeatures with no tests)\n","# Review Playwright Tests\n\nSystematically review Playwright test files for anti-patterns, missed best practices, and coverage gaps.\n\n## Input\n\n`$ARGUMENTS` can be:\n- A file path: review that specific test file\n- A directory: review all test files in the directory\n- Empty: review all tests in the project's `testDir`\n\n## Steps\n\n### 1. Gather Context\n\n- Read `playwright.config.ts` for project settings\n- List all `*.spec.ts` \u002F `*.spec.js` files in scope\n- If reviewing a single file, also check related page objects and fixtures\n\n### 2. Check Each File Against Anti-Patterns\n\nLoad `anti-patterns.md` from this skill directory. Check for all 20 anti-patterns.\n\n**Critical (must fix):**\n1. `waitForTimeout()` usage\n2. Non-web-first assertions (`expect(await ...)`)\n3. Hardcoded URLs instead of `baseURL`\n4. CSS\u002FXPath selectors when role-based exists\n5. Missing `await` on Playwright calls\n6. Shared mutable state between tests\n7. Test execution order dependencies\n\n**Warning (should fix):**\n8. Tests longer than 50 lines (consider splitting)\n9. Magic strings without named constants\n10. Missing error\u002Fedge case tests\n11. `page.evaluate()` for things locators can do\n12. Nested `test.describe()` more than 2 levels deep\n13. Generic test names (\"should work\", \"test 1\")\n\n**Info (consider):**\n14. No page objects for pages with 5+ locators\n15. Inline test data instead of factory\u002Ffixture\n16. Missing accessibility assertions\n17. No visual regression tests for UI-heavy pages\n18. Console error assertions not checked\n19. Network idle waits instead of specific assertions\n20. Missing `test.describe()` grouping\n\n### 3. Score Each File\n\nRate 1-10 based on:\n- **9-10**: Production-ready, follows all golden rules\n- **7-8**: Good, minor improvements possible\n- **5-6**: Functional but has anti-patterns\n- **3-4**: Significant issues, likely flaky\n- **1-2**: Needs rewrite\n\n### 4. Generate Review Report\n\nFor each file:\n```\n## \u003Cfilename> — Score: X\u002F10\n\n### Critical\n- Line 15: `waitForTimeout(2000)` → use `expect(locator).toBeVisible()`\n- Line 28: CSS selector `.btn-submit` → `getByRole('button', { name: 'Submit' })`\n\n### Warning\n- Line 42: Test name \"test login\" → \"should redirect to dashboard after login\"\n\n### Suggestions\n- Consider adding error case: what happens with invalid credentials?\n```\n\n### 5. For Project-Wide Review\n\nIf reviewing an entire test suite:\n- Spawn sub-agents per file for parallel review (up to 5 concurrent)\n- Or use `\u002Fbatch` for very large suites\n- Aggregate results into a summary table\n\n### 6. Offer Fixes\n\nFor each critical issue, provide the corrected code. Ask user: \"Apply these fixes? [Yes\u002FNo]\"\n\nIf yes, apply all fixes using `Edit` tool.\n\n## Output\n\n- File-by-file review with scores\n- Summary: total files, average score, critical issue count\n- Actionable fix list\n- Coverage gaps identified (pages\u002Ffeatures with no tests)\n",{"name":5,"description":7},"main","7b610356e36623652299fa2acb477ff821b1d920","upstream-import\u002Fclaude-skills\u002Freferences\u002Fengineering-team\u002Fplaywright-pro\u002Fskills\u002Freview",0,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fo-abdelmaksoud\u002F","Full-Stack Engineer | AI Systems Architect | Building autonomous multi-agent systems","2026-03-08 21:12:53",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add oabdelmaksoud\u002FSuperClaw --skill review",{"tool":59,"command":60},"bunx","bunx skills add oabdelmaksoud\u002FSuperClaw --skill review",{"tool":62,"command":63},"pnpm","pnpm dlx skills add oabdelmaksoud\u002FSuperClaw --skill review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-import\u002Fclaude-skills\u002Freferences\u002Fengineering-team\u002Fplaywright-pro\u002Fskills\u002Freview\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"anti-patterns.md","REFERENCE","参考文档",4294,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-import\u002Fclaude-skills\u002Freferences\u002Fengineering-team\u002Fplaywright-pro\u002Fskills\u002Freview\u002Fanti-patterns.md",[74,93,106,132,157,176],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":83,"publishedAt":39},"01M6D88QCPTBZVCRED0NZ1Y8K8","visa-doc-translate","Translate visa application documents (images) to English and create a bilingual PDF with original and translation","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fvisa-doc-translate\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[84,85,86,87,88,89,90,91,92],"translate","doc","visa doc translate","translation","application","create","images","PDF","documents",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":39},"01M6D88NBM95T3TFM50CYYAP65","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[100,101,102,103,30,104,105],"verification","loop","verification loop","sessions","claude code sessions","system",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":121,"publishedAt":39},"01M6D88JFZ2P996GVRHJNSZSTM","tdd-workflow","Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[112,113,116],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":114,"categoryName":115,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[122,123,124,125,126,127,30,128,37,29,129,130,38,131],"tdd","workflow","tdd workflow","e2e tests","e2e","integration","development","refactoring","coverage","writing",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":39},"01M6D88FTHRRSVJMXF2G7MQAK3","swiftui-patterns","SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS\u002FmacOS UI best practices.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswiftui-patterns\u002FSKILL.md",[],[139,140,141,142,143,144,145,31,146,147,148,149,150,151,152,153,154,155,156],"patterns","swiftui","swiftui patterns","architecture","macos","performance","state management","state","ui","Optimization","ios","architecture patterns","Composition","performance optimization","view","management","swiftui architecture","navigation",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":39},"01M6D88D527QTQT9DKHTRFN6EA","swift-protocol-di-testing","Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-protocol-di-testing\u002FSKILL.md",[163],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[165,166,167,168,30,169,170,171,172,105,173,174,175],"swift protocol di testing","protocol","swift","testing","protocols","file","network","injection","dependency","swift testing","dependency injection",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":39},"01M6D88AJW8H2QNWSW5ZY82R43","swift-concurrency-6-2","Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-concurrency-6-2\u002FSKILL.md",[],[183,184,167,185,186,44],"concurrency","swift concurrency","swift concurrency 6 2","default"]