feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562) - #585

Merged
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u
Aug 5, 2026
Merged

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562)#585
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u

Conversation

@yusuke0610

Copy link
Copy Markdown
Owner

ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。

  • select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
    最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
    入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
  • 実装量は [ドラフト縮小 1/7] backend: リポジトリ選定シグナルを AnalyzedRepoSummary へ永続化 #561 で永続化した language_bytes_total を参照する
  • evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
    非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
  • 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
    select_repos の結果からは除外しない(ADR-0026 決定 2)
  • mapper.py を [tool.mutmut] only_mutate に追加

TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

yusuke0610and others added 2 commits August 5, 2026 07:53
ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。
- select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
- 実装量は #561 で永続化した language_bytes_total を参照する
- evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
- 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
select_repos の結果からは除外しない(ADR-0026 決定 2)
- mapper.py を [tool.mutmut] only_mutate に追加
TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`_active_days` が `created_at[:10]` / `pushed_at[:10]` と日付へ切り詰めて
減算していたため、時刻成分が落ちて実継続期間より最大 1 日長く数えられていた。
`2026-06-01T23:59:00Z` 作成 → `2026-07-01T00:00:00Z` push(実 29 日 1 分)が
30 日と評価され、閾値 30 日ちょうどでデフォルト選択側に倒れていた。
- ISO 8601 を完全にパースする `_to_utc_datetime` を追加し、時刻まで含めて減算する
- created_at / pushed_at のタイムゾーン表記が揺れても減算できるよう UTC の aware
へ揃える(オフセット無しは GitHub API の慣習に合わせ UTC とみなす)
- TDD: 閾値直下(29 日 1 分)の境界テストで red を確認してから実装
- タイムゾーン混在表記のテストを追加(正規化を落とすと fail することを確認済み)
- RV: 本件の観点を `.claude/rules/common/review.md` の「正しさ」に追記
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
@coderabbitai

Copy link
Copy Markdown

Warning

Review limit reached

@yusuke0610, you've reached your PR review limit, so we couldn't start this review.

Next review available in:48 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 886ed04f-f40e-4557-a250-0d770c7b1fcb

📥 Commits

Reviewing files that changed from the base of the PR and between 01ff6f3 and a17dd17.

📒 Files selected for processing (4)
  • .claude/rules/common/review.md
  • backend/app/services/agent/resume_draft/mapper.py
  • backend/pyproject.toml
  • backend/tests/test_resume_draft_mapper.py

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-actionsgithub-actionsBot added backend バックエンド feature 新機能 documentation Improvements or additions to documentation test テスト追加・修正 agent DevForge Agent labels Aug 5, 2026
@yusuke0610
yusuke0610 merged commit 7de6952 into mainAug 5, 2026
22 checks passed
yusuke0610 pushed a commit that referenced this pull request Aug 5, 2026
#585(PR #581 相当)が main に squash マージされ、同じ #562 の実装が両側に
別コミットとして入ったためコンフリクトしていた。
- mapper.py / test_resume_draft_mapper.py: 本ブランチ側を採用した。main 側の
select_repos / evaluate_noise は本ブランチの rank_repos /
evaluate_default_selection / build_candidates に置き換わっており、候補一覧 API・
選択 UI がこちらの API に依存しているため
- ただし main 側にしか無かった修正(継続期間の時刻成分切り捨て / PR #581 の
CodeRabbit 指摘)は本ブランチの duration_days へ移植した。_parse_datetime を
追加して UTC の aware datetime で減算する。日粒度でよい「参画中」判定は
_parse_date のまま残す
- 移植分のテスト 2 件(閾値直下 29 日 1 分の境界 / タイムゾーン混在表記)を
本ブランチの evaluate_default_selection の契約に合わせて追加した
- pyproject.toml: only_mutate の同一エントリで、コメント文言のみ本ブランチ側を採用
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentDevForge AgentbackendバックエンドdocumentationImprovements or additions to documentationfeature新機能testテスト追加・修正

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yusuke0610@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562) - #585

Merged
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u
Aug 5, 2026
Merged

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562)#585
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u

Conversation

@yusuke0610

