Repository navigation
[test] runner cleanup の終了順序と孫プロセス消滅を直接確認する #630
Copy link
Copy link
Closed
Description
親 Issue:#541(分割案 H、2026-10-09 起票。#626 で runner のテストの余裕を作った後)
背景
1 body が起動から probe・cleanup まで全体を 5 秒で測り、続いて process group 消滅を 2 秒で測る。起動待ちが cleanup の遅さとして扱われる。
元 Issue 541 の第 2 群を扱う。調査基準は fetch 済み develop の f8ce541。失敗を再現済みという意味ではない。
対象ファイル
src/planner/runner/tests/acceptance_boundary_tests.rssrc/planner/runner/tests/support/process.rs
直し方
- 既存の cleanup_fn 注入点を使い、child と grandchild の ready を確認してから cleanup の区間を測る。ready は PID だけでなく孫の起動完了を意味する合図にする。
- cleanup 完了、pipe の EOF、process group の ESRCH を別々に確認する。全工程の 5 秒 assertion を単に削除せず、cleanup 自体の既存上限と deadlock 検出を残す。
- helper は既存の重複を整理して収める。baseline を増やさず、ポート修正 M の後に差分を作る。
受け入れ条件
- start・wait・probe・cleanup の順序、cleanup ok、readiness evidence とログが保持される。
- 実 child と grandchild が消滅し、pipe が閉じる。cleanup を呼ばない変更や孫を残す変更を検出できる。
- 対象 test と 2 checkout 同時 3 回が通り、runner の個別・総量の行数上限を満たす。
検証
- cargo test --lib dev_server_cleanup_kills_grandchild_process_group_without_pipe_deadlock
- cargo test --test generality_guardrails
- cargo fmt --all -- --check
- cargo clippy --all-targets -- -D warnings
- cargo test
依存と規模
先行条件: M の後。M と同じ 2 ファイルを変更する。
test 1、child helper 1、wait helper 1〜2、変更 60〜120 行、純増は acceptance 側 5 行以内・process 側 11 行以内に整理。
共通制約
- 製品の timeout 既定値、イベント名と schema、判定理由、検証・受入・証跡ゲートを緩めない。timeout 許容、成功までの再実行、未実行を pass とする扱いは禁止する。
- 無期限 wait を作らず、失敗時も子・thread・pipe を回収する。ready は対象実行の合図に拘束する。
- 既存の corpus 契約、recovery 契約、歴史的証跡、live runtime namespace は変更しない。本案は transport または test timing の修正であり、契約を変える必要が生じたら別途 scope を見直す。
- 同時実行の確認は将来の検証計画である。現時点の「build は 1 本ずつ」に従い、実行可能ファイルを逐次準備する。2 checkout の同時 test、ポート占有、実 PTY の実験はその枠を leader と調整してから行う。
根拠
src/planner/runner/tests/acceptance_boundary_tests.rs:104src/planner/runner/tests/acceptance_boundary_tests.rs:126src/planner/runner/tests/acceptance_boundary_tests.rs:156src/planner/runner/tests/acceptance_boundary_tests.rs:210src/planner/runner/tests/support/process.rs:71src/planner/runner/acceptance.rs:422src/planner/runner/acceptance.rs:1254
参照
docs/dev/dev-guardrails.mdtests/generality_guardrails.rsworkspace/tmp/0928/parallel-537/results/H-01/report.md
関連(参考)
- [test] 負荷やポート衝突で一時的に失敗しうる他のテスト群(#537 の洗い出しの残り) #541
- [test] 並列検証の CPU 競合やポート衝突で、実行環境に依存するテストが一時的に失敗する #537
補足(2026-10-09 PM)
- [test] runner acceptance の plan と Config fixture を共通化して 65 行の余裕を作る #626 の merge(fbd19fea)で、runner のテストの総量は 15,443 / 15,511 行(余裕 68 行)、対象の acceptance_boundary_tests は 1,294 / 1,367 行になりました。上の「依存と規模」の純増の目安は、その前の数字に基づくものです。H-08 の調査では、今のコードから純増 30〜60 行を見込んでいます。上限の数値は変えません。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
Merge pull request #639 from Kewton/feature/issue-630-test-runner-cle…
Kewton commentedon Oct 9, 2026
PR #639 で develop に merge しました(merge commit ddcb802、CI・acceptance・Next.js domain oracles success)。runner の cleanup の区間を孫の起動完了から測り、cleanup・process group の消滅・pipe の EOF を別々に確かめるようにしました(#541 の分割案 H)。cleanup の区間の上限は元と同じ 5 秒で、TERM で終わらず KILL に頼る形も検出します。