v0.6.20 — io に fetch を足しました(版数は据え置き)
v0.6.20 — io に fetch を足しました。版数は上げていません
⚠ 先に読むところ
1. SOURCE_FETCH_* の 4 経路を、global を差し替えずに踏めるようになりました
実質の差分は 2 行です。
io へ fetch: (url, init) => fetch(url, init)
呼び出し await fetch(url, {…}) → await io.fetch(url, {…})
判定ロジック **差分 0 行**
AbortSignal.timeout が TimeoutError を投げる約束はそのままで、
差し替える側が同じ約束を守ればよい形です。
SOURCE_FETCH_FAILED fetch が throw
SOURCE_FETCH_TIMEOUT name = 'TimeoutError' で throw
SOURCE_HTTP_ERROR 503 を返す
SOURCE_BODY_UNREADABLE 本文の reader が失敗する
変異対照。io.fetch を素の fetch へ戻すと、この 4 件だけが落ちます。
globalThis.fetch を触っていないことも試験で確かめています
——触っていたら、この試験は「global の差し替えが効いた」ことしか示しません。
io.fetch が呼ばれた回数も数えます(各 1 回)。呼ばれていなければ別の経路で止まっています。
2. toolVersion も schemaVersion も上げていません
**受け手の分岐は 1 つも変わりません。**根拠(すべて実測):
既存 10 経路の出力 **byte 一致**(stdout / stderr / 終了コード)
出しうる code **82 種類のまま**(増減 0)
schemaVersion 2 のまま・配布 schema も不変
io は出力に出るか **0 件**(対照: stableReasonCode は 1 件)
io は道具の内側の仕組みで、受け手が読む値には現れません。
3. 既存の検査が 1 件、正しく鳴りました
「gh に依存していない」の検査が、こう書かれていました。
expect(SRC).toMatch(/await fetch\(/)
性質(外部コマンドに頼っていない)を、書き方で確かめていたわけです。
io.fetch へ寄せた瞬間に落ちました。
検査を緩める前に、性質が保たれているかを実測しました。
io の既定は組み込みの fetch そのものなので、性質は変わっていません。
そのうえで実態へ合わせましたが、両方の書き方を許すだけにはしていません。
変更後 await (io.)?fetch( を許す
追加 **io の既定が組み込みの fetch であること**も見る
(差し替え先が別物になったら、この検査の意味が消えるため)
対照 取得の経路を消すと落ちる
落ちたのは検査が正しく鳴ったからでもあります——「取得の経路がソースに見当たらない」
という状態は、本当に外部コマンドへ逃げたときにも起きます。区別がつきません。
4. 子プロセスの route 表は残し、io に足さなかったものもあります
子プロセスの表(test/_cliRoutes.mjs)は残す
io 注入は子プロセスへ効かない——spawnSync で起動するので、
呼び出し側のオブジェクトは相手に届かない
あの表は「配った 1 ファイルを、受け手と同じ起動のされ方で踏む」ためのもので、
終了コード・stdout の byte・入口の判定まで含めて確かめられる
io に足していないもの:
入口の判定(realpathSync)
「この道具が起動されたのか」を見るもので、**検証の入力ではない。**
差し替えられるようにすると、起動のされ方を偽れることになる
execFileSync(git rev-parse / git archive)
外部プロセスなので、差し替えるなら **PATH のほうが素直。**
子プロセスの route 表が偽 git を置いてそれをやっている
io に注入できるもの(現在):
cwd / argv / stdout / stderr / exit v0.6.18
existsSync / readFileSync / statSync / lstatSync / readdirSync v0.6.18
fetch **v0.6.20**
まだやっていないこと
- **実測が 1 件も来ていません。**ジャック内部の接点位置は全部仮定のままで、
導通測定も音響測定もしていません(verifiedPhysicalはfalse)。 - BusyBox を oracle に足すこと。開発機にも CI にもありません。
- annotated tag への署名。
- 検算ツールの強化は試験した範囲までです。すべての細工に耐えることは示していません。
数えたもの
| v0.6.19 | v0.6.20 | |
|---|---|---|
| 単体テスト | 1371 | 1376(skip 0 / 失敗 0) |
| 検算ツール | toolVersion 20 |
変わらず 20 |
| CLI 結果契約 | schemaVersion 2 |
変わらず 2 |
| 止め方の名前(catalog) | 82 種類 | 変わらず 82 |
| 出力の基準(経路) | 10 | 変わらず 10(全件 byte 一致) |
io に注入できるもの |
10 種類 | 11 種類(fetch を追加) |
検証対象(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・終了コードの意味。