Copy link
Copy Markdown
Owner

ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。

  • select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
    最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
    入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
  • 実装量は [ドラフト縮小 1/7] backend: リポジトリ選定シグナルを AnalyzedRepoSummary へ永続化 #561 で永続化した language_bytes_total を参照する
  • evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
    非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
  • 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
    select_repos の結果からは除外しない(ADR-0026 決定 2)
  • mapper.py を [tool.mutmut] only_mutate に追加

TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

yusuke0610and others added 2 commits August 5, 2026 07:53
ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。
- select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
- 実装量は #561 で永続化した language_bytes_total を参照する
- evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
- 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
select_repos の結果からは除外しない(ADR-0026 決定 2)
- mapper.py を [tool.mutmut] only_mutate に追加
TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`_active_days` が `created_at[:10]` / `pushed_at[:10]` と日付へ切り詰めて
減算していたため、時刻成分が落ちて実継続期間より最大 1 日長く数えられていた。
`2026-06-01T23:59:00Z` 作成 → `2026-07-01T00:00:00Z` push(実 29 日 1 分)が
30 日と評価され、閾値 30 日ちょうどでデフォルト選択側に倒れていた。
- ISO 8601 を完全にパースする `_to_utc_datetime` を追加し、時刻まで含めて減算する
- created_at / pushed_at のタイムゾーン表記が揺れても減算できるよう UTC の aware
へ揃える(オフセット無しは GitHub API の慣習に合わせ UTC とみなす)
- TDD: 閾値直下(29 日 1 分)の境界テストで red を確認してから実装
- タイムゾーン混在表記のテストを追加(正規化を落とすと fail することを確認済み)
- RV: 本件の観点を `.claude/rules/common/review.md` の「正しさ」に追記
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
@coderabbitai

Copy link
Copy Markdown

Warning

Review limit reached

@yusuke0610, you've reached your PR review limit, so we couldn't start this review.

Next review available in:48 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 886ed04f-f40e-4557-a250-0d770c7b1fcb

📥 Commits

Reviewing files that changed from the base of the PR and between 01ff6f3 and a17dd17.

📒 Files selected for processing (4)
  • .claude/rules/common/review.md
  • backend/app/services/agent/resume_draft/mapper.py
  • backend/pyproject.toml
  • backend/tests/test_resume_draft_mapper.py

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-actionsgithub-actionsBot added backend バックエンド feature 新機能 documentation Improvements or additions to documentation test テスト追加・修正 agent DevForge Agent labels Aug 5, 2026
@yusuke0610
yusuke0610 merged commit 7de6952 into mainAug 5, 2026
22 checks passed
yusuke0610 pushed a commit that referenced this pull request Aug 5, 2026
#585(PR #581 相当)が main に squash マージされ、同じ #562 の実装が両側に
別コミットとして入ったためコンフリクトしていた。
- mapper.py / test_resume_draft_mapper.py: 本ブランチ側を採用した。main 側の
select_repos / evaluate_noise は本ブランチの rank_repos /
evaluate_default_selection / build_candidates に置き換わっており、候補一覧 API・
選択 UI がこちらの API に依存しているため
- ただし main 側にしか無かった修正(継続期間の時刻成分切り捨て / PR #581 の
CodeRabbit 指摘)は本ブランチの duration_days へ移植した。_parse_datetime を
追加して UTC の aware datetime で減算する。日粒度でよい「参画中」判定は
_parse_date のまま残す
- 移植分のテスト 2 件(閾値直下 29 日 1 分の境界 / タイムゾーン混在表記)を
本ブランチの evaluate_default_selection の契約に合わせて追加した
- pyproject.toml: only_mutate の同一エントリで、コメント文言のみ本ブランチ側を採用
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentDevForge AgentbackendバックエンドdocumentationImprovements or additions to documentationfeature新機能testテスト追加・修正

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yusuke0610@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562) - #585

Merged
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u
Aug 5, 2026
Merged

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562)#585
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u

Conversation

@yusuke0610

