Skip to content

v0.6.19 — main(args, io) を抽出(版数は据え置き)

Choose a tag to compare

@Driedsandwich Driedsandwich released this 15 Aug 03:52
· 49 commits to main since this release

v0.6.19 — main(args, io) を抽出しました。版数は上げていません

⚠ 先に読むところ

1. toolVersionschemaVersion も上げていません

外部監査 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 件も来ていません。**ジャック内部の接点位置は全部仮定のままで、
    導通測定も音響測定もしていません(verifiedPhysicalfalse)。
  • **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 変わらず

変わっていないもの

  • **モデルの数値。**接点位置も走査結果も同じです。
  • verifiedPhysicalfalse。実測記録は依然 0 件です。
  • toolVersion 20 / CLI 結果契約 schemaVersion 2 / catalog 82 種類。
  • 止め方の名前の一覧・archivePolicy・status・終了コードの意味。