feat(web): 経歴書 保存前の差分確認機能を全削除 - #429

Merged
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview
Jun 29, 2026
Merged

feat(web): 経歴書 保存前の差分確認機能を全削除#429
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書の保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一します。

差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を悪化させていたため、この機能専用のコードをフロント・バックエンド双方から全削除します。

変更内容

フロントエンド(完全削除)

  • CareerDiffModal.tsx / .module.cssuseResumeDiffPreviewcareerDiffcareerReviewdiffHighlight(各テスト含む)

フロントエンド(変更)

  • CareerResumeForm.tsx — diff モーダル・差分計算・プレビュー取得を除去
  • useCareerFormModals.ts — 保存確認モーダルの state/handler を削除(削除確認・Markdown 編集は残す)
  • useCareerFormValidationFocus.tschangeCount / openSaveConfirm を撤去し onSubmit を常に save() へ単純化
  • api/{resumes,types,paths}.tsconstants/messages.tsCAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES)から専用定義を除去

バックエンド(削除)

  • /api/resumes/preview エンドポイント、build_resume_previewResumePreviewResponse スキーマ+export、関連テスト
  • 派生デッドコード整理: _load_cssfor_screen 分岐・_FONT_FACE_RE・未使用 import re(PDF パスのみ残す)

SSoT 生成物

  • make codegen-typesweb/src/api/generated.ts を再生成(preview 系の消滅を確認)

残したもの(別機能)

  • 未保存マーク 🔴(useCareerDirty
  • PDF/Markdown 生成と data-fp / data-unit 属性(PDF 出力に無害)

テスト

  • make ci green(backend 629 passed / web 365 passed / lint / build-web / codegen-drift すべて pass)
  • E2E トリガー判定: 保存ハンドラの挙動変更のみで、ページ/ルート/認証/レイアウト/サイドバーの追加・変更なし → 必須トリガー非該当(vitest でカバー)

レビュー注意

  • 破壊的変更: /api/resumes/preview エンドポイントと ResumePreviewResponse を削除(API 契約変更)
  • web/src/api/generated.ts は codegen 再生成による自動生成差分

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Resume timestamps now display in JST-formatted ISO strings.
    • Saving career/resume edits now goes directly through without an extra change-review step.
  • Refactor

    • Removed the resume preview and diff-review flow from the app.
    • Simplified related resume and career editing screens and supporting API surfaces.

保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を
廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一する。
差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を
悪化させていたため、フロント・バックエンド双方の専用コードを削除する。
- フロント: CareerDiffModal / useResumeDiffPreview / careerDiff /
careerReview / diffHighlight とテストを削除。CareerResumeForm・
useCareerFormModals・useCareerFormValidationFocus から差分確認分岐を除去
- バックエンド: /api/resumes/preview エンドポイント・build_resume_preview・
ResumePreviewResponse スキーマと関連テストを削除。_load_css の
for_screen 分岐など派生デッドコードも整理
- messages.ts の CAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES を削除
- OpenAPI 生成物(generated.ts)を再生成
未保存マーク(useCareerDirty)と PDF/Markdown 生成は影響なし。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c288350-3379-4639-a2d3-ea50a5df4c8a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f380b2 and 6de8dfd.

📒 Files selected for processing (28)
  • backend/app/routers/resumes.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/resume.py
  • backend/app/services/pdf/generators/resume_generator.py
  • backend/tests/test_endpoints.py
  • backend/tests/test_pdf_generator.py
  • web/e2e/career-dirty-indicator.spec.ts
  • web/src/api/generated.ts
  • web/src/api/paths.ts
  • web/src/api/resumes.ts
  • web/src/api/types.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/components/forms/CareerResumeForm.tsx
  • web/src/constants/messages.ts
  • web/src/hooks/career/useCareerFormModals.test.ts
  • web/src/hooks/career/useCareerFormModals.ts
  • web/src/hooks/career/useCareerFormValidationFocus.test.ts
  • web/src/hooks/career/useCareerFormValidationFocus.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/test/factories/careerForm.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/utils/careerDiff.ts
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerReview.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
💤 Files with no reviewable changes (20)
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/api/paths.ts
  • web/src/api/types.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/utils/careerReview.ts
  • web/src/utils/careerDiff.ts
  • backend/tests/test_pdf_generator.py
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/hooks/career/useCareerFormModals.test.ts
  • backend/app/schemas/init.py
  • backend/app/routers/resumes.py
  • web/src/constants/messages.ts
  • backend/tests/test_endpoints.py
  • backend/app/schemas/resume.py
  • web/src/api/generated.ts

📝 Walkthrough

Walkthrough

Removes the POST /api/resumes/preview endpoint and its entire implementation stack: backend route, ResumePreviewResponse schema, build_resume_preview generator, frontend API client functions, CareerDiffModal component, diff utility modules (careerDiff, careerReview, diffHighlight), useResumeDiffPreview hook, and save-confirmation wiring in CareerResumeForm and related hooks.

Changes

Resume Preview & Diff Feature Removal

Layer / File(s)Summary
Backend endpoint, schema, and generator cleanup
backend/app/routers/resumes.py, backend/app/schemas/resume.py, backend/app/schemas/__init__.py, backend/app/services/pdf/generators/resume_generator.py, backend/tests/test_endpoints.py, backend/tests/test_pdf_generator.py
Removes POST /api/resumes/preview route, ResumePreviewResponse schema and its exports, and build_resume_preview from the PDF generator. Simplifies _load_css to always embed the font URI. Adds JST field_serializer to ResumeResponse. Cleans up corresponding test assertions.
Frontend API client and type removal
web/src/api/types.ts, web/src/api/resumes.ts, web/src/api/paths.ts, web/src/api/generated.ts
Removes ResumePreviewResponse type, PATHS.resumes.preview, getCareerResumePreview function, and generated OpenAPI path/operation/schema entries for the preview endpoint.
Diff utility modules and constants removal
web/src/utils/careerDiff.ts, web/src/utils/careerReview.ts, web/src/utils/diffHighlight.ts, web/src/utils/careerDiff.test.ts, web/src/utils/careerReview.test.ts, web/src/utils/diffHighlight.test.ts, web/src/constants/messages.ts
Deletes buildCareerChanges, buildReviewEntries, comparePaths, diff-highlighting utilities, and their full test suites. Removes CAREER_DIFF_LABELS and DIFF_DIALOG_MESSAGES constants.
Form hooks simplification
web/src/hooks/career/useCareerFormModals.ts, web/src/hooks/career/useCareerFormModals.test.ts, web/src/hooks/career/useCareerFormValidationFocus.ts, web/src/hooks/career/useCareerFormValidationFocus.test.ts, web/src/hooks/career/useResumeDiffPreview.ts, web/src/hooks/career/useResumeDiffPreview.test.ts
useCareerFormModals drops save param and save-confirm state. useCareerFormValidationFocus drops changeCount/openSaveConfirm and calls save directly on validation success. useResumeDiffPreview module deleted. Tests updated accordingly.
CareerResumeForm and CareerDiffModal removal
web/src/components/forms/CareerResumeForm.tsx, web/src/components/forms/CareerDiffModal.tsx, web/src/components/forms/CareerDiffModal.module.css, web/e2e/career-dirty-indicator.spec.ts, web/src/test/factories/careerForm.ts
CareerResumeForm removes CareerDiffModal render block, diff computation, and save-confirm wiring. CareerDiffModal component and its CSS module are deleted. E2E test updated to single-click save (no confirmation modal step).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • yusuke0610/devforge#306: Added the /api/resumes/preview endpoint, build_resume_preview, and the diff preview UI — exactly the code this PR removes.
  • yusuke0610/devforge#309: Added logic to CareerDiffModal.tsx and its CSS/constants, all of which are deleted in this PR.
  • yusuke0610/devforge#310: Modifies CareerResumeForm.tsx editing behavior, the same file this PR strips of diff/preview wiring.

Poem

🐇 Snip, snip, snip — the preview's gone!
No modal to confirm, just save and move on.
The diff-highlight code? Hopped away with a bound,
The font-face regex? No longer around.
Less code to nibble, more carrots to find —
A simpler save flow for all rabbit-kind! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 54.55% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely states the main change: removing the pre-save diff confirmation feature for career resumes.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-resume-diff-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added feature 新機能 web フロントエンド (web) backend バックエンド test テスト追加・修正 labels Jun 28, 2026
保存フローが「検証 → そのまま保存」に変わったため、保存後に 🔴 が消える
シナリオから diff モーダル経由の「この内容で保存」クリックを削除する。
不要になった /api/resumes/preview のルートモックも除去する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai RVして

@coderabbitai

coderabbitaiBot commented Jun 29, 2026

Copy link
Copy Markdown

@yusuke0610 レビューします。

✅ 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 ceb0b4a into mainJun 29, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backendバックエンドfeature新機能testテスト追加・修正webフロントエンド (web)

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

feat(web): 経歴書 保存前の差分確認機能を全削除 - #429

Merged
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview
Jun 29, 2026
Merged

feat(web): 経歴書 保存前の差分確認機能を全削除#429
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書の保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一します。

差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を悪化させていたため、この機能専用のコードをフロント・バックエンド双方から全削除します。

変更内容

フロントエンド(完全削除)

  • CareerDiffModal.tsx / .module.cssuseResumeDiffPreviewcareerDiffcareerReviewdiffHighlight(各テスト含む)

フロントエンド(変更)

  • CareerResumeForm.tsx — diff モーダル・差分計算・プレビュー取得を除去
  • useCareerFormModals.ts — 保存確認モーダルの state/handler を削除(削除確認・Markdown 編集は残す)
  • useCareerFormValidationFocus.tschangeCount / openSaveConfirm を撤去し onSubmit を常に save() へ単純化
  • api/{resumes,types,paths}.tsconstants/messages.tsCAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES)から専用定義を除去

バックエンド(削除)

  • /api/resumes/preview エンドポイント、build_resume_previewResumePreviewResponse スキーマ+export、関連テスト
  • 派生デッドコード整理: _load_cssfor_screen 分岐・_FONT_FACE_RE・未使用 import re(PDF パスのみ残す)

SSoT 生成物

  • make codegen-typesweb/src/api/generated.ts を再生成(preview 系の消滅を確認)

残したもの(別機能)

  • 未保存マーク 🔴(useCareerDirty
  • PDF/Markdown 生成と data-fp / data-unit 属性(PDF 出力に無害)

テスト

  • make ci green(backend 629 passed / web 365 passed / lint / build-web / codegen-drift すべて pass)
  • E2E トリガー判定: 保存ハンドラの挙動変更のみで、ページ/ルート/認証/レイアウト/サイドバーの追加・変更なし → 必須トリガー非該当(vitest でカバー)

レビュー注意

  • 破壊的変更: /api/resumes/preview エンドポイントと ResumePreviewResponse を削除(API 契約変更)
  • web/src/api/generated.ts は codegen 再生成による自動生成差分

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Resume timestamps now display in JST-formatted ISO strings.
    • Saving career/resume edits now goes directly through without an extra change-review step.
  • Refactor

    • Removed the resume preview and diff-review flow from the app.
    • Simplified related resume and career editing screens and supporting API surfaces.

保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を
廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一する。
差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を
悪化させていたため、フロント・バックエンド双方の専用コードを削除する。
- フロント: CareerDiffModal / useResumeDiffPreview / careerDiff /
careerReview / diffHighlight とテストを削除。CareerResumeForm・
useCareerFormModals・useCareerFormValidationFocus から差分確認分岐を除去
- バックエンド: /api/resumes/preview エンドポイント・build_resume_preview・
ResumePreviewResponse スキーマと関連テストを削除。_load_css の
for_screen 分岐など派生デッドコードも整理
- messages.ts の CAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES を削除
- OpenAPI 生成物(generated.ts)を再生成
未保存マーク(useCareerDirty)と PDF/Markdown 生成は影響なし。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c288350-3379-4639-a2d3-ea50a5df4c8a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f380b2 and 6de8dfd.

📒 Files selected for processing (28)
  • backend/app/routers/resumes.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/resume.py
  • backend/app/services/pdf/generators/resume_generator.py
  • backend/tests/test_endpoints.py
  • backend/tests/test_pdf_generator.py
  • web/e2e/career-dirty-indicator.spec.ts
  • web/src/api/generated.ts
  • web/src/api/paths.ts
  • web/src/api/resumes.ts
  • web/src/api/types.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/components/forms/CareerResumeForm.tsx
  • web/src/constants/messages.ts
  • web/src/hooks/career/useCareerFormModals.test.ts
  • web/src/hooks/career/useCareerFormModals.ts
  • web/src/hooks/career/useCareerFormValidationFocus.test.ts
  • web/src/hooks/career/useCareerFormValidationFocus.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/test/factories/careerForm.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/utils/careerDiff.ts
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerReview.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
💤 Files with no reviewable changes (20)
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/api/paths.ts
  • web/src/api/types.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/utils/careerReview.ts
  • web/src/utils/careerDiff.ts
  • backend/tests/test_pdf_generator.py
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/hooks/career/useCareerFormModals.test.ts
  • backend/app/schemas/init.py
  • backend/app/routers/resumes.py
  • web/src/constants/messages.ts
  • backend/tests/test_endpoints.py
  • backend/app/schemas/resume.py
  • web/src/api/generated.ts

📝 Walkthrough

Walkthrough

Removes the POST /api/resumes/preview endpoint and its entire implementation stack: backend route, ResumePreviewResponse schema, build_resume_preview generator, frontend API client functions, CareerDiffModal component, diff utility modules (careerDiff, careerReview, diffHighlight), useResumeDiffPreview hook, and save-confirmation wiring in CareerResumeForm and related hooks.

Changes

Resume Preview & Diff Feature Removal

Layer / File(s)Summary
Backend endpoint, schema, and generator cleanup
backend/app/routers/resumes.py, backend/app/schemas/resume.py, backend/app/schemas/__init__.py, backend/app/services/pdf/generators/resume_generator.py, backend/tests/test_endpoints.py, backend/tests/test_pdf_generator.py
Removes POST /api/resumes/preview route, ResumePreviewResponse schema and its exports, and build_resume_preview from the PDF generator. Simplifies _load_css to always embed the font URI. Adds JST field_serializer to ResumeResponse. Cleans up corresponding test assertions.
Frontend API client and type removal
web/src/api/types.ts, web/src/api/resumes.ts, web/src/api/paths.ts, web/src/api/generated.ts
Removes ResumePreviewResponse type, PATHS.resumes.preview, getCareerResumePreview function, and generated OpenAPI path/operation/schema entries for the preview endpoint.
Diff utility modules and constants removal
web/src/utils/careerDiff.ts, web/src/utils/careerReview.ts, web/src/utils/diffHighlight.ts, web/src/utils/careerDiff.test.ts, web/src/utils/careerReview.test.ts, web/src/utils/diffHighlight.test.ts, web/src/constants/messages.ts
Deletes buildCareerChanges, buildReviewEntries, comparePaths, diff-highlighting utilities, and their full test suites. Removes CAREER_DIFF_LABELS and DIFF_DIALOG_MESSAGES constants.
Form hooks simplification
web/src/hooks/career/useCareerFormModals.ts, web/src/hooks/career/useCareerFormModals.test.ts, web/src/hooks/career/useCareerFormValidationFocus.ts, web/src/hooks/career/useCareerFormValidationFocus.test.ts, web/src/hooks/career/useResumeDiffPreview.ts, web/src/hooks/career/useResumeDiffPreview.test.ts
useCareerFormModals drops save param and save-confirm state. useCareerFormValidationFocus drops changeCount/openSaveConfirm and calls save directly on validation success. useResumeDiffPreview module deleted. Tests updated accordingly.
CareerResumeForm and CareerDiffModal removal
web/src/components/forms/CareerResumeForm.tsx, web/src/components/forms/CareerDiffModal.tsx, web/src/components/forms/CareerDiffModal.module.css, web/e2e/career-dirty-indicator.spec.ts, web/src/test/factories/careerForm.ts
CareerResumeForm removes CareerDiffModal render block, diff computation, and save-confirm wiring. CareerDiffModal component and its CSS module are deleted. E2E test updated to single-click save (no confirmation modal step).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • yusuke0610/devforge#306: Added the /api/resumes/preview endpoint, build_resume_preview, and the diff preview UI — exactly the code this PR removes.
  • yusuke0610/devforge#309: Added logic to CareerDiffModal.tsx and its CSS/constants, all of which are deleted in this PR.
  • yusuke0610/devforge#310: Modifies CareerResumeForm.tsx editing behavior, the same file this PR strips of diff/preview wiring.

Poem

🐇 Snip, snip, snip — the preview's gone!
No modal to confirm, just save and move on.
The diff-highlight code? Hopped away with a bound,
The font-face regex? No longer around.
Less code to nibble, more carrots to find —
A simpler save flow for all rabbit-kind! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 54.55% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely states the main change: removing the pre-save diff confirmation feature for career resumes.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-resume-diff-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added feature 新機能 web フロントエンド (web) backend バックエンド test テスト追加・修正 labels Jun 28, 2026
保存フローが「検証 → そのまま保存」に変わったため、保存後に 🔴 が消える
シナリオから diff モーダル経由の「この内容で保存」クリックを削除する。
不要になった /api/resumes/preview のルートモックも除去する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai RVして

@coderabbitai

coderabbitaiBot commented Jun 29, 2026

Copy link
Copy Markdown

@yusuke0610 レビューします。

✅ 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 ceb0b4a into mainJun 29, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backendバックエンドfeature新機能testテスト追加・修正webフロントエンド (web)

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

feat(web): 経歴書 保存前の差分確認機能を全削除 - #429

Merged
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview
Jun 29, 2026
Merged

feat(web): 経歴書 保存前の差分確認機能を全削除#429
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書の保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一します。

差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を悪化させていたため、この機能専用のコードをフロント・バックエンド双方から全削除します。

変更内容

フロントエンド(完全削除)

  • CareerDiffModal.tsx / .module.cssuseResumeDiffPreviewcareerDiffcareerReviewdiffHighlight(各テスト含む)

フロントエンド(変更)

  • CareerResumeForm.tsx — diff モーダル・差分計算・プレビュー取得を除去
  • useCareerFormModals.ts — 保存確認モーダルの state/handler を削除(削除確認・Markdown 編集は残す)
  • useCareerFormValidationFocus.tschangeCount / openSaveConfirm を撤去し onSubmit を常に save() へ単純化
  • api/{resumes,types,paths}.tsconstants/messages.tsCAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES)から専用定義を除去

バックエンド(削除)

  • /api/resumes/preview エンドポイント、build_resume_previewResumePreviewResponse スキーマ+export、関連テスト
  • 派生デッドコード整理: _load_cssfor_screen 分岐・_FONT_FACE_RE・未使用 import re(PDF パスのみ残す)

SSoT 生成物

  • make codegen-typesweb/src/api/generated.ts を再生成(preview 系の消滅を確認)

残したもの(別機能)

  • 未保存マーク 🔴(useCareerDirty
  • PDF/Markdown 生成と data-fp / data-unit 属性(PDF 出力に無害)

テスト

  • make ci green(backend 629 passed / web 365 passed / lint / build-web / codegen-drift すべて pass)
  • E2E トリガー判定: 保存ハンドラの挙動変更のみで、ページ/ルート/認証/レイアウト/サイドバーの追加・変更なし → 必須トリガー非該当(vitest でカバー)

レビュー注意

  • 破壊的変更: /api/resumes/preview エンドポイントと ResumePreviewResponse を削除(API 契約変更)
  • web/src/api/generated.ts は codegen 再生成による自動生成差分

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Resume timestamps now display in JST-formatted ISO strings.
    • Saving career/resume edits now goes directly through without an extra change-review step.
  • Refactor

    • Removed the resume preview and diff-review flow from the app.
    • Simplified related resume and career editing screens and supporting API surfaces.

保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を
廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一する。
差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を
悪化させていたため、フロント・バックエンド双方の専用コードを削除する。
- フロント: CareerDiffModal / useResumeDiffPreview / careerDiff /
careerReview / diffHighlight とテストを削除。CareerResumeForm・
useCareerFormModals・useCareerFormValidationFocus から差分確認分岐を除去
- バックエンド: /api/resumes/preview エンドポイント・build_resume_preview・
ResumePreviewResponse スキーマと関連テストを削除。_load_css の
for_screen 分岐など派生デッドコードも整理
- messages.ts の CAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES を削除
- OpenAPI 生成物(generated.ts)を再生成
未保存マーク(useCareerDirty)と PDF/Markdown 生成は影響なし。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c288350-3379-4639-a2d3-ea50a5df4c8a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f380b2 and 6de8dfd.

📒 Files selected for processing (28)
  • backend/app/routers/resumes.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/resume.py
  • backend/app/services/pdf/generators/resume_generator.py
  • backend/tests/test_endpoints.py
  • backend/tests/test_pdf_generator.py
  • web/e2e/career-dirty-indicator.spec.ts
  • web/src/api/generated.ts
  • web/src/api/paths.ts
  • web/src/api/resumes.ts
  • web/src/api/types.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/components/forms/CareerResumeForm.tsx
  • web/src/constants/messages.ts
  • web/src/hooks/career/useCareerFormModals.test.ts
  • web/src/hooks/career/useCareerFormModals.ts
  • web/src/hooks/career/useCareerFormValidationFocus.test.ts
  • web/src/hooks/career/useCareerFormValidationFocus.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/test/factories/careerForm.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/utils/careerDiff.ts
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerReview.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
💤 Files with no reviewable changes (20)
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/api/paths.ts
  • web/src/api/types.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/utils/careerReview.ts
  • web/src/utils/careerDiff.ts
  • backend/tests/test_pdf_generator.py
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/hooks/career/useCareerFormModals.test.ts
  • backend/app/schemas/init.py
  • backend/app/routers/resumes.py
  • web/src/constants/messages.ts
  • backend/tests/test_endpoints.py
  • backend/app/schemas/resume.py
  • web/src/api/generated.ts

📝 Walkthrough

Walkthrough

Removes the POST /api/resumes/preview endpoint and its entire implementation stack: backend route, ResumePreviewResponse schema, build_resume_preview generator, frontend API client functions, CareerDiffModal component, diff utility modules (careerDiff, careerReview, diffHighlight), useResumeDiffPreview hook, and save-confirmation wiring in CareerResumeForm and related hooks.

Changes

Resume Preview & Diff Feature Removal

Layer / File(s)Summary
Backend endpoint, schema, and generator cleanup
backend/app/routers/resumes.py, backend/app/schemas/resume.py, backend/app/schemas/__init__.py, backend/app/services/pdf/generators/resume_generator.py, backend/tests/test_endpoints.py, backend/tests/test_pdf_generator.py
Removes POST /api/resumes/preview route, ResumePreviewResponse schema and its exports, and build_resume_preview from the PDF generator. Simplifies _load_css to always embed the font URI. Adds JST field_serializer to ResumeResponse. Cleans up corresponding test assertions.
Frontend API client and type removal
web/src/api/types.ts, web/src/api/resumes.ts, web/src/api/paths.ts, web/src/api/generated.ts
Removes ResumePreviewResponse type, PATHS.resumes.preview, getCareerResumePreview function, and generated OpenAPI path/operation/schema entries for the preview endpoint.
Diff utility modules and constants removal
web/src/utils/careerDiff.ts, web/src/utils/careerReview.ts, web/src/utils/diffHighlight.ts, web/src/utils/careerDiff.test.ts, web/src/utils/careerReview.test.ts, web/src/utils/diffHighlight.test.ts, web/src/constants/messages.ts
Deletes buildCareerChanges, buildReviewEntries, comparePaths, diff-highlighting utilities, and their full test suites. Removes CAREER_DIFF_LABELS and DIFF_DIALOG_MESSAGES constants.
Form hooks simplification
web/src/hooks/career/useCareerFormModals.ts, web/src/hooks/career/useCareerFormModals.test.ts, web/src/hooks/career/useCareerFormValidationFocus.ts, web/src/hooks/career/useCareerFormValidationFocus.test.ts, web/src/hooks/career/useResumeDiffPreview.ts, web/src/hooks/career/useResumeDiffPreview.test.ts
useCareerFormModals drops save param and save-confirm state. useCareerFormValidationFocus drops changeCount/openSaveConfirm and calls save directly on validation success. useResumeDiffPreview module deleted. Tests updated accordingly.
CareerResumeForm and CareerDiffModal removal
web/src/components/forms/CareerResumeForm.tsx, web/src/components/forms/CareerDiffModal.tsx, web/src/components/forms/CareerDiffModal.module.css, web/e2e/career-dirty-indicator.spec.ts, web/src/test/factories/careerForm.ts
CareerResumeForm removes CareerDiffModal render block, diff computation, and save-confirm wiring. CareerDiffModal component and its CSS module are deleted. E2E test updated to single-click save (no confirmation modal step).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • yusuke0610/devforge#306: Added the /api/resumes/preview endpoint, build_resume_preview, and the diff preview UI — exactly the code this PR removes.
  • yusuke0610/devforge#309: Added logic to CareerDiffModal.tsx and its CSS/constants, all of which are deleted in this PR.
  • yusuke0610/devforge#310: Modifies CareerResumeForm.tsx editing behavior, the same file this PR strips of diff/preview wiring.

Poem

🐇 Snip, snip, snip — the preview's gone!
No modal to confirm, just save and move on.
The diff-highlight code? Hopped away with a bound,
The font-face regex? No longer around.
Less code to nibble, more carrots to find —
A simpler save flow for all rabbit-kind! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 54.55% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely states the main change: removing the pre-save diff confirmation feature for career resumes.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-resume-diff-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added feature 新機能 web フロントエンド (web) backend バックエンド test テスト追加・修正 labels Jun 28, 2026
保存フローが「検証 → そのまま保存」に変わったため、保存後に 🔴 が消える
シナリオから diff モーダル経由の「この内容で保存」クリックを削除する。
不要になった /api/resumes/preview のルートモックも除去する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai RVして

@coderabbitai

coderabbitaiBot commented Jun 29, 2026

Copy link
Copy Markdown

@yusuke0610 レビューします。

✅ 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 ceb0b4a into mainJun 29, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backendバックエンドfeature新機能testテスト追加・修正webフロントエンド (web)

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

feat(web): 経歴書 保存前の差分確認機能を全削除 - #429

Merged
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview
Jun 29, 2026
Merged

feat(web): 経歴書 保存前の差分確認機能を全削除#429
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書の保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一します。

差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を悪化させていたため、この機能専用のコードをフロント・バックエンド双方から全削除します。

変更内容

フロントエンド(完全削除)

  • CareerDiffModal.tsx / .module.cssuseResumeDiffPreviewcareerDiffcareerReviewdiffHighlight(各テスト含む)

フロントエンド(変更)

  • CareerResumeForm.tsx — diff モーダル・差分計算・プレビュー取得を除去
  • useCareerFormModals.ts — 保存確認モーダルの state/handler を削除(削除確認・Markdown 編集は残す)
  • useCareerFormValidationFocus.tschangeCount / openSaveConfirm を撤去し onSubmit を常に save() へ単純化
  • api/{resumes,types,paths}.tsconstants/messages.tsCAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES)から専用定義を除去

バックエンド(削除)

  • /api/resumes/preview エンドポイント、build_resume_previewResumePreviewResponse スキーマ+export、関連テスト
  • 派生デッドコード整理: _load_cssfor_screen 分岐・_FONT_FACE_RE・未使用 import re(PDF パスのみ残す)

SSoT 生成物

  • make codegen-typesweb/src/api/generated.ts を再生成(preview 系の消滅を確認)

残したもの(別機能)

  • 未保存マーク 🔴(useCareerDirty
  • PDF/Markdown 生成と data-fp / data-unit 属性(PDF 出力に無害)

テスト

  • make ci green(backend 629 passed / web 365 passed / lint / build-web / codegen-drift すべて pass)
  • E2E トリガー判定: 保存ハンドラの挙動変更のみで、ページ/ルート/認証/レイアウト/サイドバーの追加・変更なし → 必須トリガー非該当(vitest でカバー)

レビュー注意

  • 破壊的変更: /api/resumes/preview エンドポイントと ResumePreviewResponse を削除(API 契約変更)
  • web/src/api/generated.ts は codegen 再生成による自動生成差分

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Resume timestamps now display in JST-formatted ISO strings.
    • Saving career/resume edits now goes directly through without an extra change-review step.
  • Refactor

    • Removed the resume preview and diff-review flow from the app.
    • Simplified related resume and career editing screens and supporting API surfaces.

保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を
廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一する。
差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を
悪化させていたため、フロント・バックエンド双方の専用コードを削除する。
- フロント: CareerDiffModal / useResumeDiffPreview / careerDiff /
careerReview / diffHighlight とテストを削除。CareerResumeForm・
useCareerFormModals・useCareerFormValidationFocus から差分確認分岐を除去
- バックエンド: /api/resumes/preview エンドポイント・build_resume_preview・
ResumePreviewResponse スキーマと関連テストを削除。_load_css の
for_screen 分岐など派生デッドコードも整理
- messages.ts の CAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES を削除
- OpenAPI 生成物(generated.ts)を再生成
未保存マーク(useCareerDirty)と PDF/Markdown 生成は影響なし。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c288350-3379-4639-a2d3-ea50a5df4c8a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f380b2 and 6de8dfd.

📒 Files selected for processing (28)
  • backend/app/routers/resumes.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/resume.py
  • backend/app/services/pdf/generators/resume_generator.py
  • backend/tests/test_endpoints.py
  • backend/tests/test_pdf_generator.py
  • web/e2e/career-dirty-indicator.spec.ts
  • web/src/api/generated.ts
  • web/src/api/paths.ts
  • web/src/api/resumes.ts
  • web/src/api/types.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/components/forms/CareerResumeForm.tsx
  • web/src/constants/messages.ts
  • web/src/hooks/career/useCareerFormModals.test.ts
  • web/src/hooks/career/useCareerFormModals.ts
  • web/src/hooks/career/useCareerFormValidationFocus.test.ts
  • web/src/hooks/career/useCareerFormValidationFocus.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/test/factories/careerForm.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/utils/careerDiff.ts
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerReview.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
💤 Files with no reviewable changes (20)
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/api/paths.ts
  • web/src/api/types.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/utils/careerReview.ts
  • web/src/utils/careerDiff.ts
  • backend/tests/test_pdf_generator.py
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/hooks/career/useCareerFormModals.test.ts
  • backend/app/schemas/init.py
  • backend/app/routers/resumes.py
  • web/src/constants/messages.ts
  • backend/tests/test_endpoints.py
  • backend/app/schemas/resume.py
  • web/src/api/generated.ts

📝 Walkthrough

Walkthrough

Removes the POST /api/resumes/preview endpoint and its entire implementation stack: backend route, ResumePreviewResponse schema, build_resume_preview generator, frontend API client functions, CareerDiffModal component, diff utility modules (careerDiff, careerReview, diffHighlight), useResumeDiffPreview hook, and save-confirmation wiring in CareerResumeForm and related hooks.

Changes

Resume Preview & Diff Feature Removal

Layer / File(s)Summary
Backend endpoint, schema, and generator cleanup
backend/app/routers/resumes.py, backend/app/schemas/resume.py, backend/app/schemas/__init__.py, backend/app/services/pdf/generators/resume_generator.py, backend/tests/test_endpoints.py, backend/tests/test_pdf_generator.py
Removes POST /api/resumes/preview route, ResumePreviewResponse schema and its exports, and build_resume_preview from the PDF generator. Simplifies _load_css to always embed the font URI. Adds JST field_serializer to ResumeResponse. Cleans up corresponding test assertions.
Frontend API client and type removal
web/src/api/types.ts, web/src/api/resumes.ts, web/src/api/paths.ts, web/src/api/generated.ts
Removes ResumePreviewResponse type, PATHS.resumes.preview, getCareerResumePreview function, and generated OpenAPI path/operation/schema entries for the preview endpoint.
Diff utility modules and constants removal
web/src/utils/careerDiff.ts, web/src/utils/careerReview.ts, web/src/utils/diffHighlight.ts, web/src/utils/careerDiff.test.ts, web/src/utils/careerReview.test.ts, web/src/utils/diffHighlight.test.ts, web/src/constants/messages.ts
Deletes buildCareerChanges, buildReviewEntries, comparePaths, diff-highlighting utilities, and their full test suites. Removes CAREER_DIFF_LABELS and DIFF_DIALOG_MESSAGES constants.
Form hooks simplification
web/src/hooks/career/useCareerFormModals.ts, web/src/hooks/career/useCareerFormModals.test.ts, web/src/hooks/career/useCareerFormValidationFocus.ts, web/src/hooks/career/useCareerFormValidationFocus.test.ts, web/src/hooks/career/useResumeDiffPreview.ts, web/src/hooks/career/useResumeDiffPreview.test.ts
useCareerFormModals drops save param and save-confirm state. useCareerFormValidationFocus drops changeCount/openSaveConfirm and calls save directly on validation success. useResumeDiffPreview module deleted. Tests updated accordingly.
CareerResumeForm and CareerDiffModal removal
web/src/components/forms/CareerResumeForm.tsx, web/src/components/forms/CareerDiffModal.tsx, web/src/components/forms/CareerDiffModal.module.css, web/e2e/career-dirty-indicator.spec.ts, web/src/test/factories/careerForm.ts
CareerResumeForm removes CareerDiffModal render block, diff computation, and save-confirm wiring. CareerDiffModal component and its CSS module are deleted. E2E test updated to single-click save (no confirmation modal step).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • yusuke0610/devforge#306: Added the /api/resumes/preview endpoint, build_resume_preview, and the diff preview UI — exactly the code this PR removes.
  • yusuke0610/devforge#309: Added logic to CareerDiffModal.tsx and its CSS/constants, all of which are deleted in this PR.
  • yusuke0610/devforge#310: Modifies CareerResumeForm.tsx editing behavior, the same file this PR strips of diff/preview wiring.

Poem

🐇 Snip, snip, snip — the preview's gone!
No modal to confirm, just save and move on.
The diff-highlight code? Hopped away with a bound,
The font-face regex? No longer around.
Less code to nibble, more carrots to find —
A simpler save flow for all rabbit-kind! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 54.55% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely states the main change: removing the pre-save diff confirmation feature for career resumes.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-resume-diff-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added feature 新機能 web フロントエンド (web) backend バックエンド test テスト追加・修正 labels Jun 28, 2026
保存フローが「検証 → そのまま保存」に変わったため、保存後に 🔴 が消える
シナリオから diff モーダル経由の「この内容で保存」クリックを削除する。
不要になった /api/resumes/preview のルートモックも除去する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai RVして

@coderabbitai

coderabbitaiBot commented Jun 29, 2026

Copy link
Copy Markdown

@yusuke0610 レビューします。

✅ 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 ceb0b4a into mainJun 29, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backendバックエンドfeature新機能testテスト追加・修正webフロントエンド (web)

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

feat(web): 経歴書 保存前の差分確認機能を全削除 - #429

Merged
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview
Jun 29, 2026
Merged

feat(web): 経歴書 保存前の差分確認機能を全削除#429
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書の保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一します。

差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を悪化させていたため、この機能専用のコードをフロント・バックエンド双方から全削除します。

変更内容

フロントエンド(完全削除)

  • CareerDiffModal.tsx / .module.cssuseResumeDiffPreviewcareerDiffcareerReviewdiffHighlight(各テスト含む)

フロントエンド(変更)

  • CareerResumeForm.tsx — diff モーダル・差分計算・プレビュー取得を除去
  • useCareerFormModals.ts — 保存確認モーダルの state/handler を削除(削除確認・Markdown 編集は残す)
  • useCareerFormValidationFocus.tschangeCount / openSaveConfirm を撤去し onSubmit を常に save() へ単純化
  • api/{resumes,types,paths}.tsconstants/messages.tsCAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES)から専用定義を除去

バックエンド(削除)

  • /api/resumes/preview エンドポイント、build_resume_previewResumePreviewResponse スキーマ+export、関連テスト
  • 派生デッドコード整理: _load_cssfor_screen 分岐・_FONT_FACE_RE・未使用 import re(PDF パスのみ残す)

SSoT 生成物

  • make codegen-typesweb/src/api/generated.ts を再生成(preview 系の消滅を確認)

残したもの(別機能)

  • 未保存マーク 🔴(useCareerDirty
  • PDF/Markdown 生成と data-fp / data-unit 属性(PDF 出力に無害)

テスト

  • make ci green(backend 629 passed / web 365 passed / lint / build-web / codegen-drift すべて pass)
  • E2E トリガー判定: 保存ハンドラの挙動変更のみで、ページ/ルート/認証/レイアウト/サイドバーの追加・変更なし → 必須トリガー非該当(vitest でカバー)

レビュー注意

  • 破壊的変更: /api/resumes/preview エンドポイントと ResumePreviewResponse を削除(API 契約変更)
  • web/src/api/generated.ts は codegen 再生成による自動生成差分

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Resume timestamps now display in JST-formatted ISO strings.
    • Saving career/resume edits now goes directly through without an extra change-review step.
  • Refactor

    • Removed the resume preview and diff-review flow from the app.
    • Simplified related resume and career editing screens and supporting API surfaces.

保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を
廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一する。
差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を
悪化させていたため、フロント・バックエンド双方の専用コードを削除する。
- フロント: CareerDiffModal / useResumeDiffPreview / careerDiff /
careerReview / diffHighlight とテストを削除。CareerResumeForm・
useCareerFormModals・useCareerFormValidationFocus から差分確認分岐を除去
- バックエンド: /api/resumes/preview エンドポイント・build_resume_preview・
ResumePreviewResponse スキーマと関連テストを削除。_load_css の
for_screen 分岐など派生デッドコードも整理
- messages.ts の CAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES を削除
- OpenAPI 生成物(generated.ts)を再生成
未保存マーク(useCareerDirty)と PDF/Markdown 生成は影響なし。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c288350-3379-4639-a2d3-ea50a5df4c8a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f380b2 and 6de8dfd.

📒 Files selected for processing (28)
  • backend/app/routers/resumes.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/resume.py
  • backend/app/services/pdf/generators/resume_generator.py
  • backend/tests/test_endpoints.py
  • backend/tests/test_pdf_generator.py
  • web/e2e/career-dirty-indicator.spec.ts
  • web/src/api/generated.ts
  • web/src/api/paths.ts
  • web/src/api/resumes.ts
  • web/src/api/types.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/components/forms/CareerResumeForm.tsx
  • web/src/constants/messages.ts
  • web/src/hooks/career/useCareerFormModals.test.ts
  • web/src/hooks/career/useCareerFormModals.ts
  • web/src/hooks/career/useCareerFormValidationFocus.test.ts
  • web/src/hooks/career/useCareerFormValidationFocus.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/test/factories/careerForm.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/utils/careerDiff.ts
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerReview.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
💤 Files with no reviewable changes (20)
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/api/paths.ts
  • web/src/api/types.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/utils/careerReview.ts
  • web/src/utils/careerDiff.ts
  • backend/tests/test_pdf_generator.py
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/hooks/career/useCareerFormModals.test.ts
  • backend/app/schemas/init.py
  • backend/app/routers/resumes.py
  • web/src/constants/messages.ts
  • backend/tests/test_endpoints.py
  • backend/app/schemas/resume.py
  • web/src/api/generated.ts

📝 Walkthrough

Walkthrough

Removes the POST /api/resumes/preview endpoint and its entire implementation stack: backend route, ResumePreviewResponse schema, build_resume_preview generator, frontend API client functions, CareerDiffModal component, diff utility modules (careerDiff, careerReview, diffHighlight), useResumeDiffPreview hook, and save-confirmation wiring in CareerResumeForm and related hooks.

Changes

Resume Preview & Diff Feature Removal

Layer / File(s)Summary
Backend endpoint, schema, and generator cleanup
backend/app/routers/resumes.py, backend/app/schemas/resume.py, backend/app/schemas/__init__.py, backend/app/services/pdf/generators/resume_generator.py, backend/tests/test_endpoints.py, backend/tests/test_pdf_generator.py
Removes POST /api/resumes/preview route, ResumePreviewResponse schema and its exports, and build_resume_preview from the PDF generator. Simplifies _load_css to always embed the font URI. Adds JST field_serializer to ResumeResponse. Cleans up corresponding test assertions.
Frontend API client and type removal
web/src/api/types.ts, web/src/api/resumes.ts, web/src/api/paths.ts, web/src/api/generated.ts
Removes ResumePreviewResponse type, PATHS.resumes.preview, getCareerResumePreview function, and generated OpenAPI path/operation/schema entries for the preview endpoint.
Diff utility modules and constants removal
web/src/utils/careerDiff.ts, web/src/utils/careerReview.ts, web/src/utils/diffHighlight.ts, web/src/utils/careerDiff.test.ts, web/src/utils/careerReview.test.ts, web/src/utils/diffHighlight.test.ts, web/src/constants/messages.ts
Deletes buildCareerChanges, buildReviewEntries, comparePaths, diff-highlighting utilities, and their full test suites. Removes CAREER_DIFF_LABELS and DIFF_DIALOG_MESSAGES constants.
Form hooks simplification
web/src/hooks/career/useCareerFormModals.ts, web/src/hooks/career/useCareerFormModals.test.ts, web/src/hooks/career/useCareerFormValidationFocus.ts, web/src/hooks/career/useCareerFormValidationFocus.test.ts, web/src/hooks/career/useResumeDiffPreview.ts, web/src/hooks/career/useResumeDiffPreview.test.ts
useCareerFormModals drops save param and save-confirm state. useCareerFormValidationFocus drops changeCount/openSaveConfirm and calls save directly on validation success. useResumeDiffPreview module deleted. Tests updated accordingly.
CareerResumeForm and CareerDiffModal removal
web/src/components/forms/CareerResumeForm.tsx, web/src/components/forms/CareerDiffModal.tsx, web/src/components/forms/CareerDiffModal.module.css, web/e2e/career-dirty-indicator.spec.ts, web/src/test/factories/careerForm.ts
CareerResumeForm removes CareerDiffModal render block, diff computation, and save-confirm wiring. CareerDiffModal component and its CSS module are deleted. E2E test updated to single-click save (no confirmation modal step).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • yusuke0610/devforge#306: Added the /api/resumes/preview endpoint, build_resume_preview, and the diff preview UI — exactly the code this PR removes.
  • yusuke0610/devforge#309: Added logic to CareerDiffModal.tsx and its CSS/constants, all of which are deleted in this PR.
  • yusuke0610/devforge#310: Modifies CareerResumeForm.tsx editing behavior, the same file this PR strips of diff/preview wiring.

Poem

🐇 Snip, snip, snip — the preview's gone!
No modal to confirm, just save and move on.
The diff-highlight code? Hopped away with a bound,
The font-face regex? No longer around.
Less code to nibble, more carrots to find —
A simpler save flow for all rabbit-kind! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 54.55% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely states the main change: removing the pre-save diff confirmation feature for career resumes.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-resume-diff-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added feature 新機能 web フロントエンド (web) backend バックエンド test テスト追加・修正 labels Jun 28, 2026
保存フローが「検証 → そのまま保存」に変わったため、保存後に 🔴 が消える
シナリオから diff モーダル経由の「この内容で保存」クリックを削除する。
不要になった /api/resumes/preview のルートモックも除去する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai RVして

@coderabbitai

coderabbitaiBot commented Jun 29, 2026

Copy link
Copy Markdown

@yusuke0610 レビューします。

✅ 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 ceb0b4a into mainJun 29, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backendバックエンドfeature新機能testテスト追加・修正webフロントエンド (web)

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

feat(web): 経歴書 保存前の差分確認機能を全削除 - #429

Merged
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview
Jun 29, 2026
Merged

feat(web): 経歴書 保存前の差分確認機能を全削除#429
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書の保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一します。

差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を悪化させていたため、この機能専用のコードをフロント・バックエンド双方から全削除します。

変更内容

フロントエンド(完全削除)

  • CareerDiffModal.tsx / .module.cssuseResumeDiffPreviewcareerDiffcareerReviewdiffHighlight(各テスト含む)

フロントエンド(変更)

  • CareerResumeForm.tsx — diff モーダル・差分計算・プレビュー取得を除去
  • useCareerFormModals.ts — 保存確認モーダルの state/handler を削除(削除確認・Markdown 編集は残す)
  • useCareerFormValidationFocus.tschangeCount / openSaveConfirm を撤去し onSubmit を常に save() へ単純化
  • api/{resumes,types,paths}.tsconstants/messages.tsCAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES)から専用定義を除去

バックエンド(削除)

  • /api/resumes/preview エンドポイント、build_resume_previewResumePreviewResponse スキーマ+export、関連テスト
  • 派生デッドコード整理: _load_cssfor_screen 分岐・_FONT_FACE_RE・未使用 import re(PDF パスのみ残す)

SSoT 生成物

  • make codegen-typesweb/src/api/generated.ts を再生成(preview 系の消滅を確認)

残したもの(別機能)

  • 未保存マーク 🔴(useCareerDirty
  • PDF/Markdown 生成と data-fp / data-unit 属性(PDF 出力に無害)

テスト

  • make ci green(backend 629 passed / web 365 passed / lint / build-web / codegen-drift すべて pass)
  • E2E トリガー判定: 保存ハンドラの挙動変更のみで、ページ/ルート/認証/レイアウト/サイドバーの追加・変更なし → 必須トリガー非該当(vitest でカバー)

レビュー注意

  • 破壊的変更: /api/resumes/preview エンドポイントと ResumePreviewResponse を削除(API 契約変更)
  • web/src/api/generated.ts は codegen 再生成による自動生成差分

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Resume timestamps now display in JST-formatted ISO strings.
    • Saving career/resume edits now goes directly through without an extra change-review step.
  • Refactor

    • Removed the resume preview and diff-review flow from the app.
    • Simplified related resume and career editing screens and supporting API surfaces.

保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を
廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一する。
差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を
悪化させていたため、フロント・バックエンド双方の専用コードを削除する。
- フロント: CareerDiffModal / useResumeDiffPreview / careerDiff /
careerReview / diffHighlight とテストを削除。CareerResumeForm・
useCareerFormModals・useCareerFormValidationFocus から差分確認分岐を除去
- バックエンド: /api/resumes/preview エンドポイント・build_resume_preview・
ResumePreviewResponse スキーマと関連テストを削除。_load_css の
for_screen 分岐など派生デッドコードも整理
- messages.ts の CAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES を削除
- OpenAPI 生成物(generated.ts)を再生成
未保存マーク(useCareerDirty)と PDF/Markdown 生成は影響なし。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c288350-3379-4639-a2d3-ea50a5df4c8a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f380b2 and 6de8dfd.

📒 Files selected for processing (28)
  • backend/app/routers/resumes.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/resume.py
  • backend/app/services/pdf/generators/resume_generator.py
  • backend/tests/test_endpoints.py
  • backend/tests/test_pdf_generator.py
  • web/e2e/career-dirty-indicator.spec.ts
  • web/src/api/generated.ts
  • web/src/api/paths.ts
  • web/src/api/resumes.ts
  • web/src/api/types.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/components/forms/CareerResumeForm.tsx
  • web/src/constants/messages.ts
  • web/src/hooks/career/useCareerFormModals.test.ts
  • web/src/hooks/career/useCareerFormModals.ts
  • web/src/hooks/career/useCareerFormValidationFocus.test.ts
  • web/src/hooks/career/useCareerFormValidationFocus.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/test/factories/careerForm.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/utils/careerDiff.ts
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerReview.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
💤 Files with no reviewable changes (20)
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/api/paths.ts
  • web/src/api/types.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/utils/careerReview.ts
  • web/src/utils/careerDiff.ts
  • backend/tests/test_pdf_generator.py
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/hooks/career/useCareerFormModals.test.ts
  • backend/app/schemas/init.py
  • backend/app/routers/resumes.py
  • web/src/constants/messages.ts
  • backend/tests/test_endpoints.py
  • backend/app/schemas/resume.py
  • web/src/api/generated.ts

📝 Walkthrough

Walkthrough

Removes the POST /api/resumes/preview endpoint and its entire implementation stack: backend route, ResumePreviewResponse schema, build_resume_preview generator, frontend API client functions, CareerDiffModal component, diff utility modules (careerDiff, careerReview, diffHighlight), useResumeDiffPreview hook, and save-confirmation wiring in CareerResumeForm and related hooks.

Changes

Resume Preview & Diff Feature Removal

Layer / File(s)Summary
Backend endpoint, schema, and generator cleanup
backend/app/routers/resumes.py, backend/app/schemas/resume.py, backend/app/schemas/__init__.py, backend/app/services/pdf/generators/resume_generator.py, backend/tests/test_endpoints.py, backend/tests/test_pdf_generator.py
Removes POST /api/resumes/preview route, ResumePreviewResponse schema and its exports, and build_resume_preview from the PDF generator. Simplifies _load_css to always embed the font URI. Adds JST field_serializer to ResumeResponse. Cleans up corresponding test assertions.
Frontend API client and type removal
web/src/api/types.ts, web/src/api/resumes.ts, web/src/api/paths.ts, web/src/api/generated.ts
Removes ResumePreviewResponse type, PATHS.resumes.preview, getCareerResumePreview function, and generated OpenAPI path/operation/schema entries for the preview endpoint.
Diff utility modules and constants removal
web/src/utils/careerDiff.ts, web/src/utils/careerReview.ts, web/src/utils/diffHighlight.ts, web/src/utils/careerDiff.test.ts, web/src/utils/careerReview.test.ts, web/src/utils/diffHighlight.test.ts, web/src/constants/messages.ts
Deletes buildCareerChanges, buildReviewEntries, comparePaths, diff-highlighting utilities, and their full test suites. Removes CAREER_DIFF_LABELS and DIFF_DIALOG_MESSAGES constants.
Form hooks simplification
web/src/hooks/career/useCareerFormModals.ts, web/src/hooks/career/useCareerFormModals.test.ts, web/src/hooks/career/useCareerFormValidationFocus.ts, web/src/hooks/career/useCareerFormValidationFocus.test.ts, web/src/hooks/career/useResumeDiffPreview.ts, web/src/hooks/career/useResumeDiffPreview.test.ts
useCareerFormModals drops save param and save-confirm state. useCareerFormValidationFocus drops changeCount/openSaveConfirm and calls save directly on validation success. useResumeDiffPreview module deleted. Tests updated accordingly.
CareerResumeForm and CareerDiffModal removal
web/src/components/forms/CareerResumeForm.tsx, web/src/components/forms/CareerDiffModal.tsx, web/src/components/forms/CareerDiffModal.module.css, web/e2e/career-dirty-indicator.spec.ts, web/src/test/factories/careerForm.ts
CareerResumeForm removes CareerDiffModal render block, diff computation, and save-confirm wiring. CareerDiffModal component and its CSS module are deleted. E2E test updated to single-click save (no confirmation modal step).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • yusuke0610/devforge#306: Added the /api/resumes/preview endpoint, build_resume_preview, and the diff preview UI — exactly the code this PR removes.
  • yusuke0610/devforge#309: Added logic to CareerDiffModal.tsx and its CSS/constants, all of which are deleted in this PR.
  • yusuke0610/devforge#310: Modifies CareerResumeForm.tsx editing behavior, the same file this PR strips of diff/preview wiring.

Poem

🐇 Snip, snip, snip — the preview's gone!
No modal to confirm, just save and move on.
The diff-highlight code? Hopped away with a bound,
The font-face regex? No longer around.
Less code to nibble, more carrots to find —
A simpler save flow for all rabbit-kind! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 54.55% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely states the main change: removing the pre-save diff confirmation feature for career resumes.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-resume-diff-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added feature 新機能 web フロントエンド (web) backend バックエンド test テスト追加・修正 labels Jun 28, 2026
保存フローが「検証 → そのまま保存」に変わったため、保存後に 🔴 が消える
シナリオから diff モーダル経由の「この内容で保存」クリックを削除する。
不要になった /api/resumes/preview のルートモックも除去する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai RVして

@coderabbitai

coderabbitaiBot commented Jun 29, 2026

Copy link
Copy Markdown

@yusuke0610 レビューします。

✅ 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 ceb0b4a into mainJun 29, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backendバックエンドfeature新機能testテスト追加・修正webフロントエンド (web)

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

feat(web): 経歴書 保存前の差分確認機能を全削除 - #429

Merged
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview
Jun 29, 2026
Merged

feat(web): 経歴書 保存前の差分確認機能を全削除#429
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書の保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一します。

差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を悪化させていたため、この機能専用のコードをフロント・バックエンド双方から全削除します。

変更内容

フロントエンド(完全削除)

  • CareerDiffModal.tsx / .module.cssuseResumeDiffPreviewcareerDiffcareerReviewdiffHighlight(各テスト含む)

フロントエンド(変更)

  • CareerResumeForm.tsx — diff モーダル・差分計算・プレビュー取得を除去
  • useCareerFormModals.ts — 保存確認モーダルの state/handler を削除(削除確認・Markdown 編集は残す)
  • useCareerFormValidationFocus.tschangeCount / openSaveConfirm を撤去し onSubmit を常に save() へ単純化
  • api/{resumes,types,paths}.tsconstants/messages.tsCAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES)から専用定義を除去

バックエンド(削除)

  • /api/resumes/preview エンドポイント、build_resume_previewResumePreviewResponse スキーマ+export、関連テスト
  • 派生デッドコード整理: _load_cssfor_screen 分岐・_FONT_FACE_RE・未使用 import re(PDF パスのみ残す)

SSoT 生成物

  • make codegen-typesweb/src/api/generated.ts を再生成(preview 系の消滅を確認)

残したもの(別機能)

  • 未保存マーク 🔴(useCareerDirty
  • PDF/Markdown 生成と data-fp / data-unit 属性(PDF 出力に無害)

テスト

  • make ci green(backend 629 passed / web 365 passed / lint / build-web / codegen-drift すべて pass)
  • E2E トリガー判定: 保存ハンドラの挙動変更のみで、ページ/ルート/認証/レイアウト/サイドバーの追加・変更なし → 必須トリガー非該当(vitest でカバー)

レビュー注意

  • 破壊的変更: /api/resumes/preview エンドポイントと ResumePreviewResponse を削除(API 契約変更)
  • web/src/api/generated.ts は codegen 再生成による自動生成差分

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Resume timestamps now display in JST-formatted ISO strings.
    • Saving career/resume edits now goes directly through without an extra change-review step.
  • Refactor

    • Removed the resume preview and diff-review flow from the app.
    • Simplified related resume and career editing screens and supporting API surfaces.

保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を
廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一する。
差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を
悪化させていたため、フロント・バックエンド双方の専用コードを削除する。
- フロント: CareerDiffModal / useResumeDiffPreview / careerDiff /
careerReview / diffHighlight とテストを削除。CareerResumeForm・
useCareerFormModals・useCareerFormValidationFocus から差分確認分岐を除去
- バックエンド: /api/resumes/preview エンドポイント・build_resume_preview・
ResumePreviewResponse スキーマと関連テストを削除。_load_css の
for_screen 分岐など派生デッドコードも整理
- messages.ts の CAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES を削除
- OpenAPI 生成物(generated.ts)を再生成
未保存マーク(useCareerDirty)と PDF/Markdown 生成は影響なし。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c288350-3379-4639-a2d3-ea50a5df4c8a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f380b2 and 6de8dfd.

📒 Files selected for processing (28)
  • backend/app/routers/resumes.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/resume.py
  • backend/app/services/pdf/generators/resume_generator.py
  • backend/tests/test_endpoints.py
  • backend/tests/test_pdf_generator.py
  • web/e2e/career-dirty-indicator.spec.ts
  • web/src/api/generated.ts
  • web/src/api/paths.ts
  • web/src/api/resumes.ts
  • web/src/api/types.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/components/forms/CareerResumeForm.tsx
  • web/src/constants/messages.ts
  • web/src/hooks/career/useCareerFormModals.test.ts
  • web/src/hooks/career/useCareerFormModals.ts
  • web/src/hooks/career/useCareerFormValidationFocus.test.ts
  • web/src/hooks/career/useCareerFormValidationFocus.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/test/factories/careerForm.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/utils/careerDiff.ts
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerReview.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
💤 Files with no reviewable changes (20)
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/api/paths.ts
  • web/src/api/types.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/utils/careerReview.ts
  • web/src/utils/careerDiff.ts
  • backend/tests/test_pdf_generator.py
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/hooks/career/useCareerFormModals.test.ts
  • backend/app/schemas/init.py
  • backend/app/routers/resumes.py
  • web/src/constants/messages.ts
  • backend/tests/test_endpoints.py
  • backend/app/schemas/resume.py
  • web/src/api/generated.ts

📝 Walkthrough

Walkthrough

Removes the POST /api/resumes/preview endpoint and its entire implementation stack: backend route, ResumePreviewResponse schema, build_resume_preview generator, frontend API client functions, CareerDiffModal component, diff utility modules (careerDiff, careerReview, diffHighlight), useResumeDiffPreview hook, and save-confirmation wiring in CareerResumeForm and related hooks.

Changes

Resume Preview & Diff Feature Removal

Layer / File(s)Summary
Backend endpoint, schema, and generator cleanup
backend/app/routers/resumes.py, backend/app/schemas/resume.py, backend/app/schemas/__init__.py, backend/app/services/pdf/generators/resume_generator.py, backend/tests/test_endpoints.py, backend/tests/test_pdf_generator.py
Removes POST /api/resumes/preview route, ResumePreviewResponse schema and its exports, and build_resume_preview from the PDF generator. Simplifies _load_css to always embed the font URI. Adds JST field_serializer to ResumeResponse. Cleans up corresponding test assertions.
Frontend API client and type removal
web/src/api/types.ts, web/src/api/resumes.ts, web/src/api/paths.ts, web/src/api/generated.ts
Removes ResumePreviewResponse type, PATHS.resumes.preview, getCareerResumePreview function, and generated OpenAPI path/operation/schema entries for the preview endpoint.
Diff utility modules and constants removal
web/src/utils/careerDiff.ts, web/src/utils/careerReview.ts, web/src/utils/diffHighlight.ts, web/src/utils/careerDiff.test.ts, web/src/utils/careerReview.test.ts, web/src/utils/diffHighlight.test.ts, web/src/constants/messages.ts
Deletes buildCareerChanges, buildReviewEntries, comparePaths, diff-highlighting utilities, and their full test suites. Removes CAREER_DIFF_LABELS and DIFF_DIALOG_MESSAGES constants.
Form hooks simplification
web/src/hooks/career/useCareerFormModals.ts, web/src/hooks/career/useCareerFormModals.test.ts, web/src/hooks/career/useCareerFormValidationFocus.ts, web/src/hooks/career/useCareerFormValidationFocus.test.ts, web/src/hooks/career/useResumeDiffPreview.ts, web/src/hooks/career/useResumeDiffPreview.test.ts
useCareerFormModals drops save param and save-confirm state. useCareerFormValidationFocus drops changeCount/openSaveConfirm and calls save directly on validation success. useResumeDiffPreview module deleted. Tests updated accordingly.
CareerResumeForm and CareerDiffModal removal
web/src/components/forms/CareerResumeForm.tsx, web/src/components/forms/CareerDiffModal.tsx, web/src/components/forms/CareerDiffModal.module.css, web/e2e/career-dirty-indicator.spec.ts, web/src/test/factories/careerForm.ts
CareerResumeForm removes CareerDiffModal render block, diff computation, and save-confirm wiring. CareerDiffModal component and its CSS module are deleted. E2E test updated to single-click save (no confirmation modal step).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • yusuke0610/devforge#306: Added the /api/resumes/preview endpoint, build_resume_preview, and the diff preview UI — exactly the code this PR removes.
  • yusuke0610/devforge#309: Added logic to CareerDiffModal.tsx and its CSS/constants, all of which are deleted in this PR.
  • yusuke0610/devforge#310: Modifies CareerResumeForm.tsx editing behavior, the same file this PR strips of diff/preview wiring.

Poem

🐇 Snip, snip, snip — the preview's gone!
No modal to confirm, just save and move on.
The diff-highlight code? Hopped away with a bound,
The font-face regex? No longer around.
Less code to nibble, more carrots to find —
A simpler save flow for all rabbit-kind! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 54.55% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely states the main change: removing the pre-save diff confirmation feature for career resumes.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-resume-diff-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added feature 新機能 web フロントエンド (web) backend バックエンド test テスト追加・修正 labels Jun 28, 2026
保存フローが「検証 → そのまま保存」に変わったため、保存後に 🔴 が消える
シナリオから diff モーダル経由の「この内容で保存」クリックを削除する。
不要になった /api/resumes/preview のルートモックも除去する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai RVして

@coderabbitai

coderabbitaiBot commented Jun 29, 2026

Copy link
Copy Markdown

@yusuke0610 レビューします。

✅ 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 ceb0b4a into mainJun 29, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backendバックエンドfeature新機能testテスト追加・修正webフロントエンド (web)

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

feat(web): 経歴書 保存前の差分確認機能を全削除 - #429

Merged
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview
Jun 29, 2026
Merged

feat(web): 経歴書 保存前の差分確認機能を全削除#429
yusuke0610 merged 2 commits into
mainfrom
feat/remove-resume-diff-preview

Conversation

@yusuke0610

@yusuke0610yusuke0610 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書の保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一します。

差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を悪化させていたため、この機能専用のコードをフロント・バックエンド双方から全削除します。

変更内容

フロントエンド(完全削除)

  • CareerDiffModal.tsx / .module.cssuseResumeDiffPreviewcareerDiffcareerReviewdiffHighlight(各テスト含む)

フロントエンド(変更)

  • CareerResumeForm.tsx — diff モーダル・差分計算・プレビュー取得を除去
  • useCareerFormModals.ts — 保存確認モーダルの state/handler を削除(削除確認・Markdown 編集は残す)
  • useCareerFormValidationFocus.tschangeCount / openSaveConfirm を撤去し onSubmit を常に save() へ単純化
  • api/{resumes,types,paths}.tsconstants/messages.tsCAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES)から専用定義を除去

バックエンド(削除)

  • /api/resumes/preview エンドポイント、build_resume_previewResumePreviewResponse スキーマ+export、関連テスト
  • 派生デッドコード整理: _load_cssfor_screen 分岐・_FONT_FACE_RE・未使用 import re(PDF パスのみ残す)

SSoT 生成物

  • make codegen-typesweb/src/api/generated.ts を再生成(preview 系の消滅を確認)

残したもの(別機能)

  • 未保存マーク 🔴(useCareerDirty
  • PDF/Markdown 生成と data-fp / data-unit 属性(PDF 出力に無害)

テスト

  • make ci green(backend 629 passed / web 365 passed / lint / build-web / codegen-drift すべて pass)
  • E2E トリガー判定: 保存ハンドラの挙動変更のみで、ページ/ルート/認証/レイアウト/サイドバーの追加・変更なし → 必須トリガー非該当(vitest でカバー)

レビュー注意

  • 破壊的変更: /api/resumes/preview エンドポイントと ResumePreviewResponse を削除(API 契約変更)
  • web/src/api/generated.ts は codegen 再生成による自動生成差分

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Resume timestamps now display in JST-formatted ISO strings.
    • Saving career/resume edits now goes directly through without an extra change-review step.
  • Refactor

    • Removed the resume preview and diff-review flow from the app.
    • Simplified related resume and career editing screens and supporting API surfaces.

保存ボタン押下時に必ず開いていた左右 diff モーダル(CareerDiffModal)を
廃止し、保存フローを「バリデーション成功 → そのまま保存」に統一する。
差分確認は実際に使われておらず、保存のたびにモーダルを挟むぶん UX を
悪化させていたため、フロント・バックエンド双方の専用コードを削除する。
- フロント: CareerDiffModal / useResumeDiffPreview / careerDiff /
careerReview / diffHighlight とテストを削除。CareerResumeForm・
useCareerFormModals・useCareerFormValidationFocus から差分確認分岐を除去
- バックエンド: /api/resumes/preview エンドポイント・build_resume_preview・
ResumePreviewResponse スキーマと関連テストを削除。_load_css の
for_screen 分岐など派生デッドコードも整理
- messages.ts の CAREER_DIFF_LABELS / DIFF_DIALOG_MESSAGES を削除
- OpenAPI 生成物(generated.ts)を再生成
未保存マーク(useCareerDirty)と PDF/Markdown 生成は影響なし。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c288350-3379-4639-a2d3-ea50a5df4c8a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f380b2 and 6de8dfd.

📒 Files selected for processing (28)
  • backend/app/routers/resumes.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/resume.py
  • backend/app/services/pdf/generators/resume_generator.py
  • backend/tests/test_endpoints.py
  • backend/tests/test_pdf_generator.py
  • web/e2e/career-dirty-indicator.spec.ts
  • web/src/api/generated.ts
  • web/src/api/paths.ts
  • web/src/api/resumes.ts
  • web/src/api/types.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/components/forms/CareerResumeForm.tsx
  • web/src/constants/messages.ts
  • web/src/hooks/career/useCareerFormModals.test.ts
  • web/src/hooks/career/useCareerFormModals.ts
  • web/src/hooks/career/useCareerFormValidationFocus.test.ts
  • web/src/hooks/career/useCareerFormValidationFocus.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/test/factories/careerForm.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/utils/careerDiff.ts
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerReview.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
💤 Files with no reviewable changes (20)
  • web/src/utils/careerReview.test.ts
  • web/src/utils/careerDiff.test.ts
  • web/src/api/paths.ts
  • web/src/api/types.ts
  • web/src/hooks/career/useResumeDiffPreview.test.ts
  • web/src/utils/diffHighlight.test.ts
  • web/src/utils/diffHighlight.ts
  • web/src/components/forms/CareerDiffModal.tsx
  • web/src/utils/careerReview.ts
  • web/src/utils/careerDiff.ts
  • backend/tests/test_pdf_generator.py
  • web/src/hooks/career/useResumeDiffPreview.ts
  • web/src/components/forms/CareerDiffModal.module.css
  • web/src/hooks/career/useCareerFormModals.test.ts
  • backend/app/schemas/init.py
  • backend/app/routers/resumes.py
  • web/src/constants/messages.ts
  • backend/tests/test_endpoints.py
  • backend/app/schemas/resume.py
  • web/src/api/generated.ts

📝 Walkthrough

Walkthrough

Removes the POST /api/resumes/preview endpoint and its entire implementation stack: backend route, ResumePreviewResponse schema, build_resume_preview generator, frontend API client functions, CareerDiffModal component, diff utility modules (careerDiff, careerReview, diffHighlight), useResumeDiffPreview hook, and save-confirmation wiring in CareerResumeForm and related hooks.

Changes

Resume Preview & Diff Feature Removal

Layer / File(s)Summary
Backend endpoint, schema, and generator cleanup
backend/app/routers/resumes.py, backend/app/schemas/resume.py, backend/app/schemas/__init__.py, backend/app/services/pdf/generators/resume_generator.py, backend/tests/test_endpoints.py, backend/tests/test_pdf_generator.py
Removes POST /api/resumes/preview route, ResumePreviewResponse schema and its exports, and build_resume_preview from the PDF generator. Simplifies _load_css to always embed the font URI. Adds JST field_serializer to ResumeResponse. Cleans up corresponding test assertions.
Frontend API client and type removal
web/src/api/types.ts, web/src/api/resumes.ts, web/src/api/paths.ts, web/src/api/generated.ts
Removes ResumePreviewResponse type, PATHS.resumes.preview, getCareerResumePreview function, and generated OpenAPI path/operation/schema entries for the preview endpoint.
Diff utility modules and constants removal
web/src/utils/careerDiff.ts, web/src/utils/careerReview.ts, web/src/utils/diffHighlight.ts, web/src/utils/careerDiff.test.ts, web/src/utils/careerReview.test.ts, web/src/utils/diffHighlight.test.ts, web/src/constants/messages.ts
Deletes buildCareerChanges, buildReviewEntries, comparePaths, diff-highlighting utilities, and their full test suites. Removes CAREER_DIFF_LABELS and DIFF_DIALOG_MESSAGES constants.
Form hooks simplification
web/src/hooks/career/useCareerFormModals.ts, web/src/hooks/career/useCareerFormModals.test.ts, web/src/hooks/career/useCareerFormValidationFocus.ts, web/src/hooks/career/useCareerFormValidationFocus.test.ts, web/src/hooks/career/useResumeDiffPreview.ts, web/src/hooks/career/useResumeDiffPreview.test.ts
useCareerFormModals drops save param and save-confirm state. useCareerFormValidationFocus drops changeCount/openSaveConfirm and calls save directly on validation success. useResumeDiffPreview module deleted. Tests updated accordingly.
CareerResumeForm and CareerDiffModal removal
web/src/components/forms/CareerResumeForm.tsx, web/src/components/forms/CareerDiffModal.tsx, web/src/components/forms/CareerDiffModal.module.css, web/e2e/career-dirty-indicator.spec.ts, web/src/test/factories/careerForm.ts
CareerResumeForm removes CareerDiffModal render block, diff computation, and save-confirm wiring. CareerDiffModal component and its CSS module are deleted. E2E test updated to single-click save (no confirmation modal step).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • yusuke0610/devforge#306: Added the /api/resumes/preview endpoint, build_resume_preview, and the diff preview UI — exactly the code this PR removes.
  • yusuke0610/devforge#309: Added logic to CareerDiffModal.tsx and its CSS/constants, all of which are deleted in this PR.
  • yusuke0610/devforge#310: Modifies CareerResumeForm.tsx editing behavior, the same file this PR strips of diff/preview wiring.

Poem

🐇 Snip, snip, snip — the preview's gone!
No modal to confirm, just save and move on.
The diff-highlight code? Hopped away with a bound,
The font-face regex? No longer around.
Less code to nibble, more carrots to find —
A simpler save flow for all rabbit-kind! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 54.55% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely states the main change: removing the pre-save diff confirmation feature for career resumes.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-resume-diff-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added feature 新機能 web フロントエンド (web) backend バックエンド test テスト追加・修正 labels Jun 28, 2026
保存フローが「検証 → そのまま保存」に変わったため、保存後に 🔴 が消える
シナリオから diff モーダル経由の「この内容で保存」クリックを削除する。
不要になった /api/resumes/preview のルートモックも除去する。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@yusuke0610

Copy link
Copy Markdown
OwnerAuthor

@coderabbitai RVして

@coderabbitai

coderabbitaiBot commented Jun 29, 2026

Copy link
Copy Markdown

@yusuke0610 レビューします。

✅ 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 ceb0b4a into mainJun 29, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backendバックエンドfeature新機能testテスト追加・修正webフロントエンド (web)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yusuke0610