Skip to content

chore: カバレッジ計測を pre-commit から pre-push へ移動#464

Merged
kkyosuke merged 1 commit into
mainfrom
usagi/pre-commit
Jun 28, 2026
Merged

chore: カバレッジ計測を pre-commit から pre-push へ移動#464
kkyosuke merged 1 commit into
mainfrom
usagi/pre-commit

Conversation

@kkyosuke

Copy link
Copy Markdown
Owner

目的

pre-commit で毎コミットごとに cargo llvm-cov(カバレッジ計測のインストルメントビルド)が走り、コミットが遅かった(~85s〜)。コミット体験を高速化しつつ、カバレッジ 100% ゲートは維持する。

変更内容

  • pre-commit: coverage ステップを削除。残るのは branch-name / fmt のみで高速化。
  • pre-push: cargo testcoveragecargo llvm-cov)に置き換え。llvm-cov はテストも実行するため、別途 cargo test は不要(重複排除)。clippy と並列実行。
  • document/06-conventions.md の Git Hooks 表を実態に合わせて更新(pre-push にカバレッジ確認を明記)。元々この表には pre-commit に coverage の記載が無く、実装とドリフトしていたのも解消。
  • scripts/coverage.sh のコメントを pre-commit → pre-push に修正。

カバレッジ担保

100% ゲートは引き続き二段で担保:

  • push 時(ローカル): pre-push で coverage_enforce
  • PR(CI): coverage.yml が 100% 未満で fail

テスト・確認方法

  • 本コミット自体が新しい pre-commit(coverage なし)で高速に通過することを確認。
  • push 時に pre-push の clippy + coverage(100% 強制)が通過することを確認。

🤖 Generated with Claude Code

毎コミットで cargo llvm-cov のインストルメントビルドが走り遅かったため、
pre-commit から coverage を外し pre-push へ移動。llvm-cov はテストも実行する
ため pre-push の cargo test を兼ねる形で統合し重複を排除した。100% ゲートは
push 時ローカルと PR の CI で引き続き担保する。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

📊 Test Coverage

🚀 いまのカバレッジ (Lines): 100.00% — この調子でいこう!

🎉✨ パーフェクト!全ファイル Lines カバレッジ 100% を達成しました 🏆🐰

@kkyosuke kkyosuke merged commit 0a93d47 into main Jun 28, 2026
4 checks passed
@kkyosuke kkyosuke deleted the usagi/pre-commit branch June 28, 2026 01:20
kkyosuke added a commit that referenced this pull request Jun 28, 2026
## 何を実行したか

usagi がセッションへ配布する同梱スキルを **機能(feature)単位で ON/OFF**
できる設定を追加した。グローバル設定(`~/.usagi/settings.json`)とプロジェクト個別設定(`<repo>/.usagi/settings.json`)の両方で切り替えられる。#462
で追加された PR 運用スキルを最初の対象機能 `pull-request` として扱う。

## なぜ

usagi 固有の `usagi-session` は常に効かせたい一方、#462
以降で機能ごとに追加していくスキルは、プロジェクトや好みによって使う・使わないを選びたい。これまで同梱スキルは一律で全セッションに配布されるだけで、利用者が切り替える手段がなかった。

`usagi-session` を常時 ON(設定対象外)に固定し、PR 運用スキル(`usagi-pr-create` /
`usagi-pr-update` / `usagi-pr-fix`)を `pull-request` 機能としてまとめて ON/OFF
できるようにする。今後追加するスキルも `SkillFeature` に機能を足してスキルへ紐付けるだけで、設定・画面・CLI に自動的に載る。

## 変更点

- **同梱スキルの機能グループ化**
- `domain/settings.rs`: トグル可能な機能を表す `SkillFeature` enum(現状
`PullRequest`、id=`pull-request`)を追加。`Settings.skill_features:
BTreeMap<String, bool>`(機能 ID→有効/無効、既定と同じ値は持たない)と
`skill_feature_enabled()`、未知キーを落とす `sanitized()`、`with_local`
のマージを追加。`LocalSettings.skill_features` と `skill_feature_override()` を追加。
- `infrastructure/skills.rs`: 各同梱スキル(`Embedded`)に所属機能
`Option<SkillFeature>` を持たせ、#462 の PR 3 スキルを `pull-request`
に、`usagi-session` を `None`(常時配布)に分類。`link` は実効設定を受け取り、**機能が有効なスキルだけ**
worktree に symlink する(`materialize` は従来どおり全スキルを展開)。
- **実効設定の解決**: `usecase/settings.rs` に `effective_for(repo_root)`
を追加し、`session create` 時にグローバル ⊕ ローカルの実効設定を解決して `link` に渡す(取得失敗時は既定=全
ON)。
- **設定画面 / CLI**: Config
画面の固定項目の下に、トグル可能な機能ごとの行を動的に追加(グローバル=On/Off、ワークスペース=Global/Override
の循環)。`usagi config` の一覧にも `skill:<機能 ID> true/false` 行を表示。
- **ドキュメント**(記載=実装済みに従い同 PR で反映):
`05-settings.md`(設定項目・ローカル設定・効く場面)、`04-orchestration.md`(同梱スキル一覧の機能表とトグル挙動)、`data/01-global.md`・`data/02-workspace.md`(JSON
例)、`design/04-config.md`(画面行)。

> 注: 同梱スキルのファイル(`assets/skills/usagi-pr-*`)と配布基盤は #462 でマージ済みのため、本 PR
の差分には含まない(main へリベース済み)。本 PR は ON/OFF 機構と機能への紐付けのみ。

## 動作確認

- `cargo fmt --check` ✅
- `cargo clippy --all-targets -- -D warnings` ✅
- `cargo test`(lib 2313 件+統合テスト)✅
- カバレッジ **lines 100% / functions 100%**(`scripts/coverage.sh`
の閾値強制/pre-push で通過)✅
- 追加テスト: domain(機能の既定/上書き/マージ/sanitize、serde
往復)、`skills`(無効機能はスキップし必須スキルは配布)、`usecase::settings::effective_for`、Config
画面の機能トグル行(グローバル On/Off・ローカル Global→On→Off 循環・ナビゲーション・行描画)。

UI はターミナル画面のため画像添付なし。Config 画面のレイアウトは `document/design/04-config.md` の
ASCII 図を更新済み(固定項目の下に `PR Skills < On >` 行が並ぶ)。

> 最新の main(#462 / #463 / #464 を含む)へリベース済み。依存する未マージ PR はない。

---------

Co-authored-by: test <test@example.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant