Skip to content

fix(merge-pipeline): 夜間 PR の remote 専用ブックマークを検出し --pr を追加 (順位 397) - #385

Merged
aloekun merged 1 commit into
masterfrom
fix/merge-pr-remote-bookmark
Aug 10, 2026
Merged

fix(merge-pipeline): 夜間 PR の remote 専用ブックマークを検出し --pr を追加 (順位 397)#385
aloekun merged 1 commit into
masterfrom
fix/merge-pr-remote-bookmark

Conversation

@aloekun

@aloekun aloekun commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Summary

  • pnpm merge-pr の PR 検出を ローカル bookmark → リモート追跡 bookmark の 2 段にし、jj bookmark track 無しで夜間 PR をマージできるようにした (順位 397 対処案 a)
  • PR 検出失敗時に 実行可能な復旧手順 (--pr / jj bookmark list --all-remotes / jj edit) を出力するようにした (対処案 b)
  • bookmark 検出に依存しない --pr <PR番号> を追加し、引数解析を Mode enum へ整理した (対処案 c)
  • lib-jj-helpersquery_remote_bookmarks_at / BookmarkSearch / get_jj_bookmarks_with_remote_fallback を追加 (既存 API は不変)
  • 800 行ガイドラインに触れたため lib.rsbookmarks.rs / workspace.rs へ分割 (lib.rs は再エクスポートのファサード、呼び出し側のパスは不変)

Context

Why: bot が作った PR を人間がマージする経路 (ADR-072 の夜間ループ) では、PR の head が claude/nightly-163@origin のような リモート専用 bookmark しか持たない。fetch しただけの bookmark はローカルに作られない (jj の git.auto-local-bookmark 既定値) ため、ローカル bookmark だけを見ていた PR 検出が空振りし、pnpm merge-pr が「PR が見つかりません」で exit 1 していた。

Trigger: #381 のマージで実測 (2026-08-10)。回避策の jj bookmark track は非自明で、採用率測定のため夜間 PR をマージするたびに要求される。さらに gh pr mergeADR-013 の guard でブロックされるため、ブロックされる経路と動かない経路しかない状態になっていた。

Scope decision:

  • 対処案 (a)(b)(c) を全部入れた。(c) は「逃げ道が無い」という問題記述そのものに効くため、(a) だけでは構造的な穴が残る
  • 順位 386 (bookmark が探索 revset より深い) は含めない。共有ヘルパーの探索方式自体を変える別作業 (Effort M / 3 クレート回帰確認) で、独立に進められる
  • リモートへのフォールバックは 新 API を明示的に呼んだ場合にのみ起こる。既定の探索挙動は変えていないため、同じヘルパーを使う push-runner / pr-monitor に回帰が起きない (ADR-024)
  • BookmarkSearchLocal / RemoteOnly を型で区別した。bookmark を 書き換える 経路 (push-runner の bookmark 前進など) がリモート専用 bookmark を対象にしてはならないため
  • PR サイズゲートを PR_SIZE_CHECK_OVERRIDE=1 で override した。diff 2203 行のうち約 1700 行は 800 行 linter に強制された lib.rs の移動で、実質のレビュー対象は約 500 行。分割しても移動のみの PR が単独で約 1900 行になり閾値を超えるため、分割では解決しない (2026-08-11 ユーザー判断)
  • 移動したファイル内で挙動を変えたのは strip_windows_verbatim_prefix の UNC 対応 1 箇所のみ (レビュー指摘、下記 Review rounds)

Validation

  • cargo test --workspace: 全 crate green (lib-jj-helpers 51 pass / cli-merge-pipeline 71 pass)
  • cargo test --workspace -- --ignored --test-threads=1: 23 pass (実 jj を spawn する統合テスト)
  • cargo clippy --workspace --all-targets: 警告 0
  • pnpm lint:docs / markdownlint: 0 error
  • pre-push review (takt): verdict=APPROVE (DRY 指摘の修正後に再実行、2026-08-11)
  • 実 jj 回帰テスト追加: clone 後に origin へ bookmark を作り fetch すると feat/x@origin [new] untracked となりローカル bookmark が作られない、という jj 0.42.0 の実挙動を再現し、従来 API は空 / 新 API は RemoteOnly(["feat/x"]) を返すことを固定
  • 実 exe smoke test: 引数エラー 4 パターン (exit 2)、bookmark 不在時の復旧手順出力 (exit 1)、リモート専用 bookmark 状態からの bookmark 解決成功をプローブリポジトリで確認
  • cargo fmt は全体実行していない (順位 411 の通り無関係な差分を生むため)。新規記述行のみ --check の指摘に手で合わせた

