Skip to content

fix(telemetry): rollup snapshot 保持 + promote 判定を確定月に限定 (Phase C+D, ADR-062) - #337

Merged
aloekun merged 2 commits into
masterfrom
telemetry-snapshot-confirmed-month
Jul 31, 2026
Merged

fix(telemetry): rollup snapshot 保持 + promote 判定を確定月に限定 (Phase C+D, ADR-062)#337
aloekun merged 2 commits into
masterfrom
telemetry-snapshot-confirmed-month

Conversation

@aloekun

@aloekun aloekun commented Jul 31, 2026

Copy link
Copy Markdown
Owner

概要

月次レビュー dogfood 追加アクション C + D。判定候補(verdict)の 2 つの意味論的欠陥を修正する(同一 crate の意味論変更のため 1 PR にまとめる)。

C: rollup 確定時に月中最後の snapshot を保持

snapshot は集計実行時点の状態でしかなく、月次カデンツでは月 M の確定を M+1 の初回実行が行う。旧 resolve_month は確定する全月に実行時点(M+1)の snapshot を刻んでいたため、月 M 中ずっと無効化していた機構を M+1 で再有効化すると「M は enabled + 発火 0」と確定し、無効化月を誤って promote streak に算入し得た。

  • resolve_snapshot を新設し確定 rollup に「月中最後の観測」を保持
    • 当月: 毎回現在 snapshot / 過去月で prev(月中の未確定 rollup)あり: prev.snapshot 保持 / prev なし: 現在 snapshot で代用
  • snapshot が証明するのは (a) 月中実行があればその最後の時点、(b) 無ければ確定時点の状態 に精緻化
  • リグレッション固定テスト 3 件(disabled 月が確定で化けない / prev 無し月 / 当月の再スタンプ)

D: promote 判定を確定月に限定

「連続 2 か月発火 0」(ユーザー決定事項 1)の忠実実装として、閾値到達判定から未確定当月を除外する(zero_streak 表示と current_month_partial は維持、confirmed_streak = zero_streak - partial)。旧実装は未確定当月も算入し、実効閾値が「確定 1 か月 + 当月 20 数日」で成立し得た。

  • これにより leak の promote 最早時期は 「2 つの完全なゼロ月が確定した後の初回実行」 に(現挙動比で約 1 か月後ろ倒し = 仕様の忠実化)
  • 既存テスト current_partial_month_flagged を NotMet 期待に更新(確定 1 + 部分 1)、確定 2 + 部分 1 → Promote を追加

検証

  • cargo test --workspace / cargo clippy --workspace --all-targets -- -D warnings 全通(rust-lint-test PASS)
  • ADR-062 § 決定 4 に Phase C / Phase D の amendment 追記

ADR-062

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 機能改善

    • 月次の判定において、確定済みの月のみを昇格判定の対象にするよう変更しました。
    • 未確定の当月は参考情報として表示し、判定結果には影響しないようにしました。
    • 過去月の集計では、確定時点のスナップショットを優先して使用します。
  • ドキュメント

    • 月次スナップショットの扱いと、判定対象となる期間のルールを明確化しました。

aloekun added 2 commits July 31, 2026 05:05
snapshot は集計実行時点の状態でしかなく、月次カデンツでは月 M の確定を M+1 の初回実行が行う。旧
resolve_month は確定する全月に実行時点 (M+1) の snapshot を刻んでいたため、月 M 中ずっと無効化して
いた機構を M+1 で再有効化すると「M は enabled + 発火 0」と確定し、無効化月を誤って promote streak に
算入し得た。

resolve_snapshot を新設し確定 rollup に「月中最後の観測」を保持する:
- 当月: 毎回現在 snapshot で再スタンプ
- 過去月の確定で prev (月中の未確定 rollup) がある: prev.snapshot を保持
- 過去月で prev が無い: 現在 snapshot で代用

snapshot が証明するのは (a) 月中実行があればその最後の時点、(b) 無ければ確定時点の状態に精緻化。
リグレッション固定テスト 3 件追加 (disabled 月が確定で化けない / prev 無し月 / 当月の再スタンプ)。
ADR-062 § 決定 4 amendment + 帰結の留意点を更新。

ADR-062
「連続 2 か月発火 0」(ユーザー決定事項 1) の忠実実装として、閾値到達判定から未確定当月を除外する。
未確定当月は zero_streak 表示と current_month_partial フラグには含める (参考表示) が、閾値カウントから
除外する (confirmed_streak = zero_streak - partial)。

旧実装は未確定当月も算入していたため実効閾値が「確定 1 か月 + 当月 20 数日」で成立し得た。これにより
leak の promote 最早時期は「2 つの完全なゼロ月が確定した後の初回実行」になる (現挙動比で約 1 か月
後ろ倒し = 仕様の忠実化)。

既存テスト current_partial_month_flagged を NotMet 期待に更新 (確定 1 + 部分 1)、確定 2 + 部分 1 →
Promote を追加。ADR-062 § 決定 4 amendment。

ADR-062
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f32ea7d8-effd-4228-8418-f0e0ce94e3b5

📥 Commits

Reviewing files that changed from the base of the PR and between 7773008 and 8fef6f1.

📒 Files selected for processing (3)
  • docs/adr/adr-062-monthly-harness-roi-review.md
  • src/cli-telemetry-report/src/aggregate.rs
  • src/cli-telemetry-report/src/verdict.rs

📝 Walkthrough

Walkthrough

月次 rollup は過去月の既存 snapshot を保持し、未保存時は現在値を代用します。当月は現在値で再計算します。promote 判定は確定月だけを対象にし、未確定当月は表示用 streak に限定します。

Changes

月次 ROI 判定

Layer / File(s) Summary
Snapshot の保持と再スタンプ
docs/adr/adr-062-monthly-harness-roi-review.md, src/cli-telemetry-report/src/aggregate.rs
過去月に既存 rollup がある場合は保存済み snapshot を保持します。snapshot がない過去月は現在値を使用します。当月は現在値で snapshot を更新します。テストが各ケースを検証します。
確定月による Promote 判定
docs/adr/adr-062-monthly-harness-roi-review.md, src/cli-telemetry-report/src/verdict.rs
未確定当月を zero_streak に含めますが、promote 判定から除外します。confirmed_streak が閾値を満たす場合だけ Promote にします。テストが未達と達成のケースを検証します。

Estimated code review effort: 3 (Moderate) | ~20 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 タイトルは、snapshot の保持と確定月に限定した promote 判定という主要変更を明確に示しています。
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.
✨ 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 telemetry-snapshot-confirmed-month

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: CodeRabbit のみが registered check として存在し pending (レビュー処理中)。ビルド/テスト系の CI check は現時点で登録されていない。mergeStateStatus は UNSTABLE (pending check起因)、mergeable は MERGEABLE
  • レビュー状況: CodeRabbit はレビュー未着 (walkthrough 生成中の "Currently processing new changes" 通知のみ)。人間レビュー・他 bot レビューともに 0 件。インライン指摘も 0 件
  • Verdict: user_decision (レビュー未着のため findings ベースの判定不可。CI・レビューが出揃うまで人間判断待ち)

Applicable Findings (Critical / High / Major)

該当なし (レビュー指摘 0 件)

Applicable Findings (Medium 以下)

該当なし

Filtered (not applicable)

該当なし

軽量サマリー (diff 概要)

  • 変更 3 ファイル、+147/-10 行
    • docs/adr/adr-062-monthly-harness-roi-review.md (+32/-4): Phase C/D の amendment を追記。snapshot 保持ロジックの精緻化 (§4) と promote 閾値を確定月のみで数える方針 (§4 Phase D) をドキュメント化
    • src/cli-telemetry-report/src/aggregate.rs (+84/-2): resolve_month から resolve_snapshot を分離し、過去月確定時は prev の snapshot (月中最後の観測) を保持、prev が無ければ現在 snapshot で代用するロジックを実装。対応するユニットテスト3件を追加
    • src/cli-telemetry-report/src/verdict.rs (+31/-4): confirmed_streak (未確定当月を除いた streak) を導入し、promote 閾値判定を確定月のみで行うよう変更。既存テストを更新し新規テスト1件を追加
  • 差分はコード変更とテスト・ドキュメントが揃った一貫した実装で、ADR-062 の記載内容と実装 (resolve_snapshot, confirmed_streak) が対応している

次のアクション

  • CodeRabbit のレビュー完了を待ち、findings が出た時点で本 workflow の次回起動 (レビュー投稿イベント) での再分析に委ねる (本回はポーリングしない)
  • CI (ビルド/テスト) の check が今後追加され次第、状態変化の有無を次回分析で確認する

@aloekun
aloekun merged commit 016ad54 into master Jul 31, 2026
1 check passed
@aloekun
aloekun deleted the telemetry-snapshot-confirmed-month branch July 31, 2026 03:11
aloekun added a commit that referenced this pull request Aug 1, 2026
* docs(todo): 月次 ROI レビュー (PR #335-338) post-merge feedback 採用候補を todo14 に登録

#336/#337/#338 の post-merge-feedback レポートの採用候補 (6 系統 13 項目、dedup 済) を
docs/todo14.md の現在進行中に 4 エントリとして登録する。ユーザー承認済み (全系統 = todo.md 登録)。

- cli-telemetry-report コード堅牢化 + 回帰テスト (系統1+2、resolve_snapshot 越境テスト等)
- telemetry 時間語義・不変条件・degraded 運用の文書補強 (系統3+5)
- jj workspace/bookmark semantics 文書 + pr-monitor 回帰テスト (系統4)
- 開発ワークフロー規約の補強 (系統6)

ADR-033 準拠 (本文に順位番号を書かず PR/Tier 参照のみ)。優先度 table (todo-summary2.md) の
行追加はユーザー判断のため本コミットでは行わない。実装は後日。

* docs(todo): CodeRabbit PR #339 指摘を反映 (checked_sub 計画化 / 検出限界の表記整合)

- verdict.rs 計画を debug_assert! 単独から checked_sub ベースの明示処理 +
  診断用 debug_assert! 併設に変更 (release build でも underflow 防止)。
  完了基準に release-mode 判定保証の回帰テストを追加
- pr-monitor 回帰テストの bullet を「既知の false negative を明示記録、
  検出改善はスコープ外」に修正し、対処案の seal 方針と表記を整合
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