feat(sdd): adopt review-issue, review-pr, implement skills to the SDD workflow
review-issue becomes the SDD spec-review gate (adds the requirements engineer, pairs each .claude persona identity with its .specify checklist, EARS/REQ-NNN aware). review-pr verifies the diff against the constitution and the spec's REQ-NNN traceability. implement reads the spec artifacts, plans from tasks.md, ties tasks to REQ-NNN, and keeps the RTM and generated API types in sync. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,13 +1,15 @@
|
||||
---
|
||||
name: review-issue
|
||||
description: Multi-persona feature issue review. Each persona from .claude/personas/ reads the issue and posts constructive feedback as a separate Gitea comment.
|
||||
description: Multi-persona SDD spec review of a Gitea feature issue. Each persona pairs its .claude/personas/ identity with its .specify/personas/ checklist, walks it PASS/FAIL/QUESTION against the EARS requirements, and posts findings as a separate Gitea comment before implementation starts.
|
||||
---
|
||||
|
||||
# Multi-Persona Feature Issue Review
|
||||
# Multi-Persona Spec Review (SDD)
|
||||
|
||||
You will perform a thorough multi-persona review of the given Gitea issue URL and post each persona's constructive feedback as a **separate comment** on the issue.
|
||||
|
||||
Personas give **advisory input only** — no blocking, no verdicts. The goal is to surface blind spots, risks, and improvement ideas before implementation starts.
|
||||
You will perform a thorough multi-persona **spec review** of the given Gitea feature issue and
|
||||
post each persona's findings as a **separate comment** on the issue. This is the SDD
|
||||
spec-review gate (step 4 of [SPEC_DRIVEN_DEVELOPMENT.md](../../../SPEC_DRIVEN_DEVELOPMENT.md)):
|
||||
the goal is to catch ambiguity, missing requirements, and blind spots **before** any code is
|
||||
written, while the cost of change is a sentence edit.
|
||||
|
||||
## Argument
|
||||
|
||||
@@ -19,57 +21,83 @@ Parse it to extract:
|
||||
- `repo` — e.g. `familienarchiv`
|
||||
- `issue_number` — e.g. `161`
|
||||
|
||||
## Step 1 — Gather Issue Context
|
||||
## Step 0 — Load the SDD ground truth
|
||||
|
||||
Before reading the issue, read the rules every persona reviews against:
|
||||
- [`.specify/constitution.md`](../../../.specify/constitution.md) — the non-negotiable rules
|
||||
- [`.specify/AGENTS.md`](../../../.specify/AGENTS.md) — stack, constraints, workflow
|
||||
- [`.specify/templates/feature-spec.md`](../../../.specify/templates/feature-spec.md) — the expected spec shape and the five EARS patterns
|
||||
- The worked example [`.specify/features/_example/spec.md`](../../../.specify/features/_example/spec.md) — what "good" looks like
|
||||
|
||||
## Step 1 — Gather issue context
|
||||
|
||||
Use the Gitea MCP tools to collect:
|
||||
1. The full issue (title, body, labels, milestone, assignees) via `issue_read`
|
||||
2. All existing comments on the issue via `issue_read` — read them so personas don't repeat what's already been said
|
||||
2. All existing comments — read them so personas don't repeat what's already been said
|
||||
|
||||
Read everything before starting any review.
|
||||
|
||||
## Step 2 — Read Every Persona
|
||||
## Step 2 — Read every persona (identity + checklist)
|
||||
|
||||
Read all six persona files from `.claude/personas/`:
|
||||
- `developer.md` → Felix Brandt
|
||||
- `architect.md` → architect persona
|
||||
- `tester.md` → tester persona
|
||||
- `security_expert.md` → security persona
|
||||
- `ui_expert.md` → UI/UX persona
|
||||
- `devops.md` → DevOps persona
|
||||
Each persona is its **character identity** (`.claude/personas/`) **plus** its **SDD spec-review
|
||||
checklist** (`.specify/personas/`). Adopt the voice from the former; gate the spec with the latter.
|
||||
|
||||
## Step 3 — Write Each Review
|
||||
| Persona | Identity (`.claude/personas/`) | Checklist (`.specify/personas/`) |
|
||||
|---|---|---|
|
||||
| Requirements Engineer | `req_engineer.md` | `requirements-engineer.md` |
|
||||
| Developer (Felix Brandt) | `developer.md` | `developer.md` |
|
||||
| Security (Nora "NullX" Steiner) | `security_expert.md` | `security.md` |
|
||||
| DevOps | `devops.md` | `devops.md` |
|
||||
| UI/UX | `ui_expert.md` | `ui-ux.md` |
|
||||
| Architect | `architect.md` | `architect.md` |
|
||||
|
||||
For each persona, fully adopt their identity, priorities, and thinking style as described in their persona file. Write feedback that:
|
||||
The tester lens (acceptance-criteria quality, edge cases) is carried by the Requirements
|
||||
Engineer checklist (testable, measurable criteria) — no separate tester comment at spec time.
|
||||
|
||||
- Is **constructive and forward-looking** — no blockers, no verdicts, no approval stamps
|
||||
- Asks clarifying questions the persona would genuinely want answered before or during implementation
|
||||
- Points out risks, edge cases, or gaps the persona sees from their domain
|
||||
- Offers concrete suggestions or alternative approaches where relevant
|
||||
- References the issue text specifically — don't write generic advice
|
||||
- Stays focused on what the persona would actually care about (e.g. Felix asks about test strategy and naming; the architect asks about layer boundaries and coupling; the security expert asks about auth, input validation, and data exposure; the tester asks about acceptance criteria and edge cases; the UI expert asks about interaction patterns and accessibility; DevOps asks about deployment, config, and observability)
|
||||
## Step 3 — Run each checklist against the spec
|
||||
|
||||
Format each comment in Markdown with a persona header, e.g.:
|
||||
For each persona, walk **every item** in its `.specify/personas/` checklist and assign
|
||||
**PASS / FAIL / QUESTION**, judged against the constitution and the issue text:
|
||||
|
||||
- **EARS-aware:** verify each requirement uses one of the five EARS patterns and carries a
|
||||
`REQ-NNN` id. The Requirements Engineer leads here; every persona flags missing
|
||||
Unwanted-behavior (`If …`) clauses in their domain (Security especially — a mutating
|
||||
endpoint with no `If` clause for unauthenticated/unauthorized access is an automatic FAIL).
|
||||
- **If the issue is not yet an SDD spec** (free-prose, no `REQ-NNN`, missing sections), the
|
||||
Requirements Engineer's primary finding is to restructure it using the feature-spec
|
||||
template, and other personas review what they can while noting the gap.
|
||||
- Reference the issue text specifically — quote the requirement or the missing section. No
|
||||
generic advice.
|
||||
|
||||
## Step 4 — Write and post each comment
|
||||
|
||||
Each persona posts a **separate** comment via the Gitea MCP `issue_write` tool, in the format
|
||||
its checklist's "Output format" section defines — a header, the checklist table, and a verdict:
|
||||
|
||||
```
|
||||
## 👨💻 Felix Brandt — Senior Fullstack Developer
|
||||
### 🔐 Security — Spec Review
|
||||
|
||||
### Questions & Observations
|
||||
...
|
||||
| # | Item | Status | Note |
|
||||
|---|------|--------|------|
|
||||
| 1 | All mutating endpoints have authn + authz `If` clauses | FAIL | REQ-004 POST has no 401 clause (CWE-...) |
|
||||
| 2 | ... | PASS | |
|
||||
|
||||
### Suggestions
|
||||
...
|
||||
**Verdict: CHANGES REQUESTED** — blocking FAIL: #1. Resolve before implementation.
|
||||
```
|
||||
|
||||
Keep each comment focused and scannable. Use bullet points. Avoid walls of text.
|
||||
Post all six comments. If a persona's checklist is entirely PASS, still post the table and a
|
||||
`Verdict: APPROVE` so the team knows the perspective was applied. Keep comments scannable.
|
||||
|
||||
## Step 4 — Post Comments
|
||||
These verdicts are a **pre-implementation gate**, not a PR merge gate: a `FAIL` means the
|
||||
issue/spec must be amended (per SDD step 5) before work starts. Fold the agreed fixes into
|
||||
the issue description (the issue body is the source of truth), then re-run this review with
|
||||
clean context rather than leaving a long comment thread.
|
||||
|
||||
Post each persona's feedback as a **separate comment** on the issue using the Gitea MCP `issue_write` tool.
|
||||
|
||||
Post all six comments. If a persona genuinely has nothing to add (rare), write a short "No concerns from my angle" with one sentence explaining what they checked — so the team knows that perspective was considered.
|
||||
|
||||
## Step 5 — Report Back
|
||||
## Step 5 — Report back
|
||||
|
||||
After all comments are posted, tell the user:
|
||||
- Which personas posted feedback
|
||||
- A brief summary of the most important cross-cutting themes (questions or risks that multiple personas flagged)
|
||||
- Each persona's verdict (APPROVE / CHANGES REQUESTED)
|
||||
- The consolidated list of blocking FAILs (these must be resolved before implementation)
|
||||
- Cross-cutting themes multiple personas flagged
|
||||
- Whether the issue is a well-formed SDD spec yet, or needs restructuring first
|
||||
- A reminder to mirror the agreed `REQ-NNN` rows into [`.specify/rtm.md`](../../../.specify/rtm.md)
|
||||
|
||||
Reference in New Issue
Block a user