Skip to content

perf(mail): memoize email list element mapping - #1267

Closed
seonghobae wants to merge 2 commits into
developfrom
perf/memoize-email-list-3887193581824671904
Closed

seonghobae wants to merge 2 commits into
developfrom
perf/memoize-email-list-3887193581824671904

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Scope

Memoize the EmailList element mapping so local state changes that do not alter the loaded emails, selection, or selection callback do not rebuild the full React element array.

The existing memoized EmailListItemComponent remains the per-item render boundary; this change only avoids repeating the parent emails.map(...) work when its inputs are unchanged.

Current-base refresh

frontend/src/components/EmailList.tsx did not change on protected develop between this PR's original base and the current base, so the reviewed one-file semantic delta can be carried forward without replaying unrelated repository history.

  • Protected base: develop@c375c960eb6e409424541ecbdb2dc35694b9f495
  • Current head: 05c3a3aeebba7fac78a4a3948ee0a96927af0b02
  • develop...HEAD: behind_by=0
  • Exact diff: one file, frontend/src/components/EmailList.tsx

The branch was refreshed by a normal non-forced two-parent merge; current protected develop is preserved everywhere outside the intended file.

Claim boundary

This removes repeated O(N) element construction for state changes where the memo dependencies remain stable. It does not claim that React reconciliation, child renders, or all search interactions become O(1); exact user-visible benefit remains subject to current-head frontend tests and profiling.

Merge boundary

All predecessor-head checks and reviews are historical after the refresh. Merge only after this exact unchanged head passes every live required current-head CI/security/coverage/container/review gate, zero actionable review threads remain, qualifying independent current-head approval exists under live governance, and normal protected-branch rules accept the merge without bypass.


Open in Devin Review

@google-labs-jules

Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 59 minutes.

View limit details

Limit details: You’ve used the included review currently available.

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

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b8b9ca32-0640-45f7-a879-ac9ac04e6419

📥 Commits

Reviewing files that changed from the base of the PR and between f3beb1c and 866de32.

📒 Files selected for processing (1)
  • frontend/src/components/EmailList.tsx

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.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head b127425728f9354cec038ed76fc5a87bce434072.

  • Head SHA: b127425728f9354cec038ed76fc5a87bce434072

  • Workflow run: 31235943907

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Frontend: EmailList.tsx"]
  S1 --> I1["browser runtime and bundle"]
  I1 --> R1["Review risk: Frontend: EmailList.tsx"]
  R1 --> V1["frontend tests"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 8b2cbf0096841f62e8881ec0d6ef4080d1d9b5db
  • Workflow run: 32043774155
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 8b2cbf0096841f62e8881ec0d6ef4080d1d9b5db.

  • Head SHA: 8b2cbf0096841f62e8881ec0d6ef4080d1d9b5db

  • Workflow run: 32043774155

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Frontend: EmailList.tsx"]
  S1 --> I1["browser runtime and bundle"]
  I1 --> R1["Review risk: Frontend: EmailList.tsx"]
  R1 --> V1["frontend tests"]
Loading

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

PR governance metadata gate is not ready for 866de32194792c4fc8d84d332a459d6a1a4bbfc4:

  • Required check strix is FAILURE on the current head.

@seonghobae seonghobae changed the title ⚡ Bolt: [성능 개선] EmailList 인라인 렌더링 최적화 perf(mail): memoize email list element mapping Aug 15, 2026
@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review August 15, 2026 06:56

This CHANGES_REQUESTED review evaluated predecessor head b127425. The current one-file candidate 05c3a3a is rebuilt on current protected develop, has no review threads, and exact-head Application CI/security/container workflows are terminal-success. Dismissal removes stale predecessor-head blocking state only; it is not approval.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.

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.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head edaaf22fbf677ac52595490e297d9aa2de6017ba.

  • Head SHA: edaaf22fbf677ac52595490e297d9aa2de6017ba

  • Workflow run: 31908340826

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Frontend: EmailList.tsx"]
  S1 --> I1["browser runtime and bundle"]
  I1 --> R1["Review risk: Frontend: EmailList.tsx"]
  R1 --> V1["frontend tests"]
Loading

@cursor

cursor Bot commented Aug 17, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 8b2cbf0096841f62e8881ec0d6ef4080d1d9b5db.

  • Head SHA: 8b2cbf0096841f62e8881ec0d6ef4080d1d9b5db

  • Workflow run: 32043774155

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Frontend: EmailList.tsx"]
  S1 --> I1["browser runtime and bundle"]
  I1 --> R1["Review risk: Frontend: EmailList.tsx"]
  R1 --> V1["frontend tests"]
Loading

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

@seonghobae
seonghobae enabled auto-merge (squash) August 20, 2026 20:10
@seonghobae
seonghobae force-pushed the perf/memoize-email-list-3887193581824671904 branch from e4f45f3 to 8fccadb Compare August 21, 2026 02:12
@seonghobae
seonghobae dismissed stale reviews from opencode-agent[bot] and opencode-agent[bot] August 22, 2026 07:41

Stale review: cited a coverage-evidence/required-check failure on an earlier commit; current head has been verified (gh pr checks) to pass coverage-evidence and all other non-metadata-gate required checks, with no current-head review from this reviewer. Dismissing as superseded per AGENTS.md stale-review guidance.

@opencode-agent opencode-agent Bot added priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: maintenance Maintenance, build, dependency, or operational upkeep labels Aug 22, 2026
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

An error occurred during the review process. Please try again later.


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.

@opencode-agent
opencode-agent Bot disabled auto-merge August 31, 2026 06:42

Copy link
Copy Markdown
Contributor Author

현재 보호 base와 최신 EmailList lane을 다시 대조했습니다. 이 PR의 유효 production delta는 emails.map(...)으로 만드는 EmailListItemComponent 배열을 [emails, selectedEmailId, onSelectEmail] 의존성의 useMemo로 감싸는 것 하나입니다. Current-base #1542가 같은 dependency set, 같은 item props/key, 같은 렌더 위치를 유지한 채 동일 semantic delta를 이미 포함합니다. 이 PR에는 별도 test/fixture/contract/doc product delta가 없고 변경 파일도 EmailList.tsx 한 개뿐입니다.

따라서 오래된 predecessor를 다시 restack해 병렬 writer를 유지할 이유가 없고, #1542를 current-base successor로 남겨 이 PR의 유효 delta를 완전 승계합니다. 이 PR의 historical checks/reviews/comments는 #1542의 exact-head merge evidence로 이전하지 않습니다. #1542 자체의 누락된 regression/performance evidence는 별도 repair finding으로 처리합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: maintenance Maintenance, build, dependency, or operational upkeep

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant