|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"$schema": "evidence/v1",
|
||||
"id": "public-domain-readonly-browser-2026-08-31",
|
||||
"title": "public 도메인 읽기 전용 브라우저 폐루프 실측 (production, 이 PC와 분리 확인)",
|
||||
"date": "2026-08-31",
|
||||
"operator": "agent (read-only, production DB 미접촉)",
|
||||
"scope": "읽기 전용. 사용자 계정 로그인/회기·턴 생성(production DB mutation) 없음. 배포·설정 변경 없음.",
|
||||
"targets": {
|
||||
"public_web": "https://vignette.chanpaca.net/login",
|
||||
"public_api": "https://api-vignette.chanpaca.net"
|
||||
},
|
||||
"method": "Playwright 1.61.1 chromium (desktop 1440x900 / mobile 390x844) + curl/HTTP 실측",
|
||||
"evidence": {
|
||||
"playingwright_public_login_spec": {
|
||||
"spec": "e2e/auth.spec.ts :: keeps the public login screen on real Google OAuth only",
|
||||
"result": "1 passed (9.1s)",
|
||||
"verified": [
|
||||
"GET api-vignette.chanpaca.net/auth/config -> google_oauth_configured=true, dev_login_enabled=false, allowed_email_domains=[]",
|
||||
"vignette.chanpaca.net/login -> Google 로그인 버튼(.lg-obtn) 1개, dev 로그인 요소 0, 'Google OAuth is not configured' 없음",
|
||||
"Google 버튼 클릭 -> accounts.google.com 이동, client_id 포함",
|
||||
"redirect_uri=https%3A%2F%2Fapi-vignette.chanpaca.net%2Fauth%2Fcallback"
|
||||
]
|
||||
},
|
||||
"production_render_probe": {
|
||||
"desktop_mobile_http": [200, 200],
|
||||
"has_google_button": true,
|
||||
"title": "Vignette · 상담 시뮬레이션",
|
||||
"heading": "실제 계정으로 들어가고, 실제 회기만 남깁니다.",
|
||||
"has_logo": true,
|
||||
"has_error_text_fallback": false,
|
||||
"console_page_errors_beyond_expected_auth": [],
|
||||
"only_401": {
|
||||
"request": "GET https://api-vignette.chanpaca.net/auth/me",
|
||||
"reason": "비로그인 방문자 조회로 반환되는 정상 인증 경계 401 (로그인 페이지가 미인증 상태를 판별해 Google 버튼 표시)"
|
||||
}
|
||||
},
|
||||
"public_api_health_x3": [
|
||||
"200 status=ok environment=prod db=true engine=true engine_mode=openai"
|
||||
],
|
||||
"serving_identity": {
|
||||
"dns": ["104.21.33.204", "172.67.149.131", "2606:4700:3030::6815:21cc", "2606:4700:3030::ac43:9583"],
|
||||
"header_server": "cloudflare",
|
||||
"cf_ray": "a33aa06b4c5ee9e1-LAX",
|
||||
"conclusion": "이 PC가 아닌 별도 호스트(Cloudflare 뒤)가 서빙. 이 PC에는 cloudflared 프로세스 없음(확인) -> 이 PC와 정식 분리 운영"
|
||||
},
|
||||
"this_pc_state": {
|
||||
"cloudflared_process": "absent",
|
||||
"local_api_8001_listener": "absent",
|
||||
"scheduledTasks": { "VignettePublicRuntime": "Disabled", "VignettePublicRuntimeWatchdog": "Disabled" },
|
||||
"containers": "vignette-dev-db (up, 55432)",
|
||||
"note": "개발 워크스테이션 (과거 자택 public 호스트 경로의 잔여 상태). 이 PC 로컬 상태는 public 도메인 장애가 아님."
|
||||
}
|
||||
},
|
||||
"conclusion": {
|
||||
"closed_readonly": "public 도메인(production)은 별도 호스트에서 정상 서빙 중. 실브라우저 로그인 화면·Google OAuth redirect_uri·개발 로그인 차단이 읽기 전용으로 실증됨. 이 PC와 정식 분리 운영이 실측으로 확인됨.",
|
||||
"open_gate": "실제 Google 계정 로그인 -> 인증 callback -> 관리자/P20 실제 회기·턴 생성(production DB mutation)은 사용자(소유자) 승인과 계정 세션(storageState)이 필요해 여전히 열린 게이트. production DB mutation 없이는 read-only로는 증명 불가."
|
||||
},
|
||||
"screen_captures": [
|
||||
"apps/web/node_modules/.tmp/public-login-desktop.png",
|
||||
"apps/web/node_modules/.tmp/public-login-mobile.png"
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 709 KiB After Width: | Height: | Size: 403 KiB |
|
Before Width: | Height: | Size: 391 KiB After Width: | Height: | Size: 655 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 760 KiB |
|
After Width: | Height: | Size: 555 KiB |
|
Before Width: | Height: | Size: 912 KiB After Width: | Height: | Size: 483 KiB |
|
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 873 KiB |
|
After Width: | Height: | Size: 374 KiB |
|
After Width: | Height: | Size: 442 KiB |
|
Before Width: | Height: | Size: 527 KiB After Width: | Height: | Size: 362 KiB |
|
Before Width: | Height: | Size: 810 KiB After Width: | Height: | Size: 696 KiB |
|
After Width: | Height: | Size: 531 KiB |
|
Before Width: | Height: | Size: 982 KiB After Width: | Height: | Size: 574 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 944 KiB |
|
After Width: | Height: | Size: 297 KiB |
|
Before Width: | Height: | Size: 374 KiB After Width: | Height: | Size: 286 KiB |
|
Before Width: | Height: | Size: 631 KiB After Width: | Height: | Size: 396 KiB |