Files
familienarchiv/.specify/templates/feature-spec.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

4.1 KiB
Raw Blame History

<Feature title — match the Gitea issue: "As a I want so ">

Context & Why

<Business motivation in 24 sentences: who needs this and why now.>

Constitution principles this feature depends on (see .specify/constitution.md):

  • § —

Related: <links to prior issues / ADRs>.

User Journey

<Plain-prose steps the user takes to get value, from the user's perspective — per COLLABORATING.md. Anything not in this journey is out of scope.>

Requirements

One requirement per line, each with a REQ-NNN id and one EARS pattern. Include the patterns the feature actually needs — do not force all five, but a mutating feature almost always needs at least one Event-driven and one Unwanted-behavior requirement.

  • REQ-001 (Ubiquitous) — The <system component> shall <always-true behavior>.
  • REQ-002 (Event-driven) — When <trigger / endpoint receives X>, the <system component> shall <response>.
  • REQ-003 (State-driven) — While <system is in state X>, the <system component> shall <behavior>.
  • REQ-004 (Optional-feature) — Where <the caller has Permission.X / a feature flag is set>, the <system component> shall <behavior>.
  • REQ-005 (Unwanted-behavior) — If <undesired condition, e.g. caller is unauthenticated / input invalid>, then the <system component> shall <safe response, e.g. return 401 / ErrorCode.X>.

Acceptance Criteria

One measurable criterion per REQ-NNN. Numbers, limits, status codes — never adjectives.

  • REQ-001 — <measurable, e.g. "the response always includes a non-null id (UUID)">.
  • REQ-002 — <measurable, e.g. "POST returns 201 and the persisted row within the same request">.
  • REQ-003 — .
  • REQ-004 — <measurable, e.g. "a caller without Permission.X receives 403 with ErrorCode.FORBIDDEN">.
  • REQ-005 — <measurable, e.g. "an unauthenticated request receives 401 and nothing is persisted">.

Out of Scope

  • <Explicit boundary statement — the nearest tempting scope creep, named and excluded.>
  • <…>

API / Contract Stub

<Inline OpenAPI stub. Name the new/changed paths, methods, request/response shapes, status codes, and @RequirePermission. Use the .specify/templates/api-contract-stub.md skeleton as a writing aid.>

Data Model Changes

<Entity/schema delta: new tables/columns, constraints, the next free Flyway V<n>, and the rollback note. Write "none" if not applicable.>

Security Considerations

<STRIDE categories touched (Spoofing/Tampering/Repudiation/Information disclosure/DoS/Elevation). For AI-agent/tool features, also ASTRIDE. Include an inline STRIDE table (use .specify/templates/threat-model.md) if the feature has a non-trivial attack surface.>

Open Questions

Each item is a BLOCKER until resolved. Empty this list before implementation starts.

  • — owner:
  • — owner:

Traceability

REQ-ID Task ID(s) Test ID(s) Status
REQ-001 Planned
REQ-002 Planned

<After approval, add one committed row per REQ-NNN to .specify/rtm.md with this issue's number. Fill Task/Test IDs as work progresses.>

Persona Review Results

Persona Status Key Findings Resolved
Requirements Engineer PENDING
Developer PENDING
Security PENDING
DevOps PENDING
UI/UX PENDING
Architect PENDING