Skip to content

fix: surface project run/resume errors to the client (#131) - #132

Closed
so5 wants to merge 2 commits into
mainfrom
fix/surface-project-run-errors-to-client
Closed

so5 wants to merge 2 commits into
mainfrom
fix/surface-project-run-errors-to-client

Conversation

@so5

@so5 so5 commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Closes #131

プロジェクト実行/再開が dispatch 前・dispatch 中に失敗しても、クライアントにトーストが出ずログ画面に出るだけ、という 2 つの独立した不具合を修正する。サーバ側のみ(クライアント変更なし)。

Bug 1 — per-level ログイベントが emit されない

f24aac5("revamp log screen")で socketIOAppenderWHEEL_LOG 一本化され、logERR 等の per-level イベントが飛ばなくなった。クライアントの onLogErr -> トースト(Home/Viewer/Workflow/remotehostManager)は logERR を購読したままで、事実上死んでいた。

server/app/logSettings.js:

  • FATAL のみ logERR へ plain text で重複 emit。ログ画面は従来どおり WHEEL_LOG で全件受ける。ERROR まで送るとトーストが煩いので FATAL 限定。
  • トースト表示用に Error を message だけに落とす小ヘルパ formatToastMessage() を追加(formatLogArg() はスタックを含むため)。

Bug 2 — runProject の非同期失敗が socket ack に届かない

onRunProject/onContinueProjectrunDispatcher を await せず、projectOperator が先に ack(true)。その後 runDispatcher の catch で ack(err) しても socket.io の二重 ack で無視される。

server/app/handlers/projectController.js:

  • runDispatcher の preparing phase / "parsing workflow" の 2 つの catch で emitAll(projectRootDir, "showMessage", ...) を追加(dispatcher.jsinputFile not found 通知と同じ idiom)。CANCELED(パスワード入力キャンセル)は従来どおり通知しない。

動作確認

  • node --check 両ファイル pass。
  • SSH 未設定のリモートホストを含むプロジェクトを実行 → failed to start project: ... トースト(Bug2 preparing catch)。
  • 再開で dispatcher が throw するケース → project run aborted: ... トースト(Bug2 parsing catch)+ FATAL ログがあれば logERR トースト(Bug1)。
  • 通常のログ画面(WHEEL_LOG)表示は不変。

🤖 Generated with Claude Code

https://claude.ai/code/session_01C3jKNM1qubomM8UTRdkEWu

A run that aborts before or during dispatch left the UI with no toast,
only a log line. Two independent gaps:

Bug 1: the socketIO log appender was unified onto a single "WHEEL_LOG"
event (f24aac5, "revamp log screen"), so the per-level "logERR" event the
client's onLogErr toast handlers (Home/Viewer/Workflow/remotehostManager)
listen for is no longer emitted. Re-emit FATAL only on "logERR" as plain
text - the log screen still receives everything via "WHEEL_LOG", and only
run-aborting errors pop a toast.

Bug 2: onRunProject/onContinueProject fire runDispatcher without awaiting
it and projectOperator resolves the socket ack with ack(true) first, so
the ack(err) in runDispatcher's preparing-phase and parsing-workflow
catch blocks is a dropped second ack. Notify the client with a
"showMessage" toast from those catch blocks.

Server-side only; no client change.

Refs #131

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3jKNM1qubomM8UTRdkEWu
@so5 so5 self-assigned this Sep 10, 2026
@so5

so5 commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator Author

他にもログ関連で修正が必要な内容が見つかったため、破棄

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

プロジェクト実行/再開時のエラーがクライアントに通知されない(トーストが出ない)

2 participants