verify-bootstraplisted
Install: claude install-skill shimo4228/claude-harness
# verify-bootstrap — repo に機械ゲートを立てる
人間がコードを読む速度は、AI が書く速度に追いつかない。だから構造的な正しさの判定は
**機械に移す**。この skill は repo ごとに、
その時点で最良の検査ツールを立てる。
## この skill が持たないもの(設計上の中核)
**ツール名の一覧を持たない。言語の検出テーブルも持たない。** ツールは陳腐化する
(flake8 + black + isort → ruff は 2 年で起きた)。固定表を持てば表が腐り、
腐った表が repo に配られる。
持つのは **調べ方と契約**だけ:
- repo の実態を列挙する手順(静的な言語リストを参照しない)
- category ごとに何を search-first に問うか
- 生成物 `.claude/verify.sh` の契約(global hook がこれだけを知る)
- strictness と陳腐化検知の規律
結果として、この skill が書かれた時点で存在しなかった言語・ツールでも同じ手順で回る。
## モード
| モード | 起動条件 | やること |
|---|---|---|
| **bootstrap** | `.claude/verify.sh` が無い | Step 1–6 を通す |
| **audit** | 既にある(`--audit` / 「棚卸し」) | Step 1 を再実行し、`.claude/verify.md` の選定を search-first で引き直して差分を提案 |
## Step 1 — repo の実態を列挙する(検出、静的表なし)
推測しない。**実測する**。
```bash
# 追跡ファイルの拡張子分布(上位)— 生成物・依存ディレクトリは除く
git ls-files | sed -n 's/.*\.\([A-Za-z0-9_]*\)$/\1/p' | sort | uniq -c | sort -rn | head -20
# ビルド/依存マニフェストの実在
git ls-files | grep -iE '(^|/)(pyproject\.toml|package\.json|Cargo\.toml|go\.mod|Gemfile|pom\.xml|build\.gradle.*|[^/]*\.xcodeproj/.*|Package\.swift|mix\.exs|composer\.json|Makefile|justfile)$'
# 既存のゲート痕跡(重複導入の防止)
git ls-files | grep -iE '(pre-commit-config|lefthook|\.github/workflows/|trunk\.yaml|\.golangci|\.eslintrc|ruff\.toml)'
```
上のマニフェスト grep は**発見の補助であって権威ではない**。1 本目の拡張子分布が正本で、
grep に載っていない生態系が出てきたらそれを Step 2 にそのまま渡す(表を編集して
この skill に足さない — 表を持たないことがこの skill の設計)。
散文・設定・スキーマも対象に含める。コードだけがゲートの対象ではない
(Markdown の日本語 prose、YAML、CI 定義、シェルスクリプトはいずれも機械検査できる)。
## Step 2 — category