Skip to content

docs(adr): セッション 247510ea 由来の設計を ADR 集約 (ADR-028 新設 + ADR-021/024/019 更新) - #56

Merged
aloekun merged 1 commit into
masterfrom
docs/adr-pr-a
Apr 18, 2026
Merged

docs(adr): セッション 247510ea 由来の設計を ADR 集約 (ADR-028 新設 + ADR-021/024/019 更新)#56
aloekun merged 1 commit into
masterfrom
docs/adr-pr-a

Conversation

@aloekun

@aloekun aloekun commented Apr 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • ADR-028 (新規): 外部可視成果物の生成コマンド (pnpm create-pr / pnpm merge-pr 等) の実行ゲート
  • ADR-021 (原則 5 追加): bookmark 検出標準 (BOOKMARK_SEARCH_REVSETS / TRUNK_BOOKMARKS) + option A/B/C 比較
  • ADR-024 (本採用に格上げ): 3 箇所 port 完了 (cli-push-runner / cli-merge-pipeline / cli-pr-monitor) により早期達成
  • ADR-019 (制約・可換性追記): CodeRabbit 無料枠 1h 3 回制約、ハイブリッド再定義、M5 不採用論拠
  • CLAUDE.md: ADR-028 追加、ADR-024 の試験運用マーカー除去
  • docs/todo.md: PR-A タスク削除 + 後続タスクをリナンバー (PR-B/C/D → feat(logger): Logger拡張・JSTタイムスタンプ追加・スクリプトTS化 #7/8/9)

Context

docs/todo.md の「セッション 247510ea 由来: 整備タスク群 (PR-A〜PR-D)」のうち PR-A (ADR 集約) を実施。
後続 PR-B (Ask ルール + body helper) / PR-C (jj-helpers 抽出) / PR-D (prepare-pr skill) が ADR 番号を引用できる形にする起点 PR。

Test plan

  • pnpm push (quality_gate + pre-push-review) が APPROVE
  • cspell 警告は既存 ADR と同じ技術用語 (takt / revset / repush) のみ、severity Information
  • CodeRabbit レビュー (PR 作成後自動実行)

References

Summary by CodeRabbit

  • Documentation
    • 複数のアーキテクチャ決定記録(ADR)を更新し、jjヘルパーライブラリの採用状況、コード審査ハイブリッドポリシー、ブックマーク検出原則を明確化
    • 新しい実行ゲート仕様に関するドキュメントを追加
    • 開発チームのタスク管理と優先度順序を整理

注記: この更新は内部ドキュメント変更のみで、ユーザーが使用する機能に変更はありません。

@coderabbitai

coderabbitai Bot commented Apr 18, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@aloekun has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 39 minutes and 18 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 39 minutes and 18 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a02875f1-f82d-4201-8c27-23ac782f9118

📥 Commits

Reviewing files that changed from the base of the PR and between 4348b86 and 89147be.

📒 Files selected for processing (6)
  • CLAUDE.md
  • docs/adr/adr-019-coderabbit-review-hybrid-policy.md
  • docs/adr/adr-021-jj-change-detection-principles.md
  • docs/adr/adr-024-shared-jj-helpers-library.md
  • docs/adr/adr-028-pnpm-create-pr-gate.md
  • docs/todo.md
📝 Walkthrough

Walkthrough

複数のアーキテクチャ決定記録(ADR)とTODOドキュメントを更新した。ADR-024を試験運用から正式採用に移行し、ADR-021・ADR-019を拡張し、新たにADR-028を追加した。併せてプロジェクトのタスク優先度と実装計画を再整理した。

Changes

Cohort / File(s) Summary
Documentation Index
CLAUDE.md
ADR-024を試験運用から正式採用に昇格させ、新規ADR-028エントリを追加。
コードレビューポリシーADR
docs/adr/adr-019-coderabbit-review-hybrid-policy.md
2026-04-19時点の運用追記を3件追加:CodeRabbit無料枠の制約受け入れ、「ハイブリッド」の再定義(複数プラグイン対応)、レート制限耐性機能の非実装決定。
ブックマーク検出原則拡張
docs/adr/adr-021-jj-change-detection-principles.md
「原則5」を追加し、標準化されたブックマーク検出アプローチを定義:リビセット優先度リスト、trunkブックマーク許可リスト、3段階検出フロー。
共通jjヘルパーライブラリADR
docs/adr/adr-024-shared-jj-helpers-library.md
タイトルと状態を正式採用に変更。ADR-021実装としての位置付けを明確化し、採用根拠(3クレート間の利用ポート)と拡張API(bookmark検出定数・関数、StderrMode)を記載。
PR作成ゲート新規ADR
docs/adr/adr-028-pnpm-create-pr-gate.md
外部可視成果物生成コマンド(PR作成/マージ)の実行ゲート化を新規定義:Claude自動メモリによるガイダンス、.claude/settings.jsonpermissions.askによる硬い制御、既存preset_gh_pr_create_guardとの連携。
タスク計画・優先度整理
docs/todo.md
セッション最優先タスク(PR-B〜PR-D)をPR粒度で分割記載。各タスクの依存関係、推奨実行順序、CodeRabbitレート制限対策(push間隔)を明示。

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR タイトルは、セッション由来の設計を ADR に集約する主要な変更内容を正確に反映しており、新規 ADR-028 の設立と既存 ADR 複数の更新を簡潔にまとめている。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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 and usage tips.

@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: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/adr/adr-028-pnpm-create-pr-gate.md`:
- Around line 59-60: The doc contains contradictory descriptions of precedence
between permissions.ask and permissions.allow; decide which behavior is correct
and make the text consistent: if ask should override allow, update the sentence
referencing permissions.allow to state that permissions.ask takes precedence and
adjust any examples and the explanation around the auto-mode/permission prompt
accordingly; if allow should override ask, change the sentence that claims ask
is prioritized (and the auto-mode behavior) to reflect that allow disables ask,
and update both the earlier paragraph referencing
permissions.ask/permissions.allow and the later paragraph (the block around the
other contradictory description) so all mentions and examples consistently use
the chosen precedence for permissions.ask and permissions.allow. Ensure both
occurrences (the earlier and the later paragraph) and any examples are aligned
with the chosen rule.
- Around line 159-160: Update the PR-D task reference in the ADR text so it
matches the current TODO numbering: change the mention "PR-D (docs/todo.md `#10`)"
to the correct "PR-D (docs/todo.md `#9`)" and ensure the surrounding description
("prepare-pr skill で「ドラフト提示 → 明示承認 → 実行」フローを標準化") still refers to the same PR-D
identifier.
🪄 Autofix (Beta)

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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: bd7aaf3f-3c3b-4069-b8c2-9b2f4b91079b

📥 Commits

Reviewing files that changed from the base of the PR and between b7bca76 and 4348b86.

📒 Files selected for processing (6)
  • CLAUDE.md
  • docs/adr/adr-019-coderabbit-review-hybrid-policy.md
  • docs/adr/adr-021-jj-change-detection-principles.md
  • docs/adr/adr-024-shared-jj-helpers-library.md
  • docs/adr/adr-028-pnpm-create-pr-gate.md
  • docs/todo.md

Comment thread docs/adr/adr-028-pnpm-create-pr-gate.md Outdated
Comment thread docs/adr/adr-028-pnpm-create-pr-gate.md Outdated
… 更新)

docs/todo.md の「セッション 247510ea 由来: 整備タスク群 (PR-A)」を反映。

- ADR-028 (新規): 外部可視成果物の生成コマンド (pnpm create-pr / pnpm merge-pr 等) の実行ゲート
- ADR-021 (原則 5 追加): bookmark 検出標準 (BOOKMARK_SEARCH_REVSETS / TRUNK_BOOKMARKS) + option A/B/C 比較
- ADR-024 (本採用に格上げ): 3 箇所 port 完了 (cli-push-runner / cli-merge-pipeline / cli-pr-monitor) により早期達成
- ADR-019 (制約・可換性追記): CodeRabbit 無料枠 1h 3 回制約、ハイブリッド再定義、M5 不採用論拠
- CLAUDE.md: ADR-028 追加、ADR-024 試験運用マーカー除去
- docs/todo.md: PR-A タスク削除 + 後続リナンバー (PR-B/C/D → #7/8/9)

refs: PR #54, PR #55, セッション 247510ea-3f24-4b87-8f68-3c860e1b1b4e
@aloekun
aloekun merged commit 8182ad9 into master Apr 18, 2026
1 check passed
@aloekun
aloekun deleted the docs/adr-pr-a branch April 18, 2026 17:34
aloekun added a commit that referenced this pull request Apr 18, 2026
…プト化 + prepare-pr-body helper 新設 (PR-B)

ADR-028 の二次防衛層を実装。`permissions.ask` の "ask > allow" precedence により、auto mode でも毎回確認プロンプトが発火するようになる。

- `.claude/settings.json`: `permissions.ask` に 4 パターン追加
  - `Bash(pnpm create-pr*)`, `Bash(pnpm merge-pr*)`
  - `Bash(*cli-pr-monitor.exe*)`, `Bash(*cli-merge-pipeline.exe*)`
- `.claude/settings.local.json.template`: `pnpm create-pr` / `merge-pr` の allow 登録を削除 (ADR-028 の二層防衛と矛盾する誤解を招くため)
- `scripts/prepare-pr-body.ps1` 新規: stdin から PR body を受け取り `.tmp-pr-body.md` に UTF-8 (BOM なし) で書き出す helper。`-Cleanup` で削除
- `package.json`: `prepare-pr-body` / `prepare-pr-body:cleanup` スクリプト追加
- `.gitignore`: `.tmp-pr-body.md` を除外 (一時ファイル)
- `docs/adr/adr-028-pnpm-create-pr-gate.md`: PR-B 実装済みに反映、PR-D 参照番号を更新
- `docs/todo.md`: PR-B タスク削除 + 後続リナンバー (PR-C → #7, PR-D → #8)

smoke test:
- `echo "日本語" | pnpm prepare-pr-body` で UTF-8 が保持されることを確認
- `pnpm prepare-pr-body:cleanup` で `.tmp-pr-body.md` 削除動作を確認

refs: ADR-028, PR #56 (PR-A, ADR 集約)
aloekun added a commit that referenced this pull request Apr 18, 2026
…プト化 + prepare-pr-body helper 新設 (PR-B)

ADR-028 の二次防衛層を実装。`permissions.ask` の "ask > allow" precedence により、auto mode でも毎回確認プロンプトが発火するようになる。

- `.claude/settings.json`: `permissions.ask` に 4 パターン追加
  - `Bash(pnpm create-pr*)`, `Bash(pnpm merge-pr*)`
  - `Bash(*cli-pr-monitor.exe*)`, `Bash(*cli-merge-pipeline.exe*)`
- `.claude/settings.local.json.template`: `pnpm create-pr` / `merge-pr` の allow 登録を削除 (ADR-028 の二層防衛と矛盾する誤解を招くため)
- `scripts/prepare-pr-body.ps1` 新規: stdin から PR body を受け取り `.tmp-pr-body.md` に UTF-8 (BOM なし) で書き出す helper。`-Cleanup` で削除
- `package.json`: `prepare-pr-body` / `prepare-pr-body:cleanup` スクリプト追加
- `.gitignore`: `.tmp-pr-body.md` を除外 (一時ファイル)
- `docs/adr/adr-028-pnpm-create-pr-gate.md`: PR-B 実装済みに反映、PR-D 参照番号を更新
- `docs/todo.md`: PR-B タスク削除 + 後続リナンバー (PR-C → #7, PR-D → #8)

smoke test:
- `echo "日本語" | pnpm prepare-pr-body` で UTF-8 が保持されることを確認
- `pnpm prepare-pr-body:cleanup` で `.tmp-pr-body.md` 削除動作を確認

refs: ADR-028, PR #56 (PR-A, ADR 集約)
aloekun added a commit that referenced this pull request Apr 18, 2026
…プト化 + prepare-pr-body helper 新設 (PR-B) (#57)

ADR-028 の二次防衛層を実装。`permissions.ask` の "ask > allow" precedence により、auto mode でも毎回確認プロンプトが発火するようになる。

- `.claude/settings.json`: `permissions.ask` に 4 パターン追加
  - `Bash(pnpm create-pr*)`, `Bash(pnpm merge-pr*)`
  - `Bash(*cli-pr-monitor.exe*)`, `Bash(*cli-merge-pipeline.exe*)`
- `.claude/settings.local.json.template`: `pnpm create-pr` / `merge-pr` の allow 登録を削除 (ADR-028 の二層防衛と矛盾する誤解を招くため)
- `scripts/prepare-pr-body.ps1` 新規: stdin から PR body を受け取り `.tmp-pr-body.md` に UTF-8 (BOM なし) で書き出す helper。`-Cleanup` で削除
- `package.json`: `prepare-pr-body` / `prepare-pr-body:cleanup` スクリプト追加
- `.gitignore`: `.tmp-pr-body.md` を除外 (一時ファイル)
- `docs/adr/adr-028-pnpm-create-pr-gate.md`: PR-B 実装済みに反映、PR-D 参照番号を更新
- `docs/todo.md`: PR-B タスク削除 + 後続リナンバー (PR-C → #7, PR-D → #8)

smoke test:
- `echo "日本語" | pnpm prepare-pr-body` で UTF-8 が保持されることを確認
- `pnpm prepare-pr-body:cleanup` で `.tmp-pr-body.md` 削除動作を確認

refs: ADR-028, PR #56 (PR-A, ADR 集約)
aloekun added a commit that referenced this pull request Apr 18, 2026
cli-pr-monitor / cli-merge-pipeline / cli-push-runner の 3 クレートで重複していた bookmark 検出ロジックを ADR-024 (本採用) に従い `src/lib-jj-helpers/` に集約。

## 新クレート

- `src/lib-jj-helpers/` 新設 (ADR-012 命名規約、ADR-026 workspace 準拠)
- 公開 API:
  - 定数: `TRUNK_BOOKMARKS`, `BOOKMARK_SEARCH_REVSETS`
  - 関数: `is_trunk_bookmark`, `parse_bookmark_list_output`, `query_bookmarks_at`, `select_from_revsets`, `get_jj_bookmarks`
  - 型: `StderrMode { Silent, Piped(fn(&str)) }`
- 14 unit tests (fallback_log コールバック検証 2 件を新規追加)

## 設計方針

- **stderr ハンドリングを `StderrMode` で選択**: cli-pr-monitor は `Silent` (CI ログ汚染回避)、cli-merge-pipeline は `Piped(log_info)` (診断情報を出す)
- **log 関数は `fn(&str)` ポインタで注入**: 各クレート固有 prefix (`[post-pr-monitor]` / `[merge-pipeline]`) を崩さない
- **fallback_log は `Option<fn(&str)>`**: `@-` や `@--` で hit した場合のみ通知 (noise 抑制)

## 呼び出し側差し替え

- cli-pr-monitor (`util.rs`): `get_jj_bookmarks()` を lib 呼び出しに置換、重複テスト削除
- cli-merge-pipeline (`main.rs`): 同上、stderr は `Piped` で継続
- cli-push-runner (`push_jj_bookmark.rs`): `is_trunk_bookmark` のみ lib 借用、他ロジックは crate-local 保持 (`parse_bookmark_list_output` は `jj bookmark list` 出力用で semantics が異なる)

## 検証

- cargo test --workspace: 363 tests PASS (1 ignored)
- pnpm build:all: 全 9 exe ビルド成功
- cargo clippy: modified 4 クレートに warning なし
- 行数インパクト: +425 / -492 = net -67 行 (重複テスト集約効果)

## ADR 更新

- ADR-024: 実装フェーズを「実施済」に反映、`capture_commit_id` / `diff_is_empty` は将来 PR で段階的移設と明記
- ADR-021 原則 5: 「3 クレートで重複 → lib-jj-helpers に集約済」と完了反映
- ADR-028: PR-D 参照番号を #7 に更新 (PR-B/PR-C 完了で docs/todo.md がリナンバー)

refs: ADR-024, ADR-021, PR #56 (PR-A), PR #57 (PR-B), PR #54, PR #55
aloekun added a commit that referenced this pull request Apr 19, 2026
cli-pr-monitor / cli-merge-pipeline / cli-push-runner の 3 クレートで重複していた bookmark 検出ロジックを ADR-024 (本採用) に従い `src/lib-jj-helpers/` に集約。

## 新クレート

- `src/lib-jj-helpers/` 新設 (ADR-012 命名規約、ADR-026 workspace 準拠)
- 公開 API:
  - 定数: `TRUNK_BOOKMARKS`, `BOOKMARK_SEARCH_REVSETS`
  - 関数: `is_trunk_bookmark`, `parse_bookmark_list_output`, `query_bookmarks_at`, `select_from_revsets`, `get_jj_bookmarks`
  - 型: `StderrMode { Silent, Piped(fn(&str)) }`
- 14 unit tests (fallback_log コールバック検証 2 件を新規追加)

## 設計方針

- **stderr ハンドリングを `StderrMode` で選択**: cli-pr-monitor は `Silent` (CI ログ汚染回避)、cli-merge-pipeline は `Piped(log_info)` (診断情報を出す)
- **log 関数は `fn(&str)` ポインタで注入**: 各クレート固有 prefix (`[post-pr-monitor]` / `[merge-pipeline]`) を崩さない
- **fallback_log は `Option<fn(&str)>`**: `@-` や `@--` で hit した場合のみ通知 (noise 抑制)

## 呼び出し側差し替え

- cli-pr-monitor (`util.rs`): `get_jj_bookmarks()` を lib 呼び出しに置換、重複テスト削除
- cli-merge-pipeline (`main.rs`): 同上、stderr は `Piped` で継続
- cli-push-runner (`push_jj_bookmark.rs`): `is_trunk_bookmark` のみ lib 借用、他ロジックは crate-local 保持 (`parse_bookmark_list_output` は `jj bookmark list` 出力用で semantics が異なる)

## 検証

- cargo test --workspace: 363 tests PASS (1 ignored)
- pnpm build:all: 全 9 exe ビルド成功
- cargo clippy: modified 4 クレートに warning なし
- 行数インパクト: +425 / -492 = net -67 行 (重複テスト集約効果)

## ADR 更新

- ADR-024: 実装フェーズを「実施済」に反映、`capture_commit_id` / `diff_is_empty` は将来 PR で段階的移設と明記
- ADR-021 原則 5: 「3 クレートで重複 → lib-jj-helpers に集約済」と完了反映
- ADR-028: PR-D 参照番号を #7 に更新 (PR-B/PR-C 完了で docs/todo.md がリナンバー)

refs: ADR-024, ADR-021, PR #56 (PR-A), PR #57 (PR-B), PR #54, PR #55
aloekun added a commit that referenced this pull request Apr 19, 2026
cli-pr-monitor / cli-merge-pipeline / cli-push-runner の 3 クレートで重複していた bookmark 検出ロジックを ADR-024 (本採用) に従い `src/lib-jj-helpers/` に集約。

## 新クレート

- `src/lib-jj-helpers/` 新設 (ADR-012 命名規約、ADR-026 workspace 準拠)
- 公開 API:
  - 定数: `TRUNK_BOOKMARKS`, `BOOKMARK_SEARCH_REVSETS`
  - 関数: `is_trunk_bookmark`, `parse_bookmark_list_output`, `query_bookmarks_at`, `select_from_revsets`, `get_jj_bookmarks`
  - 型: `StderrMode { Silent, Piped(fn(&str)) }`
- 14 unit tests (fallback_log コールバック検証 2 件を新規追加)

## 設計方針

- **stderr ハンドリングを `StderrMode` で選択**: cli-pr-monitor は `Silent` (CI ログ汚染回避)、cli-merge-pipeline は `Piped(log_info)` (診断情報を出す)
- **log 関数は `fn(&str)` ポインタで注入**: 各クレート固有 prefix (`[post-pr-monitor]` / `[merge-pipeline]`) を崩さない
- **fallback_log は `Option<fn(&str)>`**: `@-` や `@--` で hit した場合のみ通知 (noise 抑制)

## 呼び出し側差し替え

- cli-pr-monitor (`util.rs`): `get_jj_bookmarks()` を lib 呼び出しに置換、重複テスト削除
- cli-merge-pipeline (`main.rs`): 同上、stderr は `Piped` で継続
- cli-push-runner (`push_jj_bookmark.rs`): `is_trunk_bookmark` のみ lib 借用、他ロジックは crate-local 保持 (`parse_bookmark_list_output` は `jj bookmark list` 出力用で semantics が異なる)

## 検証

- cargo test --workspace: 363 tests PASS (1 ignored)
- pnpm build:all: 全 9 exe ビルド成功
- cargo clippy: modified 4 クレートに warning なし
- 行数インパクト: +425 / -492 = net -67 行 (重複テスト集約効果)

## ADR 更新

- ADR-024: 実装フェーズを「実施済」に反映、`capture_commit_id` / `diff_is_empty` は将来 PR で段階的移設と明記
- ADR-021 原則 5: 「3 クレートで重複 → lib-jj-helpers に集約済」と完了反映
- ADR-028: PR-D 参照番号を #7 に更新 (PR-B/PR-C 完了で docs/todo.md がリナンバー)

refs: ADR-024, ADR-021, PR #56 (PR-A), PR #57 (PR-B), PR #54, PR #55
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