[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M751ESZVBENKT1097MS6AWDD":3,"skill-same:01M751ESZVBENKT1097MS6AWDD":57},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":6,"ownerHtmlUrl":39,"ownerBlogUrl":40,"ownerDescription":41,"updatedAt":42,"install":43,"resources":56},"01M751ESZVBENKT1097MS6AWDD","spring-controller",null,"Generate a Spring Boot @RestController with matching DTOs, mappers, @ControllerAdvice handler, and unit tests following hexagonal architecture.","review-bench\u002Federcnj_ia-dev-environment","review-bench","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F286778065?v=4","01M7517F9NTEPDZDAXJBR30FWT","ReviewBench","01M7517FAC9F4P7TGWCNJ8VYVW",0,"MIT","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fresources\u002Ftargets\u002Fclaude\u002Fskills\u002Fcore\u002Fdev\u002Fspring-controller\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: spring-controller\ndescription: \"Generate a Spring Boot @RestController with matching DTOs, mappers, @ControllerAdvice handler, and unit tests following hexagonal architecture.\"\nvisibility: public\nmodel: sonnet\nrequires-capabilities: [web.spring.boot]\nallowed-tools: [Read, Write, Edit, Bash, Skill]\n---\n\n# Skill: Spring Controller Generator\n\n## Purpose\n\nGenerates a complete Spring Boot inbound adapter (controller) layer following the hexagonal architecture pattern established by this project. Produces:\n\n1. `@RestController` class with CRUD or custom endpoints\n2. Request\u002FResponse DTOs (`record` types with `@RegisterReflectionForBinding`)\n3. Static mapper class (`DtoMapper`)\n4. `@RestControllerAdvice` exception handler (or extends existing)\n5. Unit tests for controller and mapper\n\n## Triggers\n\n- `\u002Fspring-controller \u003CResourceName> [--operations GET,POST,DELETE]` — generate full controller for a resource\n- `\u002Fspring-controller \u003CResourceName> --crud` — generate standard CRUD (GET list, GET by id, POST, PUT, DELETE)\n- `\u002Fspring-controller \u003CResourceName> --read-only` — generate GET endpoints only\n\n## Parameters\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `ResourceName` | Yes | PascalCase resource name (e.g., `Merchant`, `Transaction`) |\n| `--operations` | No | Comma-separated HTTP methods to generate (default: all) |\n| `--crud` | No | Shorthand for GET list, GET by id, POST, PUT, DELETE |\n| `--read-only` | No | Shorthand for GET list and GET by id only |\n| `--path` | No | Override API path (default: `\u002Fapi\u002Fv1\u002F{resource-name-plural}`) |\n| `--port` | No | Port interface name (default: `{ResourceName}ManagementPort`) |\n\n## Workflow\n\n### Step 1 — Read Project Context\n\nRead existing conventions:\n- `knowledge\u002Fstack-patterns\u002Fspring\u002Findex.md` — Spring Boot patterns\n- `knowledge\u002Flayer-templates.md` — Layer template patterns\n- `knowledge\u002Farchitecture-hexagonal.md` — Hexagonal architecture conventions\n- Existing controller in `src\u002Fmain\u002Fjava\u002F**\u002Fadapter\u002Finbound\u002F` for naming conventions\n\n### Step 2 — Generate DTOs\n\nCreate request and response records following Spring patterns:\n\n```java\n\u002F\u002F src\u002Fmain\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}Request.java\n@RegisterReflectionForBinding\npublic record {ResourceName}Request(\n    @NotBlank @Size(max = N) String field1,\n    @NotNull Type field2\n) {}\n\n\u002F\u002F src\u002Fmain\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}Response.java\n@RegisterReflectionForBinding\npublic record {ResourceName}Response(Long id, String field1, Type field2) {}\n```\n\n### Step 3 — Generate Mapper\n\n```java\n\u002F\u002F src\u002Fmain\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}DtoMapper.java\npublic final class {ResourceName}DtoMapper {\n    private {ResourceName}DtoMapper() {}\n\n    public static {DomainType} toDomain({ResourceName}Request request) { ... }\n    public static {ResourceName}Response toResponse({DomainType} domain) { ... }\n}\n```\n\n### Step 4 — Generate Controller\n\nFollow `knowledge\u002Fstack-patterns\u002Fspring\u002Findex.md` §4 RestController pattern:\n\n```java\n\u002F\u002F src\u002Fmain\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}Controller.java\n@RestController\n@RequestMapping(\"{path}\")\npublic class {ResourceName}Controller {\n    \u002F\u002F Constructor injection of port\n    \u002F\u002F Endpoints per --operations\n}\n```\n\n### Step 5 — Generate\u002FUpdate Exception Handler\n\nCheck if `GlobalExceptionHandler` exists in `adapter\u002Finbound\u002Frest\u002F`:\n- If exists: add missing `@ExceptionHandler` methods for domain exceptions\n- If not exists: generate new `GlobalExceptionHandler` following §5 pattern\n\n### Step 6 — Generate Tests\n\n```java\n\u002F\u002F src\u002Ftest\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}ControllerTest.java\n@WebMvcTest({ResourceName}Controller.class)\nclass {ResourceName}ControllerTest {\n    @Autowired MockMvc mockMvc;\n    @MockBean {ResourceName}ManagementPort port;\n\n    \u002F\u002F One test per endpoint per scenario (happy path + error paths)\n}\n```\n\n## Output Checklist\n\n- [ ] DTOs are records with `@RegisterReflectionForBinding`\n- [ ] Validation annotations on all request fields (`@NotBlank`, `@NotNull`, `@Size`, etc.)\n- [ ] Mapper is a final class with private constructor (static methods only)\n- [ ] Controller uses constructor injection (no `@Autowired` on fields)\n- [ ] HTTP status codes correct: 200 GET, 201 POST, 204 DELETE\u002FPUT with no body\n- [ ] `@ExceptionHandler` present for each domain exception type\n- [ ] Tests cover: success path, not found (404), conflict (409), validation failure (400)\n- [ ] Tests use `MockMvc` with `@WebMvcTest` (not `@SpringBootTest`)\n\n## Knowledge Pack References\n\n- `knowledge\u002Fstack-patterns\u002Fspring\u002Findex.md` — Spring Boot patterns (§4 RestController, §5 ControllerAdvice)\n- `knowledge\u002Flayer-templates.md` — Layer template patterns\n- `knowledge\u002Farchitecture-hexagonal.md` — Hexagonal architecture\n- `knowledge\u002Fcoding-standards\u002Fcoding-conventions.md` — Naming conventions\n","# Skill: Spring Controller Generator\n\n## Purpose\n\nGenerates a complete Spring Boot inbound adapter (controller) layer following the hexagonal architecture pattern established by this project. Produces:\n\n1. `@RestController` class with CRUD or custom endpoints\n2. Request\u002FResponse DTOs (`record` types with `@RegisterReflectionForBinding`)\n3. Static mapper class (`DtoMapper`)\n4. `@RestControllerAdvice` exception handler (or extends existing)\n5. Unit tests for controller and mapper\n\n## Triggers\n\n- `\u002Fspring-controller \u003CResourceName> [--operations GET,POST,DELETE]` — generate full controller for a resource\n- `\u002Fspring-controller \u003CResourceName> --crud` — generate standard CRUD (GET list, GET by id, POST, PUT, DELETE)\n- `\u002Fspring-controller \u003CResourceName> --read-only` — generate GET endpoints only\n\n## Parameters\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `ResourceName` | Yes | PascalCase resource name (e.g., `Merchant`, `Transaction`) |\n| `--operations` | No | Comma-separated HTTP methods to generate (default: all) |\n| `--crud` | No | Shorthand for GET list, GET by id, POST, PUT, DELETE |\n| `--read-only` | No | Shorthand for GET list and GET by id only |\n| `--path` | No | Override API path (default: `\u002Fapi\u002Fv1\u002F{resource-name-plural}`) |\n| `--port` | No | Port interface name (default: `{ResourceName}ManagementPort`) |\n\n## Workflow\n\n### Step 1 — Read Project Context\n\nRead existing conventions:\n- `knowledge\u002Fstack-patterns\u002Fspring\u002Findex.md` — Spring Boot patterns\n- `knowledge\u002Flayer-templates.md` — Layer template patterns\n- `knowledge\u002Farchitecture-hexagonal.md` — Hexagonal architecture conventions\n- Existing controller in `src\u002Fmain\u002Fjava\u002F**\u002Fadapter\u002Finbound\u002F` for naming conventions\n\n### Step 2 — Generate DTOs\n\nCreate request and response records following Spring patterns:\n\n```java\n\u002F\u002F src\u002Fmain\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}Request.java\n@RegisterReflectionForBinding\npublic record {ResourceName}Request(\n    @NotBlank @Size(max = N) String field1,\n    @NotNull Type field2\n) {}\n\n\u002F\u002F src\u002Fmain\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}Response.java\n@RegisterReflectionForBinding\npublic record {ResourceName}Response(Long id, String field1, Type field2) {}\n```\n\n### Step 3 — Generate Mapper\n\n```java\n\u002F\u002F src\u002Fmain\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}DtoMapper.java\npublic final class {ResourceName}DtoMapper {\n    private {ResourceName}DtoMapper() {}\n\n    public static {DomainType} toDomain({ResourceName}Request request) { ... }\n    public static {ResourceName}Response toResponse({DomainType} domain) { ... }\n}\n```\n\n### Step 4 — Generate Controller\n\nFollow `knowledge\u002Fstack-patterns\u002Fspring\u002Findex.md` §4 RestController pattern:\n\n```java\n\u002F\u002F src\u002Fmain\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}Controller.java\n@RestController\n@RequestMapping(\"{path}\")\npublic class {ResourceName}Controller {\n    \u002F\u002F Constructor injection of port\n    \u002F\u002F Endpoints per --operations\n}\n```\n\n### Step 5 — Generate\u002FUpdate Exception Handler\n\nCheck if `GlobalExceptionHandler` exists in `adapter\u002Finbound\u002Frest\u002F`:\n- If exists: add missing `@ExceptionHandler` methods for domain exceptions\n- If not exists: generate new `GlobalExceptionHandler` following §5 pattern\n\n### Step 6 — Generate Tests\n\n```java\n\u002F\u002F src\u002Ftest\u002Fjava\u002F{package}\u002Fadapter\u002Finbound\u002Frest\u002F{ResourceName}ControllerTest.java\n@WebMvcTest({ResourceName}Controller.class)\nclass {ResourceName}ControllerTest {\n    @Autowired MockMvc mockMvc;\n    @MockBean {ResourceName}ManagementPort port;\n\n    \u002F\u002F One test per endpoint per scenario (happy path + error paths)\n}\n```\n\n## Output Checklist\n\n- [ ] DTOs are records with `@RegisterReflectionForBinding`\n- [ ] Validation annotations on all request fields (`@NotBlank`, `@NotNull`, `@Size`, etc.)\n- [ ] Mapper is a final class with private constructor (static methods only)\n- [ ] Controller uses constructor injection (no `@Autowired` on fields)\n- [ ] HTTP status codes correct: 200 GET, 201 POST, 204 DELETE\u002FPUT with no body\n- [ ] `@ExceptionHandler` present for each domain exception type\n- [ ] Tests cover: success path, not found (404), conflict (409), validation failure (400)\n- [ ] Tests use `MockMvc` with `@WebMvcTest` (not `@SpringBootTest`)\n\n## Knowledge Pack References\n\n- `knowledge\u002Fstack-patterns\u002Fspring\u002Findex.md` — Spring Boot patterns (§4 RestController, §5 ControllerAdvice)\n- `knowledge\u002Flayer-templates.md` — Layer template patterns\n- `knowledge\u002Farchitecture-hexagonal.md` — Hexagonal architecture\n- `knowledge\u002Fcoding-standards\u002Fcoding-conventions.md` — Naming conventions\n",{"name":5,"model":24,"visibility":25,"description":7,"allowed-tools":26,"requires-capabilities":32},"sonnet","public",[27,28,29,30,31],"Read","Write","Edit","Bash","Skill",[33],"web.spring.boot","main","952a630c6f38d193a349d86fa18db1de8843e837","src\u002Fmain\u002Fresources\u002Ftargets\u002Fclaude\u002Fskills\u002Fcore\u002Fdev\u002Fspring-controller",1,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment","https:\u002F\u002Fgithub.com\u002Freview-bench","https:\u002F\u002Freview-bench.ai","An open benchmark for AI code review.","2026-10-27 06:56:37",{"source":8,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add review-bench\u002Federcnj_ia-dev-environment --skill spring-controller",{"tool":49,"command":50},"bunx","bunx skills add review-bench\u002Federcnj_ia-dev-environment --skill spring-controller",{"tool":52,"command":53},"pnpm","pnpm dlx skills add review-bench\u002Federcnj_ia-dev-environment --skill spring-controller","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fresources\u002Ftargets\u002Fclaude\u002Fskills\u002Fcore\u002Fdev\u002Fspring-controller\u002FSKILL.md",true,[],[58,65,72,79,86,93],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":19},"01M757M8J48TQ1Y3X25GSJBXAS","x-parallel-eval","Detects and classifies file-collision risks between work units (tasks, stories, or epic phases) before parallel execution. Reads ## File Footprint blocks produced by x-task-plan \u002F x-story-plan, applies the parallelism-heuristics knowledge pack (hard \u002F regen \u002F soft categories + hotspot overrides), and emits a collision matrix + serialization recommendation in Markdown (default) or JSON.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fx-parallel-eval\u002FSKILL.md",[],[],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M757M57XMR9546S69466HDWT","parallelism-heuristics","Canonical catalog of file-collision heuristics for parallel task, story, and epic execution. Defines the File Footprint block format, the three Conflict Categories (hard \u002F regen \u002F soft), a hotspot list of high-contention paths, and the degrade-with-warning policy. Consumed by x-task-plan, x-story-plan, x-epic-map, x-parallel-eval, and x-dev-*-implement.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fparallelism-heuristics\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":19},"01M757M11SZ8P1VCQABT08QVYA","x-watch-pr-ci","Polls a PR's CI checks and Copilot review status, blocking until checks complete or timeout. Returns one of 8 stable exit codes (SUCCESS=0, CI_PENDING_PROCEED=10, CI_FAILED=20, TIMEOUT=30, PR_ALREADY_MERGED=40, NO_CI_CONFIGURED=50, PR_CLOSED=60, PR_NOT_FOUND=70). Writes a versioned state-file for session resume.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002Fplatform-claude-code\u002F.claude\u002Fskills\u002Fx-watch-pr-ci\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M757KW53K8KFPGADFB4PH949","x-validate-docs","Documentation freshness gate: validates 6 dimensions (readme, api-specs, grpc-proto, adr, skill-docs, system-architecture) against code changes in a PR. Stack-aware — only validates targets declared\u002Fauto-detected from ProjectConfig.documentation.targets. Returns exit non-zero on staleness; produces structured report.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002Fplatform-claude-code\u002F.claude\u002Fskills\u002Fx-validate-docs\u002FSKILL.md",[],[],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M757KQZHSA10MKC0CR571D60","x-update-system-architecture","Incrementally updates docs\u002Farchitecture\u002Fsystem.md after an epic completes. Appends new entries to the Decision Log (§11) using x-internal-write-report --append (dedup by ## ID: marker) and surgically inserts component\u002Fintegration changes into sections 1-10 via Edit. Idempotent: re-running with the same epic produces a byte-identical system.md.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002Fplatform-claude-code\u002F.claude\u002Fskills\u002Fx-update-system-architecture\u002FSKILL.md",[],[],{"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":19},"01M757KKBT5Q1SVF8DMJBVF46M","x-update-architecture","Incrementally updates the service architecture document with changes from architecture plans. Adds new components, integrations, flows, and ADR references without rewriting existing content. Use after implementation to keep architecture documentation current.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002Fplatform-claude-code\u002F.claude\u002Fskills\u002Fx-update-architecture\u002FSKILL.md",[],[]]