Production readiness
opt-chat을 배포 직전에 100점 기준으로 확인하는 install, browser, streaming, release 운영 게이트입니다.
reopt designUpdated
1. 릴리즈 게이트
opt-chat의 코드·CI가 통과해도 실제 배포 확신은 소비자 앱 설치, 브라우저 상호작용, 느린 네트워크 조건, 운영 기록까지 닫혀야 올라갑니다. 아래 네 항목을 모두 통과하면 production-ready gate를 닫습니다.
| Gate | 필수 증거 | 잡아내는 리스크 |
|---|---|---|
| Consumer install smoke | fresh Next/Vite 앱에서 root import, ./flow, styles.css import, production build 통과 | workspace:* range 누락, optional peer 정적 import, dist export 누락 |
| Browser matrix | desktop/mobile에서 keyboard submit, attachment-only submit, approval approve/deny, tool/source 렌더 통과 | 버튼 중복 locator, viewport overflow, focus/submit 회귀 |
| Streaming soak | 느린 file part 변환 중 단일 submit, abort/retry 후 loading reset, tool output/source-document 보존 | 중복 메시지, stale loading, source 누락 |
| Release ops | CHANGELOG, private publish snapshot, rollback note, 커밋 해시가 한 묶음으로 남음 | 재현 불가능한 수동 publish, 롤백 경로 부재 |
2. Consumer install smoke
`npm pack` 또는 publish snapshot이 통과해도 fresh app install smoke는 별도로 필요합니다. 루트 import와 `@reopt-ai/opt-chat/flow` subpath가 optional peer 없이도 안전한지 확인합니다.
# 1. opt-chat dist와 publish snapshot 검증
bun run --filter @reopt-ai/opt-chat build
node scripts/validate-private-publish.mjs
# 2. fresh consumer app에서 tarball install smoke
TMP_DIR=$(mktemp -d)
npm create vite@latest "$TMP_DIR/opt-chat-smoke" -- --template react-ts
cd "$TMP_DIR/opt-chat-smoke"
npm install
npm install /path/to/reopt-design/packages/opt-chat/reopt-ai-opt-chat-*.tgz
npm run build3. Browser matrix
Explore 예제는 릴리즈 스모크 픽스처입니다. `starter-conversation`, `approval-flow`, `tool-transcript`, `release-soak`을 통해 키보드 제출, 첨부, 승인/거부, tool/source 렌더링을 확인합니다.
cd apps/web
node $PWD/../../node_modules/.bin/playwright test \
e2e/opt-chat.spec.ts \
e2e/ai-stream-integrations.spec.ts4. Streaming soak
실제 AI stream은 느린 파일 변환, abort, retry, tool output, source parts가 겹칩니다. `/explore/opt-chat/release-soak`은 이 조건을 결정적인 fixture로 보여주며, E2E에서는 핵심 텍스트와 상태 전환을 검증합니다.
5. Release ops
릴리즈 전에는 아래 명령이 모두 통과해야 합니다. GitHub Packages publish는 패키지명, 버전 bump, registry 대상이 명시적으로 승인된 뒤에만 실행합니다.
bun run --filter @reopt-ai/opt-chat lint
bun run --filter @reopt-ai/opt-chat typecheck
bun run --filter @reopt-ai/opt-chat test
bun run --filter @reopt-ai/opt-chat build
node scripts/validate-private-publish.mjs
bun run lint
bun run typecheck
bun run test
bun run build