HN 日本語サマリー

← 一覧へ戻る
プログラミング

ProofRun – AIコーディングエージェントのためのローカル検証レシート

ProofRun – a local verification receipt for AI coding agents (github.com)

4 pointsby yebiguo0 コメント

要約

ProofRunは、AIコーディングエージェントが実行したテストやチェックの結果を、コードの正確な状態と暗号学的に紐付けるローカル検証レシートシステムです。AIが「テストはすべてパスした」と主張しても、それが過去のコード状態に対するものか、現在のコードに対するものか区別がつかない問題を解決します。コードが変更されると結果は自動的に「STALE」(期限切れ)とマークされ、常に最新のコードに対する検証結果であることを保証します。

全文翻訳

ProofRun AIコーディングエージェントのためのローカル検証レシート。English · 简体中文 ProofRunは、あなたのコードが正しいかどうかを判断しません。それは、あなたの現在のコードに対して実際にどのチェックが実行されたかを、お願いするのではなく、暗号学的に証明します。AIコーディングエージェントが「すべてのテストにパスした」と言いました。本当かもしれません。それは、エージェントが最後にテストを実行した時の真実だったかもしれません。しかし、それは3回の編集前だったかもしれません。エージェントはテストを実行したことさえ覚えていないかもしれません — 単に「変更は正しそうだ、テストはおそらくまだパスするだろう」と推測しているだけかもしれません。言葉だけでは、「実行してパスした」と「パスするだろうと確信している」を区別する方法はありません。ProofRunはそのギャップを埋めます。エージェントをより正直にすることによってではなく、主張自体を検証可能にすることによって。仕組み$ proofrun run test -- pytest ... test: pass (exit 0, 1841ms) $ proofrun status test PASS (exit 0, 1841ms) # この時点以降のコード変更 — エージェントまたは人間、関係なし $ proofrun status test STALE (last run: pass, exit 0 — code changed since) すべてのチェック結果は、あなたの正確なコード状態のフィンガープリントにバインドされます。gitコミット、およびコミットされていないもの(ステージング済みか否か、追跡されているか否か)すべてに対するハッシュ。1バイトでも変更すると、結果は自動的にSTALEに切り替わります。誰も「このPASSはまだ有効か?」と尋ねることを覚えている必要はありません。インストールcurl -L https://github.com/yebiguo/proofrun/releases/download/v0.2.0/proofrun_linux_amd64.tar.gz | tar xz # 他のプラットフォーム: https://github.com/yebiguo/proofrun/releases またはソースからビルド: go install github.com/yebiguo/proofrun/cmd/proofrun@latest クイックスタートproofrun init # .proofrun.ymlを書き込みます proofrun run test -- pytest # 実際にpytestを実行し、結果をバインドします proofrun status --strict # 何かがPASSでない場合、ゼロ以外の終了コードを返します なぜ単にエージェントを信頼するのではなく、これなのかAIコールは一切ありません。ProofRunはAIを使用してAIを検証しません。実際のサブプロセスを開始し、その実際の終了コードを読み取ります — それが全体のメカニズムです。4つのステータス、決して推測はありません。PASS、FAIL、STALE、NOT RUN — それぞれが観測された実行、またはその不在の記録から来ています。「おそらく大丈夫」という5番目のステータスはありません。完全にオフライン。ネットワークコールゼロ、テレメトリゼロ、アカウントゼロ。argv単位、文字列マッチングではありません。pytest -k "foo bar" として宣言されたチェックは、単にテキストにフラット化されたときに似ているように見えるコマンドでは満たされません — ProofRunは実際の引数配列を比較し、文字列ではありません。ProofRunが意図的に行わないことテスト出力の解析、コード品質の評価、自動修正は行いません。完全な境界についてはAGENTS.mdを参照してください。AIエージェントによって構築され、それによって説明責任を負うProofRunは、AIコーディングエージェント(Claude Code)によって人間の指示の下で書かれ、最初のリリース前に独立した読み取り専用の敵対的レビューを数ラウンド経ました。そのレビューでは、ProofRun自体のコマンド比較がだまされる可能性があることが発見されました。誤って引用されたシェル引数により、チェックがサイレントにゼロテストを実行し、それでもPASSを報告しました。完全な再現、正確な修正、および単純なパッチがなぜ十分でなかったのか → docs/case-study.md。すべての修正は、受け入れられる前に実際の再現で検証されました — 単に妥当性のレビューを受けただけではありません。AIエージェントを説明責任を負わせるために構築されたツールは、それ自体に適用されるのと同じ厳密さを生き残ることができない場合、存在すべきではありません。コマンドproofrun init # .proofrun.ymlを生成します proofrun run <check-name> -- <cmd> # 実際に<cmd>を実行し、終了コード+期間を現在のgit状態にバインドします proofrun run-all [--only <name>] # 宣言されたすべてのチェックを実行し、それぞれ後に結果を保存します proofrun status [--strict] # チェックごとのPASS / FAIL / STALE / NOT RUN; --strictは、必要なチェックがPASSでない場合にゼロ以外のコードで終了します proofrun report [--json] # 完全なレポート、人間可読または機械可読 設定: .proofrun.yml checks: test: command: [pytest] required: true build: command: [npm, run, build] required: true lint: command: [ruff, check, .] required: false commandはシェル文字列ではなくargvリストです — ProofRunはシェルを通過せず、実際に実行されたものと宣言されたものを比較するには、要素ごとに正確である必要があります。required: true は、チェックが status --strict をブロックするものであり、pre-commitフックまたはCIゲートに配線するものです。フィンガープリントの仕組み各結果は、現在のgit HEADと、git diff HEADの内容および未追跡の非無視ファイルの内容のSHA-256ハッシュにバインドされます。proofrun status は毎回そのフィンガープリントを再計算し、ローカルに保存されているものと比較します — 1つの変更されたスペースや新しいファイル1つまでの不一致は、STALEを報告します。GitHub Actionon: pull_request permissions: contents: read jobs: verify: runs-on: ubuntu-latest steps: - uses: yebiguo/proofrun@v1 これは独自のチェックアウトを実行し、正確なPRヘッドコミットを行います — 呼び出しワークフローが既にチェックアウトしたものを決して信頼しません。そのため、pull_requestトリガーは、GitHubの合成マージプレビューコミットをサイレントに渡すことはできません。その後、PRブランチで受信したレシート.jsonをすべてクリアし、チェックサム検証済みのproofrunバイナリをダウンロードし、実際にproofrun run-allを実行してから、proofrun status --strict でゲートします。PRブランチにチェックインされたレシートのいかなるものも決して信頼されません — ゲートが見るすべての結果はこの実行によって生成されました。既知の制限:これは、コードを変更するのと同じPRによって.proofrun.yml自体が弱められるのを防ぐものではありません — PRはチェックのコマンドを緩めたり削除したりする可能性があり、Actionは弱いバージョンを忠実に再実行します。PRブランチとベースブランチが異なる場合(ビルド注釈を介して警告しますが、ブロックしません — 上記の「既知の制限」を参照)、その差分は他の変更部分と同じようにレビューする必要があります。ロードマップv0.3 — 一般的なテストランナー(pytest、Jest、JUnit)の構造化出力サポート署名付き改ざん防止レシートはレーダー上にありますが、まだ設計されていませんPRでコードを変更するのと同じように.proofrun.yml自体が弱められるのを防ぐ(現在は警告のみ、ブロックなし — 上記「既知の制限」を参照)貢献IssueとPRを歓迎します。これは若く、1.0未満のプロジェクトであり、狭く意図的なスコープを持っています — STALE検出またはレシートスキーマに触れる可能性のあるものは、AGENTS.mdを参照してください。これらの部分は、このプロジェクトが最も間違いを犯す余裕がない部分です。ライセンスMIT