Skip to content
frontmatter
キー値
specdojo.idprj-0001:pjr-q88a-register-stdout-stderr
specdojo.typeproject
specdojo.statusready
specdojo.rulebookspecdojo:pjr-rulebook
specdojo.part_ofprj-0001:pjr-index
specdojo.item_typetodo
specdojo.item_statusdone
specdojo.prioritymedium
specdojo.ownerARC
specdojo.registered_at2026-08-08T09:57:44Z
specdojo.due_on2026-08-31
specdojo.completed_at2026-08-08T12:00:00Z
specdojo.conclusionprintCommandErrorをstderr出力へ変更し、printWhereErrorと統合(削除)。register系全サブコマンドのエラー出力がstderrに統一された。内部呼び出し元はstdio inherit+終了コード判定のため影響なし。command-referenceへ反映。

PJR-Q88A register系コマンド全体のエラー出力をstdoutからstderrへ統一する ​

1. 概要 ​

registerサブコマンド(add/start/wait/review/close/reject/defer/reopen/update/renumber等)はほぼ全てprintCommandError慣例でエラーをstdoutへ出す。PJR-NWPCでregister whereのみstderrへ分離したが、他のサブコマンドはstdoutのまま残っている。内部呼び出し元(spawnSelf/spawnRegisterTransition等)はstdio inherit+終了コードのみで成否判定しておりstdout内容を解析していないため、stderrへ変更しても既存の内部呼び出しへの影響はない。printCommandErrorを呼ぶ全箇所をstderrへ揃え、既存テストのstdout検証も合わせて更新する。catalog.ts/schedule.tsにも同種のstdout一本化が見られるが、対象はregister系に限定し、他コマンドへの拡張は別途判断する。

prj-0001:pjr-nwpc-register-where-stderrではregister whereのみエラー出力をstderrへ分離したが、add/start/wait/review/close/reject/defer/reopen/update/renumber等の他サブコマンドはprintCommandError慣例のままstdoutへエラーを出している。内部呼び出し元(spawnSelf/spawnRegisterTransition等)はstdio: inherit+終了コードのみで成否判定しており、stdout内容を解析する箇所は無いため、stderrへの変更は安全である。Unix/CLIの一般的な慣習(正常出力はstdout、エラーはstderr)に揃える。

2. 完了条件 ​

  • printCommandErrorを呼ぶ全てのregisterサブコマンドで、エラーメッセージがstderrへ書かれる。
  • 成功時の通常出力(更新内容の表示等)は引き続きstdoutのまま変更しない。
  • 既存の内部呼び出し元(spawnSelf/spawnRegisterTransition等)が終了コードのみで成否判定しており、stdout/stderr変更の影響を受けないことを確認する。
  • 既存テストのうち、register系コマンドのエラー出力先(stdout)を前提にしているものをstderr前提へ更新する。
  • コマンドリファレンスに、register系コマンドのエラー出力先(stderr)が明記されている。
  • 対象はregister系コマンドに限定し、catalog/schedule等の同種パターンへの拡張は本項目のスコープ外であることが明記されている。

3. 作業内容 ​

No作業担当状態メモ
1printCommandErrorをstderr出力へ変更する(register where専用のprintWhereErrorとの統合可否も検討する)ARCdonesrc/register.ts
2内部呼び出し元がstdout内容に依存していないことを確認するARCdonespawnSelf/spawnRegisterTransition等
3既存テストのstdout前提箇所をstderr前提へ更新するARCdone-
4コマンドリファレンスへ反映するARCdone-

4. 対応結果 ​

  • src/register.tsのprintCommandErrorをprocess.stdout.writeからprocess.stderr.writeへ変更した。これによりregister配下の全サブコマンド(scaffold/add/build/update/start/wait/review/close/reject/defer/reopen/renumber/where)のエラーがstderrへ揃う。
  • 両者が完全に同一動作になったため、register where専用のprintWhereErrorをprintCommandErrorへ統合した。whereのcatch節もprintCommandErrorを呼ぶよう変更し、統合後のprintCommandErrorをexport化した。where固有の理由(コマンド置換でgit -C引数へエラー文字列が混入する問題)はコメントに残した。
  • 成功時の通常出力(更新内容・生成パス・Would ...のdry-runプレビュー・Warning: ...)はstdoutのまま変更していない。
  • 内部呼び出し元(src/exec-run.tsのspawnSelf/spawnRegisterTransition、src/routine.tsのspawnSelf)はspawnSync(..., { stdio: "inherit" })でresult.status === 0のみを見て成否判定しており、stdout内容を解析していない。よってエラー出力先の変更による影響はない。
  • テストtests/src/register-reserve.test.tsのprintWhereError前提をprintCommandError前提へ更新した(import・describe名・呼び出し)。エラーがstderrへ書かれstdoutを汚さないことを引き続き検証する。
  • コマンドリファレンス(SpecDojoコマンドリファレンス)へ、register系全コマンドがエラーをstderrへ分離すること、および本方針がregister系限定でcatalog/schedule等はスコープ外であることを明記した。

5. 関連ドキュメント ​