Skip to content

docs: WP-18 の運用問題 5 件と feedback 採用分 10 件を登録し計画書を再編成 - #384

Merged
aloekun merged 1 commit into
masterfrom
docs/ops-issues-397-401
Aug 10, 2026
Merged

docs: WP-18 の運用問題 5 件と feedback 採用分 10 件を登録し計画書を再編成#384
aloekun merged 1 commit into
masterfrom
docs/ops-issues-397-401

Conversation

@aloekun

@aloekun aloekun commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Summary

Context

Why (運用問題): 2026-08-10 に夜間ループの PR を人間がマージする経路を初めて通したところ、5 件の運用問題が出た。実装が終わっても運用が回るとは限らないことの実例で、いずれもこのセッションまで記録されていなかった。

順位 問題
397 pnpm merge-pr が夜間 PR (remote 専用ブックマーク) を検出できない。gh pr merge は hook でブロックされるため逃げ道が無い
398 post-merge feedback のガードが完了済みの run を進行中と誤判定する
399 --feedback-only が同じガードに阻まれ復旧手段として機能しない
400 marker が危険な復旧手順を案内し、安全な手順に触れていない
401 CodeRabbit 無料枠の窓が固定時刻でなく直近の消費に追随する

Why (計画書の再編成): 従来の残作業表は観測と派生タスクが 1 表に混在し、WP-18 の完了に何が要るのか読み取れなかった。2026-08-10 のユーザー方針「WP-18 で生まれた問題は WP-18 で処理する / 潜在バグでも使い勝手に影響するなら WP-18 のうちに直す」を、判定基準つきの 3 区分として実装した。

  • (1) 観測待ち — 機構は整備済みで事象か期限を待つもの
  • (2) 運用問題の対処 — 基準 1 (WP-18 が生んだ) / 基準 2 (WP-18 の運用で踏む潜在バグ)。完了条件に含める
  • (3) WP-18 外の派生完了条件に含めない

(3) を外したのは、§ 7 の退役条件が「全 WP が完了または見送り」である以上、リポジトリ全体の一般則を紐づけると計画書が永久に退役できなくなるため。ただし優先度が低いという意味ではなく、順位 396 / 411 は高優先度で WP-18 とは独立に早期着手する旨を明記した。

想定外に見つかった不整合: 指摘済みの矛盾 (「前 2 者は順位 394 後の run で判定できる」) を直す過程で、WP-17 の残課題節にも同じ記述が残っていることに気づいた。同じ行の「代替解は順位 394 の draft 廃止」も誤りのままだったため、真の原因 (author が bot) と決定 16 による解決に書き換えた。

系統 F の変更理由 (ユーザー判断): 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく「cargo fmt を PreToolUse でブロックする」に変更した。規約は毎セッション読まれコンテキストを圧迫するが、hook は発火するまでコストがゼロで、ブロックと同時に正しいコマンドをフィードバックできる。ADR-042 の mechanizable 判定を満たす。この非対称は現行 ADR-042 に無いため、順位 411 の作業範囲に ADR-042 への追記を含めた。

Scope decision: docs のみ。実装は各順位の着手時に行う。運用問題と feedback 採用分を 1 PR にまとめたのは、どちらも本セッション由来の todo 登録で分ける実益が薄いため。

Validation

  • pnpm lint:md (127 files) / pnpm lint:docs: 0 error
  • pnpm push pre-push review: simplicity / security とも approved
  • 古い記述 順位 394 後の run の残存が 0 件であることを確認 (計画書内の自己矛盾を解消)
  • 順位 396 / 411 が順位表・詳細エントリの両方で Tier 1 になっていることを確認

References

Summary by CodeRabbit

  • ドキュメント
    • CI hooks smoke suiteの優先度を引き上げ、早期対応対象として整理しました。
    • WP-18の運用課題、観測項目、完了条件を更新しました。
    • 自動レビュー、外部依存、API廃止、旧語彙検出、安全な設定比較などの追加タスクを記録しました。
    • 採用率測定やAIレビュー内容の検証など、今後の評価項目を明確化しました。

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 3cbcd2d9-596d-43ed-81ea-d9d9e5b24ddf

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

