Skip to content

#680 [ci] CI の隔離の probe が UNVERIFIED・判定なしでも job が success になる - #682

Merged
Kewton merged 1 commit into
developfrom
feature/issue-680-ci-ci-probe-unverified-job-success
Oct 16, 2026
Merged

Kewton merged 1 commit into
developfrom
feature/issue-680-ci-ci-probe-unverified-job-success

Conversation

@Kewton

@Kewton Kewton commented Oct 16, 2026

Copy link
Copy Markdown
Owner

Refs #680

概要

#677(PR #679)で、CI は dev.tty.legacy_tiocsti=1 を設定してから隔離の probe を流し、判定を COMMANDAGENT_PROBE_VERDICT_FILE に書くようになりました。ただし Report isolation probe verdicts の step は、次の場合も ::warning:: を出すだけで job を落としませんでした。

  • UNVERIFIED の判定があるとき
  • 判定のファイルが無いとき、空のとき

この PR では、この判定を scripts/check-probe-verdicts.sh に切り出します。上の場合は ::error:: を出して job を失敗にします。

変更の要約

  • scripts/check-probe-verdicts.sh(新規)
    • 判定のファイルは、第 1 引数で受け取ります。無ければ COMMANDAGENT_PROBE_VERDICT_FILE を使います。
    • 次のどれかなら、::error:: を出して exit 1 で終わります。
      • パスの指定が無い
      • ファイルが無い
      • ファイルが空
      • UNVERIFIED(大文字・小文字を問わない)の行が 1 行でもある(その行ごとに ::error::<行> を出す)
    • 失敗のときは、続けて次の 2 つを出します。
      • dev.tty.legacy_tiocsti を設定できなかった可能性があること(前の step「Enable legacy TIOCSTI for the isolation probes」のログを見るよう案内)
      • 今の値。sysctl -n で読めればその値、読めなければその旨。sysctl が無い環境でも途中で落ちません。
    • BLOCKED などの判定だけなら、見出しと内容を表示して 0 で終わります。
    • 先頭は set -euo pipefail です。sudo や sysctl の書き込みはしません。UNVERIFIED を許す仕組み(allowlist や変数)は入れていません。
  • .github/workflows/ci.yml(commandagent-guardrails の job)
    • Report isolation probe verdicts の step は、bash scripts/check-probe-verdicts.sh を呼ぶだけにしました。if: always() と env: は残しています。
    • 「This step never fails the job」の comment は、job を失敗にする今の挙動に合わせて直しました。
    • sysctl の step、Repository acceptance suite の step、ほかの job は変えていません。
  • tests/probe_verdicts_script.rs(新規)
    • temp のファイルで script を bash で流し、次の 4 通りを確かめます。
試験 入力 期待
unverified_verdict_fails_with_error_annotation UNVERIFIED の行(大文字と小文字) 0 以外。行ごとの ::error::。dev.tty.legacy_tiocsti の案内
empty_verdict_file_fails_with_error_annotation 空のファイル 0 以外。::error:: と案内
missing_verdict_file_fails_with_error_annotation 存在しないパス 0 以外。::error:: と案内
blocked_only_verdicts_succeed_without_error BLOCKED だけ 0。::error:: なし。見出しと内容を表示
  • 外から COMMANDAGENT_PROBE_VERDICT_FILE が設定されていても、結果は変わりません(子の process から外す)。script のパスは CARGO_MANIFEST_DIR から組み立てます。

利用者に見える挙動の変化

  • CI の Report isolation probe verdicts の step が、UNVERIFIED、ファイルなし、空のときに job を落とすようになります。
  • 製品のコード(src/)は変えていません。試験の判定(record_unverified など)と、手元の cargo test の挙動も変わりません。手元で判定を失敗にするのは、この script を明示して呼んだときだけです。

検証(head b115c362)

  • 15 ゲート:commandmate verify passed 15/15。最後の commit の後、clean です。
  • cargo deny:ok。
  • Linux の確認:cargo-zigbuild clippy --all-targets --target x86_64-unknown-linux-gnu exit 0。
  • shell と workflow:shellcheck scripts/*.sh と actionlint .github/workflows/ci.yml は exit 0。python の yaml でも読めます(step は if: always()、env は維持、run は script の呼び出しだけ)。
  • 新しい試験:cargo test --test probe_verdicts_script は 4 passed。
  • 二点測定(worktree の外の使い捨ての写し):
木 変えた点 結果
HEAD — 4 passed
tpA UNVERIFIED の分岐の exit 1 を exit 0 にした FAILED:unverified_verdict_fails_with_error_annotation
tpB 失敗の分岐の exit 1 を 4 つとも exit 0 にした FAILED:missing・empty・unverified の 3 本
  • この PR の CI での step の出力(全部 BLOCKED で成功するか)は、checks の後に確かめます(受け入れ条件 3)。

開発の体制

  • Command Code が使用量の上限に達していたため、worker は Antigravity でした。
  • コマンドと編集の確認には、許可リストに従って 1 回ずつ答えました(常に許す設定は使っていません)。許可リストの外の確認には、利用者の許可のもとで人が答えました。
  • leader が、上の検証を独立に行いました。

🤖 Generated with Claude Code

@Kewton
Kewton merged commit e9c7381 into develop Oct 16, 2026
5 checks passed
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