[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6P82JG2MWH5JG28GHDWMZQD":3,"skill-same:01M6P82JG2MWH5JG28GHDWMZQD":118},{"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":29,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":14,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":6,"ownerDescription":60,"updatedAt":61,"install":62,"resources":75},"01M6P82JG2MWH5JG28GHDWMZQD","frontend-testing",null,"Generate or review Vitest and React Testing Library tests for frontend components, hooks, and utilities. USE FOR: \"write Vitest tests for a React component\", \"review coverage gaps in a React hook spec\", \"review an existing frontend Vitest spec\". DO NOT USE FOR: backend or API tests, Playwright or Cypress end-to-end tests, or conceptual questions without frontend code context.","sarthchawla\u002FSetupMyAI","sarthchawla","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F41484686?v=4","01M6P7D22NFMY9MA11Q2YGPKV2","Sarthak Chawla","01M6P7D26JJ9KW98SD1G8BB83R",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",[30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"frontend","testing","frontend testing","hook","Utilities","cypress","end","react testing","hooks","coverage","write","api","library","testing library","code","generate","component","react","components","review","2026-11-10 10:12:30",false,"---\nname: frontend-testing\ndescription: 'Generate or review Vitest and React Testing Library tests for frontend components, hooks, and utilities. USE FOR: \"write Vitest tests for a React component\", \"review coverage gaps in a React hook spec\", \"review an existing frontend Vitest spec\". DO NOT USE FOR: backend or API tests, Playwright or Cypress end-to-end tests, or conceptual questions without frontend code context.'\n---\n\n# Frontend Testing Skill\n\nThis skill enables Claude to generate high-quality, comprehensive frontend tests following established conventions and best practices.\n\n## When to Apply This Skill\n\nApply this skill when the user:\n\n- Asks to **write tests** for a component, hook, or utility\n- Asks to **review existing tests** for completeness\n- Mentions **Vitest**, **React Testing Library**, **RTL**, or **spec files**\n- Requests **test coverage** improvement\n- Mentions **testing**, **unit tests**, or **integration tests** for frontend code\n- Wants to understand **testing patterns** in the codebase\n\n**Do NOT apply** when:\n\n- User is asking about backend\u002FAPI tests (Python\u002Fpytest)\n- User is asking about E2E tests (Playwright\u002FCypress)\n- User is only asking conceptual questions without code context\n\n## Quick Reference\n\n### Tech Stack\n\n| Tool | Purpose |\n|------|---------|\n| Vitest | Test runner |\n| React Testing Library | Component testing |\n| jsdom | Test environment |\n| TypeScript | Type safety |\n\n### Key Commands\n\n```bash\n# Run all tests\npnpm test\n\n# Watch mode\npnpm test:watch\n\n# Run specific file\npnpm test path\u002Fto\u002Ffile.spec.tsx\n\n# Generate coverage report\npnpm test:coverage\n```\n\n### File Naming\n\n- Test files: `ComponentName.spec.tsx` or `ComponentName.test.tsx` (same directory as component)\n\n## Test Structure Template\n\n```typescript\nimport { render, screen, fireEvent, waitFor } from '@testing-library\u002Freact'\nimport Component from '.\u002Findex'\n\n\u002F\u002F Mock external dependencies only\nvi.mock('@\u002Fservice\u002Fapi')\nvi.mock('next\u002Fnavigation', () => ({\n  useRouter: () => ({ push: vi.fn() }),\n  usePathname: () => '\u002Ftest',\n}))\n\n\u002F\u002F Shared state for mocks (if needed)\nlet mockSharedState = false\n\ndescribe('ComponentName', () => {\n  beforeEach(() => {\n    vi.clearAllMocks()  \u002F\u002F Reset mocks BEFORE each test\n    mockSharedState = false  \u002F\u002F Reset shared state\n  })\n\n  \u002F\u002F Rendering tests (REQUIRED)\n  describe('Rendering', () => {\n    it('should render without crashing', () => {\n      \u002F\u002F Arrange\n      const props = { title: 'Test' }\n      \n      \u002F\u002F Act\n      render(\u003CComponent {...props} \u002F>)\n      \n      \u002F\u002F Assert\n      expect(screen.getByText('Test')).toBeInTheDocument()\n    })\n  })\n\n  \u002F\u002F Props tests (REQUIRED)\n  describe('Props', () => {\n    it('should apply custom className', () => {\n      render(\u003CComponent className=\"custom\" \u002F>)\n      expect(screen.getByRole('button')).toHaveClass('custom')\n    })\n  })\n\n  \u002F\u002F User Interactions\n  describe('User Interactions', () => {\n    it('should handle click events', () => {\n      const handleClick = vi.fn()\n      render(\u003CComponent onClick={handleClick} \u002F>)\n      \n      fireEvent.click(screen.getByRole('button'))\n      \n      expect(handleClick).toHaveBeenCalledTimes(1)\n    })\n  })\n\n  \u002F\u002F Edge Cases (REQUIRED)\n  describe('Edge Cases', () => {\n    it('should handle null data', () => {\n      render(\u003CComponent data={null} \u002F>)\n      expect(screen.getByText(\u002Fno data\u002Fi)).toBeInTheDocument()\n    })\n\n    it('should handle empty array', () => {\n      render(\u003CComponent items={[]} \u002F>)\n      expect(screen.getByText(\u002Fempty\u002Fi)).toBeInTheDocument()\n    })\n  })\n})\n```\n\n## Testing Workflow (CRITICAL)\n\n### Incremental Approach Required\n\n**NEVER generate all test files at once.** For complex components or multi-file directories:\n\n1. **Analyze & Plan**: List all files, order by complexity (simple -> complex)\n1. **Process ONE at a time**: Write test -> Run test -> Fix if needed -> Next\n1. **Verify before proceeding**: Do NOT continue to next file until current passes\n\n```\nFor each file:\n  1. Write test\n  2. Run: pnpm test \u003Cfile>.spec.tsx\n  3. PASS? -> Mark complete, next file\n     FAIL? -> Fix first, then continue\n```\n\n### Complexity-Based Order\n\nProcess in this order for multi-file testing:\n\n1. Utility functions (simplest)\n1. Custom hooks\n1. Simple components (presentational)\n1. Medium components (state, effects)\n1. Complex components (API, routing)\n1. Integration tests (index files - last)\n\n### When to Refactor First\n\n- **Complexity > 50**: Break into smaller pieces before testing\n- **500+ lines**: Consider splitting before testing\n- **Many dependencies**: Extract logic into hooks first\n\nSee `references\u002Fworkflow.md` for complete workflow details and todo list format.\n\n## Testing Strategy\n\n### Path-Level Testing (Directory Testing)\n\nWhen assigned to test a directory\u002Fpath, test **ALL content** within that path:\n\n- Test all components, hooks, utilities in the directory (not just `index` file)\n- Use incremental approach: one file at a time, verify each before proceeding\n- Goal: 100% coverage of ALL files in the directory\n\n### Integration Testing First\n\n**Prefer integration testing** when writing tests for a directory:\n\n- Import real project components directly (including base components and siblings)\n- Only mock: API services, routing, complex context providers\n- DO NOT mock base components\n- DO NOT mock sibling\u002Fchild components in the same directory\n\nSee [Test Structure Template](#test-structure-template) for correct import\u002Fmock patterns.\n\n## Core Principles\n\n### 1. AAA Pattern (Arrange-Act-Assert)\n\nEvery test should clearly separate:\n\n- **Arrange**: Setup test data and render component\n- **Act**: Perform user actions\n- **Assert**: Verify expected outcomes\n\n### 2. Black-Box Testing\n\n- Test observable behavior, not implementation details\n- Use semantic queries (getByRole, getByLabelText)\n- Avoid testing internal state directly\n- **Prefer pattern matching over hardcoded strings** in assertions:\n\n```typescript\n\u002F\u002F Avoid: hardcoded text assertions\nexpect(screen.getByText('Loading...')).toBeInTheDocument()\n\n\u002F\u002F Better: role-based queries\nexpect(screen.getByRole('status')).toBeInTheDocument()\n\n\u002F\u002F Better: pattern matching\nexpect(screen.getByText(\u002Floading\u002Fi)).toBeInTheDocument()\n```\n\n### 3. Single Behavior Per Test\n\nEach test verifies ONE user-observable behavior:\n\n```typescript\n\u002F\u002F Good: One behavior\nit('should disable button when loading', () => {\n  render(\u003CButton loading \u002F>)\n  expect(screen.getByRole('button')).toBeDisabled()\n})\n\n\u002F\u002F Bad: Multiple behaviors\nit('should handle loading state', () => {\n  render(\u003CButton loading \u002F>)\n  expect(screen.getByRole('button')).toBeDisabled()\n  expect(screen.getByText('Loading...')).toBeInTheDocument()\n  expect(screen.getByRole('button')).toHaveClass('loading')\n})\n```\n\n### 4. Semantic Naming\n\nUse `should \u003Cbehavior> when \u003Ccondition>`:\n\n```typescript\nit('should show error message when validation fails')\nit('should call onSubmit when form is valid')\nit('should disable input when isReadOnly is true')\n```\n\n## Required Test Scenarios\n\n### Always Required (All Components)\n\n1. **Rendering**: Component renders without crashing\n1. **Props**: Required props, optional props, default values\n1. **Edge Cases**: null, undefined, empty values, boundary conditions\n\n### Conditional (When Present)\n\n| Feature | Test Focus |\n|---------|-----------|\n| `useState` | Initial state, transitions, cleanup |\n| `useEffect` | Execution, dependencies, cleanup |\n| Event handlers | All onClick, onChange, onSubmit, keyboard |\n| API calls | Loading, success, error states |\n| Routing | Navigation, params, query strings |\n| `useCallback`\u002F`useMemo` | Referential equality |\n| Context | Provider values, consumer behavior |\n| Forms | Validation, submission, error display |\n\n## Coverage Goals (Per File)\n\nFor each test file generated, aim for:\n\n- 100% function coverage\n- 100% statement coverage\n- >95% branch coverage\n- >95% line coverage\n\n> **Note**: For multi-file directories, process one file at a time with full coverage each. See `references\u002Fworkflow.md`.\n\n## Detailed Guides\n\nFor more detailed information, refer to:\n\n- `references\u002Fworkflow.md` - **Incremental testing workflow** (MUST READ for multi-file testing)\n- `references\u002Fmocking.md` - Mock patterns, store testing, and best practices\n- `references\u002Fasync-testing.md` - Async operations and API calls\n- `references\u002Fdomain-components.md` - Domain-specific component testing\n- `references\u002Fcommon-patterns.md` - Frequently used testing patterns\n- `references\u002Fchecklist.md` - Test generation checklist and validation steps\n","# Frontend Testing Skill\n\nThis skill enables Claude to generate high-quality, comprehensive frontend tests following established conventions and best practices.\n\n## When to Apply This Skill\n\nApply this skill when the user:\n\n- Asks to **write tests** for a component, hook, or utility\n- Asks to **review existing tests** for completeness\n- Mentions **Vitest**, **React Testing Library**, **RTL**, or **spec files**\n- Requests **test coverage** improvement\n- Mentions **testing**, **unit tests**, or **integration tests** for frontend code\n- Wants to understand **testing patterns** in the codebase\n\n**Do NOT apply** when:\n\n- User is asking about backend\u002FAPI tests (Python\u002Fpytest)\n- User is asking about E2E tests (Playwright\u002FCypress)\n- User is only asking conceptual questions without code context\n\n## Quick Reference\n\n### Tech Stack\n\n| Tool | Purpose |\n|------|---------|\n| Vitest | Test runner |\n| React Testing Library | Component testing |\n| jsdom | Test environment |\n| TypeScript | Type safety |\n\n### Key Commands\n\n```bash\n# Run all tests\npnpm test\n\n# Watch mode\npnpm test:watch\n\n# Run specific file\npnpm test path\u002Fto\u002Ffile.spec.tsx\n\n# Generate coverage report\npnpm test:coverage\n```\n\n### File Naming\n\n- Test files: `ComponentName.spec.tsx` or `ComponentName.test.tsx` (same directory as component)\n\n## Test Structure Template\n\n```typescript\nimport { render, screen, fireEvent, waitFor } from '@testing-library\u002Freact'\nimport Component from '.\u002Findex'\n\n\u002F\u002F Mock external dependencies only\nvi.mock('@\u002Fservice\u002Fapi')\nvi.mock('next\u002Fnavigation', () => ({\n  useRouter: () => ({ push: vi.fn() }),\n  usePathname: () => '\u002Ftest',\n}))\n\n\u002F\u002F Shared state for mocks (if needed)\nlet mockSharedState = false\n\ndescribe('ComponentName', () => {\n  beforeEach(() => {\n    vi.clearAllMocks()  \u002F\u002F Reset mocks BEFORE each test\n    mockSharedState = false  \u002F\u002F Reset shared state\n  })\n\n  \u002F\u002F Rendering tests (REQUIRED)\n  describe('Rendering', () => {\n    it('should render without crashing', () => {\n      \u002F\u002F Arrange\n      const props = { title: 'Test' }\n      \n      \u002F\u002F Act\n      render(\u003CComponent {...props} \u002F>)\n      \n      \u002F\u002F Assert\n      expect(screen.getByText('Test')).toBeInTheDocument()\n    })\n  })\n\n  \u002F\u002F Props tests (REQUIRED)\n  describe('Props', () => {\n    it('should apply custom className', () => {\n      render(\u003CComponent className=\"custom\" \u002F>)\n      expect(screen.getByRole('button')).toHaveClass('custom')\n    })\n  })\n\n  \u002F\u002F User Interactions\n  describe('User Interactions', () => {\n    it('should handle click events', () => {\n      const handleClick = vi.fn()\n      render(\u003CComponent onClick={handleClick} \u002F>)\n      \n      fireEvent.click(screen.getByRole('button'))\n      \n      expect(handleClick).toHaveBeenCalledTimes(1)\n    })\n  })\n\n  \u002F\u002F Edge Cases (REQUIRED)\n  describe('Edge Cases', () => {\n    it('should handle null data', () => {\n      render(\u003CComponent data={null} \u002F>)\n      expect(screen.getByText(\u002Fno data\u002Fi)).toBeInTheDocument()\n    })\n\n    it('should handle empty array', () => {\n      render(\u003CComponent items={[]} \u002F>)\n      expect(screen.getByText(\u002Fempty\u002Fi)).toBeInTheDocument()\n    })\n  })\n})\n```\n\n## Testing Workflow (CRITICAL)\n\n### Incremental Approach Required\n\n**NEVER generate all test files at once.** For complex components or multi-file directories:\n\n1. **Analyze & Plan**: List all files, order by complexity (simple -> complex)\n1. **Process ONE at a time**: Write test -> Run test -> Fix if needed -> Next\n1. **Verify before proceeding**: Do NOT continue to next file until current passes\n\n```\nFor each file:\n  1. Write test\n  2. Run: pnpm test \u003Cfile>.spec.tsx\n  3. PASS? -> Mark complete, next file\n     FAIL? -> Fix first, then continue\n```\n\n### Complexity-Based Order\n\nProcess in this order for multi-file testing:\n\n1. Utility functions (simplest)\n1. Custom hooks\n1. Simple components (presentational)\n1. Medium components (state, effects)\n1. Complex components (API, routing)\n1. Integration tests (index files - last)\n\n### When to Refactor First\n\n- **Complexity > 50**: Break into smaller pieces before testing\n- **500+ lines**: Consider splitting before testing\n- **Many dependencies**: Extract logic into hooks first\n\nSee `references\u002Fworkflow.md` for complete workflow details and todo list format.\n\n## Testing Strategy\n\n### Path-Level Testing (Directory Testing)\n\nWhen assigned to test a directory\u002Fpath, test **ALL content** within that path:\n\n- Test all components, hooks, utilities in the directory (not just `index` file)\n- Use incremental approach: one file at a time, verify each before proceeding\n- Goal: 100% coverage of ALL files in the directory\n\n### Integration Testing First\n\n**Prefer integration testing** when writing tests for a directory:\n\n- Import real project components directly (including base components and siblings)\n- Only mock: API services, routing, complex context providers\n- DO NOT mock base components\n- DO NOT mock sibling\u002Fchild components in the same directory\n\nSee [Test Structure Template](#test-structure-template) for correct import\u002Fmock patterns.\n\n## Core Principles\n\n### 1. AAA Pattern (Arrange-Act-Assert)\n\nEvery test should clearly separate:\n\n- **Arrange**: Setup test data and render component\n- **Act**: Perform user actions\n- **Assert**: Verify expected outcomes\n\n### 2. Black-Box Testing\n\n- Test observable behavior, not implementation details\n- Use semantic queries (getByRole, getByLabelText)\n- Avoid testing internal state directly\n- **Prefer pattern matching over hardcoded strings** in assertions:\n\n```typescript\n\u002F\u002F Avoid: hardcoded text assertions\nexpect(screen.getByText('Loading...')).toBeInTheDocument()\n\n\u002F\u002F Better: role-based queries\nexpect(screen.getByRole('status')).toBeInTheDocument()\n\n\u002F\u002F Better: pattern matching\nexpect(screen.getByText(\u002Floading\u002Fi)).toBeInTheDocument()\n```\n\n### 3. Single Behavior Per Test\n\nEach test verifies ONE user-observable behavior:\n\n```typescript\n\u002F\u002F Good: One behavior\nit('should disable button when loading', () => {\n  render(\u003CButton loading \u002F>)\n  expect(screen.getByRole('button')).toBeDisabled()\n})\n\n\u002F\u002F Bad: Multiple behaviors\nit('should handle loading state', () => {\n  render(\u003CButton loading \u002F>)\n  expect(screen.getByRole('button')).toBeDisabled()\n  expect(screen.getByText('Loading...')).toBeInTheDocument()\n  expect(screen.getByRole('button')).toHaveClass('loading')\n})\n```\n\n### 4. Semantic Naming\n\nUse `should \u003Cbehavior> when \u003Ccondition>`:\n\n```typescript\nit('should show error message when validation fails')\nit('should call onSubmit when form is valid')\nit('should disable input when isReadOnly is true')\n```\n\n## Required Test Scenarios\n\n### Always Required (All Components)\n\n1. **Rendering**: Component renders without crashing\n1. **Props**: Required props, optional props, default values\n1. **Edge Cases**: null, undefined, empty values, boundary conditions\n\n### Conditional (When Present)\n\n| Feature | Test Focus |\n|---------|-----------|\n| `useState` | Initial state, transitions, cleanup |\n| `useEffect` | Execution, dependencies, cleanup |\n| Event handlers | All onClick, onChange, onSubmit, keyboard |\n| API calls | Loading, success, error states |\n| Routing | Navigation, params, query strings |\n| `useCallback`\u002F`useMemo` | Referential equality |\n| Context | Provider values, consumer behavior |\n| Forms | Validation, submission, error display |\n\n## Coverage Goals (Per File)\n\nFor each test file generated, aim for:\n\n- 100% function coverage\n- 100% statement coverage\n- >95% branch coverage\n- >95% line coverage\n\n> **Note**: For multi-file directories, process one file at a time with full coverage each. See `references\u002Fworkflow.md`.\n\n## Detailed Guides\n\nFor more detailed information, refer to:\n\n- `references\u002Fworkflow.md` - **Incremental testing workflow** (MUST READ for multi-file testing)\n- `references\u002Fmocking.md` - Mock patterns, store testing, and best practices\n- `references\u002Fasync-testing.md` - Async operations and API calls\n- `references\u002Fdomain-components.md` - Domain-specific component testing\n- `references\u002Fcommon-patterns.md` - Frequently used testing patterns\n- `references\u002Fchecklist.md` - Test generation checklist and validation steps\n",{"name":5,"description":7},"main","3934845b800ff514cb89eb81d43f3dc4cbf51ff2","packages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing","https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI","https:\u002F\u002Fgithub.com\u002Fsarthchawla","there ain't no problem i can't solve","2026-10-23 01:26:57",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add sarthchawla\u002FSetupMyAI --skill frontend-testing",{"tool":68,"command":69},"bunx","bunx skills add sarthchawla\u002FSetupMyAI --skill frontend-testing",{"tool":71,"command":72},"pnpm","pnpm dlx skills add sarthchawla\u002FSetupMyAI --skill frontend-testing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002FSKILL.md",true,[76,82,88,92,98,102,106,110,114],{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"assets\u002Fcomponent-test.template.tsx","ASSET","资产文件",7602,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Fassets\u002Fcomponent-test.template.tsx",{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"assets\u002Fhook-test.template.ts","SCRIPT","脚本",6128,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Fassets\u002Fhook-test.template.ts",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"assets\u002Futility-test.template.ts",4238,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Fassets\u002Futility-test.template.ts",{"path":93,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fasync-testing.md","REFERENCE","参考文档",8387,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Freferences\u002Fasync-testing.md",{"path":99,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fchecklist.md",5416,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Freferences\u002Fchecklist.md",{"path":103,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":104,"sourceHtmlUrl":105},"references\u002Fcommon-patterns.md",8382,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Freferences\u002Fcommon-patterns.md",{"path":107,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":108,"sourceHtmlUrl":109},"references\u002Fdomain-components.md",6773,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Freferences\u002Fdomain-components.md",{"path":111,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":112,"sourceHtmlUrl":113},"references\u002Fmocking.md",14471,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Freferences\u002Fmocking.md",{"path":115,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":116,"sourceHtmlUrl":117},"references\u002Fworkflow.md",7972,"https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Freact-frontend\u002Fskills\u002Ffrontend-testing\u002Freferences\u002Fworkflow.md",[119,130,145,154,164,185],{"skillNo":120,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":127,"publishedAt":50},"01M6P8953HNC422WFQSPP2FMQE","sample-skill","https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fmock-repo\u002F.claude\u002Fskills\u002Fsample-skill\u002FSKILL.md",[124],{"categoryNo":125,"categoryName":126,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[128,129],"sample","sample skill",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":50},"01M6P8924ZSDAZ88Y5Q9P3KAQV","synthetic-review-candidate","Candidate for smoke testing an evaluation runner only.","https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fscripts\u002Fskill-eval\u002Ffixtures\u002Fcandidate\u002FSKILL.md",[],[137,138,139,49,140,31,141,142,143,144],"synthetic review candidate","candidate","synthetic","only","Evaluation","smoke","runner","for",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":50},"01M6P88FEGGNH8EZY0PDHD9KQA","synthetic-review-baseline","Baseline for smoke testing an evaluation runner only.","https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fscripts\u002Fskill-eval\u002Ffixtures\u002Fbaseline\u002FSKILL.md",[],[152,139,153,49,142,143,144,140,31,141],"synthetic review baseline","baseline",{"skillNo":155,"name":49,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":50},"01M6P87ZXVEHRM860960DB5FEQ","Run the existing user-invoked review bundle and independently adjudicate its findings.","https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Funiversal\u002Fskills\u002Freview\u002FSKILL.md",[],[49,160,161,162,163],"run","user","bundle","Existing",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":50},"01M6P87FC73MZTRB6ZBP4GR1VQ","review-adjudication","Verify generated or human review findings before fixing, defending, replying, resolving, or reusing them as learned guidance. Use within a review, review-comment fix, monitor, or readiness workflow.","https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Funiversal\u002Fskills\u002Freview-adjudication\u002FSKILL.md",[],[171,49,172,173,174,175,176,177,178,179,180,181,182,183,184],"review adjudication","workflow","generated","human review","guidance","human","as","readiness","learned","review findings","fix","use","verify","monitor",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":191,"publishedAt":50},"01M6P871Q44KQES293T60JQETA","monitor-mr","Monitor review findings and CI using the shared adjudication procedure.","https:\u002F\u002Fgithub.com\u002Fsarthchawla\u002FSetupMyAI\u002Fblob\u002Fmain\u002Fpackages\u002Funiversal\u002Fskills\u002Fmonitor-mr\u002FSKILL.md",[],[184,192,193,180,194,195,49],"mr","monitor mr","shared","ci"]