Skip to content

feat(push-runner): fix 後の決定論再ゲートを追加 (push パイプライン改善 T12) - #289

Merged
aloekun merged 1 commit into
masterfrom
feat/post-takt-regate
Jul 17, 2026
Merged

feat(push-runner): fix 後の決定論再ゲートを追加 (push パイプライン改善 T12)#289
aloekun merged 1 commit into
masterfrom
feat/post-takt-regate

Conversation

@aloekun

@aloekun aloekun commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • takt (reviewers → fix loop) の後に post_takt_regate stage を追加し、fix が作業コピーを書き換えた場合のみ quality_gate 全 group を再実行して push を block する (検証不足の fully_resolved = PR refactor(cli-pr-monitor): poll/mod.rs + fix_commit.rs を 800 行以下に分割 (PR-W2) #224 型を pre-push でも遮断)
  • 変化検出は diff snapshot 前後比較 (Stage 1.5 の diff を takt 前に保持 → takt 後に [diff] command を再取得して比較)。metadata のみの変化に不感、pure fn decide_regate + closure 注入 (ADR-021 原則 3)。fail 方向は gate 系 fail-closed (判定不能 → 実行)
  • fix.md (共有 facet / ADR-020) の workspace 全体 + --ignored 自己申告義務を撤去し影響 crate の build -p + test -p に縮小。検証を決定論 gate へ委譲 (post-pr gate も rust-lint-test group で --ignored を既に担保 = 方針 3 は post-pr 側変更不要)
  • ADR-039 3 点セット: [post_takt_regate] default OFF / env POST_TAKT_REGATE_DISABLE=1 kill-switch / 本 repo enabled = true で dogfood
  • 新規 ADR-058 + ADR-037 §Mitigations 追記 + docs/push-pipeline-fix-plan.md §5/§8/§3 更新

Context

docs/push-pipeline-fix-plan.md の T12。takt の fix ループがコードを書き換えた後、pre-push 経路には決定論検証が無く fix.md の自己申告のみに依存していた。post-pr 経路は PR #224 の実害 (cargo test は通したが #[ignore] 統合テスト未実行の fix が回帰を素通し) 後に決定論 gate (cli-pr-monitor) で塞がれたが、pre-push は未対応だった。本 PR がその機械的 backstop を pre-push にも導入し、あわせて fix.md の重い自己検証 (fix execute 296s の主因) を gate へ委譲して縮小する。

Scope decision: 変化検出は commit_id + diff 二段構え (ADR-021 原則 1 の字面) ではなく diff snapshot 前後比較を採用 (ユーザー承認済み) — 前者は capture_commit_id / diff_is_empty の lib-jj-helpers 移設 + cli-pr-monitor 移行を要し PR が肥大化する (§2 原則 4)。後者は push-runner 内で完結し metadata のみの変化に構造的に不感。再ゲート範囲は quality_gate 全 group (ユーザー承認済み)。

Validation

  • cargo test -p cli-push-runner: 215 → 250 pass (post_takt_regate 11 本 + capture_diff_snapshot 2 本)、--ignored 2 本も pass
  • cargo clippy --workspace --all-targets --all-features -- -D warnings: 0 warning
  • pre-push review (pre-push-review-refute): security + simplicity 両者 APPROVE (1 iteration, 5m1s)
  • dogfood push: quality_gate 全 group PASS (rust-lint-test 50s)、post_takt_regate は「takt 前後で作業コピーに変化なし」で skip → push 成功 (新 stage が本番で正しく動作)
  • サンドボックス実機 before/after (配布 exe): 同一の破壊的 fix に re-gate ON=block/exit 1 vs OFF=push 到達/exit 0 (従来挙動)、無変更=skip、kill-switch=skip の 4 scenario
  • 効果 (fix execute 短縮量 / re-gate の block 実績) は 1 PR で測れず ADR-058 bounded lifetime (判定期限 2026-08-15) + T99 after 計測に引き継ぎ

References

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 新機能

    • takt 実行後に変更を検出すると、品質ゲートを自動的に再実行する仕組みを追加しました。
    • 変更を検出できない場合は安全側に倒し、再検証を実行します。
    • 再ゲートは設定で有効化でき、環境変数による停止にも対応しました。
  • 改善

    • 修正後の手動検証は影響範囲に限定し、包括的な検証を自動ゲートへ委譲しました。
  • ドキュメント

    • 再ゲートの動作、設定、運用方針、検証結果を文書化しました。

takt (reviewers → fix loop) の後に post_takt_regate stage を追加し、fix が
作業コピーを書き換えた場合のみ quality_gate 全 group を再実行して push を
block する。虚偽ではないが検証不足の fully_resolved (PR #224 型) を pre-push
でも遮断する。post-PR gate (ADR-037 §Mitigations) の pre-push 版。

- 変化検出は diff snapshot 前後比較 (Stage 1.5 の diff を takt 前に保持し、
  takt 後に再取得して比較)。metadata のみの変化に構造的に不感 (ADR-021 §
  commit_id 単独比較の限界)。判定は pure fn + closure 注入 (ADR-021 原則 3)
- fail 方向は gate 系 fail-closed (判定不能 → 実行)。ADR-021 原則 4 の
  repush 系 fail-safe (判定不能 → 何もしない) とは逆向き
- 再ゲート範囲は quality_gate 全 group (docs-only skip は fix 後は非適用)
- fix.md (共有 facet / ADR-020) の workspace 全体 + --ignored 自己申告義務を
  撤去し影響 crate の build -p + test -p に縮小。検証を決定論 gate へ委譲。
  post-pr gate も rust-lint-test group (--ignored 含む) を実行済で両経路担保
- ADR-039 3 点セット: [post_takt_regate] default OFF / env
  POST_TAKT_REGATE_DISABLE=1 kill-switch / 本 repo enabled=true で dogfood
- 新規 ADR-058 (試験運用、判定期限 2026-08-15) + ADR-037 §Mitigations 追記

回帰テスト: post_takt_regate 11 本 (decide_regate 全 5 分岐 + 統合 block/pass/
skip) + capture_diff_snapshot 2 本 (cli-push-runner 215 → 250 passed)。配布 exe
で re-gate ON=block/exit 1 vs OFF=push (従来挙動) / 無変更 skip / kill-switch の
4 scenario を実機で before/after 確認 (takt は自作 pnpm.exe stub で代役)。

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

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 3ca52b76-b9d5-4f8f-b3be-0e085b0de0b9

📥 Commits

Reviewing files that changed from the base of the PR and between ad535a5 and 5d53b66.

📒 Files selected for processing (13)
  • .takt/facets/instructions/fix.md
  • CLAUDE.md
  • docs/adr/adr-037-takt-fix-trust-shortcut.md
  • docs/adr/adr-058-post-takt-regate.md
  • docs/push-pipeline-fix-plan.md
  • push-runner-config.toml
  • src/cli-push-runner/src/config/lint_screen.rs
  • src/cli-push-runner/src/config/mod.rs
  • src/cli-push-runner/src/config/post_takt_regate.rs
  • src/cli-push-runner/src/main.rs
  • src/cli-push-runner/src/stages/diff.rs
  • src/cli-push-runner/src/stages/mod.rs
  • src/cli-push-runner/src/stages/post_takt_regate.rs

📝 Walkthrough

Walkthrough

pre-push 経路に post-takt re-gate stage を追加し、fix 前後の diff snapshot が変化した場合または判定不能な場合に quality_gate を再実行する。設定、パイプライン制御、判定テスト、ADR・手順書を更新した。

Changes

Post-takt 再ゲート

Layer / File(s) Summary
再ゲート設定の定義
push-runner-config.toml, src/cli-push-runner/src/config/*
[post_takt_regate] 設定と Config フィールドを追加し、enabled = true の場合のみ有効化する判定と関連テストを実装した。
snapshot とパイプライン配線
src/cli-push-runner/src/main.rs, src/cli-push-runner/src/stages/diff.rs, src/cli-push-runner/src/stages/mod.rs
takt 前後の diff snapshot を取得し、DiffGate を介して takt 後の再ゲートを実行する制御へ変更した。takt と再ゲートの失敗を別の終了コードで処理する。
再ゲート判定と実行
src/cli-push-runner/src/stages/post_takt_regate.rs
Disabled、kill-switch、NoChange、Changed、Indeterminate の判定を追加し、変更時または判定不能時に quality_gate を実行する fail-closed 制御とテストを追加した。
運用方針と設計文書
.takt/facets/instructions/fix.md, CLAUDE.md, docs/adr/*, docs/push-pipeline-fix-plan.md
影響クレート単位の検証へ方針を変更し、post-takt re-gate の設計、実装状況、設定および検証内容を文書化した。

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Pipeline
  participant DiffStage
  participant Takt
  participant RegateStage
  participant QualityGate
  Pipeline->>DiffStage: pre diff snapshot を取得
  Pipeline->>Takt: takt を実行
  Takt-->>Pipeline: 実行結果を返す
  Pipeline->>RegateStage: pre/post snapshot を比較
  RegateStage->>QualityGate: Changed または Indeterminate の場合に再実行
  QualityGate-->>RegateStage: gate 結果
  RegateStage-->>Pipeline: 継続または block
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed fix後の決定論再ゲート追加という主変更を端的に表しており、T12の改善内容とも一致しています。
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/post-takt-regate

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Monitor 分析 (GitHub Actions バックストップ)

  • トリガー: issue_comment (created) / 実行 run
  • CI: gh pr checks 上で報告されているチェックは CodeRabbit のみで pending (Review in progress)。他の CI チェック (Rust gate 等) は現時点で gh pr checks に出現せず、mergeStateStatusUNSTABLE
  • レビュー状況: CodeRabbit — レビュー未着 (review in progress のプレースホルダコメントのみ投稿済み、指摘本体は未生成)。人間レビュー・他 bot レビューともに 0 件 (reviews API 応答は空配列)。インライン指摘・会話コメントいずれも実質的な指摘なし。
  • Verdict: user_decision (CI 未完了・レビュー未着のため現時点では自動判定不能。指摘が出揃うまで待つ)

Applicable Findings (Critical / High / Major)

(該当なし — レビュー指摘が 0 件のため)

Applicable Findings (Medium 以下)

(該当なし)

Filtered (not applicable)

(該当なし)

diff 概要 (軽量サマリー)

  • 変更ファイル数: 13、主な追加: docs/adr/adr-058-post-takt-regate.md (+181, 新規 ADR)、src/cli-push-runner/src/stages/post_takt_regate.rs (+317, 新規ステージ)、src/cli-push-runner/src/config/post_takt_regate.rs (+115, 新規設定)、src/cli-push-runner/src/main.rs (+53/-13)、push-runner-config.toml (+35)。
  • 変更の性質: T12「fix 後の決定論再ゲート」機能追加。.takt/facets/instructions/fix.md の更新で fix ステップの責務 (crate 単位のビルド/テストのみ) を縮小し、workspace 全体のビルド/テスト・--ignored 統合テストを新設の post_takt_regate ステージ (pre-push 決定論ゲート) に委譲する構成。ADR-058 が新規根拠として追加されており、ADR-037 にも追記あり。設計方針は CLAUDE.md の ADR リストと整合的 (fail-closed 原則 ADR-043、責務分離 ADR-022 等に沿う内容に見える)。

次のアクション

  • CodeRabbit のレビュー完了を待ってから (次回起動時に) 指摘内容の適合性判定を行う。
  • CI チェック (特に Rust gate / test) の実行結果が gh pr checks に反映されているか次回確認し、UNSTABLE の原因を特定する。
  • 新設ステージ (post_takt_regate.rs) が実際に cargo test -- --ignored --test-threads=1 を含む full gate を fail-closed で実行することを、CI ログまたは後続レビューで検証することを推奨。

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