# パフォーマンスゲートリファレンス

このリファレンスは、Taida の公開リリース品質を支える
パフォーマンス／リソースゲートを定義します。契約対象は
ゲートの構造・失敗条件・閾値・検証フィクスチャの範囲です。
本書は、どのマシンで測っても同じベンチマーク値が出ることを
保証する文書ではありません。

---

## ゲート一覧

| ゲート | ワークフロー | 起動契機 | 失敗条件 |
|--------|--------------|----------|----------|
| スループット回帰 | `bench.yml` | プルリクエスト・main への push・定期実行 | 最小サンプル数を満たした後、保存済み EWMA 基準値より 10% を超えて遅くなった場合 |
| ピーク RSS 回帰 | `bench.yml` | プルリクエスト・main への push・定期実行 | 最小サンプル数を満たした後、保存済み EWMA 基準値よりピーク RSS が 10% を超えて増えた場合 |
| Valgrind definitely-lost メモリ | `memory.yml` | プルリクエスト・push | `definitely lost` バイトが 1 でも検出された場合 |
| インタプリタカバレッジ閾値 | `coverage.yml` | 定期実行・手動起動 | `src/interpreter/` の行カバレッジが 80% 未満、または分岐カバレッジが 70% 未満の場合 |
| WASM 最小プロファイルのコードサイズ | `ci.yml`（テストスイート内のハードゲート） | プルリクエスト・push | wasm-min ビルドの hello world 出力が 512 バイト、または基準フィクスチャ出力が 9,664 バイトを超えた場合 |

カバレッジゲートはプルリクエストの高速経路には含めません。計測用
ビルドが通常のリリースビルドより大幅に遅いためです。ただし、本
ゲートが走行する場合は上記閾値を満たさないと失敗します。

---

## 基準値の扱い

スループットとピーク RSS は同じ回帰判定モデルを使います。

- 基準値は累積サンプル数が 30 に達するまでは警告扱いです。30 に
  達した時点から失敗条件として扱います。
- EWMA の更新には、最大幅 10 サンプルのアルファウィンドウを使います。
- 許容幅は実行時間・ピーク RSS のどちらも 10% です。
- スループット基準値ファイルとピーク RSS 基準値ファイルは、
  互換のスキーマを保つことが要求されます。

これらの基準値仕様は、ワークフロー変更によってゲートが暗黙に弱まる
ことを防ぐために固定されています。

---

## フィクスチャの範囲

リポジトリに同梱される perf-smoke フィクスチャが、ゲートの計測対象
ベンチマークの範囲を定義します。フィクスチャの削除、暗黙のワークフロー
フォールバック、失敗すべきゲートへの `continue-on-error: true` の追加は、
いずれも公開リリース品質の変更として扱います。

バックエンドごとに観測専用の計測を追加すること自体は許容します。
ただし、カバレッジ閾値の基準バックエンドはインタプリタです。

---

## コードサイズゲート

WASM 最小プロファイル（wasm-min）のコードサイズは、ホスト非依存の
小ささそのものが公開品質の一部です。

- hello world 相当の出力サイズに 512 バイトの上限を設けます。
- プレリュード関数・浮動小数点表示・比較演算を広く連結する基準
  フィクスチャの出力サイズに 9,664 バイトの上限を設けます。
- 上限はテストスイート内のハードゲートとして検証され、超過は
  ビルド失敗として扱います。ランタイムへ意図的に機能を追加して
  上限を引き上げる場合は、引き上げ理由をゲート側に記録した上で
  同一変更内で更新します。
- 実行性能の最適化がコードサイズへ与える影響は、本ゲートにより
  リリースごとに機械検証されます。

---

## Bytes I/O の不変条件

Bytes I/O の性能は、ゼロコピー経路を保つことに依存します。

- `readBytesAt(path, offset, len)` は、当該 API を公開するすべての
  バックエンドでバイトバッファの読み取りを提供します。
- WASI 向けの低水準化は WASI ホストインターフェイスのファイルオープン
  およびリード列を利用します。
- `Bytes` カーソルの slice は、チャンクごとにバッファ全体を複製せず、
  共有バッファの挙動を保ちます。
- 大容量フィクスチャは opt-in でも構いません。ただし不変条件テストは
  バッファ共有の挙動を引き続き検証します。

これらの不変条件はワークフローゲートだけでなくテストでも検証します。
