feat(nightly-todo): 夜間ループの停止点を通常 PR へ移し背圧の指標から draft 属性を外す - #376
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthrough夜間ループの停止点を draft PR 作成から通常 PR 作成へ変更しました。背圧対象、設定キー、CLI、判定処理を autonomous-pr 用に統一し、明示的な CodeRabbit レビュー依頼を削除しました。関連する ADR と運用記録も更新しました。 Changes自律 PR 移行
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)(該当なし — レビュー指摘未着) Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)(該当なし) 次のアクション
|
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.github/workflows/nightly-todo.yml (1)
96-133: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift権威ゲートに最新の背圧値を渡してください。
.github/workflows/nightly-todo.ymlの権威ゲートは、agent 実行・検証・guard 後の時点で初期inflightoutput を使っています。この間にclaude/PR が作成されると実数が閾値へ達していてもopen >= limitにならないため、PR 作成が許可されます。権威ゲートの手前でPR数を再計数し、その値を--open-autonomous-prsに渡してください。複数の PR 作成者が並行する場合、同じ観測値を使い続けて複数 run が通過しない直列化または排他機構も追加してください。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/nightly-todo.yml around lines 96 - 133, Update the workflow’s authoritative gate after agent execution, validation, and guard steps to recount currently open `claude/` PRs immediately before passing `--open-autonomous-prs`, rather than reusing the initial `inflight` output. Preserve fail-closed handling when the listing reaches its limit. Also add serialization or an equivalent lock around the final count-and-PR-creation decision so concurrent runs cannot all proceed using the same observation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/adr-067-phase-b-unattended-fix-push.md`:
- Around line 145-146:
実走スモークの受け入れ状態を、夜間PRの初回自動レビュー確認だけを未完了対象とする現行方針へ統一してください。docs/adr/adr-067-phase-b-unattended-fix-push.md
の該当箇所では Phase B と bot allowlist
を歴史的観測または完了条件外として明示し、docs/harness-improvement-plan.md の156-157行では WP-17
の残課題を更新、163-165行では「7充足 /
3未確定」を現行対象と意図的保留に分離してください。docs/adr/adr-072-nightly-todo-loop.md
の435-445行では実走スモーク表と母数を、512-516行では Phase B と allowlist の扱いを同じ方針へ更新してください。
In `@docs/adr/adr-071-draft-pr-backpressure.md`:
- Around line 136-138: 修正対象は網羅走査の組合せ数記述です。実際のテスト列挙を確認し、repo
config・外部フラグ・背圧・操作の各因数と合計が一致するよう、`216 組合せ`
または誤っている因数を更新してください。文書内の算術結果とテスト実数を整合させてください。
In `@docs/adr/adr-072-nightly-todo-loop.md`:
- Line 68: The backpressure contract should use autonomous-pr and the count of
unmerged claude/ PRs, not draft PRs. In docs/adr/adr-072-nightly-todo-loop.md
lines 68-68, update the adjacent snapshot description to define
open_autonomous_prs accordingly; in docs/adr/adr-071-draft-pr-backpressure.md
lines 158-159, state that the nightly workflow caller is connected and retain
only verification that the operational threshold is reached if observations are
unavailable.
In `@src/cli-autonomy-gate/src/main.rs`:
- Around line 201-213: Extend the test coverage around parse_args in
non_numeric_open_autonomous_pr_counts_are_usage_errors, or add a focused test,
to pass --open-draft-prs 0 and assert that parsing returns an error. Keep this
assertion specifically validating rejection of the deprecated flag without
treating it as an alias for --open-autonomous-prs.
---
Outside diff comments:
In @.github/workflows/nightly-todo.yml:
- Around line 96-133: Update the workflow’s authoritative gate after agent
execution, validation, and guard steps to recount currently open `claude/` PRs
immediately before passing `--open-autonomous-prs`, rather than reusing the
initial `inflight` output. Preserve fail-closed handling when the listing
reaches its limit. Also add serialization or an equivalent lock around the final
count-and-PR-creation decision so concurrent runs cannot all proceed using the
same observation.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: f8d34ada-a145-4d81-ac22-64457b6b5fbc
📒 Files selected for processing (16)
.github/workflows/nightly-todo.ymlCLAUDE.mdautonomy-config.tomldocs/adr/adr-019-coderabbit-review-hybrid-policy.mddocs/adr/adr-052-autonomy-execution-boundary-classes.mddocs/adr/adr-066-autonomy-global-kill-switch.mddocs/adr/adr-067-phase-b-unattended-fix-push.mddocs/adr/adr-071-draft-pr-backpressure.mddocs/adr/adr-072-nightly-todo-loop.mddocs/harness-improvement-plan.mddocs/todo-summary2.mddocs/todo21.mdsrc/cli-autonomy-gate/src/main.rssrc/cli-fix-push-gate/src/main.rssrc/lib-autonomy-policy/src/decision.rssrc/lib-autonomy-policy/src/sources.rs
💤 Files with no reviewable changes (1)
- docs/todo-summary2.md
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)
Applicable Findings (Medium 以下)
Filtered (not applicable)
次のアクション
|
夜間 draft PR は .coderabbit.yaml の auto_review.drafts: false と衝突し、レビューが 一度も付かない状態だった。回避策として置いた ADR-072 決定 11 (App token で @coderabbitai review を投稿) は、bot 投稿が CodeRabbit に無視されるため不成立と 2026-08-09 に実測確定した (#373 の投稿者別対照: bot は 10 時間無反応 / 人間は 4 秒)。 構造側を是正し、停止点を draft PR から通常 PR へ移す。commitment 点はマージ 1 点に 集約する (ユーザー判断: トリガーがユーザー指示か自動採択かで扱いを区別しない)。 背圧の計数から .isDraft を外すことは本変更と分離できない。draft で数え続けると計数が 常に 0 になり、deny ではなく allow へ倒れて背圧が無音で無効化される (ADR-052 原則 5 違反)。指標を「未マージの claude/ PR 数」へ改め、命名も autonomous 系へ揃えた。 - workflow: --draft 除去 / .isDraft 計数除去 / 決定 11 step 撤去 / Report outcome 整理 - Rust: Operation::AutonomousPr / --operation autonomous-pr / --open-autonomous-prs / requires_autonomous_pr_backpressure() / open_autonomous_prs - config: max_open_autonomous_prs (値 3 は据え置き) - ADR-052: 原則 2 分類表の本体改訂 (ゲート必須から「ready 化」「非 draft PR 作成」を削除) - ADR-071: 指標の再定義 (ファイル名と ADR 番号は歴史的識別子なので不変) - ADR-072: 決定 11 を撤回として記録 / 決定 15 を新設 / 実走スモークの Phase B 判定を訂正 - ADR-019 / ADR-066 / ADR-067 / CLAUDE.md / 計画書 / todo を同期 旧名は黙って通さない。--operation draft-pr と --open-draft-prs は exit 2、旧キー max_open_draft_prs のみの config は閾値未接続 (deny) になることを unit test 2 本と exe drill で固定した。閾値 deny も実測 (open=2 allow / 3・4 deny / 計数省略 deny)。 実走スモークの集計誤りも訂正した (合計 11 件で母数 10 と不整合、充足数も表と 1 件ずれ)。 表が正で 7 充足 / 3 未確定。 todo 順位 393 / 394 完了。残るは実走確認 (夜間 PR に CodeRabbit の初回自動レビューが 付くこと) のみで、計画書 WP-18 と ADR-072 § 実走スモークが追跡する。 --- CodeRabbit レビュー対応 (#376) --- - ADR-072 決定 4 / 残課題と ADR-071 残課題に残っていた draft 用語を修正。背圧の スナップショット説明を open_autonomous_prs の意味へ、ADR-071 の「呼び手が 1 つも 無い」は WP-18 PR 3 で接続済みとして更新 - 計画書の自己矛盾を解消。サマリの「7 充足 / 3 未確定」と表の「スモーク残 1 項目」が 食い違っていたため、未確定 3 件を (a) Phase B 到達 / (b) allowlist / (c) トークン露出 として表へ分解し、完走条件に含める / 含めないを明示 - ADR-071 の網羅走査の組合せ数を訂正。216 (3 × 15 × 4 × 2) は積も因数も誤りで、 外部フラグは None + TRUTHY 7 + NOT_TRUTHY 8 = 16 通り、総数は 384 - CLI 層の旧フラグ拒否テストを追加 (--open-draft-prs を未知引数として弾く)。 判定コア側は固定済みだったが引数層だけ素通りする形が最も危うい authority gate の直前で背圧を再計数する指摘は入れない。ADR-072 決定 4 と § 残課題が 「閾値を 1 件超えて push されうる」「実運用で観測されたら入れる」と既に記録している 意図的なトレードオフで、本 PR が作った問題ではない。同一 workflow の並行 run は concurrency: group で直列化済み。却下理由を ADR 側へ明記した。 CI の ubuntu 失敗は本変更と無関係な flake (hooks-pre-tool-validate の smoke suite が 並列実行時に ETXTBSY)。同一コミットの再実行で両 OS success を確認し、根本修正は 順位 396 として登録した。
cc8c84d to
30288f5
Compare
CodeRabbit レビュー対応 (5 件)実物と突き合わせて検証しました。4 件は妥当なので修正、1 件は既知の設計判断のため却下します。 修正した 4 件
却下する 1 件「権威ゲートに最新の背圧値を渡してください」(🟠 Major、diff 範囲外) 観測自体は正しいのですが、本 PR が作った問題ではなく、ADR-072 に記録済みの意図的なトレードオフです。
併記された「複数 run が同じ観測値で通過しない直列化」は、 ただしこの保留が意図であると読み取れるようにするのは妥当なので、ADR-072 § 残課題へ却下理由 (超過は最大 1 件 / 並行 run は directive で直列化済み / 増分の出所は別経路に限られる) を明記し、ADR-071 § 残課題にも同じトレードオフを相互参照として追記しました。 CI の ubuntu 失敗について本変更とは無関係な Linux 固有の flake です。 smoke suite の 2 テストが並列実行され、片方の 検証
|
あわせて post-merge feedback (#376/#377/#380/#381/#382) の採用分 10 件を順位 402-411 へ 登録した。2026-08-10 に採用候補を系統別へ分類し、ユーザーが採否を決定したもの。 採用: 系統 A (観測の完全性) 3 件 / 系統 B (重複実装の予防) 3 件 / 系統 C (shell・config パースの安全性) 3 件 却下: 系統 D (workflow セキュリティ標準化) / 系統 E (PAT 失効監視) — 様子見 形を変えて採用: 系統 F — 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく 「cargo fmt を PreToolUse でブロックする」(順位 411) 系統 F の変更理由 (ユーザー判断): 規約は CLAUDE.md に書いた時点で毎セッション読まれ コンテキストを圧迫するが、PreToolUse hook は発火するまでコストがゼロで、ブロックと 同時に正しいコマンドをフィードバックできる。読み手は規約を覚えていなくても正しい経路へ 到達する。ADR-042 の mechanizable 判定を満たすため機構側が正しい。 **この非対称は現行 ADR-042 に無い**。同 ADR の判断基準は「機械判定できるか」「投資対効果」 が中心で、「規約は常時コンテキストを消費し hook は発火時のみ」という観点が明示されて いない。ルール追加を検討するたびに効く一般則なので、順位 411 の作業範囲に ADR-042 への 追記を含めた。
あわせて post-merge feedback (#376/#377/#380/#381/#382) の採用分 10 件を順位 402-411 へ 登録した。2026-08-10 に採用候補を系統別へ分類し、ユーザーが採否を決定したもの。 採用: 系統 A (観測の完全性) 3 件 / 系統 B (重複実装の予防) 3 件 / 系統 C (shell・config パースの安全性) 3 件 却下: 系統 D (workflow セキュリティ標準化) / 系統 E (PAT 失効監視) — 様子見 形を変えて採用: 系統 F — 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく 「cargo fmt を PreToolUse でブロックする」(順位 411) 系統 F の変更理由 (ユーザー判断): 規約は CLAUDE.md に書いた時点で毎セッション読まれ コンテキストを圧迫するが、PreToolUse hook は発火するまでコストがゼロで、ブロックと 同時に正しいコマンドをフィードバックできる。読み手は規約を覚えていなくても正しい経路へ 到達する。ADR-042 の mechanizable 判定を満たすため機構側が正しい。 **この非対称は現行 ADR-042 に無い**。同 ADR の判断基準は「機械判定できるか」「投資対効果」 が中心で、「規約は常時コンテキストを消費し hook は発火時のみ」という観点が明示されて いない。ルール追加を検討するたびに効く一般則なので、順位 411 の作業範囲に ADR-042 への 追記を含めた。 ## 計画書 (harness-improvement-plan.md) の WP-18 節を再編成 **WP-18 で生んだ問題と、WP-18 の運用で日常的に踏む問題を WP-18 の外へ押し出さない** (2026-08-10 ユーザー方針) ため、残作業を 3 区分へ分けて完了条件を明示した。 従来は観測と派生タスクが 1 表に混在し、WP-18 の完了に何が要るのかが読み取れなかった。 - (1) 観測待ち — 機構は整備済みで事象か期限を待つもの - (2) 運用問題の対処 — WP-18 が生んだ (基準 1) / WP-18 の運用で踏む潜在バグ (基準 2)。 順位 397 / 398-400 / 401 / 410。**完了条件に含める** - (3) WP-18 外の派生 — 順位 396 / 411 / 402-409 等。完了条件に含めない (3) を完了条件から外すのは、§ 7 の退役条件が「全 WP が完了または見送り」である以上、 リポジトリ全体の一般則を WP-18 に紐づけると計画書が永久に退役できなくなるため。 ただし**優先度が低いという意味ではない** — 順位 396 (flaky テスト) と 411 (cargo fmt ブロック) はいずれも高優先度で、WP-18 とは独立に早期着手する旨を明記した。 あわせて古い記述を実測に合わせた: - 見出しの「実装・スモークは 2026-08-08 までにほぼ完了」→ 決定 16 という新規実装が 2026-08-10 に入ったため「観測中 + 運用問題の対処中」へ - 「前 2 者は順位 394 後の run で判定できる」→ 順位 394 は完了済みで実際の前提は決定 16。 同一ファイル内の自己矛盾だった - WP-17 残課題節にも同じ「順位 394 後の run」が残っていたため同期。あわせて 「代替解は draft 廃止」が誤りだったことも記録した ## todo 側 - 順位 396 を Tier 2 → **Tier 1** へ格上げ (ユーザー判断)。単発の Severity では Tier 2 相当だが、flaky テストは「また flake だろう」という読み替えを生み実バグの見落とし 経路になるため。両 OS matrix (ADR-065) の信号品質を守る意味で早期に潰す - 順位 411 に早期着手の根拠を追記 (cargo fmt は反射的に実行されやすい) - **却下を negative result として記録**: 系統 D / E は様子見。trunk 保護の drift 対処 2 件は却下 (予防側は順位 405 で押さえた / 共有 lib 化は network isolation 設計と 抵触しうる)。**再採用条件は「同型の drift が今後も再発する場合」**と明記した
あわせて post-merge feedback (#376/#377/#380/#381/#382) の採用分 10 件を順位 402-411 へ 登録した。2026-08-10 に採用候補を系統別へ分類し、ユーザーが採否を決定したもの。 採用: 系統 A (観測の完全性) 3 件 / 系統 B (重複実装の予防) 3 件 / 系統 C (shell・config パースの安全性) 3 件 却下: 系統 D (workflow セキュリティ標準化) / 系統 E (PAT 失効監視) — 様子見 形を変えて採用: 系統 F — 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく 「cargo fmt を PreToolUse でブロックする」(順位 411) 系統 F の変更理由 (ユーザー判断): 規約は CLAUDE.md に書いた時点で毎セッション読まれ コンテキストを圧迫するが、PreToolUse hook は発火するまでコストがゼロで、ブロックと 同時に正しいコマンドをフィードバックできる。読み手は規約を覚えていなくても正しい経路へ 到達する。ADR-042 の mechanizable 判定を満たすため機構側が正しい。 **この非対称は現行 ADR-042 に無い**。同 ADR の判断基準は「機械判定できるか」「投資対効果」 が中心で、「規約は常時コンテキストを消費し hook は発火時のみ」という観点が明示されて いない。ルール追加を検討するたびに効く一般則なので、順位 411 の作業範囲に ADR-042 への 追記を含めた。 ## 計画書 (harness-improvement-plan.md) の WP-18 節を再編成 **WP-18 で生んだ問題と、WP-18 の運用で日常的に踏む問題を WP-18 の外へ押し出さない** (2026-08-10 ユーザー方針) ため、残作業を 3 区分へ分けて完了条件を明示した。 従来は観測と派生タスクが 1 表に混在し、WP-18 の完了に何が要るのかが読み取れなかった。 - (1) 観測待ち — 機構は整備済みで事象か期限を待つもの - (2) 運用問題の対処 — WP-18 が生んだ (基準 1) / WP-18 の運用で踏む潜在バグ (基準 2)。 順位 397 / 398-400 / 401 / 410。**完了条件に含める** - (3) WP-18 外の派生 — 順位 396 / 411 / 402-409 等。完了条件に含めない (3) を完了条件から外すのは、§ 7 の退役条件が「全 WP が完了または見送り」である以上、 リポジトリ全体の一般則を WP-18 に紐づけると計画書が永久に退役できなくなるため。 ただし**優先度が低いという意味ではない** — 順位 396 (flaky テスト) と 411 (cargo fmt ブロック) はいずれも高優先度で、WP-18 とは独立に早期着手する旨を明記した。 あわせて古い記述を実測に合わせた: - 見出しの「実装・スモークは 2026-08-08 までにほぼ完了」→ 決定 16 という新規実装が 2026-08-10 に入ったため「観測中 + 運用問題の対処中」へ - 「前 2 者は順位 394 後の run で判定できる」→ 順位 394 は完了済みで実際の前提は決定 16。 同一ファイル内の自己矛盾だった - WP-17 残課題節にも同じ「順位 394 後の run」が残っていたため同期。あわせて 「代替解は draft 廃止」が誤りだったことも記録した ## todo 側 - 順位 396 を Tier 2 → **Tier 1** へ格上げ (ユーザー判断)。単発の Severity では Tier 2 相当だが、flaky テストは「また flake だろう」という読み替えを生み実バグの見落とし 経路になるため。両 OS matrix (ADR-065) の信号品質を守る意味で早期に潰す - 順位 411 に早期着手の根拠を追記 (cargo fmt は反射的に実行されやすい) - **却下を negative result として記録**: 系統 D / E は様子見。trunk 保護の drift 対処 2 件は却下 (予防側は順位 405 で押さえた / 共有 lib 化は network isolation 設計と 抵触しうる)。**再採用条件は「同型の drift が今後も再発する場合」**と明記した --- CodeRabbit レビュー対応 (#384、5 件すべて修正) --- 1. WP-18 完了条件でスモーク未確定の扱いが不明確 (Major) (c) だけを非必須と書き (a)(b) の扱いが無かった。(a)(b) は事象待ちで**自力で発生させ られない**ため、条件に含めると WP を閉じられない。3 件すべてを非ブロッカーとし、 理由と移管先・期限を表で明記した。(a)(b) は 2026-11-06 時点で未観測なら 「機会が来なかった」として見送り ADR-067 の bounded lifetime へ委ねる。 2. 順位 411 の要約が詳細計画と不一致 (Minor) summary は「正しいコマンドを提示」だが、cargo fmt に**代替コマンドは存在しない** (手で直すのが正)。「正しい対処を提示」へ変更し、詳細側にもその旨を明記した。 3. 順位 398 の完了判定を対象 PR に束縛すべき (Major) 「report 生成を完了根拠にする」案が不十分だった。copy_feedback_report は find_latest_run_dir で最新 run を選ぶだけで **pr_number と照合していない**ため、 別 PR の report を現在の PR の {pr_number}.md へコピーし得る。また takt の終了は timeout や失敗でも起こるので終了した事実は report 完成を証明しない。実装を読んで 裏付けたうえで、完了判定には「成功終了」と「対象 PR のものであること」の両方が 要る旨を追記した。本セッションで実際に context.json が別 PR を指していた事象とも 同型である。 4. 旧語彙 lint の extensions から yaml が漏れている (Minor) 拡張子は eq_ignore_ascii_case の文字列一致で **yml と yaml は別物**。本リポジトリは .github/workflows/*.yml と .coderabbit.yaml の両方を持つため、yaml を落とすと 後者が未検査になる。両方を対象に加え、理由も併記した。 5. cargo fmt の検出対象が未定義 (Major) 完全一致だけでは cargo fmt --all / cargo +stable fmt / rustup run stable cargo fmt / cargo-fmt が素通りする。作業計画の先頭に「検出範囲を先に決める」を追加し、完了基準に 「完全一致に限定する場合は素通りする形態を明記する」ことを求める形にした。 いずれも実物 (takt.rs の実装 / linter の拡張子判定 / リポジトリ内の .yml と .yaml の 共存) を確認したうえで妥当と判断している。
あわせて post-merge feedback (#376/#377/#380/#381/#382) の採用分 10 件を順位 402-411 へ 登録した。2026-08-10 に採用候補を系統別へ分類し、ユーザーが採否を決定したもの。 採用: 系統 A (観測の完全性) 3 件 / 系統 B (重複実装の予防) 3 件 / 系統 C (shell・config パースの安全性) 3 件 却下: 系統 D (workflow セキュリティ標準化) / 系統 E (PAT 失効監視) — 様子見 形を変えて採用: 系統 F — 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく 「cargo fmt を PreToolUse でブロックする」(順位 411) 系統 F の変更理由 (ユーザー判断): 規約は CLAUDE.md に書いた時点で毎セッション読まれ コンテキストを圧迫するが、PreToolUse hook は発火するまでコストがゼロで、ブロックと 同時に正しいコマンドをフィードバックできる。読み手は規約を覚えていなくても正しい経路へ 到達する。ADR-042 の mechanizable 判定を満たすため機構側が正しい。 **この非対称は現行 ADR-042 に無い**。同 ADR の判断基準は「機械判定できるか」「投資対効果」 が中心で、「規約は常時コンテキストを消費し hook は発火時のみ」という観点が明示されて いない。ルール追加を検討するたびに効く一般則なので、順位 411 の作業範囲に ADR-042 への 追記を含めた。 ## 計画書 (harness-improvement-plan.md) の WP-18 節を再編成 **WP-18 で生んだ問題と、WP-18 の運用で日常的に踏む問題を WP-18 の外へ押し出さない** (2026-08-10 ユーザー方針) ため、残作業を 3 区分へ分けて完了条件を明示した。 従来は観測と派生タスクが 1 表に混在し、WP-18 の完了に何が要るのかが読み取れなかった。 - (1) 観測待ち — 機構は整備済みで事象か期限を待つもの - (2) 運用問題の対処 — WP-18 が生んだ (基準 1) / WP-18 の運用で踏む潜在バグ (基準 2)。 順位 397 / 398-400 / 401 / 410。**完了条件に含める** - (3) WP-18 外の派生 — 順位 396 / 411 / 402-409 等。完了条件に含めない (3) を完了条件から外すのは、§ 7 の退役条件が「全 WP が完了または見送り」である以上、 リポジトリ全体の一般則を WP-18 に紐づけると計画書が永久に退役できなくなるため。 ただし**優先度が低いという意味ではない** — 順位 396 (flaky テスト) と 411 (cargo fmt ブロック) はいずれも高優先度で、WP-18 とは独立に早期着手する旨を明記した。 あわせて古い記述を実測に合わせた: - 見出しの「実装・スモークは 2026-08-08 までにほぼ完了」→ 決定 16 という新規実装が 2026-08-10 に入ったため「観測中 + 運用問題の対処中」へ - 「前 2 者は順位 394 後の run で判定できる」→ 順位 394 は完了済みで実際の前提は決定 16。 同一ファイル内の自己矛盾だった - WP-17 残課題節にも同じ「順位 394 後の run」が残っていたため同期。あわせて 「代替解は draft 廃止」が誤りだったことも記録した ## todo 側 - 順位 396 を Tier 2 → **Tier 1** へ格上げ (ユーザー判断)。単発の Severity では Tier 2 相当だが、flaky テストは「また flake だろう」という読み替えを生み実バグの見落とし 経路になるため。両 OS matrix (ADR-065) の信号品質を守る意味で早期に潰す - 順位 411 に早期着手の根拠を追記 (cargo fmt は反射的に実行されやすい) - **却下を negative result として記録**: 系統 D / E は様子見。trunk 保護の drift 対処 2 件は却下 (予防側は順位 405 で押さえた / 共有 lib 化は network isolation 設計と 抵触しうる)。**再採用条件は「同型の drift が今後も再発する場合」**と明記した --- CodeRabbit レビュー対応 (#384、5 件すべて修正) --- 1. WP-18 完了条件でスモーク未確定の扱いが不明確 (Major) (c) だけを非必須と書き (a)(b) の扱いが無かった。(a)(b) は事象待ちで**自力で発生させ られない**ため、条件に含めると WP を閉じられない。3 件すべてを非ブロッカーとし、 理由と移管先・期限を表で明記した。(a)(b) は 2026-11-06 時点で未観測なら 「機会が来なかった」として見送り ADR-067 の bounded lifetime へ委ねる。 2. 順位 411 の要約が詳細計画と不一致 (Minor) summary は「正しいコマンドを提示」だが、cargo fmt に**代替コマンドは存在しない** (手で直すのが正)。「正しい対処を提示」へ変更し、詳細側にもその旨を明記した。 3. 順位 398 の完了判定を対象 PR に束縛すべき (Major) 「report 生成を完了根拠にする」案が不十分だった。copy_feedback_report は find_latest_run_dir で最新 run を選ぶだけで **pr_number と照合していない**ため、 別 PR の report を現在の PR の {pr_number}.md へコピーし得る。また takt の終了は timeout や失敗でも起こるので終了した事実は report 完成を証明しない。実装を読んで 裏付けたうえで、完了判定には「成功終了」と「対象 PR のものであること」の両方が 要る旨を追記した。本セッションで実際に context.json が別 PR を指していた事象とも 同型である。 4. 旧語彙 lint の extensions から yaml が漏れている (Minor) 拡張子は eq_ignore_ascii_case の文字列一致で **yml と yaml は別物**。本リポジトリは .github/workflows/*.yml と .coderabbit.yaml の両方を持つため、yaml を落とすと 後者が未検査になる。両方を対象に加え、理由も併記した。 5. cargo fmt の検出対象が未定義 (Major) 完全一致だけでは cargo fmt --all / cargo +stable fmt / rustup run stable cargo fmt / cargo-fmt が素通りする。作業計画の先頭に「検出範囲を先に決める」を追加し、完了基準に 「完全一致に限定する場合は素通りする形態を明記する」ことを求める形にした。 いずれも実物 (takt.rs の実装 / linter の拡張子判定 / リポジトリ内の .yml と .yaml の 共存) を確認したうえで妥当と判断している。
hooks-pre-tool-validate の smoke テスト 2 本が並列に exe を tempdir へ copy → spawn するため、Linux で copy 側の書き込み fd を並列 spawn が fork した子が継承し、 exec が ETXTBSY (Text file busy) で落ちる。PR #376 の CI (ubuntu-latest) で実観測。 WSL Ubuntu-24.04 の ext4 上で再現させ (200 run 中 43 回)、対処案 3 つを実測比較した うえで、copy と spawn (fork〜exec) を static Mutex で相互排除する形を採った。 テストごとの tempdir 分離と後始末を保ったまま、fd 継承の窓を構造的に閉じる。 同型パターンの棚卸しで hooks-stop-quality の t7_cwd_independence (5 テスト全部が copy→spawn) が見つかったため、同じガードを入れた。現状 cfg(windows) で POSIX 経路は 踏まないが、cfg を外した瞬間に同じ flake が出る箇所。 回帰 seal として #[ignore] のストレステストを追加した。ロックを外すと Linux で 10/10 落ち、戻すと 0/10 (ADR-049)。CI の --ignored --test-threads=1 leg で走る。 順位 396 のエントリ (todo21.md / todo-summary2.md) を削除し、計画書と harness-improvement-plan.md の該当行を更新した。
hooks-pre-tool-validate の smoke テスト 2 本が並列に exe を tempdir へ copy → spawn するため、Linux で copy 側の書き込み fd を並列 spawn が fork した子が継承し、 exec が ETXTBSY (Text file busy) で落ちる。PR #376 の CI (ubuntu-latest) で実観測。 WSL Ubuntu-24.04 の ext4 上で再現させ (200 run 中 43 回)、対処案 3 つを実測比較した うえで、copy と spawn (fork〜exec) を static Mutex で相互排除する形を採った。 テストごとの tempdir 分離と後始末を保ったまま、fd 継承の窓を構造的に閉じる。 同型パターンの棚卸しで hooks-stop-quality の t7_cwd_independence (5 テスト全部が copy→spawn) が見つかったため、同じガードを入れた。現状 cfg(windows) で POSIX 経路は 踏まないが、cfg を外した瞬間に同じ flake が出る箇所。 回帰 seal として #[ignore] のストレステストを追加した。ロックを外すと Linux で 10/10 落ち、戻すと 0/10 (ADR-049)。CI の --ignored --test-threads=1 leg で走る。 順位 396 のエントリ (todo21.md / todo-summary2.md) を削除し、計画書と harness-improvement-plan.md の該当行を更新した。
Summary
gh pr create --draft除去)。CodeRabbit の初回自動レビューが夜間 PR にも付くようになる.isDraftを除去し、指標を「未マージのclaude/PR 数」へ再定義。この 2 点は分離できない — draft で数え続けると計数が常に 0 になり、deny ではなく allow へ倒れて背圧が無音で無効化される (ADR-052 原則 5 違反)autonomous系へ統一 (Operation::AutonomousPr/--operation autonomous-pr/--open-autonomous-prs/max_open_autonomous_prs)。旧名は fail-closed 側に倒れることを unit test 2 本で固定Context
Why: 夜間 draft PR は
.coderabbit.yamlのauto_review.drafts: falseと衝突し、レビューが一度も付かない状態だった。回避策として置いた ADR-072 決定 11 (App token で@coderabbitai reviewを投稿) は、bot 投稿が CodeRabbit に無視されるため不成立と 2026-08-09 に実測確定した。Trigger: PR #373 での投稿者別対照実験 — 同一 PR・同一文言・同一設定で、
nightly-todo-aloekun(App/bot) の投稿は約 10 時間無反応、aloekun(人間) の投稿は 4 秒後に応答し 11 秒後にレビュー開始。決定 11 自身が未検証事項に挙げていた仮説がそのまま実証された形。判断 (2026-08-09 ユーザー): 発生トリガーがユーザー指示か自動採択かで扱いを区別しない。有効な修正 PR ならプロジェクトに取り入れてよいため、commitment 点はマージ 1 点へ集約してよい。
Scope decision: 1 PR にまとめた。
--draft除去と.isDraft計数除去を分離すると、中間状態で背圧が完全に無効化される (ADR-052 原則 5 が禁じる状態、しかも allow へ倒れるため検知できない)。ADR-052/071/072 の改訂も同じ commitment の一部。todo 順位 394 は size gate 超過時の 2 分割を想定していたが、実際の diff は 681 行で閾値 (1500 行) 内に収まった。あわせて修正: ADR-072 § 実走スモークが「Phase B は不成立」と記帳していたのは誤りで、起動契機のコメントが供給されていなかっただけ。#373 で
issue_comment経路は実際に発火し Phase A が自動起動した。同節の集計も「8 充足 / 1 不成立 / 未確定 2」= 合計 11 件で母数 10 と不整合、充足数も表と 1 件ずれていたため 7 充足 / 3 未確定 に訂正した。Validation
cargo test --workspace: 1,969 pass / 0 fail (21 ignored、50 スイート)cargo clippy --workspace --all-targets -- -D warnings: cleanpnpm lint/pnpm lint:md(127 files) /pnpm lint:docs: すべて 0 errorpnpm pushquality gate: lint / test / build / rust-lint-test 全 PASS (63.7s、cargo test -- --ignored含む)pnpm pushpre-push review: verdict=APPROVE (simplicity / security とも blocking finding なし、1 iteration / 2m17s)--open-autonomous-prs 2→ allow (exit 0) /3/4→ deny (exit 1) / 計数省略 → deny。閾値>=境界が改名後も機能することを実測--operation draft-pr/--open-draft-prsはいずれも exit 2 (引数不正)、旧キーmax_open_draft_prsのみの config は閾値未接続 (deny)。unit test 2 本で固定steps.*参照なし (request-review撤去の取りこぼしなし)References
Summary by CodeRabbit
新機能
変更