| name | symmetry-check |
| description | コード変更の対称性と DRY を検証する。既存関数をコピー改変したとき、追加/削除・成功/失敗などの対称ペアに触れたとき、または「/symmetry-check」と言われたときに使う。 |
対称性・DRY 検証
変更が「片側だけ」になっていないか、同じロジックの重複を生んでいないかを検証する。
検査 1: 対称ペアの適用漏れ
- 変更したコードに対称ペアがあるか列挙する: 追加/削除、成功/失敗、登録/解除、保存/読込、シリアライズ/デシリアライズ、マウント/アンマウント
- ペアの片側だけ変更されていないか、もう片側を grep で特定して確認する
- 片側だけの変更が意図的な場合は、その根拠を報告に含める
検査 2: コピー改変の検出
- 今回の変更に「既存関数をコピーして改変した」コードがあるか確認する
- ある場合、コピー元とパラメータ追加・クロージャ引数で統合できないかを先に検討する
- 統合しない判断をする場合は理由を明示する(過去に
scan_parent_one_pass と push_parent_fingerprint_tokens が同一走査ロジックのコピーとなりレビュー指摘を受けた)
検査 3: DRY 判定基準
- 同一ロジックの繰り返しは 2 回までは許容、3 回目で抽出を検討する(無理な抽象化よりも多少の重複を許容)
- 変更で「3 回目の重複」が生まれていないか検索する
検査 4: Rust/JS 二重実装の整合
Rust と JS の両側に同じロジックが存在する箇所(request_key の構成・ソート順・正規化など)に触れた場合:
- 両側の実装を突き合わせ、仕様(順序・正規化方式・区切り文字)が一致しているか確認する
- 特に文字列比較: JS の
localeCompare と Rust の cmp は順序が異なる(ghost2/ghost_dev で逆転)。機械的キーの整列は両側ともコードポイント順に揃える
出力
検査 1〜4 それぞれについて ✅ / ⚠️(根拠 file:line 付き)を報告する。