Copy link
Copy Markdown
Owner

ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。

  • select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
    最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
    入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
  • 実装量は [ドラフト縮小 1/7] backend: リポジトリ選定シグナルを AnalyzedRepoSummary へ永続化 #561 で永続化した language_bytes_total を参照する
  • evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
    非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
  • 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
    select_repos の結果からは除外しない(ADR-0026 決定 2)
  • mapper.py を [tool.mutmut] only_mutate に追加

TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

yusuke0610and others added 2 commits August 5, 2026 07:53
ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。
- select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
- 実装量は #561 で永続化した language_bytes_total を参照する
- evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
- 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
select_repos の結果からは除外しない(ADR-0026 決定 2)
- mapper.py を [tool.mutmut] only_mutate に追加
TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`_active_days` が `created_at[:10]` / `pushed_at[:10]` と日付へ切り詰めて
減算していたため、時刻成分が落ちて実継続期間より最大 1 日長く数えられていた。
`2026-06-01T23:59:00Z` 作成 → `2026-07-01T00:00:00Z` push(実 29 日 1 分)が
30 日と評価され、閾値 30 日ちょうどでデフォルト選択側に倒れていた。
- ISO 8601 を完全にパースする `_to_utc_datetime` を追加し、時刻まで含めて減算する
- created_at / pushed_at のタイムゾーン表記が揺れても減算できるよう UTC の aware
へ揃える(オフセット無しは GitHub API の慣習に合わせ UTC とみなす)
- TDD: 閾値直下(29 日 1 分)の境界テストで red を確認してから実装
- タイムゾーン混在表記のテストを追加(正規化を落とすと fail することを確認済み)
- RV: 本件の観点を `.claude/rules/common/review.md` の「正しさ」に追記
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
@coderabbitai

Copy link
Copy Markdown

Warning

Review limit reached

@yusuke0610, you've reached your PR review limit, so we couldn't start this review.

Next review available in:48 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 886ed04f-f40e-4557-a250-0d770c7b1fcb

📥 Commits

Reviewing files that changed from the base of the PR and between 01ff6f3 and a17dd17.

📒 Files selected for processing (4)
  • .claude/rules/common/review.md
  • backend/app/services/agent/resume_draft/mapper.py
  • backend/pyproject.toml
  • backend/tests/test_resume_draft_mapper.py

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-actionsgithub-actionsBot added backend バックエンド feature 新機能 documentation Improvements or additions to documentation test テスト追加・修正 agent DevForge Agent labels Aug 5, 2026
@yusuke0610
yusuke0610 merged commit 7de6952 into mainAug 5, 2026
22 checks passed
yusuke0610 pushed a commit that referenced this pull request Aug 5, 2026
#585(PR #581 相当)が main に squash マージされ、同じ #562 の実装が両側に
別コミットとして入ったためコンフリクトしていた。
- mapper.py / test_resume_draft_mapper.py: 本ブランチ側を採用した。main 側の
select_repos / evaluate_noise は本ブランチの rank_repos /
evaluate_default_selection / build_candidates に置き換わっており、候補一覧 API・
選択 UI がこちらの API に依存しているため
- ただし main 側にしか無かった修正(継続期間の時刻成分切り捨て / PR #581 の
CodeRabbit 指摘)は本ブランチの duration_days へ移植した。_parse_datetime を
追加して UTC の aware datetime で減算する。日粒度でよい「参画中」判定は
_parse_date のまま残す
- 移植分のテスト 2 件(閾値直下 29 日 1 分の境界 / タイムゾーン混在表記)を
本ブランチの evaluate_default_selection の契約に合わせて追加した
- pyproject.toml: only_mutate の同一エントリで、コメント文言のみ本ブランチ側を採用
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentDevForge AgentbackendバックエンドdocumentationImprovements or additions to documentationfeature新機能testテスト追加・修正

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yusuke0610@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562) - #585

Merged
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u
Aug 5, 2026
Merged

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562)#585
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u

Conversation

@yusuke0610

Copy link
Copy Markdown
Owner

ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。

  • select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
    最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
    入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
  • 実装量は [ドラフト縮小 1/7] backend: リポジトリ選定シグナルを AnalyzedRepoSummary へ永続化 #561 で永続化した language_bytes_total を参照する
  • evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
    非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
  • 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
    select_repos の結果からは除外しない(ADR-0026 決定 2)
  • mapper.py を [tool.mutmut] only_mutate に追加

TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

yusuke0610and others added 2 commits August 5, 2026 07:53
ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。
- select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
- 実装量は #561 で永続化した language_bytes_total を参照する
- evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
- 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
select_repos の結果からは除外しない(ADR-0026 決定 2)
- mapper.py を [tool.mutmut] only_mutate に追加
TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`_active_days` が `created_at[:10]` / `pushed_at[:10]` と日付へ切り詰めて
減算していたため、時刻成分が落ちて実継続期間より最大 1 日長く数えられていた。
`2026-06-01T23:59:00Z` 作成 → `2026-07-01T00:00:00Z` push(実 29 日 1 分)が
30 日と評価され、閾値 30 日ちょうどでデフォルト選択側に倒れていた。
- ISO 8601 を完全にパースする `_to_utc_datetime` を追加し、時刻まで含めて減算する
- created_at / pushed_at のタイムゾーン表記が揺れても減算できるよう UTC の aware
へ揃える(オフセット無しは GitHub API の慣習に合わせ UTC とみなす)
- TDD: 閾値直下(29 日 1 分)の境界テストで red を確認してから実装
- タイムゾーン混在表記のテストを追加(正規化を落とすと fail することを確認済み)
- RV: 本件の観点を `.claude/rules/common/review.md` の「正しさ」に追記
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
@coderabbitai

Copy link
Copy Markdown

Warning

Review limit reached

@yusuke0610, you've reached your PR review limit, so we couldn't start this review.

Next review available in:48 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 886ed04f-f40e-4557-a250-0d770c7b1fcb

📥 Commits

Reviewing files that changed from the base of the PR and between 01ff6f3 and a17dd17.

📒 Files selected for processing (4)
  • .claude/rules/common/review.md
  • backend/app/services/agent/resume_draft/mapper.py
  • backend/pyproject.toml
  • backend/tests/test_resume_draft_mapper.py

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-actionsgithub-actionsBot added backend バックエンド feature 新機能 documentation Improvements or additions to documentation test テスト追加・修正 agent DevForge Agent labels Aug 5, 2026
@yusuke0610
yusuke0610 merged commit 7de6952 into mainAug 5, 2026
22 checks passed
yusuke0610 pushed a commit that referenced this pull request Aug 5, 2026
#585(PR #581 相当)が main に squash マージされ、同じ #562 の実装が両側に
別コミットとして入ったためコンフリクトしていた。
- mapper.py / test_resume_draft_mapper.py: 本ブランチ側を採用した。main 側の
select_repos / evaluate_noise は本ブランチの rank_repos /
evaluate_default_selection / build_candidates に置き換わっており、候補一覧 API・
選択 UI がこちらの API に依存しているため
- ただし main 側にしか無かった修正(継続期間の時刻成分切り捨て / PR #581 の
CodeRabbit 指摘)は本ブランチの duration_days へ移植した。_parse_datetime を
追加して UTC の aware datetime で減算する。日粒度でよい「参画中」判定は
_parse_date のまま残す
- 移植分のテスト 2 件(閾値直下 29 日 1 分の境界 / タイムゾーン混在表記)を
本ブランチの evaluate_default_selection の契約に合わせて追加した
- pyproject.toml: only_mutate の同一エントリで、コメント文言のみ本ブランチ側を採用
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentDevForge AgentbackendバックエンドdocumentationImprovements or additions to documentationfeature新機能testテスト追加・修正

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yusuke0610@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562) - #585

Merged
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u
Aug 5, 2026
Merged

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562)#585
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u

Conversation

@yusuke0610

Copy link
Copy Markdown
Owner

ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。

  • select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
    最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
    入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
  • 実装量は [ドラフト縮小 1/7] backend: リポジトリ選定シグナルを AnalyzedRepoSummary へ永続化 #561 で永続化した language_bytes_total を参照する
  • evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
    非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
  • 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
    select_repos の結果からは除外しない(ADR-0026 決定 2)
  • mapper.py を [tool.mutmut] only_mutate に追加

TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

