概要
Slack 送信を POST /feedback の応答パス内で同期 await しており、Slack 遅延が feedback 投稿のレスポンスをブロックする。失敗時のリトライ・手動再送導線も無い。
詳細
- 場所:
server/receive.js:219-233
deliverToSlack を応答前に await(L221)。webhook(SLACK_TIMEOUT_MS 既定 5000ms)に加え、image upload モードでは getUploadURLExternal → upload → completeUploadExternal の 3 段(各 5000ms)が直列(L989-1020)。最悪で 1 投稿が ~20 秒ブロックされ得る。
- failed 時はリトライが無く
integrations.slack に記録されるだけ。GitHub は inbox から再実行できるのに対し、Slack には手動再送 UI が無い(非対称)。
修正方針
- Slack 送信を応答パスから外し、insert・respond 後に非同期実行して結果を後追いで
store.update(または失敗を queue に積み再送可能化)。
- 同期通知を保つ場合は、upload を含む合計待ち時間に単一の予算上限を設け、超過時に早期
failed で応答する。
受け入れ条件
- Slack 遅延が
POST /feedback のレスポンスをブロックしない。
- 失敗した Slack 通知を再送できる導線がある。
出典: 全体監査(2026-06-20)で検出し、独立検証で実在確定(Medium / confidence medium)。
概要
Slack 送信を
POST /feedbackの応答パス内で同期 await しており、Slack 遅延が feedback 投稿のレスポンスをブロックする。失敗時のリトライ・手動再送導線も無い。詳細
server/receive.js:219-233deliverToSlackを応答前に await(L221)。webhook(SLACK_TIMEOUT_MS既定 5000ms)に加え、image upload モードでは getUploadURLExternal → upload → completeUploadExternal の 3 段(各 5000ms)が直列(L989-1020)。最悪で 1 投稿が ~20 秒ブロックされ得る。integrations.slackに記録されるだけ。GitHub は inbox から再実行できるのに対し、Slack には手動再送 UI が無い(非対称)。修正方針
store.update(または失敗を queue に積み再送可能化)。failedで応答する。受け入れ条件
POST /feedbackのレスポンスをブロックしない。