Review rounds

pre-push review (takt): 3 回実行し最終 verdict=APPROVE。指摘して修正したもの:

  • get_jj_bookmarks_with_remote_fallbackselect_with_remote_fallback を再実装していた → 委譲に変更 (DRY)
  • 順位 412 のスレッドで「workspace.rs は挙動を 1 行も変えていない」と書いたが、同 PR で UNC 分岐を入れており矛盾していた → 記述を線引きの説明に訂正

CodeRabbit (Minor 5 件): 3 件修正 / 2 件は根拠つきで見送り (スレッドに返信済み)。

指摘 扱い
PR 番号 0 を引数エラーとして拒否 修正 (--pr 0 / --feedback-only 0 が exit 2)。通すと gh pr view 0 の失敗が警告に化けてマージ試行まで進む
lib.rs の再エクスポート説明が実際より広い (pipeline_lock は非再エクスポート) 修正
UNC verbatim prefix (\\?\UNC\) を一律に剥がすと不正なパスになる 修正 + 純関数テスト 3 件追加
ADR-013 の「2 段」表記を 3 段に直せ 見送り (false positive)gh pr view は今も検出 1 段目に残っており、「2 段」はローカル→リモートの軸で revset の梯子 (@/@-/@--) とは直交する。両段とも BOOKMARK_SEARCH_REVSETS を渡している
resolve_main_workspace_root の colocated 経路も canonicalize 見送り。doc comment が意図的な設計として明記しており caller 3 箇所の検証が要る。現行 caller に破綻経路も見当たらない → 順位 412 へ登録

Follow-up (別 todo へ登録済み)

  • 順位 412: resolve_main_workspace_root の colocated 経路と file 経路で正規化の粒度が違う (💎 Tier 3)
  • 順位 413: CwdRestore Drop guard が 8 定義 / 6 ファイルに複製され、ADR-025 自身が定めた「2 例目で lib-test-helpers へ統合」トリガーと再評価期限 (2026-07-31) を超過している (🔧 Tier 2)

References

@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: 5347cd8f-1351-4691-bf2c-0fa1254f149c

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

lib-jj-helpersをモジュール分割し、ローカル・リモートbookmark探索とworkspace解釈を追加した。merge pipelineは--pr指定、PR検出フォールバック、失敗診断を処理する。

Changes

merge pipeline PR検出

Layer / File(s) Summary
bookmark探索とフォールバック
src/lib-jj-helpers/src/bookmarks.rs
bookmark出力を解析し、trunk bookmarkを除外する。@@-@--を順に探索する。ローカル未検出時はリモートbookmarkを探索し、BookmarkSearchで結果を区別する。
workspace解釈とAPIファサード
src/lib-jj-helpers/src/workspace.rs, src/lib-jj-helpers/src/lib.rs, docs/adr/adr-024-shared-jj-helpers-library.md
workspace layoutからGitディレクトリとメインworkspace rootを解決する。共有ヘルパーを責務別モジュールへ分割し、既存APIと新APIを再エクスポートする。
PR番号の検出
src/cli-merge-pipeline/src/github.rs
PR検出をResult<u64, PrLookupFailure>へ変更する。gh pr view、ローカルbookmark、リモートbookmark、PR state検索の順で検出する。
CLI引数とpipeline分岐
src/cli-merge-pipeline/src/main.rs, src/cli-merge-pipeline/src/pipeline.rs
--pr--feedback-onlyを共通解析する。--pr指定時はbookmark検出を省略する。検出失敗時は検索結果に応じた復旧手順を出力する。
設計記録と完了記録
docs/adr/adr-013-merge-pipeline.md, docs/harness-improvement-plan.md, docs/todo-summary2.md, docs/todo21.md
PR検出の設計、共有ヘルパーへの参照、関連TODOの完了、bookmark APIの参照先を更新する。

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant CLI
  participant Pipeline
  participant Github
  participant JJHelpers
  participant gh
  CLI->>Pipeline: run_pipeline(pr_override)
  alt --pr指定あり
    Pipeline->>Pipeline: PR番号を使用
  else --pr指定なし
    Pipeline->>Github: detect_pr_number()
    Github->>gh: gh pr view
    Github->>JJHelpers: bookmark検索
    JJHelpers-->>Github: ローカルまたはリモートbookmark
    Github->>gh: bookmarkのPRを検索
    gh-->>Github: PR番号
    Github-->>Pipeline: 検出結果
  end
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルは、夜間PRのremote専用bookmark検出と--pr追加という主要変更を明確かつ簡潔に示しています。
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/merge-pr-remote-bookmark

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 / CodeRabbit review in progress / request check skipped。失敗 check なし。mergeStateStatus は BLOCKED(必須チェック未完了によるものと推測、review 起因ではない)
  • レビュー状況: CodeRabbit はレビュー処理中("Currently processing new changes..." のプレースホルダーコメントのみ、findings 未生成)。人間レビュー・他 bot レビューともに 0 件。インラインコメントも 0 件
  • Verdict: approved(現時点で取得可能な findings が 0 件のため。CodeRabbit のレビュー未着分は待機せず、現状の情報のみで判定)

Applicable Findings (Critical / High / Major)

該当なし(findings 未生成)

Applicable Findings (Medium 以下)

該当なし

Filtered (not applicable)

該当なし

次のアクション

  • CodeRabbit のレビュー完了後に新規 findings が付与された場合、本 workflow の次回起動(issue_comment イベント)で再分析される想定。今回は待機不要。
  • 差分概要: 11 ファイル変更。主眼は src/lib-jj-helpers の分割リファクタ(lib.rs -744/+25、新規 bookmarks.rs +601、workspace.rs +434)と、cli-merge-pipeline 側での夜間 PR remote 専用ブックマーク検出 + --pr フォールバック追加(github.rs +63/-51、main.rs +92/-30、pipeline.rs +49/-9)。ADR-013 / ADR-024 を追記更新、docs/todo21.md / todo-summary2.md を整理。CI (rust ubuntu/windows) の完走を待ってからマージ判断を推奨。
  • CI 完走後に rust ビルド/テストが green であることを人間またはローカルセッションで確認してからマージすること。

@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

🧹 Nitpick comments (1)
src/lib-jj-helpers/src/bookmarks.rs (1)

503-601: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

統合テストが cwd を変更します。実行条件の逸脱に対する防御を検討してください。

enterstd::env::set_current_dir でプロセス全体の cwd を変更します。CwdRestoreDrop でパニック時も復元されるため、単独実行では安全です。ただし --test-threads=1 を付けずに --ignored を実行すると、他テストと cwd を共有して不定な失敗になります。#[ignore] の文言で運用を指示している点は妥当です。より堅くするには、query_bookmarks_at / query_remote_bookmarks_at に作業ディレクトリを渡せる内部関数を追加し、cwd 変更を不要にする方法があります。

現状は許容範囲です。将来 cwd 依存のテストが増える場合に検討してください。

