# Review

> Per-BUILD-task reviewer: runs §1 static + §3 functional against REVIEW_RULE, writes the paired REVIEW-NNN.md.

- Skill: `asgard-ai-platform/review` (Agent Skill)
- Install (CLI): `npx skillmds@latest add asgard-ai-platform/review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/asgard-ai-platform/review/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: asgard-ai-platform (https://skillmd.com/u/asgard-ai-platform)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/asgard-ai-platform/review

---


# Review Skill

## Activation Contract

### Use this skill when

- Running `/review BUILD-NNN` to review a specific BUILD task
- Running `/review all` to review every BUILD task with Status = `done` in `requirements/tasks/_index.md`

### Do NOT use for

- Applying fixes — this skill reports findings only; fixes belong to the BUILD task
- Visual comparison against design references — that is the developer's own practice (see CLAUDE.md §開發與驗證流程); it is not part of this review

---

## Execution

### Step 1: Read configuration

Read `requirements/tasks/_index.md` Config block and extract `SPEC_DIR` (the directory where BUILD/REVIEW task files live; typically `requirements/tasks/`).

### Step 2: Resolve BUILD tasks in scope

| Invocation          | Scope                                                       |
| ------------------- | ----------------------------------------------------------- |
| `/review BUILD-NNN` | [BUILD-NNN]                                                 |
| `/review all`       | all Task Queue rows matching `BUILD-*` with Status = `done` |

### Step 3: For each BUILD task in scope

#### 3a. Read Coverage

Open `{SPEC_DIR}/BUILD-NNN.md`, read `## Coverage`:

- Use Cases: [list or `—`]
- Files: [list of `.tsx` / `.ts` paths]

#### 3b. Check for unfinished BUILD

If either `Coverage.Files` or `Coverage.Use Cases` still contains the placeholder token `[filled during build]`, **stop immediately** and report:

```
BLOCKER: BUILD-NNN is unfinished — Coverage still shows [filled during build].
Run the BUILD task to completion before invoking /review.
```

Do not proceed to §1 or §3.

#### 3c. Determine which sections to run

| Section                  | Condition                |
| ------------------------ | ------------------------ |
| §1 Static Code Review    | Always                   |
| §3 Functional Validation | Coverage.Use Cases ≠ `—` |

This project's review procedure has exactly two sections: §1 and §3.

#### 3d. Run §1 — Static Code Review (always)

Follow `REVIEW_RULE.md §1` procedure in full.

**Scope for grep checks (§1.1 / §1.2):** restrict to the directories / files listed in `Coverage.Files`. If no explicit directory is listed, fall back to `src/`.

**`tsc` and `lint` always run project-wide** (cannot be scoped per file):

```bash
npx tsc --noEmit
npm run lint:check
```

Write results under `## §1 Static Code Review` in `REVIEW-NNN.md`:

- For each §1.1 checklist item: mark ✅ / ❌
- For ❌: include file path, line number, and rule reference
- Paste all §1.2 grep outputs verbatim (empty = ✅, any match = ❌)
- Paste `tsc` / `lint:check` outcomes

If any ❌ is found → mark as BLOCKER in `## Findings` and do not mark REVIEW-NNN done until resolved.

#### 3e. Run §3 — Functional Validation (if Coverage.Use Cases ≠ `—`)

Follow `REVIEW_RULE.md §3` procedure in full.

**Preferred harness:** if an e2e spec exists for the changed routes, run:

```bash
npm run test:e2e
```

(Requires `e2e/.env.local` filled — see `CLAUDE.local.md` for `E2E_USERNAME`, `E2E_PASSWORD`, `E2E_WORKSPACE_ID`.)

If no matching e2e spec exists, manually validate each `R#` acceptance criterion in the browser against the running dev server (`npm run dev -- -p <本地 dev port，見 CLAUDE.local.md>`).

Write results under `## §3 Functional Validation` in `REVIEW-NNN.md` using the R# Result Matrix from `_review_template.md`.

If any R# Fails → report BLOCKER; describe [actual behavior] vs [expected behavior].

If Coverage.Use Cases = `—`, write under `## §3 Functional Validation`:

```
_skipped — Coverage.Use Cases is `—`_
```

### Step 4: Create / fill REVIEW-NNN.md

If `REVIEW-NNN.md` does not yet exist, copy `requirements/tasks/_review_template.md` to `{SPEC_DIR}/REVIEW-NNN-<slug>.md` and fill the Meta block (Task ID, Status: `in-progress`, BUILD Task, reviewed commit, reviewed branch).

Fill each section with findings from Steps 3d–3e.

On completion:

- Update `Status: in-progress → done` (only if zero BLOCKERs remain)
- Fill `## Execution Log` with a one-line summary per section (sections run, pass/fail counts, final status)

### Step 5: Update `_index.md`

Mark `REVIEW-NNN` as `done` in the Task Queue.

---

## Common mistakes / gotchas

- **Only §1 and §3**: this project's review has exactly two sections. Do not add visual or design-comparison steps.
- **Scope §1 greps to Coverage.Files**: do not scan unrelated source files. `tsc` and `lint:check` still run project-wide.
- **Unfinished BUILD**: if `[filled during build]` is present anywhere in Coverage, the BUILD is not done — report BLOCKER and stop.
- **Pairing**: REVIEW-003 pairs with BUILD-003. Confirm the BUILD task ID from `## Meta - BUILD Task` in the REVIEW file.
- **lint:check not lint**: use `npm run lint:check` (read-only) for review; `npm run lint` has auto-fix side effects.
- **Dev port**: the local dev server port is per-repo personal config; see `CLAUDE.local.md` (e.g., `npm run dev -- -p <port>`).

