con un clic
i-dev-final-check
dev workflow 向けの最終チェック。PR 前に品質ゲート、docs 整合、設計書昇格、Issue 更新をまとめて確認する。
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
dev workflow 向けの最終チェック。PR 前に品質ゲート、docs 整合、設計書昇格、Issue 更新をまとめて確認する。
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
設計書(draft/design/)に基づき、TDD(テスト駆動開発)アプローチを用いて機能を実装する。
実装完了後の成果物に対し、設計整合性とコード品質の観点から厳格なレビューを実施する
Issue 作成後・workflow 起動前に人間が明示起動する要件 interview。one-way door を含みうる重要な Issue で、未決の decision tree を 1 問ずつ推奨案付きで確認し、決定事項と provenance を Issue に固定するときだけ使用する。軽微な Issue や workflow 実行中には自動起動しない。
第2層のインシデント調査レビュー収束サイクルを 1 コマンドで手動起動する slash command wrapper。kaji run .kaji/wf/official/incident.yaml <incident_issue_id> を Bash 経由で起動し、exit code を verdict に縮約する。
Issue要件に基づき、draft/design/に設計書を作成する。worktree内での作業が前提。
ワークフローを手動実行して検証し、失敗時は継続せず原因を調査して Issue に記録する。成功時も気づきや詰まりどころを Issue に記録する。
| description | dev workflow 向けの最終チェック。PR 前に品質ゲート、docs 整合、設計書昇格、Issue 更新をまとめて確認する。 |
| name | i-dev-final-check |
dev workflow の PR 前最終ゲート。 前段で作られた証跡を集約し、必要なら docs 更新や設計書昇格を行ったうえで、PR に進めるか判定する。
| タイミング | このスキルを使用 |
|---|---|
/issue-review-code または /issue-verify-code で Approve 後 | ✅ 必須 |
| dev workflow の PR 作成前 | ✅ 必須 |
ワークフロー内の位置: implement → review-code → i-dev-final-check → i-pr → close
常に注入される変数:
| 変数 | 型 | 説明 |
|---|---|---|
issue_id | str | 正規化済み Issue ID(GitHub 数値または local ID) |
issue_ref | str | 人間可読の Issue 参照(GitHub では #<issue_id>、local では bare ID) |
step_id | str | 現在のステップ ID |
$ARGUMENTS = <issue_id>
コンテキスト変数 issue_id が存在すればそちらを使用。
なければ $ARGUMENTS の第1引数を issue_id として使用。
issue_ref はハーネス経由ではプロンプトに自動注入される(prompt.py 側で provider 別に整形)。手動実行時は issue_id から導出する: GitHub 数値 ID なら #<issue_id>、local-* 形式なら bare ID(# を付けない)。
docs/README.md### ワークフロー完了後の確認項目 を除く充足状態を更新する
7.5. 設計書を Issue 本文の NOTE ブロック直下に添付するkaji issue view [issue_id] --comments
以下の完了報告コメントが存在するか確認する:
| ステップ | 期待するコメント | 必須の内容 |
|---|---|---|
issue-design | 「設計書作成完了」 | 設計書パス、テスト戦略、影響ドキュメント |
issue-review-design | 「設計レビュー結果」 | Approve / Changes Requested 判定 |
issue-fix-design → issue-verify-design | (経由した場合のみ)「修正確認結果」 | Approve 判定 |
issue-implement | 「実装完了報告」 | pytest 出力(S/M/L 結果)、品質チェック結果 |
issue-review-code | 「コードレビュー結果」 | Approve / Changes Requested 判定、独立テスト実行結果 |
issue-fix-code → issue-verify-code | (経由した場合のみ)「修正確認結果」 | Approve 判定 |
fix/verify サイクルの扱い: 実 workflow では
issue-review-*が Changes Requested を返した場合、issue-fix-*→issue-verify-*を経由して再度 Approve を得てから final-check に到達する。 コメント履歴に過去の Changes Requested が残るのは正常な状態であり、最新の判定結果(verify の Approve)を 権威ある判定として採用する。過去の Changes Requested は「解決済みの指摘」として無視してよい。
Issue 本文の ## 完了条件 セクション(チェックボックス形式)を取得し、
末尾サブセクション ### ワークフロー完了後の確認項目 を判定対象から除外する。
残った各条件について:
差し戻しが必要な場合は root-cause に応じて以下を使い分ける。実際にどの status を返せるかは
workflow YAML の final-check.on で決まり、prompt 経由で valid status 一覧が注入される
(詳細は § Verdict 出力 § workflow YAML 互換ルール)。
| root-cause | 例 | 推奨 status(新 YAML) | 互換 status(旧 YAML) |
|---|---|---|---|
| 設計起因 | 設計書の影響ドキュメント評価漏れ / テスト戦略未定義 / 要件解釈の食い違い | BACK_DESIGN | BACK(YAML が BACK のみ valid な場合) |
| 実装起因 | 前段コメント欠落 / 最新判定が Changes Requested のまま / 品質ゲート未通過 / docs 更新漏れ | BACK_IMPLEMENT | BACK(YAML が BACK のみ valid な場合) |
| 完了条件未充足 | 最新の判定結果は Approve だが Issue 完了条件が未充足 | この final-check で対応可能なら RETRY、不可能なら root-cause に応じ BACK_DESIGN / BACK_IMPLEMENT / BACK | 同左 |
root-cause 不明の場合: 自動で
BACK_DESIGN等を default にせず、ABORTを返して運用に escalation する。
kaji は Python 単一スタックである。baseline artifact が clean の場合は以下の 1 本を実行する。
cd [worktree_dir] && source .venv/bin/activate && make check
make check は ruff / format / mypy / pytest を一括で実行する(AGENTS.md の pre-commit 契約と同一)。
artifact が known_failures の場合だけ、同じ対象を次の 2 コマンドへ分離する。
cd [worktree_dir] && source .venv/bin/activate && ruff check kaji_harness/ tests/ experiments/ && ruff format --check kaji_harness/ tests/ experiments/ && mypy kaji_harness/
cd [worktree_dir] && source .venv/bin/activate && python -m kaji_harness.scripts.baseline_precheck --compare
特定マーカーや変更タイプ固有の検証が必要な場合は、設計書「テスト戦略」に従い追加実行する:
| 変更タイプ | 追加検証 |
|---|---|
| docs-only | make verify-docs |
| metadata-only / packaging-only | make verify-packaging |
| 通常 | 追加なし(make check で十分) |
baseline failure の扱い:
[worktree]/.kaji-artifacts/baseline/baseline.jsonがknown_failuresの場合、上記の分離 gate を使う。verdict: ok、regression 0 件だけを許可する。詳細は docs/dev/baseline-check.md を正本とする。
_shared/promote-design.md の手順に従い、
draft/design/issue-[issue_id]-*.md を恒久ドキュメントへ昇格するか、既存 docs に統合するかを判定する。
判定軸:
docs/adr/ ほか)へ昇格Issue 本文の workflow 内完了条件のチェックボックスを [x] に更新する。
### ワークフロー完了後の確認項目 内のチェックボックスは更新せず、[ ] のまま維持する。
# 本文を取得
kaji issue view [issue_id] --json body -q '.body' > /tmp/issue-body.md
# チェックボックスを更新(事後確認より前にある確認済み条件だけを [x] に変更)
# 例: sed -i 's/- \[ \] 条件A/- [x] 条件A/' /tmp/issue-body.md
# 更新を反映
kaji issue edit [issue_id] --commit --body-file /tmp/issue-body.md
チェックボックスは [ ] のまま残す。コメントで未充足条件と戻し先を明示する。
本文更新は行わない(軽微修正後に再実行するため)。
Step 7(完了条件更新)の後、Step 8(最終チェックコメント)の前に、設計書を Issue 本文の NOTE ブロック直下に添付する。
kaji issue view [issue_id] --json body -q '.body' | grep -q '^## 設計書'
既に ## 設計書 セクションが存在する場合はスキップする(位置の移動はしない)。
| 条件 | 添付対象 |
|---|---|
| Step 6 で恒久 docs へ昇格を実施した | 昇格後の確定版(docs/... 配下) |
| 昇格対象外 | draft/design/ 版 |
Issue 本文を行単位で走査し、以下のルールで挿入位置を決定する:
| ケース | 挿入位置 |
|---|---|
| NOTE ブロックが1つ存在する(標準) | NOTE ブロック終端の次の空行の後 |
| NOTE ブロックが複数存在する | 最初の NOTE ブロック終端の次の空行の後 |
| NOTE ブロックが存在しない(古い Issue) | 本文先頭 |
既に ## 設計書 が別位置に存在する | スキップ(7.5-1 で検出済み) |
NOTE ブロックの終端判定:
> [!NOTE]から始まり、>プレフィックスの連続行が途切れた最初の空行。
昇格済みの場合:
## 設計書
恒久ドキュメントとして昇格済み: [`docs/...`](https://github.com/apokamo/kaji/tree/main/docs/...)
未昇格の場合:
## 設計書
<details>
<summary>クリックして展開</summary>
(設計書全文)
</details>
# 本文を取得
BODY=$(kaji issue view [issue_id] --json body -q '.body')
# NOTE ブロック終端位置を検出し、その次の空行の後に挿入
# new_body = body[:insert_at] + 設計書セクション + body[insert_at:]
kaji issue edit [issue_id] --commit --body-file /tmp/issue-body-updated.md
本文サイズ上限超過等で kaji issue edit に失敗した場合:
## 設計書 セクションとコメントへのリンクのみを追記するverdict マーカーの無条件付与(必須): 最終チェック結果コメントには 常に --verdict-step final-check --verdict-status <STATUS> を付与する。<STATUS> は本 skill が返す status(PASS / RETRY / BACK_DESIGN / BACK_IMPLEMENT / BACK。旧 YAML 互換で BACK に丸める場合は BACK)に置換する。CLI が body 1 行目に <!-- kaji-verdict: step=final-check status=<STATUS> --> を決定的に付与し、issue-design Step 1.6 の BACK 再入検出は BACK / BACK_DESIGN マーカーのみを design 再入として数える(契約の正本は CLI コード。ADR 008 決定 3)。「BACK のときだけ付ける」条件付き出力は禁止(決定 3。PASS / RETRY でも常に付ける)。--body-file - は stdin から body を読むため、フラグは以下の順で付与する。
kaji issue comment [issue_id] --commit \
--verdict-step final-check --verdict-status <STATUS> \
--body-file - <<'EOF'
## 最終チェック結果
### 前段証跡の確認
| ステップ | コメント有無 | 最新判定 |
|----------|------------|---------|
| issue-design | ✅ | 設計書作成済み |
| issue-review-design | ✅ | Approve |
| (fix-design → verify-design) | (経由した場合) | (Approve) |
| issue-implement | ✅ | テスト全件 PASSED(または baseline 一致) |
| issue-review-code | ✅ | Approve |
| (fix-code → verify-code) | (経由した場合) | (Approve) |
### workflow 内完了条件の充足状態
| 条件 | 充足 | 確認元 |
|------|------|--------|
| (条件1) | ✅ / ❌ | (どのステップ/コメントで確認) |
| (条件2) | ✅ / ❌ | (どのステップ/コメントで確認) |
### 品質ゲート
| ゲート | 結果 | 備考 |
|--------|------|------|
| `make check` | PASS / FAIL | ruff / format / mypy / pytest 一括 |
| 変更タイプ固有検証 | PASS / FAIL / N/A | 例: `make verify-docs` / `make verify-packaging` |
### docs 整合
- 設計書昇格: 実施 (`docs/...`) / 不要
- docs 更新: 実施 / 不要
### Issue 本文更新
- チェックボックス更新: 実施 / 不要
- 設計書添付: 実施 / スキップ(既存) / フォールバック(コメント投稿)
### 判定
PASS / RETRY / BACK_DESIGN / BACK_IMPLEMENT / BACK
EOF
後方互換: 旧 workflow YAML が
BACKのみを valid とする場合はBACKを返す。詳細は § Verdict 出力 § workflow YAML 互換ルール。
---VERDICT---
status: PASS
reason: |
dev workflow の最終チェックを完了し、PR に進める状態を確認した
evidence: |
前段証跡を集約し、事後確認を除く workflow 内完了条件の充足を確認した。Issue 本文の対象チェックボックスを更新済み
suggestion: |
---END_VERDICT---
| status | 条件 |
|---|---|
| PASS | 事後確認を除く workflow 内完了条件がすべて充足し、Issue 本文更新済み |
| RETRY | final-check 文脈で閉じる軽微修正が必要 |
| BACK_DESIGN | 設計起因の不足(影響ドキュメント評価漏れ / テスト戦略未定義 / 要件解釈の食い違い 等)。design に戻す。final-check.on に BACK_DESIGN が定義されている YAML でのみ使用 |
| BACK_IMPLEMENT | 実装起因の不足(前段コメント欠落 / 品質ゲート未通過 / docs 更新漏れ 等)。implement に戻す。final-check.on に BACK_IMPLEMENT が定義されている YAML でのみ使用 |
| BACK | 旧 YAML(BACK のみ valid)における差し戻し。後方互換のため残置。未充足条件と戻し先を suggestion に明示 |
| ABORT | 重大な前提不整合 |
BACK_DESIGN/BACK_IMPLEMENT/BACK/ABORTはいずれもsuggestionフィールド必須。harness 側のverdict.pyが空 suggestion をVerdictParseErrorで弾く。
i-dev-final-check は複数 workflow から呼ばれるため、skill 側は prompt 経由で注入される
valid status 一覧(prompt.py:75, 92-97 の valid_statuses = list(step.on.keys()))を
権威ある情報源として扱う。prompt が「使ってよい」と言った status のみ返すことで多 workflow
互換性が成立する。
呼び出された workflow の final-check.on キー | skill が返すべき status |
|---|---|
BACK_DESIGN と BACK_IMPLEMENT の両方が定義(例: dev.yaml) | root-cause を判定して BACK_DESIGN / BACK_IMPLEMENT を使い分け。無印 BACK は使わない |
BACK のみが定義(例: implement-to-pr.yaml) | 従来通り BACK を返す(root-cause 判定結果に関わらず YAML 制約に従う) |
BACK 系が一切未定義(例: dev-local.yaml) | BACK 系を返さない。RETRY(軽微修正)または ABORT(重大な前提不整合)で表現 |
BACK_DESIGN のみ / BACK_IMPLEMENT のみ定義 | 想定外構成。ABORT を返し、運用に workflow YAML の見直しを促す |
prompt と skill 出力に不整合が生じた場合(valid status に無い status を返した場合)、harness
の InvalidVerdictValue で弾かれる。skill 側はあくまで prompt 内 valid status のみ返す。