WP-17/WP-18の状態と完了条件を更新しました。運用上の問題を整理し、関連タスク、検証規約、安全装置、hook制御の計画を追加しました。

Changes

WP-17/WP-18運用ドキュメント

Layer / File(s) Summary
WP-17/WP-18状態と実行経路
docs/harness-improvement-plan.md
Phase Bの自動起動成立を訂正しました。bot作成PRへのレビュー要求分離、本番運用開始、採用率測定を記録しました。
完了条件と残作業の再編成
docs/harness-improvement-plan.md
残作業を観測待ち、WP-18起因の運用問題、WP-18外の派生課題に分類しました。完了条件を採用率測定と運用問題の決着に更新しました。
運用問題と優先度の記録
docs/todo21.md
hooks smoke suiteの優先度を引き上げました。bookmark検出、feedback run判定、復旧手順、CodeRabbit制限の問題を追加しました。
派生タスクと開発規約
docs/todo-summary2.md, docs/todo21.md
post-merge feedbackの採用候補、実測検証、timeout、旧API・旧語彙検査、exact-match設定比較、boolean検証、cargo fmt制御を追加しました。

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルは、WP-18の運用問題5件とfeedback採用項目10件の登録、および計画書の再編成という主要変更を正確に示しています。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/ops-issues-397-401

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Monitor 分析 (GitHub Actions バックストップ)

  • トリガー: issue_comment (created) / 実行 run
  • CI: rust (ubuntu-latest) pending / rust (windows-latest) pending / request skipping / CodeRabbit pending(レビュー未着 — processing 通知のみ、待機せず現時点情報で分析)
  • レビュー状況: レビュー・インライン指摘・会話コメントとも実質 0 件(CodeRabbit の "processing" 通知コメントのみ、指摘内容なし)
  • Verdict: approved(指摘 0 件のため軽量サマリー)

