Skip to content

carul の根本原因 B: 周回とプランが「今の起動」の外にある成果(差し込みの値・検査の件数・問いの当て先・再開の位置)を参照せず、締め直しと再開で食い違う #2648

Open
0 of 3 issues completed

Description

@takemi-ohama

依頼(原文)

carulプロジェクトから大量のissueが届きました。
プロジェクトの進行に影響がある課題が多いので、そちらも1レーン使って対応します
ただし、いくつかの根本原因がトリガーのようですので、ひとつづつ直すのではなく根本原因を見つけて対処してください

阻害要因になっている上限の撤廃、保存先の永続化の問題、周回の問題が大きいようです

(書き手: 利用者、日付: 2026-11-06)

分割(2026-11-06)

束を修正の層ごとに 3 つの子課題へ分けた。1 周回で通せる大きさに刻むためである。

子課題 層 束に入る課題
#2663 プランの差し込みの値と検査の件数 #2568・#2569
#2664 問いの当て先と再開の位置 #2638・#2639・#2325・#2349・#2466
#2665 次の周回の設計の起点 #2528・#2489・#2503

#2344 の範囲は広げず、同じ形で子課題が足す。この課題は 3 件が閉じたら閉じる。

束 B(軸 3): 周回とプランの「今の起動」の外にある成果を参照しない

根本原因。 差し込み({queue_prs})・検査の件数・問いの当て先・再開の位置を、今の queue の起動・今の実行・今の周回の中の値からしか取らない。
周回が途中から始まる(昇格だけの周回)、プランを途中から流し直す、保留の周回を締め直す、という経路では、
成果が前の起動・前の周回にあるため空になるか断られる。

場所。

課題 場所
#2568 {queue_prs} は「後続のステージ」でしか埋めず、元は今の queue の items だけ plugins/ndf/scripts/supervise_lib/queue.py:224-227(prs = None if first else queue_prs(items))・plugins/ndf/scripts/supervise_lib/sprint.py:317(本番の段は前に検査の段がある前提で {queue_prs} を置く)
#2569 件数は最後の実行の state.json の log だけから写す plugins/ndf/scripts/check-trigger.py:484-491(findings_of)
#2638 hold-question は進行中の周回だけを受ける plugins/ndf/scripts/lib/sprint_loop.py:546-556(cmd_hold_question)。締め直しの cmd_finish(:524-534)の途中は「進行中」でない
#2639 --from は名前だけで照合する plugins/ndf/scripts/supervise_lib/queue_resume.py:85(named(p, name))

束に入る課題。 carul: #2568・#2569・#2638。同じ根: #2639(1 つ目)・#2528(前の周回でマージ済みの設計をやり直す)・#2489・#2503(出し直しの周回が設計 PR の最新から始まらない)・#2349・#2325・#2466。

直せば消える理由。 プランと周回が持つのは値ではなく参照(スプリント・課題・計画名)で、実行の直前に耐久の記録や GitHub から解決する(#2344 の形)。
{queue_prs} はスプリントの PR の集合を、件数は同じ計画の全実行を、問いの当て先は「保留中も含むその周回」を参照で引くので、
途中からの経路でも同じ値になる。

直しても残るもの。 #2639 の 2 つ目(配布の依頼の関門で queue --resume が 10 を返し、pipeline の && が loop lap を打たない)は
結果の契約(終了コード)の問題で、#2337 側に残る。

既存の柱との重なり。 #2344(プランは値でなく参照。マイルストーン 30。#2568 の本文も指摘)・#2342(#2325 の再開)・#2337(終了コード)。
#2344 は範囲を「版数・記録の PR・実行条件・流し直し」に絞っている(2026-11-05 の承認ゲート 1)。{queue_prs}・検査の件数・保留の周回の当て先は
その範囲の外なので、#2344 の範囲へ足すか、子として結び付けるかを決める必要がある(判断は supervisor 側)。


進め方

束に入る課題は 1 件ずつ直さない。この束の根本原因を直した後に、各課題の再現の手順を 1 回ずつ通し、消えたものを理由を添えて閉じ、残ったものは理由を本文に書く。

並列の計画 p3 のレーン lroot2(開発ループ lroot3)が受け持つ(オーガナイザーの判断、2026-11-06)。

束ねた調べ(worker の報告の全体)

0. 利用者の 3 つの軸ごとの数

軸 carul の課題 同じ根の他の課題 束
1 上限の撤廃 1 件(#2637。根は束 A)。ほかに carul は起動回数の上限(NDF_RELAY_MAX_STARTS)と周回・費用の予算に当たったが、起票は #2505 にまとまっている(carul の引継ぎ文書 30 行目「tmux の全体の環境に NDF_RELAY_MAX_STARTS=40 を置いた」・現在地の表の予算) #2505(柱) 束 E
2 保存先の永続化・引継ぎ 4 件(#2583・#2584・#2617・#2637) #2563・#2595・#2606・#2600・#2594 束 A
3 周回 3 件(#2568・#2569・#2638) #2639・#2528・#2489・#2503・#2349・#2325・#2466 束 B
軸の外: レーンの観測 2 件(#2509 の受け入れ条件 1〜4・#2585) #2629・#2477・#2563 束 C
軸の外: プロジェクトの宣言・環境(Value 6) 4 件(#2616・#2567・#2509 の受け入れ条件 5〜7・#2446) #2554・#2624(棚卸し)・#2623 束 D

引き金の連鎖(carul の 2026-11-05 の実測)。 束は別々の根だが、carul では次の順に連鎖して当たった。

  1. UV_PROJECT_ENVIRONMENT が子プロセスへ漏れ、利用者の uv run が NDF の共有の環境を作り直す(並列の計画が動いたまま finished で終わる) #2509: レーンの中で打った carul の uv run --project backend が、子へ漏れた UV_PROJECT_ENVIRONMENT のため NDF の共有の環境(~/.cache/ndf/venv/10.27.16)を作り直し、extras が消えた(束 D)
  2. その結果 relay.py ls が失敗し、観測が全レーンを stopped と読んで計画が誤って finished になった(束 C。run.log の先頭 2 行が finished)
  3. 同じ理由で 18:37:50 に parallel.py run の step_build → dev_version → import semver が ModuleNotFoundError で落ち、耐久ワークフローが ERROR になった(run.log。deps.require は起動時に versions を確かめているが、途中で環境を消されたため遅延 import が落ちた)
  4. ERROR の耐久ワークフローは続けられない(run_plan は status が None のときしか始めず、ERROR は output_of が同じ例外を返す)。オーガナイザーは記録を退避して作り直し、保留の依頼と問いを失った(並列の計画: 耐久ワークフローを作り直すと保留中の依頼と問いを失い、その後の答えを黙って捨てる #2617。並列の計画: レーンが新しい版で送った依頼が、古い版のオーガナイザーの wait に届かない #2584 の「届かない」もこの退避・作り直しの前後の送信と見られる。未確認)
  5. 別のコンテナのラッパーの更新が、共有の volume にある統括役の版の置き場を消し、起こし直しが何も出さずに失敗した(relay: プラグインの更新で統括役の版のラッパーの置き場が消え、レーンの起こし直しが何も出さずに失敗する #2583・中継: relay.py spawn・restart が「起動した」を返すのに、ラッパーが立ち上がっていない #2563)。その時間も stall に数えた(並列の計画: 起こし直しが失敗していた時間も含めて stall を数え、実際より長い「動いていない」の問いが出る #2585)

束ねる順の提案

順 何をするか carul への影響 手間
1 束 D のうち #2509 の環境の漏れ(deps.py:177 の後で外す)と、束 C の step_observe の終了コードの扱い(parallel_run.py:147) 連鎖の起点。誤った finished・ERROR・置き場の欠けを止める(止まる・誤る) 小(数行+テスト)
2 束 A の小さい直し: reply の未知の id を保留して警告を返す・cmd_start が動いている run でも印を付け直す・prune の持ち主の照合・launch の起動の確かめ(束 C と同じ箇所) 答えが黙って捨てられる・起こせない・起こせたと誤る(止まる・誤る) 小〜中
3 束 D の #2616(delivery の kind: auto で released、組めなければ止めずに failed)と #2567(テスト環境を起こすステップ) 配布の依頼 1 つで計画全体が止まる・偽の失敗で周回が止まる(止まる) 中
4 束 A の本体: 計画の台帳化(#2606・#2342 の設計の中で) 作り直し・再起動・更新の後に状態が戻る(止まる) 大
5 束 B(#2344 の範囲に足す) まとめが流れない・件数が欠ける・答えを当てる場所が無い(止まる・誤る) 中〜大
6 束 E(#2505 のとおり) 回避は環境変数で効いている(止まる回数は小さい) 中

1〜3 は、carul の連鎖の起点と、今いちばん人の手当てを要している箇所である。4・5 は柱の設計に乗せる。


全課題 → 束の対応表

課題 題(略) carul 束 備考
#2509 UV_PROJECT_ENVIRONMENT の漏れ・finished で終わる ○ D(受け入れ条件 5〜7)・C(1〜4) 連鎖の起点
#2567 テスト用コンテナを確かめずにテストが走る ○ D
#2568 昇格だけの周回で {queue_prs} が残る ○ B
#2569 途中からの流し直しで検査の件数が null ○ B
#2583 統括役の版の置き場が消える ○ A 受け入れ条件 2 は C
#2584 新しい版のレーンの依頼が wait に届かない ○ A 原因は未確定
#2585 起こし直しの失敗の時間も stall に数える ○ C
#2616 plugin.json の無いリポジトリで配布を組めず計画が止まる ○ D 止める扱いは別の 1 行
#2617 耐久ワークフローの作り直しで依頼と問いを失う ○ A
#2637 セッションの交代でオーガナイザーの印が付かない ○ A(症状は E)
#2638 締め直しの途中の問いを hold-question が断る ○ B
#2446 マージの hook が --repo を見ない ○ D carmo-cdk の PR のマージで見つけた
#2519 design: 外部の動向を調べる手順 ○ 外す 設計の工程の手順の課題。carul の事例を引くが、上の束のどのコードとも関係が無い(本文の題と依頼の節を読んだ)
#2623 配布を CD 前提に改める ○ 外す(D と重なる) #2616 の「CD があるときは配布の工程が要らない」を全体へ広げる課題
#2624 Value 6 の違反の棚卸し ○ 外す(D の柱) 表の 1 行目が #2616・#2554
#2168 Neural Development Factory のサービス化 ○ 外す Factory 全体の課題。束 A の永続化は #2608 で重なる
#2554 配布の版を develop の plugin.json から取る — D p3(ai-plugins)。dev_version が同じ箇所
#2563 spawn・restart が started を返すのに立ち上がらない — C p3。#2583 と同じ hub.py の launch
#2629 一時レーンを起こし直すたび「途中で止まった」の問い — C p3
#2477 ループを終えたレーンが running に見える — C p3
#2595 オーガナイザーの文脈が 800k でも再起動しない — A の関連 交代した後の続き方が束 A に依る
#2639 --from がフルパスを断る・関門で 10 — B(1 つ目)・#2337(2 つ目) lflow2
#2528・#2489・#2503 前の周回の設計をやり直す・出し直しが古いブランチから — B ai-plugins の開発ループ
#2505 上限の撤廃 — E の柱
#2606・#2600・#2594 置き場の寿命・持ち主・コンテナの再起動 — A の柱

追加の事例(スプリント lcarul2-4 の振り返り、2026-11-07)

周回を締めた後の再開が周回の記録へ戻らない。lcarul2 の周回 4 は、まとめの確定仕様の PR #2715 が用語集の CI で落ちて「失敗」で締まった。その後に PR #2715 はマージされ、リリース後テストと振り返りも再開で流れたが、周回の表の結果は「失敗」のままである(.ndf/loop/lcarul2/loop.json の周回 4 の outcome と failure)。子課題のどれで扱うかは未確認である。

由来: #2505 (comment)

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