← ClaudeAtlas

bug-diagnosislisted

手強いバグ・性能劣化の診断ループ。「診断して」「デバッグして」「直らない」「再現しない」「遅い」「失敗する」と言われたとき、または原因不明の不具合報告を受けたときに使う
mizulba-dev/dev-method · ★ 0 · Code & Development · score 70
Install: claude install-skill mizulba-dev/dev-method
# bug-diagnosis: バグ診断の規律 手強いバグ向けの規律。工程を飛ばすときは理由を明示する。 ## 工程1 — 再現ループを構築する **これが本体。他の工程はすべて機械的作業。** ユーザーの症状そ���ものに反応する tight な pass/fail シグナルさえあれば、二分探索・仮説検証・計装はそのシグナルを消費するだけで原因へ到達する。無ければどれだけコードを読んでも到達しない。 ここに不釣り合いなほどの労力をかける。 ### 構築手段(この順に試す) 1. バグに到達する層(unit・integration・e2e)での**失敗テスト** 2. 動作中の dev サーバーへの **curl / HTTP スクリプト** 3. fixture 入力を渡す **CLI 実行**(既知良好出力との diff) 4. **headless ブラウザスクリプト**(DOM・console・network を assert) 5. 実際のリクエスト・ペイロード・イベントログを保存しての**トレース再生** 6. バグの経路だけを単一関数呼び出しで通す**使い捨てハーネス** 7. 「たまに違う出力になる」系は乱数入力1000件を回す **property / fuzz ループ** 8. 既知2状態間で出たバグなら `git bisect run` できる**bisect ハーネス** 9. 旧バージョン・旧設定と新バージョン・新設定へ同一入力を通す**差分実行** 10. 最後の手段として、人が操作する場合もスクリプトで手順を構造化し、出力を回収してループに乗せる ### ループを締める ループを得たら製品として扱い、締める: 速くできないか(セットアップキャッシュ・無関係な初期化のスキップ・テスト範囲の縮小)、シグナルを鋭くできないか(症状そのものを assert する。「クラッシュしない」では不十分)、決定的にできないか(時刻固定・乱数シード固定・ファイルシステム分離・ネットワーク凍結)。 非決定的なバグは、きれいな再現ではな��**再現率を上げる**ことが目標。トリガーをループさせ・並列化し・負荷をかけ・タイミング窓を狭め・sleep を注入する。 ### ループを作れない場合 明示的に停止し、試した内容を列挙する。ユーザーへ (a) 再現する環境へのアクセス、(b) 採取物(HAR・ログダンプ・コアダンプ・タイムスタンプ付き録画)、(c) 一時的な本番計装の許可のいずれかを求める。ループ無しで仮説立案へ進まない。 ### 工程1の完了条件 次を1つでも満たさない状態でコードを読んで仮説を立て始めたら、それ自体が停止合図であり工程1へ戻る: - [ ] **red-capable** — 実際のバグ経路を通り、ユーザーの症状そのものを assert する(「エラーなく完走」では不十分)。このバグで赤くなり、直れば緑になる - [ ] **決定的** — 毎回同じ判定を返す(非決定的バグは高い再現率へ固定済み) - [ ] **秒単位** — 分単位ではない - [ ] **agent 単独実行可能** — 無人で実行できる単一コマンドとして、既に1回以上実行済みである ## 工程2 — 再現と最小化 ループを実行し、赤くなることを確認する。 - ユーザーが記述した故障モードと一致している(似て非なる別の失敗ではない) - 複数回の実行で再現する(非決定的バグは十分な再現率で) - 後段の検証用