## 背景 #677(PR #679)で、CI の `commandagent-guardrails` の job は `dev.tty.legacy_tiocsti=1` を設定してから試験を流すようになりました。隔離の probe の判定は `COMMANDAGENT_PROBE_VERDICT_FILE` に書かれ、`Report isolation probe verdicts` の step で表示されます。PR #679 の CI では、すべての判定が BLOCKED でした(`issue667/tiocsti: blocked; legacy_tiocsti=1`)。 ただし、この step は UNVERIFIED の行やファイルの欠落を `::warning::` にするだけで、job を落としません(`.github/workflows/ci.yml:77` の「This step never fails the job」)。warning は PR の画面で見落としやすく、CI が green のまま「拒否を測れていない」状態に戻りえます。 GitHub の `ubuntu-latest` は 2026-10-19 から Ubuntu 26 に移ります。新しい image でも sysctl が書けるかは確かめていません。書けなければ TIOCSTI の probe は UNVERIFIED になりますが、今の形では気づけません。 関連:#667、#677 ## 問題 - **P1**:UNVERIFIED の判定、または判定のファイルが無い・空であっても、CI は success になる。#677 の受け入れ条件 1 の「CI で TIOCSTI の拒否を実際に測る」は、job の結果からは保証されない。 - **P2**:手元の実行(変数なし)や端末の無い環境では、UNVERIFIED は正当な結果。失敗にするのは CI だけにする必要がある。 ## 根拠(develop `7c969603`) - `.github/workflows/ci.yml:59`〜`:65`:`sudo sysctl -w dev.tty.legacy_tiocsti=1`(失敗しても job を落とさない)。 - `.github/workflows/ci.yml:70`〜`:91`:判定の表示。UNVERIFIED と欠落は `::warning::` だけで `exit 0`。 ## 対処の方向 1. `Report isolation probe verdicts` の step で、UNVERIFIED の行が 1 行でもあるとき、またはファイルが無い・空のときは、`::error::` を出して job を失敗にする。BLOCKED などの判定だけなら今までどおり成功にする。 2. 失敗にするのは CI の step だけにする。試験の判定(`record_unverified` など)や、手元の `cargo test` の挙動は変えない。 3. runner の image が sysctl を受け付けなくなったときは、失敗の message に「`dev.tty.legacy_tiocsti` を設定できなかった」ことと、その時の sysctl の値が分かるようにする(前の step のログを参照する形でよい)。 4. 将来、正当な理由で UNVERIFIED を許す必要が出たときは、この Issue の範囲では仕組みを入れず、その時に別の Issue で決める(黙って許す仕組みを先に作らない)。 ## 受け入れ条件 - [ ] step の判定を `scripts/check-probe-verdicts.sh`(新規)に切り出し、workflow はそれを呼ぶ。`tests/probe_verdicts_script.rs`(新規)の試験で、UNVERIFIED の行を含むファイル、空のファイル、ファイルなしの 3 つで script が 0 以外で終わり `::error::` を出すことを確かめる - [ ] 同じ試験で、BLOCKED だけのファイルでは script が 0 で終わることを確かめる - [ ] PR の CI で job が success(今の runner では全部 BLOCKED のため) - [ ] 試験の判定・期待、手元の `cargo test` の挙動を変えていない。検証のゲートを緩めていない ## 対象ファイル - `.github/workflows/ci.yml` - `scripts/check-probe-verdicts.sh`(新規) - `tests/probe_verdicts_script.rs`(新規)
Activity