Commit graph

165 commits

Author SHA1 Message Date
Yun Chan
bf5f7352ce 회기 종료 pinned_fact upsert를 AI evaluator 뷰로 실행
공개 /sessions/{id}/end 503(2026-08-18 실측): app.pinned_fact RLS는 learner 역할에
INSERT(소유 케이스)만 허용하고 SELECT/UPDATE는 AI 컨텍스트 또는 admin/instructor
전용이다. end_session이 learner 연결로 SELECT FOR UPDATE + INSERT ON CONFLICT
DO UPDATE 조합을 돌려 충돌 후보 행 가시성이 막히며 InsufficientPrivilegeError로
실패했고, fallback 차단이 503으로 노출됐다. 엔진이 건강해 deep 평가가 처음으로
pinned 팩트를 반환한 순간 발화한 잠복 결함이다.
- _upsert_pinned_fact_candidates_with_ai_view: 같은 learner uid 로
  acquire(ai_view='evaluator') 를 열어 INSERT/SELECT/UPDATE 정책을 모두 충족
- 검증: 공개 DB에서 롤백 재현 — learner 컨텍스트 upsert RLS 거부,
  ai_view evaluator 컨텍스트 동일 SQL 통과. app 924 passed·관련 62 passed
2026-08-18 18:36:04 +09:00
Yun Chan
6a42063d49 NAS 엔진 릴레이 실제 시작 성공과 15:05 게이트 재검증 결과 기록
- 릴레이 실제 1회 시작 passed(4종 SHA pin, ready 실생 통과, PID 65328) 후
  LAN 한정 9100 방화벽 규칙 추가(Private 프로필 누락이 transport error 원인)로
  NAS origin health 3/3 ok·engine true, auth 401, OpenAPI 126 실측 — 8-12 이후 첫 회복
- 직렬 게이트 재실행 31/14/12did-not-run 실패를 정직 기록: 스윕 91건 협폭 레이아웃 결함
  보고(아침 연쇄 중단으로 미실행이던 테스트) + 스택·데이터 드리프트 의심 실패군,
  교사 재평가 2건 미실행 — pending 유지, 원인 조사 이관
- 대시보드 211차 노트, TODO NAS 항목 갱신, SSOT 체커 59 PASS
2026-08-18 15:45:06 +09:00
Yun Chan
ab4bdfb8a2 agy 공급자 복구 증거와 핸드오프·대시보드 동기화
- agy 카탈로그 이중 결함(탭 파서 5afd92f8 + SystemRoot 백필 6369f294) 수정 후
  공개 런타임 6369f294 승격: capabilities 14모델·실생 터 응답·비용 계약 통과
- 워치독(install-public-runtime-task)·부트(register-boot-task) 태스크 모두 새 루트 재핀,
  부트만 갱신 시 구 루트 워치독 되살림 경합 발생함을 기록
- 대시보드 210차 노트, SSOT 체커 59 PASS
2026-08-18 13:50:25 +09:00
Yun Chan
6369f29439 CLI 자식 프로세스 환경에 Windows 필수 변수 백필
공개 런타임 승격 체인이 psutil로 이전 프로세스 환경을 통째로 이식하는 과정에서
SystemRoot 가 유실됐고, Go 계열 CLI(agy)는 시스템 인증서 풀/홈 해석에 SystemRoot 가
필요해 agy models 가 조용히 빈 목록을 반환했다(관리자 AI 운영 화면의
'Agy가 선택 가능한 모델을 반환하지 않았습니다' 두 번째 원인).
- _cli_subprocess_env(): 상속 환경에서 빠진 SystemRoot/SystemDrive/ComSpec 만
  기본값으로 백필해 모든 CLI 스폰(_run_process·codex app-server·agy stream·claude 세션)에 적용.
  os.environ 의 Windows 대문자 정규화를 고려한 대소문자 무시 조회
- Set-CompleteProcessEnvironment: 이식본에 빠진 Windows 필수 키를 Machine 스코프
  표준값으로 병합해 승격 체인 자체의 유실을 원천 보강
- 검증: 신규 2단위 RED→GREEN, engine_gateway 65 passed, app 924 passed,
  PS 5.1 parser OK, SystemRoot 제거 환경에서 실제 agy CLI 14모델 live 조회 확인
2026-08-18 13:25:08 +09:00
Yun Chan
5afd92f8f3 agy 모델 카탈로그 탭 형식 파서 수정과 표준 경로 폴백
agy CLI가 2026-08부터 'agy models'를 'model_id<TAB>라벨' 형태로 출력하는데
_discover_agy_cli가 공백 포함 줄을 전부 버려 카탈로그가 비어 available=false가 됐다
(관리자 AI 운영 화면에서 'Agy가 선택 가능한 모델을 반환하지 않았습니다').
- 탭 줄은 왼쪽 토큰을 id로, CLI 라벨을 우선 적용. 탭 없는 공백 줄(상태 문구)은 계속 무시하고
  구형 베어 id 출력 계약 유지 — 형식 이중 호환
- _binary가 PATH에 없어도 LOCALAPPDATA agy bin 표준 설치 경로를 폴백으로 탐색
- 검증: 신규 탭 형식 회귀 RED→GREEN, engine_gateway 63 passed, 실제 agy CLI로
  15모델 live 조회 확인(default gemini-3.6-flash-high)
2026-08-18 13:09:42 +09:00
Yun Chan
0d5e211bd5 TODO Pages 배포 완료·NAS 릴레이 1단계 상태 동기화
- 공개 Web Pages 배포 항목 완료 처리(cf899b7f, production 4edc02d3, 증거 JSON 경로)
- NAS relay 항목에 2026-08-18 CheckOnly 통과 사실과 15:05 자동화 잔여 범위 반영
2026-08-18 12:08:29 +09:00
Yun Chan
680db74ba3 공개 Web Pages 배포와 NAS 릴레이 프리플라이트 증거
- Cloudflare Pages production 4edc02d3(clean cf899b7f, 빌드×2 결정성 599파일):
  7개 origin 143자산 보존(최종 742파일), 커스텀 도메인 새 엔트리 index-BWxBaCPM.js 서빙,
  직전 엔트리 자산 200 보존 확인
- NAS 엔진 릴레이: start-nas-preview-engine.ps1 -CheckOnly 프리플라이트 통과
  (4종 SHA pin + LAN 192.168.0.223:9100, mutation=false, NAS 무접촉). 실제 1회 시작은
  엔진 구독 한도 리셋(15:00) 뒤 15:05 자동화가 직렬 게이트 재검증과 함께 수행
- HANDOFF 2026-08-18 절 직렬 게이트 삼각화·배포·릴레이 항 추가, 대시보드 209차 노트,
  SSOT 체커 59 PASS
2026-08-18 12:07:09 +09:00
Yun Chan
cf899b7f15 유스케이스 TDD 16테마 스펙과 접근성 제품 결함 수정
- 지원 티켓 작성 UI 신설(설정)·관리자 해결 노트 입력 신설(Admin): 서버 계약은 있었으나
  웹 진입점이 없던 2결함
- a11y: outline 채널 포커스 링(ui/shell css), 세션바 44px 터치 타깃, 청록 하드코딩
  그라디언트를 테마 토큰으로 교체, 설정 라벨/헤딩/대비·리뷰 44px·모바일 오버플로 수정
- uc-*.spec.ts 16테마 239 시나리오 신규(수집 1109 tests/61 files), 기존 스펙 5종 계약 드리프트 교정
- breakpoint-sweep: widthsFor 솎아내기가 실기기 대표 폭(360/390/1024)을 탈락시키는 테스트 결함 수정
  — keep 시드를 전체 DEVICE_WIDTHS로, 3연폭 예외는 솎아내기 발생 여부 기준으로
- 검증: tsc PASS, 병렬 게이트 1040 passed(데스크톱 밀도 충돌 1건 해소 후 focused 68/68 GREEN),
  직렬 게이트 52/5/4 삼각화 — breakpoint(테스트 결함)·kb(낡은 dev API 재기동)·voice(일시적) 해소,
  교사 재평가 2건은 엔진 구독 한도(resets 3pm)로 skip 후 재검증 대기
