docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525) - #552

Merged
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject
Jul 28, 2026
Merged

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525)#552
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

経歴書ドラフトの「手で転記」を解消する設計判断を ADR-0025 として起票する(#525 / ADR のみ)。生成 payload(resume_draft_cache.result)を JSON で公開し、#524 の注入機構でキャリアフォームへ流し込む。生成設計(ADR-0018/0020)は変えず、出力の返し方だけ拡張

決定内容

代替案(却下)

  • /pdf にフォーマットパラメータ: Content-Type/型が条件分岐し複雑化
  • redux/localStorage stash: ドラフトは一時データ。router state(揮発)で十分

テスト

make lint-adr-index green(索引・系統図の drift なし)。docs のみ。後続で backend + web を実装する。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added ADR-0025 describing end-to-end resume draft form injection using a JSON payload (including a new JSON result retrieval endpoint) while keeping the existing PDF workflow unchanged.
    • Documented consistent “not ready/no result” handling for draft readiness and specified the form injection/merge rules to avoid overwriting existing email/qualifications with empty payload fields.
    • Updated the ADR index and decision diagram to reference ADR-0025 and its relationships to related decisions.

ADR-0018 のドラフト生成は PDF しか返さず「手で転記」が残っていた。生成 payload は
既に resume_draft_cache.result に永続化されているため、それを JSON で公開して #524 の
注入機構でフォームへ流し込む設計判断を記録。生成設計(0018/0020)は変えない。
決定:
- GET /api/agent/resume-draft/result で payload を JSON 公開(/pdf とは別エンドポイント)
- web の「フォームに反映」→ router state → CareerResumeForm が #524 で注入(上書き確認)
- DB 非更新を維持。#524 は mapCareerResumeToForm 再利用で「Resume 互換 payload → form」を満たす
docs/adr/README.md 索引・系統図も更新(make lint-adr-index green)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in:17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: 9e861309-e4e9-4446-9a9f-b9259ddfde34

📥 Commits

Reviewing files that changed from the base of the PR and between 262f781 and c5c123c.

📒 Files selected for processing (1)
  • docs/adr/0025-resume-draft-form-injection.md
📝 Walkthrough

Walkthrough

Documents ADR-0025 for resume-draft JSON retrieval and career-form injection, then adds the decision to the ADR index and lineage diagram.

Changes

Resume draft form injection

Layer / File(s)Summary
Document injection flow
docs/adr/0025-resume-draft-form-injection.md
Defines the JSON result endpoint, router-state handoff, shared form mapping, overwrite confirmation, and database behavior.
Register ADR and lineage
docs/adr/README.md
Adds ADR-0025 to the accepted and complete ADR indexes and links it from the LLM / Agent decision diagram.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

  • yusuke0610/devforge issue 525 — Directly implements the endpoint and form-injection flow documented by ADR-0025.
  • yusuke0610/devforge issue 524 — Provides the shared payload-to-form injection and overwrite-confirmation mechanism referenced by the ADR.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added ADR for resume draft form injection.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/draft-form-inject

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.

@coderabbitaicoderabbitaiBot 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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-26: Standardize the resume-draft result endpoint path across
both documents: retain the canonical /api/agent/resume-draft/result route in
docs/adr/0025-resume-draft-form-injection.md and update the corresponding index
entry in docs/adr/README.md to exactly match it.
- Around line 27-36: 明記されたドラフト payload のマージ規則を ADR に追加し、未指定の
email、github_url、qualifications などは既存フォーム値を保持し、payload
に明示された値だけを適用する方針を定義してください。mapCareerResumeToForm
を再利用する場合も、この保存動作を満たす現在フォームとのマージ処理を前提にし、既存の resumeImport の挙動と整合させてください。
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1a363231-edba-4347-930f-28560de506a1

📥 Commits

Reviewing files that changed from the base of the PR and between f15bb19 and c198a66.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md
Comment threaddocs/adr/0025-resume-draft-form-injection.md
CodeRabbit 指摘(Major 2 件)。
- README 索引のパスを正式ルート /api/agent/resume-draft/result に統一(ADR 本文と一致)
- 注入のマージ規則を明記: #524 共通ルール(payload の非空で上書き・欠落/空は現フォーム値
保持)に統一。ドラフトは email/資格を提供しないため素の全置換だとユーザーの email を
空で消すため、それらは現フォーム値を保持するオーバーレイを掛ける(実装は #525 で追従)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

CodeRabbit 指摘 2 件に対応しました。

  1. エンドポイントパス不一致(Major): README 索引を正式ルート GET /api/agent/resume-draft/result に統一しました(ADR 本文と一致 / 262f781)。
  2. 欠落フィールドのマージ挙動(Major): ADR にマージ規則を明記しました(262f781)。[フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524 共通ルール「payload の非空で上書き・欠落/空は現フォーム値保持」に統一。ドラフトは email/資格を提供しないため、素の全置換だとユーザーの email を空で消すため、それらは現フォーム値を保持します。

実装(#553)も同ルールに追従済みです(856775a): utils/resumeImportapplyResumeDraftToForm を追加し、CareerResumeForm の注入を切り替え、email 保持・資格保持の単体テストを追加。これで PDF インポート(#524)とドラフト(#525)の注入セマンティクスが一致します。make ci green・E2E pass 済み。

@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

前回の指摘 2 件(エンドポイントパス不一致・マージ挙動未規定)は commit 262f781 で対応済みです(README を /api/agent/resume-draft/result に統一、ADR に #524 共通のマージ規則を明記)。実装側 #553 でも applyResumeDraftToForm(email/資格は現フォーム保持)に追従済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。エンドポイント表記の統一と、#524 と整合するマージ規則(email・資格の保持を含む)を確認対象として再レビューします。

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot 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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/adr/0025-resume-draft-form-injection.md (1)

24-27: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Document ownership enforcement for the payload result endpoint.

GET /api/agent/resume-draft/result returns a specific user’s cached resume payload. Add the access contract here: authenticated draft-owner access only, with 401/403 for unauthorized access or another explicit reference to the governing security middleware.

🤖 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 `@docs/adr/0025-resume-draft-form-injection.md` around lines 24 - 27, Update
the ADR entry for GET /api/agent/resume-draft/result to specify that only an
authenticated owner of the draft may access the cached payload. Document the
governing authentication and ownership middleware or contract, including 401 for
unauthenticated requests and 403 for requests targeting another user’s draft.
🤖 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/0025-resume-draft-form-injection.md`:
- Around line 40-44: Update the draft injection guidance around
mapCareerResumeToForm and applyResumeImportToForm to apply
presence/emptiness-aware preservation to every form field, not only email and
qualifications. Require existing form values to remain when payload fields are
omitted or empty, while non-empty payload values overwrite them; if specific
fields are intentional exceptions, explicitly document those exceptions.
---
Outside diff comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-27: Update the ADR entry for GET /api/agent/resume-draft/result
to specify that only an authenticated owner of the draft may access the cached
payload. Document the governing authentication and ownership middleware or
contract, including 401 for unauthenticated requests and 403 for requests
targeting another user’s draft.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: df31a40a-8b36-4b39-b7db-ac86396d6bec

📥 Commits

Reviewing files that changed from the base of the PR and between c198a66 and 262f781.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md Outdated
CodeRabbit 追加指摘(Major)。line 40 の全体規則に対し具体例が email/資格のみ保持で、
career_summary 等が空だと既存値を消しうる、と読めた。特定フィールドの無条件上書きを
やめ、全フィールドに一様の「値が非空なら上書き・空/未提供なら現フォーム保持」を適用する
ことを明記(スカラーは非空判定、配列は中身の有無で判定)。ドラフトが実際には
full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、
上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明確化。実装 #553 も追従する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

新規指摘(全フィールドへの保持ルール適用 / line 44)に対応しました。

  • ADR(c5c123c): マージ規則を全フィールド一様の preserve-if-emptyに明確化。特定フィールドの無条件上書きを排除し、「スカラーは値が非空なら上書き・空なら現フォーム保持、配列は中身の有無で置換/維持」と規定。ドラフトが実際に full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明記。
  • 実装 feat: 経歴書ドラフトのフォーム流し込みと注入機構の汎用化(ADR-0025 / #525・#524) #553(de610c3): applyResumeDraftToForm を全フィールド一様の preserve-if-empty に修正。career_summary/self_pr が空でも現フォームを保持する単体テストを追加。make ci green・E2E pass。

前回の 2 件(パス・マージ)は既に取り下げ済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。ADR の全フィールド共通 preserve-if-empty 規則と、記載内容が #553applyResumeDraftToForm 実装・テスト方針と整合することを中心に再レビューします。


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yusuke0610
yusuke0610 merged commit 1c10b41 into mainJul 28, 2026
20 checks passed
@yusuke0610
yusuke0610 deleted the feat/draft-form-inject branch July 28, 2026 03:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610
, '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

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525) - #552

Merged
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject
Jul 28, 2026
Merged

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525)#552
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

経歴書ドラフトの「手で転記」を解消する設計判断を ADR-0025 として起票する(#525 / ADR のみ)。生成 payload(resume_draft_cache.result)を JSON で公開し、#524 の注入機構でキャリアフォームへ流し込む。生成設計(ADR-0018/0020)は変えず、出力の返し方だけ拡張

決定内容

代替案(却下)

  • /pdf にフォーマットパラメータ: Content-Type/型が条件分岐し複雑化
  • redux/localStorage stash: ドラフトは一時データ。router state(揮発)で十分

テスト

make lint-adr-index green(索引・系統図の drift なし)。docs のみ。後続で backend + web を実装する。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added ADR-0025 describing end-to-end resume draft form injection using a JSON payload (including a new JSON result retrieval endpoint) while keeping the existing PDF workflow unchanged.
    • Documented consistent “not ready/no result” handling for draft readiness and specified the form injection/merge rules to avoid overwriting existing email/qualifications with empty payload fields.
    • Updated the ADR index and decision diagram to reference ADR-0025 and its relationships to related decisions.

ADR-0018 のドラフト生成は PDF しか返さず「手で転記」が残っていた。生成 payload は
既に resume_draft_cache.result に永続化されているため、それを JSON で公開して #524 の
注入機構でフォームへ流し込む設計判断を記録。生成設計(0018/0020)は変えない。
決定:
- GET /api/agent/resume-draft/result で payload を JSON 公開(/pdf とは別エンドポイント)
- web の「フォームに反映」→ router state → CareerResumeForm が #524 で注入(上書き確認)
- DB 非更新を維持。#524 は mapCareerResumeToForm 再利用で「Resume 互換 payload → form」を満たす
docs/adr/README.md 索引・系統図も更新(make lint-adr-index green)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in:17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: 9e861309-e4e9-4446-9a9f-b9259ddfde34

📥 Commits

Reviewing files that changed from the base of the PR and between 262f781 and c5c123c.

📒 Files selected for processing (1)
  • docs/adr/0025-resume-draft-form-injection.md
📝 Walkthrough

Walkthrough

Documents ADR-0025 for resume-draft JSON retrieval and career-form injection, then adds the decision to the ADR index and lineage diagram.

Changes

Resume draft form injection

Layer / File(s)Summary
Document injection flow
docs/adr/0025-resume-draft-form-injection.md
Defines the JSON result endpoint, router-state handoff, shared form mapping, overwrite confirmation, and database behavior.
Register ADR and lineage
docs/adr/README.md
Adds ADR-0025 to the accepted and complete ADR indexes and links it from the LLM / Agent decision diagram.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

  • yusuke0610/devforge issue 525 — Directly implements the endpoint and form-injection flow documented by ADR-0025.
  • yusuke0610/devforge issue 524 — Provides the shared payload-to-form injection and overwrite-confirmation mechanism referenced by the ADR.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added ADR for resume draft form injection.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/draft-form-inject

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.

@coderabbitaicoderabbitaiBot 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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-26: Standardize the resume-draft result endpoint path across
both documents: retain the canonical /api/agent/resume-draft/result route in
docs/adr/0025-resume-draft-form-injection.md and update the corresponding index
entry in docs/adr/README.md to exactly match it.
- Around line 27-36: 明記されたドラフト payload のマージ規則を ADR に追加し、未指定の
email、github_url、qualifications などは既存フォーム値を保持し、payload
に明示された値だけを適用する方針を定義してください。mapCareerResumeToForm
を再利用する場合も、この保存動作を満たす現在フォームとのマージ処理を前提にし、既存の resumeImport の挙動と整合させてください。
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1a363231-edba-4347-930f-28560de506a1

📥 Commits

Reviewing files that changed from the base of the PR and between f15bb19 and c198a66.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md
Comment threaddocs/adr/0025-resume-draft-form-injection.md
CodeRabbit 指摘(Major 2 件)。
- README 索引のパスを正式ルート /api/agent/resume-draft/result に統一(ADR 本文と一致)
- 注入のマージ規則を明記: #524 共通ルール(payload の非空で上書き・欠落/空は現フォーム値
保持)に統一。ドラフトは email/資格を提供しないため素の全置換だとユーザーの email を
空で消すため、それらは現フォーム値を保持するオーバーレイを掛ける(実装は #525 で追従)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

CodeRabbit 指摘 2 件に対応しました。

  1. エンドポイントパス不一致(Major): README 索引を正式ルート GET /api/agent/resume-draft/result に統一しました(ADR 本文と一致 / 262f781)。
  2. 欠落フィールドのマージ挙動(Major): ADR にマージ規則を明記しました(262f781)。[フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524 共通ルール「payload の非空で上書き・欠落/空は現フォーム値保持」に統一。ドラフトは email/資格を提供しないため、素の全置換だとユーザーの email を空で消すため、それらは現フォーム値を保持します。

実装(#553)も同ルールに追従済みです(856775a): utils/resumeImportapplyResumeDraftToForm を追加し、CareerResumeForm の注入を切り替え、email 保持・資格保持の単体テストを追加。これで PDF インポート(#524)とドラフト(#525)の注入セマンティクスが一致します。make ci green・E2E pass 済み。

@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

前回の指摘 2 件(エンドポイントパス不一致・マージ挙動未規定)は commit 262f781 で対応済みです(README を /api/agent/resume-draft/result に統一、ADR に #524 共通のマージ規則を明記)。実装側 #553 でも applyResumeDraftToForm(email/資格は現フォーム保持)に追従済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。エンドポイント表記の統一と、#524 と整合するマージ規則(email・資格の保持を含む)を確認対象として再レビューします。

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot 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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/adr/0025-resume-draft-form-injection.md (1)

24-27: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Document ownership enforcement for the payload result endpoint.

GET /api/agent/resume-draft/result returns a specific user’s cached resume payload. Add the access contract here: authenticated draft-owner access only, with 401/403 for unauthorized access or another explicit reference to the governing security middleware.

🤖 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 `@docs/adr/0025-resume-draft-form-injection.md` around lines 24 - 27, Update
the ADR entry for GET /api/agent/resume-draft/result to specify that only an
authenticated owner of the draft may access the cached payload. Document the
governing authentication and ownership middleware or contract, including 401 for
unauthenticated requests and 403 for requests targeting another user’s draft.
🤖 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/0025-resume-draft-form-injection.md`:
- Around line 40-44: Update the draft injection guidance around
mapCareerResumeToForm and applyResumeImportToForm to apply
presence/emptiness-aware preservation to every form field, not only email and
qualifications. Require existing form values to remain when payload fields are
omitted or empty, while non-empty payload values overwrite them; if specific
fields are intentional exceptions, explicitly document those exceptions.
---
Outside diff comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-27: Update the ADR entry for GET /api/agent/resume-draft/result
to specify that only an authenticated owner of the draft may access the cached
payload. Document the governing authentication and ownership middleware or
contract, including 401 for unauthenticated requests and 403 for requests
targeting another user’s draft.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: df31a40a-8b36-4b39-b7db-ac86396d6bec

📥 Commits

Reviewing files that changed from the base of the PR and between c198a66 and 262f781.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md Outdated
CodeRabbit 追加指摘(Major)。line 40 の全体規則に対し具体例が email/資格のみ保持で、
career_summary 等が空だと既存値を消しうる、と読めた。特定フィールドの無条件上書きを
やめ、全フィールドに一様の「値が非空なら上書き・空/未提供なら現フォーム保持」を適用する
ことを明記(スカラーは非空判定、配列は中身の有無で判定)。ドラフトが実際には
full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、
上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明確化。実装 #553 も追従する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

新規指摘(全フィールドへの保持ルール適用 / line 44)に対応しました。

  • ADR(c5c123c): マージ規則を全フィールド一様の preserve-if-emptyに明確化。特定フィールドの無条件上書きを排除し、「スカラーは値が非空なら上書き・空なら現フォーム保持、配列は中身の有無で置換/維持」と規定。ドラフトが実際に full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明記。
  • 実装 feat: 経歴書ドラフトのフォーム流し込みと注入機構の汎用化(ADR-0025 / #525・#524) #553(de610c3): applyResumeDraftToForm を全フィールド一様の preserve-if-empty に修正。career_summary/self_pr が空でも現フォームを保持する単体テストを追加。make ci green・E2E pass。

前回の 2 件(パス・マージ)は既に取り下げ済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。ADR の全フィールド共通 preserve-if-empty 規則と、記載内容が #553applyResumeDraftToForm 実装・テスト方針と整合することを中心に再レビューします。


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yusuke0610
yusuke0610 merged commit 1c10b41 into mainJul 28, 2026
20 checks passed
@yusuke0610
yusuke0610 deleted the feat/draft-form-inject branch July 28, 2026 03:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610
, '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

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525) - #552

Merged
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject
Jul 28, 2026
Merged

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525)#552
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

経歴書ドラフトの「手で転記」を解消する設計判断を ADR-0025 として起票する(#525 / ADR のみ)。生成 payload(resume_draft_cache.result)を JSON で公開し、#524 の注入機構でキャリアフォームへ流し込む。生成設計(ADR-0018/0020)は変えず、出力の返し方だけ拡張

決定内容

代替案(却下)

  • /pdf にフォーマットパラメータ: Content-Type/型が条件分岐し複雑化
  • redux/localStorage stash: ドラフトは一時データ。router state(揮発)で十分

テスト

make lint-adr-index green(索引・系統図の drift なし)。docs のみ。後続で backend + web を実装する。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added ADR-0025 describing end-to-end resume draft form injection using a JSON payload (including a new JSON result retrieval endpoint) while keeping the existing PDF workflow unchanged.
    • Documented consistent “not ready/no result” handling for draft readiness and specified the form injection/merge rules to avoid overwriting existing email/qualifications with empty payload fields.
    • Updated the ADR index and decision diagram to reference ADR-0025 and its relationships to related decisions.

ADR-0018 のドラフト生成は PDF しか返さず「手で転記」が残っていた。生成 payload は
既に resume_draft_cache.result に永続化されているため、それを JSON で公開して #524 の
注入機構でフォームへ流し込む設計判断を記録。生成設計(0018/0020)は変えない。
決定:
- GET /api/agent/resume-draft/result で payload を JSON 公開(/pdf とは別エンドポイント)
- web の「フォームに反映」→ router state → CareerResumeForm が #524 で注入(上書き確認)
- DB 非更新を維持。#524 は mapCareerResumeToForm 再利用で「Resume 互換 payload → form」を満たす
docs/adr/README.md 索引・系統図も更新(make lint-adr-index green)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in:17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: 9e861309-e4e9-4446-9a9f-b9259ddfde34

📥 Commits

Reviewing files that changed from the base of the PR and between 262f781 and c5c123c.

📒 Files selected for processing (1)
  • docs/adr/0025-resume-draft-form-injection.md
📝 Walkthrough

Walkthrough

Documents ADR-0025 for resume-draft JSON retrieval and career-form injection, then adds the decision to the ADR index and lineage diagram.

Changes

Resume draft form injection

Layer / File(s)Summary
Document injection flow
docs/adr/0025-resume-draft-form-injection.md
Defines the JSON result endpoint, router-state handoff, shared form mapping, overwrite confirmation, and database behavior.
Register ADR and lineage
docs/adr/README.md
Adds ADR-0025 to the accepted and complete ADR indexes and links it from the LLM / Agent decision diagram.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

  • yusuke0610/devforge issue 525 — Directly implements the endpoint and form-injection flow documented by ADR-0025.
  • yusuke0610/devforge issue 524 — Provides the shared payload-to-form injection and overwrite-confirmation mechanism referenced by the ADR.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added ADR for resume draft form injection.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/draft-form-inject

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.

@coderabbitaicoderabbitaiBot 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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-26: Standardize the resume-draft result endpoint path across
both documents: retain the canonical /api/agent/resume-draft/result route in
docs/adr/0025-resume-draft-form-injection.md and update the corresponding index
entry in docs/adr/README.md to exactly match it.
- Around line 27-36: 明記されたドラフト payload のマージ規則を ADR に追加し、未指定の
email、github_url、qualifications などは既存フォーム値を保持し、payload
に明示された値だけを適用する方針を定義してください。mapCareerResumeToForm
を再利用する場合も、この保存動作を満たす現在フォームとのマージ処理を前提にし、既存の resumeImport の挙動と整合させてください。
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1a363231-edba-4347-930f-28560de506a1

📥 Commits

Reviewing files that changed from the base of the PR and between f15bb19 and c198a66.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md
Comment threaddocs/adr/0025-resume-draft-form-injection.md
CodeRabbit 指摘(Major 2 件)。
- README 索引のパスを正式ルート /api/agent/resume-draft/result に統一(ADR 本文と一致)
- 注入のマージ規則を明記: #524 共通ルール(payload の非空で上書き・欠落/空は現フォーム値
保持)に統一。ドラフトは email/資格を提供しないため素の全置換だとユーザーの email を
空で消すため、それらは現フォーム値を保持するオーバーレイを掛ける(実装は #525 で追従)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

CodeRabbit 指摘 2 件に対応しました。

  1. エンドポイントパス不一致(Major): README 索引を正式ルート GET /api/agent/resume-draft/result に統一しました(ADR 本文と一致 / 262f781)。
  2. 欠落フィールドのマージ挙動(Major): ADR にマージ規則を明記しました(262f781)。[フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524 共通ルール「payload の非空で上書き・欠落/空は現フォーム値保持」に統一。ドラフトは email/資格を提供しないため、素の全置換だとユーザーの email を空で消すため、それらは現フォーム値を保持します。

実装(#553)も同ルールに追従済みです(856775a): utils/resumeImportapplyResumeDraftToForm を追加し、CareerResumeForm の注入を切り替え、email 保持・資格保持の単体テストを追加。これで PDF インポート(#524)とドラフト(#525)の注入セマンティクスが一致します。make ci green・E2E pass 済み。

@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

前回の指摘 2 件(エンドポイントパス不一致・マージ挙動未規定)は commit 262f781 で対応済みです(README を /api/agent/resume-draft/result に統一、ADR に #524 共通のマージ規則を明記)。実装側 #553 でも applyResumeDraftToForm(email/資格は現フォーム保持)に追従済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。エンドポイント表記の統一と、#524 と整合するマージ規則(email・資格の保持を含む)を確認対象として再レビューします。

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot 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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/adr/0025-resume-draft-form-injection.md (1)

24-27: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Document ownership enforcement for the payload result endpoint.

GET /api/agent/resume-draft/result returns a specific user’s cached resume payload. Add the access contract here: authenticated draft-owner access only, with 401/403 for unauthorized access or another explicit reference to the governing security middleware.

🤖 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 `@docs/adr/0025-resume-draft-form-injection.md` around lines 24 - 27, Update
the ADR entry for GET /api/agent/resume-draft/result to specify that only an
authenticated owner of the draft may access the cached payload. Document the
governing authentication and ownership middleware or contract, including 401 for
unauthenticated requests and 403 for requests targeting another user’s draft.
🤖 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/0025-resume-draft-form-injection.md`:
- Around line 40-44: Update the draft injection guidance around
mapCareerResumeToForm and applyResumeImportToForm to apply
presence/emptiness-aware preservation to every form field, not only email and
qualifications. Require existing form values to remain when payload fields are
omitted or empty, while non-empty payload values overwrite them; if specific
fields are intentional exceptions, explicitly document those exceptions.
---
Outside diff comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-27: Update the ADR entry for GET /api/agent/resume-draft/result
to specify that only an authenticated owner of the draft may access the cached
payload. Document the governing authentication and ownership middleware or
contract, including 401 for unauthenticated requests and 403 for requests
targeting another user’s draft.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: df31a40a-8b36-4b39-b7db-ac86396d6bec

📥 Commits

Reviewing files that changed from the base of the PR and between c198a66 and 262f781.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md Outdated
CodeRabbit 追加指摘(Major)。line 40 の全体規則に対し具体例が email/資格のみ保持で、
career_summary 等が空だと既存値を消しうる、と読めた。特定フィールドの無条件上書きを
やめ、全フィールドに一様の「値が非空なら上書き・空/未提供なら現フォーム保持」を適用する
ことを明記(スカラーは非空判定、配列は中身の有無で判定)。ドラフトが実際には
full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、
上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明確化。実装 #553 も追従する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

新規指摘(全フィールドへの保持ルール適用 / line 44)に対応しました。

  • ADR(c5c123c): マージ規則を全フィールド一様の preserve-if-emptyに明確化。特定フィールドの無条件上書きを排除し、「スカラーは値が非空なら上書き・空なら現フォーム保持、配列は中身の有無で置換/維持」と規定。ドラフトが実際に full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明記。
  • 実装 feat: 経歴書ドラフトのフォーム流し込みと注入機構の汎用化(ADR-0025 / #525・#524) #553(de610c3): applyResumeDraftToForm を全フィールド一様の preserve-if-empty に修正。career_summary/self_pr が空でも現フォームを保持する単体テストを追加。make ci green・E2E pass。

前回の 2 件(パス・マージ)は既に取り下げ済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。ADR の全フィールド共通 preserve-if-empty 規則と、記載内容が #553applyResumeDraftToForm 実装・テスト方針と整合することを中心に再レビューします。


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yusuke0610
yusuke0610 merged commit 1c10b41 into mainJul 28, 2026
20 checks passed
@yusuke0610
yusuke0610 deleted the feat/draft-form-inject branch July 28, 2026 03:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610
, '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

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525) - #552

Merged
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject
Jul 28, 2026
Merged

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525)#552
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

経歴書ドラフトの「手で転記」を解消する設計判断を ADR-0025 として起票する(#525 / ADR のみ)。生成 payload(resume_draft_cache.result)を JSON で公開し、#524 の注入機構でキャリアフォームへ流し込む。生成設計(ADR-0018/0020)は変えず、出力の返し方だけ拡張

決定内容

代替案(却下)

  • /pdf にフォーマットパラメータ: Content-Type/型が条件分岐し複雑化
  • redux/localStorage stash: ドラフトは一時データ。router state(揮発)で十分

テスト

make lint-adr-index green(索引・系統図の drift なし)。docs のみ。後続で backend + web を実装する。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added ADR-0025 describing end-to-end resume draft form injection using a JSON payload (including a new JSON result retrieval endpoint) while keeping the existing PDF workflow unchanged.
    • Documented consistent “not ready/no result” handling for draft readiness and specified the form injection/merge rules to avoid overwriting existing email/qualifications with empty payload fields.
    • Updated the ADR index and decision diagram to reference ADR-0025 and its relationships to related decisions.

ADR-0018 のドラフト生成は PDF しか返さず「手で転記」が残っていた。生成 payload は
既に resume_draft_cache.result に永続化されているため、それを JSON で公開して #524 の
注入機構でフォームへ流し込む設計判断を記録。生成設計(0018/0020)は変えない。
決定:
- GET /api/agent/resume-draft/result で payload を JSON 公開(/pdf とは別エンドポイント)
- web の「フォームに反映」→ router state → CareerResumeForm が #524 で注入(上書き確認)
- DB 非更新を維持。#524 は mapCareerResumeToForm 再利用で「Resume 互換 payload → form」を満たす
docs/adr/README.md 索引・系統図も更新(make lint-adr-index green)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in:17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: 9e861309-e4e9-4446-9a9f-b9259ddfde34

📥 Commits

Reviewing files that changed from the base of the PR and between 262f781 and c5c123c.

📒 Files selected for processing (1)
  • docs/adr/0025-resume-draft-form-injection.md
📝 Walkthrough

Walkthrough

Documents ADR-0025 for resume-draft JSON retrieval and career-form injection, then adds the decision to the ADR index and lineage diagram.

Changes

Resume draft form injection

Layer / File(s)Summary
Document injection flow
docs/adr/0025-resume-draft-form-injection.md
Defines the JSON result endpoint, router-state handoff, shared form mapping, overwrite confirmation, and database behavior.
Register ADR and lineage
docs/adr/README.md
Adds ADR-0025 to the accepted and complete ADR indexes and links it from the LLM / Agent decision diagram.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

  • yusuke0610/devforge issue 525 — Directly implements the endpoint and form-injection flow documented by ADR-0025.
  • yusuke0610/devforge issue 524 — Provides the shared payload-to-form injection and overwrite-confirmation mechanism referenced by the ADR.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added ADR for resume draft form injection.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/draft-form-inject

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.

@coderabbitaicoderabbitaiBot 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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-26: Standardize the resume-draft result endpoint path across
both documents: retain the canonical /api/agent/resume-draft/result route in
docs/adr/0025-resume-draft-form-injection.md and update the corresponding index
entry in docs/adr/README.md to exactly match it.
- Around line 27-36: 明記されたドラフト payload のマージ規則を ADR に追加し、未指定の
email、github_url、qualifications などは既存フォーム値を保持し、payload
に明示された値だけを適用する方針を定義してください。mapCareerResumeToForm
を再利用する場合も、この保存動作を満たす現在フォームとのマージ処理を前提にし、既存の resumeImport の挙動と整合させてください。
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1a363231-edba-4347-930f-28560de506a1

📥 Commits

Reviewing files that changed from the base of the PR and between f15bb19 and c198a66.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md
Comment threaddocs/adr/0025-resume-draft-form-injection.md
CodeRabbit 指摘(Major 2 件)。
- README 索引のパスを正式ルート /api/agent/resume-draft/result に統一(ADR 本文と一致)
- 注入のマージ規則を明記: #524 共通ルール(payload の非空で上書き・欠落/空は現フォーム値
保持)に統一。ドラフトは email/資格を提供しないため素の全置換だとユーザーの email を
空で消すため、それらは現フォーム値を保持するオーバーレイを掛ける(実装は #525 で追従)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

CodeRabbit 指摘 2 件に対応しました。

  1. エンドポイントパス不一致(Major): README 索引を正式ルート GET /api/agent/resume-draft/result に統一しました(ADR 本文と一致 / 262f781)。
  2. 欠落フィールドのマージ挙動(Major): ADR にマージ規則を明記しました(262f781)。[フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524 共通ルール「payload の非空で上書き・欠落/空は現フォーム値保持」に統一。ドラフトは email/資格を提供しないため、素の全置換だとユーザーの email を空で消すため、それらは現フォーム値を保持します。

実装(#553)も同ルールに追従済みです(856775a): utils/resumeImportapplyResumeDraftToForm を追加し、CareerResumeForm の注入を切り替え、email 保持・資格保持の単体テストを追加。これで PDF インポート(#524)とドラフト(#525)の注入セマンティクスが一致します。make ci green・E2E pass 済み。

@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

前回の指摘 2 件(エンドポイントパス不一致・マージ挙動未規定)は commit 262f781 で対応済みです(README を /api/agent/resume-draft/result に統一、ADR に #524 共通のマージ規則を明記)。実装側 #553 でも applyResumeDraftToForm(email/資格は現フォーム保持)に追従済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。エンドポイント表記の統一と、#524 と整合するマージ規則(email・資格の保持を含む)を確認対象として再レビューします。

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot 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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/adr/0025-resume-draft-form-injection.md (1)

24-27: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Document ownership enforcement for the payload result endpoint.

GET /api/agent/resume-draft/result returns a specific user’s cached resume payload. Add the access contract here: authenticated draft-owner access only, with 401/403 for unauthorized access or another explicit reference to the governing security middleware.

🤖 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 `@docs/adr/0025-resume-draft-form-injection.md` around lines 24 - 27, Update
the ADR entry for GET /api/agent/resume-draft/result to specify that only an
authenticated owner of the draft may access the cached payload. Document the
governing authentication and ownership middleware or contract, including 401 for
unauthenticated requests and 403 for requests targeting another user’s draft.
🤖 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/0025-resume-draft-form-injection.md`:
- Around line 40-44: Update the draft injection guidance around
mapCareerResumeToForm and applyResumeImportToForm to apply
presence/emptiness-aware preservation to every form field, not only email and
qualifications. Require existing form values to remain when payload fields are
omitted or empty, while non-empty payload values overwrite them; if specific
fields are intentional exceptions, explicitly document those exceptions.
---
Outside diff comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-27: Update the ADR entry for GET /api/agent/resume-draft/result
to specify that only an authenticated owner of the draft may access the cached
payload. Document the governing authentication and ownership middleware or
contract, including 401 for unauthenticated requests and 403 for requests
targeting another user’s draft.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: df31a40a-8b36-4b39-b7db-ac86396d6bec

📥 Commits

Reviewing files that changed from the base of the PR and between c198a66 and 262f781.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md Outdated
CodeRabbit 追加指摘(Major)。line 40 の全体規則に対し具体例が email/資格のみ保持で、
career_summary 等が空だと既存値を消しうる、と読めた。特定フィールドの無条件上書きを
やめ、全フィールドに一様の「値が非空なら上書き・空/未提供なら現フォーム保持」を適用する
ことを明記(スカラーは非空判定、配列は中身の有無で判定)。ドラフトが実際には
full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、
上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明確化。実装 #553 も追従する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

新規指摘(全フィールドへの保持ルール適用 / line 44)に対応しました。

  • ADR(c5c123c): マージ規則を全フィールド一様の preserve-if-emptyに明確化。特定フィールドの無条件上書きを排除し、「スカラーは値が非空なら上書き・空なら現フォーム保持、配列は中身の有無で置換/維持」と規定。ドラフトが実際に full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明記。
  • 実装 feat: 経歴書ドラフトのフォーム流し込みと注入機構の汎用化(ADR-0025 / #525・#524) #553(de610c3): applyResumeDraftToForm を全フィールド一様の preserve-if-empty に修正。career_summary/self_pr が空でも現フォームを保持する単体テストを追加。make ci green・E2E pass。

前回の 2 件(パス・マージ)は既に取り下げ済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。ADR の全フィールド共通 preserve-if-empty 規則と、記載内容が #553applyResumeDraftToForm 実装・テスト方針と整合することを中心に再レビューします。


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yusuke0610
yusuke0610 merged commit 1c10b41 into mainJul 28, 2026
20 checks passed
@yusuke0610
yusuke0610 deleted the feat/draft-form-inject branch July 28, 2026 03:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610
, '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

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525) - #552

Merged
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject
Jul 28, 2026
Merged

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525)#552
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

経歴書ドラフトの「手で転記」を解消する設計判断を ADR-0025 として起票する(#525 / ADR のみ)。生成 payload(resume_draft_cache.result)を JSON で公開し、#524 の注入機構でキャリアフォームへ流し込む。生成設計(ADR-0018/0020)は変えず、出力の返し方だけ拡張

決定内容

代替案(却下)

  • /pdf にフォーマットパラメータ: Content-Type/型が条件分岐し複雑化
  • redux/localStorage stash: ドラフトは一時データ。router state(揮発)で十分

テスト

make lint-adr-index green(索引・系統図の drift なし)。docs のみ。後続で backend + web を実装する。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added ADR-0025 describing end-to-end resume draft form injection using a JSON payload (including a new JSON result retrieval endpoint) while keeping the existing PDF workflow unchanged.
    • Documented consistent “not ready/no result” handling for draft readiness and specified the form injection/merge rules to avoid overwriting existing email/qualifications with empty payload fields.
    • Updated the ADR index and decision diagram to reference ADR-0025 and its relationships to related decisions.

ADR-0018 のドラフト生成は PDF しか返さず「手で転記」が残っていた。生成 payload は
既に resume_draft_cache.result に永続化されているため、それを JSON で公開して #524 の
注入機構でフォームへ流し込む設計判断を記録。生成設計(0018/0020)は変えない。
決定:
- GET /api/agent/resume-draft/result で payload を JSON 公開(/pdf とは別エンドポイント)
- web の「フォームに反映」→ router state → CareerResumeForm が #524 で注入(上書き確認)
- DB 非更新を維持。#524 は mapCareerResumeToForm 再利用で「Resume 互換 payload → form」を満たす
docs/adr/README.md 索引・系統図も更新(make lint-adr-index green)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in:17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: 9e861309-e4e9-4446-9a9f-b9259ddfde34

📥 Commits

Reviewing files that changed from the base of the PR and between 262f781 and c5c123c.

📒 Files selected for processing (1)
  • docs/adr/0025-resume-draft-form-injection.md
📝 Walkthrough

Walkthrough

Documents ADR-0025 for resume-draft JSON retrieval and career-form injection, then adds the decision to the ADR index and lineage diagram.

Changes

Resume draft form injection

Layer / File(s)Summary
Document injection flow
docs/adr/0025-resume-draft-form-injection.md
Defines the JSON result endpoint, router-state handoff, shared form mapping, overwrite confirmation, and database behavior.
Register ADR and lineage
docs/adr/README.md
Adds ADR-0025 to the accepted and complete ADR indexes and links it from the LLM / Agent decision diagram.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

  • yusuke0610/devforge issue 525 — Directly implements the endpoint and form-injection flow documented by ADR-0025.
  • yusuke0610/devforge issue 524 — Provides the shared payload-to-form injection and overwrite-confirmation mechanism referenced by the ADR.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added ADR for resume draft form injection.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/draft-form-inject

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.

@coderabbitaicoderabbitaiBot 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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-26: Standardize the resume-draft result endpoint path across
both documents: retain the canonical /api/agent/resume-draft/result route in
docs/adr/0025-resume-draft-form-injection.md and update the corresponding index
entry in docs/adr/README.md to exactly match it.
- Around line 27-36: 明記されたドラフト payload のマージ規則を ADR に追加し、未指定の
email、github_url、qualifications などは既存フォーム値を保持し、payload
に明示された値だけを適用する方針を定義してください。mapCareerResumeToForm
を再利用する場合も、この保存動作を満たす現在フォームとのマージ処理を前提にし、既存の resumeImport の挙動と整合させてください。
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1a363231-edba-4347-930f-28560de506a1

📥 Commits

Reviewing files that changed from the base of the PR and between f15bb19 and c198a66.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md
Comment threaddocs/adr/0025-resume-draft-form-injection.md
CodeRabbit 指摘(Major 2 件)。
- README 索引のパスを正式ルート /api/agent/resume-draft/result に統一(ADR 本文と一致)
- 注入のマージ規則を明記: #524 共通ルール(payload の非空で上書き・欠落/空は現フォーム値
保持)に統一。ドラフトは email/資格を提供しないため素の全置換だとユーザーの email を
空で消すため、それらは現フォーム値を保持するオーバーレイを掛ける(実装は #525 で追従)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

CodeRabbit 指摘 2 件に対応しました。

  1. エンドポイントパス不一致(Major): README 索引を正式ルート GET /api/agent/resume-draft/result に統一しました(ADR 本文と一致 / 262f781)。
  2. 欠落フィールドのマージ挙動(Major): ADR にマージ規則を明記しました(262f781)。[フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524 共通ルール「payload の非空で上書き・欠落/空は現フォーム値保持」に統一。ドラフトは email/資格を提供しないため、素の全置換だとユーザーの email を空で消すため、それらは現フォーム値を保持します。

実装(#553)も同ルールに追従済みです(856775a): utils/resumeImportapplyResumeDraftToForm を追加し、CareerResumeForm の注入を切り替え、email 保持・資格保持の単体テストを追加。これで PDF インポート(#524)とドラフト(#525)の注入セマンティクスが一致します。make ci green・E2E pass 済み。

@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

前回の指摘 2 件(エンドポイントパス不一致・マージ挙動未規定)は commit 262f781 で対応済みです(README を /api/agent/resume-draft/result に統一、ADR に #524 共通のマージ規則を明記)。実装側 #553 でも applyResumeDraftToForm(email/資格は現フォーム保持)に追従済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。エンドポイント表記の統一と、#524 と整合するマージ規則(email・資格の保持を含む)を確認対象として再レビューします。

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot 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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/adr/0025-resume-draft-form-injection.md (1)

24-27: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Document ownership enforcement for the payload result endpoint.

GET /api/agent/resume-draft/result returns a specific user’s cached resume payload. Add the access contract here: authenticated draft-owner access only, with 401/403 for unauthorized access or another explicit reference to the governing security middleware.

🤖 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 `@docs/adr/0025-resume-draft-form-injection.md` around lines 24 - 27, Update
the ADR entry for GET /api/agent/resume-draft/result to specify that only an
authenticated owner of the draft may access the cached payload. Document the
governing authentication and ownership middleware or contract, including 401 for
unauthenticated requests and 403 for requests targeting another user’s draft.
🤖 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/0025-resume-draft-form-injection.md`:
- Around line 40-44: Update the draft injection guidance around
mapCareerResumeToForm and applyResumeImportToForm to apply
presence/emptiness-aware preservation to every form field, not only email and
qualifications. Require existing form values to remain when payload fields are
omitted or empty, while non-empty payload values overwrite them; if specific
fields are intentional exceptions, explicitly document those exceptions.
---
Outside diff comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-27: Update the ADR entry for GET /api/agent/resume-draft/result
to specify that only an authenticated owner of the draft may access the cached
payload. Document the governing authentication and ownership middleware or
contract, including 401 for unauthenticated requests and 403 for requests
targeting another user’s draft.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: df31a40a-8b36-4b39-b7db-ac86396d6bec

📥 Commits

Reviewing files that changed from the base of the PR and between c198a66 and 262f781.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md Outdated
CodeRabbit 追加指摘(Major)。line 40 の全体規則に対し具体例が email/資格のみ保持で、
career_summary 等が空だと既存値を消しうる、と読めた。特定フィールドの無条件上書きを
やめ、全フィールドに一様の「値が非空なら上書き・空/未提供なら現フォーム保持」を適用する
ことを明記(スカラーは非空判定、配列は中身の有無で判定)。ドラフトが実際には
full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、
上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明確化。実装 #553 も追従する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

新規指摘(全フィールドへの保持ルール適用 / line 44)に対応しました。

  • ADR(c5c123c): マージ規則を全フィールド一様の preserve-if-emptyに明確化。特定フィールドの無条件上書きを排除し、「スカラーは値が非空なら上書き・空なら現フォーム保持、配列は中身の有無で置換/維持」と規定。ドラフトが実際に full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明記。
  • 実装 feat: 経歴書ドラフトのフォーム流し込みと注入機構の汎用化(ADR-0025 / #525・#524) #553(de610c3): applyResumeDraftToForm を全フィールド一様の preserve-if-empty に修正。career_summary/self_pr が空でも現フォームを保持する単体テストを追加。make ci green・E2E pass。

前回の 2 件(パス・マージ)は既に取り下げ済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。ADR の全フィールド共通 preserve-if-empty 規則と、記載内容が #553applyResumeDraftToForm 実装・テスト方針と整合することを中心に再レビューします。


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yusuke0610
yusuke0610 merged commit 1c10b41 into mainJul 28, 2026
20 checks passed
@yusuke0610
yusuke0610 deleted the feat/draft-form-inject branch July 28, 2026 03:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610
, '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

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525) - #552

Merged
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject
Jul 28, 2026
Merged

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525)#552
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

経歴書ドラフトの「手で転記」を解消する設計判断を ADR-0025 として起票する(#525 / ADR のみ)。生成 payload(resume_draft_cache.result)を JSON で公開し、#524 の注入機構でキャリアフォームへ流し込む。生成設計(ADR-0018/0020)は変えず、出力の返し方だけ拡張

決定内容

代替案(却下)

  • /pdf にフォーマットパラメータ: Content-Type/型が条件分岐し複雑化
  • redux/localStorage stash: ドラフトは一時データ。router state(揮発)で十分

テスト

make lint-adr-index green(索引・系統図の drift なし)。docs のみ。後続で backend + web を実装する。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added ADR-0025 describing end-to-end resume draft form injection using a JSON payload (including a new JSON result retrieval endpoint) while keeping the existing PDF workflow unchanged.
    • Documented consistent “not ready/no result” handling for draft readiness and specified the form injection/merge rules to avoid overwriting existing email/qualifications with empty payload fields.
    • Updated the ADR index and decision diagram to reference ADR-0025 and its relationships to related decisions.

ADR-0018 のドラフト生成は PDF しか返さず「手で転記」が残っていた。生成 payload は
既に resume_draft_cache.result に永続化されているため、それを JSON で公開して #524 の
注入機構でフォームへ流し込む設計判断を記録。生成設計(0018/0020)は変えない。
決定:
- GET /api/agent/resume-draft/result で payload を JSON 公開(/pdf とは別エンドポイント)
- web の「フォームに反映」→ router state → CareerResumeForm が #524 で注入(上書き確認)
- DB 非更新を維持。#524 は mapCareerResumeToForm 再利用で「Resume 互換 payload → form」を満たす
docs/adr/README.md 索引・系統図も更新(make lint-adr-index green)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in:17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: 9e861309-e4e9-4446-9a9f-b9259ddfde34

📥 Commits

Reviewing files that changed from the base of the PR and between 262f781 and c5c123c.

📒 Files selected for processing (1)
  • docs/adr/0025-resume-draft-form-injection.md
📝 Walkthrough

Walkthrough

Documents ADR-0025 for resume-draft JSON retrieval and career-form injection, then adds the decision to the ADR index and lineage diagram.

Changes

Resume draft form injection

Layer / File(s)Summary
Document injection flow
docs/adr/0025-resume-draft-form-injection.md
Defines the JSON result endpoint, router-state handoff, shared form mapping, overwrite confirmation, and database behavior.
Register ADR and lineage
docs/adr/README.md
Adds ADR-0025 to the accepted and complete ADR indexes and links it from the LLM / Agent decision diagram.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

  • yusuke0610/devforge issue 525 — Directly implements the endpoint and form-injection flow documented by ADR-0025.
  • yusuke0610/devforge issue 524 — Provides the shared payload-to-form injection and overwrite-confirmation mechanism referenced by the ADR.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added ADR for resume draft form injection.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/draft-form-inject

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.

@coderabbitaicoderabbitaiBot 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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-26: Standardize the resume-draft result endpoint path across
both documents: retain the canonical /api/agent/resume-draft/result route in
docs/adr/0025-resume-draft-form-injection.md and update the corresponding index
entry in docs/adr/README.md to exactly match it.
- Around line 27-36: 明記されたドラフト payload のマージ規則を ADR に追加し、未指定の
email、github_url、qualifications などは既存フォーム値を保持し、payload
に明示された値だけを適用する方針を定義してください。mapCareerResumeToForm
を再利用する場合も、この保存動作を満たす現在フォームとのマージ処理を前提にし、既存の resumeImport の挙動と整合させてください。
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1a363231-edba-4347-930f-28560de506a1

📥 Commits

Reviewing files that changed from the base of the PR and between f15bb19 and c198a66.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md
Comment threaddocs/adr/0025-resume-draft-form-injection.md
CodeRabbit 指摘(Major 2 件)。
- README 索引のパスを正式ルート /api/agent/resume-draft/result に統一(ADR 本文と一致)
- 注入のマージ規則を明記: #524 共通ルール(payload の非空で上書き・欠落/空は現フォーム値
保持)に統一。ドラフトは email/資格を提供しないため素の全置換だとユーザーの email を
空で消すため、それらは現フォーム値を保持するオーバーレイを掛ける(実装は #525 で追従)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

CodeRabbit 指摘 2 件に対応しました。

  1. エンドポイントパス不一致(Major): README 索引を正式ルート GET /api/agent/resume-draft/result に統一しました(ADR 本文と一致 / 262f781)。
  2. 欠落フィールドのマージ挙動(Major): ADR にマージ規則を明記しました(262f781)。[フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524 共通ルール「payload の非空で上書き・欠落/空は現フォーム値保持」に統一。ドラフトは email/資格を提供しないため、素の全置換だとユーザーの email を空で消すため、それらは現フォーム値を保持します。

実装(#553)も同ルールに追従済みです(856775a): utils/resumeImportapplyResumeDraftToForm を追加し、CareerResumeForm の注入を切り替え、email 保持・資格保持の単体テストを追加。これで PDF インポート(#524)とドラフト(#525)の注入セマンティクスが一致します。make ci green・E2E pass 済み。

@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

前回の指摘 2 件(エンドポイントパス不一致・マージ挙動未規定)は commit 262f781 で対応済みです(README を /api/agent/resume-draft/result に統一、ADR に #524 共通のマージ規則を明記)。実装側 #553 でも applyResumeDraftToForm(email/資格は現フォーム保持)に追従済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。エンドポイント表記の統一と、#524 と整合するマージ規則(email・資格の保持を含む)を確認対象として再レビューします。

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot 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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/adr/0025-resume-draft-form-injection.md (1)

24-27: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Document ownership enforcement for the payload result endpoint.

GET /api/agent/resume-draft/result returns a specific user’s cached resume payload. Add the access contract here: authenticated draft-owner access only, with 401/403 for unauthorized access or another explicit reference to the governing security middleware.

🤖 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 `@docs/adr/0025-resume-draft-form-injection.md` around lines 24 - 27, Update
the ADR entry for GET /api/agent/resume-draft/result to specify that only an
authenticated owner of the draft may access the cached payload. Document the
governing authentication and ownership middleware or contract, including 401 for
unauthenticated requests and 403 for requests targeting another user’s draft.
🤖 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/0025-resume-draft-form-injection.md`:
- Around line 40-44: Update the draft injection guidance around
mapCareerResumeToForm and applyResumeImportToForm to apply
presence/emptiness-aware preservation to every form field, not only email and
qualifications. Require existing form values to remain when payload fields are
omitted or empty, while non-empty payload values overwrite them; if specific
fields are intentional exceptions, explicitly document those exceptions.
---
Outside diff comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-27: Update the ADR entry for GET /api/agent/resume-draft/result
to specify that only an authenticated owner of the draft may access the cached
payload. Document the governing authentication and ownership middleware or
contract, including 401 for unauthenticated requests and 403 for requests
targeting another user’s draft.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: df31a40a-8b36-4b39-b7db-ac86396d6bec

📥 Commits

Reviewing files that changed from the base of the PR and between c198a66 and 262f781.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md Outdated
CodeRabbit 追加指摘(Major)。line 40 の全体規則に対し具体例が email/資格のみ保持で、
career_summary 等が空だと既存値を消しうる、と読めた。特定フィールドの無条件上書きを
やめ、全フィールドに一様の「値が非空なら上書き・空/未提供なら現フォーム保持」を適用する
ことを明記(スカラーは非空判定、配列は中身の有無で判定)。ドラフトが実際には
full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、
上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明確化。実装 #553 も追従する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

新規指摘(全フィールドへの保持ルール適用 / line 44)に対応しました。

  • ADR(c5c123c): マージ規則を全フィールド一様の preserve-if-emptyに明確化。特定フィールドの無条件上書きを排除し、「スカラーは値が非空なら上書き・空なら現フォーム保持、配列は中身の有無で置換/維持」と規定。ドラフトが実際に full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明記。
  • 実装 feat: 経歴書ドラフトのフォーム流し込みと注入機構の汎用化(ADR-0025 / #525・#524) #553(de610c3): applyResumeDraftToForm を全フィールド一様の preserve-if-empty に修正。career_summary/self_pr が空でも現フォームを保持する単体テストを追加。make ci green・E2E pass。

前回の 2 件(パス・マージ)は既に取り下げ済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。ADR の全フィールド共通 preserve-if-empty 規則と、記載内容が #553applyResumeDraftToForm 実装・テスト方針と整合することを中心に再レビューします。


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yusuke0610
yusuke0610 merged commit 1c10b41 into mainJul 28, 2026
20 checks passed
@yusuke0610
yusuke0610 deleted the feat/draft-form-inject branch July 28, 2026 03:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610
, '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

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525) - #552

Merged
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject
Jul 28, 2026
Merged

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525)#552
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

経歴書ドラフトの「手で転記」を解消する設計判断を ADR-0025 として起票する(#525 / ADR のみ)。生成 payload(resume_draft_cache.result)を JSON で公開し、#524 の注入機構でキャリアフォームへ流し込む。生成設計(ADR-0018/0020)は変えず、出力の返し方だけ拡張

決定内容

代替案(却下)

  • /pdf にフォーマットパラメータ: Content-Type/型が条件分岐し複雑化
  • redux/localStorage stash: ドラフトは一時データ。router state(揮発)で十分

テスト

make lint-adr-index green(索引・系統図の drift なし)。docs のみ。後続で backend + web を実装する。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added ADR-0025 describing end-to-end resume draft form injection using a JSON payload (including a new JSON result retrieval endpoint) while keeping the existing PDF workflow unchanged.
    • Documented consistent “not ready/no result” handling for draft readiness and specified the form injection/merge rules to avoid overwriting existing email/qualifications with empty payload fields.
    • Updated the ADR index and decision diagram to reference ADR-0025 and its relationships to related decisions.

ADR-0018 のドラフト生成は PDF しか返さず「手で転記」が残っていた。生成 payload は
既に resume_draft_cache.result に永続化されているため、それを JSON で公開して #524 の
注入機構でフォームへ流し込む設計判断を記録。生成設計(0018/0020)は変えない。
決定:
- GET /api/agent/resume-draft/result で payload を JSON 公開(/pdf とは別エンドポイント)
- web の「フォームに反映」→ router state → CareerResumeForm が #524 で注入(上書き確認)
- DB 非更新を維持。#524 は mapCareerResumeToForm 再利用で「Resume 互換 payload → form」を満たす
docs/adr/README.md 索引・系統図も更新(make lint-adr-index green)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in:17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: 9e861309-e4e9-4446-9a9f-b9259ddfde34

📥 Commits

Reviewing files that changed from the base of the PR and between 262f781 and c5c123c.

📒 Files selected for processing (1)
  • docs/adr/0025-resume-draft-form-injection.md
📝 Walkthrough

Walkthrough

Documents ADR-0025 for resume-draft JSON retrieval and career-form injection, then adds the decision to the ADR index and lineage diagram.

Changes

Resume draft form injection

Layer / File(s)Summary
Document injection flow
docs/adr/0025-resume-draft-form-injection.md
Defines the JSON result endpoint, router-state handoff, shared form mapping, overwrite confirmation, and database behavior.
Register ADR and lineage
docs/adr/README.md
Adds ADR-0025 to the accepted and complete ADR indexes and links it from the LLM / Agent decision diagram.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

  • yusuke0610/devforge issue 525 — Directly implements the endpoint and form-injection flow documented by ADR-0025.
  • yusuke0610/devforge issue 524 — Provides the shared payload-to-form injection and overwrite-confirmation mechanism referenced by the ADR.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added ADR for resume draft form injection.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/draft-form-inject

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.

@coderabbitaicoderabbitaiBot 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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-26: Standardize the resume-draft result endpoint path across
both documents: retain the canonical /api/agent/resume-draft/result route in
docs/adr/0025-resume-draft-form-injection.md and update the corresponding index
entry in docs/adr/README.md to exactly match it.
- Around line 27-36: 明記されたドラフト payload のマージ規則を ADR に追加し、未指定の
email、github_url、qualifications などは既存フォーム値を保持し、payload
に明示された値だけを適用する方針を定義してください。mapCareerResumeToForm
を再利用する場合も、この保存動作を満たす現在フォームとのマージ処理を前提にし、既存の resumeImport の挙動と整合させてください。
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1a363231-edba-4347-930f-28560de506a1

📥 Commits

Reviewing files that changed from the base of the PR and between f15bb19 and c198a66.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md
Comment threaddocs/adr/0025-resume-draft-form-injection.md
CodeRabbit 指摘(Major 2 件)。
- README 索引のパスを正式ルート /api/agent/resume-draft/result に統一(ADR 本文と一致)
- 注入のマージ規則を明記: #524 共通ルール(payload の非空で上書き・欠落/空は現フォーム値
保持)に統一。ドラフトは email/資格を提供しないため素の全置換だとユーザーの email を
空で消すため、それらは現フォーム値を保持するオーバーレイを掛ける(実装は #525 で追従)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

CodeRabbit 指摘 2 件に対応しました。

  1. エンドポイントパス不一致(Major): README 索引を正式ルート GET /api/agent/resume-draft/result に統一しました(ADR 本文と一致 / 262f781)。
  2. 欠落フィールドのマージ挙動(Major): ADR にマージ規則を明記しました(262f781)。[フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524 共通ルール「payload の非空で上書き・欠落/空は現フォーム値保持」に統一。ドラフトは email/資格を提供しないため、素の全置換だとユーザーの email を空で消すため、それらは現フォーム値を保持します。

実装(#553)も同ルールに追従済みです(856775a): utils/resumeImportapplyResumeDraftToForm を追加し、CareerResumeForm の注入を切り替え、email 保持・資格保持の単体テストを追加。これで PDF インポート(#524)とドラフト(#525)の注入セマンティクスが一致します。make ci green・E2E pass 済み。

@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

前回の指摘 2 件(エンドポイントパス不一致・マージ挙動未規定)は commit 262f781 で対応済みです(README を /api/agent/resume-draft/result に統一、ADR に #524 共通のマージ規則を明記)。実装側 #553 でも applyResumeDraftToForm(email/資格は現フォーム保持)に追従済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。エンドポイント表記の統一と、#524 と整合するマージ規則(email・資格の保持を含む)を確認対象として再レビューします。

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot 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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/adr/0025-resume-draft-form-injection.md (1)

24-27: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Document ownership enforcement for the payload result endpoint.

GET /api/agent/resume-draft/result returns a specific user’s cached resume payload. Add the access contract here: authenticated draft-owner access only, with 401/403 for unauthorized access or another explicit reference to the governing security middleware.

🤖 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 `@docs/adr/0025-resume-draft-form-injection.md` around lines 24 - 27, Update
the ADR entry for GET /api/agent/resume-draft/result to specify that only an
authenticated owner of the draft may access the cached payload. Document the
governing authentication and ownership middleware or contract, including 401 for
unauthenticated requests and 403 for requests targeting another user’s draft.
🤖 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/0025-resume-draft-form-injection.md`:
- Around line 40-44: Update the draft injection guidance around
mapCareerResumeToForm and applyResumeImportToForm to apply
presence/emptiness-aware preservation to every form field, not only email and
qualifications. Require existing form values to remain when payload fields are
omitted or empty, while non-empty payload values overwrite them; if specific
fields are intentional exceptions, explicitly document those exceptions.
---
Outside diff comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-27: Update the ADR entry for GET /api/agent/resume-draft/result
to specify that only an authenticated owner of the draft may access the cached
payload. Document the governing authentication and ownership middleware or
contract, including 401 for unauthenticated requests and 403 for requests
targeting another user’s draft.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: df31a40a-8b36-4b39-b7db-ac86396d6bec

📥 Commits

Reviewing files that changed from the base of the PR and between c198a66 and 262f781.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md Outdated
CodeRabbit 追加指摘(Major)。line 40 の全体規則に対し具体例が email/資格のみ保持で、
career_summary 等が空だと既存値を消しうる、と読めた。特定フィールドの無条件上書きを
やめ、全フィールドに一様の「値が非空なら上書き・空/未提供なら現フォーム保持」を適用する
ことを明記(スカラーは非空判定、配列は中身の有無で判定)。ドラフトが実際には
full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、
上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明確化。実装 #553 も追従する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

新規指摘(全フィールドへの保持ルール適用 / line 44)に対応しました。

  • ADR(c5c123c): マージ規則を全フィールド一様の preserve-if-emptyに明確化。特定フィールドの無条件上書きを排除し、「スカラーは値が非空なら上書き・空なら現フォーム保持、配列は中身の有無で置換/維持」と規定。ドラフトが実際に full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明記。
  • 実装 feat: 経歴書ドラフトのフォーム流し込みと注入機構の汎用化(ADR-0025 / #525・#524) #553(de610c3): applyResumeDraftToForm を全フィールド一様の preserve-if-empty に修正。career_summary/self_pr が空でも現フォームを保持する単体テストを追加。make ci green・E2E pass。

前回の 2 件(パス・マージ)は既に取り下げ済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。ADR の全フィールド共通 preserve-if-empty 規則と、記載内容が #553applyResumeDraftToForm 実装・テスト方針と整合することを中心に再レビューします。


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yusuke0610
yusuke0610 merged commit 1c10b41 into mainJul 28, 2026
20 checks passed
@yusuke0610
yusuke0610 deleted the feat/draft-form-inject branch July 28, 2026 03:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610
, '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

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525) - #552

Merged
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject
Jul 28, 2026
Merged

docs(adr): 経歴書ドラフトのフォーム流し込み ADR を起票(ADR-0025 / #525)#552
yusuke0610 merged 3 commits into
mainfrom
feat/draft-form-inject

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

経歴書ドラフトの「手で転記」を解消する設計判断を ADR-0025 として起票する(#525 / ADR のみ)。生成 payload(resume_draft_cache.result)を JSON で公開し、#524 の注入機構でキャリアフォームへ流し込む。生成設計(ADR-0018/0020)は変えず、出力の返し方だけ拡張

決定内容

代替案(却下)

  • /pdf にフォーマットパラメータ: Content-Type/型が条件分岐し複雑化
  • redux/localStorage stash: ドラフトは一時データ。router state(揮発)で十分

テスト

make lint-adr-index green(索引・系統図の drift なし)。docs のみ。後続で backend + web を実装する。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added ADR-0025 describing end-to-end resume draft form injection using a JSON payload (including a new JSON result retrieval endpoint) while keeping the existing PDF workflow unchanged.
    • Documented consistent “not ready/no result” handling for draft readiness and specified the form injection/merge rules to avoid overwriting existing email/qualifications with empty payload fields.
    • Updated the ADR index and decision diagram to reference ADR-0025 and its relationships to related decisions.

ADR-0018 のドラフト生成は PDF しか返さず「手で転記」が残っていた。生成 payload は
既に resume_draft_cache.result に永続化されているため、それを JSON で公開して #524 の
注入機構でフォームへ流し込む設計判断を記録。生成設計(0018/0020)は変えない。
決定:
- GET /api/agent/resume-draft/result で payload を JSON 公開(/pdf とは別エンドポイント)
- web の「フォームに反映」→ router state → CareerResumeForm が #524 で注入(上書き確認)
- DB 非更新を維持。#524 は mapCareerResumeToForm 再利用で「Resume 互換 payload → form」を満たす
docs/adr/README.md 索引・系統図も更新(make lint-adr-index green)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in:17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: 9e861309-e4e9-4446-9a9f-b9259ddfde34

📥 Commits

Reviewing files that changed from the base of the PR and between 262f781 and c5c123c.

📒 Files selected for processing (1)
  • docs/adr/0025-resume-draft-form-injection.md
📝 Walkthrough

Walkthrough

Documents ADR-0025 for resume-draft JSON retrieval and career-form injection, then adds the decision to the ADR index and lineage diagram.

Changes

Resume draft form injection

Layer / File(s)Summary
Document injection flow
docs/adr/0025-resume-draft-form-injection.md
Defines the JSON result endpoint, router-state handoff, shared form mapping, overwrite confirmation, and database behavior.
Register ADR and lineage
docs/adr/README.md
Adds ADR-0025 to the accepted and complete ADR indexes and links it from the LLM / Agent decision diagram.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

  • yusuke0610/devforge issue 525 — Directly implements the endpoint and form-injection flow documented by ADR-0025.
  • yusuke0610/devforge issue 524 — Provides the shared payload-to-form injection and overwrite-confirmation mechanism referenced by the ADR.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added ADR for resume draft form injection.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/draft-form-inject

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.

@coderabbitaicoderabbitaiBot 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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-26: Standardize the resume-draft result endpoint path across
both documents: retain the canonical /api/agent/resume-draft/result route in
docs/adr/0025-resume-draft-form-injection.md and update the corresponding index
entry in docs/adr/README.md to exactly match it.
- Around line 27-36: 明記されたドラフト payload のマージ規則を ADR に追加し、未指定の
email、github_url、qualifications などは既存フォーム値を保持し、payload
に明示された値だけを適用する方針を定義してください。mapCareerResumeToForm
を再利用する場合も、この保存動作を満たす現在フォームとのマージ処理を前提にし、既存の resumeImport の挙動と整合させてください。
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1a363231-edba-4347-930f-28560de506a1

📥 Commits

Reviewing files that changed from the base of the PR and between f15bb19 and c198a66.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md
Comment threaddocs/adr/0025-resume-draft-form-injection.md
CodeRabbit 指摘(Major 2 件)。
- README 索引のパスを正式ルート /api/agent/resume-draft/result に統一(ADR 本文と一致)
- 注入のマージ規則を明記: #524 共通ルール(payload の非空で上書き・欠落/空は現フォーム値
保持)に統一。ドラフトは email/資格を提供しないため素の全置換だとユーザーの email を
空で消すため、それらは現フォーム値を保持するオーバーレイを掛ける(実装は #525 で追従)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

CodeRabbit 指摘 2 件に対応しました。

  1. エンドポイントパス不一致(Major): README 索引を正式ルート GET /api/agent/resume-draft/result に統一しました(ADR 本文と一致 / 262f781)。
  2. 欠落フィールドのマージ挙動(Major): ADR にマージ規則を明記しました(262f781)。[フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524 共通ルール「payload の非空で上書き・欠落/空は現フォーム値保持」に統一。ドラフトは email/資格を提供しないため、素の全置換だとユーザーの email を空で消すため、それらは現フォーム値を保持します。

実装(#553)も同ルールに追従済みです(856775a): utils/resumeImportapplyResumeDraftToForm を追加し、CareerResumeForm の注入を切り替え、email 保持・資格保持の単体テストを追加。これで PDF インポート(#524)とドラフト(#525)の注入セマンティクスが一致します。make ci green・E2E pass 済み。

@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

前回の指摘 2 件(エンドポイントパス不一致・マージ挙動未規定)は commit 262f781 で対応済みです(README を /api/agent/resume-draft/result に統一、ADR に #524 共通のマージ規則を明記)。実装側 #553 でも applyResumeDraftToForm(email/資格は現フォーム保持)に追従済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。エンドポイント表記の統一と、#524 と整合するマージ規則(email・資格の保持を含む)を確認対象として再レビューします。

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot 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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/adr/0025-resume-draft-form-injection.md (1)

24-27: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Document ownership enforcement for the payload result endpoint.

GET /api/agent/resume-draft/result returns a specific user’s cached resume payload. Add the access contract here: authenticated draft-owner access only, with 401/403 for unauthorized access or another explicit reference to the governing security middleware.

🤖 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 `@docs/adr/0025-resume-draft-form-injection.md` around lines 24 - 27, Update
the ADR entry for GET /api/agent/resume-draft/result to specify that only an
authenticated owner of the draft may access the cached payload. Document the
governing authentication and ownership middleware or contract, including 401 for
unauthenticated requests and 403 for requests targeting another user’s draft.
🤖 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/0025-resume-draft-form-injection.md`:
- Around line 40-44: Update the draft injection guidance around
mapCareerResumeToForm and applyResumeImportToForm to apply
presence/emptiness-aware preservation to every form field, not only email and
qualifications. Require existing form values to remain when payload fields are
omitted or empty, while non-empty payload values overwrite them; if specific
fields are intentional exceptions, explicitly document those exceptions.
---
Outside diff comments:
In `@docs/adr/0025-resume-draft-form-injection.md`:
- Around line 24-27: Update the ADR entry for GET /api/agent/resume-draft/result
to specify that only an authenticated owner of the draft may access the cached
payload. Document the governing authentication and ownership middleware or
contract, including 401 for unauthenticated requests and 403 for requests
targeting another user’s draft.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: df31a40a-8b36-4b39-b7db-ac86396d6bec

📥 Commits

Reviewing files that changed from the base of the PR and between c198a66 and 262f781.

📒 Files selected for processing (2)
  • docs/adr/0025-resume-draft-form-injection.md
  • docs/adr/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/adr/README.md

Comment threaddocs/adr/0025-resume-draft-form-injection.md Outdated
CodeRabbit 追加指摘(Major)。line 40 の全体規則に対し具体例が email/資格のみ保持で、
career_summary 等が空だと既存値を消しうる、と読めた。特定フィールドの無条件上書きを
やめ、全フィールドに一様の「値が非空なら上書き・空/未提供なら現フォーム保持」を適用する
ことを明記(スカラーは非空判定、配列は中身の有無で判定)。ドラフトが実際には
full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、
上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明確化。実装 #553 も追従する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai review

新規指摘(全フィールドへの保持ルール適用 / line 44)に対応しました。

  • ADR(c5c123c): マージ規則を全フィールド一様の preserve-if-emptyに明確化。特定フィールドの無条件上書きを排除し、「スカラーは値が非空なら上書き・空なら現フォーム保持、配列は中身の有無で置換/維持」と規定。ドラフトが実際に full_name/career_summary/self_pr/experiences/github_url を常に提供する点は補足に留め、上書き/保持はフィールド名固定分岐ではなく値の非空判定で決まると明記。
  • 実装 feat: 経歴書ドラフトのフォーム流し込みと注入機構の汎用化(ADR-0025 / #525・#524) #553(de610c3): applyResumeDraftToForm を全フィールド一様の preserve-if-empty に修正。career_summary/self_pr が空でも現フォームを保持する単体テストを追加。make ci green・E2E pass。

前回の 2 件(パス・マージ)は既に取り下げ済みです。再レビューをお願いします。

@coderabbitai

coderabbitaiBot commented Jul 28, 2026

Copy link
Copy Markdown

@yusuke0610 承知しました。ADR の全フィールド共通 preserve-if-empty 規則と、記載内容が #553applyResumeDraftToForm 実装・テスト方針と整合することを中心に再レビューします。


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yusuke0610
yusuke0610 merged commit 1c10b41 into mainJul 28, 2026
20 checks passed
@yusuke0610
yusuke0610 deleted the feat/draft-form-inject branch July 28, 2026 03:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610