test(autonomy): kill-switch config のパースと awk 一致を固定する (順位 410/401) - #386
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughCodeRabbit 無料枠の観測結果を ADR に追加しました。自律性設定の TOML エッジケースと workflow shell の判定パリティをテストし、関連する計画項目と TODO を更新しました。 Changes自律性ポリシーとレビュー制限
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)(該当なし) Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)(該当なし) 次のアクション
|
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/adr-019-coderabbit-review-hybrid-policy.md`:
- Line 77:
未来日を記録日として使用している日付表記を修正する。docs/adr/adr-019-coderabbit-review-hybrid-policy.md
の77行目と docs/adr/adr-066-autonomy-global-kill-switch.md
の94行目は追記日を実際の記録日に変更し、docs/harness-improvement-plan.md
の193-194行目は完了日を実際の対処日に変更する。
In `@docs/adr/adr-066-autonomy-global-kill-switch.md`:
- Line 90: Update the ADR statement describing the autonomy-gate contract to
require callers to use the shared library’s sources and evaluate APIs, matching
the direct lib_autonomy_policy::evaluate usage in cli-fix-push-gate. Limit the
exit-code requirement to callers that invoke the CLI, rather than requiring it
universally.
In `@docs/harness-improvement-plan.md`:
- Line 194: Update the completed-item description in the ADR-066 harness
improvement plan entry to remove the claim of implementation “一致” and describe
the one-way guarantee instead: when the shell awk logic reads true, Rust must
return Some(true). Explicitly note that dotted keys and section headers
containing spaces may be accepted by Rust but cause the shell path to stop, and
that the test locks in only this fail-closed-direction parity.
In `@src/lib-autonomy-policy/tests/workflow_awk_parity.rs`:
- Around line 106-109: Update shell_says_enabled and its test flow to execute
the workflow’s case "$ENABLED_VALUE" in logic instead of comparing
shell_enabled_value directly to "true". Capture the workflow’s GITHUB_OUTPUT
proceed value in a temporary file, parse it as the workflow result, and assert
that every shell-true result implies Rust returns Some(true), preserving
detection of relaxed true|yes cases.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 73e7ed9e-f850-44a6-b7af-644799d9a702
📒 Files selected for processing (7)
docs/adr/adr-019-coderabbit-review-hybrid-policy.mddocs/adr/adr-066-autonomy-global-kill-switch.mddocs/harness-improvement-plan.mddocs/todo-summary2.mddocs/todo21.mdsrc/lib-autonomy-policy/src/sources.rssrc/lib-autonomy-policy/tests/workflow_awk_parity.rs
💤 Files with no reviewable changes (2)
- docs/todo21.md
- docs/todo-summary2.md
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)
Applicable Findings (Medium 以下)
Filtered (not applicable)
次のアクション
|
…で固定する 順位 410: 順位 408 の修正時に手で確認した edge case がテストとして残っていなかった。 順位 401: CodeRabbit 無料枠の窓の挙動を ADR-019 へ観測として記録する。 - lib-autonomy-policy の boolean パース edge case を固定 (行内コメント / 空値 / 大文字 / literal string / 別 section / section 重複 / CRLF) - review-request.yml の awk 実装との一致を検証するテストを追加する。workflow YAML から shell 断片を抽出して実行し、Rust 実装と突き合わせる (原本を読むので workflow 側の変更に追随する) - 保証するのは等価性ではなく片側の含意 (shell が true なら Rust も Some(true))。 逆向きの既知の乖離は shell 側が厳しい = fail-closed で、その方向を固定する - ADR-019 へレート制限の窓が直近消費に追随する観測を記録する - ADR-066 の判定コアのパスが stale だったので訂正する 順位 410 / 401 / ADR-066 / ADR-019
ed267ad to
bcf5e74
Compare
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)
Applicable Findings (Medium 以下)
Filtered (not applicable)
次のアクション
|
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、 実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。 ## 実走観測の記録 - ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の 9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で 止まっている (拒否も success になる) ことを事実として記録する - ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する - 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく 「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは 解決しない可能性がある点を併記する ## 計画書の整理 (ADR-073 新設) - 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に 含め、WP 外の派生は含めない) を ADR-073 として切り出す - WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする - ローカル実行時の jj workspace 注記を ADR-072 へ移す ## post-merge feedback 採否 (順位 414-432) - 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした (実物と照合して確認) - 採用 19 件を系統 A-G + セッション由来へ分類して登録する - SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が 実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例 として記録し、順位 403 の対象へ含めるよう申し送る ## 付随 - todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する - todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す - cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する ADR-073 / 順位 414-432
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、 実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。 ## 実走観測の記録 - ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の 9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で 止まっている (拒否も success になる) ことを事実として記録する - ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する - 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく 「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは 解決しない可能性がある点を併記する ## 計画書の整理 (ADR-073 新設) - 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に 含め、WP 外の派生は含めない) を ADR-073 として切り出す - WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする - ローカル実行時の jj workspace 注記を ADR-072 へ移す ## post-merge feedback 採否 (順位 414-432) - 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした (実物と照合して確認) - 採用 19 件を系統 A-G + セッション由来へ分類して登録する - SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が 実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例 として記録し、順位 403 の対象へ含めるよう申し送る ## 付随 - todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する - todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す - cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する ADR-073 / 順位 414-432
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、 実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。 ## 実走観測の記録 - ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の 9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で 止まっている (拒否も success になる) ことを事実として記録する - ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する - 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく 「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは 解決しない可能性がある点を併記する ## 計画書の整理 (ADR-073 新設) - 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に 含め、WP 外の派生は含めない) を ADR-073 として切り出す - WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする - ローカル実行時の jj workspace 注記を ADR-072 へ移す ## post-merge feedback 採否 (順位 414-432) - 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした (実物と照合して確認) - 採用 19 件を系統 A-G + セッション由来へ分類して登録する - SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が 実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例 として記録し、順位 403 の対象へ含めるよう申し送る ## 付随 - todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する - todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す - cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する ADR-073 / 順位 414-432
Summary
autonomy-config.tomlの[autonomy] enabled) の boolean パース edge case を Rust 側で固定した (行内コメント / 空値 / 大文字 / literal string / 別 section / section 重複 / CRLF)review-request.ymlの awk 実装と Rust 実装の一致を検証するテストを追加した。workflow YAML から shell 断片をその場で抽出して実行し、12 fixture で突き合わせるshell が true ⇒ Rust も Some(true))。既知の乖離は shell 側が厳しい = fail-closed で、その方向自体を別テストで固定したContext
Why (順位 410): 順位 408 の修正時に手で確認した boolean パースの edge case が、テストとして残っていなかった。kill-switch は「欠損 → 停止」を不変条件にする機構 (ADR-066) なので、fail-closed に倒れることの確認が手作業のままだと次の変更で無音に壊れうる。
Why (順位 401): 2026-08-10 に PR #382 のレビューがレート制限で 3 回失敗し、告知どおりの時刻に投げても通らなかった。間に別 PR のレビューが成功しており、窓が直近消費に追随すると解釈するのが観測に整合する。ADR-072 決定 16 で自律 PR が毎晩 1 本消費するようになったため、人間の作業と競合する構造も新しい。
なぜ awk との一致検証まで入れたか: config 面の解釈は 2 実装に分かれている。
review-request.ymlは PR のコードを一切取得しない設計のため checkout せず API で config を読み、exe を実行できないので awk/sed で自前に解釈する。この乖離を放置すると、shell 側だけが緩くなった瞬間に kill-switch の config 面が無音で自己解除されうる。順位 410 の作業計画も「workflow の awk と Rust の解釈一致を確認できると望ましい」としていた。Scope decision:
[ autonomy ]) は awk が厳しい向きで fail-closed なので許容する。等価性を要求すると awk を TOML パーサに近づける改修が要り、投資対効果が合わない#[cfg(unix)]。当該 job はruns-on: ubuntu-latest固定で shell 実装が動くのは unix だけであり、Windows でsh/awkの有無に応じた skip を入れると「動かなかった」と「一致した」が区別できなくなる (ADR-043)Validation
cargo test --workspace: 全 crate green (lib-autonomy-policy36 pass、うち今回追加 8)cargo clippy --workspace --all-targets: 警告 0#[cfg(unix)]により 0 件実行になるため、実 Linux で必ず走らせて確認したechoの出力をテスト側が値と一緒に拾っていたためで、{ ... } >&2で stdout を分離して解消。Windows だけで書いていたら CI で初めて発覚していたpnpm lint:docs/ markdownlint: 0 errorverdict=APPROVE、non-blocking warning 0 件References
#[cfg(unix)]判断の根拠docs/todo21.md/docs/todo-summary2.mdから削除済)、WP-18 の運用問題 (docs/harness-improvement-plan.md)Summary by CodeRabbit
ドキュメント
テスト