- 문서/SSOT: HANDOFF·TODO·대시보드·testing 가이드 동기화, 증거 usecase-tdd-2026-08-18.json,
  SSOT 체커 PASS(59)
2026-08-18 11:47:58 +09:00
Yun Chan
4771b97c3a 엔진 readiness 실패 캐시 TTL 분리와 프로브 타임아웃 보정
공개 런타임에서 reasoning_effort=high 콜드 프로브 1회가 20초를 넘기면
실패가 성공과 같은 TTL(운영 1800초)로 캐시되어 공개 API가 최장 30분간
engine=false로 오염되고, 워치독은 기본 /ready의 캐시된 200만 보고 API만
재시작하는 무한 루프에 빠졌다(2026-08-18 06:30 KST 실측).

- 실패 항목 전용 ENGINE_READY_FAILURE_TTL_SECONDS(기본 30초)를 분리해
  복구가 프로브 한 번 안에 감지되게 하고, 진짜 장애 중 프로브 폭풍은
  실패 TTL이 계속 막는다.
- ENGINE_READY_TIMEOUT_SECONDS 기본값을 20→45초로 올려 고효율 콜드
  스폰의 정상 지연을 장애로 오판하지 않는다.
- 회귀 4건 신설(실패 재프로브·성공 캐시 유지·실패 폭풍 억제·기본값 계약),
  게이트웨이 62/62·API 전체 986 passed·ruff clean.
2026-08-18 10:45:35 +09:00
Yun Chan
0c56f1857a 워치독 런처가 powershell.exe를 전체 경로로 호출하도록 고정
PATH 탐색에 기대면 작업 스케줄러 컨텍스트의 PATH가 로그온 세션과 다를 때
powershell.exe를 찾지 못하고, 그 경우 워치독은 로그 한 줄 없이 실패만 남긴다.
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe로 고정한다.
2026-08-12 21:28:58 +09:00
Yun Chan
5cb530e153 공개 런타임 워치독 창·복구 결함 3건 수정
재부팅 뒤 워치독이 5분마다 콘솔 창에 실패만 뿌리던 문제의 원인 세 가지를 고친다.

- 워치독이 DB 다운을 감지하고 직접 복구한다. postgres(vignette-dev-db) 기동은
  boot 담당이라 start-public-runtime.ps1 재호출로는 절대 복구되지 않았고, 그 결과
  워치독은 고칠 수 없는 대상에 start를 무한 재시도하며 실패만 기록했다. db를
  health check 항목에 넣고, 재시작 전에 컨테이너를 되살리며, 복구 실패 시에는
  runtime 재시작을 시도하지 않고 종료한다.
- 작업 액션을 wscript 런처(watch-public-runtime-task.vbs) 경유로 등록한다.
  powershell.exe를 직접 등록하면 -WindowStyle Hidden이어도 conhost 창이 매 실행
  번쩍이고, 5분 주기에서는 그것이 곧 화면을 가리는 창이 된다. 런처는 pin 인자를
  해석하지 않고 전달만 하며 provenance 검증은 기존대로 watchdog이 수행한다.
- boot이 web preview 상태를 보고 -SkipWebRestart를 조건부로 붙인다. 무조건 스킵하면
  재부팅 직후처럼 vite가 죽은 상태에서 boot 경로로는 web이 영영 복구되지 않았다.

hidden trigger는 액션이 wscript 런처를 거치는지 함께 검증하도록 맞췄다.
2026-08-12 21:17:04 +09:00
Yun Chan
80bcacc723 공개 Web 후보 사전검증 증거 고정 2026-08-12 18:20:53 +09:00
Yun Chan
00f851a66f API 타입 생성물 LF 고정 2026-08-12 18:07:06 +09:00
Yun Chan
28752836bd NAS 엔진 사전검증 증거 갱신 2026-08-12 17:54:00 +09:00
Yun Chan
f08e03de13 인증 E2E 격리성 보강 2026-08-12 17:49:08 +09:00
Yun Chan
0b9da9ca15 G7 종료 증거 기준 갱신 2026-08-12 17:37:13 +09:00
Yun Chan
cea2e86c5a 주기 회기와 UX 증거 갱신 2026-08-12 17:29:36 +09:00
Yun Chan
b02bee26ea 공통 상단바 조작면 보강 2026-08-12 17:14:50 +09:00
Yun Chan
0f08c91286 주기 회기 GREEN 증거 갱신 2026-08-12 17:01:27 +09:00
Yun Chan
f380cc4641 셸 초기화 LF 계약 고정 2026-08-12 16:43:45 +09:00
Yun Chan
f97e7fadac 주기 회기 진단과 로그인 폭 보강 2026-08-12 16:33:59 +09:00
Yun Chan
946661926b NAS 엔진 릴레이 복구 계약 보강 2026-08-12 15:53:22 +09:00
Yun Chan
b5f44fe1cb NAS 엔진 장애 상태 반영 2026-08-12 15:21:04 +09:00
Yun Chan
a134a1ac71 폐루프 검증 증거 갱신 2026-08-12 15:10:56 +09:00
Yun Chan
64e1b2210d 외부 실증과 인증 화면 경계 보강 2026-08-12 15:01:21 +09:00
Yun Chan
68fd8f65a3 주기 검증 증거 갱신 2026-08-12 14:43:54 +09:00
Yun Chan
9687f18669 모바일 톱바 조작면 보강 2026-08-12 14:34:00 +09:00
Yun Chan
2605661f0c 공개 복구 상태 동기화 2026-08-12 12:01:10 +09:00
Yun Chan
a73bcd248f 공개 런타임 프로브 복구 수정 2026-08-12 11:47:45 +09:00
Yun Chan
527027b93d 워치독 사이드카 장애 복구 수정 2026-08-12 11:42:46 +09:00
Yun Chan
190ae70d4d G7 평가 입력 안내 보강 2026-08-10 02:55:21 +09:00
Yun Chan
3067b72526 G7 독립 평가 입력 검증 도구 추가 2026-08-10 02:32:16 +09:00
Yun Chan
fcc45e083e 주기 회기 GREEN 기준선 기록 2026-08-10 02:16:23 +09:00
Yun Chan
aa81af2958 회기 후속 검증과 표시 경계 보강 2026-08-10 01:55:21 +09:00
Yun Chan
4cd354881f 주기 회기 검증 격리 보강 2026-08-10 01:25:45 +09:00
Yun Chan
9a7dd98cb6 회기 원장 상태 복원 보강 2026-08-10 00:52:27 +09:00
Yun Chan
13d1c39a33 주기 회기 실패 경계 기록 2026-08-10 00:23:10 +09:00
Yun Chan
9649f5ffaf 주기 회기 영속성 대기 고정 2026-08-09 23:56:39 +09:00
Yun Chan
fbf29fa40a 주기 SSE 검증 하네스 수정 2026-08-09 23:44:53 +09:00
Yun Chan
7b4955c3fc 주기 실회기 검증과 G7 종료계약 보강 2026-08-09 23:37:19 +09:00
Yun Chan
83590e9ef7 G7 공개 증거와 SSOT 동기화 2026-08-09 22:56:05 +09:00
Yun Chan
b34623f3db G7 공개 캡처 경로 보정 2026-08-09 22:36:25 +09:00
Yun Chan
c743e9ccb9 학생 회기 모바일 사용성 보정 2026-08-09 22:00:32 +09:00
Yun Chan
aaebe4450e 공개 런타임 롤백 경계 강화 2026-08-09 21:57:07 +09:00
Yun Chan
ff3c79dfc2 공개 핫픽스 증거 동기화 2026-08-09 21:10:15 +09:00
Yun Chan
7cece90e33 PII 표시 토큰 누출 보정 2026-08-09 21:04:29 +09:00
Yun Chan
61a41d1f08 G8 재검증 기준 동기화 2026-08-09 19:41:31 +09:00
Yun Chan
ba5e6326d5 평문 환경 숙의 연습 해시 보정 2026-08-09 19:38:04 +09:00
Yun Chan
21461ab323 릴리스 후보 부트 진단 게이트 보정 2026-08-09 18:42:51 +09:00
Yun Chan
5221f79e3f G7 증명과 G8 clean-head 승격 준비 2026-08-09 18:22:03 +09:00