事象
アプリを長時間起動したままにしておくと、いつの間にかバックエンドへ繋がらなくなり、更新ボタンを押してもローディングが終わらない。再起動すれば直る。
原因仮説
`src/main/backend.ts` を読むと、現状は死亡を検知する仕組みが弱い:
- `exit` ハンドラが `code !== 0 && code !== null` のときだけ通知 → シグナル終了 (kill -9 / OOM kill 等) は無音
- 子プロセスの stdout/stderr を pipe で受けているがどこにも書き出していない → クラッシュログが取れない
- 起動後の health 監視がない → 死んでもアプリは気付けない
候補原因:
- macOS App Nap / システムスリープ復帰後の TCP 切断
- SQLite WAL ロック (dbwriter goroutine のハング)
- Backlog API への外部リクエストがタイムアウト未設定で詰まる
- メモリ / goroutine リークによる OOM kill
やること (このチケットのスコープ)
原因を能動的に直すのではなく、まず観測手段を入れる:
- バックエンドの stdout/stderr を `~/Library/Logs/Backnote/backend.log` (Windows/Linux 相当含む `app.getPath('logs')`) へファイル出力
- `exit` ハンドラで code/signal の両方をログ + 通知。シグナル終了も拾う
- Electron 側に 30 秒間隔の health watcher を追加。連続 N 回失敗をログとトレイ通知に記録
- 開発モードでもログを残し、再現検証しやすくする
修正後は開発機で長時間放置し、再現を待ってログから仮説を絞る。この issue では根本修正は行わない (別 issue に分離)。
関連
- src/main/backend.ts
- src/main/index.ts
- src/main/tray.ts (通知連携)
事象
アプリを長時間起動したままにしておくと、いつの間にかバックエンドへ繋がらなくなり、更新ボタンを押してもローディングが終わらない。再起動すれば直る。
原因仮説
`src/main/backend.ts` を読むと、現状は死亡を検知する仕組みが弱い:
候補原因:
やること (このチケットのスコープ)
原因を能動的に直すのではなく、まず観測手段を入れる:
修正後は開発機で長時間放置し、再現を待ってログから仮説を絞る。この issue では根本修正は行わない (別 issue に分離)。
関連