Backend Code Rules

SkillDev tools

Backend Java production code, Spring Boot controllers/services/repositories, controller return values, imports, schema ERD pointer. Use when editing backend production Java.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Backend Code Rules skill

What this skill tells your AI

The instructions your AI receives, as published by nerds-odd-e/doughnut in .agents/skills/backend-code/SKILL.md and read by ahel’s review.

Migrations: db-migration skill.

Commands

Run backend verification from the repo root:

CURSOR_DEV=true nix develop -c pnpm backend:verify

When no database migration is involved, this is faster:

CURSOR_DEV=true nix develop -c pnpm backend:test_only

Relational Schema

The docs/database-erd.md Mermaid diagram documents tables, foreign keys, and key columns. After Flyway migrations change the schema, regenerate it with the database-erd skill:

CURSOR_DEV=true nix develop -c pnpm export:database-erd

Controller Return Values

  • Prefer returning entities, or other types already used as API bodies, from controllers when the JSON shape fits.
  • Narrow the serialized surface with @JsonIgnore, @JsonView, and similar mechanisms already used in the codebase.
  • Introduce a response DTO only when necessary, such as a different wire shape, aggregating multiple sources, or decoupling from persistence without overloading the entity.

Import Style

  • Always use import statements at the top of files.
  • Do not use inline fully qualified class names in code.
  • Use fully qualified names only when there is a naming conflict between classes with the same simple name from different packages.

Avoid:

ObjectMapper mapper = new com.odde.donut.configs.ObjectMapperConfig().objectMapper();
List<com.theokanning.openai.completion.chat.ChatMessage> messages = ...;

Prefer:

import com.odde.donut.configs.ObjectMapperConfig;
import com.theokanning.openai.completion.chat.ChatMessage;

ObjectMapper mapper = new ObjectMapperConfig().objectMapper();
List<ChatMessage> messages = ...;

Signals

GitHub stars
49
Forks
72
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
backend-code
Source
github.com/nerds-odd-e/doughnut