Skip to content

Release: ndf v10.16.0 - #810

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

takemi-ohama merged 245 commits into
mainfrom
develop

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

Summary

正式版 ndf v10.16.0main(正式版のチャネル)へ載せる。

マイルストーン 13「agy の打ち切りと止まらない収束ループ」(#478 #553 #583 #584 #592 #619 #624 #647 #648 #664 #678 #687 #706 #727 #728 #729 #730 #732 #736)の版である。cross-reviewcross-refactoring の収束ループが、担当が揃わない・利用上限で止まる・結果を残さないときにも止まらず終わるようにした。あわせて、承認の後に develop へ入った PR #806(statusline にサブエージェントのコンテキスト使用量を並べる)を含む。Skill の数は変わらない。

10.15.1 → 10.16.0(MINOR)
根拠 両 Skill の init--exclude / --include / --require-all を足し、既定の振る舞い(認証の確認を関門から外す・cross-review の 2 席確保・cross-refactoring の既定の参加者)を変えた。statusline の表示の追加。Skill・引数・ファイルの削除や改名は無い(共通層の内部関数 4 つを置き換えた)
配布物の差分 ndf--v10.15.1 から plugins/ndf/ 124 ファイル
比較 ndf--v10.15.1...develop

配布の記録

段階: 本番(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.mdndf 10.16.0 の節(追加 6 件 / 変更 10 件 / 修正 2 件 / 削除 2 件)を参照。

Test plan

🤖 Generated with Claude Code

takemi-ohama and others added 30 commits September 19, 2026 02:40
#729 の設計文書と要求を新設し、結果なしの判断と起動し直しの可否を
共通層 monitor_outcome へ移す契約を決める。利用上限(usage_limit)と
CLI の上限(cli_timeout)の語彙と検知の文言、cross-review の判定が可否を
読む形、cross-refactoring の read_result が従う契約(実装は #728)を持つ。
既存の設計(PR #666)の P3 は対応表で指し、要求と契約の文書に案内を足す。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- 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>
#732 の名前で要求と設計を新設し、既存の設計(PR #667)の P4 を置き換える。
数えないのは棄却(refute / not_reproduced)と minor 以下だけにし、誤りを示されて
いない major を新しい区分 unrefuted として数える。既存の要求と契約の文書には
置き換え先の案内を 1 段落ずつ足した。

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>
- 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>
- タイトルを「今起きている現象 → 直した後に成り立つこと」の形にし、仕組みの語を本文へ下ろす
- 最初の章を「目的」にし、置き換え先の案内は末尾の「関連する文書」へ寄せる
- 決定の見出しを「何のために何を決めた」と読める語にする(結論・理由は変えない)
- 前提の箇条書きと決定 2 の 3 つの形を表にし、100 字を超える文を分ける

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>
…e-vocabulary

cross-review: 利用上限で止まった担当が「結果ファイル無し」と報告されて空振りの起動し直しで待たされ、止めた担当が後から結果を書く → 上限を理由に報告して同じラウンドで起動し直さず、止めた後は書かせない(#729 #619 #584
…sification

cross-review: 誤りを示されていない重大な指摘が数えられずに承認で終わる → 数えない指摘を棄却と軽微な指摘に限る(#732 #624 #706
cross-refactoring: 実装担当が結果を残さないと同じ群が上限なしに開き直され、未検証のコミットが残る → 結果なしを取り込みの 1 か所で受けて取り消し、群が開いた回数と結末で開き直しを決める(#728 #647 #592 #553
…eviewer-pool

# Conflicts:
#	issues/issue-624-478-648-contracts.md
cross-review / cross-refactoring: 参加する CLI が 1 者でも使えないと収束ループを開始できず、再開で渡した引数が黙って無視される → 使える者だけで開始し、cross-review は毎ラウンド 2 席を確保し、再開で渡した引数は反映されるか反映しないと知らされる(#727 #687 #478 #664 #648
設計文書(PR #781)の決定 12 件を 8 つのタスクへ分解する。共通層(語彙・監視・起動)→
cross-review の読む側 → 文書と退行の確認の順に進める。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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>
@takemi-ohama

takemi-ohama commented Sep 22, 2026

Copy link
Copy Markdown
Contributor Author

リリース後テスト

対象の版: 10.16.0(2026-09-22T15:05:51Z)
導入経路: 正式版のチャネル(ref を指定しない登録 = main)を、隔離した設定ディレクトリで Claude Code(claude plugin marketplace add devbasex/ai-pluginsclaude plugin install ndf@ai-plugins)と Codex(codex plugin marketplace addcodex plugin add)に登録・導入し、どちらも 10.16.0(取得元 ba911849 = タグ ndf--v10.16.0)が入ることを確かめた。Kiro は main の clone で install.sh --dry-run が「NDF バージョン: 10.16.0」。更新案内の 4 コマンドと「手元で確かめる」の 3 行はすべて exit=0。テストは導入先(配布物そのもの)と、タグと同じコミットの作業ツリー(uv run --with pytest pytest scripts/tests plugins/ndf -q → 4950 passed / exit=0)で実行した。実機の確認は検証用の Draft PR #812(マージせず閉じた)で 10.16.0 のスクリプトを回した

課題 受け入れ条件 実行したこと 実行時刻 結果
#727 G1 AC1〜AC30・AC44・AC49・AC50(使える者だけでの開始、席、再開の引数) 導入先で test_state_review_pool.py test_seat_names.py test_state_round_guard.py test_lib_participants.py test_lib_assignment.py test_auth_probe.py 2026-09-22 15:13 合格 / 134 passed / exit=0
#478 G1 AC14 同上 2026-09-22 15:13 合格 / exit=0
#478 G1 AC45 前半(kiro-cli が無い環境で init が exit 0、使える者だけで 2 席) PR #812kiro-cli を PATH から隠して state.py init 812 --host claudestart-round 2026-09-22 15:22 不合格(利用者の PATH に読めない /root/.local/bin があり、auth.py_run_probePermissionError を捕まえず init が exit=1。その項目を外した PATH では exit=0・席 codex agy#813 として起票)
#478 G1 AC48(#461: 言語モデルを引けない CLI が確認を通る現象が残ることを記録する) whoami は通り本体は結果を書かない kiro-cli の shim で init 2026-09-22 15:24 合格(確認を通り available=[kiro] に入った。現象が残ることを記録した)
#461 引き継ぎの条件「言語モデルを引けない担当がそのラウンドで結果なしとして扱われ、ループが止まらない」(要求の AC48 ではない) 上の shim の担当を含むラウンドを 1 つ回し judge 2026-09-22 15:25 不合格(1 回目の judge は結果なし missing で exit=7 → 起動し直し、2 回目は exit=1 final=error。10.16.0 の設計「2 度目は final = error」どおりで、#461 の現象。#461 へ記録した)
#687 G1 AC8〜AC13・AC17〜AC19 導入先で test_lib_assignment.py test_seat_names.py 2026-09-22 15:13 合格 / exit=0
#687 G1 AC45 後半(#687 場面 3: codex が使えないとき --exclude codex なしで init が exit 0、席をホスト・2 つ目で埋める) PR #812codex login status を落とす shim → initstart-roundkiro-cli も隠した場面も 2026-09-22 15:23 合格 / exit=0(席 kiro claude、使える者 0 者では claude claude-2
#648 G1 AC25〜AC30・AC38〜AC40 導入先で test_state_resume_args.py test_lib_resume_args.py 2026-09-22 15:14 合格 / 25 passed / exit=0
#648 G1 AC46(再開の init--only codex → 次の start-roundcodex だけ) PR #812 でラウンド 1(codex kiro)を開いて中断 → init 812 --only codexstart-round 2026-09-22 15:23 合格 / exit=0(ROUND=2 REVIEWERS='codex'、ラウンド 1 の担当は不変)
#664 G1 AC7・AC31〜AC43・AC47・AC49・AC50 導入先で cross-refactoring の test_init.py test_rounds.py test_assignment.py test_start_round_emits_runtimes.py、作業ツリーで test_skill_terms.py test_shared_lib_layout.pygit grep -n '"--exclude"' 2026-09-22 15:14 合格 / 127 + 50 passed / exit=0
#736 G1 AC42(CLAUDE.md の cross-refactoring の節) 作業ツリーで test_skill_terms.py::test_claude_md_describes_the_participants_and_the_rotation 2026-09-22 15:14 合格 / exit=0
#729 G3 AC1〜AC24(結末の語彙、read_launch_outcome、上限で起動し直さない、プロセスグループ) 導入先で test_monitor_usage_limit.py test_monitor_outcome_unit.py test_judge_no_result_reason.py test_read_result_reason.py test_launch_cli_process_group.py 2026-09-22 15:14 合格 / 145 passed / exit=0
#729 G3 手動確認(#619 の再現: 利用上限で止まった担当が理由「利用上限」で報告され、起動し直されない) 導入先の monitor.py に各 CLI の利用上限の文言を与え read_launch_outcome で読んだ 2026-09-22 15:11 不合格(kiro の Monthly request limit reached と claude の JSON 429 は usage_limit・起動し直さない。codex の実物の文言 You've hit your usage limit…exceeded retry limit, last status: 429、claude のテキスト出力の文言は missingrelaunch_same_agent=True#811 として起票)
#619 G3 AC2・AC3・AC10・AC13〜AC17 上の G3 のテスト 2026-09-22 15:14 合格 / exit=0
#619 手動確認(#619 の再現) 上の G3 の手動確認と同じ 2026-09-22 15:11 不合格(codex と claude のテキスト出力の文言を読まない。#811
#584 G3 AC19〜AC21、手動確認(止めた後に子が結果を書かない) 導入先で test_launch_cli_process_group.py(3 秒後に書く子を止め、4 秒後に結果ファイルが無い) 2026-09-22 15:14 合格 / exit=0
#728 G4 AC1〜AC50 導入先で test_apply_attempts.py test_apply_rounds.py test_intake.py test_final_fix.py test_abandon_items.py test_git_facts.py test_commit_trailers_git.py test_merge_apply.py、作業ツリーで test_monitor_phase_calls.py 2026-09-22 15:14 合格 / 282 + 23 passed / exit=0
#728 G4 手動確認(前半: 適用担当の進捗の記録に作業段階が残る) PR #812cross-refactoring--scope plugins/ndf/scripts/parallel-measure.py とそのテスト、--max-outer-rounds 1)を最初の適用ラウンドの merge-applyverify-round まで回した 2026-09-22 15:32 合格 / exit=0(codex-apply-r1-progress.log に start / edit / test / commit / done)
#728 G4 手動確認(後半: 結末の記録の理由が監視の結果と一致する) 同上 2026-09-22 15:32 保留(結果なしの群が起きず、比べる failed_attempts が作られなかった。成功した群は監視 OK/ok と状態 result=okverified で一致。未検証の条件を #814 へ移した)
#647 G4 AC9〜AC15・AC17 導入先で test_apply_attempts.py 2026-09-22 15:14 合格 / exit=0
#592 G4 AC19・AC21・AC22 導入先で test_apply_rounds.py 2026-09-22 15:14 合格 / exit=0
#553 G4 AC32〜AC39 導入先で test_commit_trailers_git.py 2026-09-22 15:14 合格 / exit=0
#732 G2 AC1〜AC22 導入先で test_classify_findings.py test_critiques.py test_measure.py、作業ツリーで test_skill_layout.py 2026-09-22 15:14 合格 / 132 + 44 passed / exit=0
#624 G2 AC1〜AC4・AC13 導入先で test_classify_findings.py 2026-09-22 15:14 合格 / exit=0
#706 G2 AC5〜AC7 同上 2026-09-22 15:14 合格 / exit=0
#730 G5 AC1〜AC32 導入先で test_post_queue.py test_result_posts.py test_queue_idempotency.py test_read_result_posts.py test_merge_fix_posts.py test_state_read_result.py test_state_not_posted.py test_state_queue_judge.py test_review_findings.py test_writes_by_conductor_docs.py test_launch_reviewer_prompt_context.py、作業ツリーで test_push_fallback_docs.py 2026-09-22 15:14 合格 / 163 + 7 passed / exit=0
#583 G5 AC10〜AC14・AC18〜AC20 導入先で test_queue_idempotency.py test_read_result_posts.py 2026-09-22 15:14 合格 / exit=0
#678 条件 1〜6(MONITOR_ を延ばしたシェルでも同じ件数が通る) 作業ツリーで MONITOR_TIMEOUT_AGY=1800 MONITOR_STALL_AGY=1800 uv run --with pytest pytest scripts/tests plugins/ndf -q と設定なしの実行、test_root_conftest.py 2026-09-22 15:17 合格 / 4950 = 4950 passed / exit=0
PR #806 statusline がサブエージェントの使用量を の後に並べる 導入先で skills/statusline/tests test_transcript_agents.py、実在するセッションの記録を導入先の statusline.sh へ与えて描画 2026-09-22 15:10 合格 / 90 passed / exit=0(/work/ai-plugins [Opus5 123k │ 仕上げ: 189k · 検証:配 119k]

G2 の測定(受け入れ条件ではない): このまとまりで cross-review を回した 11 本の収束までのラウンド数は平均 1.6(中央値 1、最大 4)、前のまとまり(10.15.0)の 13 本は平均 7.5(中央値 4、最大 38)。修正の担当のコミットは 1 ラウンドあたりほぼ 1 件。unrefuted の件数は PR のコメントにも実行の要約にも残らず取れなかった。実行の要約は版をすべて 10.15.1 と記録しており(レビューは develop の導入版で回った)、ラウンド数の差を unrefuted の数え方の効果とは言えない。

導入先で落ちた 9 件(リポジトリの根の CLAUDE.mddocs/specifications/.git を読むテスト。配布物に含まれないため)は、同じコミットの作業ツリーではすべて通った。

合否: 不合格(受け入れ条件 28 行(PR #806 の 1 行を含み、#461 の行を除く)のうち合格 24・不合格 3(#478 AC45 前半、#729 / #619 の手動確認)・保留 1(#728 G4 後半)。別に #461 の引き継ぎの条件 1 行が不合格)
起票したもの: #811(監視が codex と claude のテキスト出力の利用上限の文言を読まない)/ #813(PATH に読めないディレクトリがあると initPermissionError で落ちる)/ #814(未検証: G4 の結末の理由と監視の一致)/ #461 へ再現の記録を追記

@takemi-ohama

Copy link
Copy Markdown
Contributor Author

実行計画: 13 agy の打ち切りと止まらない収束ループ

状態: 閉じた
開始: 2026-09-19T02:20Z
oom_kill の起点: 0(19:31Z にホストが再起動し cgroup の計数が 0 に戻った。再起動前の起点は 1)

前提(conductor の判定、2026-09-19T02:20Z):

種類 課題 モード 触るファイルと節 確度 設計の依存 実装の依存 状態 Pull Request
G3-設計 G3 設計 #729 #619 #584 standard plugins/ndf/scripts/lib/monitor_outcome.pylib/monitor.py「EARLY_ERROR_FATAL」、cross-review/scripts/state.py「_read_review_result_file」、refactor_lib/gitfacts.py「read_result」(契約のみ)、issues/issue-662-598-537-619-584-583-design.md「P3」 確定 なし マージ済み #781
G1-設計 G1 設計 #727 #687 #478 #664 #648 standard plugins/ndf/scripts/lib/auth.py「check_auth」、lib/assignment.py「review_pool / review_assign / assign」、cross-review/scripts/state.py「init / 再開の引数」、cross-refactoring/scripts/refactor_lib/commands/setup.py「cmd_init」、CLAUDE.md「cross-refactoring」、cross-refactoring/SKILL.md「担当の決め方」、issues/issue-624-478-648-design.md「決定 10 / P5」 確定 なし マージ済み #782
G3-実装 G3 実装 #729 #619 #584 standard lib/monitor_outcome.py「read_launch_outcome」(新設)、lib/monitor.py「文言の検知 / 理由 / プロセスグループ」、lib/launch-cli.shcross-review/scripts/state.py「read-result / judge / report」、cross-review docs/ 3 本、lib/README.md 確定 G3-設計:マージ マージ済み #791
G2-実装 G2 実装 #732 #624 #706 standard cross-review/scripts/state.py「_classify_finding / COUNTED_CLASSIFICATIONS」、cross-review/docs/06-evidence.mddocs/specifications/cross-review-evidence-based.md 確定 G2-設計:マージ マージ済み #790
G1-実装1 G1 実装 #727 #687 #478 #648 standard P6: lib/assignment.py「refactor_pool / resolve_participants / review_seats / impl_assign」、lib/auth.py「probe_auth」、lib/statefile.py「apply_resume_args」、cross-review/scripts/state.py「init / _round_reviewers / _guard_previous_round / read-result の受け口 / report」、席の受け口 10 か所、cross-review SKILL.md / docs/01 / docs/04 / docs/05 確定 G1-設計:マージ マージ済み #793
G1-実装2 G1 実装 #664 #736 standard P7: refactor_lib/commands/setup.py「cmd_init / cmd_start_round」、apply.py:134 / gate.py:128impl_assign へ各 1 行)、report.py / plan.py / refactor.py、cross-refactoring SKILL.md / docs/01CLAUDE.md#736 も)、旧関数の削除、rounds.py「impl_for_seq の中身」 確定 G1-実装1:マージ マージ済み #800
G2-設計 G2 設計 #732 #624 #706 standard cross-review/scripts/state.py「_classify_finding / COUNTED_CLASSIFICATIONS」、cross-review/docs/06-evidence.md「区分の表」、issues/issue-624-478-648-design.md「P4」 確定 なし マージ済み #783
G4-設計 G4 設計 #728 #647 #592 #553 standard refactor_lib/gitfacts.py「read_result」、refactor_lib/commands/apply.py「merge-apply / next-apply-round」、commands/converge.py「merge-fix」、commands/gate.py「merge-final-fix」、refactor_lib/rounds.py「apply_groups」、issues/issue-647-592-553-design.md「決定 6」 確定 G3-設計:収束 マージ済み #784
G4-実装 G4 実装 #728 #647 #592 #553 standard refactor_lib/intake.py(新設)、gitfacts.py「read_result(包み)/ revert_unverified_range」、commands/apply.py「merge-apply / next-apply-round / _revert_unverified_apply_round」、converge.py「merge-fix」、gate.py「merge-final-fix」、rounds.py「group_reopening / apply_groups / impl_for_seq」、状態ファイル apply_rounds[] 確定 G3-実装:マージ マージ済み #796
G5-設計 G5 設計 #730 #583 standard cross-review/scripts/launch-reviewer.sh「投稿」、cross-review/scripts/state.py「_merge_fix_records / cmd_verify_sweep / 投稿」、plugins/ndf/scripts/lib/post_queue.pycross-review/docs/02-fix-and-rotation.mddocs/03-review-output.mdcross-review/SKILL.mdcross-review/references/context-budget.mdfix/SKILL.md 確定 なし マージ済み #794
G5-実装 G5 実装 #730 #583 standard lib/result_posts.py(新設)、lib/post_queue.pycross-review/scripts/launch-reviewer.shcross-review/scripts/state.py「指摘の取り込み / 修正の取り込み」、cross-review/SKILL.mddocs/02 docs/03 docs/04references/context-budget.mdfix/SKILL.mdlib/result_posts.py(新設) 確定 G5-設計:マージ、G1-実装1:マージ マージ済み #801
G6-実装 G6 実装 #678 light conftest.py(リポジトリ直下)、監視の環境変数を個別に外している 27 箇所のテスト、pytest.ini(新設) 確定 なし なし マージ済み #797

重なり

行の組 ファイルと節 区分 扱い
G3-設計 / G4-設計 refactor_lib/gitfacts.py「read_result」 書き換え(見込み) G4-設計 の設計の依存へ G3-設計:収束 を置いた。実装の依存は設計の収束後に確定する
G1 / G2 / G5 cross-review/scripts/state.py 別の節(init / _classify_finding / 投稿) 並行してよい。競合は後からマージする側が解く
G3-実装 / G1-実装1 cross-review/scripts/state.py「report」「read-result の受け口」 足すだけ(見込み) 並行してよい。後からマージする側が両方を残して解く
G3-実装 / G2-実装 cross-review/scripts/state.py「judge」 別の節(G3 は終了コードを変えない、G2 は区分) 並行してよい
G1-設計 / G2-設計 issues/issue-624-478-648-requirements.md / -contracts.md の先頭の案内 足すだけ 後からマージする側が並べる
G1-実装2 / G4-実装 refactor_lib/commands/apply.py:134 / gate.py:128 書き換え(各 1 行) 後からマージする側が揃える。設計の収束後に依存を確定する

測った値

時刻 空き(MiB) cgroup の残り(MiB) スワップの空き(MiB) oom_kill 動いている本数 起動してよい本数 決めた条件 起動した行
2026-09-19T02:20Z 6455 max 0 1 0 1 memory,swap_low G3-設計
2026-09-19T02:52Z 6218 max 0 1 1 2 memory,max,swap_low G1-設計
2026-09-19T03:01Z 6307 max 0 1 1 2 memory,max,swap_low G2-設計
2026-09-19T03:39Z 6304 max 0 1 1 2 memory,max,swap_low G4-設計
2026-09-19T04:08Z 6004 max 0 1 1 1 memory,swap_low (起動なし)
2026-09-19T10:48Z 6573 max 2 1 0 1 memory,swap_low G3-実装
2026-09-19T10:53Z 6472 max 3 1 1 2 memory,max,swap_low G2-実装
2026-09-19T11:27Z 6112 max 0 1 1 1 memory,swap_low (起動なし。G2-検査は G3-実装の報告後に測り直す)
2026-09-19T11:43Z 5505 max 0 1 0 1 memory,swap_low,floor G3-検査
2026-09-19T19:35Z 20842 max 4095 0 0 3 max G3-検査(再開)/ G2-検査 / G1-実装1
2026-09-21T20:40Z 11403 max 4095 0 1 3 max 取り込み(#791 #790)/ G5-設計
2026-09-21T20:57Z 11020 max 4095 0 2 3 max G1-検査
2026-09-21T21:23Z 10892 max 4095 0 2 3 max G4-実装
2026-09-21T22:17Z 11334 max 4095 0 2 3 max G4-検査
2026-09-21T22:40Z 11000 max 4095 0 2 3 max G6-実装
2026-09-22T02:15Z 12031 max 4095 0 0 3 max G1-検査(再開)/ G4-検査(再開)
2026-09-22T02:45Z 14054 max 0 0 1 2 max,swap_low G6-検査
2026-09-22T03:28Z 15040 max 0 0 1 2 max,swap_low 取り込み(#793 #796
2026-09-22T03:52Z 14984 max 513 0 1 2 max,swap_low G5-実装
2026-09-22T04:18Z 11893 max 512 0 1 2 max,swap_low G1-実装2(P7)
2026-09-22T09:28Z 12705 max 0 0 2 G5-実装(再開)/ G1-実装2(再開)
2026-09-22T09:50Z 11532 max 0 1 3 max G1-検査2(P7)
2026-09-22T09:56Z 11919 max 0 1 3 max G5-検査
2026-09-22T11:40Z 14050 max 0 1 2 max,swap_low 取り込み(#797 #800

見直し

時刻 契機 変えたこと 理由
2026-09-19T03:01Z G3-設計の報告(関門) G3-設計を確定・承認待ちにし、G4-設計を着手できるにした。G3 の設計文書は親 #729 の名前で新設(既存の #666 の文書は案内のみ)。#583 は G5 へ渡す 決定 11 で read_result は契約だけを決め、実装は G4 が持つ。G4 の設計の依存 G3-設計:収束 が済んだ
2026-09-19T03:39Z G2-設計の報告(関門) G2-設計を確定・承認待ちにした。#583 の収束の部分は G2 で塞がり、G5 に残るのは投稿の重なりだけ 決定 2〜4 で unrefuted を数える区分にしたため。G5 の設計の入力に写す
2026-09-19T04:08Z G1-設計の報告(関門) G1-設計を確定・承認待ちにし、実装の行を G3 / G2 に 1 本ずつ、G1 に 2 本(P6 → P7)足した。重なりの表に 4 組を足した G1 の決定 19 が実装を 2 本に分けた。G3 / G2 の設計は分けていない。3 本の設計 PR を 1 回の承認へ載せる
2026-09-19T04:20Z 利用者の指示(関門で #781 #782 #783 のタイトルが読めない) 承認の問いを取り下げ、3 本の設計文書と PR を「目的が読める形」へ書き直す担当を出した(同時 2 本 + G4 の 3 本まで)。工程の改善は #785 に起票 承認するのは中身で、タイトルと冒頭から目的が読めないと判断に入れない。書き直しの後に承認を求め直す
2026-09-19T04:31Z G4-設計の報告(関門) G4-設計を確定・承認待ちにし、G4-実装の行を足した(実装の依存は G3-実装:マージ)。G4 は新しいタイトルの規約を先に適用済み 決定で read_result は G3 の read_launch_outcome の包みになるため、G3 の実装が先
2026-09-19T05:40Z 利用者の指摘(markdown-writing のルール 1 の違反。supervisor 4 本のうち 3 本が markdown-writing を読んでいない) 承認の問いを再び取り下げ、4 本の設計文書を markdown-writing 全ルール + document-restructuring 4 段で組み直す担当を出した(同時 3 本)。工程の改善は #788 に起票。旧文書 issue-624-478-648-design.md は G1 / G2 のマージ後に別の docs PR で直す 工程の通過が記録だけで確かめられ、実物が規約に反していた。承認する人が読める形にしてから関門へ戻す
2026-09-19T10:47Z 関門の承認(利用者「承認します」10:46Z)。#781 #783 #784 をマージ G3 / G2 / G4 の設計をマージ済みにし、G3-実装を起動、G2-実装を着手できるにした。#782 は G2 と同じ既存文書の先頭で競合し、両方の案内を残して解いた(レビューは回し直していない。差分は案内 2 段落の並びだけ) 4 本まとめて承認を受けた。容量が 1 本のため、G4 の依存になっている G3 の実装を先に起動
2026-09-19T10:53Z #782 のマージ(CI 15 件 pass) G1-設計をマージ済みにし、G1-実装1 を着手できるにした。容量 2 本で G2-実装を起動 設計 4 本がすべて develop に入った。実装の並びは G3 → G2 → G1-実装1 → G4(G3 のマージ後)→ G1-実装2
2026-09-19T11:43Z G3-実装・G2-実装の報告(Draft PR #791 / #790 両 PR を検査の持ち場へ。容量 1 本のため G3-検査を先に起動し、G2-検査と G1-実装1 は次の測定で起動する G4 の実装が G3 のマージを待つため G3 を優先。範囲外の起票 #789(G3 の実装から)
2026-09-19T19:35Z 進行側が再起動して実行計画を読み直した(前のセッションは 14:2x に終了。/tmp の作業ツリー・状態ファイル・提示物が消失) G3-検査を SendMessage で再開(構造改善は改修計画がラウンド 6 = 上限まで到達しているため再開せず、head の検証の後に実装レビューへ)。容量 3 本で G2-検査と G1-実装1 を起動。G3 の作業ツリーの detached HEAD をブランチへ戻した 上限の中断ではなくプロセスの終了。記録(PR・issue・改修計画)は残っており、失ったのは /tmp の一時物だけ
2026-09-21T20:40Z 進行側が再起動して実行計画を読み直した(2 度目。前のセッションは 09-19 22:0x に終了) G3-検査・G2-検査は完了しており(実装レビューと完了判定を記録、Draft 解除済み)、取り込みの持ち場を起動して #791#790 のマージと確定仕様化へ。G1-実装1 を SendMessage で再開。G5-設計を起動 検査の報告は届かなかったが、進行の記録と PR の状態(レビュー 2 件・CI 全通過・Draft 解除)から到達点を確かめた。配布はまとまりの最後の取り込みで 1 回行う

| 2026-09-21T20:57Z | G1-実装1 の報告(Draft PR #793)と #791 / #790 のマージ | G3-実装・G2-実装をマージ済みに、G1-実装1 を検査へ。G4-実装を着手できるにした(依存 G3-実装:マージ が済んだ)。容量 3 本のうち 1 本で G1-検査を起動 | 競合の再発を避けるため、develop を取り込み済みの #793 の検査を G4 の実装より先に出した |

| 2026-09-21T21:23Z | 取り込みの報告(#791 #790 マージ、確定仕様 #795 マージ) | G4-実装を起動。確定仕様は cross-review-launch-outcome.md を新設し cross-review-evidence-based.md へ書き足した。要求・設計の文書は他の束がリンクしているためまだ消さない(まとまりの最後で削除) | 配布はまとまりの最後の取り込みで 1 回行う。残る束は G1(検査中)・G4(実装)・G5(設計のレビュー中)・G6(未着手) |

| 2026-09-21T22:17Z | G4-実装の報告(Draft PR #796) | G4-検査を起動。G4 の輪番の関数は現行の割り当てを包む形で書かれており、G1 の P7 はその中だけを差し替える | 重なりは rounds.impl_for_seq の中身 1 か所に閉じた。後からマージする側が揃える |

| 2026-09-21T22:40Z | G5-設計の報告(関門)と G6 の起動 | G5-設計を承認待ちにし、G5-実装の行を足した(依存: G5-設計のマージと G1-実装1 のマージ。どちらも state.py の同じ節を触る)。G6-実装を起動 | G5 の決定 11 が修正の書き込みを共通層にまとめ、G1 の P6 が同じ state.py の初期化と席を触る |
| 2026-09-22T02:15Z | 利用上限(429)で G1-検査と G4-検査が中断(00:0xZ)。解除は 01:30Z | 承認を受けた #794 をマージし、2 本の検査を SendMessage で再開した。G6-実装は Draft PR #797 まで到達 | 記録(interrupted)で 2 件とも rate_limit / resets_passed: true と確かめた。上限の中断からの再開は報告なしの回数に数えない |

| 2026-09-22T02:45Z | G4-検査の報告(#796 レビュー待ち) | G4-実装を検査済みにし、G6-検査を起動。#796 の構造改善は 6 ラウンドで採用 29 件中 17 件を適用・12 件を取り消し。実装レビューは 1 ラウンドで収束 | 取り込みは #793 の検査が終わってから 2 本まとめて出す(rounds.impl_for_seq で重なるため、1 つの担当が順にマージして競合を解く) |

| 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 のまま(閉じるのは配布まで済んだ後)。rf796/kiro の作業ツリーだけ未追跡の生成物のため残した |

| 2026-09-22T09:28Z | 利用上限(429)で G5-実装と G1-実装2 が中断(04:2xZ、解除 06:30Z)。利用者がログインし直して「続けてください」 | 2 本を SendMessage で再開した。G5 は 3 コミット + 未コミット 2 ファイル、P7 は未着手。コミットの署名から Claude-Session: の行を外すよう伝えた | 記録(interrupted)で 2 件とも rate_limit / resets_passed: true と確かめた。この日 2 度目の上限。並行 2 本・構造改善の長い収束ループが枠を使う |

| 2026-09-22T09:50Z | G1-実装2 の報告(Draft PR #800) | P7 の検査を起動。構造改善は --max-outer-rounds 2 に絞った。範囲外の起票 #799CLAUDE.md の古い 3 行) | この日 2 度 429 に当たった。前例の検査は 6 ラウンド・約 3 時間で採用の半分近くを取り消しており、P7 は削除と載せ替えが主で提案の余地が小さい |

| 2026-09-22T09:56Z | G5-実装の報告(Draft PR #801) | G5 の検査を起動。構造改善は --max-outer-rounds 2。実装レビューの後に、この PR の版の骨組みで PR #801 自身に cross-review を 1 ラウンド回し、担当が直接投稿しないこと・取り込みが 1 件投稿すること・流し直しても二度投稿しないことを確かめさせる | 実装の持ち場が実物での確認を Test plan に未チェックで残した。レビューは develop の旧来の版で回るため、新しい版の振る舞いは別に確かめる必要がある |

| 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 → タグ ndf--v10.16.0)。リリース後テストは不合格 3・保留 1 で #811 #813 #814 を起票 | #478 #619 #729 は不合格の条件を持つため開いたまま、#728 は未検証の条件を #814 へ移して閉じる |

閉じたときの測定

対象の Pull Request 期間(分) 重なり(分) 並行度 最大同時 oom_kill の増分
#781 #782 #783 #784 #790 #791 #793 #794 #796 #797 #800 #801(行の 12 本。2026-09-19T02:42Z〜2026-09-22T13:53Z) 4991 4397 88.1% 4 0(19:31Z の再起動で計数が 0 に戻った。最初の行の 1 から引くと −1 になるため、再起動後の起点 0 から数えた。2026-09-22T15:4xZ の測定は 0)

@takemi-ohama

Copy link
Copy Markdown
Contributor Author

振り返り(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)

cross-reviewcross-refactoring の収束ループが、担当が揃わない・利用上限で止まる・結果を残さないときにも止まらずに終わるようにした。束は根本原因の親 issue の修正レイヤーで 6 つに切った(G1 参加者と席 #727、G2 数える区分 #732、G3 起動の結末 #729、G4 適用の取り込み #728、G5 書き込みを進行側へ #730、G6 テストの環境変数 #678)。設計 PR 5 本・実装 PR 7 本・確定仕様 PR 4 本を 2026-09-19〜22 に通し、開発版 10.16.0-dev.1 を経て正式版 10.16.0 を配布した。実行計画の全文は同じ PR の直前のコメントにある(並行度 88.1%、最大同時 4、oom_kill の増分 0)。

何が起きたか

観点 事実
受け入れ条件 途中で変えた条件は無い。G1 の実装を P6 / P7 の 2 本に分け、P7 の範囲へ #736 を足した(2026-09-22T04:18Z)
手戻り(設計) 設計 PR の承認の関門で 2 度書き直しになった。1 度目はタイトルと冒頭から目的が読めない(#785)、2 度目は markdown-writing を読まずに書かれ、再構成も実施されていなかった(#788。supervisor 4 本のうち 3 本)。どちらも工程は記録上「通過」していた
手戻り(実装) 実装 PR の cross-review の収束は平均 1.6 ラウンド(中央値 1、最大 4、11 本)。前のまとまり(10.15.0)は平均 7.5(中央値 4、最大 38、13 本)。修正の担当のコミットは 1 ラウンドにほぼ 1 件
構造改善 #796(G4)は 6 ラウンド・約 3 時間で採用 29 件のうち 12 件を取り消した。上限を 2 に絞った #800(P7)は 2 ラウンドで採用 12 件・取り消し 0 件。比べた本数が少なく中身も違うため、次のまとまりで試す(#816
中断 利用上限(429)に 2 度当たった(09-22 00:0xZ に検査 2 本、04:2xZ に実装 2 本)。どちらも記録(interrupted)で rate_limit と解除を確かめ、SendMessage で再開できた。別にプロセスの終了からの再開が 2 度あり(09-19 14:2x、09-19 22:0x)、/tmp の作業ツリー・状態ファイル・提示物は消えたが、実行計画と issue の ## 進行 と PR の状態から到達点を復元できた
配布 本番への配布の承認(14:36Z)の 6 分後に、まとまりの外の PR #806(statusline)が develop へ入った。仕上げの持ち場が配布物の差分の数(119 → 124 ファイル)の食い違いで気づいて止まり、再承認(15:0xZ)を経て #806 を含めて配布した。手順の上の確認で気づいたのではない#815
見落とし リリース後テストで、マージ前に踏めなかった経路が 2 つ見つかった。(1) codex と claude のテキスト出力の利用上限の文言を監視が読まず、同じラウンドで起動し直す(#811。要求の時点で集めた文言が kiro と claude の JSON だけだった)。(2) PATH に読めないディレクトリがあると initPermissionError で落ちる(#813。テストの PATH は素直で、利用者の実際の PATH で初めて踏んだ)
範囲 他のマイルストーン(06)の子 issue(#461 ほか)は範囲外のまま再現だけ確かめ、#461 に 10.16.0 でも現象が残ることを記録した。cross-refactoring に既定の母集合に無い agy--exclude で渡すと終了コード 4 で弾かれるが、確定仕様どおり(名前の矛盾を弾き、メッセージが母集合を示す)のため起票しない
工程 飛ばした工程は無い。リリース後テストは不合格 3・保留 1 で、#478 #619 #729 は不合格の条件を持つため開いたまま、#728 は未検証の条件を #814 へ移して閉じる

context window の大きさ

conductor のセッション 2 件(まとまり全体)を /ndf:skill-stats --agents で測った。

持ち場 モデル 件数 固定費の中央値 実作業の中央値 実作業 < 固定費 最大充填の最大
conductor - claude-fable-5-1 1 39856 535868 0 575724 割る候補
conductor - claude-opus-5 1 56508 265189 0 321697 割る候補
supervisor 設計 claude-fable-5-1 4 42672 349024 0 510467 割る候補
supervisor 設計 claude-opus-5 1 43774 355874 0 399648 割る候補
supervisor 実装 claude-fable-5-1 2 42616 215134 0 283031 割る候補
supervisor 実装 claude-opus-5 5 43501 343723 0 471682 割る候補
supervisor 検査 claude-fable-5-1 1 43232 290548 0 333780 割る候補
supervisor 検査 claude-opus-5 6 43206 190838 0 273172 割る候補
supervisor 取り込み claude-opus-5 4 44555 183318 0 254634 割る候補
supervisor 仕上げ claude-opus-5 1 45431 180088 0 225519 割る候補
supervisor その他 claude-haiku-4-5-20251001 4 11540 18054 1 59065
supervisor その他 claude-opus-5 8 19410 23788 3 72299
worker 調査 claude-opus-5 3 41104 182284 0 226100 割る候補
worker 調査 claude-sonnet-5 3 45767 103723 0 176241
worker 修正 claude-fable-5-1 17 41483 89395 5 251622 割る候補
worker 修正 claude-opus-5 28 41665 36704 16 246498 割る候補
worker 修正 claude-sonnet-5 1 45527 15166 1 60693
worker 検証 claude-fable-5-1 2 41191 57508 1 124877
worker 検証 claude-opus-5 6 42217 47983 3 160552
worker その他 claude-fable-5-1 2 42919 131349 0 217661 割る候補
件数 固定費の合計 実作業の合計 総消費
conductor 2 96364 801057 897421
supervisor 36 1317573 6469364 7786937
worker 63 2655755 5195129 7850884
合計 101 4069692 12465550 16535242
持ち場 supervisor supervisor の実作業 worker の件数 supervisor と worker の固定費の合計
設計 1 309470 1 83269
設計 2 467782 5 254032
設計 4 388579 3 171769
設計 5 355874 9 422228 worker を使いすぎ
実装 1 240433 3 170067
実装 2 189836 2 128967
実装 3 295177 3 177094
実装 4 406166 1 85336
実装 6 427953 1 84833
実装 7 343723 1 88989
検査 1 290548 2 129510
検査 2 195336 2 123854
検査 3 229995 4 205999
検査 4 186339 1 84202
検査 5 140047 2 125437
検査 6 163253 2 129787
検査 7 211012 1 88192
取り込み 1 171045 2 124855
取り込み 2 167860 3 167114
取り込み 3 209352 2 130127
取り込み 4 195591 3 176762
仕上げ 1 180088 3 176246

次に変えること

変えること 落とし先 状態
本番への配布の承認に承認するコミット(develop の先端の SHA)を書き、main へ入れる直前に比べる release の手順と approval-request.md #815 として起票
監視の文言を足すときは、各 CLI の実物の記録から文言を集めてテストの入力にする #811 の直し方(次の変更で試すこと) #811 へ追記
検査の持ち場の cross-refactoring--max-outer-rounds 2 で回し、取り消しと所要を比べる 次の変更で試すこと #816 として起票
設計の関門でタイトルと文書を書き直した原因(目的が読めない・規約を読まずに書く)を工程で塞ぐ design / document-restructuring の手順 #785 #788 として起票済み
プロセスの終了からの再開: 変えない 実行計画・issue の ## 進行・PR の状態から到達点を復元でき、失ったのは /tmp の一時物だけだった

途中で起票した課題

番号 何を見つけたか 見つけた場面
#780 parallel-measure capacity が予備の二重計上とスワップの残量判定の重なりで並列数を 1 に固定する 着手時の本数の測定
#785 設計 PR と設計文書のタイトルから目的が読めない 設計の関門
#788 規約を通したと記録されても、識別子だらけの見出しと未実施の再構成がレビューを通り抜ける 設計の関門
#789 共通層のモジュールを登録せずに読む 2 つのテストが dataclass で落ちる G3 の実装
#792 中断から再開すると前のラウンドの未着手の群を飛ばす G3 の検査
#799 CLAUDE.md の cross-refactoring の節が手順書と違う形で書く G1 P7 の実装
#802 agy が結果にレビューの URL を書かないと、届いた承認が結果なしになる G1 P7 の検査
#804 ホストが agy / kiro のときラウンド 1 の適用担当がホストになるのに、手順書は違う 確定仕様化
#811 監視が codex と claude のテキスト出力の利用上限の文言を読まない リリース後テスト
#813 PATH に読めないディレクトリがあると initPermissionError で落ちる リリース後テスト
#814 未検証: 適用ラウンドの結果なしの理由と監視の結果の一致 リリース後テスト

This was referenced Sep 22, 2026
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