yusuke0610and others added 2 commits August 5, 2026 07:53
ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。
- select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
- 実装量は #561 で永続化した language_bytes_total を参照する
- evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
- 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
select_repos の結果からは除外しない(ADR-0026 決定 2)
- mapper.py を [tool.mutmut] only_mutate に追加
TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`_active_days` が `created_at[:10]` / `pushed_at[:10]` と日付へ切り詰めて
減算していたため、時刻成分が落ちて実継続期間より最大 1 日長く数えられていた。
`2026-06-01T23:59:00Z` 作成 → `2026-07-01T00:00:00Z` push(実 29 日 1 分)が
30 日と評価され、閾値 30 日ちょうどでデフォルト選択側に倒れていた。
- ISO 8601 を完全にパースする `_to_utc_datetime` を追加し、時刻まで含めて減算する
- created_at / pushed_at のタイムゾーン表記が揺れても減算できるよう UTC の aware
へ揃える(オフセット無しは GitHub API の慣習に合わせ UTC とみなす)
- TDD: 閾値直下(29 日 1 分)の境界テストで red を確認してから実装
- タイムゾーン混在表記のテストを追加(正規化を落とすと fail することを確認済み)
- RV: 本件の観点を `.claude/rules/common/review.md` の「正しさ」に追記
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
@coderabbitai

Copy link
Copy Markdown

Warning

Review limit reached

@yusuke0610, you've reached your PR review limit, so we couldn't start this review.

Next review available in:48 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 886ed04f-f40e-4557-a250-0d770c7b1fcb

📥 Commits

Reviewing files that changed from the base of the PR and between 01ff6f3 and a17dd17.

📒 Files selected for processing (4)
  • .claude/rules/common/review.md
  • backend/app/services/agent/resume_draft/mapper.py
  • backend/pyproject.toml
  • backend/tests/test_resume_draft_mapper.py

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-actionsgithub-actionsBot added backend バックエンド feature 新機能 documentation Improvements or additions to documentation test テスト追加・修正 agent DevForge Agent labels Aug 5, 2026
@yusuke0610
yusuke0610 merged commit 7de6952 into mainAug 5, 2026
22 checks passed
yusuke0610 pushed a commit that referenced this pull request Aug 5, 2026
#585(PR #581 相当)が main に squash マージされ、同じ #562 の実装が両側に
別コミットとして入ったためコンフリクトしていた。
- mapper.py / test_resume_draft_mapper.py: 本ブランチ側を採用した。main 側の
select_repos / evaluate_noise は本ブランチの rank_repos /
evaluate_default_selection / build_candidates に置き換わっており、候補一覧 API・
選択 UI がこちらの API に依存しているため
- ただし main 側にしか無かった修正(継続期間の時刻成分切り捨て / PR #581 の
CodeRabbit 指摘)は本ブランチの duration_days へ移植した。_parse_datetime を
追加して UTC の aware datetime で減算する。日粒度でよい「参画中」判定は
_parse_date のまま残す
- 移植分のテスト 2 件(閾値直下 29 日 1 分の境界 / タイムゾーン混在表記)を
本ブランチの evaluate_default_selection の契約に合わせて追加した
- pyproject.toml: only_mutate の同一エントリで、コメント文言のみ本ブランチ側を採用
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentDevForge AgentbackendバックエンドdocumentationImprovements or additions to documentationfeature新機能testテスト追加・修正

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yusuke0610@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562) - #585

Merged
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u
Aug 5, 2026
Merged

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562)#585
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u

Conversation

@yusuke0610

Copy link
Copy Markdown
Owner

ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。

  • select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
    最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
    入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
  • 実装量は [ドラフト縮小 1/7] backend: リポジトリ選定シグナルを AnalyzedRepoSummary へ永続化 #561 で永続化した language_bytes_total を参照する
  • evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
    非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
  • 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
    select_repos の結果からは除外しない(ADR-0026 決定 2)
  • mapper.py を [tool.mutmut] only_mutate に追加

TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

