Skip to content

全体テストの CI 待ちが、PR で外したチェックをメインディレクトリの宣言から読んで待ち続ける #2317

Open

Description

@takemi-ohama

何が起きたか

スプリント m26-2 の #2231(PR #2306 )の実装プランで、test-run.py whole --pr 2306(ステップ test-all)が出力を 1 行も出さないまま 2472 秒で 2 回打ち切られ、プランが止まった(2026-11-01 01:35・03:17 JST)。PR の CI はすべて成功していた。

今の状態(2026-11-04、develop 252ddf8)

  • 原因 1 は解消した。plugins/ndf/scripts/lib/decl.py の契約で .ndf/project.json の置き場は worktree(delivery のキーだけメインディレクトリ)になり、worktree の宣言を先に読む
  • 原因 2 と受け入れ条件 2・3 は残る。lib/gh_checks.py の checks_outcome は一覧に現れないチェックを pending とみなし、test-run.py の _wait_ci は待つ間に待っているチェックの名前と経過を出さない

原因

  1. test-run.py の _wait_ci が待つチェックの名前は ts.decl_of(root) → project_decl.read_project_decl_checked から来る。この関数は メインディレクトリの .ndf/project.json を worktree より先に読む。配布を Claude Code と codex だけにし(すべてのプラグイン)、agy・kiro へは配らず cross 系の相手役だけにする #2231 は ci.required_checks から runtime-smoke (kiro)・runtime-smoke (agy) を外し、ワークフローからもそのジョブを外す。メインディレクトリ(develop)の宣言にはまだ残っているため、PR の head に現れないチェックを待ち続ける
  2. gh_checks.checks_outcome は一覧に現れていないチェックを pending とみなす(push 直後のため)。そのため、永久に現れないチェックでも上限(ci_wait_timeout 2766 秒)まで黙って待つ。その間に出力が無いので、プランの遅れの検出(2472 秒)が先に打ち切り、何を待っていたかが残らない

確かめ方: worktree で ts.resolve(decl_of(root)) の ci.checks を出すと kiro・agy が入る。worktree の .ndf/project.json の required_checks で checks_outcome を求めると success。

受け入れ条件

  • PR が ci.required_checks を変えるとき、CI 待ちは PR の head(worktree)の宣言で待つチェックを決める(またはそう決めた理由を設計に書く)
  • head のチェックの一覧が出そろった後も現れないチェックがあれば、待ち続けずに、その名前を挙げて stopped で返す
  • 待つ間に、待っているチェックの名前と経過を出力し、遅れの検出が「出力なし」で打ち切らない

回避

手で CI の結果を照合し、queue --resume ... --from impl-2231=doc-lint で次から続けた。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions