Repository navigation
Description
依頼(原文)
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 では次の順に連鎖して当たった。
- 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) - その結果
relay.py lsが失敗し、観測が全レーンを stopped と読んで計画が誤ってfinishedになった(束 C。run.log の先頭 2 行がfinished) - 同じ理由で 18:37:50 に
parallel.py runのstep_build→dev_version→import semverがModuleNotFoundErrorで落ち、耐久ワークフローが ERROR になった(run.log。deps.requireは起動時にversionsを確かめているが、途中で環境を消されたため遅延 import が落ちた) - ERROR の耐久ワークフローは続けられない(
run_planは status が None のときしか始めず、ERROR はoutput_ofが同じ例外を返す)。オーガナイザーは記録を退避して作り直し、保留の依頼と問いを失った(並列の計画: 耐久ワークフローを作り直すと保留中の依頼と問いを失い、その後の答えを黙って捨てる #2617。並列の計画: レーンが新しい版で送った依頼が、古い版のオーガナイザーの wait に届かない #2584 の「届かない」もこの退避・作り直しの前後の送信と見られる。未確認) - 別のコンテナのラッパーの更新が、共有の 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)
Activity