One-liner
Quest 書き込み系フック(承認/完了申請/拒否/取り下げ/キャンセル)が revert/wallet reject しても UI は「成功しました」 toast を出し、オペレータが失敗に気付かない。
Description
pkgs/frontend/hooks/useHatsQuestModule.ts の以下のフックは try/catch で console.error するだけで、エラーを再 throw せず undefined を返している:
useSubmitQuestCompletion(L82-)
useApproveQuest(L183-、特に L204-208 の catch)
useRejectQuestSubmission(L150-)
useCancelQuest
useWithdrawQuestSubmission
$treeId_.quest.$questId.tsx のハンドラ(onApprove 等)は await foo() の後に無条件で toast.success(...) + refetch を呼ぶため、失敗が成功として表示される。
失敗シナリオ
- オペレータが「承認」ボタンを押す
- wallet で reject する/contract が
WorkspaceMemberOnly 等で revert する/RPC タイムアウトする
- フックは catch でログを吐いて
undefined を resolve
- UI は「承認しました」 toast を表示 + refetch
- subgraph は変わらないので Kanban の列はそのまま
- オペレータは「承認したはずだが反映されていない」と困惑
Requirements
Supplements
関連ファイル:
pkgs/frontend/hooks/useHatsQuestModule.ts (L70, L103, L138, L171, L206, L237)
pkgs/frontend/app/routes/$treeId_.quest.$questId.tsx
出典: v3 code-review (/code-review ultra-high effort, 2026-05-27)。
One-liner
Quest 書き込み系フック(承認/完了申請/拒否/取り下げ/キャンセル)が revert/wallet reject しても UI は「成功しました」 toast を出し、オペレータが失敗に気付かない。
Description
pkgs/frontend/hooks/useHatsQuestModule.tsの以下のフックはtry/catchでconsole.errorするだけで、エラーを再 throw せずundefinedを返している:useSubmitQuestCompletion(L82-)useApproveQuest(L183-、特に L204-208 の catch)useRejectQuestSubmission(L150-)useCancelQuestuseWithdrawQuestSubmission$treeId_.quest.$questId.tsxのハンドラ(onApprove等)はawait foo()の後に無条件でtoast.success(...)+ refetch を呼ぶため、失敗が成功として表示される。失敗シナリオ
WorkspaceMemberOnly等で revert する/RPC タイムアウトするundefinedを resolveRequirements
try { await foo(); toast.success(...) } catch (e) { toast.error(...) }パターンに統一useScheduledDistributor,useHatsの一部)にも無いか確認Supplements
関連ファイル:
pkgs/frontend/hooks/useHatsQuestModule.ts(L70, L103, L138, L171, L206, L237)pkgs/frontend/app/routes/$treeId_.quest.$questId.tsx出典: v3 code-review (
/code-reviewultra-high effort, 2026-05-27)。