yusuke0610and others added 2 commits August 5, 2026 07:53
ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。
- select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
- 実装量は #561 で永続化した language_bytes_total を参照する
- evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
- 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
select_repos の結果からは除外しない(ADR-0026 決定 2)
- mapper.py を [tool.mutmut] only_mutate に追加
TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`_active_days` が `created_at[:10]` / `pushed_at[:10]` と日付へ切り詰めて
減算していたため、時刻成分が落ちて実継続期間より最大 1 日長く数えられていた。
`2026-06-01T23:59:00Z` 作成 → `2026-07-01T00:00:00Z` push(実 29 日 1 分)が
30 日と評価され、閾値 30 日ちょうどでデフォルト選択側に倒れていた。
- ISO 8601 を完全にパースする `_to_utc_datetime` を追加し、時刻まで含めて減算する
- created_at / pushed_at のタイムゾーン表記が揺れても減算できるよう UTC の aware
へ揃える(オフセット無しは GitHub API の慣習に合わせ UTC とみなす)
- TDD: 閾値直下(29 日 1 分)の境界テストで red を確認してから実装
- タイムゾーン混在表記のテストを追加(正規化を落とすと fail することを確認済み)
- RV: 本件の観点を `.claude/rules/common/review.md` の「正しさ」に追記
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
@coderabbitai

Copy link
Copy Markdown

Warning

Review limit reached

@yusuke0610, you've reached your PR review limit, so we couldn't start this review.

Next review available in:48 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 886ed04f-f40e-4557-a250-0d770c7b1fcb

📥 Commits

Reviewing files that changed from the base of the PR and between 01ff6f3 and a17dd17.

📒 Files selected for processing (4)
  • .claude/rules/common/review.md
  • backend/app/services/agent/resume_draft/mapper.py
  • backend/pyproject.toml
  • backend/tests/test_resume_draft_mapper.py

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-actionsgithub-actionsBot added backend バックエンド feature 新機能 documentation Improvements or additions to documentation test テスト追加・修正 agent DevForge Agent labels Aug 5, 2026
@yusuke0610
yusuke0610 merged commit 7de6952 into mainAug 5, 2026
22 checks passed
yusuke0610 pushed a commit that referenced this pull request Aug 5, 2026
#585(PR #581 相当)が main に squash マージされ、同じ #562 の実装が両側に
別コミットとして入ったためコンフリクトしていた。
- mapper.py / test_resume_draft_mapper.py: 本ブランチ側を採用した。main 側の
select_repos / evaluate_noise は本ブランチの rank_repos /
evaluate_default_selection / build_candidates に置き換わっており、候補一覧 API・
選択 UI がこちらの API に依存しているため
- ただし main 側にしか無かった修正(継続期間の時刻成分切り捨て / PR #581 の
CodeRabbit 指摘)は本ブランチの duration_days へ移植した。_parse_datetime を
追加して UTC の aware datetime で減算する。日粒度でよい「参画中」判定は
_parse_date のまま残す
- 移植分のテスト 2 件(閾値直下 29 日 1 分の境界 / タイムゾーン混在表記)を
本ブランチの evaluate_default_selection の契約に合わせて追加した
- pyproject.toml: only_mutate の同一エントリで、コメント文言のみ本ブランチ側を採用
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentDevForge AgentbackendバックエンドdocumentationImprovements or additions to documentationfeature新機能testテスト追加・修正

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yusuke0610@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562) - #585

Merged
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u
Aug 5, 2026
Merged

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562)#585
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u

Conversation

@yusuke0610

Copy link
Copy Markdown
Owner

ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。

  • select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
    最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
    入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
  • 実装量は [ドラフト縮小 1/7] backend: リポジトリ選定シグナルを AnalyzedRepoSummary へ永続化 #561 で永続化した language_bytes_total を参照する
  • evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
    非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
  • 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
    select_repos の結果からは除外しない(ADR-0026 決定 2)
  • mapper.py を [tool.mutmut] only_mutate に追加

TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

