Skip to content

fix: レビュー依頼スレッドの後続通知の文言を切り替える(#104) - #106

Merged
limit7412 merged 5 commits into
masterfrom
claude/add-policy-to-issues-vdp4s3
Aug 9, 2026
Merged

fix: レビュー依頼スレッドの後続通知の文言を切り替える(#104)#106
limit7412 merged 5 commits into
masterfrom
claude/add-policy-to-issues-vdp4s3

Conversation

@limit7412

@limit7412 limit7412 commented Aug 5, 2026

Copy link
Copy Markdown
Owner

close #104

課題

/notifications API の reason は「そのスレッドを購読している理由」であってイベント種別ではない。一度レビュー依頼/アサインされた PR・Issue は、以降のコメントや更新もすべて同じ reason で届くため、REASON_MESSAGES の固定対応では常に「レビューを依頼されました」「アサインされました」と表示されていた。

変更内容

  • Subject#commented? を追加。latest_comment_urlsubject.url と異なる場合に「スレッドにコメントが 1 件以上ある」と判定する
    • latest_comment_url はコメントがまだ無いスレッドでは subject.url と同じ値が入るため、単純な空判定ではなく URL の一致で見る必要がある
  • Notification::FOLLOWUP_MESSAGES を追加し、初回ではないと判断できる通知は文言を差し替える
  • テーブル方式にしたので、同じ問題を持つ他の reason も追記だけで切り替えられる

挙動

reason スレッドの状態 文言
review_requested コメント無し レビューを依頼されました(従来どおり)
review_requested コメントあり レビュー依頼中の PR に動きがありました
assign コメント無し アサインされました(従来どおり)
assign コメントあり 担当している PR/Issue に動きがありました
その他 - 従来どおり

assign は Issue にも付くため、文言は PR に限定せず「担当している PR/Issue」とした。

文言を「動きがありました」に留めている理由

latest_comment_url は通知を発生させたイベントではなく、スレッドの現在の最新コメントを指す。そのため、コメント済みスレッドに push や状態変更が来た通知でも commented? は真になる。ここで「コメントがつきました」と書くと過去のコメントを新着と誤認させるため、何が起きたかを限定しない表現にしている。

イベント種別は通知 payload に無く、追加の API 呼び出し無しでは判別できない。commented? はあくまで「初回ではない」ことの目安として使っており、その性質と限界はコード内コメントに明記した。

(レビュー指摘対応: #discussion_r3744341653

対象外にした reason

同じ構造の問題を持つ reason は他に authorinvitation があるが、

  • author: 元の文言が「自分の PR/Issue に動きがありました」で後続通知でも実態と合っている
  • invitation: 後続通知がほぼ発生しない

ため今回は据え置いた。必要になれば FOLLOWUP_MESSAGES への追記だけで対応できる。

テスト

spec/github/models_spec.cr / spec/github/usecase_spec.cr に以下を追加。

  • commented? の 3 パターン(コメント URL / subject.url と同一 / 空)
  • reason_message の切り替え(review_requested / assign それぞれのコメントあり・無し、対象外 reason)
  • pretext へ反映されること

CI green(format / lint / spec、deploy とも成功)。

GitHub の reason はスレッドの購読理由でありイベント種別ではないため、
一度レビュー依頼された PR は以降のコメントも review_requested で届き、
常に「レビューを依頼されました」と表示されていた。

latest_comment_url が subject.url と異なる(=コメントが起点)場合に限り
FOLLOWUP_MESSAGES の文言へ差し替える。コメントがまだ無いスレッドでは
latest_comment_url に subject.url と同じ値が入るため、依頼直後の通知は
従来どおりの文言のままになる。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MoGxJDiZa8c2E3PVAnxbK8

Copy link
Copy Markdown
Owner Author

CI が赤ですが、本 PR の差分とは無関係の既存問題です。

shards install の ameba postinstall が Crystal 1.21.0 でコンパイルできず、crystal tool format --check / ameba / crystal spec のいずれにも到達せずジョブが落ちています。

Error: undefined method 'next_string_array_token' for Crystal::Lexer

master も同じ状態です(最終成功は 2026-07-14、それ以降 crystal: latest が 1.21.0 に上がったため)。差分の内容によらず、いま出す PR は必ず落ちます。

対応方針の検討を #108 に切り出しました。ameba の master には修正が入っていますが安定版のリリースがまだ無いため、CI の Crystal を固定するか ameba をコミット固定で追従させるかの判断が必要です。そちらが解決しだい、本 PR の CI を確認します。


Generated by Claude Code

Copy link
Copy Markdown
Owner Author

#108 の修正 PR を #109 で用意しました(Crystal 1.21.0 固定 + ameba を Crystal 1.21 対応コミットに固定)。マージされたら本 PR に master を取り込んで CI を確認します。


Generated by Claude Code

Copy link
Copy Markdown
Owner Author

#109(CI 修正)が green になったので、本ブランチに取り込んで CI を回しています。

そのため現時点の diff には #109 のコミットが含まれています。#109 が master にマージされれば差分から消えるので、レビューは本 PR 固有のコミット(9c83262)だけ見ていただければ大丈夫です。


Generated by Claude Code

claude added 2 commits August 6, 2026 02:42
review_requested と同じく、一度アサインされた PR/Issue は以降のコメントも
reason=assign で届くため、常に「アサインされました」になっていた。
FOLLOWUP_MESSAGES に assign を追加して同じ切り替えを適用する。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MoGxJDiZa8c2E3PVAnxbK8

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0adff76550

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/github/models.cr Outdated
latest_comment_url は通知を発生させたイベントではなくスレッドの現在の最新
コメントを指すため、コメント済みスレッドに push や状態変更が来た通知でも
真になる。「コメントがつきました」だと過去のコメントを新着と誤認させる。

- 文言を「〜に動きがありました」に変更し、何が起きたかを限定しない
- 述語名を comment_triggered? -> commented? に変更。実際に判定しているのは
  「通知の起点がコメントか」ではなく「スレッドにコメントが存在するか」
- コメントで上記の性質と限界を明記

PR #106 のレビュー指摘対応。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MoGxJDiZa8c2E3PVAnxbK8
@limit7412
limit7412 merged commit 5ed20ed into master Aug 9, 2026
2 checks passed
@limit7412
limit7412 deleted the claude/add-policy-to-issues-vdp4s3 branch August 9, 2026 15:58
limit7412 pushed a commit that referenced this pull request Aug 9, 2026
#106(issue #104)のマージにより master へ入った通知文言の変更を取り込む。

競合はテストヘルパーの引数追加が両側で起きたもので、双方の引数を残して解消:

- spec/github/models_spec.cr: notification_from に type と url/latest_comment_url
- spec/github/usecase_spec.cr: notification に type と latest_comment_url

src/github/models.cr は変更箇所が異なるため自動マージ(#104 の
FOLLOWUP_MESSAGES / commented? と #105 の ChecksState / checks_gated? が併存)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MoGxJDiZa8c2E3PVAnxbK8
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.

レビューに入っている場合のメッセージが微妙

2 participants