行カバレッジ — 公式の測定値
README のバッジ、README の CI(継続的インテグレーション)表、crates.io と PyPI(Python Package Index)のトップページ、kshana.dev の行カバレッジのページ、技術レポートにある「~95 % 行カバレッジ」は、この測定値を最も近い整数のパーセントに丸めたものです。これら六か所のいずれかが、下に記録した値と異なる数値を示すと tests/coverage_figure_doc_sync.rs が失敗するため、次の再測定ではそのすべてが一緒に更新されるか、まったく更新されないかのどちらかになります。
| 測定値 | 95.35 % — 58,697 行中 55,970 行 |
| コミット | db796dd(エンジン 0.29.0、v0.29.0 タグ) |
| 実行 | GitHub Actions、ci.yml ジョブ coverage、実行 36809850252、2026-10-01 |
| ツール | cargo tarpaulin --engine llvm(LLVM ソースベースの計装) |
| 適用範囲 | src/。生成されたデータテーブル src/*_data.rs と薄い CLI(コマンドラインインターフェース)のエントリポイント src/main.rs は除外し、tests/ と web/ は測定対象外です |
| アーティファクト | その実行に添付された coverage-lcov(lcov.info、ソースファイル 290 件) |
| 下限 | 同じジョブは 85 %(--fail-under 85)を下回ると失敗します — 下限はプッシュのたびに適用されます。上の数値は記録であり、ゲートではありません |
.github/workflows/ci.yml からそのまま引用したコマンド:
cargo tarpaulin --engine llvm --out Lcov --output-dir coverage \
--exclude-files 'src/*_data.rs' --exclude-files 'src/main.rs' \
--exclude-files 'tests/*' --exclude-files 'web/*' \
--timeout 3600 --fail-under 85
Re-measuring#
main へのプッシュのたびにジョブが再実行され、新しい lcov.info が添付されます。公表する数値を更新するには、成功した実行からアーティファクトをダウンロードして合計します:
gh run download <run-id> -n coverage-lcov -D /tmp/cov
awk -F: '/^LF:/{f+=$2} /^LH:/{h+=$2} END{printf "%.2f%% (%d/%d)\n", 100*h/f, h, f}' /tmp/cov/lcov.info
そのうえで、上の表と六つの掲載箇所を同じコミットで更新してください。見落とした箇所は、ドキュメント同期テストが指摘します。
履歴#
この数値は、書き直したのではなく再測定したものです:コミット b1d350d(エンジン 0.27.2 + 未リリース、実行 35934579709、2026-09-24、39,419 行中 37,697 行、~96 % として公表)で 95.63 %、0.29.0(上記)で 95.35 % に改訂され、丸めると ~95 % になります:コードは測定対象で 19,278 行増え、新しい行は古い行よりわずかにカバー率が低くなっています。v0.17.0(コミット 1daa012、2026-06-14、~96 % として公表)では 95.85 %、それ以前の二つのリリースノート(CHANGELOG.md、履歴として残しています)では ~97 % でした。paper/kshana-technical-report.md は、この記録に合わせるまで「約 97 %」としていました。現在は、テストが固定する六番目の掲載箇所です。