Dana Okaforバックエンドエンジニア · タスク:二重請求の修正 · Claude Code · 2時間40分
Lemonsignalが確認済み 89%高い適合
- AIに修正を書かせる前に原因を突き止めました。
- AIの修正をうのみにせず、テストしました。
- 最初のサービス用に作ったもので、2つ目のサービスも修正しました。
- 理解する 優秀 AIに二重請求を再現させ、修正に入る前に1件の決済をコード上で追いました。 ターン2
- 指示する 十分 ログと重要なファイルを渡し、変更してはいけない箇所を伝えました。 ターン4
- 確認する 優秀 AIの最初の修正にテストを実行して却下しました。自分の修正はテストで証明しました。 ターン12、19
- 修正する 優秀 最初の修正がなぜ間違いなのか、どこを見るべきかをAIに伝えました。 ターン13
- 承認する 十分 小さな変更とそのテスト、テストしていない点のメモを提出しました。
- 再利用する 優秀 手順をskillとして保存し、それを使って返金サービスを修正しました。
職務に必要なスキル
- 根本原因の特定基準以上
- テストによる修正の証明基準以上
- 他の人が保守できるコード基準どおり
提出されたままの成果物です。各マークは結果に示されたスキルに対応しています。
変更メモ ゲートウェイが再試行しても、注文ごとの請求は1回に
- 原因:ゲートウェイのタイムアウト後、再試行で2回目の請求が発生していました。
- 修正:各請求に注文ごとのキーを持たせ、再試行時は新しい請求を作らず最初の請求を返します。
- テスト:タイムアウト後の再試行でも請求は1回になりました。48件のテストがすべて成功しています。
- 未テスト:一部請求(現在は未使用)。
payments/charge.py修正
def create_charge(order, card):
- return gateway.charge(order.total, card)
+ key = f"order-{order.id}"
+ return gateway.charge(order.total, card,
+ idempotency_key=key)
tests/test_charge.py修正前は失敗し、修正後は成功
+def test_retry_charges_once(gw, order, card):
+ gw.fail_next_with(Timeout)
+ create_charge(order, card)
+ create_charge(order, card) # the retry
+ assert gw.charges_for(order) == 1
refunds/refund.py返金サービスへの同じ修正
def create_refund(charge, amount):
- return gateway.refund(charge.id, amount)
+ key = f"refund-{charge.id}"
+ return gateway.refund(charge.id, amount,
+ idempotency_key=key)