Skip to content

Release: ndf v10.27.16 - #2488

Merged
takemi-ohama merged 2 commits into
developfrom
release/v10.27.16
Nov 4, 2026
Merged

takemi-ohama merged 2 commits into
developfrom
release/v10.27.16

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

ndf v10.27.16 のリリース(prod)。対象の plugin: ndf

含む PR

移行の手順

チェックの結果

  • check-doc-staleness: pass(documented skill counts and versions are up to date)
  • validate-runtime-plugins: pass(runtime plugin validation passed)

🤖 Generated with Claude Code

@takemi-ohama
takemi-ohama merged commit 62553bd into develop Nov 4, 2026
23 checks passed
@takemi-ohama
takemi-ohama deleted the release/v10.27.16 branch November 4, 2026 14:21
@takemi-ohama
takemi-ohama restored the release/v10.27.16 branch November 4, 2026 14:21
@takemi-ohama
takemi-ohama deleted the release/v10.27.16 branch November 4, 2026 14:24
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

配布の記録

段階: 本番(承認ゲート 2 の承認の後、2026-11-04 23:24 に ndf--v10.27.16 を出した)
版: 10.27.15 → 10.27.16(タグ ndf--v10.27.16。直前はタグ ndf--v10.27.15)
スプリント: PR #2471 / #2472 / #2473 / #2476 / #2483 / #2484 / #2485

@takemi-ohama

Copy link
Copy Markdown
Contributor Author

リリース後テスト

対象の版: 10.27.16(2026-11-04 23:24 JST に ndf--v10.27.16 を出した)
対象の環境: 本番(正式版のチャネル main、d73ac29c)
導入経路: 利用者と同じく、隔離した HOME で main から claude plugin marketplace add devbasex/ai-plugins → claude plugin install ndf@ai-plugins、codex plugin marketplace add devbasex/ai-plugins → codex plugin add ndf@ai-plugins。Factory はタグ ndf--v10.27.16 のコードを作業ツリーへ取り出して npm ci から検査した(Factory の本番の系へ反映した先には、この実行から触れていない)

