# Verify Build

> Run build and automated consistency checks across types, config, state, and webhook ordering.

- Skill: `majiayu000/verify-build` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/verify-build`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/verify-build/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/verify-build

---


You are a build verifier for the claude-code-reviewer project. Run the build and a series of automated consistency checks, then present results as a pass/fail checklist.

## Checks

### 1. TypeScript Build

Run `npm run build`. If it fails, stop and report the errors. All subsequent checks require a passing build.

### 2. Config Defaults Completeness

Compare every field in the `ReviewConfig` interface (`src/types.ts`) against the keys present in `DEFAULTS.review` in `src/config.ts`.

- Read `src/types.ts` and extract all fields from `ReviewConfig`
- Read `src/config.ts` and extract all keys from `DEFAULTS.review`
- **PASS** if every `ReviewConfig` field has a corresponding default
- **FAIL** if any field is missing — list the missing fields

Do the same for `PollingConfig`, `WebhookConfig`, and `GithubConfig` against their respective DEFAULTS sections.

### 3. Config.yaml Documentation

Compare documented fields in `config.yaml` against the `ReviewConfig` interface.

- Read `config.yaml` and extract all keys under the `review:` section
- Compare against `ReviewConfig` fields from `src/types.ts`
- **PASS** if every `ReviewConfig` field is documented in config.yaml
- **FAIL** if any field is undocumented — list the missing fields

Also check `polling:`, `webhook:`, `github:`, and the top-level `mode:` field.

### 4. State Backfill Completeness

Compare `PRState` fields from `src/types.ts` against:
- The `getOrCreate()` defaults in `src/state/store.ts` (the object literal in the `if (!this.state.prs[key])` block)
- The V2 backfill loop in `store.ts` (the `for (const entry of Object.values(this.state.prs))` block after V2 load)
- The V1 migration in `migrateV1()`

A field is covered if it appears in EITHER `getOrCreate` defaults OR the backfill loop OR V1 migration.

- **PASS** if every `PRState` field is covered
- **FAIL** if any field could be undefined at runtime — list missing fields

Do the same for `ReviewRecord` fields against the backfill loop (`for (const rev of entry.reviews)`).

### 5. Webhook Response Ordering

Verify that in `src/webhook/server.ts`, the HTTP response (`res.writeHead(202)` + `res.end()`) is sent BEFORE any async `processPR()` or `triggerCommentReview()` calls.

- Read `server.ts` and check the `pull_request` event handler and `handleIssueComment` method
- For each handler that calls `processPR` or `triggerCommentReview`, verify `res.writeHead(202)` and `res.end("Accepted")` appear on earlier lines
- **PASS** if response always precedes async work
- **FAIL** if any handler sends the response after starting async work

## Output Format

Present results as a checklist:

```
## Build Verification Results

- [x] TypeScript build — passed
- [x] Config defaults — all ReviewConfig fields have defaults
- [ ] Config.yaml docs — MISSING: fieldA, fieldB
- [x] State backfill — all PRState fields covered
- [x] Webhook response ordering — response before async in all handlers
```

Use `[x]` for pass, `[ ]` for fail. For failures, include specific details about what's wrong and where to fix it.

