Skip to content
frontmatter
キー値
specdojo.idprj-0001:pjr-mhhp-src-move-shared
specdojo.typeproject
specdojo.statusready
specdojo.rulebookspecdojo:pjr-rulebook
specdojo.part_ofprj-0001:pjr-index
specdojo.item_typetodo
specdojo.item_statusdone
specdojo.prioritymedium
specdojo.ownerDEV
specdojo.registered_at2026-10-15T22:12:34Z
specdojo.completed_at2026-10-17T07:09:43Z
specdojo.conclusioncodemod でコマンドの実装 5 ファイルを src/commands、共通の処理 11 ファイルを src/shared、テスト 17 件を各ディレクトリへ移し、hook の入口(tools/build-if-stale.mjs)と自分の位置から求めるパスを直した。全 106 コマンドの --help は移す前の 0.3.1 と一致し、分割後の runner で PJR-JSEY が統合まで通った

PJR-MHHP 共通の処理を src/shared へ移す ​

1. 概要 ​

codemod で yaml・git-environment・specdojo-config・spawn-self などの共通の処理を src/shared/ へ移す。 PJR-V23P の決定に基づく

2. 完了条件 ​

prj-0001:pjr-v23p-src-subdirectory-layout の決定(3.1 の追加の決定を含む)に基づく 5 件目の移動。コマンドの実装を src/commands/、共通の処理を src/shared/ へ移す。role-types は prj-0001:pjr-xp0j-src-move-exec で src/exec/ へ移すため本件では移さない。src/specdojo.ts は直下に残す。

移す対応表:

移す前移した後
src/build-command.tssrc/commands/build.ts
src/init-command.tssrc/commands/init.ts
src/orchestrator.tssrc/commands/orchestrator.ts
src/watch.tssrc/commands/watch.ts
src/agent.tssrc/commands/agent.ts
src/agent-response.tssrc/shared/agent-response.ts
src/build-if-stale.tssrc/shared/build-if-stale.ts
src/dist-freshness.tssrc/shared/dist-freshness.ts
src/git-environment.tssrc/shared/git-environment.ts
src/package-paths.tssrc/shared/package-paths.ts
src/practice-id.tssrc/shared/practice-id.ts
src/spawn-self.tssrc/shared/spawn-self.ts
src/specdojo-config.tssrc/shared/specdojo-config.ts
src/specdojo-gitignore.tssrc/shared/specdojo-gitignore.ts
src/yaml-schema-modeline.tssrc/shared/yaml-schema-modeline.ts
src/yaml.tssrc/shared/yaml.ts
tests/src/agent-command.test.tstests/src/commands/agent.test.ts
tests/src/build-command.test.tstests/src/commands/build.test.ts
tests/src/build-command.integration.test.tstests/src/commands/build.integration.test.ts
tests/src/init-command.test.tstests/src/commands/init.test.ts
tests/src/orchestrator-command.test.tstests/src/commands/orchestrator.test.ts
tests/src/agent-response.test.tstests/src/shared/agent-response.test.ts
tests/src/dist-freshness.test.tstests/src/shared/dist-freshness.test.ts
tests/src/git-environment-isolation.test.tstests/src/shared/git-environment-isolation.test.ts
tests/src/package-paths.test.tstests/src/shared/package-paths.test.ts
tests/src/practice-id.test.tstests/src/shared/practice-id.test.ts
tests/src/spawn-self.test.tstests/src/shared/spawn-self.test.ts
tests/src/specdojo-config-command.test.tstests/src/shared/specdojo-config-command.test.ts
tests/src/specdojo-config-env.test.tstests/src/shared/specdojo-config-env.test.ts
tests/src/specdojo-config-repos.test.tstests/src/shared/specdojo-config-repos.test.ts
tests/src/specdojo-config.test.tstests/src/shared/specdojo-config.test.ts
tests/src/specdojo-gitignore.test.tstests/src/shared/specdojo-gitignore.test.ts
tests/src/yaml.test.tstests/src/shared/yaml.test.ts

