Skip to content
frontmatter
キー値
specdojo.idprj-0001:pjr-4y48-orchestrator-launch-signal
specdojo.typeproject
specdojo.statusready
specdojo.rulebookspecdojo:pjr-rulebook
specdojo.part_ofprj-0001:pjr-index
specdojo.item_typeissue
specdojo.item_statusdone
specdojo.priorityhigh
specdojo.ownerARC
specdojo.registered_at2026-10-10T01:05:02Z
specdojo.due_on2026-10-31
specdojo.completed_at2026-10-10T01:16:46Z
specdojo.conclusionorchestrator launch は子の実行中に SIGINT/SIGQUIT を無視し、SIGTERM/SIGHUP を子へ転送する。終了コードは子の終了コード、シグナル終了なら 128 + シグナル番号。子の終了後にハンドラを外す。偽の provider で、SIGINT では子の正常終了まで待ち(code 0)、SIGTERM では転送して 143 で終わることを確認した。

PJR-4Y48 orchestrator launch が Ctrl-C で先に終了し provider の CLI が取り残される ​

1. 課題内容 ​

specdojo orchestrator launch は SIGINT の既定動作で即座に終了し、Ctrl-C を入力の取り消しに使う claude や codex の CLI だけが動き続けて端末の操作が壊れる。子の実行中は SIGINT/SIGQUIT を無視し、SIGTERM/SIGHUP を転送する。

2. 影響範囲 ​

観点影響
スコープsrc/orchestrator.ts の runOrchestratorLaunch とそのテスト
スケジュールPJR-ZGJ4 の close の前提になる
コストシグナル処理の小規模な追加
品質npm run orch:* の対話中に Ctrl-C を押すと npm 側が終了し、provider の CLI が端末に取り残される
関係者orch:* で orchestrator を起動する全利用者

3. 対応方針 ​

項目内容
原因runOrchestratorLaunch が子プロセスを stdio: "inherit" で起動するが、親の Node は SIGINT の既定動作で終了する。端末の Ctrl-C は前面のプロセスグループ全体へ送られるため、子が SIGINT を処理して続行しても親だけが終わる(偽の provider で、親が即時に終了し子が動き続けることを再現済み)
対応策子の実行中は親で SIGINT と SIGQUIT を無視し(子には端末から直接届く)、SIGTERM と SIGHUP は子へ転送する。子の終了後にハンドラを外す
依存事項PJR-ZGJ4
完了条件下記「完了条件」のとおり

3.1. 完了条件 ​

  • specdojo orchestrator launch の実行中に SIGINT と SIGQUIT を受けても、起動用のプロセスは終了せず、子の終了を待つ。
  • SIGTERM と SIGHUP を受けた場合は子へ転送し、子の終了を待ってから終了する。
  • 子が終了コードで終われば同じ終了コード、シグナルで終われば 128 + シグナル番号 を終了コードにする。
  • 子の終了後、追加したシグナルハンドラが残らない。
  • unit test で上記を確かめる。実プロセスへシグナルを送るテストが必要な場合は *.integration.test.ts に置く。
  • command-reference の orchestrator launch の説明にシグナルの扱いを書き、CHANGELOG の PJR-ZGJ4 の記載に含める。
  • npm run typecheck、npm run lint:ts、npm run test:unit、npm run lint:md が通る。

3.2. 作業内容 ​

  • src/orchestrator.ts の runOrchestratorLaunch にシグナル処理を加える。
  • テストと文書を更新する。
  • 保護設定(package.json、.agents/・.claude/ などの orchestrator 本文とラッパー)は変更しない。

4. 対応結果 ​

  • runOrchestratorLaunch が子プロセスの実行中だけ SIGINT と SIGQUIT を無視し、SIGTERM と SIGHUP を子へ転送するようにした。子の終了または起動エラー時には追加した全ハンドラを解除する。
  • 子が終了コードで終わった場合はその値を維持し、シグナルで終わった場合は 128 + シグナル番号 を返すようにした。
  • unit test でシグナルの無視・転送、子の終了待機、終了コードの変換、正常終了時と起動エラー時のハンドラ解除を固定し、再発を防止した。
  • CLIコマンドリファレンス と CHANGELOG にシグナルの扱いを追記した。

5. 関連ドキュメント ​

  • PJR-ZGJ4(orchestrator のプロダクトリポジトリへのアクセス)