Skip to content

Release: ndf v10.16.1 - #832

Merged
takemi-ohama merged 27 commits into
mainfrom
develop
Sep 22, 2026
Merged

takemi-ohama merged 27 commits into
mainfrom
develop

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

目的

正式版 ndf v10.16.1main(正式版チャネル)へ載せる。マイルストーン 17「10.16.0 のリリース後テストで不合格だった条件」のまとまりである。

何が届くか

課題 直したこと
#811 監視が読む利用上限の文言に codex の 2 形・claude の 5 形を足した。上限で止まった担当は理由「利用上限」で報告され、同じラウンドで起動し直されない
#813 認証の確認が、確認コマンドを起動できない理由(権限の拒否・実行形式でないファイル)を問わず「通らない」として返す。PATH に読めないディレクトリがあっても収束ループが使える者だけで始まる

あわせて #478(レビュワーが 1 者欠けると初期化ごと失敗する)と #619 #729(上限に達した担当が結果なしとして起動し直される)が、10.16.0 のリリース後テストで不合格だった条件ごと解消する。

まとまり

設計 #819 / 実装 #820 / 確定仕様 #823 / 開発版 10.16.1-dev.1 #826 / 版上げ #831

10.16.1-dev.1 → 10.16.1(PATCH: 本番の振る舞いのバグ修正 2 件。公開インタフェースの追加・削除なし。Skill の数は 45 のまま)

