Skip to content

test(regression): 一度指摘されたのに直らなかった 2 件を設計意図ごとテストで固定する - #484

Merged
aloekun merged 1 commit into
masterfrom
test/pin-design-intent-in-regression
Sep 7, 2026
Merged

aloekun merged 1 commit into
masterfrom
test/pin-design-intent-in-regression

Conversation

@aloekun

@aloekun aloekun commented Sep 7, 2026

Copy link
Copy Markdown
Owner

何をしたか

post-merge feedback (#476#483) の採用分のうち、pre-push review / security review が実際に一度指摘したのに、テストが無かったために実装の側が直らなかった 2 件を回帰テストで固定します。追加したテストはすべて変異を入れて落ちることを実測しています。

1. lib-ledger — 台帳セル由来の失敗メッセージ (#481 系統)

  • reject_prompt_frame_escape から位置を持たない frame_escape_reason を切り出し、検査 C が渡していたリテラル 0 (= 実在しない「0 行目」がメッセージに混入) を無くしました。行の同定は順位で足ります。
  • 併せて両関数を screening.rs へ移しています。lib.rs が 800 行上限を超えたためですが、不可視文字判定の隣という置き場所としても自然です。
  • 追加した 4 本は、それぞれ別の変異で落ちることを確認しました:
    • 境界検査を列挙の後ろへ「返す」形にする → 2 本が落ちる
    • ディレクトリ宣言が無いセルで早期 return する → 1 本が落ちる
    • 行番号 0 を復活させる → 1 本が落ちる

なお「境界検査を先に計算する」だけの変異では落ちません。押さえているのは返す順であり、その旨をテストの doc に明記しています。

2. cli-nightly-outcome — 停止理由行の段限定 (#482 系統)

[NIGHTLY_AGENT_STOP] は「変更せず終了するとき」に限って書かせている接頭辞なので、理由行が説明として成立するのは guard 段と段不明のときだけです。変更がある段 (verify / ledger_completion / ledger_removal) で理由が書かれていたら申告と実態が食い違っているので、理由の中身ではなく食い違いそのものを 1 行にします (黙って落とすと証拠が消えるため)。

  • pre-push review が 1st run でこれを指摘しましたが、テストが guard の 1 ケースしか無く実装が直りませんでした。全段 × 全 reason の表で押さえます。
  • Unreadable だけは段によらず出します。execution file を読めないのは agent の申告ではなく配線の故障で、guard 段の夜まで見えないままにすると次に必要なときに使えません。

この変更で露見した e2e fixture の誤り

guard 停止の夜を模した e2e 3 本が VERIFY_OUTCOME を渡しておらず、verify=<未実行> が非成功と判定されて停止段が verify になっていました。理由行が無条件出力だったため今まで隠れていた誤りです。fixture 側を直しました。

検証

  • cargo test --workspace 62 スイート緑 / cargo clippy --workspace --all-targets 警告なし
  • 変異テスト 4 種を実施し、対応するテストだけが落ちることを確認

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 改善
    • 停止理由の表示を停止段階に応じて調整し、申告内容と実態の不一致をより明確に表示します。
    • 一部の停止段階では、理由が未提供の場合に不要な理由行を表示しないようにしました。
    • 判読できない理由は、停止段階にかかわらず表示されます。
    • 台帳データの制御文字・不可視文字・不正な区切り文字を検出し、問題のある入力を適切に拒否します。
  • テスト
    • 停止理由表示と台帳入力検証の各種ケースを追加検証しました。

post-merge feedback 採用分のうち、実際に一度指摘されたのにテストが無く実装が
直らなかった 2 件を回帰テストで固定する。

## lib-ledger: 台帳セル由来の失敗メッセージ (#481 系統)

- `reject_prompt_frame_escape` から位置を持たない `frame_escape_reason` を切り出し、
  検査 C が渡していたリテラル `0` (= 実在しない「0 行目」がメッセージに混入) を無くす。
  行の同定は順位で足りる。
- 併せて両関数を `screening.rs` へ移す (`lib.rs` が 800 行上限を超えたため。
  不可視文字判定の隣が置き場所としても自然)。
- 追加した回帰テスト 4 本は、いずれも変異を入れて落ちることを実測した:
  境界検査を列挙の後ろへ「返す」形にすると 2 本が落ち、ディレクトリ宣言が無いセルで
  早期 return すると 1 本が落ち、行番号 0 を復活させると 1 本が落ちる。

## cli-nightly-outcome: 停止理由行の段限定 (#482 系統)

`[NIGHTLY_AGENT_STOP]` は「変更せず終了するとき」に限って書かせている接頭辞なので、
理由行が説明として成立するのは guard 段と段不明のときだけ。変更がある段
(verify / ledger_completion / ledger_removal) で理由が書かれていたら申告と実態が
食い違っているので、理由の中身ではなく食い違いそのものを 1 行にする。

- pre-push review が 1st run で指摘したが、テストが guard の 1 ケースしか無かった。
  全段 × 全 reason の表で押さえる。
- この変更で **e2e fixture の誤りが露見した**: guard 停止の夜を模す 3 本が
  `VERIFY_OUTCOME` を渡しておらず、`<未実行>` = 非成功として停止段が verify に
  なっていた。fixture 側を直した。

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

coderabbitai Bot commented Sep 7, 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: Team

Run ID: 15543ed6-2eee-440e-bbd4-2a43379adf04

📥 Commits

Reviewing files that changed from the base of the PR and between c26a5ba and 796ba09.

📒 Files selected for processing (5)
  • src/cli-nightly-outcome/src/classify.rs
  • src/cli-nightly-outcome/tests/e2e.rs
  • src/lib-ledger/src/annotation_check.rs
  • src/lib-ledger/src/lib.rs
  • src/lib-ledger/src/screening.rs

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Changes

停止理由表示

Layer / File(s) Summary
停止段別の理由行表示
src/cli-nightly-outcome/src/classify.rs, src/cli-nightly-outcome/tests/e2e.rs
停止段と reason に応じて理由行を表示する。各停止段と reason の組み合わせをテストする。E2E fixture は VERIFY_OUTCOME を明示する。

台帳データ検査

Layer / File(s) Summary
共通 framing 検査
src/lib-ledger/src/screening.rs, src/lib-ledger/src/lib.rs
framing、制御文字、不可視文字の検査関数を screening module に追加する。既存の検査実装を移動する。
注釈行の境界検査統合
src/lib-ledger/src/annotation_check.rs
row_failure が共通判定を使用する。境界違反を列挙検査より先に返すことと、エラーメッセージの内容をテストする。

Estimated code review effort: 3 (Moderate) | ~25 minutes

Merge Risk: ⚪ Minimal · up to 796ba

停止理由の表示条件と台帳セルの境界検査を回帰テストで固定し、fixture の停止段判定も修正しています。現時点で、この変更によるマージを妨げる具体的なリスクは確認されていません。

🚥 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 タイトルは、過去に指摘された2件の回帰をテストで固定するという変更の主目的を正確に示しています。実際の変更には、lib-ledgerとcli-nightly-outcomeの回帰テスト追加、および関連するテスト支援変更が含まれます。
Docstring Coverage ✅ Passed Docstring coverage is 90.91% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 22 functions across 5 files.
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 test/pin-design-intent-in-regression

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

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

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

  • トリガー: issue_comment (created) / 実行 run
  • CI: rust (ubuntu-latest) / rust (windows-latest) は pending、request は skipping、CodeRabbit check 自体は pass(ただし中身は「10 stars 未満のため自動レビュー対象外」の skip 通知)
  • レビュー状況: 人間レビュー 0 件、インラインコメント 0 件。会話コメントは CodeRabbit の「Review skipped: manual review required for this OSS repository」通知のみで、walkthrough/summary の投稿なし。現 head (796ba090...) に対するレビュー実施の陽性証拠なし → 未実施 (陽性証拠なし)
  • Verdict: user_decision

Applicable Findings (Critical / High / Major)

該当なし

Applicable Findings (Medium 以下)

該当なし

Filtered (not applicable)

該当なし

次のアクション

  • レビュー指摘が 0 件のため diff 概要のみ: src/cli-nightly-outcome/src/classify.rs(停止理由行を段ごとに出し分ける reason_line_for_stage を新設し render_handoff から分離、テスト3件追加)、src/cli-nightly-outcome/tests/e2e.rs(既存 e2e 3件に VERIFY_OUTCOME 明示を追加— verify 停止と guard 停止の fixture 混同を修正)、src/lib-ledger/src/lib.rs / src/lib-ledger/src/screening.rsreject_prompt_frame_escapescreening.rs へ移設し、行番号を持たない呼び手向けに frame_escape_reason を新設)、src/lib-ledger/src/annotation_check.rsframe_escape_reason へ切替、境界チェックを列挙より先に返す順序保証のテスト4件追加)。PR タイトル通り、過去に指摘されたが直っていなかった2件(stage混同・行番号の虚偽表示)を設計意図ごと固定する regression test 追加が主旨。
  • CI(rust ubuntu/windows)が pending のため、完了後に結果を確認すること。
  • CodeRabbit は星数不足で自動レビュー対象外のため、人間によるレビューが必要。

@aloekun
aloekun merged commit e4123da into master Sep 7, 2026
4 checks passed
@aloekun
aloekun deleted the test/pin-design-intent-in-regression branch September 7, 2026 11:12
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