Skip to content

fix(dev): serve vite on the tauri dev port and surface session state - #19

Merged
smileygames merged 1 commit into
mainfrom
issue-18-dev-window
Aug 21, 2026
Merged

fix(dev): serve vite on the tauri dev port and surface session state#19
smileygames merged 1 commit into
mainfrom
issue-18-dev-window

Conversation

@smileygames

Copy link
Copy Markdown
Member

Closes #18

原因 1: 窓が一度も開いていなかった

vite.config.ts が存在せず、Vite は既定の 5173 で listen していた。src-tauri/tauri.conf.jsonbuild.devUrlhttp://localhost:1420。Tauri は 1420 を待ち続け、アプリの窓は開かない。

  ➜  Local:   http://localhost:5173/
        Warn Waiting for your frontend dev server to start on http://localhost:1420/...

ブラウザで 5173 を開くと UI は描画されるが、Tauri の IPC が無いため invoke は解決しない。「押しても何も起こらない」という観測はこれで説明がつく。

スキャフォールド移植(#1)以来の欠落であり、npm run tauri dev はこのリポジトリで一度も成功していない。CI は npm cicargo check しか行わないため検出されなかった。

vite.config.ts を追加し port: 1420 / strictPort: true を固定した。strictPort は必須で、外すとポートが取られていたとき Vite が黙って 1421 へずれる——それはこの修正が防ごうとしている失敗そのもの。

検証: vite.config.ts 追加後に npx vite を二重起動したところ、二つ目が Port 1420 is already in use で停止した。1420 に bind していること、および strictPort が効いていることの両方が取れている。

原因 2: セッションの生死が画面から読めなかった

窓が開いても、pty-data-{id} / pty-exit-{id} のどちらも listen していないため、CLI が起動直後に落ちても画面は「起動しました」の表示のまま止まる。

会話面とは別枠の診断面を追加した。

  • 部屋ソケットの待受状態(127.0.0.1:<port> で待受中
  • セッションの生死と終了コード
  • CLI の出力(制御シーケンスは除去、直近 400 行)

既定は折りたたみ。起動失敗と異常終了では自動で開く。

これは「ターミナルエミュレータを置かない」制約と衝突しない。あの制約は何が発言かという axis の話であり、診断面は「部屋の下の機構が生きているか」という別の問いに答える。部屋が沈黙しているとき、それが正常な待機なのか機構の停止なのかは会話面だけからは区別できない。

あわせて

room-ready イベントを追加した。部屋ソケットの bind はフロントエンドの読み込み後に完了するため、読み込み時点の room_port ポーリングは競合で「未待受」を読み、実際には起きていない失敗を報告していた。

切り分け手順の 1〜2 段目を、標準エラーではなく診断面を読む形へ更新した。

検証

  • npm run build / npm run sidecar:check / npm run sidecar:test(pass 1 / fail 0)
  • cargo check --target x86_64-pc-windows-gnu
  • 制御シーケンス除去は、実ファイルのパターンを取り出して node で実行し確認(CSI / OSC / 2 文字エスケープ / CR がすべて落ちること)
  • 1420 への bind と strictPort は上記のとおり実測

実機での往復(#14)は引き続き未確認。本 PR はそこへ到達するための前提を直すもの。

release type

patch — 起動不能の修正と診断表示の追加。仕様上の機能追加ではない。

「セッション参加」を押しても何も起こらない問題の修正。原因は二つあった。

一つ目は dev サーバのポート不一致。vite.config.ts が存在せず Vite は既定の
5173 で listen する一方、tauri.conf.json の devUrl は 1420 を指していた。
Tauri は 1420 を待ち続け、アプリの窓が一度も開かない。ブラウザで 5173 を開くと
UI は描画されるが Tauri の IPC が無いため invoke は解決せず、押しても何も
起こらないという観測になる。スキャフォールド移植以来の欠落で、CI は npm ci と
cargo check しか行わないため検出されなかった。

vite.config.ts を追加し、port 1420 / strictPort: true を固定した。strictPort は
必須で、外すとポートが取られていたとき Vite が黙って 1421 へずれる。それは
この修正が防ごうとしている失敗そのもの。

二つ目は、窓が開いた後もセッションの生死が画面から読めないこと。pty-data /
pty-exit のどちらも listen しておらず、CLI が起動直後に落ちても画面は起動成功
の表示のまま止まる。会話面とは別枠の診断面を追加し、部屋ソケットの待受状態、
セッションの生死と終了コード、CLI の出力を表示するようにした。既定は折りたたみ
で、起動失敗と異常終了では自動で開く。

会話面に CLI の生出力を流さない制約とは衝突しない。あの制約は何が発言かという
axis の話で、診断面は「部屋の下の機構が生きているか」という別の問いに答える。
部屋が沈黙しているとき、それが正常な待機なのか機構の停止なのかは会話面だけ
からは区別できない。

あわせて room-ready イベントを追加した。部屋ソケットの bind はフロントエンドの
読み込み後に完了するため、読み込み時点の room_port ポーリングは競合で「未待受」
を読み、実際には起きていない失敗を報告していた。

切り分け手順の 1〜2 段目を、標準エラーではなく診断面を読む形へ更新した。

#18

@smileygames smileygames left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI self-review (execution_mode = auto)

受け入れ条件の照合(issue #18 完了条件)

条件 結果 根拠
npm run tauri dev でアプリの窓が開く pass(ポート側で実測) vite.config.ts 追加後、npx vite の二重起動が Port 1420 is already in use で停止。1420 への bind と strictPort の両方が取れている。窓の描画自体は Master の実機で確認が要る
セッションの起動失敗と異常終了が画面に出る。終了コードが判別できる pass pty-exit-{id} を listen し、終了(終了コード N) を診断面とステータス行へ表示。payload が None の場合は「終了コード不明」
部屋ソケットの listen 状態とサイドカーの接続状態が画面から確認できる pass 診断面の部屋ソケット行(room-ready イベント)と、既存の参加者表示
切り分け手順の 1〜2 段目が標準エラー出力を読まずに済む pass docs/0-requirements.md の該当段を診断面参照へ更新

制約の照合

  • ターミナルエミュレータを置かない: pass。診断面は会話面と別の要素で、既定は折りたたみ。制御シーケンスは解釈せず除去している(駆動しない、読むだけ)。
  • 独自のポートを新設しない: pass。tauri.conf.json の既存 devUrl が指す 1420 に合わせただけ。

検証

  • CI 全ステップ pass(npm run build / sidecar:check / sidecar:test / cargo check / cargo test 8 pass)
  • 制御シーケンス除去は、実ファイルから該当行を抽出して node で実行し確認した。手で打ち直したパターンではない。CSI / OSC / 2 文字エスケープ / CR がすべて落ちることを確認。
    • この検証手順を取ったのは、最初に書いたパターンが実際に壊れていたため。テンプレートリテラル内のバックスラッシュが失われ、[\]P^_][]P^_] に、\[[ になっていた。手で打った再現テストは正常に見えてしまい、ファイルの実体と一致していなかった。

未検証として残るもの

窓が実際に描画されること、および実機での往復(#14)。本 PR はそこへ到達するための前提を直すもので、到達したことの確認ではない。

scope deviation

なし。#18 は原因二つを一つの issue として立てており、両方を本 PR で扱っている。

次の期待

execution_mode = auto のため人間レビューゲートなし。CI green(CI pass / check pass 1m37s)。self-review pass により squash merge へ進む。

@smileygames
smileygames merged commit 40419c4 into main Aug 21, 2026
2 checks passed
@smileygames
smileygames deleted the issue-18-dev-window branch August 21, 2026 00:59
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.

fix(dev): the tauri window never opens and a failed session leaves no trace

1 participant