Repository navigation
Release: ndf v10.27.1 を main へ - #2267
Conversation
承認の証跡を読む lib/gate_answer.py を足した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
release-steps.py approve に --facts-from / --answer-from を足し、開発版の facts の出力の SHA と 承認ゲート 2 の利用者の承認の記録を照らしてから書く。new release に --dev-state と --state を足した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
queue が <done>.plans.json へステージの並び・--max・開始のステップを書き、--resume がそれを読む。
{queue_pr:<名>} は関門で終えたプランの Pull Request からも埋める。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 設計 PR のマージのステージ(design-merge-<N>。approved → merge-gate → merge)を置き、設計の結果から配布までを その command の --then でつなぐ。承認の証跡は supervise.py design-approved が確かめる - 目録の command に --done を書き、resume を queue --resume <done> の 1 つにそろえる - new sprint --absorb <課題>:<取り込み先> を足し、組み立ての後に 1 か所で当てる。design-results は書き出しの取り込みを保つ - 承認ゲート 1・2 の文を承認の証跡の記録とキューの形に書き直す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#1426) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…いに合わせる(#1426) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#1426 を実装する(スプリント m1426)
- WEB_TOOLS(WebFetch・WebSearch)を WORK_TOOLS と FULL_TOOLS の両方へ足す - 取得できなかったら URL と理由を書いて「判断が要る」で終える取り決め(EXTERNAL_DOC_RULE)を WORK_SYSTEM と FULL_SYSTEM へ入れる - full のステップの起こし直しは、報告が「判断が要る / できなかった」なら行わずに失敗にする 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_01KYHP7xovpASsGTBrUNrZQL
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Docs: #2171 の契約と進捗の受け口を確定仕様にする
容量の宣言が無いとき、candidates_of は先頭から max_issues 件を候補にしていた。 棚卸しの順位の上位が人の判断待ちだと、その後ろの課題が候補に上がらず outside_mvv で止まっていた(ループ l20261031 の 1 周目)。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP7yNPSvFoLre7peyGvL
#1698 を実装する(スプリント m1426)
…意し、psutil の無い python3 でも進む(#1455) call_llm_json が supervise_lib.claude を読む前に require を呼ぶ。decl_models も pydantic を読む前に schema を宣言する。 psutil の無い python(-S)で propose / vet が起動し直して LLM を呼び、check / collect は起動し直さないことをテストで縛る。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix: 開発ループの選定で判断待ちの行が枠を埋めない
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
承認ゲートの外の AskUserQuestion を hook で止める課題の受け入れ条件(AC1〜AC15)を課題の本文へ書き、 写しを issues/ に置く。共通原則の C1〜C8・P1 に当たる問いは宣言で外せない区分にする(起票者の推定 S4 の一部を採らない)。 用語集へ「問い合わせの区分」「問い合わせの宣言」「代わりの判断」を足す。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…quest と照らす) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
広げた require-groups が落とす 18 本は、既に require を呼ぶ位置へグループを並べて直す(設計の決定 4 の形 1)。 引数・出力・終了コードは変わらない。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1455) require の覆う範囲(最上位・関数の中・main の先頭)と任意の依存(except ImportError・find_spec / importable の枝)を見る。 hook の経路は hook-deps に任せる。require を呼ばない 11 本・21 件は理由つきで例外リストへ載せる。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AskUserQuestion の metadata.source を区分として hook が判定し、区分の無い問いを止めて AI に決めさせる設計を issues/ に置く。 判定は lib/ask_policy.py の純粋な関数にして relay の question open と共有し、記録は状態の置き場の ask.jsonl 1 本にする。 レッドラインは ndf-ask:redline:<番号> の外せない区分にし、hook で止めるのは Claude Code だけにする(Codex・agy は未確認)。 Skill とエージェントの問い合わせの書き換えの一覧(43 行)は別のファイルに分けた。用語集の 2 語の意味を直し「問い合わせの記録」を足す。 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_01KYHP7ymCP9NzVoq8gEeSWp
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 設計文書を 3 本に分けた(本体・入出力の契約とテスト設計・決定の記録。計 680 行前後) - #2216 の照合は実行ジョブの token に repo を載せて受け口で照らす形にした - AI が代わりに判断した問いと答えは新しい種類 decision.delegated で送る - 打ち切りの時間は過去 7 本のスプリントの実測(最大 18,031 秒)から 8 時間、token の期限は 9 時間 - 用語集へ 4 語(実行の枠・見回り・代わりの判断・候補の証明)を足した Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wer.py#GATE_1 承認ゲートの記録の名前「関門 1」「関門 2」を gate_answer.GATE_1 / GATE_2 に置き、 release_lib/approval.py・supervise_lib/design_merge.py・sprint.py・release_templates.py・ sprint_waves.py・sprint_routes.py・mvv-gate.py の文字列をこの定数へ置き換える。 design_merge.py の GATE_1 の定義は消し、gate_answer から読み込む。値は変えない。 Item-Id: I-003 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2186 を実装する(スプリント l20261031-2)
#2206 を実装する(スプリント l20261031-2)
…y#main main の副命令ごとの if 連鎖を、副命令 → 処理の対応表(COMMANDS)へ寄せた。 引数の定義は build_parser(sub) へ切り出し、表に乗らない前処理を持つ new・queue・wait・example は 個別のハンドラ(_cmd_*)へ抽出した。振る舞いは変えていない。 Item-Id: I-004 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
手順のスクリプトの結果: 欠け・未収束・未記録を ok と読ませず、過程と判断を同じ形で残す(#2227)
- design_merge: gh のラベルを JSON の配列として読み、design-approved と完全一致する要素だけを承認の証跡にする - queue_resume: done がある場合も前の起動の starts を保ち、完了済みプランが元の関門の結果を拾わないようにする Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--dev-state を省いた単発の new release --channel prod では {queue_state:release} が開発版のプランに
一致せず、queue は --facts-from '' で exit 2、run は置き換わらない文字列のまま必ず止まっていた。
空の --facts-from も facts の経路で扱い、資料に一致する承認の記録が既にあれば書かずに通す(#1426 の決定 7)。
無ければ --dev-state を渡す手を next に示して承認ゲート(10)で返す。空の置き場は作業場所を読まない。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- NDF の導入名を取得元の marketplace.json の name から決め、導入コマンドの失敗で止める。スクリプトは版を固定した写しから読む - 子の環境から INGEST_TOKEN を外す - AWS ロールの資格を credential_process のファイルで渡し、動いている間 30 分ごとに引き受け直す - 代わりの判断を ask_ledger.py の ask.jsonl(kind: decision)から読む - resume では復元したログの末尾から読み、前のジョブの行を送り直さない - supervise のステップの行にモデルごとの使用量を足し、usage.recorded へ取り込む - 棚卸しの順位の表を upkeep_rank_table.py の形で読み、題を GitHub から引く - 導入とリポジトリの一覧を最後のページまで読む - チームの月の token を席の利用者の分だけ数え、開始 1 回に 1 度だけ数える - ECS の STOPPING / DEPROVISIONING を停止完了と扱わない Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 続ける対象(前の結果か --from)は、同じ開始のステップでも関門で終えた記録を終わりとせず流し直す - --absorb の取り込み先が --issue に無ければ(実装のプランが無い)計画を書かない Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
script-structure-check の失敗(502 行)を直す。step_line の任意のキー(pr・out・models)を 1 行へまとめた。出力は変わらない。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ランナーが読む GET /run-jobs/approval-requests/{id}/answer を runs.yaml と確定仕様に書き、sprint.json は復元した状態から求める
- リポジトリの画面は実行の一覧を 1 回だけ取り、リポジトリごとに分ける
- GitHub の読み取りは登録の repositoryId に絞った導入の token を使い回し、全リポジトリへ届く token を作らない
- decision.delegated の category を ref の判定の行の source から埋める
- 順位の表から作る候補も MAX_ISSUES で切る
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- release_lib: 再開で NN が 01 に戻るため、最後に書かれた出力を last_out で 1 つ選び、 approve_from_facts は SHA と時刻をその出力から読む - design_stage.rewrite: --absorb 由来の取り込み先が設計の結果で閉じる・取り込まれるなら書き換え前に止める Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 承認の答えはスプリント状態ファイル(目録の sprint.json と形で見分ける)へ「関門 1 / 関門 2」の名前で書き、差し戻しは理由とともに conductor の再開の指示へ渡す - step 行の pr から Pull Request の参照を取る - local では利用者が手元で設定したモデルの資格を子へ渡す - ジョブの確定は実行と枠を先に移し、ジョブを終わりにするのを最後にして、途中で止まっても見回りがやり直せるようにする Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
スプリント m1426
- StateRejectedError の parameter property を通常のフィールドへ変え、Node 24 で直接動かせるようにする。tsconfig に erasableSyntaxOnly を足す - conductor の claude -p に supervise_lib/claude.py と同じ Tool の許可を付ける - gh と git の認証をジョブ専用の置き場(GH_CONFIG_DIR・GIT_CONFIG_GLOBAL)へ分け、利用者の設定を書き換えない - NDF の worktree をジョブの作業場所の下へ置き、代わりの判断はこのジョブの cwd の行だけを送る - managed の月間上限は managed の実行だけを数える - conductor の使用量の送信と実行中の poll を待ってから返す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Release: ndf v10.27.0-dev.1
# Conflicts: # plugins/ndf/skills/development-workflow/references/waiting.md
スプリント l20261031-2
Release: ndf v10.27.1-dev.1
Release: ndf v10.27.1
振り返り(2026-10-31)対象: スプリント l20261031-2(周回 2)。issue #2206 / issue #2186 / issue #2216。スプリントの PR は PR #2250、正式版への配布は PR #2267(ndf v10.27.1。m1426 の分と一緒に出した)、確定仕様化は PR #2271。 ここでは 3 つを作った。承認ゲートの外の問い合わせを hook で止めて AI に判断させる仕組み(#2206)、NDF Factory のスプリントの実行の制御とランナー(#2186)、ランナーが申告する Pull Request を実行のリポジトリと照合する仕組み(#2216 の決定 1〜5)である。進め方は 何が起きたか
検査の記録と閾値
PR ごとの指摘の件数(マージに至った回)は次のとおりである。
トリガーの閾値( 見直しが要るのは、トリガーの閾値ではなく構造改善の予算である。 落ちた 14 回のうち 10 回は refactor が予算に収まらなかったもので、同じ形の失敗が 4 本の PR(#2152・#2192・#2247・#2250)で繰り返されている。#2250 では着手前のテストだけで 663.8 秒かかった。既存の #2202(予算を「実装に使える時間」で指定し、固定でかかる時間を実測から足す)と #2047 がこれを扱う。繰り返しの回数を根拠に、棚卸しで順位を上げる(Value 10)。 逃げた不具合 0 件は、検査が見逃さなかった証拠にならない。 #2216 の決定 6〜12 の欠けは検査の後で見つかった。しかし「不具合」ではなく「実装されなかった受け入れ条件」なので、 context window の大きさ測定は conductor のセッション 1 つ。supervise.py が起動した
承認ゲートの差し戻し
ただし記録が欠けている。 引き継ぎ文書には「#2233 は差し戻しの後に書き直した」とあるが、どの状態ファイルにも差し戻しの記録が無い。実際の件数は関門 1 で少なくとも 1 件(#2233 の設計)である。既存の #2183(差し戻しの記録し忘れに気づけず、振り返りの件数が 0 になる)と同じ形で、このスプリントを由来として 1 行足した。 MVV を見直すか
閾値を超えた兆候が無いため、見直さないと AI が決め、 次に変えること
途中で起票した課題
|
ndf v10.27.1 を main へ出す(開発版の PR #2266)。
🤖 Generated with Claude Code