Repository navigation
並列開発: 並列の計画を 1 度書き、1 行で複数のレーンを起動して本番の配布を 1 本にまとめる(#2436) - #2437
Conversation
課題の本文を受け入れ条件 12 件・ドメインイベント 13 件の形に整え、 写しを issues/ に置いた。原文の「オーガナイザーに対する指示書」は、 用語集の「指示書」(規約の文書)と重なるため「並列の計画」と呼ぶ。 用語集へ並列の計画・レーン・オーガナイザー・配布の依頼を足した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
並列の計画の正本を .ndf/parallel/<計画名>/plan.json に置き、 parallel.py が検査・レーンの起動・待ち・配布のまとめ・停止を担う。 オーガナイザーは --parallel <計画名> で始め、作業ディレクトリの 役割のファイルで同時に動かせる数から外す。レーンはラッパーの名前と 動いている計画の照合で判定し、本番のステージだけを配布の依頼の プランへ置き換える。決定 11 件は design-decisions に分けた。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
内容は足さずに組み直した。章の順は設計の雛形どおりのため動かしていない。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
モデルの起動済み判定と配布依頼の締切を、後続の処理手順と一致させてください。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | APPROVE
ドメインモデルの節と用語集の差分を確認。コンテキスト(3 つ)・集約(持ち主が各 1 つ)・不変条件・ドメインイベント(E1〜E13 が要求の番号と受け手を引き継ぐ)・用語(4 語)は内部で矛盾せず、用語集 docs/glossary.md と docs/glossary/glossary.json の追加 4 語は設計の用語表と一致していた。critical / major の基準に当たる修正アクションは見つからなかった。
統括役に断られたレーンを次の tick で起動し直す手順と、起動対象から外す条件を揃える。 配布に入る依頼は承認ゲート 2 を求める直前の parallel-freeze のステップで確定し、 要求の前提 5(求める時点で届いている依頼をすべて載せる)と揃える。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 1 | commit e5f8972対応件数: critical=0 / major=2 / minor=0(合計 2 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | claude | REQUEST_CHANGES
まとめた配布の本番のプランが、同じプランの中の freeze のステップの結果を既存の {queue_pr:<名>} で受ける設計になっており、既存の差し込みの仕組みでは流れない。受け渡しの仕組みを設計に定める必要がある。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | REQUEST_CHANGES
I9 の締切の作り直し(freeze のステップと prs=["{queue_pr:parallel-freeze}"])に、同じプランの中の run ステップの結果を同じプランの {queue_pr:…} で受けられないという食い違いがある。実装する人が設計どおりに組むと、まとめた配布のプランが差し込みを埋められず、流されずに止まる。
🔧 /ndf:fix サマリ | round 2 | commit bca2aad対応件数: critical=0 / major=2 / minor=0(合計 2 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | claude | REQUEST_CHANGES
まとめた配布を 2 つのプランに分けた設計で、連番ごとのプランの置き場が決まっておらず 2 回目の配布が前の確定の結果で流れうる点と、新しく変える queue_fill.py が実装の範囲(触るファイル)から漏れている点を直してください。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | APPROVE
今回の差分に、critical / major に該当する新規の修正指摘はありません。判断の根拠: Value 1・Value 6・Value 10。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | commit 08722e6対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
|
承認ゲート 1: 差し戻し(2026-11-02、利用者)。理由: 既存の並列実行制御パッケージを調べた結果、オーガナイザーの状態・配布の依頼と答え・待ち・打ち直しからの再開は、すでに依存にある DBOS Transact 3.1.0(耐久ワークフロー、send / recv、set_event / get_event)で行い、計画の形の検査は pydantic、依存の循環は graphlib で行う設計へ直す。機械学習・実験計画系(Optuna・Hydra の launcher・Ray Tune・scipy)、DAG 系(doit・Snakemake・Luigi・Prefect)、tmuxp、GitHub merge queue は採らない(理由は設計の決定の記録へ書く)。直した設計で承認を求め直す。 |
…を 1 回に限り、既存パッケージの比較を決定の記録に足す(#2436) - 状態ファイル・依頼と答えのファイル・tick・freeze を外し、耐久ワークフロー parallel-<計画名> と DBOSClient の送受信に置き換えた - 計画の検査を pydantic と graphlib にした - 配布の中身を承認資料を作る時点の develop の SHA(main..<SHA>)で決め、範囲のレーンへ依頼の有無によらず結果を返す - 承認待ちの間に develop が進んだときの出し直しを 1 回に限った(決定 14) - 決定 12(既存パッケージの比較)・13・14 を足し、決定 3・5・6・7・10・11 を直した - 要求のコピーを Issue の本文から作り直し、用語「配布の依頼」の意味を直した Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP7y88wz5z7vgf1azE47
- 本番チャネルへの PR を develop に含まれるコミットだけにし、head を承認したコミットから切った release/v<版> にする(決定 15、issue-2436-design-release-rule.md) - 承認の答えの時点で develop が進んでいれば 1 回だけ出し直し、出し直しで承認したコミットを出す(決定 14 を直した) - レーンのループは配布の依頼の後に周回を「配布待ち」で締めて次の周回へ進み、周回の境で答えの届いた周回のまとめを流す(issue-2436-design-lane-loop.md) - 承認ゲート 1・2 の問いはオーガナイザーだけが出し、設計の承認の依頼をまとめて問う(決定 16、issue-2436-design-approvals.md) - 依頼の答えを待つステップ parallel-await をレーンのプランから外した - 要求のコピーを Issue の本文から作り直した Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP7y88wz5z7vgf1azE47
- 問いの hook がレーンと一時レーンの区分つきの問いをオーガナイザーへ送り、レーンは保留して別の作業へ進む(決定 18) - 設計の答えを承認・直して出し直す・やらないの 3 つにし、配布の差し戻しは宛先のレーンが直す(決定 17) - オーガナイザーは作業を持たず、答えの後の処理は持ち主のレーンが周回の境で、配布のプランの実行は一時レーン(helper、上限を 1 本超えて許す)が行う(決定 19) - ループに周回の結果「質問待ち」と直しの周回を足した - 要求のコピーを Issue の本文から作り直した Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP7y88wz5z7vgf1azE47
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP7y88wz5z7vgf1azE47
- 一時レーンの失敗は問いの hook と観測で集め、main へのマージの後は「続きから流す」だけを出す - 異常系の節を issue-2436-design-failures.md に分け、起きること・検知・扱い・テストの観点を表にした - run をセッションから切り離す parallel.py start、計画の検査 I19(レーンの間の課題とマイルストーンの重なり)、ループの止まる理由 waiting_only を足した - 決定 20(異常系の扱い)を足した - 要求のコピーを Issue の本文から作り直した Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP7y88wz5z7vgf1azE47
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | REQUEST_CHANGES
依頼 ID の一意性、提示を選んだ後のブランチ作成、衝突解消後の承認照合、公開後の失敗判定、一時レーンの問いの送信資格を設計に定めてください。判断の根拠: C4・Value 2・Value 4・Value 6。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | kiro | APPROVE
並列開発の設計(要求・設計本体・決定・配布規則・レーンのループ・承認集約・異常系の 6 文書と用語集 4 語)を全 9 ファイル確認。差し込みの受け渡し({queue_prs:present} / {queue_approved:present} を提示のプランの work/prs.txt と承認資料から埋める二段プラン)・連番ごとの置き場(releases/<連番>/<提示>/)・起動済み判定を成功に限る(I7)・I9 の締切の統一は、前のラウンドで出た major がすべて反映済みであることを確認した。queue_fill.py の既存差し込みの仕組み・check-pr-base.sh の現行の引数と判定・merged-steps.py promote の head が develop である点を実コードで突き合わせ、設計の記述と一致した。用語集 docs/glossary.md と docs/glossary/glossary.json の追加 4 語は設計・要求の用語表と一致し、「配布の依頼」の意味の変更もそろっている。状態(plan.json・耐久ワークフローのメッセージ/イベント・release/v<版>・work/prs.txt)ごとに書き手と読み手が並び、二重書き・読み先行・失敗後の読みの矛盾は見つからなかった。critical / major の基準(利用者経路の誤動作・秘密/認可/データ/戻せない操作・トークン/時間/回数の増加・実装者が違うものを作る食い違い)に当たる新規の修正アクションは無い。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP82Lqm5xfhpXj6YQRrw
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP82Lqm5xfhpXj6YQRrw
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP82Lqm5xfhpXj6YQRrw
#2439) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP82Lqm5xfhpXj6YQRrw
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP82Lqm5xfhpXj6YQRrw
・#2439) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP82Lqm5xfhpXj6YQRrw
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP82Lqm5xfhpXj6YQRrw
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
延期の中間通知と最終回答の契約を分け、I10 の「1 回だけ返す」と整合させてください。判断の根拠: Value 4・Value 6。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | REQUEST_CHANGES
ドメインモデルの節と用語集の差分を確認。コンテキスト(4 つ)・集約(持ち主が各 1 つ)・不変条件(I1〜I19)は内部で矛盾せず、用語集の追加 4 語(並列の計画・レーン・オーガナイザー・配布の依頼)の意味は設計の用語表と一致していた。ドメインイベントの番号が要求(E1〜E13)と設計(E1〜E15)で E9 以降ずれて衝突している点を 1 件、下に指摘する。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 1 | commit 7d63835対応件数: critical=0 / major=7 / minor=0(合計 7 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | claude | REQUEST_CHANGES
延期の知らせを別のイベント defer-<依頼> に分けたが、その読み手とした parallel.py await の契約(終了コード・出力)に知らせを受けたときの振る舞いが無い。待ち続けるのか返るのかを定める必要がある。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | APPROVE
前のラウンド(27f8d90)からの差分 3 ファイルを確認。(1) I10 の deferred を、最終の答え answer-<依頼> と知らせ defer-<依頼> に分けた変更、(2) ドメインイベントの番号を要求(E1〜E13)に合わせ、設計で足した 2 イベントを枝番 E8a・E9a にした変更。どちらも前ラウンドの major の反映で、3 ファイル(design.md・design-approvals.md・design-lane-loop.md)と要求(issue-2436-requirements.md)の間で書き手・読み手・番号・意味が一致していた。新しい critical / major に当たる修正アクションは見つからなかった。
知らせでは返らずに最終の答えを待ち続け、待ちの上限や待たない読みで返るときは 知らせの連番と理由を出力へ載せる。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 2 | commit f174b60対応件数: critical=0 / major=1 / minor=0(合計 1 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | claude | APPROVE
前のラウンドの指摘(await が知らせ defer-<依頼> を受けたときの振る舞い)は、待ち続ける・終了コード 3 で metrics.deferred に載せる形で定まり、I10・イベントの表(302 行)・レーンのループの行 5 と食い違いは無い。critical / major に当たる新しい修正アクションは無い。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | APPROVE
今回の差分に、critical / major に該当する新規の修正指摘はありません。判断の根拠: Value 1・Value 4・Value 6・Value 10。
🔧 /ndf:fix サマリ | commit (なし)対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
- 統括役・ラッパー・名前つきのラッパー・承認ゲート・MVV 判定を初出と既存の語の表で定義する - 終了コード 10(承認ゲートとして止まった)と gate2_returned の意味を本文に書く - 決定の根拠の Value を、プロジェクト MVV(版 4)の項目の表で引けるようにする - 名前の無いオーガナイザーのラッパーも数に入るため外す理由(live() の数え方)を決定 4 に書く - 統括役が計画名を役割のファイルへ置くだけで解釈しないことを書く - 構成要素の表に生成物の docs/glossary.md を足し、中身の無い見出しを消す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP81KoUKXa9vNySx8fNE
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | REQUEST_CHANGES
人の承認後の提示の完了手順、版の観測元とworktreeの起点の分離、質問待ちの課題の選定除外、一時レーンの名前の割り当てを設計に定めてください。判断の根拠: Value 2・Value 4・Value 5・Value 6・Value 10。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | kiro | APPROVE
並列開発の設計(要求・設計本体・決定・配布規則・レーンのループ・承認集約・異常系・階層の 8 文書と用語集 4 語)の全 10 ファイルを確認。前のラウンド(round 4 まで)で出た major はすべて反映済みで、この範囲の差分に critical / major の基準(利用者経路の誤動作・秘密/認可/データ/戻せない操作・トークン/時間/回数の増加・実装者が違うものを作る食い違い)に当たる新規の修正アクションは見つからなかった。実コードとの突き合わせ: (1) queue_fill.py の既存差し込み({queue_pr}/{queue_state} の正規表現と results_named の named() の末尾一致)と、設計の新差し込み {queue_prs:present}/{queue_approved:present} が同じ queue 行の present→release の 2 ステージで解決される経路が一致(present.json の stem=present が named("present") に当たり、release.json は当たらない)。(2) check-pr-base.sh の現行の引数($#==1 で head_ref、起点は .ndf/worktree.json の base_branch、ls-remote の末尾一致対策)と、設計の改定(第 2 引数に head の SHA を足し merge-base --is-ancestor で祖先を判定)が矛盾しない。(3) 配布の答えを待つ副命令が延期の知らせ defer-<依頼> で返らず answer-<依頼> を待ち続ける契約(I10)と、ループの境の表(行 5)・まとめた配布の状態図が一致。最新コミット 7d0f6e3 は用語の定義表・終了コード 10 の言い換え・生成物 glossary.md の追記という説明の精緻化のみで、振る舞いの変更は無い。用語集 docs/glossary.md と docs/glossary/glossary.json の追加 4 語は設計・要求の用語表と一致していた。
- 確定の後、一時レーンが答えを記録し、提示のプランを approve から完了させてから本番のプランを流す - 本番のプランに「起点のコミット」を足し、worktree の起点と版の判定が読むブランチを分ける - 選定から外す対象を、配布待ちと質問待ちの周回の課題にする - 計画名を 24 字までにし、一時レーンの名前を 32 字に収めて通常レーンと重ねない Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 4 | commit c12874b対応件数: critical=0 / major=4 / minor=0(合計 4 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | claude | REQUEST_CHANGES
確定の後の 3 手で提示のプランの approve を --answer-from releases/<n>/<k>/answer.json --by user に定めたため、MVV 判定が通る経路でも approve が空の答えの記録を読んで承認ゲート(10)で終わり、本番のプランが流れない。MVV が通す経路の承認の記録の扱いを定める必要がある。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | kiro | REQUEST_CHANGES
round 4 の 4 件(487 の確定後の手順・release-rule の起点のコミットと版の判定の分離・lane-loop の保留の周回・I1 の一時レーンの名前)の反映を確認。起点のコミットと起点の分離(paths.py・queue_fill.py・release_templates.py の触るファイルを含む)、保留の周回の 3 か所の一致、一時レーンの名前の 32 字と予約形は実コードと矛盾しなかった。ただし 487 の確定後の 3 手のうち手順 2(提示のプランを approve のステップから再開)が、MVV 判定を持つ提示のプランに存在しない approve のステップを前提にしている major を 1 件、下に指摘する。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | commit 2276b1e対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
…認ゲート 1 の決定) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP81KoUKXa9vNySx8fNE
#2436 で求められている、tmux で並列開発を計画から始める仕組みの設計文書を追加しました。並列の計画から複数のレーンを起動し、本番の配布を 1 本にまとめる設計です。要求のコピーを置き、用語集に 4 語を足しています。
利用者向けの変化
移行の手順
変更の要点
テスト
supervise.pyの run のステップで確認しました。issues/issue-2436-requirements.mdを読めない(No such file or directory)要求のコピーの検査は、ファイルが見つからないとして停止しました。変更の統計ではこのファイルを追加しています。停止の原因は未確認で、マージ前に検査を再実行して確かめます。
モード: standard / 通した工程: 設計 → 要求と受け入れ条件 → ドキュメント再構成 → ドキュメントレビュー
🤖 Generated with Claude Code
決めたこと
issues/issue-2436-design-decisions.mdissue-plan-strategyとdevelopment-workflowの--parallelで受けるplan.json(pydantic のモデル)にし、plan.mdを描画にするrelay.pyではなくparallel.py stopに置くNDF_RELAY_MAX_NAMEDから読み、依存のあるレーンも数えるdevelopにあるため、配布の中身を依頼の集合ではなく承認資料を作る時点のdevelopのコミットで決めるdevelopが進んでいれば 1 回だけ出し直し、出し直しで承認したコミットを出すdevelopに含まれるコミットだけにし、head をrelease/v<版>にする