# Crowi Fix

> バグ報告・小修正のための軽量ワークフロー。spec 不要。再現(失敗するテスト)を先に作り、 systematic-debugging で根本原因を特定してから直す。ゲート(type-check / test / lint)→ codex 1 パスレビュー → commit。設計判断が要る規模なら crowi-design / crowi-feature へ誘導。 キーワード: fix, バグ, 修正, bug, 不具合, repro, 直して, 壊れてる

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

---


# Crowi Fix (repro-first の軽量バグ修正)

「壊れているものを直す」ための最短経路。crowi-feature の planner/レビューループは
重すぎ、アドホックだと再現なし・根本原因なしの推測修正が混ざる — その中間を定型化する。

## crowi-feature との使い分け

| 条件 | 使うもの |
|---|---|
| 挙動が壊れている・期待とのズレが明確・設計判断不要 | **crowi-fix** |
| 新しい挙動を足す / 契約・スキーマ変更を伴う / 設計判断あり | crowi-feature(必要なら crowi-design から) |
| 修正方針に複数案があり trade-off 判断が要る | いったん止まってユーザーに確認(勝手に選ばない) |

途中で「設計判断が要る」と気づいたら、進めずにその時点で報告して切り替える。

## ワークフロー

### Step 1: 再現(repro-first)

- **修正より先に、失敗するテストを書く**(api は jest + supertest + mongodb-memory-server)。
  「バグが直るとこのテストが green になる」が完了の定義。
- テストで再現しづらい UI バグ: 再現手順を記録し、クリティカルフロー
  (feature-planner.md の表)に該当し小さく書けるなら `packages/e2e/tests/` に足す(無理はしない)。
- **再現できないバグは直さない** — 推測修正は禁止。再現条件をユーザーに確認して止まる。

### Step 2: 根本原因の特定(systematic-debugging)

症状 → 仮説 → 検証を繰り返し、**根本原因を file:line で特定してから**修正に入る。
対症療法(症状を隠すだけの分岐)を書かない。

### Step 3: 修正 + ゲート

- 最小 diff。関係ないリファクタを混ぜない。
- ゲート: `pnpm --filter @crowi/api type-check`(web を触ったら +web)/
  該当テスト(Step 1 のテスト含む)/ `pnpm lint`(errors=0)/
  契約を触ったら `pnpm --filter @crowi/api-contract build` + `pnpm check:openapi`。

### Step 4: codex 1 パスレビュー(fix or drop)

```bash
mkdir -p .reviews/codex-runs/fix-<topic>
# prompt: 「git status --porcelain + git diff HEAD で修正を取得し(untracked は直接読む)、
#          退行・境界・並行の観点で敵対レビューせよ」+ FINDINGS schema (crowi-review と同形)
bash .claude/scripts/codex-run.sh --sandbox read-only --tier terra \
  --prompt-file .reviews/codex-runs/fix-<topic>/prompt.md \
  --schema-file .reviews/codex-runs/fix-<topic>/schema.json \
  --out .reviews/codex-runs/fix-<topic>/out.json --label fix-<topic>
```

- 重い 3 lens は使わない(1 パスのみ)。
- **findings は「直すか捨てる」の二択**: 自分でコードに当てて裏取りし、正しければ
  その場で直してゲート再走。誤り・過大なら捨てる(報告に 1 行)。
  **どこかへの退避は禁止**(fix or drop — 退避先は存在しない)。
- exit 2(codex 不可)/ exit 3(出力が不正 — codex が exit 0 で何も書かなかった場合もここに来る)
  なら skip して報告(レビュー無しで止めない)。どちらも fix の進行を止めない。

### Step 5: commit

- `fix(<scope>): <what>` + 本文に root cause を 1-3 行。テストは同 commit か
  `test(<scope>)` 分割(diff サイズで判断)。
- **ユーザー可視のバグ修正なら changeset(patch)を追加**。内部のみなら不要。
- main 直でも worktree でも可。**main 直の場合は commit 前に main write lock を取得し
  commit 後に解放**(CLAUDE.md「main write lock」参照)。worktree の場合、完了後は
  `/crowi-complete-feature`(task ファイル無し → synthesize が signal を立てる — 既存互換)。
  **push しない**。

## 鉄則

- 再現なしに直さない / 根本原因なしに直さない
- レビュー指摘は **fix or drop**(退避先は存在しない)
- 設計判断が要ると気づいたら勝手に進めず crowi-design / ユーザーへ
- push はユーザー指示待ち

