v0.6.19 — main(args, io) を抽出(版数は据え置き)
v0.6.19 — main(args, io) を抽出しました。版数は上げていません
⚠ 先に読むところ
1. toolVersion も schemaVersion も上げていません
外部監査 P2(core / CLI 分離)の最後です。受け手の分岐は 1 つも変わりません。
toolVersion 20 のまま
schemaVersion 2 のまま(…cli-result.v2)
catalog 82 種類のまま(増減 0)
上げていない根拠(すべて実測):
出力 分離前に固定した **10 経路すべてが byte 一致**
(stdout / stderr / 終了コード。基準は dab485c2260c 時点のもの)
出しうる code 82 種類のまま
判定ロジック **差分 0 行**(触ったのは出口の形と設定の作り方だけ)
基準は repo に入っています(test/fixtures/cli-output-baseline.v1.json)。
npm run check:cli-output で**受け手も同じものを回せます。**CI にも段として入っています。
2. done() を「返す」形にはできませんでした。投げる形にしています
計画は「process.exit を呼ばず、投げるか返すへ変える」と書いていました。
実際に見ると、呼び出し側 6 か所のうち 5 か所が「その場で終わる」ことに依存していて、
done() の後ろにコードがそのまま続いています。返す形は選べません——
結果を出したあとも処理が進んでしまいます。
done() CliResult を投げる
main() 受け取って CLI 側へ渡す
CLI 側 io.stdout / io.stderr / io.exit を叩くだけ(判定は一切しない)
例外ですが、異常ではありません。done() が呼ばれた時点で結果は確定していて、
あとは呼び出し元まで戻るだけです。instanceof で見分けるので、途中の catch には拾われません。
**計画のほうを結果へ寄せていません。**計画書
(docs/CORE_CLI_SEPARATION_PLAN_20260815.md)の §3 は当初のまま残し、
実施記録に「どちらを選んだか・なぜか」を書いています。
3. io の注入だけで SOURCE_ARCHIVE_MISSING を踏めるようになりました
v0.6.18 の notes で、こう書きました。
ioへ filesystem を足しましたが、この経路には効いていません。
残した理由は先の話です——main(args, io)を抽出したあとは、
global を差し替えずに fs を注入できるようになります。
その土台が、この版で効きます。
global を 1 つも差し替えず、io だけを渡して main() を呼ぶ
→ SOURCE_ARCHIVE_MISSING / exit 2
対象 path の existsSync が呼ばれた回数 = 2(1 回目は通し、2 回目で false)
対照 差し替えなければ、同じ引数で別の code になる
main() が io しか見ていないことも確かめています——cwd を差し替えると
manifest を見失い、引数は args から取ります(process.argv を見ていません)。
4. 子プロセスの route 表と io 注入の、両方を残しました
io 注入ができたので表を片付けたくなりますが、寄せられません。
子プロセスの表(test/_cliRoutes.mjs)
配った 1 ファイルを、受け手と同じ起動のされ方で踏む
→ 終了コード・stdout の byte・入口の判定まで含めて確かめられる
io 注入(test/mainInjection.test.ts)
本体が io しか見ていないことを示す
→ global を差し替えないので「差し替えが効いていただけ」を排除できる
**io 注入は子プロセスへ効きません。**あの表は spawnSync で起動するので、
呼び出し側のオブジェクトは相手に届きません。
**同じ code を、別の入口から踏みます。**どちらか一方では足りません。
まだやっていないこと
- **実測が 1 件も来ていません。**ジャック内部の接点位置は全部仮定のままで、
導通測定も音響測定もしていません(verifiedPhysicalはfalse)。 - **
ioに fetch はまだ足していません。**足せばSOURCE_FETCH_*も
global を差し替えずに踏めます。接点の追加であって抽出ではないので分けます。 - BusyBox を oracle に足すこと。開発機にも CI にもありません。
- annotated tag への署名。
- 検算ツールの強化は試験した範囲までです。すべての細工に耐えることは示していません。
数えたもの
| v0.6.18 | v0.6.19 | |
|---|---|---|
| 単体テスト | 1364 | 1371(skip 0 / 失敗 0) |
| 検算ツール | toolVersion 20 |
変わらず 20 |
| CLI 結果契約 | schemaVersion 2 |
変わらず 2 |
| 止め方の名前(catalog) | 82 種類 | 変わらず 82 |
| 出力の基準(経路) | 10 | 変わらず 10(全件 byte 一致) |
検証対象(validate:profiles) |
14 | 14 |
| schema | 25 | 25 |
| 記録された入力 | 32 | 32 |
| 区間 / event | TRS 23/32・TRRS 30/36 | 変わらず |
変わっていないもの
- **モデルの数値。**接点位置も走査結果も同じです。
verifiedPhysicalはfalse。実測記録は依然 0 件です。toolVersion20 / CLI 結果契約schemaVersion2 / catalog 82 種類。- 止め方の名前の一覧・
archivePolicy・status・終了コードの意味。