課題 受け入れ条件 実行したこと 実行時刻 結果
— 導入の確認: 利用者と同じ手順で入れ直し、版と中身が main と一致する release-verification-steps.py verify-install --ref main --expect 10.27.16 --plugins ndf --runtimes claude,codex 2026-11-04 23:52 合格 / exit=0。claude・codex とも ndf 10.27.16、中身の食い違い 0、利用者の HOME の設定は変わらない
— Factory の検査一式(タグのコード) factory/ で npm ci && npm run check 2026-11-04 23:52 合格 / exit=0。contracts 52・web 94・api 407・runner 59 件が通過
#2439 1. 並行する 2 本以上が承認ゲート 2 に達しても、本番の Pull Request は 1 本で、範囲の実行は同じ Pull Request と版を持つ npm run check の api/src/organizer/control.test.ts「同じリポジトリの 2 本の依頼で、まとめた配布 1 つ・配布の実行 1 本・本番の Pull Request 1 本になり…」 2026-11-04 23:52 合格(テスト。実環境の 2 本は下の手動確認の行で保留)
#2439 2. 流れている配布が無ければ待たずに範囲を決め承認の依頼を作る。1 本だけでも同じ経路 同 control.test.ts「配布のまとめ(受け入れ条件 1・2・3・5・6)」の 6 件 2026-11-04 23:52 合格
#2439 3. 範囲は承認資料を作る時点の develop の先頭(main..<SHA>)で決まり、依頼の有無の印つきで並ぶ 同「配布のまとめ」の 6 件 2026-11-04 23:52 合格
#2439 4. 答えの時点で develop が進んでいれば 1 回だけ出し直し、出し直しへの答えでは比べない 同「答えと出し直し」の「提示 1 への承認で develop が進んでいれば represent、提示 2 への答えでは develop を読まずに confirm:2」ほか 6 件 2026-11-04 23:52 合格
#2439 5. 流れている間の依頼と develop の変更は次の配布になり、同時に流れる配布は 1 本まで 同「流れている間に届いた依頼は、配布済みの後に次のまとめた配布になる」「同時の 2 つの tick で組まれるのは 1 つ」 2026-11-04 23:52 合格
#2439 6. 本番の配布は配布専用の実行ジョブで流れ、同時に 1 本まで 同「配布の実行は実行の枠を持たない」「組む書き込みが落ちれば…配布の実行も無い」、runner/src/organizer.test.ts「配布の依頼と配布の実行のジョブ」 2026-11-04 23:52 合格
#2439 7. 承認待ちの間も、範囲の実行は答えを待たずに次の周回へ進める control.test.ts「手動の実行は依頼の後 awaiting_approval…」、runner/src/organizer.test.ts「手動の実行が配布の依頼を出すと…gate(release_requested)で終える」 2026-11-04 23:52 合格(手動の実行の側。ループの実行が done で終わる側はマージ前の未検証の行を参照)
#2439 8. Factory の外の本番の Pull Request が開いている間は組まずに待ち、理由を残し、閉じた後の見回りで組む control.test.ts「待ち(受け入れ条件 8)」の 6 件 2026-11-04 23:52 合格
#2439 9. 承認ゲート 1 の依頼と判断の問いが、リポジトリごとに 1 つの一覧として API から取れ、答えは持ち主の実行へ届く control.test.ts「一覧と履歴(受け入れ条件 9・11)」、routes/factory.test.ts(承認の依頼の一覧の経路・他人は 403) 2026-11-04 23:52 合格
#2439 10. Factory の実行の中では parallel.py init・run が断る。配布の依頼を契約の形で出し、ランナーが進捗の事象へ写す 導入済みの 10.27.16 で NDF_FACTORY_RUN=1 python3 parallel.py init rvtest と … run rvtest(空のリポジトリで)。test_parallel_external.py・test_parallel_run.py(タグ)、runner/src/organizer.test.ts「置き場の翻訳」 2026-11-04 23:53〜23:54 合格 / init・run とも exit=1、status: stopped「サービスの実行ジョブの中では並列の計画を起動しない」、.ndf/ を作らない。pytest 89 件通過
#2439 11. 承認ゲートの承認は人だけが確定でき、API からは読めるが確定できない factory/api/src/routes/factory.ts の経路を読んだ: 承認の依頼は GET …/approval-requests だけで、確定する経路が無い。止まった配布の POST …/releases/:seq/resolve は続き・差し戻しだけ 2026-11-04 23:55 合格(経路の読み取り。MCP は Factory にまだ無い)
#2439 12. 途中で止まっても次の見回りが続きから再開し、答えは 1 回、同じ範囲で本番の Pull Request は 2 本にならない control.test.ts「止まった配布と再開(受け入れ条件 12・13)」の 11 件 2026-11-04 23:52 合格
#2439 13. main へのマージの後に止まった配布は「続きから流す」だけを出す 同「…main のマージの後は continue だけで、差し戻しは 409」「main へのマージの後に取り消された配布の実行は…続きから流せる」 2026-11-04 23:52 合格
#2439 14. 手元の受け手に「ランナー」と別の語が付き、手元のランナー は廃止した語で glossary.py check が拾い、確定仕様・説明文・画面に残らない タグで glossary.py check --root .、grep -rn 手元のランナー(用語集・factory/web/src/i18n/・factory/README.md・docs/specifications/ndf-factory*) 2026-11-04 23:53 合格 / exit=0・当たり 0。新しい語は「手元のマシン」で、手元のランナー は用語集の廃止した語の欄にだけある
#2439 15. 契約の種類が「料金プラン」になり、裸の「プラン」が残らない 用語集の「料金プラン」の行を確認、grep -rn プラン factory/web/src/i18n/(料金プランを除く) 2026-11-04 23:53 合格 / 画面の文言に裸の「プラン」は 0 件。確定仕様に残る「プラン」は NDF のプランの JSON を指すものだけ
#2439 16. 改名でコードの識別子・API の項目名・保存済みの項目名は変わらず、型検査とテストが通る npm run check(型検査 tsc --noEmit を 4 つの作業領域で含む) 2026-11-04 23:52 合格 / exit=0
#2172 1. フェーズの異なる 3 つの実行で、一覧の 3 行にそれぞれ 設計・検査・仕上げ が出る npm run check の web/src/pages/sprints.test.tsx「スプリントの一覧(受け入れ条件 1〜3)」、api/src/views/derive.test.ts「一覧の行」 2026-11-04 23:52 合格
#2172 2. 各行にリポジトリ・課題・状態・今のフェーズ・始めた日時が出て、phase.changed 0 件は「始まる前」 同上、derive.test.ts「phase.changed が 0 件なら null…」 2026-11-04 23:52 合格
#2172 3. 5 つに無い名前は「その他(準備)」で、一覧の読み出しは 200 sprints.test.tsx 同上、api/src/routes/sprint-views.test.ts「…5 つに無い名前も 200」 2026-11-04 23:52 合格
#2172 4. ランナーが 配布(開発版)→取り込み、配布(本番)→仕上げ と写し、5 つの名前はそのまま runner/src/step-details.test.ts「フェーズの名前の写し(受け入れ条件 4)」 2026-11-04 23:52 合格
#2172 5. 課題 #A・#B・課題なしの工程が、それぞれの欄に order_key の順で並ぶ derive.test.ts「課題 #A・#B・番号なしの工程が…」、sprints.test.tsx「課題の欄で工程の記録を絞り…」 2026-11-04 23:52 合格
#2172 6. 各課題の欄に Pull Request・最後の状態・チェックごとの最後の結論が出て、pr.updated が無ければ「不明」 derive.test.ts「欄の Pull Request は最後の pr.updated の状態と、チェックの名前ごとの最後の結論を持ち、pr.updated が無ければ unknown」 2026-11-04 23:52 合格(導く処理のテスト。画面の見た目は手動確認の行で保留)
#2172 7. 工程を押すと詳細パネルにステップ・終了コード・秒・費用・要約・触ったファイル・決めたこと・作業の報告とログ・差分のリンクが出て、「概要に戻る」で戻る。中身の無い工程は「記録なし」 sprints.test.tsx「工程を押すと右が詳細パネルになり…」「工程の中身を持たない工程は…「記録なし」」と「工程の詳細パネルの分岐」の 5 件、derive.test.ts「工程の中身」 2026-11-04 23:52 合格
#2172 8. 承認ゲート 1・2 と判断の 3 つの欄で、承認待ち・承認された・差し戻された・判断に答えたへ移る derive.test.ts「承認の欄はゲート 1・ゲート 2・判断の 3 つで、到達・承認・差し戻し・判断の答えで状態が移る」、sprints.test.tsx「承認の欄は…ゲート 1 が承認待ち」 2026-11-04 23:52 合格
#2172 9. 仕上げに 振り返り と 棚卸し の行が常にあり、届く前は「まだ」、後は終了コードと秒 sprints.test.tsx「…振り返りと棚卸しが「まだ」で並ぶ」「仕上げの記録が届いた実行は…」、derive.test.ts「仕上げの欄は…」 2026-11-04 23:52 合格
#2172 10. 開いたまま事象が追記されると読み直しの間隔の 2 倍以内に出て、失敗しても前の表示は消えない sprints.test.tsx「読み直し(受け入れ条件 10)」の 3 件 2026-11-04 23:52 合格
#2172 11. 他人・無いアカウント・属さない実行・無い実行のどれでも同じ本文の 403 forbidden sprint-views.test.ts「認可(受け入れ条件 11)」 2026-11-04 23:52 合格
#2172 12. API が 401 を返すと token を消してログインの画面へ移る sprints.test.tsx「401 の扱い(受け入れ条件 12)」 2026-11-04 23:52 合格
#2172 13. 一覧と詳細の読み出しは課題の本文・ボード・GitHub の API を呼ばない sprint-views.test.ts「詳細は本文を返さず…どちらも GitHub の口を呼ばない」 2026-11-04 23:52 合格
#2172 14. 足した項目の無い step.recorded(schema_version 1)を受け口が 202 で受け、詳細に出る。既存のテストが変えずに通る sprint-views.test.ts「足す前の形の step.recorded(schema_version 1 のまま)も詳細に出て…」、api/src/progress/app.test.ts「追記と冪等」(202) 2026-11-04 23:52 合格
#2172 15. バックログに順位の表と棚卸しの一覧が新しい順に出て、表が無ければ「順位の表がありません」 sprints.test.tsx「バックログ(受け入れ条件 15・16)」2 件、sprint-views.test.ts「バックログの経路」2 件、derive.test.ts「棚卸しの記録」 2026-11-04 23:52 合格
#2172 16. バックログの画面は課題・マイルストーン・ボードへ書き込む操作を持たない sprints.test.tsx「順位の表と棚卸しの記録を出し、書き込む操作を持たない」 2026-11-04 23:52 合格
#2172 17. npm run check と check-service-boundary.py が通る タグで npm run check、python3 scripts/check-service-boundary.py 2026-11-04 23:52〜23:53 合格 / どちらも exit=0、境界の違反 0 件
#2172 18. 一覧の既存の経路の既存の項目の名前と型は変わらない(足すだけ) sprint-views.test.ts「既存の 6 項目の名前と型を変えずに…足す」 2026-11-04 23:52 合格
#2405 1. 承認待ちのループの予算を変えた後の再開で、conductor を起こす前に NDF のループの記録の予算が変えた値になる — — 保留(理由: 実装の Pull Request #2478 が開いたままで、10.27.16 に入っていない。スプリントの Pull Request #2485 にも「設計の結果を読めなかった設計の課題: #2405」とある。#2478 をマージして版を出した後のリリース後テストで実施する)
#2405 2. 利用上限待ちの再開でも 1 と同じになる — — 保留(理由: 同上)
#2405 3. 予算を下げて再開し、消費の和が新しい予算以上で budget_<単位> で止まる — — 保留(理由: 同上)
#2405 4. 予算を上げて再開すると、古い予算で止まっていた和でも止まらない — — 保留(理由: 同上)
#2405 5. 再開のジョブの指示に、そのジョブを作った時点の予算(LOOP_BUDGET)が載る(requestResume・resumeAfterReset の両方) — — 保留(理由: 同上。10.27.16 のテストにあるのは次の周回の指示へ写る経路だけ)
#2405 6. 予算が変わらなければ履歴に行を足さず、変われば 1 行だけ足す — — 保留(理由: 同上)
#2405 7. 予算の反映はループの記録の予算と履歴のほかを変えず、続きの処理は 1 回だけ起きる — — 保留(理由: 同上)
#2405 8. 予算を宣言していないループの再開では記録の予算を変えない — — 保留(理由: 同上)
#2405 9. ループに属さない実行の再開は変わらない(LOOP_BUDGET を載せない) — — 保留(理由: 同上)
#2405 10. 予算を反映できなければ conductor を起こさずジョブを失敗で終え、理由を出力に残す — — 保留(理由: 同上)
#2439 手動確認(#2485 からリリース後テストへ回した項目): 同じリポジトリで 2 本の開発ループを Factory で回し、承認ゲート 2 が 1 件だけ一覧に出て、本番の Pull Request が 1 本だけ作られるのを利用者が見る — — 保留(理由: Factory の本番の系と 2 本のループの実行は、この実行から起こせない(人が実環境で行う項目)。利用者が Factory で 2 本のループを回す次の機会に実施する)
#2172 手動確認(#2485 からリリース後テストへ回した項目): 実環境の 1 本のスプリントの実行を一覧と詳細で開き、フェーズ・工程・Pull Request・CI・承認ゲートが実際の進み方と合うか、詳細パネルの見た目がモックに沿うかを人が見る — — 保留(理由: 同上。人が Factory の画面で見る項目で、次にスプリントを 1 本 Factory で回したときに実施する)
#2439 マージ前の未検証(#2483 の「設計と違う点」): 差し戻しで配布の実行の finishReason に release_rejected を書かない 10.27.16 の factory/api/src/runs/model.ts の FinishReason を読んだ 2026-11-04 23:55 保留(理由: 設計との違いが残ったまま出ている。受け入れ条件には含まれず、範囲の依頼へ返す答えの理由には release_rejected が載る。直すかは契約の変更を伴うため人の判断が要る)
#2439 マージ前の未検証(#2483 の「設計と違う点」): ループの実行が依頼の後に done で終わり次の周回へ進むことを確かめる API 側のテストが無い — — 保留(理由: 10.27.16 にもそのテストは無い。振る舞いはランナーの factory/runner/src/main.ts の分岐で成り立つ。実環境のループで確かめるのは上の #2439 の手動確認の行で行う)
#2172 マージ前の未検証(#2484 の「残リスク」): 範囲を絞ったテストで失敗したテストの名前を確かめていない スプリントの Pull Request #2485 と本番の Pull Request #2490 の CI(gh pr checks)を確認、タグで npm run check 2026-11-04 23:55 合格 / #2485 の pytest のシャード 2 本と #2490 の pytest・factory-check が pass。タグの factory のテスト 612 件が通過

合否: 保留(課題の受け入れ条件 44 件中 34 件を実施して合格、#2405 の 10 件は未配布のため保留。手動確認 2 件と未検証の 2 件は保留)
起票したもの: なし(#2405 は課題と実装の Pull Request #2478 が既にある。finishReason の違いは #2483 に記録済みで、人の判断を待つ)

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