Skip to content

投稿失敗時の原因表示の強化とタイムアウトリトライ #41

Description

@amay077

背景

投稿失敗時に、どの SNS に投稿できなかったかは分かるが、なぜ失敗したのかがユーザーに伝わらない

  • frontend/src/lib/MainContent.sveltepost() は、失敗時に alert("Blueskyに投稿できませんでした。") と SNS 名のみを表示する
  • frontend/src/lib/MainContent.tspostToBluesky / postToThreads / postToMisskeyboolean のみを返し、原因(HTTP ステータスコード・エラーメッセージ)は console.error にしか出力されない
  • バックエンドはエラー情報を返しているものも多い(例: misskey_post.js{ ok: false, statusCode, error })が、フロントエンドが読み捨てている
  • フロントエンドの fetch にタイムアウト設定がなく(AbortController 不使用)、サーバー応答待ちで無期限に待機しうる。リトライの仕組みもない

要件

  1. 失敗原因のインライン表示

    • alert をやめ、投稿フォーム近くに失敗原因のリストを表示する(例: Bluesky: タイムアウトしました
    • 原因は分類して伝える: タイムアウト / ネットワークエラー / 認証エラー (401) / サーバーエラー (5xx) / その他 (4xx)
    • 成功時の alert("投稿しました。") は現状維持
  2. タイムアウト検知

    • 投稿 API(bluesky_post / threads_post / misskey_post)と R2 アップロードの fetch にタイムアウトを設定する
    • 動画 finalize ポーリング(*_video_finalize の最大試行回数到達)もタイムアウトとして扱う
  3. タイムアウト時のリトライ

    • タイムアウト(およびネットワークエラー)の場合のみ、SNS ごとに 1 回 リトライする
    • 2 回目も失敗した場合は原因と共にエラー表示する
    • 動画 finalize ポーリングのタイムアウトも 1 回リトライ対象

スコープ外

  • タイムアウト以外(認証・バリデーションエラー等)の自動リトライ
  • バックエンドの投稿ロジック自体の変更(エラーレスポンスの JSON 統一は軽微に実施可)
  • 成功時表示の変更

関連

  • OpenSpec proposal: openspec/changes/PPP-041-enhance-post-failure-handling/

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions