{ "schema": "vignette.nas-relay-recovery.v1", "captured_at": "2026-08-18T15:48:00+09:00", "owner_approval": "2026-08-18 소유자 지시로 남은 작업 3순위로 'NAS 엔진 릴레이 복구(start-nas-preview-engine.ps1 -CheckOnly → 실제 1회 시작 → NAS health/auth/OpenAPI 재검증)'를 명시해 마무리를 지시함. LAN 노출(192.168.0.223:9100)은 중단 세션에서 명시 승인 완료. 방화벽 규칙 추가(관리자 승격)는 실행 시점 소유자 UAC 승인.", "checkonly": { "status": "preflight_passed", "mutation": false, "receipt_path": "D:\\workspace\\nas-relay-state\\receipt-checkonly-20260818.json", "binding": { "source_commit": "4771b97c3a9a4c52349f8a6a55a08a3ce0a5c880", "source_tree": "286723de877ed950c36656d5598fdf2d57c861fa", "launcher_sha256": "492d8b5c4ba21d1463c9a937ac2949f0a6d3725f6f37786f14dd5aac419fb27c", "python_sha256": "5f7b89a612c9b8af1d6456cdfcd1dbe5ca630849e79aebced9bee9a6694952ec", "env_sha256": "312afcb50c11be16d90fa6ad79c0b416f9d65c4877c06aeafd436260f18c18ec", "listen_address": "192.168.0.223", "port": 9100, "consumer_engine_url": "http://192.168.0.223:9100", "secret_value_emitted": false } }, "nas_consumer_contract_observed": { "engine_url": "http://192.168.0.223:9100", "engine_mode": "claude_cli", "source": "docker inspect vignette-preview-20260807 api 컨테이너 환경(2026-08-18 실측)" }, "actual_start": { "status": "passed", "started_at": "2026-08-18T06:25:35Z (15:25:35 KST)", "receipt_path": "D:\\workspace\\nas-relay-state\\receipt-actual-20260818.json", "pid": 65328, "checks": { "source_detached_clean": true, "port_previously_unused": true, "listener_owner_matches": true, "liveness_ok": true, "generation_ready": true }, "notes": "엔진 구독 한도(15:00 KST) 리셋 직후 15:05 자동화가 실행했다. ready?force=true 실생 1회 통과." }, "firewall_fix": { "problem": "NAS→릴레이 TCP 연결 타임아웃(transport error). 릴레이의 Python311 인바운드 허용 규칙이 Public 프로필뿐이었고 이더넷 네트워크는 Private.", "fix": "인바운드 TCP 9100 허용 규칙 추가 — LocalAddress 192.168.0.223, RemoteAddress 192.168.0.0/24, Profile Private(소유자 UAC 승인). 규칙명 'Vignette NAS preview engine relay (9100 LAN)'." }, "verification": { "local_relay_health": "http://192.168.0.223:9100/health → {ok:true, engine:claude_cli}", "nas_origin_health_3_consecutive": "http://100.116.83.60:8088/api/health → status=ok, db=true, engine=true, engine_detail=OK (3/3)", "auth_me_status": 401, "openapi_paths": 126, "nas_to_relay_probe_from_nas": "SSH YunChan@100.116.83.60 → curl 192.168.0.223:9100/health → ok:true" }, "remaining_for_full_current_green": "201차 계약의 actual-origin 실제 회기 turn→review smoke는 아직 실행 전 — health/auth/OpenAPI 회복만으로 current GREEN 표기하지 않는다.", "restarts_and_migration_2026_08_18_evening": { "incident_chain": [ "워크스페이스 대청소 사건: apps/web/node_modules 소실, 구 런타임 워크트리(4771b97c/6369f294 등) 삭제, %LOCALAPPDATA%\\Temp 정리 — 이 사건으로 릴레이(워크스페이스가 사라짐)와 whisper 사이드카 로그가 사망", "Docker Desktop 사망(공개 DB 포함) → 재기동 + vignette-dev-db 복구(healthy)", "whisper 사이드카(9882)가 Windows 제외 포트 범위(9791-9890, WinNAT 동적)에 걸려 바인딩 거부 → winnat 재시작 + 9882 단일 고정 예약(UAC)", "DHCP가 호스트 LAN IP를 192.168.0.223 → 224로 회수/재할당 — NAS 계약 주소 상실" ], "migration": { "relay_root": "D:\\workspace\u000bignette-public-runtime-bf5f7352 (구 루트 삭제로 현행 승격 루트로 재핀)", "listen": "192.168.0.224:9100 (방화벽 규칙 224로 재발행, LAN 서브넷 한정)", "receipts": [ "receipt-actual-20260818-r3.json (바인딩 bf5f7352/c39f917b, launcher·python·env SHA 동일 핀)" ], "nas_side": "프로젝트 .env(0600)를 실행 컨테이너 env 전량 추출로 재구성해 ENGINE_URL=http://192.168.0.224:9100 적용, api 컨테이너만 재생성(-p vignette-preview-20260807)", "engine_provider": "엔진 예산 한도(Reached maximum budget $0.5 — 클로드 구독)가 재발해 ENGINE_MODE=agy_cli(gemini)로 전환. 소유자가 공개는 이미 관리자 UI로 agy 전환 완료 상태였음" }, "verification_after_migration": { "nas_origin_health_3_consecutive": "status=ok, db=true, engine=true, engine_mode=agy_cli (3/3)", "auth_me_status": 401, "openapi_paths": 126, "actual_origin_turn_to_review_smoke": "dev-login→온보딩→회기 생성→agy 턴 2개(33.9s/32.4s)→종료 200→review 200(서연 P1 실데이터, session 4d02bdfe-e2bf-41d5-9b28-7808d6b108a6) — 201차 current GREEN 조건 전부 충족", "note": "NAS 구 릴리스(2026-08-09) 코드에서 종료 직후 상세 조회가 active로 보이는 비동기 지연 관찰(리뷰는 정상 200)" }, "recommendations": [ "공유기에서 호스트 MAC(D8-BB-C1-A2-3C-5D)에 192.168.0.224 DHCP 고정 예약 — 재발 방지(소유자 조치)", "Docker Desktop VM 클럭이 호스트보다 ~4일 선행(DB 타임스탬프 오염) — wsl --shutdown 후 재기동으로 동기화 필요(소유자 승인 대기)", "NAS 로컬 agy 설치가 릴레이·노트북 의존을 완전히 제거하는 근본 해법" ] } }