条件:

  • tools/src-move-codemod.mjs で上の対応表のとおりに移す。移動と import の書き換えは codemod に任せ、codemod が報告した残りだけを手で直し、直した箇所を result に書く。
  • 次の、自分の位置や文字列からパスを組み立てる箇所を、移した後も同じ場所を指すよう直す。
    • tools/build-if-stale.mjs が src/build-if-stale.ts を文字列のパスで起動している。merge と checkout の hook(lefthook.yml の build-if-stale)の入口であり、ずれると dist が更新されず runner が古いコードで動くため、必ず直す。
    • src/shared/build-if-stale.ts・src/shared/package-paths.ts・src/shared/yaml.ts の import.meta.url からのパス。
    • src/shared/spawn-self.ts と src/shared/dist-freshness.ts の dist/specdojo.js の位置の求め方(src/specdojo.ts は直下に残るため、dist/specdojo.js の位置は変わらない)。
    • tests/setup/git-environment.ts の import と、.github/instructions/vitest.instructions.md の src/git-environment.ts の記載。
  • 移す前と後で、全コマンドの --help の出力が一致する(build・init・watch・agent・config などコマンドの実装を移すため、specdojo --help に出る全コマンドとそのサブコマンドを比べる)。前後の出力を tmp/ に保存して比べ、比べたコマンドの数と差分がないことを result に記録する。
  • 移した後に node tools/build-if-stale.mjs を実行し、hook の入口が動くことを確かめる。
  • npm run build の後に、dist/ に移す前の古い出力が残らない。
  • 設計書とガイドにある移したファイルの src/... のパスを直す。履歴のファイルは直さない。
  • 作業を終える前に、npm run typecheck・npm run lint:ts・npm run test:unit を実行して通す。
  • 親の検証(lint-ts・lint-fm・lint-md・typecheck・test-unit・test-integration・validate-schema)が通る。
  • 本件は runner が使う共通の処理(spawn-self など)を移すため、統合の後に orchestrator が exec run --register を 1 回流し、統合まで終わることを確かめる(本件の close の条件)。

3. 作業内容 ​

No作業担当状態メモ
1codemod で対応表のとおりに移すDEVdone実装 16 件、テスト 17 件
2自分の位置や文字列から組み立てるパスを直すDEVdonetools/build-if-stale.mjs ほか
3全コマンドの --help を比べ、hook の入口と dist/ を確かめるDEVdonehelp 123 対象で差分なし
4統合の後に exec run --register を 1 回流すorchestratoropenclose の条件

4. 対応結果 ​

  • tools/src-move-codemod.mjs に対応表を渡し、コマンド実装 5 件を src/commands/、共通処理 11 件を src/shared/、対応テスト 17 件を tests/src/commands/・tests/src/shared/ へ移した。相対 import の書き換えも codemod の出力を反映した。
  • codemod の検出結果に基づき、tools/build-if-stale.mjs の委譲先と対応テスト、src/shared/build-if-stale.ts と src/shared/package-paths.ts の package root、移動したテスト 2 件の repository root を手動で補正した。src/shared/yaml.ts の createRequire(import.meta.url)、src/shared/spawn-self.ts、src/shared/dist-freshness.ts は移動後も同じ対象を指すため変更不要と確認した。
  • .github/instructions/vitest.instructions.md、製品設計書、運用ガイド、設定 schema、成果物カタログに記載された旧 src/... パスを新配置へ更新した。
  • CLI ルートを含む全 123 help 対象の出力を移動前後で比較し、差分がないことを確認した。npm run build で dist/ を全消去して再生成し、旧直下出力が残らず dist/commands/・dist/shared/ に新配置どおり出力されることを確認した。node tools/build-if-stale.mjs も終了コード 0 で完了した。
  • catalog build・catalog validate・register build を実行し、更新したカタログと個票から生成物を再生成できることを確認した。catalog 検証は成功し、既存の未作成文書に対する based_on 警告だけを報告した。
  • 親 runner の検証は executor 終了後に実行される。統合後の exec run --register は orchestrator が実施する close 条件として残る。

5. 関連ドキュメント ​