Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Frontend checks

on:
pull_request:
push:
branches: [main]

permissions:
contents: read

concurrency:
group: frontend-checks-${{ github.ref }}
cancel-in-progress: true

jobs:
check:
runs-on: ubuntu-latest
timeout-minutes: 15
defaults:
run:
working-directory: swproject
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: npm
cache-dependency-path: swproject/package-lock.json
- run: npm ci
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
- run: npm run lint
- run: npm test
- run: npm run build
- run: npm run electron:build-main
15 changes: 15 additions & 0 deletions docs/BASELINE.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,18 @@
- PostCSS 설정의 모듈 형식 경고와 Browserslist 데이터 갱신 안내가 있습니다.

현재 코드가 실행 가능한지에 대한 전체 판정은 아직 하지 않았습니다. 다음 단계는 핵심 통합 시나리오를 실행하고 재현 가능한 테스트를 추가하는 것입니다. 문서 정리 PR에서는 동작 코드·의존성·배포 설정을 변경하지 않습니다.

## 후속 검증: 인증·방송 회귀 테스트

2026-10-08, macOS / Node 25.9.0 / npm 11.12.1에서 확인했습니다.

- Vitest 9개 테스트 통과: 동시 인증 만료, 갱신 실패, 큐 요청의 재시도 제한, 로그인 실패, refresh token 부재, 방송 종료 성공·404·500, 종료 훅 언마운트 시 세션 유지.
- 기존 구현에서 인증 테스트 2개가 실패하는 것을 확인하고 재시도 표시와 공개 인증 요청 제외 조건을 수정했습니다.
- 프론트 빌드·Electron 컴파일 성공, 린트 오류 0 / 기존 경고 7.
- 이 테스트는 전송 경계를 대체한 단위·훅 테스트입니다. WebSocket·TTS 자원 해제와 실제 OBS·서버 연결, 전체 페이지 이동 통합은 미검증입니다.
- PR 자동 검사 워크플로를 추가했습니다. 위의 최초 기준선은 과거 기록이며 현재 테스트 명령은 `npm test`입니다.


## 브라우저 UI 확인 (2026-10-08)

로그인 전 입력 검증, 회원가입 이동, 미로그인 접근 가드 및 새로고침을 로컬 브라우저에서 확인했습니다. 실제 서버 인증과 Electron 장치 연동은 미검증입니다. 재현 절차와 범위는 [BROWSER_QA.md](BROWSER_QA.md)를 참고하세요.
41 changes: 41 additions & 0 deletions docs/BROWSER_QA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# 브라우저 화면 검증 결과

- 검증일: 2026-10-08
- 대상: Live Buddy 0.1.20, `test/auth-broadcast-regressions` 브랜치의 2ef7895 코드
- 환경: macOS, Vite 개발 서버, Codex 내장 브라우저
- 주소: `http://127.0.0.1:5173`
- 범위: 로그인 전 화면. 실제 서버 로그인·회원가입·방송은 수행하지 않았습니다.

## 확인 결과

| 시나리오 | 관찰 결과 |
| --- | --- |
| 첫 진입 | 로그인 화면 표시, 이메일 필드 자동 포커스 |
| 빈 로그인 폼 제출 | 이메일 형식 및 비밀번호 8자 이상 안내 표시 |
| 비밀번호 보기 | 버튼이 숨기기 상태로 전환되고 입력 유지 |
| 회원가입 링크 | 회원가입 화면 이동, 이름 필드 자동 포커스 |
| 비밀번호 확인 불일치 | 불일치 안내 표시, 회원가입 화면 유지 |
| 미로그인 대시보드 직접 접근 | 로그인 화면으로 이동 |
| 로그인 화면 새로고침 | 로그인 화면 정상 표시 |
| 브라우저 오류 로그 확인 | 수집된 error 로그 없음 |

이 범위에서 재현된 기능 오류는 없었습니다. Google 로그인·회원가입 버튼은 준비 중으로 비활성화되어 있었으며, 해당 기능의 완료를 의미하지 않습니다. 비밀번호 표시는 상태 전환을 확인했으며 보안 기능 전반을 감사한 것은 아닙니다.

## 재현 순서

1. `swproject`에서 `npm run dev -- --host 127.0.0.1` 실행.
2. 저장된 로그인 정보가 없는 브라우저에서 위 주소 열기.
3. 빈 상태에서 로그인 클릭 후 두 입력 안내 확인.
4. 테스트용 비밀번호를 입력하고 보기 버튼 전환 확인.
5. 회원가입 링크 클릭 후 테스트 이름·이메일과 서로 다른 비밀번호 입력.
6. 가입하기 클릭 후 비밀번호 불일치 안내 확인. 실제 계정은 생성하지 않음.
7. `/#/dashboard`로 직접 이동하여 `/#/login` 복귀 확인.
8. 새로고침 후 화면 및 오류 로그 확인.

## 다음 통합 검증에 필요한 조건

