ワンクリックで
bug-fix-protocol
バグ修正時のリグレッションテスト作成義務と、グローバル状態共有の禁止ルール。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
バグ修正時のリグレッションテスト作成義務と、グローバル状態共有の禁止ルール。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
AI開発チームの役割定義。各エージェントの責務・行動指針・実行ステップを規定する。
AI同士のバトンタッチ(タスク委譲)とチェック体制。セッション開始時のPR確認から終了時のIssue作成までのルールを定義する。
コーディング規約。ESLint/TypeScript/React/Next.jsの品質基準と、AIエージェントがコミット前に守るべきルールを定義する。
Defines the standard format and rules for git commit messages in this project.
README.mdとblueprint.mdの役割分担と更新義務を定義するドキュメント管理ポリシー。
ロジックの変更とUIの変更に対するテスト戦略と基準を定義する。
| name | bug_fix_protocol |
| description | バグ修正時のリグレッションテスト作成義務と、グローバル状態共有の禁止ルール。 |
[!CAUTION] 最重要ルール: テストの Source of Truth は「現在のコード」ではなく「Blueprint(要件仕様)」である。
AIが「現在のコードの挙動」を正解としてテストを書くと、バグを保護するテストが出来上がる。 これは通常のバグより遥かに危険で、「テストがパスしている=正しい」という誤った安心感を与え、バグの発見を困難にする。
1. AIが仕様にない挙動を勝手に実装する(例: 全IDにデモデータを返す)
2. テスト作成時、AIが「コードがこう動いているから正しい」と判断
3. テストが「バグの挙動」を期待値として検証するコードになる
4. テストがパスするのでバグが固定化される
テストのアサーションは blueprint.md / README.md の仕様から導出する
仕様が定義されていない挙動を実装する場合
既存テストを修正する場合
getCreatorData が全creatorIdにデモデータを返す実装に対し、data-flow.test.ts が「デモデータが返ること」をアサーションとして記述。テストがパスしたためバグが長期間放置された。getCreatorData の仕様(IDごとの分岐ルール)を blueprint.md に起案バグを発見・修正する際、以下の順序を必ず守る:
regression: was returning demo data for ALL IDs)npm run test で全テスト実行し、既存テストが壊れていないか確認する[!CAUTION] 「修正してからテストを書く」は禁止。 修正後にテストを書くと、テストが本当にバグを検出できるか保証できない。
// ❌ 危険: 全てのcreatorIdで共有される
let mockStats = { totalRevenue: 500 };
let mockSupportersMap: Record<string, any> = {};
// ✅ 安全: creatorIdごとに独立
let creatorDataStore: Record<string, CreatorInMemoryData> = {};
function getCreatorInMemory(creatorId: string): CreatorInMemoryData {
if (!creatorDataStore[creatorId]) {
creatorDataStore[creatorId] = { supportersMap: {}, stats: createInitialStats() };
}
return creatorDataStore[creatorId];
}
let でモジュールスコープに状態を持つ変数がないか?resetData() でグローバルストア全体がクリアされるか?マルチテナント(複数のエンティティIDが存在する)システムでは、以下を必ずテストする:
| 観点 | テスト内容 |
|---|---|
| データ分離 | entityAへの操作がentityBのデータに影響しないこと |
| 初期状態 | 新規entityは空(またはデフォルト)のデータで開始すること |
| 永続化の整合性 | writeしたデータがreadで正しく返ること |
| リセット | resetが全entityのデータをクリアすること |
| 特殊IDの分岐 | デモ用IDなどの特殊分岐が正しく動作すること |
mockSupportersMap と mockStats がモジュールスコープのグローバル変数で、全creatorIdで共有されていた。Record<creatorId, CreatorInMemoryData> 構造に変更し、creatorIdごとに完全分離。addSupportEvent for creatorA must NOT affect creatorB stats — 修正前は totalRevenue: 500 → 50500 で失敗。