diff --git a/.jules/bolt.md b/.jules/bolt.md
index 57daf471..2cc4464a 100644
--- a/.jules/bolt.md
+++ b/.jules/bolt.md
@@ -1,5 +1,3 @@
-## 2026-08-11 - Use `Date.parse` for timestamp primitives
-
-**Learning:** `Date.parse(value)` returns the timestamp primitive directly, while `new Date(value).getTime()` also constructs a `Date` object. Both use the same ECMAScript string-parsing semantics for these call sites.
-
-**Action:** In frequently executed paths that only need a timestamp primitive, prefer `Date.parse(value)`. Treat the allocation reduction as a bounded micro-optimization unless a committed benchmark establishes a larger runtime effect.
+## 2025-02-19 - 배열 최댓값 계산 시 Math.max와 스프레드 연산자 사용으로 인한 성능 및 콜 스택 이슈 해결
+**Learning:** React 컴포넌트(`DelegationInsight`, `MembersPage`, `TopUsersList` 등)에서 리스트 렌더링 시 배열의 최댓값을 구하기 위해 `Math.max(...array)`를 사용하면 배열 크기가 클 때 'Maximum call stack size exceeded' 에러가 발생할 수 있습니다. 또한 매 렌더링 주기마다 무거운 동기적 계산을 반복하여 성능 저하를 초래합니다.
+**Action:** 항상 `Math.max(...array)` 대신 `.reduce((max, item) => Math.max(max, item), 0)`를 사용하여 모든 크기의 데이터셋을 안전하게 처리해야 합니다. React 컴포넌트에서 이러한 파생 값을 계산할 때는 `useMemo`로 감싸 데이터가 변경될 때만 재계산되도록 하여 불필요한 렌더링을 방지해야 합니다.
diff --git a/packages/web/src/app/dashboard/[orgSlug]/settings/members/page.tsx b/packages/web/src/app/dashboard/[orgSlug]/settings/members/page.tsx
index 5d6ef680..2e08bb6f 100644
--- a/packages/web/src/app/dashboard/[orgSlug]/settings/members/page.tsx
+++ b/packages/web/src/app/dashboard/[orgSlug]/settings/members/page.tsx
@@ -1,49 +1,49 @@
-'use client'
+"use client";
-import { use, useState } from 'react'
-import { useSession } from 'next-auth/react'
+import { use, useMemo, useState } from "react";
+import { useSession } from "next-auth/react";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
-} from '@/components/ui/card'
-import { Button } from '@/components/ui/button'
-import { Skeleton } from '@/components/ui/skeleton'
-import { Alert, AlertDescription } from '@/components/ui/alert'
+} from "@/components/ui/card";
+import { Button } from "@/components/ui/button";
+import { Skeleton } from "@/components/ui/skeleton";
+import { Alert, AlertDescription } from "@/components/ui/alert";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
-} from '@/components/ui/select'
+} from "@/components/ui/select";
import {
useMembers,
useRemoveMember,
useUpdateMemberRole,
type MemberListItem,
-} from '@/hooks/use-members'
-import { useOrgs } from '@/hooks/use-orgs'
-import type { OrgRole } from '@argos/shared'
-import { ApiError } from '@/lib/api-client'
-import { cn } from '@/lib/utils'
+} from "@/hooks/use-members";
+import { useOrgs } from "@/hooks/use-orgs";
+import type { OrgRole } from "@argos/shared";
+import { ApiError } from "@/lib/api-client";
+import { cn } from "@/lib/utils";
function CostBar({ cost, maxCost }: { cost: number; maxCost: number }) {
- const pct = maxCost > 0 ? Math.round((cost / maxCost) * 100) : 0
+ const pct = maxCost > 0 ? Math.round((cost / maxCost) * 100) : 0;
const barColor =
pct >= 67
- ? 'bg-destructive'
+ ? "bg-destructive"
: pct >= 34
- ? 'bg-[var(--color-chart-4)]'
- : 'bg-[var(--color-chart-3)]'
+ ? "bg-[var(--color-chart-4)]"
+ : "bg-[var(--color-chart-3)]";
return (
@@ -51,22 +51,22 @@ function CostBar({ cost, maxCost }: { cost: number; maxCost: number }) {
${cost.toFixed(2)}