diff --git a/.claude/docs/implementation-plan.md b/.claude/docs/implementation-plan.md index 05bc424..30ef48b 100644 --- a/.claude/docs/implementation-plan.md +++ b/.claude/docs/implementation-plan.md @@ -84,7 +84,6 @@ norii의 구현 순서·**구현 상태**와 열린 결정의 단일 출처다. - **커버리지 임계값** — 도입 시점·수치 (→ [테스트 전략](testing.md)) - **번들 크기 임계값** — 앱 번들 15MB 예산은 확정. 프론트엔드 dist 하드 임계값 도입 여부가 열림 (→ [플랫폼 전략](platform-strategy.md)) - **oxfmt 1.0 재확인** — 베타(0.x) → 1.0 도달 시 안정성 재점검 (→ [코드 품질](code-quality.md)) -- **playwright 재상향** — 로컬 macOS 13이 WebKit을 지원하는 마지막 버전으로 다운핀 — macOS 14+ 업그레이드 시 최신으로 복귀 (→ [기술 스택](tech-stack.md#코드-품질)) - **E2E 도구 재확인** — tauri-plugin-webdriver pre-1.0 → 1.0 도달 시 재점검(도입 자체는 확정, 재점검만 열림) (→ [테스트 전략](testing.md)) - **tauri-specta 2.0** — rc 핀 → 정식 2.0 도달 시 재확인 (→ [기술 스택](tech-stack.md)) - **i18n 도입** — 현재 미도입(UI 문자열은 shared/config 상수) — 다국어 필요 시 (→ [프론트엔드 아키텍처](frontend-architecture.md)) diff --git a/.claude/docs/tech-stack.md b/.claude/docs/tech-stack.md index 756548d..00e55e7 100644 --- a/.claude/docs/tech-stack.md +++ b/.claude/docs/tech-stack.md @@ -90,7 +90,7 @@ | 경로 별칭 | vite-tsconfig-paths (`vite-tsconfig-paths`) | 6.1.1 | tsconfig `paths`(@app~@shared)를 Vite에 반영 | | 타입 체크 | TypeScript (`tsc --noEmit`) | 6.0.3 | (애플리케이션 스택과 동일) | | JS/TS 테스트 | Vitest (`vitest`) | 4.1.9 | Vite 8 네이티브 | -| 컴포넌트/렌더 환경 | `@vitest/browser-playwright` + `playwright`(WebKit) | browser-playwright 4.1.9 · playwright **1.57.0 (다운핀)** | Vitest 4부터 브라우저 프로바이더는 별도 패키지(`@vitest/browser`에서 분리). playwright은 로컬 macOS 13이 WebKit을 지원하는 마지막 버전으로 핀(1.58+ 미지원, frozen 빌드) — OS 업그레이드 시 재상향(→ [열린 결정](implementation-plan.md#열린-결정-open-decisions)). WebKit 기반이나 시스템 WKWebView와 동일하진 않음. happy-dom 대체 (→ [테스트 전략](testing.md#레이어별--무엇을-어디서-테스트하나)) | +| 컴포넌트/렌더 환경 | `@vitest/browser-playwright` + `playwright`(WebKit) | browser-playwright 4.1.9 · playwright 1.62.1 | Vitest 4부터 브라우저 프로바이더는 별도 패키지(`@vitest/browser`에서 분리). WebKit 기반이나 시스템 WKWebView와 동일하진 않음. happy-dom 대체 (→ [테스트 전략](testing.md#레이어별--무엇을-어디서-테스트하나)) | | 컴포넌트 쿼리 | `@testing-library/react` | 16.3.2 | 역할·텍스트 기반 쿼리 | | 컴포넌트 쿼리 DOM | `@testing-library/dom` | 10.4.1 | @testing-library/react 16의 peer — 명시 설치 | | 실앱 E2E | `tauri-plugin-webdriver` (Choochmeque · MIT) | **0.2.1 · 2026-02 (pre-1.0)** | 임베디드 W3C WebDriver — macOS WKWebView 지원. 대안: 공식 임베디드 provider `@wdio/tauri-service`·CrabNebula(상용). **운영 동일 E2E** | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e5ed497..045ae0d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,8 +14,8 @@ concurrency: jobs: check: - # mac 러너 — 운영 1순위 플랫폼과 같은 계열이고, 브라우저 테스트(WebKit)가 실제 엔진으로 돈다. - runs-on: macos-14 + # mac 러너 - 브라우저 테스트(WebKit)가 실제 엔진으로 돈다. + runs-on: macos-15 steps: - uses: actions/checkout@v4 diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 6f33fd4..ad0211e 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -37,7 +37,7 @@ "@types/react-dom": "19.2.3", "@vitejs/plugin-react": "6.0.3", "@vitest/browser-playwright": "4.1.9", - "playwright": "1.57.0", + "playwright": "1.62.1", "typescript": "6.0.3", "vite": "8.1.3", "vite-tsconfig-paths": "6.1.1", diff --git a/packages/markdown/package.json b/packages/markdown/package.json index 989b440..6988d69 100644 --- a/packages/markdown/package.json +++ b/packages/markdown/package.json @@ -22,7 +22,7 @@ "@types/markdown-it": "14.1.2", "@types/markdown-it-footnote": "3.0.4", "@vitest/browser-playwright": "4.1.9", - "playwright": "1.57.0", + "playwright": "1.62.1", "typescript": "6.0.3", "vitest": "4.1.9" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a270c94..7f4ecb9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,10 +101,10 @@ importers: version: 6.0.3(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1)) '@vitest/browser-playwright': specifier: 4.1.9 - version: 4.1.9(playwright@1.57.0)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9) + version: 4.1.9(playwright@1.62.1)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9) playwright: - specifier: 1.57.0 - version: 1.57.0 + specifier: 1.62.1 + version: 1.62.1 typescript: specifier: 6.0.3 version: 6.0.3 @@ -178,10 +178,10 @@ importers: version: 3.0.4 '@vitest/browser-playwright': specifier: 4.1.9 - version: 4.1.9(playwright@1.57.0)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9) + version: 4.1.9(playwright@1.62.1)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9) playwright: - specifier: 1.57.0 - version: 1.57.0 + specifier: 1.62.1 + version: 1.62.1 typescript: specifier: 6.0.3 version: 6.0.3 @@ -3325,14 +3325,14 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.57.0: - resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} - engines: {node: '>=18'} + playwright-core@1.62.1: + resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + engines: {node: '>=20'} hasBin: true - playwright@1.57.0: - resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==} - engines: {node: '>=18'} + playwright@1.62.1: + resolution: {integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==} + engines: {node: '>=20'} hasBin: true pluralize@8.0.0: @@ -5530,11 +5530,11 @@ snapshots: '@rolldown/pluginutils': 1.0.1 vite: 8.1.3(@types/node@26.1.0)(jiti@2.6.1) - '@vitest/browser-playwright@4.1.9(playwright@1.57.0)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9)': + '@vitest/browser-playwright@4.1.9(playwright@1.62.1)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9)': dependencies: '@vitest/browser': 4.1.9(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9) '@vitest/mocker': 4.1.9(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1)) - playwright: 1.57.0 + playwright: 1.62.1 tinyrainbow: 3.1.0 vitest: 4.1.9(@types/node@26.1.0)(@vitest/browser-playwright@4.1.9)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1)) transitivePeerDependencies: @@ -7333,11 +7333,11 @@ snapshots: exsolve: 1.1.0 pathe: 2.0.3 - playwright-core@1.57.0: {} + playwright-core@1.62.1: {} - playwright@1.57.0: + playwright@1.62.1: dependencies: - playwright-core: 1.57.0 + playwright-core: 1.62.1 optionalDependencies: fsevents: 2.3.2 @@ -7978,7 +7978,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.1.0 - '@vitest/browser-playwright': 4.1.9(playwright@1.57.0)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9) + '@vitest/browser-playwright': 4.1.9(playwright@1.62.1)(vite@8.1.3(@types/node@26.1.0)(jiti@2.6.1))(vitest@4.1.9) transitivePeerDependencies: - msw