🤖 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 `@src/lib-jj-helpers/src/bookmarks.rs` around lines 503 - 601, No code change
is required; the cwd restoration via CwdRestore already makes this ignored
integration test safe when run alone. If strengthening it, update
query_bookmarks_at and query_remote_bookmarks_at through internal
directory-aware helpers so remote_jj::remote_only_bookmark_is_found_via_fallback
can pass clone explicitly without changing the process-wide cwd.
🤖 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-013-merge-pipeline.md`:
- Around line 50-51: Update the PR detection documentation to match the current
three-stage bookmark search order (@, `@-`, `@--`), excluding gh pr view from the
flow. In docs/adr/adr-013-merge-pipeline.md lines 50-51, remove or correct the
outdated gh pr list-based description; update docs/adr/adr-013-merge-pipeline.md
line 63 and docs/harness-improvement-plan.md line 191 from “2 stages” to “3
stages,” ensuring all descriptions include `@-`.

In `@src/cli-merge-pipeline/src/main.rs`:
- Around line 37-50: parse_pr_flag で解析した PR 番号が 0 の場合を無効入力として拒否し、既存の引数エラー形式で Err
を返してください。通常の正の PR 番号の処理は維持し、CLI の --pr 0 と --feedback-only 0 が終了コード 2
になるテストを追加してください。

In `@src/lib-jj-helpers/src/lib.rs`:
- Around line 20-22: lib.rs のクレートドキュメントにある再エクスポート説明を、全モジュールではなく bookmarks と
workspace の公開 API のみがクレート直下へ再エクスポートされる内容に修正してください。pipeline_lock の API
が直下から利用できると誤解されない表現にし、既存のパス例は対象範囲に合わせて維持または調整してください。

In `@src/lib-jj-helpers/src/workspace.rs`:
- Around line 118-124: Update strip_windows_verbatim_prefix to handle the UNC
verbatim form \\?\UNC\server\share\... before the generic prefix removal,
converting it to the valid UNC path \\server\share\.... Preserve the existing
behavior for non-UNC verbatim paths and paths without the prefix.
- Around line 87-104: Update resolve_main_workspace_root so the colocated
.jj/repo-directory branch canonicalizes workspace_root before returning it,
while preserving the existing Option<PathBuf> return type. Use the same
strip_windows_verbatim_prefix handling as the file-based main_root branch, and
leave canonicalization failure as None so the caller’s existing fallback remains
responsible for recovery.

---

Nitpick comments:
In `@src/lib-jj-helpers/src/bookmarks.rs`:
- Around line 503-601: No code change is required; the cwd restoration via
CwdRestore already makes this ignored integration test safe when run alone. If
strengthening it, update query_bookmarks_at and query_remote_bookmarks_at
through internal directory-aware helpers so
remote_jj::remote_only_bookmark_is_found_via_fallback can pass clone explicitly
without changing the process-wide cwd.
🪄 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: c2048373-1e93-4ec6-a1b4-b233439213d8

📥 Commits

Reviewing files that changed from the base of the PR and between 849caae and f4bd203.

📒 Files selected for processing (11)
  • docs/adr/adr-013-merge-pipeline.md
  • docs/adr/adr-024-shared-jj-helpers-library.md
  • docs/harness-improvement-plan.md
  • docs/todo-summary2.md
  • docs/todo21.md
  • src/cli-merge-pipeline/src/github.rs
  • src/cli-merge-pipeline/src/main.rs
  • src/cli-merge-pipeline/src/pipeline.rs
  • src/lib-jj-helpers/src/bookmarks.rs
  • src/lib-jj-helpers/src/lib.rs
  • src/lib-jj-helpers/src/workspace.rs
💤 Files with no reviewable changes (1)
  • docs/todo-summary2.md

Comment thread docs/adr/adr-013-merge-pipeline.md
Comment thread src/cli-merge-pipeline/src/main.rs
Comment thread src/lib-jj-helpers/src/lib.rs
Comment thread src/lib-jj-helpers/src/workspace.rs
Comment thread src/lib-jj-helpers/src/workspace.rs
@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 / CodeRabbit pass (review completed) / request skipping / analyze pending(本 workflow 自身)。失敗 check なし。mergeStateStatus は BLOCKED(mergeable は MERGEABLE、必須チェック未完了によるものと推測)
  • レビュー状況: CodeRabbit が COMMENTED レビューを新規投稿(2026-08-10T15:52:28Z、直前の analysis コメント 15:50:01 より後)。Actionable comments 5 件 + nitpick 1 件。人間レビュー・他 bot レビューは 0 件
  • Verdict: user_decision(applicable な指摘はすべて Minor。Critical/High/Major なし)

Applicable Findings (Critical / High / Major)

該当なし

Applicable Findings (Medium 以下)

# File (Line) Reviewer Issue Recommended Action
1 src/cli-merge-pipeline/src/main.rs (L37-50) CodeRabbit parse_pr_flag が PR 番号 0 を有効な u64 として受理し、--pr 0 / --feedback-only 0 が無効な PR を対象に実行されうる 解析時に 0 を拒否し Err を返す。--pr 0 / --feedback-only 0 が終了コード 2 になるテストを追加
2 src/lib-jj-helpers/src/lib.rs (L20-22) CodeRabbit クレートドキュメントの再エクスポート説明が実際の範囲(bookmarks/workspace のみ)より広く、pipeline_lock も直下から使えると誤解される 対象モジュールを bookmarks/workspace に限定した記述へ修正
3 src/lib-jj-helpers/src/workspace.rs (L87-104) CodeRabbit resolve_main_workspace_root の colocated 経路が canonicalize されず、weekly_review/monthly_review の last-run state 比較でパス文字列不一致が起きうる colocated 分岐でも canonicalize + strip_windows_verbatim_prefix を適用(既存の Option<PathBuf> 型は維持)
4 src/lib-jj-helpers/src/workspace.rs (L118-124) CodeRabbit strip_windows_verbatim_prefix が UNC 形式 (\\?\UNC\server\share\...) を正しく変換せず GIT_DIR に不正パスが設定されうる UNC 形式を \\server\share\... へ変換する分岐を汎用 prefix 除去より先に追加

Filtered (not applicable)

# File (Line) Issue Filter Reason
1 docs/adr/adr-013-merge-pipeline.md (L50-51, 関連: L63 / docs/harness-improvement-plan.md L191) PR 検出の bookmark 探索段数表記が実装(@@-@-- の3段)と不一致 Scope mismatch: docs/adr/ は read-only zone(ADR 記述の修正可否は人間判断)
2 src/lib-jj-helpers/src/bookmarks.rs (L503-601, nitpick) 統合テストが std::env::set_current_dir でプロセス全体の cwd を変更する(--test-threads=1 前提の脆さ) CodeRabbit 自身が「現状は許容範囲」と判断・対応不要と明記(将来の検討事項として言及のみ)

次のアクション

  • 4 件の Minor 指摘(PR番号 0 バリデーション、doc コメント範囲、workspace root canonicalize、UNC prefix バグ)は severity が Minor のため自動 fix 対象外。人間またはローカルセッションでの対応要否判断を推奨
  • CI(rust ubuntu/windows)は既に green。mergeStateStatus の BLOCKED 解消(必須チェック完了)を待ってからマージ判断すること

@aloekun
aloekun force-pushed the fix/merge-pr-remote-bookmark branch from f4bd203 to c9f0151 Compare August 10, 2026 16:09
@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 / CodeRabbit pass(incremental review disabled のためこの通知では新規レビューなし)。fix check は fail 表示だが、これは本 pr-monitor workflow の直前の起動 (run 31407634274) が「より優先度の高い後続リクエストが存在する」ため concurrency group により自己キャンセルされたもので、rust ビルドやコード品質の失敗ではない。analyze は本分析自身(実行中)。mergeStateStatus は BLOCKED(mergeable は MERGEABLE。reviewDecision が空で承認レビューが 0 件のため、ブランチ保護の承認要件未達によるものと推測)
  • レビュー状況: 前回分析(15:54:41 投稿)以降、CodeRabbit の当初 COMMENTED レビュー(15:52:28, Actionable 5 + nitpick 1)に対して PR 作成者 aloekun と CodeRabbit の間でインラインスレッド上の技術的対話が発生(16:01:59〜16:11:58, 空 body の COMMENTED レビュー×5 件はこの対話の入れ物)。対話の結果、前回報告した Minor 指摘 4 件のステータスが変化:
    • main.rs PR番号 0 バリデーション → コードで修正済み(diff で Ok(0) | Err(_) => Err(invalid()) を確認)
    • lib.rs 再エクスポート説明 → コードで修正済みbookmarks/workspace のみ再エクスポート、pipeline_lock は対象外と明記済み)
    • workspace.rs UNC verbatim prefix → コードで修正済み(UNC 分岐追加 + テスト追加を diff で確認。作成者が一度「変更なし」と誤答した後に自己訂正し、CodeRabbit も本 PR 内修正が妥当と確認済み)
    • workspace.rs colocated canonicalize → 作成者が「移動 PR の純粋性を守るため本 PR では見送り、順位 412 の別 todo へ」と説明し、CodeRabbit も具体的な破綻経路が無いことに同意して撤回(<review_comment_withdrawn>
  • Verdict: approved(未解決の applicable な指摘が 0 件。旧 Minor 指摘はすべて修正済みまたは合意の上でフォローアップへ)

Applicable Findings (Critical / High / Major)

該当なし

Applicable Findings (Medium 以下)

該当なし(前回報告の 4 件はすべて解消— 上記参照)

Filtered (not applicable)

# File (Line) Issue Filter Reason
1 docs/adr/adr-013-merge-pipeline.md (L50-51, 関連: L63 / docs/harness-improvement-plan.md L191) PR 検出の bookmark 探索段数表記が実装と不一致 Scope mismatch: docs/adr/ は read-only zone。加えて作成者が「2段」は revset 梯子とは別軸(ローカル→リモート追跡)であり gh pr view も現役と技術的根拠付きで反論(false positive 主張)。CodeRabbit 未返信で対立は未解決だが、いずれにせよ本 monitor のスコープ外

次のアクション

  • mergeStateStatus の BLOCKED(未承認)解消のため、人間レビュアーによる approve を推奨。CI・CodeRabbit findings 側は実質的にクリア。
  • docs/adr/adr-013-merge-pipeline.md の「段数」表記を巡る CodeRabbit ⇄ 作成者の技術的対立は未決着(CodeRabbit 未返信)。ADR 記述の要修正性については人間が最終判断すること。

bot が作った PR を人間がマージする経路 (ADR-072 夜間ループ) では PR の head が
remote 専用 bookmark しか持たず、ローカル bookmark だけを見ていた PR 検出が空振り
していた (#381 のマージで実測)。gh pr merge は ADR-013 の guard でブロックされる
ため、ブロックされる経路と動かない経路しかない状態になっていた。

- PR 検出をローカル -> リモート追跡 bookmark の 2 段にする (順位 397 対処案 a)
- 失敗時に --pr / bookmark 確認 / jj edit の実行可能な手順を出す (対処案 b)
- bookmark 非依存の --pr <番号> を追加する (対処案 c)
- lib-jj-helpers を bookmarks.rs / workspace.rs へ分割 (800 行ガイドライン)

ローカルを全 revset 走査してからリモートへ移る二段構成にしてあり、ローカル
bookmark が見つかる状況では従来と結果が一致するため、共有ヘルパーを使う
push-runner / pr-monitor への回帰は起きない。

順位 397 / ADR-013 / ADR-024
@aloekun
aloekun force-pushed the fix/merge-pr-remote-bookmark branch from c9f0151 to 70eaa70 Compare August 10, 2026 16:21
@aloekun
aloekun merged commit b74a4e2 into master Aug 10, 2026
5 of 9 checks passed
@aloekun
aloekun deleted the fix/merge-pr-remote-bookmark branch August 10, 2026 17:32
aloekun added a commit that referenced this pull request Aug 11, 2026
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、
実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。

## 実走観測の記録

- ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の
  9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で
  止まっている (拒否も success になる) ことを事実として記録する
- ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する
- 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく
  「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは
  解決しない可能性がある点を併記する

## 計画書の整理 (ADR-073 新設)

- 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に
  含め、WP 外の派生は含めない) を ADR-073 として切り出す
- WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする
- ローカル実行時の jj workspace 注記を ADR-072 へ移す

## post-merge feedback 採否 (順位 414-432)

- 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした
  (実物と照合して確認)
- 採用 19 件を系統 A-G + セッション由来へ分類して登録する
- SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が
  実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も
  ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例
  として記録し、順位 403 の対象へ含めるよう申し送る

## 付随

- todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する
- todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す
- cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する

ADR-073 / 順位 414-432
aloekun added a commit that referenced this pull request Aug 11, 2026
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、
実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。

## 実走観測の記録

- ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の
  9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で
  止まっている (拒否も success になる) ことを事実として記録する
- ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する
- 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく
  「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは
  解決しない可能性がある点を併記する

## 計画書の整理 (ADR-073 新設)

- 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に
  含め、WP 外の派生は含めない) を ADR-073 として切り出す
- WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする
- ローカル実行時の jj workspace 注記を ADR-072 へ移す

## post-merge feedback 採否 (順位 414-432)

- 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした
  (実物と照合して確認)
- 採用 19 件を系統 A-G + セッション由来へ分類して登録する
- SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が
  実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も
  ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例
  として記録し、順位 403 の対象へ含めるよう申し送る

## 付随

- todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する
- todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す
- cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する

ADR-073 / 順位 414-432
aloekun added a commit that referenced this pull request Aug 11, 2026
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、
実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。

## 実走観測の記録

- ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の
  9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で
  止まっている (拒否も success になる) ことを事実として記録する
- ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する
- 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく
  「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは
  解決しない可能性がある点を併記する

## 計画書の整理 (ADR-073 新設)

- 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に
  含め、WP 外の派生は含めない) を ADR-073 として切り出す
- WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする
- ローカル実行時の jj workspace 注記を ADR-072 へ移す

## post-merge feedback 採否 (順位 414-432)

- 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした
  (実物と照合して確認)
- 採用 19 件を系統 A-G + セッション由来へ分類して登録する
- SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が
  実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も
  ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例
  として記録し、順位 403 の対象へ含めるよう申し送る

## 付随

- todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する
- todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す
- cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する

ADR-073 / 順位 414-432
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