diff 概要

  • 変更ファイル: 3 件(すべて docs/**.md、ADR-035 上 docs-only)
    • docs/harness-improvement-plan.md: +47/-7 — WP-18 運用問題の記帳修正・追記
    • docs/todo-summary2.md: +16/-1
    • docs/todo21.md: +376/-1 — 新規 todo エントリ追加(運用問題 5 件 + feedback 採用分 10 件、PR タイトル通り)
  • コード実行ロジックの変更なし。CI (rust build) は docs-only PR には本質的に影響しないはずで、pending は単に未完了。

Applicable Findings (Critical / High / Major)

該当なし(指摘が存在しないため)

Applicable Findings (Medium 以下)

該当なし

Filtered (not applicable)

該当なし

次のアクション

  • CI (rust ubuntu/windows) の完了と CodeRabbit レビューの到着を待ち、指摘が出た時点で次回 issue_comment イベントで再分析する。
  • mergeStateStatus: BLOCKED は CI pending が原因とみられ、現時点でアクション不要(CI 完了待ち)。

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 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/harness-improvement-plan.md`:
- Around line 213-214: WP-18 の完了条件を更新し、未確定スモーク (a)/(b) の扱いを明示する。Phase B 本体への到達と
coderabbitai[bot] allowlist
の要否について、完了要件に含めるか、非ブロッカーとして除外する場合は見送りまたは移管先と期限を併記し、採用率測定およびスモーク (c)
に関する既存条件との整合性を保つ。

In `@docs/todo-summary2.md`:
- Line 161: 順位411の要約を詳細計画と整合させ、`docs/todo-summary2.md`
の「正しいコマンドを提示」を「正しい対処を提示」に変更してください。`docs/todo21.md`
の計画に代替コマンドを追加する変更は行わず、既存の非適用理由・最小修正・例外判断を含むメッセージ方針に合わせてください。

In `@docs/todo21.md`:
- Around line 308-316: 完了判定と report コピーを対象 PR に紐づけ、別 PR
の結果を採用しないよう更新してください。`copy_feedback_report` では最新 run を選ぶだけでなく `pr_number` が一致する
report のみをコピーし、`run_takt_workflow` の成功終了に加えて task
label、`context.json`、report、reconciliation の PR 番号一致を検証して完了と判定してください。timeout
や失敗終了は完了扱いにしないでください。
- Around line 522-545: 既存のカスタムルール設定を確認し、旧語彙の reject 対象 extensions に yaml を含めて
rs、toml、yml と同様に YAML 設定ファイルも検査対象にする。作業計画の extensions 指定と完了基準を更新し、YAML config
内の旧語彙も hook が reject する挙動を明記する。
- Around line 611-633: 作業計画と完了基準で、cargo fmt の検出対象範囲を明確に定義してください。cargo fmt
の完全一致のみをブロックする場合は、その限定を明記し、cargo fmt --all
などを対象外として扱うことを示してください。複数の実行形態を拒否する場合は、正規化・解析方針と対応する fixture 追加を basic.rs
のルールおよび関連テスト計画に反映してください。
🪄 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: 1e36bbb1-1dbe-40e8-87e0-5b0fe8c04816

📥 Commits

Reviewing files that changed from the base of the PR and between 02bb385 and 88ce812.

📒 Files selected for processing (3)
  • docs/harness-improvement-plan.md
  • docs/todo-summary2.md
  • docs/todo21.md

Comment thread docs/harness-improvement-plan.md Outdated
Comment thread docs/todo-summary2.md Outdated
Comment thread docs/todo21.md
Comment thread docs/todo21.md
Comment thread docs/todo21.md
@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Monitor 分析 (GitHub Actions バックストップ)

  • トリガー: pull_request_review (submitted) / 実行 run
  • CI: rust (ubuntu-latest) pass / rust (windows-latest) pass / request skipping / CodeRabbit pass(レビュー完了)/ mergeStateStatus: BLOCKED(mergeable: MERGEABLE、reviewDecision 未確定)
  • レビュー状況: CodeRabbit がレビュー完了、Actionable comments 5 件(インライン指摘)。人間レビュアーによる承認/変更要求なし。
  • Verdict: needs_fix(Major 判定の applicable 指摘が 3 件存在)

Applicable Findings (Critical / High / Major)

# File (Line) Reviewer Issue Recommended Action
1 docs/harness-improvement-plan.md (214) CodeRabbit WP-18 の完了条件で、未確定のスモーク (a)/(b)(Phase B 本体到達・coderabbitai[bot] allowlist 要否)の扱いが明記されておらず、完了不能になり得る 完了要件にスモーク (a)/(b) を含めるか、非ブロッカーとして除外する場合は見送り/移管先と期限を併記し、採用率測定・スモーク (c) の既存条件と整合させる
2 docs/todo21.md (308-316) CodeRabbit 完了判定・copy_feedback_report が対象 PR に束縛されておらず、別 PR の report を採用しうる。run_takt_workflow の timeout/失敗終了も完了扱いになり得る pr_number 一致の report のみコピーし、task label / context.json / report / reconciliation の PR 番号一致 + 成功終了を完了条件に追加
3 docs/todo21.md (611-633) CodeRabbit cargo fmt 検出対象が完全一致のみか cargo fmt --all 等の各種バリアントも含むか計画上未定義 完全一致限定なら明記、バリアントも拒否するなら正規化方針と対応 fixture 追加を basic.rs 系のテスト計画に反映

Applicable Findings (Medium 以下)

# File (Line) Reviewer Issue Recommended Action
4 docs/todo-summary2.md (161) CodeRabbit 順位411の要約「正しいコマンドを提示」が docs/todo21.md 詳細計画(非適用理由・最小修正・例外判断のメッセージ方針、代替コマンド定義なし)と不一致 要約を「正しい対処を提示」に修正し詳細計画と整合させる
5 docs/todo21.md (522-545) CodeRabbit 既存 .claude/custom-lint-rules.tomlyaml/yml/toml/rs を主要拡張子に含めているが、本計画の旧語彙 reject 対象 extensions に yaml が抜けており YAML config が未検査になり得る extensions 指定に yaml を追加し、完了基準にも YAML config 内旧語彙の reject を明記

Filtered (not applicable)

該当なし

次のアクション

あわせて 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 の
共存) を確認したうえで妥当と判断している。
@aloekun
aloekun force-pushed the docs/ops-issues-397-401 branch from 88ce812 to 3857039 Compare August 10, 2026 14:15
@aloekun

aloekun commented Aug 10, 2026

Copy link
Copy Markdown
Owner Author

CodeRabbit レビュー対応 (5 件すべて修正)

# 指摘 判定 対応
1 WP-18 完了条件でスモーク未確定の扱いが不明確 (🟠 Major) 妥当 3 件すべてを非ブロッカーとし、理由・移管先・期限を表で明記
2 順位 411 の要約が詳細計画と不一致 (🟡 Minor) 妥当 「正しいコマンド」→「正しい対処」へ。代替コマンドは存在しない旨も明記
3 順位 398 の完了判定を対象 PR に束縛すべき (🟠 Major) 妥当・実装で裏付け 完了判定に「成功終了」と「対象 PR のものであること」の両方が要る旨を追記
4 旧語彙 lint の extensions から yaml が漏れている (🟡 Minor) 妥当 yml / yaml の両方を対象に。理由も併記
5 cargo fmt の検出対象が未定義 (🟠 Major) 妥当 検出範囲の決定を作業計画の先頭へ。完了基準にも範囲の明記を要求

1. スモーク未確定の扱い

ご指摘のとおりでした。(c) だけを非必須と書き、(a)(b) の扱いが抜けていたため、そのままでは完了条件を満たせません。

3 件すべてを非ブロッカーとして扱い、理由と移管先・期限を表で明記しました。特に (a)(b) は 事象待ちで自力では発生させられない(docs 指摘の出る夜間 PR に当たるまで観測できない)ため、条件に含めると WP を閉じられなくなります。2026-11-06 時点で未観測なら「機会が来なかった」として見送り、ADR-067 の bounded lifetime へ委ねる形にしました。

3. 完了判定の PR 束縛 — 実装を読んで裏付けました

これは重要な指摘で、私が書いた対処案がそのままでは不十分でした。

// src/cli-merge-pipeline/src/feedback/takt.rs
pub fn copy_feedback_report(repo_root: &Path, pr_number: u64) -> Result<PathBuf, String> {
    let latest = find_latest_run_dir(&runs_dir, TAKT_WORKFLOW)   // ← 最新 run を選ぶだけ
        .ok_or("post-merge-feedback の run dir が見つかりません")?;
    ...
    let target = target_dir.join(format!("{}.md", pr_number));   // ← 番号は出力先にしか使わない

find_latest_run_dirpr_number と照合していません。したがって「report が存在するか」を完了根拠にすると、別 PR の report を現在の PR の {pr_number}.md へコピーし得ます。takt の終了も timeout や失敗で起こるため、終了した事実は report 完成を証明しません。

本セッションで実際に同型の事象が起きています#382 の marker が出た時点で context.json#383 を指していました。ご指摘の懸念は仮説ではなく実在します。完了判定には「成功終了」と「対象 PR のものであること」の両方が要る旨を追記しました。

4. yaml の欠落

拡張子判定は eq_ignore_ascii_case文字列一致なので ymlyaml は別物です。本リポジトリは .github/workflows/*.yml.coderabbit.yaml両方を持つため、yaml を落とすと後者が未検査になります。両方を対象に加え、理由も併記しました。

5. cargo fmt の検出範囲

完全一致だけでは cargo fmt --all / cargo +stable fmt / rustup run stable cargo fmt / cargo-fmt が素通りします。「検出範囲を先に決める」を作業計画の先頭に置き、完了基準にも「完全一致に限定する場合は素通りする形態を明記する」ことを求める形にしました。

検証

  • pnpm lint:md (127 files) / pnpm lint:docs: 0 error
  • pnpm push pre-push review: simplicity / security とも approved
  • 指摘 3 / 4 は実装 (takt.rs、linter の拡張子判定) とリポジトリの実ファイル構成を確認したうえで妥当と判断

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