- 사용 가능한 개발 백엔드와 테스트 계정: 정상 로그인, 캐릭터 조회·수정, 로그인 이후 페이지 이동
- Electron 실행과 마이크 권한: 음성 입력, 방송 종료 후 장치·연결 정리
- OBS 테스트 환경: 캐릭터·오버레이 동기화

이번 결과는 브라우저 UI 확인이며 Electron 설치 파일, 실서버, 마이크, OBS 동작을 보장하지 않습니다. 테스트 계정이나 운영 계정의 비밀번호는 문서에 기록하지 않습니다.
8 changes: 6 additions & 2 deletions docs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ npm run electron:preview # STT 준비 + 빌드 후 로컬 실행
2. 백엔드 담당자와 요청·응답 타입, 오류 코드, WebSocket 이벤트를 합의합니다. 이전 API 계획서를 현재 계약으로 사용하지 않습니다.
3. 기존 `features/<기능>/api`, `hooks`, `components` 경계를 먼저 활용합니다. 단순한 UI에 새 전역 store를 만들 필요는 없습니다.
4. 화면 전용 상태는 컴포넌트에 두고, 공유가 필요한 상태만 store로 올립니다. 저장할 설정과 방송 종료 시 정리할 데이터를 구분합니다.
5. 중요한 동작의 검증을 추가하고 위 빌드·린트 명령을 실행합니다. 테스트 도입 전에는 아래 수동 시나리오도 기록합니다.
5. 중요한 동작의 검증을 추가하고 위 빌드·린트 명령을 실행합니다. 아래 수동 통합 시나리오도 별도로 기록합니다.
6. 기능 범위가 바뀌면 README·아키텍처를 갱신하고, PR에 변경 이유·확인 결과·남은 제약을 적습니다.

## 수동 통합 확인
Expand All @@ -82,7 +82,7 @@ npm run electron:preview # STT 준비 + 빌드 후 로컬 실행
| 5 | 결과물 공개 | 실제 화면 캡처와 시연, 필요 시 명시적인 샘플 데이터 웹 모드 |
| 6 | 기능 확장 | 한 기능씩 계약·검증·문서까지 완결 |

코드 이동과 기능 변경을 같은 PR에서 크게 섞지 않습니다. 7개 기존 Hook 경고의 실제 의존성을 확인한 뒤 처리하고, 경고를 일괄 비활성화하지 않습니다. 자동 테스트 명령은 아직 없습니다.
코드 이동과 기능 변경을 같은 PR에서 크게 섞지 않습니다. 7개 기존 Hook 경고의 실제 의존성을 확인한 뒤 처리하고, 경고를 일괄 비활성화하지 않습니다. 자동 테스트는 `npm test`, 개발 중 반복 실행은 `npm run test:watch`를 사용합니다. 인증 실패와 방송 종료 훅을 격리해 검증하며 실제 서버·오디오·OBS 통합 테스트를 대체하지 않습니다.

## 개발 규칙

Expand All @@ -99,3 +99,7 @@ npm run electron:preview # STT 준비 + 빌드 후 로컬 실행
## 개인 개발 도구 설정

개인 도구의 안내 파일은 공개 문서와 별도로 로컬에서 관리합니다. 이 체크아웃에서만 추적을 막으려면 `.git/info/exclude`를 사용합니다. 이미 Git이 추적하는 파일은 제외 규칙만 추가해도 제거되지 않으므로, 먼저 삭제 변경을 커밋해야 합니다.

## PR 자동 검사

`Frontend checks`는 PR과 main push에서 Node 20 환경의 설치·린트·테스트·프론트 빌드·Electron 컴파일을 실행합니다. 기존 린트 경고 7개는 오류로 승격하지 않았습니다. 실제 데스크톱 실행과 STT 모델 패키징은 배포·통합 확인에서 다룹니다.
8 changes: 8 additions & 0 deletions docs/TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,11 @@ Python 패키지·모델·VC++ 런타임 등 개발 환경과 설치본의 차
## 다음 진단 대상

[검증 기준선](BASELINE.md)에 Hook 경고 7개와 번들 경고를 기록했습니다. 경고 제거 전에 상태 변화·effect 재실행 의도를 확인하고, 변경 후 방송·캐릭터 시나리오를 검증합니다.

## 인증 재시도 회귀 테스트에서 수정한 사례

동시 401 처리에서 큐에 들어간 요청에는 재시도 표시가 없어, 갱신 후 다시 401을 받으면 추가 갱신이 발생했습니다. 큐 진입 전에 재시도 표시를 적용해 각 요청의 재시도를 한 번으로 제한했습니다.

로그인 실패에도 저장된 세션의 refresh 요청이 발생하던 경로는 공개 인증 엔드포인트를 갱신 대상에서 제외해 수정했습니다. 두 경우 모두 수정 전 실패·수정 후 통과하는 테스트를 추가했습니다.

`npm test`는 Axios 전송 경계와 방송 API를 대체해 동작을 재현합니다. 네트워크·브라우저 저장소·방송 장치의 실제 동작을 검증하는 테스트는 아닙니다.
Loading
Loading