yusuke0610and others added 2 commits August 5, 2026 07:53
ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。
- select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
- 実装量は #561 で永続化した language_bytes_total を参照する
- evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
- 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
select_repos の結果からは除外しない(ADR-0026 決定 2)
- mapper.py を [tool.mutmut] only_mutate に追加
TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`_active_days` が `created_at[:10]` / `pushed_at[:10]` と日付へ切り詰めて
減算していたため、時刻成分が落ちて実継続期間より最大 1 日長く数えられていた。
`2026-06-01T23:59:00Z` 作成 → `2026-07-01T00:00:00Z` push(実 29 日 1 分)が
30 日と評価され、閾値 30 日ちょうどでデフォルト選択側に倒れていた。
- ISO 8601 を完全にパースする `_to_utc_datetime` を追加し、時刻まで含めて減算する
- created_at / pushed_at のタイムゾーン表記が揺れても減算できるよう UTC の aware
へ揃える(オフセット無しは GitHub API の慣習に合わせ UTC とみなす)
- TDD: 閾値直下(29 日 1 分)の境界テストで red を確認してから実装
- タイムゾーン混在表記のテストを追加(正規化を落とすと fail することを確認済み)
- RV: 本件の観点を `.claude/rules/common/review.md` の「正しさ」に追記
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
@coderabbitai

Copy link
Copy Markdown

Warning

Review limit reached

@yusuke0610, you've reached your PR review limit, so we couldn't start this review.

Next review available in:48 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 886ed04f-f40e-4557-a250-0d770c7b1fcb

📥 Commits

Reviewing files that changed from the base of the PR and between 01ff6f3 and a17dd17.

📒 Files selected for processing (4)
  • .claude/rules/common/review.md
  • backend/app/services/agent/resume_draft/mapper.py
  • backend/pyproject.toml
  • backend/tests/test_resume_draft_mapper.py

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-actionsgithub-actionsBot added backend バックエンド feature 新機能 documentation Improvements or additions to documentation test テスト追加・修正 agent DevForge Agent labels Aug 5, 2026
@yusuke0610
yusuke0610 merged commit 7de6952 into mainAug 5, 2026
22 checks passed
yusuke0610 pushed a commit that referenced this pull request Aug 5, 2026
#585(PR #581 相当)が main に squash マージされ、同じ #562 の実装が両側に
別コミットとして入ったためコンフリクトしていた。
- mapper.py / test_resume_draft_mapper.py: 本ブランチ側を採用した。main 側の
select_repos / evaluate_noise は本ブランチの rank_repos /
evaluate_default_selection / build_candidates に置き換わっており、候補一覧 API・
選択 UI がこちらの API に依存しているため
- ただし main 側にしか無かった修正(継続期間の時刻成分切り捨て / PR #581 の
CodeRabbit 指摘)は本ブランチの duration_days へ移植した。_parse_datetime を
追加して UTC の aware datetime で減算する。日粒度でよい「参画中」判定は
_parse_date のまま残す
- 移植分のテスト 2 件(閾値直下 29 日 1 分の境界 / タイムゾーン混在表記)を
本ブランチの evaluate_default_selection の契約に合わせて追加した
- pyproject.toml: only_mutate の同一エントリで、コメント文言のみ本ブランチ側を採用
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentDevForge AgentbackendバックエンドdocumentationImprovements or additions to documentationfeature新機能testテスト追加・修正

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yusuke0610@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562) - #585

Merged
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u
Aug 5, 2026
Merged

feat(backend): ドラフト選定順を「継続期間 × 実装量」へ変更しノイズ判定を追加(#562)#585
yusuke0610 merged 2 commits into
mainfrom
claude/pr581-feedback-0f0j3u

Conversation

@yusuke0610

Copy link
Copy Markdown
Owner

ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。

  • select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
    最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
    入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
  • 実装量は [ドラフト縮小 1/7] backend: リポジトリ選定シグナルを AnalyzedRepoSummary へ永続化 #561 で永続化した language_bytes_total を参照する
  • evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
    非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
  • 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
    select_repos の結果からは除外しない(ADR-0026 決定 2)
  • mapper.py を [tool.mutmut] only_mutate に追加

TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

yusuke0610and others added 2 commits August 5, 2026 07:53
ADR-0026 決定 3。select_repos の第 1 キーが最終 push 日時だったため、
「昨日 README を直しただけのチュートリアル」が「作り込んで完成させた本命」に
勝っていた。継続期間を主キーに据え、直近性はタイブレークへ降格する。
- select_repos: 継続期間(pushed_at − created_at)→ 言語バイト合計 →
最終 push 日時 → full_name の段階比較に変更。重み付き和や積は係数の恣意性が
入るため採らない。stars は判別力が無いので使わない(ADR-0026 決定 3)
- 実装量は #561 で永続化した language_bytes_total を参照する
- evaluate_noise を追加。継続期間が閾値未満 / 学習用途 topics をデフォルト
非選択にし、理由を返す。topics は小文字化 + 区切り除去して完全一致で判定
- 機械は候補を落とさない。判定はデフォルト選択状態と理由表示にのみ影響させ、
select_repos の結果からは除外しない(ADR-0026 決定 2)
- mapper.py を [tool.mutmut] only_mutate に追加
TDD: 並び順・ノイズ判定それぞれで red('o/tutorial' != 'o/flagship' /
assert True is False)を確認してから実装した。閾値・語彙・スコア式は
mapper.py の定数が正本で、ADR には数値を複製していない。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`_active_days` が `created_at[:10]` / `pushed_at[:10]` と日付へ切り詰めて
減算していたため、時刻成分が落ちて実継続期間より最大 1 日長く数えられていた。
`2026-06-01T23:59:00Z` 作成 → `2026-07-01T00:00:00Z` push(実 29 日 1 分)が
30 日と評価され、閾値 30 日ちょうどでデフォルト選択側に倒れていた。
- ISO 8601 を完全にパースする `_to_utc_datetime` を追加し、時刻まで含めて減算する
- created_at / pushed_at のタイムゾーン表記が揺れても減算できるよう UTC の aware
へ揃える(オフセット無しは GitHub API の慣習に合わせ UTC とみなす)
- TDD: 閾値直下(29 日 1 分)の境界テストで red を確認してから実装
- タイムゾーン混在表記のテストを追加(正規化を落とすと fail することを確認済み)
- RV: 本件の観点を `.claude/rules/common/review.md` の「正しさ」に追記
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
@coderabbitai

Copy link
Copy Markdown

Warning

Review limit reached

@yusuke0610, you've reached your PR review limit, so we couldn't start this review.

Next review available in:48 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 886ed04f-f40e-4557-a250-0d770c7b1fcb

📥 Commits

Reviewing files that changed from the base of the PR and between 01ff6f3 and a17dd17.

📒 Files selected for processing (4)
  • .claude/rules/common/review.md
  • backend/app/services/agent/resume_draft/mapper.py
  • backend/pyproject.toml
  • backend/tests/test_resume_draft_mapper.py

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-actionsgithub-actionsBot added backend バックエンド feature 新機能 documentation Improvements or additions to documentation test テスト追加・修正 agent DevForge Agent labels Aug 5, 2026
@yusuke0610
yusuke0610 merged commit 7de6952 into mainAug 5, 2026
22 checks passed
yusuke0610 pushed a commit that referenced this pull request Aug 5, 2026
#585(PR #581 相当)が main に squash マージされ、同じ #562 の実装が両側に
別コミットとして入ったためコンフリクトしていた。
- mapper.py / test_resume_draft_mapper.py: 本ブランチ側を採用した。main 側の
select_repos / evaluate_noise は本ブランチの rank_repos /
evaluate_default_selection / build_candidates に置き換わっており、候補一覧 API・
選択 UI がこちらの API に依存しているため
- ただし main 側にしか無かった修正(継続期間の時刻成分切り捨て / PR #581 の
CodeRabbit 指摘)は本ブランチの duration_days へ移植した。_parse_datetime を
追加して UTC の aware datetime で減算する。日粒度でよい「参画中」判定は
_parse_date のまま残す
- 移植分のテスト 2 件(閾値直下 29 日 1 分の境界 / タイムゾーン混在表記)を
本ブランチの evaluate_default_selection の契約に合わせて追加した
- pyproject.toml: only_mutate の同一エントリで、コメント文言のみ本ブランチ側を採用
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaqnCny4wsD6AkBkJeTEEV
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentDevForge AgentbackendバックエンドdocumentationImprovements or additions to documentationfeature新機能testテスト追加・修正

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yusuke0610@claude