検証

  • 全体テスト 5016 passed(uv run --with pytest pytest scripts/tests plugins/ndf -q
  • 検査 10 種すべて exit=0、claude plugin validate . exit=0
  • CI(Release: ndf v10.16.1 #831)すべて pass
  • 開発版 10.16.1-dev.1 で、隔離した CLAUDE_CONFIG_DIR / CODEX_HOME と Kiro の導入スクリプトの 3 経路の取得を実測済み(Release: ndf v10.16.1-dev.1 #826

マージの後に ndf--v10.16.1 のタグを打ち、正式版チャネルからの取得をリリース後テストで確かめる。

🤖 Generated with Claude Code

takemi-ohama and others added 27 commits September 22, 2026 16:13
codex と claude の実物の文言を記録と実行ファイルから集め、照合に足す 2 行と
誤検知の実測を設計に残す。認証の確認が起動できない例外を「通らない」として
返す設計と、10.16.1 のリリース後テストで確かめ直す条件(#478 #619 #729)を書く。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…rification-fixes

cross-review / cross-refactoring: codex と claude が利用上限で止まっても同じラウンドで起動し直され、PATH に読めないディレクトリがあると始まらない → 上限を理由として報告して起動し直さず、CLI が欠けても使える者だけで始まる(#811 #813
設計文書の決定 1〜7 とテスト設計から、3 つのタスクへ分解した。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
行頭で始まる形だけを照合し、再試行の上限は最後の状態が 429 のときだけ利用上限と
読む。テストの入力は設計文書の実測の表から写した。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PATH に読めないディレクトリがあると、コマンドがどこにも無いときに権限の例外が
上がる。起動できない例外をすべて捕まえ、理由に起動できなかった理由を入れる。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
observed_model の分岐と aggregate の代表的な集計結果を公開入口から固定する。

Item-Id: R1-001
Round: 1
Impl-Runtime: codex
Impl-Model: default
models.py の separation_reason による3分岐(kiro auto / 未指定実測不可 / 分離しない)と、
metrics.py の format_report によるMarkdown出力構造(見出し・表の行・注意書き)を
現状固定テストとして追加。

Item-Id: R1-002
Round: 1
Impl-Runtime: agy
Impl-Model: default
…y#mismatch_warning

observed なし / requested なし / 両方なし / 一致 / 不一致の各分岐を実行して
現状の出力を期待値として固定する。対象コードは変更していない。

Item-Id: R1-005
Round: 1
Impl-Runtime: kiro
Impl-Model: default
- aggregate: rounds も items も空の入力({} と空リストの辞書)で、空のバケットと空リストを返す経路を固定する
- assumption_note: 未指定 / 実測可能ランタイム / 分離対象(kiro の auto)/ 代用注記の 4 分岐を固定する

Item-Id: R2-001
Round: 2
Impl-Runtime: claude
Impl-Model: default

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
モデル分離と判定なしレビューの集計経路、および計測可否の真偽分岐を固定する。

Item-Id: R2-002
Round: 2
Impl-Runtime: codex
Impl-Model: default
両表が空のときに「(記録なし)」が出力される境界経路を固定する。

Item-Id: R2-003
Round: 2
Impl-Runtime: agy
Impl-Model: default
result_posts.py: 「積む → 読み直す → 連番」の 3 行を _enqueue_seq へ集約
  (consolidate_duplication)。
assignment.py: resolve_participants を検証・絞り込み・分類の 3 段へ抽出
  (extract_method)。
metrics.py: format_report の表ヘッダ / 区切りを IMPL_HEADER 等の定数へ
  (introduce_named_constant)。
monitor.py: _scan_early_fatal の or 連鎖を (patterns, benign) の表引きへ
  (replace_with_lookup_table)。現状固定テストを追加。

R3-003 は enqueue / post の呼び出し元が対象範囲外
(plugins/ndf/skills/cross-review/tests)にあり、投稿指定オブジェクトを
新しい引数の形にすると壊れるため skipped。

Item-Id: R3-001
Round: 3
Impl-Runtime: kiro
Impl-Model: default
…y#fix_posts ほか 2 件

- R4-001: fix_posts から返信項目の組み立てを _reply_items、スレッド決着項目の組み立てを
  _closing_thread_items として抽出(extract_method)
- R4-002: transcript_agents.py#interrupted の layer / depth / parent の等値フィルタを、
  属性名 → 期待値の対応表を回す 1 本の判定へまとめる(replace_with_lookup_table)
- R4-005: run_metrics.py#_select の repo / kind / version の等値フィルタを
  (args 属性名, 行キー) の対応表へまとめる(replace_with_lookup_table)。
  先に _select の絞り込みを直接通す現状固定テストを test_run_metrics.py へ追加

Item-Id: R4-001
Round: 4
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
トークン・モデル統計とレビュー投稿の組み立て段階を、それぞれ名前付き関数へ抽出する。

Item-Id: R4-003
Round: 4
Impl-Runtime: codex
Impl-Model: default
…ication-fixes

cross-review / cross-refactoring: codex と claude が利用上限で止まっても同じラウンドで起動し直され、PATH に読めないディレクトリがあると始まらない → 上限を理由として報告して起動し直さず、CLI が欠けても使える者だけで始まる(#811 #813
利用上限の照合へ足した 2 行(codex と claude の実物)と、行頭で始まる形だけを読む理由・
出所を持つ文言だけを足す規約を「起動 1 回の結末と上限の検知」へ書く。確認コマンドを
起動できないときに理由を問わず「通らない」として返す規則と、検索のパスが読めないときの
理由の出し方を「参加者と席」へ書く。取り込みが済んだ要求・設計・実装計画を削除する。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 10.16.1 の配布後に確かめる 3 つの観点を「テスト観点」へ追加
- 実測の表へ集めた経路の識別子・絞り込みの条件・対象期間を追加
- claude の 5 形の種類と件数の内訳を追加
- 逐語の文言の正本が照合のテストの入力であることを明記

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 選択肢を持つ 2 つの正規表現を表のセルからコードブロックへ移し、退避した縦棒を無くす
- 背景の表の codex 6 形に、照合では 2 形へ集約されることを添える
- テスト観点を、照合の関数を直接呼ぶ経路と監視のプロセスを通す経路に書き分ける

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…nd-probe

確定仕様化: 利用上限の文言の出所と、起動できない確認の扱い(#811 #813
#811 #813 の修正を develop のチャネルへ載せる開発版。版数を持つ 15 箇所、
更新案内の本文と手元で確かめるコマンド、CHANGELOG.md の ndf 10.16.1 の節、
docs/ndf-version-decisions.md の v10.16.1 の判断を更新する。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
開発版 10.16.1-dev.1 の接尾辞を外し、正式版 10.16.1 として `main` へ配る。
更新案内の本文を正式版の記述へ直した。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama
takemi-ohama merged commit 965c622 into main Sep 22, 2026
28 checks passed
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

振り返り(2026-09-22)

対象: マイルストーン 17「10.16.0 のリリース後テストで不合格だった条件」(#811 #813 #478 #619 #729) / PR #819(設計) #820(実装) #823(確定仕様) #826(開発版 10.16.1-dev.1) #831(正式版 10.16.1) #832(本 PR)

10.16.0 のリリース後テストで不合格だった 3 条件を塞いだ版である。監視が codex と claude の利用上限の実物の文言を読むようにし#811)、認証の確認が確認コマンドを起動できない理由を問わず「通らない」として返すようにした#813)。どちらも「直さないと収束ループが止まる/始まらない」種類の不具合で、前の版のリリース後テストが見つけたものである。

何が起きたか

直す対象の現象が、直す作業そのものを 2 度止めた。 設計の持ち場では codex が利用上限に当たり、--exclude codex で外して cross-review を再開した(PR #819 の本文)。検査の持ち場でも利用上限で待った。上限に当たること自体は避けられないが、10.16.0 までは理由が「結果ファイル無し」と出て同じラウンドで起動し直していた(それが #811 / #619 である)。この版からは理由「利用上限」で止まるため、待つべきか外すべきかを読み手が判断できる。

構造改善を --max-outer-rounds 2 で回して比べる試み(#816)は成立しなかった。 実行計画 17 の前提には 2 と書いたが、PR #820 の構造改善はラウンド 4(実装 claude)まで回っている。既定の 1 周が最後まで動いた形である。計画の前提に書いただけでは、持ち場をまたぐ起動の指示に載らない。実測(採用 11 / 取り消し 7 / 見送り 12、ラウンド別の内訳)は #816 へ書き足した。取り消し 7 件のうち 5 件はラウンド 3 の適用側の失敗(「適用結果に項目がありません」)で、改善案の質ではなく適用の経路で落ちている。2 件は Co-Authored-By の段落がトレーラー欠けと判定されたもので、#822 として起票済みである。

#815(承認の後に開発版のチャネルが動きうる)は、この配布で働いた。 承認の時点の develop の先端(a3c82c85)を仕上げの持ち場の指示に載せ、main へマージする直前に突き合わせた。一致を確認してから版上げ(#831)をマージし、そのマージコミット 070f32efdevelop の先端であることを再度確かめてから main へ進めた。10.16.0 で起きた食い違いは再発していない。控えるのはコミットであって時刻ではないという #815 の要点が、そのまま手順として機能した。

リリース後テストは 6 行すべて合格した(AC12 / AC13 / AC14 を課題 5 件へ割り当てた)。判定は導入先の実体(正式版チャネルから取得した …/ndf/10.16.1/scripts)に対して実行し、同じ入力を 10.16.0 の導入先へ向けると不合格になること(PermissionError / exit=1、reason=missing)まで確かめた。版を見分けられない判定は、合格であることの証拠にならない。

受け入れ条件の作業文書が issues/ から消えており、条件を PR #819 の差分から復元した#834 として起票)。検証用 Pull Request #812 が閉じられてブランチも消えていたため、10.16.0 と同じ入力で再現できず、#833 を作り直した#835 として起票)。どちらも仕上げの持ち場でしか現れない。配布の後に別の会話で走る工程だからである。

context window の大きさ

測った範囲は 2026-09-22 のセッション 7 本で、マイルストーン 13 の仕上げとマイルストーン 17 の全持ち場が混在する。 セッションの単位でしか切れないため、まとまり 17 だけを切り出せていない(この主題は #827 が扱う)。

持ち場 モデル 件数 固定費の中央値 実作業の中央値 実作業 < 固定費 最大充填の最大
conductor - claude-fable-5-1 1 39856 654294 0 694150 割る候補
conductor - claude-opus-5 1 46450 194257 0 240707 割る候補
conductor - claude-opus-5-5 2 57026 92808 1 199652
supervisor 設計 claude-fable-5-1 4 42672 349024 0 510467 割る候補
supervisor 設計 claude-opus-5 2 44552 314080 0 399648 割る候補
supervisor 実装 claude-fable-5-1 2 42616 215134 0 283031 割る候補
supervisor 実装 claude-opus-5 6 43615 319450 0 471682 割る候補
supervisor 検査 claude-fable-5-1 1 43232 290548 0 333780 割る候補
supervisor 検査 claude-opus-5 7 43236 191365 0 273172 割る候補
supervisor 取り込み claude-opus-5 5 45270 195591 0 288080 割る候補
supervisor 仕上げ claude-opus-5 2 45084 214400 0 296112 割る候補
worker 調査 claude-opus-5 4 41505 132548 0 226100 割る候補
worker 調査 claude-sonnet-5 4 45812 101562 0 176241
worker 修正 claude-fable-5-1 17 41483 89395 5 251622 割る候補
worker 修正 claude-opus-5 33 41904 35635 19 246498 割る候補
worker 検証 claude-opus-5 6 42217 68084 2 212789 割る候補
件数 固定費の合計 実作業の合計 総消費
conductor 7 286413 1034167 1320580
supervisor 32 1382587 7494046 8876633
worker 72 3043616 5756517 8800133
合計 111 4712616 14284730 18997346
持ち場 supervisor supervisor の実作業 worker の件数 supervisor と worker の固定費の合計
設計 5 355874 9 422228 worker を使いすぎ

worker の固定費の合計(3,043,616)が supervisor の合計(1,382,587)の 2.2 倍で、worker 72 件の固定費だけで総消費の 16% を占める。修正 の worker は 51 件のうち 25 件で実作業が固定費を下回っており、1 件ずつ起動するたびに手順の読み込みだけで 4 万トークン強を払っている。設計の持ち場の 1 つは worker を使いすぎ の印が付いた(worker 9 件)。

判断: 修正 の worker を減らす方向へ倒す。 指摘 1 件ごとではなく、同じファイルへ当たる指摘をまとめて 1 件にする。ただし cross-review の収束ループは supervisor が回す規約のため、束ね方は supervisor 側の裁量に入る。この主題は #828(Skill 本文を丸ごと読ませない)と #827(実測と削減)が扱っており、この振り返りでは新しい起票をせず、上の実測値を材料として残す

次に変えること

変えること 落とし先 状態
構造改善の上限は、計画の前提ではなく起動の指示に載せる。載ったかどうかを起動の記録で確かめてから比べる issue-plan-strategy の実行計画 / development-workflow の検査の持ち場の起動 #816 へ実測と併せて書き足した
リリース後テストで確かめる受け入れ条件は、作業文書を消す前に配布の Pull Request か確定仕様へ引き写す plan-to-spec / merged の順序 #834 として起票
検証用の Pull Request を閉じるときは、head の SHA と再作成の手順を記録へ残す。または Pull Request を要らない前段で条件を書く release-verification の出力物 #835 として起票
承認の時点のコミットを控えて、本番へのマージ直前に突き合わせる release の手順 この配布で実行した#815 は手順としてまだ Skill に入っていないため、開いたまま)

途中で起票した課題

番号 何を見つけたか 見つけた場面
#817 見放した担当 CLI の残留プロセスが取り消し後にコミットし、検証を経ずに push される 構造改善
#821 Slack 通知を回答・承認待ちのときだけ送り、セッションと URL を載せる 進行全体
#822 claude の適用が Co-Authored-By の段落でトレーラー欠けと判定され、毎回取り消される 構造改善(取り消し 2 件の原因)
#824 merged の退避先 worktree-trash が回収されず .venv まで溜まる(1 日 7 件・4.5G) 後片付け
#825 出力を変えない変更で、配布の前後のスナップショットを突き合わせる手順が無い リリース後テスト
#827 トークン消費の実測結果と削減の提案 進行全体
#828 サブエージェントに Skill 本文を丸ごと読ませず、持ち場で要る手順だけを渡す 進行全体
#829 待つ間の繰り返し問い合わせをやめ、完了通知か Monitor で待つ 進行全体
#830 conductor の会話を工程の切れ目で切ることを hook で強制する 進行全体
#834 リリース後テストで読む受け入れ条件が、消えた作業文書にしか残らない 振り返り(取りこぼしの拾い上げ)
#835 検証用の Pull Request を閉じると、前の版と同じ入力で再現できない 振り返り(取りこぼしの拾い上げ)

@takemi-ohama

Copy link
Copy Markdown
Contributor Author

実行計画: 17 10.16.0 のリリース後テストで不合格だった条件

状態: 閉じた
開始: 2026-09-22T15:55Z
oom_kill の起点: 0

前提(conductor の判定):

種類 課題 モード 触るファイルと節 確度 設計の依存 実装の依存 状態 Pull Request
2026-09-22T17:14Z G7-設計の報告(関門)と承認(17:13Z) #819 をマージし、G7-実装を起動 決定 7 件・受け入れ条件 14 件。claude の旧い形は実物 0 件のため足さない(決定 4、承認済み)
G7-設計 G7 設計 #811 #813#478 #619 #729 standard plugins/ndf/scripts/lib/monitor.py「USAGE_LIMIT_FATAL」、lib/auth.py「_run_probe」 確定 なし マージ済み #819
G7-実装 G7 実装 #811 #813 standard lib/monitor.py「USAGE_LIMIT_FATAL」(2 行)、lib/auth.py「_run_probe」、監視・認証・開始の手順のテスト 確定 G7-設計:マージ マージ済み #820

重なり

行の組 ファイルと節 区分 扱い

測った値

時刻 空き(MiB) cgroup の残り(MiB) スワップの空き(MiB) oom_kill 動いている本数 起動してよい本数 決めた条件 起動した行
2026-09-22T15:55Z 11411 max 76 0 0 2 max,swap_low G7-設計
2026-09-22T17:14Z 11114 max 0 0 2 max,swap_low G7-実装

見直し

時刻 契機 変えたこと 理由
2026-09-22T20:00Z 取り込みの持ち場 確定仕様を新しい文書ではなく既存の 2 本へ取り込む行を足した(#823 288 行 / 420 行の確定仕様が同じ主題を持っており、3 本目を作ると読む側が 2 か所を突き合わせることになる
2026-09-22T21:20Z 配布 開発版 10.16.1-dev.1(#826)と正式版 10.16.1(#831)の 2 行を足した 版上げは行の表に無い工程だが、concurrency の対象には入るため

閉じたときの測定

対象の Pull Request 期間(分) 重なり(分) 並行度 最大同時 oom_kill の増分
#819 #820 #823 #826 #831 321 0 0.0% 1 0

2026-09-22T16:13Z 〜 21:35Z。5 本とも直列に通った(重なり 0 分)。束を 1 つにしたため、
設計・実装・検査・取り込み・仕上げが順に 1 本ずつ動いた。capacity は終始 allowed=2
返しており、本数で詰まったのではなく、束ねた時点で並行の機会が無かった

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant