Skip to content

perf(network-graph): preserve memoized rerender boundary - #1560

Draft
seonghobae wants to merge 26 commits into
bolt/networkgraph-array-copy-removal-3640017362173775883from
codex/networkgraph-memoization-successor
Draft

perf(network-graph): preserve memoized rerender boundary#1560
seonghobae wants to merge 26 commits into
bolt/networkgraph-array-copy-removal-3640017362173775883from
codex/networkgraph-memoization-successor

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Purpose

Stable successor for #1526. This PR preserves the memoization child delta without rewriting predecessor history or duplicating #1522's bounded-option ownership.

Current exact authority

Parent adoption and repair

#1522 advanced after this successor's earlier repair. A fresh parent audit found that one nominal CI-trigger commit had actually loosened the Strix httpx2==2.12.0 pin; #1522 repaired that drift test-first and moved to fd938c1c....

This successor adopted the current parent without force or destructive rebase. Ordinary two-parent merge 4795d593f0ec3087c1b3cce82bfee692436eaeee first joined the histories. The immediate parent/child compare then exposed one retained stale parent blob: backend/tests/test_container_dependency_pin_contract.py did not yet contain #1522's new exact-httpx2 contract. Rather than treating the concurrent delta as a race, direct child a976b4d009ee5ab5f18899e30f41778ecdb47eec adopted that exact parent blob. A fresh compare now reports only the two intended NetworkGraph child files and behind_by=0.

The production child delta remains the React.memo boundary only. The behavioral regression renders ParentHarness and NetworkGraph in the same React root, lets child async work settle, rerenders only the parent, verifies the parent DOM changes, and requires the child's render-body observation count not to increase. It does not inspect React private markers. #1522 continues to own relationship/node option limits and their tests.

Evidence and merge boundary

Fresh repository-owned pull-request workflow lookup for a976b4d009ee5ab5f18899e30f41778ecdb47eec currently returns 0 runs. No hosted GREEN is claimed, and predecessor checks/reviews do not transfer. #1522 itself remains Draft with new exact-head checks non-terminal.

Keep Draft until #1522 is protected-integrated, this descendant is revalidated against the resulting parent, and one unchanged exact head has every then-live required repository/organization check terminal-success, zero valid unresolved current-head findings/threads, and the qualifying independent post-last-push approval required by live governance. Close #1526 only after #1560 merges and a fresh protected-target equivalence audit proves complete succession. No force-push, destructive rebase, self-approval, admin bypass, dummy/no-op requeue, predecessor-evidence transfer, gate weakening, or unsupported p95 claim.

seonghobae and others added 19 commits September 2, 2026 01:35
NetworkGraph 컴포넌트는 무거운 서드파티 라이브러리인 vis-network를 초기화하고 DOM을 직접 조작합니다.
이 컴포넌트가 부모 컴포넌트(WorkspaceHome 등)의 상태 변경으로 인해 불필요하게 리렌더링되는 것을 방지하기 위해 React.memo로 감쌌습니다.
이로 인해 관계 컨텍스트가 안정적일 때 리렌더링 및 DOM 스래싱을 방지하여 성능이 크게 향상됩니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
Merge PR #1522's bounded relationship and node option materialization into PR #1526 without rewriting history. The child retains its independent React memoization behavior while sharing one NetworkGraph implementation and combined regression suite.

Assisted-by: OpenAI Codex
Signed-off-by: Seongho Bae <me@seonghobae.me>
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
Reverse the follow-up that reintroduced full-array option materialization, deleted the bounded option and parent-rerender tests, and replaced behavioral memoization evidence with an implementation-marker assertion. Preserve both parent and child deltas.

Assisted-by: OpenAI Codex
Signed-off-by: Seongho Bae <me@seonghobae.me>
Integrate the current bounded option-materialization parent without force-pushing or dropping the child memoization delta.

Assisted-by: OpenAI Codex
Signed-off-by: Seongho Bae <me@seonghobae.me>
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
Reverse the concurrent follow-up that again removed bounded option materialization and behavioral memoization tests. Keep the complete parent and child delta without rewriting branch history.\n\nAssisted-by: OpenAI Codex

Signed-off-by: Seongho Bae <me@seonghobae.me>
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
Assisted-by: OpenAI Codex
Signed-off-by: Seongho Bae <me@seonghobae.me>
@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

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.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 4, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-04T13:43:59.940651Z 86dab1e PR opened
ℹ️ About Codex in GitHub

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

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

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다.
부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다.
또한 이 효과를 증명하는 테스트를 추가했습니다.
@seonghobae

Copy link
Copy Markdown
Contributor Author

Lifecycle reconciled: this successor stays Draft because non-default-base Application CI, Bandit, and image validation were suppressed. #1562 repairs those repository-owned trigger filters with 38 governance tests and actionlint. After #1562 and parent #1522 merge, re-fetch/retarget this exact delta, mark Ready, and require fresh hosted checks and independent review.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Non-force restack complete at exact head 20fdedbae61f0e11cc650413d35532507b99656b. The successor now inherits parent #1522 exact head 2d58b23003917319fb6fd5170973f70b88793fb0, including the valid exact-pinned Strix httpx2 prerequisite identified from failed job 101062515199; the effective child diff remains the five NetworkGraph files. Full frontend verification: 52 files / 439 tests passed, TypeScript passed, focused ESLint passed, and parent-to-child diff check passed. All hosted checks and reviews must regenerate on this head.

Restore the current parent test blobs, remove generated child-only churn, and reinstate the real parent-rerender regression without rewriting predecessor history.

Assisted-by: OpenAI Codex
Signed-off-by: Seongho Bae <me@seonghobae.me>
Adopt the current canonical parent non-destructively. The existing child tree already equals current #1522 plus the memoization source/test delta, so no product files change in this merge.

Assisted-by: OpenAI Codex
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintenance priority: medium Normal-priority or P2 work status: draft Draft pull request type: maintenance Maintenance, build, dependency, or operational upkeep

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant