Repository navigation
Release: ndf v10.27.15 を main へ - #2470
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- ndf-factory-dev-loops.md が行数の上限(500 行)を超えたため、データ・設定と外部連携を ndf-factory-dev-loops-data-and-contracts.md へ分けた - ndf-factory-contracts-and-progress.md・ndf-factory-runs-state-and-data.md が消した issues/issue-2347-*.md を指していたリンクを、新しい確定仕様へ付け替えた - 索引に分けた確定仕様の行を足した Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
確定仕様化: スプリント lfactory2-3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP81j3DMM47T8gqryDqa
確定仕様化: スプリント lflow-1
課題の本文を受け入れ条件 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>
統括役に断られたレーンを次の tick で起動し直す手順と、起動対象から外す条件を揃える。 配布に入る依頼は承認ゲート 2 を求める直前の parallel-freeze のステップで確定し、 要求の前提 5(求める時点で届いている依頼をすべて載せる)と揃える。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…を 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
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
Factory のオーガナイザーが同じリポジトリで並行する実行の本番の配布を 1 本にまとめ、 承認と問いをリポジトリごとに 1 か所へ集める要求を、受け入れ条件 16 件・ドメインイベント 11 件・ 未決 4 件で書いた。人へ問わずに選んだ条件は起票者の推定の S6〜S11 に理由とともに置いた。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
) - 依頼の id を受け取った数から採番せず、依頼の中身から決める - 承認ゲート 2 を提示のプランへ置き、本番のプランは確定の後にだけ流して release/v<版> と worktree を確定したコミットから作る - 版数の衝突を -sync で解いたときも、承認の照合には元の release/v<版> の Pull Request を渡す - main へのマージ済みを本番の Pull Request の状態で判定する - request-ask の送り手に、計画が動いている一時レーン(役割 helper)を含める - 用語集の廃止語(合図・提示物・作業ツリー)を置き換える Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2439) 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
…_steps.py#STAGES どこからも読まれていない定数 STAGES を消す。工程の値は _StepShape.stage の Literal が持つ。 Item-Id: I-003 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…_run.py#held_loops held_loops と design_held が直書きしていた保留の周回の結果("配布待ち"・"質問待ち")と ループの記録の置き場(.ndf/loop/<名前>/loop.json)を、正本の sprint_loop_record の PENDING・LOOP_DIR・RECORD へ置き換えた。import が 1 行増えたため、構造の例外リストの行数を 723 に合わせた。 Item-Id: I-004 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
parallel_run が書き手の sprint_loop_record を読み込んだため、契約の検査が parallel.py の入口へ loop.json・laps.md の書きと NDF_UPKEEP_STATE_DIR の読みを辿って落ちていた。 LOOP_DIR と保留の周回の結果(RELEASE_PENDING・QUESTION_PENDING・PENDING)を副作用の無い 新しいモジュール sprint_loop_names へ移し、sprint_loop_record はそこから読み込んで公開し直す。 parallel_run は sprint_loop_names だけを読み込む。RECORD は契約の検査がモジュールの中の定数しか 解決しないため書き手の sprint_loop_record に残し、parallel_run の読みは元のファイル名のままにした。 Item-Id: I-004 Impl-Runtime: claude Impl-Model: default
…ross-review 最終スイープ) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… fca6fe464619 の (a)) ndf-next を出さずにセッションを終えても対話の claude が入力待ちで残り、ラッパーが running のまま止まらなかった。 終わり方が 3 か所とも「最後に relay.py stop で自分のラッパーを止める」になるようにした。 - 一時レーン: 起動の 1 行(helper_spawn)の「終わり」に relay.py stop <一時レーンの名前> を入れた(配布と保留の周回の両方) - 問いで保留した 1 スプリントのレーン・一時レーン: 問いの hook が返す保留の手順の最後に停止の 1 行を足した - 待ちだけで止まったループのレーン: 止まった結果に metrics.stop_self を付けた。並列の計画のレーンのときだけ返し、 利用者の端末のラッパーは止めない - 答えの後に持ち主を起こす要否(parallel.py の _owner_restart)を、ラッパーの状態でなくレーンの側の待ちの記録で決める (ループは waiting_only で止まった記録、1 スプリントのレーンは引継ぎ文書の依頼の id、一時レーンはラッパーの状態) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK
指定は置き場の pinned.json に持ち、ラッパーが区間の起動のたびに読む。指定が使えれば 閾値や残りの量に依らずそれを使い(理由 pinned)、使えない間は今の選び方で替えて続け、 使えるようになった後の区間の起動で戻る。--clear で外す。account list と relay.py ls が指定を示す。 Closes #2460 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK
Fix: ndf-next を出さずに終えるレーンが自分のラッパーを止める(#2436 の保留 2 件)
- relay.py --help / -h / help で副命令の一覧を標準出力へ出し、終了コード 0 - <副命令> --help / -h(run を除く)はその副命令の書式と役割だけを出す。stop --help が名前無しの stop(全部に停止の合図)になっていた - 一覧は relay_lib/__init__.py の docstring の表から作る(記号を外す)。引数無しの usage とランチャーの docstring の写しを外す - help は runtime.enter より前に返す(環境の無い素の python3 でも出る) - 未知の副命令に --help の案内を添える Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK
1 秒の確認間隔では、上限の直後の区間の起動が保存した上限の残量を読み直さずに使い、 指定のアカウントへ戻らないことがあった(PR 2463 の CI の pytest (1/2))。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK
Fix: relay.py に --help を足し、副命令の --help で副命令を実行しないようにする
上限の観測と残量の取得の時刻は秒で残り、同じ秒の取得は「観測の後」と読まれない。 CI の速い環境では上限の観測と次の区間の起動が同じ秒に入り、指定へ戻らなかった。 前のコミットの確認間隔 0 は原因でなかったので戻す。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK
…た計画を飛ばして問いを送る(#2436 の cross-review round 9) - _spawn_ready: 答えていない問いを持つレーン・答えを当てていない revive・waiting_only で答えを待つループは止まったと数えない(I8)。答えた時点で止まった持ち主を起こす 1 行を添える - _ask_helper: 一時レーンが送った答えていない問い(ask も含む)があれば「配布の途中で止まった」を問わない(6g) - _owner_restart: 同じ原因としてまとめた問いは merged の全持ち主をそれぞれの依頼の id で調べて起こす(異常系 5) - ask_guard: 同じレーン名を持つ計画を順に試し、送り手でない(4)なら次の候補へ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
usage の 1 行は develop で docstring の表から出す help に置き換わったので、develop 側を採る(account use は表の行にある)。 relay.md が 502 行になったため、account use の段落を 2 行詰めて上限の 500 行に収める。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK
…review round 10) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
答えを当ててすぐ止まるレーンは観測の間隔の中で stopped → running → stopped と動き、 状態の変化として見えないため revive が残り、計画が finished へ進まなかった。 relay.py ls の at が答えたときの観測の時刻より後へ進んだら revive から外す。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add: relay.py account use <名前> で次の区間から使うアカウントを指定する
… cross-review round 12) - queue の本数の判定を parallel_lane.queue_max へ寄せ、supervise.py queue の既定・スプリントのステージの 1 行・周回のまとめの 1 行・待ち時間の調査が同じ値を使う - 並列の計画の検査で、handoff_name() の保存先が重なるレーンを I1 で拒む Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
衝突 3 件を両方の変更を残して解いた: relay_lib/__init__.py は develop の _help への置き換えを採り(role は docstring の表から出る)、hub_client.cmd_ls の metrics は hub・tmux・pinned_account をすべて残し、test_relay_hub の期待値もそれに合わせた。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…parallel_run.py と sprint_loop_gate.py の例外の行数を今の行数へ)(#2436) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK
スプリント p2436
Release: ndf v10.27.15-dev.1
Release: ndf v10.27.15
振り返り(2026-11-04)対象: issue #2436 / PR #2452(スプリント p2436 の develop 宛て) / PR #2470(本番 v10.27.15 を main へ) 並列開発の仕組みを作った。並列の計画を 1 度書けば、1 行の起動で tmux の複数のレーン(ループ・スプリント)を立ち上げ、オーガナイザーが監視して本番の配布を 1 本にまとめる( 並列の計画を通しで動かしたことは、まだ一度も無い。 3 本のループを並列で回すのは、無駄な作業の根本原因の対策を利用者と詰めてからにした。 何が起きたか
context window の大きさ測れなかった。スプリントは 2026-11-02〜04 の多数のセッション(ラッパーの区間と supervise.py の子)にまたがり、 用語集の変化develop の 2026-11-02 から v10.27.15 までの差分(このスプリント以外の変更を含む): 足した語 13・意味を変えた語 5・廃止 0・消した語 2。このスプリントに関わるのは ndf-release の「比べた先端」(本番では 承認ゲートの差し戻し関門 1 が 0 件・関門 2 が 0 件( MVV を見直すか
次に変えること
途中で起票した課題
|
ndf v10.27.15 を main へ出す(開発版の PR #2469)。
🤖 Generated with Claude Code