RUN v3.2.4 /home/jay/projects/InsuRo/.worktrees/task-3003-dev5 DEPRECATED 'basic' reporter is deprecated and will be removed in Vitest v3. Remove 'basic' from 'reporters' option. To match 'basic' reporter 100%, use configuration: { "test": { "reporters": [ [ "default", { "summary": false } ] ] } } ✓ extension/__tests__/prd1-ingest-core.test.ts (54 tests) 64ms ✓ src/lib/__tests__/lifeThreeCritical.test.ts (40 tests) 24ms ✓ extension/__tests__/a7-write-path-blocked.test.ts (19 tests) 151ms ✓ extension/__tests__/track-a-gates.test.ts (110 tests) 127ms ✓ extension/__tests__/track-a-preview.test.ts (52 tests) 319ms ✓ src/lib/__tests__/rpPresentation.test.ts (34 tests) 31ms ✓ src/lib/__tests__/push-utils.test.ts (35 tests) 56ms stdout | extension/__tests__/life-matrix-routing.test.ts > captureLifeMatrixToSession — 생보(LF) 화면에서만 scrapeMmlfcpMatrix() 결과를 storage.session에 저장 > 생보(LF) 화면 → matrix가 storage.session에 저장되고 scrapeMmlfcpMatrix().matrix와 동일하다 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) stdout | extension/__tests__/life-matrix-routing.test.ts > captureLifeMatrixToSession — 생보(LF) 화면에서만 scrapeMmlfcpMatrix() 결과를 storage.session에 저장 > 생보 화면인데 mmlfcp 데이터가 비어있으면(선택 보험사 0개) MMLFCP_NO_SELECTION, 저장 없음 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= false raw= 3 included= 0 [InsuRo Helper Trace] scrapeMmlfcpMatrix: 필터 후 선택 보험사 0개 → returning _mmlfcpNoSelection sentinel stdout | extension/__tests__/life-matrix-routing.test.ts > captureLifeMatrixToSession — 생보(LF) 화면에서만 scrapeMmlfcpMatrix() 결과를 storage.session에 저장 > 생보(LF)로 판정되어도 mmlfcp 핵심 컨테이너 3종이 전부 부재하면 NOT_MMLFCP_PAGE [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= false bojang_lists= false premium_lists= false [InsuRo Helper Trace] scrapeMmlfcpMatrix: all 3 selectors missing → returning null for legacy fallback ✓ extension/__tests__/life-matrix-routing.test.ts (27 tests) 329ms ✓ src/components/composite/__tests__/RpPresentation.test.tsx (32 tests) 642ms ✓ extension/__tests__/prd1-canary-sink-spy.test.ts (5 tests) 55ms ✓ extension/__tests__/prd2-crm-ui.test.ts (25 tests) 198ms ✓ extension/__tests__/prd2-crm-core.test.ts (55 tests) 34ms ✓ extension/__tests__/prd1-background-dispatcher.test.ts (11 tests) 1260ms ✓ extension/__tests__/prd2-crm-canary-sink-spy.test.ts (3 tests) 44ms stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 1) scrapeMmlfcpMatrix: 실 DOM에서 선택 보험사 2개(db 미선택 제외) + 담보 2개 + 고객 정보 추출 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 2) scrapeMmlfcpMatrix: company_code/coverage_cd/premium 속성을 coverages.premiums 맵으로 결합(db 미선택 제외) [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 3) scrapeMmlfcpMatrix: 보종(LF→생손보) + 상품 + 만기(20년/100세) + 플랜명 파싱 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 4) silent fail: premium_lists innerHTML 비우면 _mmlfcpPending sentinel (SPA 미렌더 케이스) [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 0 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: undefined [InsuRo Helper Trace] scrapeMmlfcpMatrix: sparse data (insurers= 3 coverages= 2 premiumCells= 0 ) → returning _mmlfcpPending sentinel [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: pending stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 5) silent fail: companyInfo 비우면 _mmlfcpPending sentinel (보험사 0건 케이스) [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 0 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: undefined [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] scrapeMmlfcpMatrix: sparse data (insurers= 0 coverages= 2 premiumCells= 6 ) → returning _mmlfcpPending sentinel [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: pending stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 6) mmlfcp 셀렉터 3개 모두 미존재 → null 반환 (scrapeOhmyManagerMatrix가 legacy fallback 진입) [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= false bojang_lists= false premium_lists= false [InsuRo Helper Trace] scrapeMmlfcpMatrix: all 3 selectors missing → returning null for legacy fallback stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 7) scrapeOhmyManagerMatrix: mmlfcp 우선 시도 → 정상 매트릭스 위임 통과(선택 보험사 2개) [InsuRo Helper Trace] enter scrapeOhmyManagerMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) [InsuRo Helper Trace] scrapeOhmyManagerMatrix: mmlfcp returned data stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 8) scrapeOhmyManagerMatrix: mmlfcp 셀렉터 0 + 라벨 기반 legacy DOM 부재 → P2-C throw (성별 자동감지 실패) [InsuRo Helper Trace] enter scrapeOhmyManagerMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= false bojang_lists= false premium_lists= false [InsuRo Helper Trace] scrapeMmlfcpMatrix: all 3 selectors missing → returning null for legacy fallback [InsuRo Helper Trace] mmlfcp returned null/_pending, entering legacy fallback [InsuRo Helper Trace] enter scrapeLegacyOhmyManagerMatrix, hostname: mmlfcp.ohmymanager.com stdout | extension/__tests__/matrix-detection.test.ts > mmlfcp matrix detection — 실 DOM fixture로 scrapeMmlfcpMatrix 호출 검증 > 10) scrapeMmlfcpMatrix: source = detectCaptureSource() 결과 (마커 없으면 'trigger') [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) stdout | extension/__tests__/matrix-detection.test.ts > task-2858: scrapeMmlfcpMatrix 보험사 선택 필터 > (a) 일부 보험사 체크해제(db) → matrix에서 제외, 선택 보험사만 포함 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) stdout | extension/__tests__/matrix-detection.test.ts > task-2858: scrapeMmlfcpMatrix 보험사 선택 필터 > (b) 체크된 보험사만 포함 — 미선택 db는 stale non-zero premium(267520)이어도 제외 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 1 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 1 coverages: 2 ) stdout | extension/__tests__/matrix-detection.test.ts > task-2858: scrapeMmlfcpMatrix 보험사 선택 필터 > (c) 전부 체크해제 → _mmlfcpNoSelection sentinel 반환(pending 아님) [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= false raw= 3 included= 0 [InsuRo Helper Trace] scrapeMmlfcpMatrix: 필터 후 선택 보험사 0개 → returning _mmlfcpNoSelection sentinel stdout | extension/__tests__/matrix-detection.test.ts > task-2858: scrapeMmlfcpMatrix 보험사 선택 필터 > (d) premiums 격자 일관성 — 제외된 db code가 어떤 coverage.premiums에도 없음 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 2 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 2 coverages: 2 ) stdout | extension/__tests__/matrix-detection.test.ts > task-2858: scrapeMmlfcpMatrix 보험사 선택 필터 > (e) 회귀: 전부 체크 상태 → 전 보험사(3개) 포함 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 3 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 3 coverages: 2 ) stdout | extension/__tests__/matrix-detection.test.ts > task-2858: scrapeMmlfcpMatrix 보험사 선택 필터 > (f) secondary 방어 — checked이지만 모든 담보 premium=0이면 제외 [InsuRo Helper Trace] enter scrapeMmlfcpMatrix, hostname: mmlfcp.ohmymanager.com [InsuRo Helper Trace] selectors: companyInfo= true bojang_lists= true premium_lists= true [InsuRo Helper Trace] insurer checkboxes: 3 coverage checkboxes: 2 premium cells: 6 [InsuRo Helper Trace] first insurer: { code: 'meritz', name: '메리츠화재' } [InsuRo Helper Trace] first coverage: { cd: 'DEATH', name: '사망', amount: 100000000, premiums: {} } [InsuRo Helper Trace] first premium cell: 12,000 [InsuRo Helper Trace] insurer filter: hasCheckboxSignal= true anyChecked= true raw= 3 included= 1 [InsuRo Helper Trace] scrapeMmlfcpMatrix returning: data (insurers: 1 coverages: 2 ) ✓ extension/__tests__/matrix-detection.test.ts (16 tests) 268ms stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > analysis_matrix 없고 per_insurer 있는 레코드 → per_insurer fallback 렌더 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > query_condition age/gender 표시, plan_id raw 미표시(+ planNameMap 주입 시 plan_name 표시), selected_coverages 테이블 렌더 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > 빈 하위필드 레코드 → 크래시 없이 렌더 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > 모든 하위필드가 null/undefined/malformed 여도 크래시 없이 렌더 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > records 빈 배열 → '상담이력이 아직 없습니다.' 표시 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) ✓ extension/__tests__/track-a-mutation.test.ts (12 tests) 107ms stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > customerNameMap 주입 시 reference_id 레코드에 고객명이 표시된다 / 없으면 생략 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > onDelete 전달 시 삭제 버튼 렌더 + 확인 후 onDelete(record.id) 호출 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) ✓ src/components/composite/__tests__/LifeThreeCriticalDiff.test.tsx (14 tests) 338ms stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > 확인 다이얼로그 취소 시 onDelete 미호출 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) stderr | src/components/composite/__tests__/ConsultationHistoryView.test.tsx > ConsultationHistoryView > onDelete 미전달 시 삭제 버튼 렌더되지 않음 Warning: An update to ConsultationHistoryView inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at ConsultationHistoryView (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/composite/ConsultationHistoryView.tsx:558:36) ✓ src/components/composite/__tests__/ConsultationHistoryView.test.tsx (17 tests) 596ms ✓ src/components/__tests__/SilsonGenerationBlock.test.tsx (10 tests) 208ms ✓ extension/__tests__/task-2859-classify-and-filter.test.ts (23 tests) 171ms ✓ extension/__tests__/task-2857-ui-upgrade.test.ts (8 tests) 260ms ✓ extension/__tests__/task-2854-phone-and-floating.test.ts (17 tests) 138ms ✓ src/components/composite/__tests__/CompositeComboResult.test.tsx (10 tests) 181ms stderr | src/components/__tests__/AuthGuard.consent.test.tsx > AuthGuard 동의 검사 우회 재현 (task-2990 RED) > [핵심 우회 재현] 세션은 있으나 privacy_consent 가 없으면 보호된 children 을 렌더하면 안 된다 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/lib/__tests__/rpComparison.test.ts (16 tests) 11ms ✓ src/components/__tests__/AuthGuard.consent.test.tsx (16 tests) 299ms stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 보험사명은 Select가 아닌 일반 Input(textbox)으로 렌더한다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > HIGH number_misread/meaning_drift 플래그가 있으면 요약 스트립에 카운트를 표시한다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stdout | src/hooks/__tests__/useAnalytics.test.ts > PostHog 미초기화 시 no-op 동작 > PostHog가 초기화되지 않으면 capture가 호출되지 않는다 [Analytics] PostHog not initialized, skipping event: page_view { page: '/home' } stdout | src/hooks/__tests__/useAnalytics.test.ts > PostHog 미초기화 시 no-op 동작 > PII가 포함된 properties도 미초기화 시 capture가 호출되지 않는다 [Analytics] PostHog not initialized, skipping event: login_completed {} stdout | src/hooks/__tests__/useAnalytics.test.ts > PostHog 미초기화 시 no-op 동작 > 미초기화 시 properties 없이 호출해도 capture가 호출되지 않는다 [Analytics] PostHog not initialized, skipping event: feature_used undefined ✓ src/hooks/__tests__/useAnalytics.test.ts (21 tests) 13ms stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > HIGH 플래그가 없으면 요약 스트립 카운트가 0이고 미확인 HIGH도 0이다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 개별 ack 전에는 승인이 disabled이고, HIGH 플래그 전부를 attest 체크하면 enabled 된다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. ✓ extension/__tests__/prd1-single-egress.test.ts (7 tests) 17ms stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 요약스트립의 미확인 HIGH 카운트는 접힌(노이즈 그룹) 플래그를 포함한 전체 HIGH 수다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stderr | src/pages/AdminFcpa.test.tsx > AdminFcpa > UI 렌더링 > 업로드 버튼에 "PDF 업로드 + AI 분석" 텍스트가 표시된다 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 교정 시작을 누르면 attest 확인이 무효화되고 승인이 다시 disabled 된다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 원문 근거(source_quote/span)가 없는 HIGH 플래그는 RED 뱃지를 표시한다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 객체형 source_file_ref(file_url)를 크래시 없이 원본 파일 링크로 렌더한다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. ✓ src/pages/AdminFcpa.test.tsx (6 tests) 379ms stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 이미지 확장자 file_url이면 img를 렌더한다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > source_file_ref가 null이면 '원문 참조 없음'을 표시한다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 플래그의 '본문에서 찾기' 클릭 시 본문 하이라이트를 표시한다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. stderr | src/components/newsletter/ReviewDetailPanel.test.tsx > ReviewDetailPanel > 본문에 없는 문구는 발췌 fallback을 표시한다 Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. ✓ src/components/newsletter/ReviewDetailPanel.test.tsx (12 tests) 1144ms ✓ extension/__tests__/track-a-microfix.test.ts (5 tests) 81ms ✓ src/components/newsletter/ValidationFlags.test.tsx (13 tests) 348ms stderr | src/components/__tests__/AdminRouteGuard.test.tsx > AdminRouteGuard (task-2996 A-33) > 비관리자는 관리자 페이지 내용을 볼 수 없고 /intro 로 리다이렉트된다 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ extension/__tests__/task-2858-per-insurer-filter.test.ts (8 tests) 85ms ✓ src/components/__tests__/AdminRouteGuard.test.tsx (25 tests) 62ms ✓ extension/__tests__/prd2-crm-single-egress.test.ts (7 tests) 15ms stderr | src/components/AuthGuard.test.tsx > AuthGuard > public exact paths > renders children for /login without auth check ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public exact paths > renders children for /reset-password without auth check Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public exact paths > renders children for /privacy without auth check (does NOT redirect to /login) Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public prefix paths > renders children for /chat/:id without auth check Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public prefix paths > renders children for /namecard/:id without auth check Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public path normalization (trailing slash / case) > renders children for /privacy/ (trailing slash) without redirecting to /login Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public path normalization (trailing slash / case) > renders children for /Privacy (mixed case) without redirecting to /login Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public path normalization (trailing slash / case) > renders children for /PRIVACY (upper case) without redirecting to /login Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public path normalization (trailing slash / case) > renders children for /privacy// (double trailing slash) without redirecting to /login Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public path normalization (trailing slash / case) > still renders children for /chat/:token after normalization change Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) stderr | src/components/AuthGuard.test.tsx > AuthGuard > public path normalization (trailing slash / case) > still renders children for /namecard/:id after normalization change Warning: An update to AuthGuard inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at AuthGuard (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/src/components/AuthGuard.tsx:313:22) at Router (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1207:17) at MemoryRouter (/home/jay/projects/InsuRo/.worktrees/task-3003-dev5/node_modules/react-router/dist/umd/react-router.development.js:1101:7) ✓ src/components/AuthGuard.test.tsx (16 tests) 84ms stderr | tests/CustomerChat.test.tsx > CustomerChat — 본인확인 fail-closed > 무효 토큰(chat_verify_and_open 이 null 반환) 이면 대화 화면이 열리지 않는다 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ extension/__tests__/task-2883-session-access-level.test.ts (4 tests) 125ms ✓ tests/image-editor-ai.test.ts (40 tests) 343ms ✓ extension/__tests__/prd2-crm-egress-gate.test.ts (8 tests) 24ms stderr | src/pages/__tests__/Privacy.test.tsx > Privacy page > renders the page title ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ tests/CustomerChat.test.tsx (5 tests) 894ms ✓ CustomerChat — 본인확인 fail-closed > 무효 토큰(chat_verify_and_open 이 null 반환) 이면 대화 화면이 열리지 않는다 380ms ✓ src/pages/__tests__/Privacy.test.tsx (23 tests) 474ms stderr | tests/smoke-routes.test.tsx > Route smoke tests — 30개 라우트 크래시 없음 검증 > renders / (Index) without crash ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ tests/smoke-routes.test.tsx (30 tests) 114ms ✓ src/components/composite/__tests__/CompositeGeneralIntro.test.tsx (15 tests) 355ms ✓ extension/__tests__/contract-golden.test.ts (7 tests) 17ms ✓ src/lib/__tests__/driveFile.test.ts (9 tests) 16ms ✓ src/components/composite/__tests__/HistoryReassignDialog.test.tsx (6 tests) 465ms ✓ src/data/__tests__/generateOptions.test.ts (23 tests) 8ms ✓ src/lib/__tests__/newDesignComparisonState.test.ts (7 tests) 8ms ✓ src/hooks/__tests__/usePlanFeatures.test.ts (26 tests) 15ms stderr | src/components/AuthForm.test.tsx > AuthForm — signup consent gate > submit button is disabled when consent is unchecked (email form) ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. stdout | src/components/AuthForm.test.tsx > AuthForm — login mode regression (no consent required) > email/password login works without consent checkbox [Analytics] PostHog not initialized, skipping event: login_completed { method: 'email' } ✓ src/components/AuthForm.test.tsx (6 tests) 386ms ✓ tests/useOnboardingRedirect.test.ts (5 tests) 33ms ✓ src/lib/__tests__/coverageCatalog.test.ts (18 tests) 11ms ✓ src/pages/__tests__/Calculators.insuranceAge.test.ts (22 tests) 12ms stderr | src/pages/__tests__/CustomerChat.gateNotice.test.tsx > CustomerChat 게이트 화면 - 설계사명 고지 렌더 회귀 > 설계사 표시명 조회 성공 시 고지 문구에 이름이 치환되어 렌더된다 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/pages/__tests__/CustomerChat.gateNotice.test.tsx (2 tests) 258ms ✓ tests/navigation.menu.task-2998.test.ts (15 tests) 6ms stderr | src/pages/__tests__/DigitalNamecard.test.tsx > DigitalNamecard page - 개인정보 고지 렌더 회귀 > 유효한 프로필 로드 후 명함이 렌더된다 (로딩 상태를 벗어남) ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/pages/__tests__/DigitalNamecard.test.tsx (4 tests) 298ms ✓ src/components/composite/__tests__/CustomerMatchDialog.test.tsx (5 tests) 269ms ✓ src/components/wiki/WikiRankingSection.test.tsx (2 tests) 64ms ✓ src/lib/__tests__/extensionBridge.test.ts (10 tests) 42ms ✓ src/hooks/__tests__/use-feature-flag.test.ts (6 tests) 31ms stderr | src/components/__tests__/PwaInstallPrompt.test.tsx > PwaInstallPrompt 경로 억제 > /privacy 에서는 배너가 뜰 조건(iOS)을 만들어도 렌더되지 않는다 (dismiss 상태와 무관) ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ tests/pdf-editor-phase2.test.ts (12 tests) 6ms ✓ src/components/__tests__/PwaInstallPrompt.test.tsx (6 tests) 71ms stderr | src/pages/__tests__/Calculators.staleAge.test.tsx > Calculators - 보험나이 계산기 stale 결과 초기화 > 유효 과거 생년월일로 계산 후 미래 생년월일로 재계산하면 이전 보험나이 결과가 사라진다 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/pages/__tests__/Calculators.staleAge.test.tsx (1 test) 417ms ✓ Calculators - 보험나이 계산기 stale 결과 초기화 > 유효 과거 생년월일로 계산 후 미래 생년월일로 재계산하면 이전 보험나이 결과가 사라진다 415ms stderr | src/components/__tests__/ContextSubMenu.admin.test.tsx > ContextSubMenu 관리자 분기 (task-2996 A-33) > 비관리자에게는 관리자 메뉴가 하나도 렌더되지 않는다 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/components/__tests__/ContextSubMenu.admin.test.tsx (5 tests) 184ms ✓ tests/auth-error-message.test.ts (12 tests) 5ms ✓ tests/cta-exposure-policy.test.ts (10 tests) 7ms ✓ src/components/composite/__tests__/HistoryGroupCard.test.tsx (5 tests) 298ms ✓ src/hooks/use-user-tokens.test.ts (11 tests) 7ms ✓ tests/plan-feature-matrix.test.ts (66 tests) 9ms ✓ src/components/newsletter/ReviewQueue.test.tsx (5 tests) 106ms ✓ src/hooks/useImageAI.regression.test.ts (5 tests) 4ms ✓ extension/__tests__/host-matching.test.ts (19 tests) 5ms ✓ src/data/__tests__/crm-demo-data.test.ts (12 tests) 7ms ✓ src/components/newsletter/UploadParseModeField.test.tsx (5 tests) 400ms ✓ src/components/composite/__tests__/CompositeCredibilityBadge.test.tsx (6 tests) 53ms ✓ src/lib/__tests__/behaviorTracker.test.ts (9 tests) 7ms ✓ extension/__tests__/contract-golden-provenance.test.ts (3 tests) 8ms ✓ src/components/PlanUpgradeDialog.test.ts (14 tests) 21ms ✓ src/pages/AdminSubscriptions.test.ts (5 tests) 4ms ✓ src/lib/__tests__/insurerType.test.ts (6 tests) 4ms ✓ src/pages/__tests__/ExternalSites.render.test.tsx (2 tests) 233ms ✓ src/config/__tests__/planFeatureMap.test.ts (5 tests) 7ms ✓ src/__tests__/markdown-rendering.test.tsx (6 tests) 57ms ✓ tests/routes.section.test.ts (4 tests) 5ms ✓ src/config/__tests__/cta-config.test.ts (5 tests) 7ms ✓ src/lib/__tests__/customerNames.test.ts (4 tests) 5ms ✓ src/data/generateOptions.test.ts (6 tests) 6ms ✓ src/hooks/__tests__/use-user-plan.test.ts (4 tests) 3ms ✓ src/lib/__tests__/planCatalog.test.ts (3 tests) 8ms ✓ src/components/composite/__tests__/CompositeCalculatorHeader.test.tsx (2 tests) 102ms ✓ src/pages/InfoKeyword.normalize.test.ts (5 tests) 5ms ✓ src/hooks/__tests__/use-cta-texts.test.ts (3 tests) 15ms ✓ src/test/example.test.ts (1 test) 2ms ✓ src/pages/__tests__/infokeyword-poll.test.ts (3 tests) 3ms Test Files 93 passed (93) Tests 1349 passed (1349) Start at 09:01:01 Duration 19.82s (transform 10.00s, setup 5.22s, collect 15.07s, tests 14.49s, environment 36.71s, prepare 7.77s)