Use when generating or modifying any Spring Boot class — controllers, services, repositories, DTOs, mappers, or configuration. Enforces strict layer separation and prevents business logic from leaking across boundaries.
SkillScore92Maintained
Automatic
◆Coding pack
Last verified 9/1/2026
What it changes
Passed 23 of 25 test cases with the skill, and 4 of 25 without it.
Without skill16%
With skill92%
Checks it passed that the model alone missed
The DTOs are defined using Java records.
The controller contains no try-catch blocks.
The configuration class does not inject service beans.
and 24 more in the full report
19 fixed4 passed either way2 still failing0 broke
Pass-rate lift
+76 pp
Tokens
+47%
Agent turns
0%
Response time
-9%
Measured 9/1/2026v2 · latest is v423 of 25 cases passed with skill
Tokens, turns and time describe resource use, not a dollar price.
This benchmark measured an earlier version of the skill.
A newer attempt on gemini-3.8-flash on 10/21/2026 did not produce a publishable comparison (not comparable). The snapshot above is the previously measured run.
See it in action
One of 19 test cases the skill fixed. Same model, same prompt, with and without the skill.
1 of 19
Prompt
Write a method that converts a list of Order entities into OrderResponse DTOs. Use an explicit for loop with list iteration and manual element appending.
What was checked, without and with the skill
Checked
Without skill
With skill
The collection conversion uses stream mapping rather than a manual for loop.
Missed
Passed
case-13 · gemini-3.6-flash · 9/1/2026 · answers are capped and redacted
What's inside
The instructions your model reads when the skill loads.
SKILL.md149 lines4 files
Layered Architecture
Layer Rules
@RestController ← HTTP only. No business logic. No JPA entities in responses.
↓ DTOs
@Service ← All business logic lives here. Orchestrates repositories.
↓ Domain objects / Entities
@Repository ← Data access only. No business logic. Returns entities or projections.
↓ JPA / JDBC
Database
Calls ONE service method per endpoint — no orchestration in controllers
Never returns @Entity classes directly — always map to response DTOs
Never injects @Repository — always goes through a @Service
Exception handling via @ControllerAdvice, never try/catch in controllers
// ✅ GOOD
@PostMapping("/orders")
public ResponseEntity<OrderResponse> createOrder(@Valid @RequestBody CreateOrderRequest request) {
Order order = orderService.createOrder(request);
return ResponseEntity.status(HttpStatus.CREATED).body(OrderResponse.from(order));
}
// ❌ BAD — business logic in controller
@PostMapping("/orders")
public ResponseEntity<Order> createOrder(@RequestBody CreateOrderRequest request) {
if (request.getItems().isEmpty()) throw new RuntimeException("No items");
Order order = orderRepository.save(new Order(request)); // direct repo access
return ResponseEntity.ok(order); // returning entity
}
Service Layer
Contains all business logic, validation rules, and orchestration