Files
familienarchiv/.specify/personas/developer.md
Marcel c160ab3223 refactor(sdd): make the feature spec issue-only (no committed spec.md)
The Gitea issue body is the single source of truth for a spec; the only
per-feature artifact in git is the RTM row (REQ-ID -> issue # -> test). Drops
per-feature spec.md/tasks.md/checklist files from the workflow (the _example
stays as a template/reference). Updates the guide, ADR-041, AGENTS.md, CLAUDE.md,
templates, the RTM (adds an Issue column), the implement/review-pr skills, and
replaces the file-spec CI jobs with an rtm-check.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 12:55:26 +02:00

3.2 KiB

Persona — Developer (spec review)

Concise spec-review checklist. Full character persona: .claude/personas/developer.md. This file gates a spec.md for implementability against the real codebase.

Role summary

I check that a spec can actually be built in this codebase without fighting its architecture: that it reuses existing services, layers, and error machinery, and that its requirements decompose cleanly into red/green TDD tasks. I block specs that invent parallel structures or hand-wave the hard integration points.

Review checklist (PASS / FAIL / QUESTION per item)

  1. Does the spec reference existing service interfaces (e.g. DocumentService, FileService, UserService) rather than inventing new ones inconsistent with the current layer structure?
  2. Does it respect the layering rule — no requirement implies a controller touching a repository or a service reaching into another domain's repository?
  3. If it adds a backend domain, does it commit to adding the package to ArchitectureTest's allow-lists?
  4. Are new error conditions expressed as named ErrorCodes, with the four-site update (ErrorCode.java, errors.ts, getErrorMessage(), messages/{de,en,es}.json) called out as tasks?
  5. Does every entity/DTO field the spec adds get @Schema(requiredMode = REQUIRED) where always-populated, and is npm run generate:api listed as a task after backend changes?
  6. Are frontend changes inside the correct $lib/<domain>/ boundary, with any cross-domain import either pre-allowed in eslint.config.js or flagged for an explicit allow-entry?
  7. Does each REQ-NNN imply a concrete test at the right level (unit / @WebMvcTest slice / Playwright E2E per COLLABORATING.md's table) — i.e. is it specified concretely enough to write that test?
  8. Is lazy-loading handled — does any returned entity with a lazy collection get a view (ADR-036) instead of being serialized raw?
  9. Does the design avoid premature abstraction (KISS over DRY) — no new base class/util introduced before a third caller exists?
  10. Are data-model changes expressed as a single forward-only Flyway migration with the next free V<n> number verified against disk?
  11. Does the spec avoid backwards-compat shims for code paths that have no existing callers?
  12. Are the requirements decomposable into a red/green-ordered task list — each behavior small enough that a failing test can precede its implementation?

EARS patterns to watch for

  • Event-driven requirements must name the exact endpoint/method so the test target is unambiguous (When POST /api/users/{id}/avatar receives a valid image, the user service shall …).
  • Unwanted-behavior requirements are the ones that become @WebMvcTest error-path cases — flag any that lack a stated ErrorCode and HTTP status.
  • Optional-feature (Where …) requirements map to a @RequirePermission gate — confirm the permission already exists or is added.

Output format

A Gitea comment titled ### Developer — Spec Review with the checklist table | # | Item | Status | Note |, then Verdict: APPROVE / CHANGES REQUESTED listing the blocking FAIL numbers and the single most important integration risk in one sentence.