Repository navigation
Release: ndf v10.27.18 を main へ - #2522
Conversation
用語集へ「再開のジョブ」を足した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
持ち主の記録・後片付け・並行の排他・再開の入口(柱 P3)の受け入れ条件を、 課題の本文から spec-copy.py で写した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
上限と再試行の方針を 1 つの宣言に集める柱(P4)の要求を課題の本文に書き、 spec-copy.py で写しを作った。本文で使う語(方針の名前・原因の鍵・再試行・ ステップの打ち直し)を用語集へ足した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
設計のプランで cross-review が上限到達で終わったときの行き先を、未解決の件数と駆動の失敗で分ける要求。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NDF に予算だけを反映する副命令 loop budget を足し、ランナーが再開のジョブで conductor を起こす前に打つ。サービスは再開のジョブにも LOOP_BUDGET を載せる。 用語集へ「予算の反映」を足した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
設計のプランのレビューのステップで終了コード 6 を新しい review-settled のステップへ回し、 実行の記録の未解決の件数が 0 件なら通常の経路へ、残るか読めなければ承認ゲート 1 の判断へ進める。 実行器と cross-review の終了コードの契約は変えない。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 章の順を設計のテンプレートに合わせ、入出力の契約を処理の流れの前へ移した - 結果 JSON の項目を表へ移し、100 字を超える文を分けた - 決定の根拠の Value 番号に題を添えた Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 不変条件 I1 を I1a・I1b、I4 を I4a・I4b・I4c に分け、テスト設計の行と 1 対 1 で対応させる - ループの記録が持つ語として「予算の履歴」と「人の判断待ちの行」を開発ワークフローのコンテキストへ足す。 着手の前の状態を指す「人の判断待ち」と分けるため、設計ではループの記録の行を「人の判断待ちの行」と呼ぶ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
柱 P3 の設計文書を、本体・データ構造と入出力の契約・決定の記録の 3 本で足した。 持ち主の単位(実行・セッション)、前提 3 の入口の鍵と使用中のときの扱い、 打ち切りで止めるプロセスの範囲、再開の入口と旧い形の寄せ方、状態の一覧に足す行、 子の課題 18 件の判定を決めた。新しい語 5 つと「持ち主の記録」の意味の変更を用語集へ反映した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
上限と再試行の方針を 1 つの宣言(plugins/ndf/contracts/limits.json)に集め、 同じ原因の打ち直しを宣言の回数で止め、待ちが上限の時刻に最後の照会を打つ 設計を書いた。構造チェックに limit-literal と sleep-loop を足し、移す数字 104 か所を 3 本の Pull Request で移す。要求の未決 1〜5 の答えは決定の記録に 置いた。設計で使う語(眠りのループ・最後の照会)を用語集へ足した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
normal で --state が無いプランは mvv を流さず、助言の mvv は判定の結果によらず mvv-note から承認ゲート 1 の判断へ戻ることを、不変条件 I1 とイベント E6 に書く。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
内容は足さず、文の区切りと表・コードブロックへの置き換えだけを行った。 平均文長: 本体 38.1→30.6 字、契約 37.4→33.5 字、決定の記録 49.4→39.8 字。 最長文: 162→90 字、115→87 字、125→90 字。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- あるべき姿の根拠の「数え方」の 1 文(242 字)を表へ移した - 構成要素と構造に小見出しを入れ、Waited に足す値を箇条書きへ分けた - 決定の記録の 100 字を超える文を分け、3 本の Pull Request の中身を表へ移した - 決定の根拠の Value 番号に MVV の題を添えた Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
I9・最後の照会・seconds の意味・retry_call / wait_until の止まる条件と 受け入れ条件 6 の検査を、眠りの合計ではなく開始の単調時計の値 + seconds の 期限から残りの秒を計算する契約にそろえる。時計を差し替える clock 引数を足す。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 継承(inherited)を実行の識別子の一致ではなく、持ち主のプロセスが祖先かどうかで決める。再開した実行が生きた前の実行と同時に持たないようにする - 返せるのは記録の持ち主のプロセスと同じ実行(session では同じランタイムのセッション)にし、子が新しく取った鍵は子が返す - 結び付いた状態は、結び付く鍵の記録がすべて終わっているときだけ、鍵の排他の中で外す - 30 日を過ぎた持ち主の記録の削除を持ち主の部品の lease.prune に置く - 集約名を「持ち主の契約」に改め、寿命の窓の意味と置き場(window_seconds)を用語集と契約に書く Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 死んだ持ち主を取り直す経路で、自分の鍵の排他を外してから結び付く鍵すべてを名前の順に取り直す - release と touch は実行の識別子でなく持ち主のプロセスで照合する - 配置の図を祖先のプロセスによる継承に揃える - 見直しの持ち主の寿命の窓を契約の 900 秒に固定し、同じホストで窓を使わない振る舞いを決定 15 に書く Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 契約の前提 3 で upkeep.py owner release に release: true を付け、決定 15 を合わせる - 止まったときの案内から kill を外し、pid を添えて人へ戻す形にする - depths.owner.ttl を設定・確定仕様から外す移行と、apply の判定を持ち主の部品へ移すことを書く - 取得の図の reclaimed を分岐に分け、排他の順序の規則を両立する文に直す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 題を 64 字から 54 字にした(目安 60 字) - 「normal と --state」を「--state 付きの normal」へ。新しい副命令の引数 --state と取り違えないため - 決定 3 の normal の変化を、不変条件 I1 と経路の表にそろえた(直しの取り込みから用語チェックまでが流れる) - 契約テストの見本のパスを、設計の結果の「触るファイル」と同じ起点から書いた Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Release: ndf v10.27.16
- 176 字・111 字・98 字の文を分け、図に描かない要素の列挙を表へ移した - 決定の記録で連鎖した 5 文を分けた - 「前提 3 の入口」を「持ち主の鍵を宣言する入口」へ置き換えた - 内容は足していない Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 決定 1・決定 3 の 85 字の文を 2 文に分けた - 構成要素の図を表の直後へ移し、確定仕様の書き直しの注記を章の末尾へ置いた - コンテキストの関係の文から重なった括弧書きを外した Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
設計のプラン: 上限で終わった cross-review も、未解決 0 件なら MVV 判定へ進める(#2388)
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>
- 30 日後の削除は記録の .json だけにし、錠の .lock は locks.py の規則どおり残す - 単位 session でランタイムのセッションが見つからないときは no_session・stopped 1 で止める - 生きた持ち主がいるときは例外でなく refused の戻り値で返し、持ち主の 3 項目を核が結果 JSON へ写す - acquire は毎回 psutil を読む(自分の開始時刻を書き、祖先をたどるため)。69 の時点と性能の見積もりを揃える Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 鍵を取る副命令だけを no_session で止め、loop stop・loop finish は本体を走らせ、読むだけの副命令は持ち主の段を通らない - NDF_RUNTIME_SESSION と NDF_STATE_DIR を自動の fixture で与え、サブプロセスのテストが CI で no_session にならないことをテスト設計に足す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NDF Factory: 画面で行える操作を、委任を受けたエージェントが API と MCP から同じ認可と記録のもとで行える(#2384)
NDF のスクリプト: 見送ったリファクタリングの提案 24 件を判定し、長い関数と重複を減らす(#2422)
Update: ループの予算の周回と時間を実質無制限にする(#2505 までのつなぎ)
Fix: 中継の下のシェルの環境変数をテストが受け継がないようにする
画面の地図: 予定の画面ごとに、その画面を作る課題が分かる(#2431)
docs/glossary/glossary.json の衝突は base-sync で両側の追加項目を残して解いた。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYHP82YBP3K8vVBou7sEBN
- 使用量の行の組み立てを context_decisions.usage_call へ寄せ、read_calls と ledger_calls から使う(行 1・15) - read_calls から自動圧縮・最初の発言・呼び出しの登録を抜き出す(行 16) - 時刻の読み取りを clock.epoch へ寄せる(行 6)。正の整数の判定を context_policy.positive_int にする(行 17) - session_parts と report_work から区間・サブエージェント・帳簿・合算・数え上げを抜き出す(行 2・3) - 記録の行の組み立てを context_decisions.record_row へ寄せ、cmd_record と record_restart で共有する(行 21) - token_guard の試行方式の句を既存の定数で比べ、計画の案内の git の根を context_decisions.toplevel で取る(行 5・10) - 作業の報告・呼び出し・記録の行の現状固定テストを足す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- upkeep_research: 時刻の読み取りを clock.epoch へ寄せ、run_research から持ち主の印と空きの待ちを抜き出す(行 6・7) - upkeep_depth: 「その深さを実行した」行の判定と最後の位置を 1 か所にし、diffs_since と _due_overhaul から使う(行 11) - upkeep_overhaul: count_types を型・部品・月ごとの数え上げに分ける。戻す辞書のキーと順は保つ(行 19) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- run_selection から、選べる課題が無いときの止まり方と、周回の行を作って記録する部分を抜き出す(行 18) - 直しの周回の印の現状固定テストを足す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NDF のスクリプト: 呼び手の無い関数を片付け、子の課題 17 件の解消を確かめて閉じる(#2369)
- aggregate_by_project から、利用者の発言 1 件のトリガーとヒットの数え上げを抜き出す(行 4。深さ 5 → 3) - 一緒に渡る 6 つの値を AgentReport にまとめ、emit_json と emit_markdown が受ける(行 14) - 数え上げと結果 JSON のキーの順の現状固定テストを足す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
read_codex から、記録 1 本を 1 行ずつ読む部分と、呼び出しごとの値から使用量を組む部分を抜き出す(行 12)。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- clock.epoch を clock.epoch_seconds にする(lib/claude_usage.py の epoch と名前が衝突した) - context_policy.positive_int を is_positive_int にする(supervise_lib/new_args.py と名前が衝突した) - context_decisions.parse_ts を clock.epoch_seconds の別名にし、upkeep_research の _iso_epoch を消す(本体が同じだった) - read_calls と usage_call・record_row を詰め、context_decisions.py を 500 行に収める Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2422 を実装する(スプリント lflow2-5)
…resolve_policy 方針名の重ね合わせ(既定 < config < env < CLI と無視した環境変数)を _resolve_policy_name へ、 判断開始・運用上限・余白とその出所の重ね合わせを _resolve_thresholds へ抜き出す。 resolve_policy には環境変数と設定の読込み、sources の結合、AppliedPolicy の生成だけを残す。 sources のキーの順序・設定が空でないときの config の記録・current 時の margin・無効値の無視は変えない。 Item-Id: I-001 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pts/upkeep_research.py#research_items needs.usage の行を使える行と飛ばした側面に分ける部分を _usage_rows へ、 宣言の無い側面を補う末尾のループを _undeclared へ抜き出した。 research_items は抽出した 2 つと項目の追加だけを並べる形になる。項目と飛ばした側面の順は変えていない。 Item-Id: I-002 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…kill-stats.py#agent_report agent_report が argparse の Namespace に args.limit_meta を書き込み、emit_json がそれを読んでいた隠れた依存をなくす。 AgentReport に limit_meta を加えて上限のメタデータを戻り値で返し(--agents 無効時は空の dict)、emit_json は report.limit_meta を使う。 Item-Id: I-003 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pts/upkeep_research.py#research_one 上限内か・出典があるかの合否の式を accepted として 1 回だけ計算し、 log_call へ渡す値と、記録を書かずに戻る分岐の両方でそれを使う。 否定形の式は元の式のド・モルガン変形で、振る舞いは変わらない。 Item-Id: I-004 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#calibrate 較正の節(_median_of・_mark_times・_restore_sample・_handoff_sample・_stage_segments・ calibrate・calibrate_repo と CACHE_1H)を lib/context_calibrate.py へ移した。 会話の記録の全体を読む較正と、hook が使う記録の追記・小さな JSON の読み書きを別の モジュールに分ける。record_restart は循環を避けて関数の中で context_calibrate を読む。 context-policy.py の cmd_calibrate とテストの参照先を新しいモジュールへ変えた。 Item-Id: I-005 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
スプリント lflow2-5
Release: ndf v10.27.18-dev.1
振り返り(2026-11-05)対象: issue #2422 / 設計 PR #2499 / 実装 PR #2511 / スプリント PR #2513 / 配布 PR #2521・PR #2522(ndf v10.27.18) 開発ループ lflow2 の周回 5(スプリント lflow2-5)は、#2422 を 1 件だけ進めた。#2422 は、前のスプリント lflow-1 の検査でクロスリファクタリングが時間の予算に入れず見送った改善の提案 24 件を、改修するか採らないかに分け、改修する行で長い関数と重複を減らす課題である。 判定は改修 17 件・採らない 7 件で、採らない 7 件にはすべて理由がある。公開インタフェース(コマンドの引数・終了コード・結果 JSON・契約)は変えていない。2026-11-05 10:12 JST に v10.27.18 として本番へ配布した。 何が起きたか
リリース後テストが保留にした 1 行(追加した現状固定テスト 3 件が、既存のテストと同じことを二重に確かめているか)は、テストを減らさない。3 件は改修の前のコードで通ることを確かめた現状固定テストで、改修の前後の振る舞いをそろえる根拠になっている。重なりを減らす効果は測っておらず、Value 4(測らずに良くなったとは言わない)に照らして、今は手を入れない。 検査のトリガーと閾値検査のトリガーの集計(
このスプリントの検査(PR #2513)は 1 回目でマージし、件数はリファクタリングの採用 5・取り消し 1・見送り 28、コードレビューの指摘 1・修正 1・未解決 0 だった。 閾値は見直さない。 理由は 2 つある。
落ちた検査 37 件はトリガーの閾値ではなく検査の工程そのものの結果で、同じ Pull Request を指す検査が落ちてから再び流してマージに至った行を含む。どの段で落ちたかの内訳は集計に無く、未確認である。 context window の大きさ測定は
目印(束ねる候補・割る候補・worker を使いすぎ)の付いた行は無い。そのままにする。 用語集の変化
設計 PR #2499 のマージの前後で取った。スプリントの PR #2513 の前後では変化は無い。 承認ゲートの差し戻し
MVV を見直すか
覆しが閾値に届いたため、AI はこの判断を自分で決めず、利用者へ戻す。 MVV の改訂は利用者の承認で成立する(共通原則 C7)。 判断の材料として、6 件の中身を記録(
材料から読めることは次のとおりである。5 件では、AI は「決められないときは人へ戻す」(Value 2)に従って止まり、人が決めた。AI の判断が MVV の向きと食い違ったのではない。この読みが正しければ、直す対象は MVV の文面ではなく、覆しの数え方(未決を人へ戻したうえでの承認も覆しに数えている点)になる。ただしこれは AI の読みであり、改訂するかは利用者が決める。
推奨は「MVV を改訂せず、覆しの数え方を見直す」である。理由は、6 件のうち 5 件は MVV が人へ戻すと定める場面で、AI がそのとおりに止まった記録だからである。 次に変えること
途中で起票した課題無し。 |
ndf v10.27.18 を main へ出す(開発版の PR #2521)。
🤖 Generated with Claude Code