Skip to content

並列の計画: オーケストレーターからレーンへの指示が伝わらない(直して出し直すの指摘が設計に渡らない、ほか) #2510

Open

Description

@takemi-ohama

起票者の推定

この課題の本文(下の「依頼(原文)」)は、開発ループの記録と設計 PR を調べた AI が書いた。利用者の指示の原文は、本文の節「設計の承認ゲート 1 での利用者の指摘(直して出し直す)」(2026-11-05)だけである。そのため、その節に無い本文の条件は起票者の推定として扱い、承認ゲート 1 で利用者が確かめる。その節にある条件(「2026-11-05 の追加の形」の 3 つを要求に足すこと、自動の出し直しの上限)は利用者の指示として扱い、この表に載せない。

# 条件 推した出所 この要求での扱い
S1 出し直しの指摘の全文を、次の周回の設計のプランの入力に入れる 元の本文の受け入れ条件 1・直し方の案 1 受け入れ条件 1
S2 課題の本文の指摘の履歴は、次の周回で人の判断待ちへ移しても消えない 元の本文の受け入れ条件 2・直し方の案 2 受け入れ条件 3
S3 出し直しの設計 PR の本文に、指摘ごとの対応の表を置く 元の本文の受け入れ条件 3・直し方の案 3 受け入れ条件 4
S4 オーガナイザーは人に問う前に指摘と表を突き合わせ、届いていなければ人に問わずに直して出し直すへ戻す 元の本文の受け入れ条件 4・直し方の案 B 受け入れ条件 5(戻す上限は利用者の決定。前提 4)
S5 答えの種類ごとに読んで動く手順を 1 つ決め、references/parallel.md・loop.md に書く 元の本文の受け入れ条件 5・直し方の案 A 受け入れ条件 7(予算と止めるは前提 6)
S6 出し直しの指摘を持つ課題では、要求の写しが一致しても要求のステップを流し、起動指示に指摘を入れる 要求を書く前の本文の受け入れ条件 6。#2494 の例 受け入れ条件 1・2
S7 MVV 判定の材料に指摘を入れ、指摘と食い違う設計を「従う」にしない 要求を書く前の本文の受け入れ条件 7。#2494 の例 受け入れ条件 6
S8 指示の通り道を 1 本にまとめる作り直し(案 C)は、A・B の効き目を確かめてから要否を決める 元の本文の直し方の案 C 含まない
S9 推奨は A と B を両方入れること 元の本文の直し方の案の末尾。利用者の指摘(2026-11-05)が「A・B の部分はこのままでよい」と答えた 受け入れ条件 1〜7 の範囲として採る
S10 #2338(PR #2497)を差し戻し、この課題を直した後に選び直す。#2344(PR #2482)も次に出し直されたら差し戻す 元の本文の「今の回避」の 2026-11-05 の結果(「利用者の判断で」と書かれている) 含まない(ループの運用であり、この課題の変更ではない)
S11 取り込みのコミットだけの違いなら、承認を引き継ぐ 元の本文の追加の形(#2526)。利用者の指摘の (b) が同じ条件を指示した 受け入れ条件 11。「取り込みのコミットだけ」の判定は前提 7
S12 前のループの承認待ちは、計画を始めるときと周回の境でオーガナイザーへ送る 利用者の指摘の (c)。「前のループ」の範囲は起票者の推定 受け入れ条件 12。範囲は前提 8

依頼(原文)

書き手: 起票者(開発ループの記録と設計 PR を調べた AI)、日付: 2026-11-05。下は要求を書く前の課題の本文の全文である。利用者の指示の原文(書き手: 利用者、オーガナイザーが写した、2026-11-05)は、この本文の末尾の節「設計の承認ゲート 1 での利用者の指摘(直して出し直す)」にあり、ここへは写さない。

何が起きたか

開発ループで、承認ゲート 1 の答え「直して出し直す」(loop answer --revise --note <指摘ファイル>)の指摘が、出し直しの設計に反映されない。同じ指摘を 2 回送っても反映されなかった。

課題 設計 PR 指摘を送った時刻 出し直しの中身
#2344 #2482 14:50Z、21:09Z(同じ指摘を、直す箇所を名指しして再送) どちらの回も、指摘の後のコミットはレビューの指摘への手当てだけ。要求・受け入れ条件 1・決定 4・設計の I3・I7 は元のまま
#2338 #2497 21:09Z 指摘の後の 3 コミット(22:17〜22:28Z)は、ドキュメント再構成とレビュー 4 ラウンド目への対応だけ。範囲(60 ファイル・PR 7 本・3 スプリント)は元のまま

原因

  1. 指摘が設計のプランに入らない。 周回 9 の設計のプラン(/work/ai-plugins/.ndf/loop/lroot3/lap-9/sprint/1-design-2338.json)に、指摘の中身(監視が先に別の早期の警告を出していると、非致命にした permission_denials の件数を警告に残さない #2059・検査の記録の集計で閾値を見直せない: トリガーの評価が 0 回・落ちた工程が「不明」・流出不具合の記録が 0 行 #2300 に絞る など)が無い。設計の手順は指摘を読まずに、前の設計 PR をレビューの指摘だけで直した
  2. 指摘を書いた節が上書きで消える。 loop answer --revise は指摘を loop.json の人の判断待ちの行(note)と、課題の本文の節「人の判断待ち(開発ループ <名>)」に書く(lib/sprint_loop.py の apply_answer → mark_issue)。次の周回で同じ課題を再び人の判断待ちへ移すと、同じ節が「答え: まだ」で上書きされ、指摘が本文から消える。今の 1 回の実行を識別子 1 つで追える記録とログにそろえる #2338 の本文には、指摘がどこにも残っていない

影響

直して出し直すたびに 1 周回を使い、設計も人の承認も同じことを繰り返す。lroot3 の周回 2〜4・7〜9 の多くがこの形で使われた(#2507 の周回の表)。

直し方の案

  1. 出し直しの設計のプランに、指摘の全文を入力として渡す(設計の worker の起動指示に「この指摘を満たすように直す。満たせない項目は理由を書く」として載せる)
  2. 指摘を課題の本文の残る節(「直して出し直す」の履歴の節。回ごとに追記し、上書きしない)に書く。設計の手順はその節を読む
  3. 出し直しの設計 PR の本文に「指摘への対応」の表(指摘ごとに直した・直せない理由)を置く。オーガナイザーが承認を問うときに、そのまま材料にする

受け入れ条件

  1. loop answer --revise --note の指摘の全文が、次の周回の設計のプランの入力に入る
  2. 課題の本文の指摘の履歴は、次の周回で人の判断待ちへ移しても消えない
  3. 出し直しの設計 PR の本文に、指摘ごとの対応の表がある

広げた範囲: オーケストレーターからレーンへの指示が伝わらない(利用者の指示で検討、2026-11-05)

「直して出し直す」の指摘は 1 つの例である。2026-11-04〜05 の計画 p3 では、次の形が起きた。

送ったもの 届いたか 落ちた場所
設計の承認(approved) 記録には届いた 承認の後のマージに持ち主がいない(#2507)
直して出し直すの指摘(note) 記録には届いた 設計のプランが読まない。本文の節は次の周回で上書きされる(この課題)
同じ問いへの答え 行き違いで再送が来た 答えが届く前に、レーンが同じ問いを送った
引継ぎ文書の書き換え(ループ名・予算) 届いた レーンが起こし直しのときに読むので伝わった

共通の原因: 答えは記録(loop.json・耐久のイベント)には届く。しかし、その値を読んで動く側が決まっていない値がある。レーンが指示どおりに動いたかを確かめる手順も無く、人が設計を読んで初めて気づいた。

直し方の案

  • A. 読む側を決める(元を断つ): 答えの種類ごとに、読んで動く手順を 1 つ決める。承認はオーガナイザーが設計 PR をマージする(開発ループ: 承認した設計 PR を誰もマージせず、実装に進めないまま周回の予算が尽きる #2507)。直して出し直すは、指摘の全文を設計のプランの入力に入れる(上の 1・2)。予算は loop start --budget-* で上書きする
  • B. 届いたかを確かめる(漏れを拾う): 出し直しの設計 PR の本文に「指摘への対応」の表を置く(上の 3)。オーガナイザーは人に問う前に、指摘と表を突き合わせる。足りなければ人に聞かず、直して出し直すへ自分で戻す(同じ指摘のまま、届かなかった項目を名指しする)
  • C. 指示の通り道を 1 本にまとめる: 承認・指摘・止める・予算などを、種類を持つ 1 つのメッセージにする。レーンは周回の境で読んで「当てた」を記録し、当てていない指示はオーガナイザーの wait に出す。A・B の上位の形だが大きな作り直しになるので、A・B で効き目を確かめてから要否を決める

推奨は A と B を両方入れること。

受け入れ条件(足すもの)

  1. オーガナイザーは、出し直しの設計の承認を人に問う前に、指摘と「指摘への対応」の表を突き合わせる。届いていない項目があれば、人に問わずに直して出し直すへ戻す
  2. 答えの種類(承認・直して出し直す・やらない・予算・止める)ごとに、読んで動く手順が 1 つ決まっていて、手順書(references/parallel.md・loop.md)に書かれている
  3. 直して出し直す指摘を持つ課題の設計のプランでは、要求の写しが一致して requirements-check が 0 を返しても要求のステップが流れ、起動指示に指摘の本文が入る(テストで確かめる)
  4. 直して出し直す指摘を持つ課題の MVV 判定(mvv-gate.py check --gate design)の材料に指摘の本文が入り、指摘と食い違う設計は「従う」にならない(テストで確かめる)

同じ根を持つ課題

今の回避(2026-11-05)

#2338 と #2344 の本文に、節「設計の承認ゲート 1 での利用者の指摘(直して出し直す)」として指摘を写した。この節は上書きされない。設計の手順は課題の本文を読むので、これで届く見込みである。

目的

  • 人が承認ゲート 1 で「直して出し直す」と答えて送った指摘を、次の周回の設計が必ず読み、指摘ごとに直したか・直せない理由を示した状態で人へ戻す
  • 指摘が届いていない出し直しの設計を、人が読む前に機械と AI が見つけて戻す。人が同じ指摘を 2 回送ることを無くす
  • 人の答え(承認・直して出し直す・やらない・予算・止める)ごとに、その答えを読んで動く手順を 1 つに決める
  • 並列の計画で、オーガナイザーが送った承認がレーンのループの記録に必ず当たり、当たらなかったときはオーガナイザーが知る
  • 取り込みのコミットだけで設計 PR の先頭が動いても、同じ設計の承認を人へ問い直さない
  • 計画を始める前のループで承認待ちになった設計を、オーガナイザーの問いの一覧に出し、人の判断が要る設計を埋もれさせない

前提

  • 前提 1: 設計のプランに渡す指摘は、その課題について送られた全回の出し直しの指摘とする(最新の 1 回だけにしない)。前の回の指摘を満たした状態を、次の回の設計で崩さないためである。別の開発ループで送った回も含める。ループが替わると前のループの指示が届かない形は、この課題の受け入れ条件 12 と同じ根を持つためである
  • 前提 2: 指摘の項目は、--note に渡したファイルの箇条書き(- / *)と番号付きの行を 1 項目として数える。どちらも無ければ全文を 1 項目とする。「指摘への対応」の表はこの項目ごとに 1 行を持つ
  • 前提 3: 出し直しの指摘と「指摘への対応」の表の突き合わせ(受け入れ条件 5)は、人の判断待ちの行へ移す共通の経路で行う。並列の計画のオーガナイザーが問う場合と、並列でない開発ループの conductor が問う場合の両方に効く(Value 7。直す場所を経路ごとに分けない)
  • 前提 4(利用者の決定、2026-11-05): 人へ問わずに直して出し直すへ自分で戻すのは、人の出し直し 1 回につき 1 回までとする。2 回目も届いていない項目が残れば、届いていない項目を添えて人へ問う
  • 前提 5: 課題の本文の「出し直しの指摘の履歴」の節を書けなかった(GitHub の書き込みの失敗)ときも、ループの記録の人の判断待ちの行に指摘が残り、設計のプランは記録から指摘を読む。本文の節は人が読むための写しで、設計のプランの入力の正本はループの記録とする
  • 前提 6: 予算の答えは、既にある loop start --budget-* / sprint-state.py loop budget(予算の反映)が読んで動く手順とし、この課題で新しい経路を作らない。止めるの答えは、既にある loop stop が置く止める指示を周回の境で読む手順とする
  • 前提 7: 「取り込みのコミットだけの違い」は、問いの時点の先頭から今の先頭までに足されたコミットがすべて起点ブランチ(.ndf/worktree.json の base_branch)を取り込むマージコミットで、かつ設計 PR が変える設計文書と要求の写し(issues/issue-<番号>-*.md)の中身が問いの時点の先頭と同じであることで判定する。判定できない(照会の失敗・履歴を辿れない)ときは、今どおり問い直す
  • 前提 8: 「前のループ」は、同じリポジトリの開発ループの記録(.ndf/loop/<名>/loop.json)のうち、計画のレーンでないループすべてとする。名前の付け方や順序で前後を決めない。レーンのループが「人の判断待ち」を理由に選定から外す課題の待ちは、どのループの記録にあっても対象に入る
  • 前提 9: 開発ループ: 止める指示を人が送った停止だけから置く(人が送っていない文から置かれた止める指示が、再開後の境で user_stop を起こした) #2474 の承認がレーンの記録に当たらなかった原因は、この要求の時点で特定していない。依頼の id の打ち直し(設計 PR の先頭が動いたときに依頼を送り直すと、行の依頼の id が新しい id に置き換わり、古い id への答えが行に当たらない)が候補の 1 つである。受け入れ条件 10 は原因によらず観測できる形で書き、原因の特定は設計で行う

対象範囲

含む:

  • 出し直しの指摘を、次の周回の設計のプランの要求のステップと設計のステップの起動指示へ入れる
  • 出し直しの指摘を持つ課題では、要求の写しが一致しても要求のステップを流す
  • 課題の本文に、回ごとに追記して上書きしない「出し直しの指摘の履歴」の節を置く
  • 出し直しの設計 PR の本文に「指摘への対応」の表を置く
  • 人の判断待ちの行へ移す前に、出し直しの指摘と「指摘への対応」の表を突き合わせ、届いていない項目があれば直して出し直すへ戻す
  • 承認ゲート 1 の MVV 判定(mvv-gate.py check --gate design)の材料へ出し直しの指摘を入れる
  • 答えの種類ごとの、読んで動く手順の表を development-workflow の references/parallel.md・references/loop.md に書く
  • オーガナイザーの答え(parallel.py answer)がレーンのループの記録に当たらないときに、黙って捨てずにオーガナイザーへ知らせる
  • 取り込みのコミットだけで設計 PR の先頭が動いたときに、設計の承認の依頼を送り直さず、問いの時点の依頼への答えを当てる
  • 計画を始めるときと周回の境で、前のループの答えがまだの人の判断待ちを、オーガナイザーの問いの一覧へ送る

含まない:

ドメインイベント

# イベント 引き金 失敗したとき 順序の前提
E1 人が直して出し直すの答えを送った sprint-state.py loop answer --revise --note <ファイル> か parallel.py answer <計画名> <依頼> --revise --note <ファイル> ファイルを読めなければ答えを拒み、記録を書かない(今の振る舞い) 課題が人の判断待ちの行にある
E2 答えを人の判断待ちの行へ当てた(指摘の全文と回数を書いた) 並列でない開発ループでは E1 の場で、並列の計画ではレーンが周回の境で 記録を書けなければ答えを当てない。次の周回の境で当て直す。並列の計画で当てる行が見つからなければ E12 E1
E3 課題の本文の「出し直しの指摘の履歴」の節へ、その回の指摘を追記した E2 書けなければ理由を結果の note に残す。設計のプランは記録から読むので止めない(前提 5) E2
E4 次の周回で課題を先頭に選んだ 周回の選定(直して出し直す課題を先頭に選ぶ今の振る舞い) — E2
E5 設計のプランを組み、出し直しの指摘の全回分を要求と設計のステップの起動指示へ入れた E4 記録から指摘を読めなければプランを組まずに止める E4
E6 要求のステップが、要求の写しの一致によらず流れ、指摘に合わせて要求を直した E5 ステップが失敗すればプランの失敗として止まる(今の振る舞い) E5
E7 設計のステップが設計を直し、設計 PR の本文に「指摘への対応」の表を書いた E6 表が無いまま設計 PR を出したときは E9 で戻す E6
E8 MVV 判定が、出し直しの指摘を材料に含めて判定した 承認ゲート 1 の手前の MVV 判定 判定できなければ人へ問う(今の振る舞い) E7
E9 出し直しの指摘と「指摘への対応」の表を突き合わせた 人の判断待ちの行へ移す前 届いていない項目があれば、その項目を名指しして直して出し直すへ戻す(前提 4 の上限まで) E7・E8
E10 課題を人の判断待ちの行へ移し、判断待ちの節を書き直した(履歴の節は残る) E9 で項目がそろった、か前提 4 の上限に達した 本文を書けなければ理由を結果に残す(今の振る舞い) E9
E11 レーンが設計の承認の依頼をオーガナイザーへ送った E10(並列の計画のレーンのとき) 送れなければ今どおり人の判断待ちのまま(loop answer で答える) E10
E12 オーガナイザーの答えを、レーンのループの記録の行へ当てた レーンの周回の境、か waiting_only で止まったレーンを答えで起こしたとき 当てる行が見つからない・当てられないときは、依頼と理由をオーガナイザーの wait に出す。答えは捨てずに残し、次の境で当て直す E11
E13 設計 PR の先頭が問いの時点から動いたのを見つけた E12 の手前(承認の答えを当てる前) 先頭を読めなければ、次の境で読み直す(今の振る舞い) E11
E14 動いた分が取り込みのコミットだけかを判定した E13 判定できなければ問い直す(前提 7) E13
E15 前のループの答えがまだの人の判断待ちを、オーガナイザーの問いの一覧へ送った 計画を始めたとき・レーンの周回の境 記録を読めないループは飛ばし、飛ばしたループの名前と理由をオーガナイザーの wait に出す 計画のレーンが 1 つ以上ある

用語

用語 意味
出し直しの指摘 承認ゲート 1 で人が「直して出し直す」と答えたときに --note に渡したファイルの全文。レビューの担当が書く指摘ファイルとは別のもの
出し直しの指摘の履歴 課題の本文に置く、出し直しの指摘を回ごとに追記する節。人の判断待ちの節を書き直しても消えない
指摘への対応の表 出し直しの設計 PR の本文に置く表。出し直しの指摘の項目ごとに、直した / 直せない、直した箇所か直せない理由を 1 行で持つ
設計のプラン 開発ループの周回が課題ごとに組む、設計のフェーズのプラン(sprint/<番号>-design-<課題>.json)。要求・設計・レビュー・承認ゲート 1 のステップを持つ
答えの種類 人が承認ゲートや問いに返す答えの区分。承認・直して出し直す・やらない・予算・止めるの 5 つ
設計の承認の依頼 並列の計画のレーンが、承認ゲート 1 の判断をオーガナイザーへ求めて送る依頼。設計 PR の先頭の SHA を持つ
取り込みのコミット 起点ブランチを設計 PR のブランチへ取り込むマージコミット。判定は前提 7
前のループ 同じリポジトリの開発ループのうち、計画のレーンでないもの(前提 8)

受け入れ条件

  • 1. 課題に出し直しの指摘が 1 回以上ある状態で次の周回の設計のプランを組むと、要求のステップと設計のステップの起動指示に、その課題の全回の出し直しの指摘の全文が入る。起動指示は「この指摘を満たすように直す。満たせない項目は理由を書く」の旨を含む(テストで確かめる)
  • 2. 出し直しの指摘を持つ課題の設計のプランでは、要求の写しが課題の本文と一致して requirements-check が 0 を返しても、要求のステップが流れる(テストで確かめる)
  • 3. 直して出し直すの答えを当てるたびに、課題の本文の「出し直しの指摘の履歴」の節へ、回数・日付・設計 PR・指摘の全文が 1 回分ずつ追記される。その課題を次の周回で人の判断待ちへ移して判断待ちの節を書き直した後も、前の回の指摘が本文に残る(テストで確かめる)
  • 4. 出し直しの設計 PR の本文に「指摘への対応」の表があり、出し直しの指摘の項目(前提 2)ごとに 1 行を持つ
  • 5. 出し直しの設計を人の判断待ちの行へ移す前に、出し直しの指摘の項目と「指摘への対応」の表を突き合わせる。表が無い・行の無い項目がある・対応の欄が空の項目があるときは、人に問わずに、届いていない項目を名指しした直して出し直すへ戻す。戻すのは人の出し直し 1 回につき 1 回まで(前提 4)で、上限に達したら届いていない項目を添えて人へ問う(テストで確かめる)
  • 6. 出し直しの指摘を持つ課題の承認ゲート 1 の MVV 判定(mvv-gate.py check --gate design)の材料に、出し直しの指摘の全文が入る。判定の問いは、指摘の項目を満たさない設計を「従う」にしないことを含む(テストで確かめる)
  • 7. references/parallel.md と references/loop.md に、答えの種類(承認・直して出し直す・やらない・予算・止める)ごとに、その答えを読んで動く手順を 1 つずつ示す表がある。両方の文書で同じ表を写さず、片方が正本で、もう片方は正本を指す
  • 8. 出し直しの指摘を持たない課題の設計のプランは変わらない。要求の写しが一致すれば要求のステップを飛ばし、起動指示に指摘の欄が入らない(テストで確かめる)
  • 9. 直して出し直す以外の答え(承認・やらない)を当てたときの、承認の記録・ラベル・人の判断待ちの節の振る舞いは変わらない(既存のテストが通る)
  • 10. parallel.py answer <計画名> <依頼> --approved を送ると、持ち主のレーンの次の周回の境で、そのレーンのループの記録の該当する人の判断待ちの行に承認が当たる。レーンの記録が waiting_only で止まっていても当たる。設計 PR の先頭が動いて依頼を送り直した後に、送り直す前の依頼へ答えた場合も、取り込みのコミットだけの違い(受け入れ条件 11)なら当たる。当てる行が見つからないときは、答えを捨てずに、依頼の id と理由がオーガナイザーの parallel.py wait の出力に出る(テストで確かめる)
  • 11. 設計の承認の依頼を送った後に設計 PR の先頭が動いても、動いた分が取り込みのコミットだけ(前提 7)なら、レーンは依頼を送り直さず、問いの時点の依頼への答えを当てる。設計文書か要求の写しを変えるコミットが含まれるときと、判定できないときは、今どおり新しい先頭で問い直す(テストで確かめる)
  • 12. 計画を始めるときとレーンの周回の境で、前のループ(前提 8)の記録にある答えがまだの人の判断待ちの行が、オーガナイザーの問いの一覧(parallel.py wait の questions)に、ループの名前・課題・設計 PR を添えて出る。同じ行を 2 回出さない。その問いへの答えは、その行を持つループの記録へ当たる(テストで確かめる)
  • 13. レーンのループが「人の判断待ち」を理由に選定から外した課題は、その待ちを持つ行がオーガナイザーの問いの一覧に出ている(受け入れ条件 12 の行と同じものか、レーン自身の依頼)。問いの一覧に出ていない待ちを理由に外し続けることが無い(テストで確かめる)

非機能の条件

大項目 条件
運用・保守性 出し直しの指摘を読む処理と、指摘の項目を数える処理は、並列でない開発ループと並列の計画のレーンで 1 つの関数を共有する(Value 7)。取り込みのコミットだけかの判定は 1 つの関数に置き、依頼を送り直すかの判断と答えを当てるかの判断の両方がそれを使う
移行性 既にある課題の本文の「人の判断待ち(開発ループ <名>)」の節に残る指摘は移さない。この変更の後に当てた答えから履歴の節へ書く。ループの記録の既存の note は、設計のプランの入力として読める。既にある前のループの答えがまだの行は、この変更の後に計画を始めたときか次の周回の境で、問いの一覧に出る

影響

対象 影響
公開インタフェース 変わらない。loop answer・parallel.py answer の引数は今のまま。ループの記録の人の判断待ちの行は欄を足すだけで、既存の欄の意味を変えない。parallel.py wait の出力は、当たらなかった答えと前のループの問いの分だけ項目が増える
データ ループの記録(.ndf/loop/<名>/loop.json)の人の判断待ちの行に、自分で戻した回数・前の依頼の id などの欄が足りうる(形は設計で決める)。課題の本文に履歴の節が増える
既存の振る舞い 出し直しの指摘を持つ課題の設計のプランの要求のステップ・起動指示・MVV 判定の材料・人の判断待ちへ移す経路が変わる。設計 PR の先頭が動いたときの依頼の送り直しの条件が変わる。オーガナイザーの問いの一覧に、前のループの待ちが加わる

検証手段

項目 手段
テスト uv run --frozen --project . --all-extras pytest plugins/ndf/scripts/tests -q -n 4
静的解析 CI のジョブ(ruff ほか、リポジトリの既存の設定)
手動確認 配布の後、開発ループで出し直しの指摘を 1 回送り、次の周回の設計 PR に「指摘への対応」の表があり、指摘の項目が設計に反映されたことを人が読んで確かめる。並列の計画で、承認の答えがレーンの記録に当たること、起点ブランチを取り込んだ設計 PR で承認の依頼が送り直されないこと、前のループの待ちが parallel.py wait に出ることを確かめる(リリース後テスト)

前提とする取り決め

項目 参照先 / 決めたこと
プロジェクト構造 スクリプトは plugins/ndf/scripts/(ライブラリは lib/・supervise_lib/)、手順書は plugins/ndf/skills/development-workflow/references/。実験版の置き場は使わない(既定で働く経路を直すため、AGENTS.md の「安定版と実験版」の安定版)
コーディング規約 AGENTS.md の「最小限のコード実装」。.md の文言を照合するテストは書かない(受け入れ条件 7 は文書のレビューで確かめる)
テスト戦略 受け入れ条件 1〜3・5・6・8・10〜13 はスクリプトの単体テスト(plugins/ndf/scripts/tests/)で、外部の gh・git と CLI は差し替えて確かめる

境界

区分 内容
常に行う 既存のテストの実行、変更範囲内の語の統一(用語集の語に合わせる)
確認してから行う ループの記録の欄を足すこと、parallel.py wait の出力に項目を足すこと(承認ゲート 1 の設計で人が見る)
行わない 指示の通り道を 1 本にまとめる作り直し、#2507・#2489 が持つ範囲の変更、既存の課題の本文の書き換え、前のループの記録の書き換え(答えを当てる以外)

未決

項目 誰が決めるか 期限
「指摘への対応」の表を書く担い手(設計のステップの worker が設計 PR の本文へ書くか、設計文書に書いて PR の本文へ写すか) 設計(design) 承認ゲート 1
突き合わせ(受け入れ条件 5)のうち、表の行がそろっていても中身が指摘を満たさない場合の扱い。受け入れ条件 6 の MVV 判定に任せるか、別の判定を足すか 設計(design) 承認ゲート 1
#2474 の承認がレーンの記録に当たらなかった原因(前提 9)。記録と依頼の id を読んで特定し、受け入れ条件 10 の直し方を決める 設計(design) 承認ゲート 1
前提 1 の「別の開発ループで送った回も含める」に合わせて、出し直しの指摘の入力の回の取り方と回の識別子(ループの名前と回数の組)を決め直す。設計の不変条件 I1 は、いま回っているループの回に限っている 設計(design) 承認ゲート 1
前のループの待ちを問いの一覧へ送る担い手(オーガナイザーが計画を始めるときに読むか、各レーンが周回の境で読むか)と、同じ行を 2 回出さない方法 設計(design) 承認ゲート 1

設計の承認ゲート 1 での利用者の指摘(直して出し直す)

(書き手: 利用者の答えをオーガナイザーが写した、日付: 2026-11-05。出し直しの設計はこの節を満たすように直す。この節は上書きしない)

利用者の判断(2026-11-05): 直して出し直す。A・B の部分はこのままでよい。

  1. 課題 並列の計画: オーケストレーターからレーンへの指示が伝わらない(直して出し直すの指摘が設計に渡らない、ほか) #2510 の本文の「2026-11-05 の追加の形」の 3 つを、要求と設計に足す:
    (a) 承認がレーンの記録に当たらない(開発ループ: 止める指示を人が送った停止だけから置く(人が送っていない文から置かれた止める指示が、再開後の境で user_stop を起こした) #2474 の承認が lroot3 の loop.json に入らず waiting_only で止まった。オーガナイザーが loop answer を直接打って回避)
    (b) 取り込みのコミットだけで設計 PR の先頭が変わると、承認の依頼が再送される(差分の棚卸し: 見積の段階をそのスプリントの課題だけに付け、縮んだ所要をコマンド 1 本で確かめる(#2315) #2526)。取り込みのコミットだけの違いなら承認を引き継ぐ
    (c) 計画の前のループ(lroot2)の承認待ちが、計画 p3 の questions に出ない(NDF のエントリポイント: どの終わり方でも ok / gate / stopped と決まった終了コードで返り、欠けと失敗を ok と読まない(#2337) #2412・リリース後テスト: 利用者の設定ディレクトリのプラグインを変えずに確かめ、変わったら止まる(#2401) #2404・Agent の supervisor: 起動する ndf:worker に、いま通している工程の規則の Skill が届く(#2399) #2403・設計の結果の食い違い: 止まった理由のメッセージだけで、そろえる設計文書と項目が分かる(#2361) #2410 が 11/02 から埋もれ、柱の土台 結果の契約をそろえ、失敗・未収束・判定できないを ok で返す経路を無くす #2337 が止まった)。計画を始めるときと周回の境で、レーンの前のループの承認待ちをオーガナイザーへ送る
  2. 自動で出し直す上限は、人の出し直し 1 回につき 1 回で決める(利用者の決定)。「利用者が決めること」から外し、決定の記録へ移す
  3. PR 本文のテストの欄(requirements-check)を、再確認の結果(ok)に直す

進行

モード: standard / 進め方: auto / 作業ツリー: /work/ai-plugins/.worktrees/sprint/lflow3-3

  • 要求と受け入れ条件 — 2026-11-05 07:51
  • 作業場所の用意 — 2026-11-06 22:35
  • 設計
  • ドキュメント再構成 — 2026-11-05 08:07
  • ドキュメントレビュー
  • 計画 — 2026-11-06 22:35
  • 実装 — 2026-11-06 22:36
  • 構造改善 — 2026-11-07 08:48
  • 実装レビュー — 2026-11-07 11:22
  • 完了判定 — 2026-11-06 23:22
  • Pull Request — 2026-11-07 05:06
  • 確定仕様化 — 2026-11-08 10:16
  • 後片付け — 2026-11-08 10:50
  • デプロイ
  • リリース後テスト — 2026-11-08 10:45
  • 振り返り — 2026-11-08 10:45
  • 棚卸し — 2026-11-08 10:50

人の判断待ち(開発ループ lflow2)

  • 判定: not_follow(承認ゲート 1)
  • 理由: Value 1(確かめていないものを済んだと記録しない): PR 自身のテスト表で、要求の検査(requirements-check)が exit 1 で止まっている。仕様のコピー(issues/issue-2510-requirements.md)の 8 節(何が起きたか・原因・影響・直し方の案・受け入れ条件 ほか)が課題の本文と食い違うまま、作り直しと再実行を済ませずに設計の承認へ出している/Value 2(承認を求めるときは判断の材料を先に集める)・Value 3(承認資料の正しさ): 設計はこのコピーの受け入れ条件 1〜13 と要求の前提 1・5・7・9 を根拠に組まれている。コピーが本文と食い違ううちは、承認資料が正しいとは言えない/Value 8(正本を 1 か所に置き、写さずに指す): 要求の正本は 並列の計画: オーケストレーターからレーンへの指示が伝わらない(直して出し直すの指摘が設計に渡らない、ほか) #2510 の本文で、PR の中の写しがそれと揃っていない/設計の中身は Mission と Vision に沿う。決定 1〜11 は根本原因の場所で直し(Value 7)、判定を git の差分とスクリプトに寄せ(Value 5)、決めた理由を残している(Value 8)。一方、6 ファイル・1019 行の追加は、人が 1 回の承認で読み切れる量(Value 2)として大きい/必ず人の承認が要る操作には当たらない。秘密・認証・利用者のデータ・戻せない操作・他のリポジトリへの公開・.ndf の書き換え・GitHub Issues 以外への書き込み・配布物の取得元の変更を含まず、前のループの記録へも loop answer で答えを当てるだけである
  • 根拠の項目: Value 1, Value 2, Value 3, Value 8, Value 7, Value 5, Mission, Vision
  • 設計 Pull Request: 開発ループと並列の計画: 人の答え(出し直しの指摘・承認・前のループの待ち)を、読んで動く側へ確実に届ける(#2510) #2538
  • 答え: approved
  • 答え方: python3 /persistent/ai/.claude/plugins/cache/ai-plugins/ndf/10.27.21/scripts/sprint-state.py loop answer lflow2 2510 --approved|--rejected|--revise --note <指摘ファイル>

振り返り: #2796 (comment)

Activity

  1. changed the title [-]開発ループ: 「直して出し直す」の指摘が出し直しの設計に渡らず、同じ設計が戻ってくる[/-] [+]並列の計画: オーケストレーターからレーンへの指示が伝わらない(直して出し直すの指摘が設計に渡らない、ほか)[/+] on Nov 4, 2026
  2. added 14 commits that reference this issue on Nov 5, 2026
  3. added a commit that references this issue on Nov 8, 2026
  4. takemi-ohama commented on Nov 8, 2026

    @takemi-ohama
    ContributorAuthor

    リリース後テスト(#2794 (comment) )に保留の条件(受け入れ条件 4 と手動確認 2 件。次に「直して出し直す」を送った周回と、次に並列の計画を流したときに確かめる)が残るため開き直す。v10.27.41 のリリースのマージで GitHub の自動クローズにより閉じていた。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to 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