Release: ndf v10.16.0 - #810
Conversation
- issue-729-619-584-design.md の「テスト設計」の表のテストファイルのパスを、 「置き場所」のツリーと実際の配置に合わせて plugins/ndf/... からの完全なパスへ揃える - issue-662-598-537-619-584-583-design-contracts.md の「P3 で足す文言」の 429 の行に、 新しい設計では全担当の err.log を見ることを添える Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
親 #727 の名前で要求・設計・契約の 3 文書を新設し、既存の設計(PR #667)の P5 を置き換える。 既存の要求と契約の文書には置き換え先の案内を 1 段落ずつ足した(設計文書の本体は触らない)。 - 使える者の決定を共通層 `resolve_participants` へ移し、`check_auth` を `probe_auth` に替える - cross-review は各ラウンドに 2 席を確保する(使える者 → ホスト → 同じランタイムの 2 つ目) - cross-refactoring の既定の参加者を codex / kiro / ホストにし、レビュー担当の記録を消す - 再開で明示的に渡した引数だけを反映する規則を共通層 `apply_resume_args` に置く Refs #727 #687 #478 #664 #648 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- refactor_pool(host) の定義を「ALL_RUNTIMES の順で DEFAULT_REFACTOR_RUNTIMES(codex, kiro)とホスト」に直し、 DEFAULT_EXCLUDED_FOR_REFACTORING と「既定の除外」の言い方を設計・契約から消す(AC31/AC32 と揃える) - resolve_participants にキーワード引数 host を足し、「--exclude にホストがあれば弾く」検査を共通層が持つと明記 - review_seats の埋め合わせは available に含まれない者だけを使い、無ければ <名前>-2 を充てる(同じ席名の重複防止) - _round_reviewers の契約の参照先を決定 10 から決定 11 に直す Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…い・既定の参加者の数) - `--exclude` / `--only` の名前は母集合(既定 ∪ `--include`)に含まれなければ弾く規則に統一。 cross-review ではホストが母集合に無いため `--exclude <ホスト>` はここで弾かれ、 cross-refactoring ではホストが母集合にあるため外せる(design.md 決定 2・処理の流れ・構成要素の表、 contracts.md 名前の検査の表・`resolve_participants` の行、requirements.md AC33) - `_resolve_reviewers` は `only` があるときホストを確かめず `fallback` を空にする (contracts.md の契約と `participants.fallback` の意味、design.md 決定 9、requirements.md AC18) - cross-refactoring の既定の参加者を「codex / kiro とホスト(ホストが codex / kiro なら 2 者)」に統一し、 輪番の 1 周を「参加者の数のラウンド」にする(requirements.md 目的・AC42・#664 の記録、design.md #736 の行) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- design.md 決定 14: 一部の引数だけを渡した再開では、渡さなかった引数を状態ファイルの値で補って作り直す規則を足す - contracts.md: 「移行」の節と `_resume_from_state` / `cmd_init`(再開)の契約に同じ規則を足す - requirements.md AC28 / AC40: `--include` 済みの状態へ `--exclude` だけを渡す組み合わせを足す - design.md テスト設計: AC25〜AC29 の確かめ方に「一部の引数だけを渡す組み合わせを含む」を足す - requirements.md「依頼(原文)」#687 の引用を issue 本文どおりに戻す(設計の担い手の指示) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
親 #728 の名前で要求と設計を新設し、既存の要求(PR #665)に置き換えの案内を足す。 gitfacts.read_result は G3(#729)の read_launch_outcome を包んで値を返し、3 つの取り込み (merge-apply / merge-fix / merge-final-fix)は intake.py の 1 つの手順で範囲の確定・ 未検証コミットの取り消し・結末の記録を行う。開き直しの判定は rounds.group_reopening に置く。 #674(最終ゲートの修正)を範囲に含める。 Refs #728 #647 #592 #553 #674 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- 実測表の `if groups:` の行番号を `rounds.py:109` に直す - 交代先探索の打ち切りを「参加者の数だけ進める」に直し、決定 8 に根拠を添える - `merge-fix` / `merge-final-fix` の図で final-fix が `fix_rounds` を進めないことを示す - `IntakeScope` の表に `label` 列を足す Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
「変わらない」と書くと、同じ文書の影響の表(`merge-apply` の範囲未確定を 2 から 4 へ 変える)と食い違って読める。受け入れ条件は各取り込みが返す値をそのまま書く。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
利用者の規約に合わせ、H1 を「cross-refactoring: <現象> → <直した後に成り立つこと>」に、 最初の章を「目的」(壊れていること・困る人・成り立つこと)にし、管理上の注記を 「文書の位置づけ」へ寄せる。決定の見出しは「何のために何を決めた」と読める語にする。 決定の索引表は見出しが目的を持つため外す。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
タイトルを「今起きている問題 → 直した後に成り立つこと」の形にし、各文書の最初の章を 「目的」にする。決定の見出しは「何のために何を決めた」と読める語にし、管理上の注記は 末尾の「この文書の位置づけ」へ寄せる。決定と受け入れ条件の中身は変えない。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- タイトルと H1 を「Skill 名: 今起きている問題 → 直した後に成り立つこと」の形にする - 最初の章を「目的」(壊れていること・困る人・直すと成り立つこと)にし、管理上の注記は「文書の位置づけ」へ寄せる - 章を読み手の問う順(結論 → 根拠 → 中身 → 手順 → 受け入れ条件)へ並べ替え、各章の先頭に要点の 1 文を置く - 決定の見出し 20 件を「何のために何を決めた」の形にする(中身は変えない) - 100 字を超える文を分け、「含む」の列挙を表にする。設計文書は段落の折り返しを外して 500 行の上限に収める - 既存の要求・契約の文書に足した置き換え先の案内を、目的が読める形にする Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…の 4 段) - 見出しから識別子を外し、業務用語で「何のために何を決めた」を書く(識別子は本文の初出の括弧書きへ) - 目的の直後に用語の対応表(業務用語 ↔ 識別子)を置き、説明文は業務用語で通す - 章立てを読み手が問う順(結論 → なぜ → 実測 → 決定 → 中身 → テスト)に並べ、依頼の原文は末尾へ - 長い文を分け、採らない案と未反証の理由を表にする - 決定の中身・受け入れ条件・契約の形は変えない Refs #788 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- 見出し 18 件から識別子を外し、業務用語で「何のために何を決めた」を書く。識別子は本文の初出の括弧書きへ - 設計文書の目的の直後に「用語の対応表」を置き、本文は業務用語で通す。要求の用語表に識別子の列を足す - 要求の章を読み手の問う順(目的 → 用語 → 範囲 → 前提 → 影響 → 非機能 → 取り決め → 境界 → 検証 → 受け入れ条件 → 付録)に並べ替える - 設計の 40 行を超える章のうち散文が原因のものを分ける(置き場所・理由の語彙・両 Skill が従う契約)。章の先頭に要点の 1 文を置く - 長い文を分ける(設計の平均文長 45.3 字 → 36.4 字)。決定の中身・受け入れ条件・契約の形は変えない - 既存の契約文書の章名の参照を「理由の語彙」を含む形に揃える Refs #788 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- 見出しから識別子を外し、業務用語で「何のために何を決めた」を書く(識別子を含む見出し 17 件 → 0 件) - 説明文の識別子を業務用語へ置き換え、初出に括弧書きで添える。目的の直後に「用語の対応」を置く - 章立てを目的 → 用語 → 機能 → 実測 → 決定 → 構成要素 → 構造 → データ構造 → 契約 → 流れ → テスト設計の順にし、関連文書と前後関係を末尾へ移す - 100 字を超える文を分け、決定 7・9・13 の列挙を表にする(設計 平均文長 48.4 → 38.7 字) - 決定の中身・受け入れ条件の番号と内容・契約の形は変えていない Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
。#727 #687 #478 #664 #648) - 決定 20 件と受け入れ条件の節の見出しから識別子を外し、業務用語で「何のために何を決めた」を書く(識別子を含む見出し: 設計 17 → 0、要求 4 → 0、契約 12 → 0) - 設計文書の目的の直後に「用語の対応表」を置き、本文は業務用語で通す。要求の用語表に識別子の列を足す - 章立てを 目的 → 用語 → 機能 → 実測 → 決定 → 構成要素 → 配置 → 流れ → 非機能 → 分け方 → テスト → 未確認 → 申し送り → 対応表 → 関連文書 の順へ並べ替え、文書の位置づけは末尾の「関連文書」へ移す - 契約文書の「入出力の契約」(162 行)を引数・出力・関数の形・骨組みの 4 章に分け、置き場所は見出し直下の 1 行へ移す - 100 字超の文を分け、使える者の解決の手順の列挙を表にする。決定の中身・受け入れ条件の番号と内容・契約の形は変えない Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…eviewer-pool # Conflicts: # issues/issue-624-478-648-contracts.md
Task 1。`REASONS` に `usage_limit` / `cli_timeout` / `unparsable` を足し、 `NO_RELAUNCH_REASONS` と `relaunch_same_agent` で起動し直しの可否を 1 か所に持つ。 `read_launch_outcome` は結果ファイルと監視の結果ファイルを突き合わせ、 `LaunchOutcome`(payload / reason / detail / monitor / relaunch_same_agent)を返す。 例外・SystemExit・標準出力/標準エラーへの出力を出さない。 `from __future__ import annotations` は外した。注釈が文字列になると `dataclass` が `sys.modules` を引き、`importlib` で登録せずに読む既存テストが落ちるため。 受け入れ条件: AC1、AC8〜AC11 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Task 2。`USAGE_LIMIT_FATAL`(kiro の `Monthly request limit reached`、claude の `"api_error_status":429`、既存の quota / rate limit、HTTP 429)と、claude の stdout.log 向けの `CLAUDE_STDOUT_USAGE_LIMIT` を新設。`EARLY_ERROR_FATAL` の HTTP 行は 401 / 403 に絞る。照合の順序は利用上限 → 致命 → 警告の見た目の致命で、 `MonitorOutcome.reason` に `usage_limit` を添え、`_record_outcome` は結末の理由を 優先して書く。`_scan_early_fatal` は「止めるべき文言があるか」の契約を保つ (既存の `test_monitor_early_error.py` を変えずに通す)。 受け入れ条件: AC2〜AC4、AC6、AC7 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Task 3。`CLI_TIMEOUT_AFTER_EXIT`(agy の `print timeout after <時間> with turn in progress`)を新設。`_process_exit_outcome` は終了して結果ファイルが無いときだけ err.log を照合し、一致すれば `NO_RESULT` に `reason="cli_timeout"` を添える。 結果ファイルがあれば従来どおり `OK` / `ok`。 受け入れ条件: AC5 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Task 4。`launch-cli.sh` は `launch_runtime` の直前で `set -m`、直後で `set +m` にし、 背景起動した CLI の pid をプロセスグループの番号にする。`monitor._kill_pid` は pid がグループの先頭で、かつ監視自身のグループでないときだけ `os.killpg` (SIGTERM → 3 秒 → SIGKILL)を送り、それ以外は従来どおり `os.kill`。 ゾンビの扱いは変えない。 `set -m` は bash 3.2 の bash.1(GNU Bash-3.2、2006-09-28)に 「Monitor mode. Job control is enabled. Background processes run in a separate process group」と記載があり、macOS の bash 3.2 でも使える。 受け入れ条件: AC19〜AC21 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
リリース後テスト対象の版: 10.16.0(2026-09-22T15:05:51Z)
G2 の測定(受け入れ条件ではない): このまとまりで 導入先で落ちた 9 件(リポジトリの根の 合否: 不合格(受け入れ条件 28 行(PR #806 の 1 行を含み、#461 の行を除く)のうち合格 24・不合格 3(#478 AC45 前半、#729 / #619 の手動確認)・保留 1(#728 G4 後半)。別に #461 の引き継ぎの条件 1 行が不合格) |
実行計画: 13 agy の打ち切りと止まらない収束ループ状態: 閉じた 前提(conductor の判定、2026-09-19T02:20Z):
行
重なり
測った値
見直し
| 2026-09-21T20:57Z | G1-実装1 の報告(Draft PR #793)と #791 / #790 のマージ | G3-実装・G2-実装をマージ済みに、G1-実装1 を検査へ。G4-実装を着手できるにした(依存 | 2026-09-21T21:23Z | 取り込みの報告(#791 #790 マージ、確定仕様 #795 マージ) | G4-実装を起動。確定仕様は | 2026-09-21T22:17Z | G4-実装の報告(Draft PR #796) | G4-検査を起動。G4 の輪番の関数は現行の割り当てを包む形で書かれており、G1 の P7 はその中だけを差し替える | 重なりは | 2026-09-21T22:40Z | G5-設計の報告(関門)と G6 の起動 | G5-設計を承認待ちにし、G5-実装の行を足した(依存: G5-設計のマージと G1-実装1 のマージ。どちらも | 2026-09-22T02:45Z | G4-検査の報告(#796 レビュー待ち) | G4-実装を検査済みにし、G6-検査を起動。#796 の構造改善は 6 ラウンドで採用 29 件中 17 件を適用・12 件を取り消し。実装レビューは 1 ラウンドで収束 | 取り込みは #793 の検査が終わってから 2 本まとめて出す( | 2026-09-22T03:28Z | G1-検査の報告(#793 レビュー待ち) | 取り込みの持ち場を起動し、#793 → #796 の順でマージさせる。競合は両方を残す機械的な並べ直しに限り、包みの中身の差し替えは P7 に任せる | G1 は共通層の割り当てを作り直し、G4 はその現行版を包んだ。差し替えを取り込みで行うとレビュー済みの差分が変わる | | 2026-09-22T03:52Z | G6-検査の報告(#797 レビュー待ち)と #793 / #796 のマージ | G5-実装を起動。G6 の検査で、テストの基準のディレクトリが束の起点で止まり共通の前提が読まれない回帰が見つかり、直下に設定ファイルを 1 つ置いて解決した。残るのは G1 の P7 と、3 本の取り込み | 容量は 2 本。P7 は次の枠で起動する | | 2026-09-22T04:18Z | 取り込みの報告(#793 #796 と確定仕様 #798 をマージ) | G1-実装2(P7)を起動し、範囲へ #736 を足した。確定仕様は参加者と席・取り込みの 2 本を新設。残るのは G5 の実装・P7・3 本の取り込み・配布 | 課題 8 件は OPEN のまま(閉じるのは配布まで済んだ後)。 | 2026-09-22T09:28Z | 利用上限(429)で G5-実装と G1-実装2 が中断(04:2xZ、解除 06:30Z)。利用者がログインし直して「続けてください」 | 2 本を | 2026-09-22T09:50Z | G1-実装2 の報告(Draft PR #800) | P7 の検査を起動。構造改善は | 2026-09-22T09:56Z | G5-実装の報告(Draft PR #801) | G5 の検査を起動。構造改善は | 2026-09-22T11:40Z | G1-検査2(P7)の報告(#800 レビュー待ち) | #797 と #800 の取り込みを先に起動(配布はしない)。#801 は検査中で、後からマージする側として競合を解く | 構造改善は 2 ラウンドで採用 12 件・取り消し 0 件。agy が投稿したのに結果に URL を書かない形を担当が実物で確かめて補い収束させた(#802 起票。#801 が直す食い違いの一種) | | 2026-09-22T12:1xZ | 取り込みの報告(#797 #800 と確定仕様 #803 をマージ) | 残る行は G5-実装(検査中 #801)だけになった。起票 #804(手順書の「ホストが最初に適用しない」がホストが agy / kiro のときは事実と違う) | 最後の取り込みで #801 のマージ・確定仕様化・後片付け・配布を行う。本番への配布の前に承認を求める | | 2026-09-22T13:45Z | G5-検査の報告(#801 レビュー待ち) | 最後の取り込み(#801 のマージ・確定仕様化・後片付け・検証への配布)を起動し、本番への配布の関門で返させる | まとまりの PR がすべて検査を終えた。G5 の検査はこの PR の版で PR 自身に 1 ラウンド回し、書き込みの 3 点を確かめ、回し直しの照合の不具合を 1 件直した | | 2026-09-22T14:5xZ | 取り込みの報告(関門: 本番の系へ届く操作)。#801 #805 #807 をマージし開発版 v10.16.0-dev.1 を配布。利用者が本番への配布を「承認する」 | 仕上げの持ち場を起動(接尾辞を外す版上げ → develop から main → タグ → リリース後テスト → 振り返り → 課題 19 件を閉じる) | すべての行がマージ済みになった。閉じるのは仕上げの後 | | 2026-09-22T15:4xZ | 仕上げの報告(振り返りの前) | 本番へ v10.16.0 を配布した(#808 接尾辞を外す → 承認の後に develop へ入った #806 を含めることを 15:0xZ に再承認 → #809 説明文書 → #810 develop から main → タグ 閉じたときの測定
|
振り返り(2026-09-22)対象: マイルストーン 13「agy の打ち切りと止まらない収束ループ」(#478 #553 #583 #584 #592 #619 #624 #647 #648 #664 #678 #687 #706 #727 #728 #729 #730 #732 #736)/ 配布 PR #810(ndf 10.16.0)
何が起きたか
context window の大きさconductor のセッション 2 件(まとまり全体)を
次に変えること
途中で起票した課題
|
Summary
正式版 ndf v10.16.0 を
main(正式版のチャネル)へ載せる。マイルストーン 13「agy の打ち切りと止まらない収束ループ」(#478 #553 #583 #584 #592 #619 #624 #647 #648 #664 #678 #687 #706 #727 #728 #729 #730 #732 #736)の版である。
cross-reviewとcross-refactoringの収束ループが、担当が揃わない・利用上限で止まる・結果を残さないときにも止まらず終わるようにした。あわせて、承認の後にdevelopへ入った PR #806(statusline にサブエージェントのコンテキスト使用量を並べる)を含む。Skill の数は変わらない。版
initに--exclude/--include/--require-allを足し、既定の振る舞い(認証の確認を関門から外す・cross-reviewの 2 席確保・cross-refactoringの既定の参加者)を変えた。statusline の表示の追加。Skill・引数・ファイルの削除や改名は無い(共通層の内部関数 4 つを置き換えた)ndf--v10.15.1からplugins/ndf/124 ファイル配布の記録
段階: 本番(2026-09-22T14:36Z に利用者の承認を得た。#806 を含めることは 2026-09-22T15:0xZ に承認された。conductor が取得)
版: 10.15.1 → 10.16.0(MINOR: 引数の追加と既定の振る舞いの変更。削除・改名なし)
まとまり: PR #781 / #782 / #783 / #784 / #790 / #791 / #793 / #794 / #795 / #796 / #797 / #798 / #800 / #801 / #803 / #805 / #806 / #807 / #808 / #809
配布物の差分: 124 ファイル
取り消しの手段: 配布した側から戻す手段は無い。利用者が取得元をタグ
ndf--v10.15.1へ固定する(同じ取得元の他のプラグインも過去の状態になる)か、10.16.1 で直す変更の要約
CHANGELOG.mdのndf 10.16.0の節(追加 6 件 / 変更 10 件 / 修正 2 件 / 削除 2 件)を参照。Test plan
developを取得し 10.16.0-dev.1 が入ることを確認、Kiro のインストーラ exit=0git diff --stat origin/develop origin/mainが空claude plugin tag plugins/ndf --pushでndf--v10.16.0を打ち、git ls-remote --tags origin ndf--v10.16.0で確認🤖 Generated with Claude Code