日本語 | English
Method = TEP / Tool = grift(CodeScene 型の二層。方法論名は TEP、コマンドは grift)。
Named after the Grift product line.
量は誰でも作れる。残るものと、検証が伴った変更を測る。技量スコアではない。
「TEP 準拠」を名乗る利用の条件を docs/norms.md に定める(不在を負に読まない・単独足切り禁止・申告を負に読まない・同意なき第三者プロファイリング禁止・監視転用非準拠・選択性の明示・重み付け禁止の7条・日英併記)。本規範への適合を「TEP」の名の使用条件とする。
コミット数・行数・「活動量」は、エージェントと生成コードの時代に簡単に膨らむ。grift は git だけから、TEP の帰属(誰の仕事か)と検証層(test co-change ほか)を決定論的に出す。LLM は使わない。合成スコアも等級語彙も出さない。
pipx install grift-cli
cd your-repo
grift analyze # 分析結果を stdout に表示(repo スコープ)
grift verify # .grift/report.json を現在のリポジトリで再計算・突合基本操作はすべて grift <動詞> の2語で完結します。動詞の意味は「analyze = 表示(stdout)・report = 記録(.grift/)」です:
| 2語コマンド | 動作 |
|---|---|
grift analyze | カレントリポジトリをstdout に表示(repo スコープ・.grift/ は作らない) |
grift report | 分析して .grift/report.{json,md} に記録(常に現在の HEAD を再分析・既定 repo スコープ・--scope tenant 可) |
grift verify | .grift/report.json を同条件で再計算し改ざんを検出(VERIFIED / MISMATCH / CANNOT_VERIFY) |
grift contribute | .grift/report.json から opt-in 提出 payload を組む(何も送信しない・同意後に .grift/contribution.json を書き提出手順を表示)。--open で payload と meta ファイルをコミット済みブランチを fork に push し、ブラウザで PR 作成ページを開きます(残る操作は「Create pull request」ボタンのみ・gh CLI 利用・grift 自身はネット送信なし) |
grift update | grift-cli 自身を更新(--check は最新版の表示のみ・読み取り専用)。対話実行時に新しいバージョンがあれば1行のお知らせが出ます(GRIFT_NO_UPDATE_NOTICE=1 で非表示・CI/非TTYでは出ません) |
.grift/は出力専用ディレクトリです(無ければ自動作成)。リポジトリの.gitignoreに.grift/を追加することを推奨します- カスタム指定(対象パス・スコープ・出力先を明示)は従来どおり引数・オプションで:
grift analyze path --scope tenant --identity .tep/identity.toml --out dir --scope tenant(既定):.tep/identity.tomlに載った人の仕事 = 証拠用/--scope repo: bot 以外の全人間コミット = プロセス観測・参照分布用
参照分布 v2026.09 は repo スコープ同士でのみ照合する。tenant の値を repo 分布に載せない(混ぜたら分布が嘘になる)。
自リポで grift analyze . --format md を実行する。各数値に単位と provenance(method=TEP・tool=grift・定義版・分析 SHA・analysis_scope)が付く。
| 終了コード | 意味 |
|---|---|
| 0 | 成功 |
| 2 | 使用法エラー、または指定パスが git リポジトリでない |
| 1 | その他の予期しない失敗(詳細は stderr) |
--format json の stdout は JSON 1 件のみ(機械消費向けの純度保証)。--format md は markdown のみ、--format both は markdown → 空行 → JSON の順。診断とエラーは常に stderr。--out DIR を使っても stdout 規約は変わらない(report.md / report.json の追記のみ)。
report.json の全フィールド定義は docs/report-schema.md(schema report-v1・凍結済み・追加互換)。
grift analyze <repo> --export <dir> で commits.ndjson(1行=1コミット・origin/actor/cochange)・actors.json(canonical_id ごとの帰属と活動)・export-meta.json(config_digest つき)を書く。生メールアドレス・生 author 文字列は一切出力しない。顧客向け叙述に載る数値は report.json の集計値が正。詳細は docs/export-schema.md。
TEP Report 集計と参照分布 vNext への提出は、次の3段階で完結します:
grift report # ① repo スコープの report を作る
grift contribute --out .grift/contribution.json # ② payload を組み・全文を確認# ③ payload を [tep-contributions](https://github.com/Cor-Incorporated/tep-contributions) に PR で提出- 測定コマンド(analyze/report/verify)はネットワークに触れず、contribute は自動送信をしない(こちらへの自動送信は恒久にありません)。payload 全文が表示され、「この提出は公開コーパスに載る」ことが明示されます。
--openは本人の GitHub 権限で本人の fork にブランチを push し、最終ボタンは本人が押します - payload は repo スコープ集計値 + context_profile(クラス級)+ 定義版のみ。canonical_id・メール・パス・repo 名・tenant スコープ値は含まれません。payload には
metrics.provenance.analyzed_commit_sha(分析時点のコミット SHA)とanalyzed_at(分析時刻)が含まれます — SHA は中身を復元できない不透明値ですが、公開 repo では対象の特定に使えるため、推測リスク開示と同旨です - 受け口リポ(tep-contributions)の CI が schema(
tep-contribution-v1)と個人情報形状(メール等)を機械検証します - 用途は「TEP Report 集計と参照分布 vNext」に限定。保持期間は次回年次 Report まで・撤回は issue で受け付けます(
docs/norms.md保持・削除条項)
例(click、tenant スコープ。ゴールデン G1):
- test co-change: 0.2664 ratio(73 of 274)
- corrective rework: 0.0109 ratio(3 of 274)— 観測値。証拠主張ではない
- path retouch: 0.573 ratio — 観測のみ
母数 20 未満では率も分布位置も出さない(insufficient_population。件数の生表示のみ)。
Shared block(レポート冒頭 3-5 行のコピペ要約)には gloss(説明)を付けない。経歴書や issue にそのまま貼ったとき自己説明的な長文になるより、簡潔さ・貼りやすさを優先するため。各数値の意味は本文の行末 gloss と docs/metrics-guide.md が担う。
すべての指標について「何を測っているか・高い/低いで何がわかるか・公開リポジトリ117件の分布上の目安」を docs/metrics-guide.md に平易にまとめています。初めてレポートを見る方はまずこちらを。誤読しやすい点(例: corrective rework はバグ件数ではない、dormant は放置ではない)も表にしてあります。
| 指標 | 何の証拠か | 限界 |
|---|---|---|
| origin / 帰属 | 誰の仕事か | identity 未設定は unresolved。Cor 実メールは同梱しない |
| test co-change | 本番変更にテストが伴うか | テスト基盤なしは not_observed。母数<20 は率も十分位も出さない(insufficient_population) |
| corrective rework | 件名が fix/revert の直近パス回帰(観測) | 証拠主張から降格。件名規約依存の交絡あり。バグ件数ではない。再挑戦は v0.6 行レベル |
| path retouch | 同一ファイル再接触 | 観測のみ。証拠主張に使わない |
| survival (τ=180d) | 行の残り方 | --survival のみ。参照分布は v2027 予定。今回の公開分布には含めない |
参照位置は「第N十分位」の1行だけ。n<30 の指標は位置を出さない(reference_too_small)。現行 v2026.11 の観測 n: test co-change 68 / corrective rework 101(観測)/ survival 0(v2027 予定)。旧 v2026.09 は不変のまま --reference-version で選択可能。
出典: corpus/DISCRIMINANT-v2026.11.md(n=117・v2026.09 全行 + v2026.11 admission 70 件)。verdict はファイルから逐語。
test_cochange A vs D→separated(median_A 0.2379, median_other 0.0718, gap 0.1661, Cliff δ 0.9198, n 18/18)— 初めて n が立った分離。「量は誰でも作れる」テーゼの最初の強い実証test_cochange A vs C→fail_tier2(median_A 0.2379, median_other 0.0769, gap 0.161, Cliff δ 0.291, n 18/21)— v2026.09 ではseparated(δ 0.7143)だったが、C 群が「tests を持つ AI 駆動 repo」に広がり分離が低下。登録済み基準は下げず転回をそのまま公開するcorrective_rework A vs C / A vs D→ 方向要件なし(観測専用・v0.5.0 から不変)。A vs C δ -0.8333 / A vs D δ 0.0139- 母数の正直な記録: C narratable = 14(目標 30 に不足・admission 実測で訂正)/ D total 29(目標 20 達成)
- survival: 参照分布は v2027 予定
v2026.09 の記録(Run 2: A vs C separated ほか)は corpus/DISCRIMINANT-v2026.09.md に履歴として残してある。
uses: Cor-Incorporated/grift-cli@v0.5.4with:
scope: repogrift analyzeを実行し、$GITHUB_STEP_SUMMARY に共有ブロックを出力、report.md / report.json を artifact に upload- 合否・閾値・fail は実装しない(観測のみ・ゲート化は恒久にしない)
- PR コメント投稿は
comment: trueの明示オプトインのみ(既定 off) - permissions は最小限(
contents: readを推奨。comment: trueのみpull-requests: writeが必要)
- golden identity(再現検証用の公開コミットメタデータ由来メール)の削除依頼などは public リポの issue でお知らせください(非公開を希望される場合は private door の連絡先を tep-contributions の README で確認してください)
- Removal requests (e.g. for golden identity emails derived from public commit metadata): please open an issue on the public repository; see the tep-contributions README for the private contact channel.
- 実在個人のスコアカード・順位表は公開も内部共有も禁止
- 等級語彙(シニア/ジュニア/素晴らしい)を出さない
- コーパスの manifest(リポ名+SHA)は再現用に公開してよい。個別リポ値のリーグテーブルは公開しない
- 対照群 E(私的 ground truth)はこのリポに入れない
- 公開リポ: https://github.com/Cor-Incorporated/grift-cli
- コマンド名:
grift(方法論名 TEP はレポートに残す) - PyPI: 配布名
grift-cli(公開済み:pipx install grift-cli・最新版は PyPI を参照)
MIT. See LICENSE.