NAS current GREEN 달성과 심야 연쇄 복구 증거
- 대청소 사건·Docker 사망·WinNAT 포트 예약·DHCP IP 회수 연쇄 복구 기록
- 릴레이 bf5f7352 재핀(r3) + 192.168.0.224 계약 이전(방화벽·NAS .env 재구성)
- NAS agy_cli 전환으로 health 3/3 engine true + actual-origin turn→review smoke 통과
— 201차 current GREEN 조건 전부 충족, TODO 항목 종결
- 직렬 게이트 잔여: 동맹 포인터 타임아웃 결정 재현(3/3)·스윕 협폭 결함과 함께 조사 이관 기록
- 대시보드 213차 노트, 수집량 1111 갱신(체커 요구), SSOT 59 PASS
This commit is contained in:
parent
70d7cb34a3
commit
0a00ff245a
6 changed files with 100 additions and 61 deletions
|
|
@ -1,52 +1,81 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
"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
|
||||
},
|
||||
"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 실측)"
|
||||
"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 전환 완료 상태였음"
|
||||
},
|
||||
"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회 통과."
|
||||
"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)"
|
||||
},
|
||||
"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 표기하지 않는다."
|
||||
"recommendations": [
|
||||
"공유기에서 호스트 MAC(D8-BB-C1-A2-3C-5D)에 192.168.0.224 DHCP 고정 예약 — 재발 방지(소유자 조치)",
|
||||
"Docker Desktop VM 클럭이 호스트보다 ~4일 선행(DB 타임스탬프 오염) — wsl --shutdown 후 재기동으로 동기화 필요(소유자 승인 대기)",
|
||||
"NAS 로컬 agy 설치가 릴레이·노트북 의존을 완전히 제거하는 근본 해법"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,8 +54,9 @@
|
|||
"serial_single_run_gate_followup": {
|
||||
"initial_run": "2026-08-18 11:10-11:22 KST npm run e2e:single-run: 52 passed / 5 failed / 4 skipped (12.1m)",
|
||||
"triage_and_rerun": "① breakpoint-sweep '실기기 대표 폭 누락'은 widthsFor 솎아내기가 DEVICE_WIDTHS 를 boundary 중복이라고 제외 후 상한 솎기로 탈락시키는 테스트 결함(제품 아님) — keep 시드를 전체 DEVICE_WIDTHS 로 교정하고 3연폭 예외 조건을 솎아내기 발생 여부 기준으로 고침 → focused 1 passed. ② kb-source-packs 500은 게이트웨이 수정 커밋(4771b97c) 이전에 기동한 낡은 dev API(:8000) 프로세스가 원인 — 재기동 후 focused 1 passed. ③ voice-success 2 tests 재실행 2 passed(일시적 환경). ④ session-persistence 교사 재평가 2건은 엔진 실생 턴 필요 — Claude 구독 세션 한도('resets 3pm Asia/Seoul')로 엔진 가용 게이트가 skip 처리.",
|
||||
"pending": "직렬 게이트 14실패 해소 전까지 종결 아님 — (1) 스윕이 보고한 settings/learner 협폭 레이아웃 결함 91건 제품 수정, (2) 스택·데이터 드리프트 의존 실패군 원인 규명, (3) 교사 재평가 2건 재실행이 남아 있다(가짜 증거 금지 원칙으로 이 파일의 pending은 유지).",
|
||||
"rerun_2026_08_18_15:05": "엔진 한도 리셋 직후 재실행: 31 passed / 14 failed / 4 skipped / 12 did-not-run(직렬 연쇄 중단). 교사 재평가 2건은 파일 내 선행 실패로 실행하지 못했다. 삼각화: (a) breakpoint-sweep 3종은 파서 수정 후 처음 실행된 실측 스윕이 settings/learner 320px 등에서 레이아웃 결함 91건을 보고 — 아침 실행에서는 파서 테스트 실패로 스윕이 연쇄 중단돼 실행되지 않았던 것. (b) session-mvp strict-mode 위반('코칭' 버튼 3개), session-persistence·layout-visual-gate '동맹 기준 포인터 선택' 타임아웃, voice 2종 실패는 아침 11:10 동일 웹 코드(cf899b7f)에서 통과했으므로 웹 커밋이 아닌 스택·데이터 드리프트(9099 게이트웨이 6369f294 교체, dev DB 누적 데이터)가 의심되며 원인 조사 진행 중. 게이트 엔진 경로 자체는 정상(클로드 일회/세션 턴 실측 응답)."
|
||||
"pending": "① '동맹 기준 포인터 선택' 타임아웃의 근본 원인(agy 스트리밍 케이던스 vs 체크포인트 헬퍼, 또는 제품 회귀) 규명 ② breakpoint-sweep이 보고한 settings/learner 협폭 레이아웃 결함 91건 제품 수정 ③ 위 해소 후 교사 재평가 2건 포함 직렬 게이트 전체 GREEN 재검증. (엔진·스택 헬스는 모두 정상, NAS actual-origin smoke는 별도 통과)",
|
||||
"rerun_2026_08_18_15:05": "엔진 한도 리셋 직후 재실행: 31 passed / 14 failed / 4 skipped / 12 did-not-run(직렬 연쇄 중단). 교사 재평가 2건은 파일 내 선행 실패로 실행하지 못했다. 삼각화: (a) breakpoint-sweep 3종은 파서 수정 후 처음 실행된 실측 스윕이 settings/learner 320px 등에서 레이아웃 결함 91건을 보고 — 아침 실행에서는 파서 테스트 실패로 스윕이 연쇄 중단돼 실행되지 않았던 것. (b) session-mvp strict-mode 위반('코칭' 버튼 3개), session-persistence·layout-visual-gate '동맹 기준 포인터 선택' 타임아웃, voice 2종 실패는 아침 11:10 동일 웹 코드(cf899b7f)에서 통과했으므로 웹 커밋이 아닌 스택·데이터 드리프트(9099 게이트웨이 6369f294 교체, dev DB 누적 데이터)가 의심되며 원인 조사 진행 중. 게이트 엔진 경로 자체는 정상(클로드 일회/세션 턴 실측 응답).",
|
||||
"rerun_2026_08_18_evening": "인프라 완전 복구 후(Docker/사이드카/워크트리/node_modules 재설치, 엔진 agy 전환) 재실행: voice·mvp·layout·persistence 4파일 19 failed / 2 passed / 14 did-not-run. 지배 실패는 '동맹 기준이 실제 포인터 입력으로 선택되어야 한다'(support.ts completeAlliancePreCheckpoint의 실마우스 클릭 15초 타임아웃)로 세션 진행 중 재연습 체크포인트에서 결정적으로 재현(3/3). 아침 11:10 동일 웹 코드로 통과했으므로 웹 커밋이 아니라 13:59 소유자의 엔진 agy 전환 이후 생성 타이밍 변화(SSE/재레ender 주기)와 체크포인트 헬퍼의 상호작용이 일차 용의다. 세부 조사는 별도 작업으로 이관."
|
||||
}
|
||||
},
|
||||
"boundaries": "route fixture 검증이므로 실제 로그인/API/DB 증거가 아니다. 실 DB-backed 증거는 기존 @single-run·closed-loop 스펙이 소유한다."
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue