メインコンテンツまでスキップ
バージョン: 開発中

検証と貢献時の規則

npm ci
npm run check

Rustの整形、警告をエラーにするclippy、Rust単体テスト、厳格なTypeScriptの型検査、参照実装の適合性テスト、Rust/TypeScriptの差分テスト、新規の3段階セルフホストブートストラップを実行します。Cargoのlockは必須です。リリースの検証では cargo build --locked --release も実行してください。CIもpushとPRで同じ検証を行い、デプロイ用の認証情報は使いません。自己ビルドした両段階で正常・異常・ランタイム・Workersのテスト群を実行し、受理する出力はRustシードとバイト単位で一致させます。ブートストラップにはソース、ABI、ランタイム、生成物のハッシュも記録します。

差分テストは実際のRust CLIで単独動作するモジュールを作り、シグネチャとエフェクトをTypeScriptと比較して、生成コードを実行します。Miniflare/workerdの結合テストでもRust出力を静的なWorkerモジュールとしてインポートし、DNSを変更せず、非同期ホストの許可、fuel、HTTPの結果を検査します。手書きのケースに加え、基本演算、構造化制御、関数の呼び出しと戻り、ローカル変数、ホストABI、型境界、Unicode・Intのエラー、実行上限、決定的な出力、上書き拒否、固定シードの算術プログラム80件、不正なソース150件を検証します。固定シードは広い範囲を再現可能に試すためのもので、網羅的なファジングや正しさの証明ではありません。

フィクスチャのテストには一時ディレクトリを使い、そのテストが作ったものだけを削除します。ブートストラップの検証用生成物は調査できるよう、Git管理対象外の target/selfhost-* に残します。新しい実行で以前の生成物を上書きしません。テストは .env を読み込まず、クラウドの認証情報を使わず、リモートのリソース作成、DBの移行、アプリケーションのデプロイも行いません。ホストの実行時エラーには制御された偽物を使います。言語の成長に合わせて、構文解析器のファジング、より大きな制御フロープログラム、最適化バックエンドとの比較、ホスト境界への攻撃的なケースを追加します。

リポジトリの表現​

  • README.mdとGitHubの説明はASCIIアートだけで書きます。
  • コミットの件名と本文には 8、=、D、~、スペース、タブ、CR、LFだけを使います。例は 8====D 8===D~ です。
  • 説明、移行手順、使い方はdocs/に書きます。
  • 所有者が公開を明示的に許可するまでは、リポジトリを非公開にします。
  • 個人の作業記録、会話の原文、認証情報、インストールした依存、target/、dist/、ローカルの環境ファイルはコミットしません。

CIはREADMEとコミットメッセージの記号制限に加え、GitHub上の公開状態と説明も検査します。コミットの件名では意図的に変更内容を説明しないため、仕様、フィクスチャ、PR本文にレビュー可能な技術的背景を残してください。

オリジナルのソースはAGPL-3.0-onlyです。LICENSE、NOTICE、ランタイムの通知を保持してください。リポジトリの公開状態と、対応ソースを提供する義務は別の問題です。ライセンスを参照してください。

バージョン0.2の検証範囲​

構造化値のテストは、不変値の別名参照、密でアクセサーを含まないホスト境界、偽造した型証明、リストの最大長、重なったコピー、木の境界をまたぐコピー、空の範囲、割り当て計上を検査します。生成したコレクション操作を、独立した通常の配列モデルと比較し、評価器、Rustの出力、セルフホストの両段階で実行します。失敗時には固定シードを残し、自動的に target/counterexamples/ の小さな反例へ縮小します。縮小器自身にも最小性の回帰テストがあります。

再利用可能なrunnerのテストは、予算のリセット、以前の結果の保持、不正な引数、重なった非同期呼び出し、ホストエラーからの復旧を検証します。調査機能のテストは、ソース位置、分岐の合流、ローカル変数の初期化、間接的なエフェクトを確認します。ハードウェアの変動で正しいビルドを誤って回帰と判定しないよう、性能測定は正しさの合否判定から分けています。