주기 회기 진단과 로그인 폭 보강

This commit is contained in:
Yun Chan 2026-08-12 16:33:59 +09:00
parent 946661926b
commit f97e7fadac
10 changed files with 216 additions and 17 deletions

View file

@ -50,6 +50,14 @@ G8 배포 source 기준선은 branch `master`, HEAD `61a41d1f08239b5f9e99cfae42a
listener owner와 generation readiness를 강제하고 loopback contract **8/8**을 통과했다. 실제 9100 listener,
NAS 설정·컨테이너·DB는 건드리지 않았다. 다음 mutation은 소유자 승인 뒤 단일 owner가 check-only→actual 1회→
NAS health/auth/OpenAPI/assets/실회기 재검증 순서로만 수행한다.
- 마지막 full disposable GREEN은 clean `64e1b221…``periodic-learner-e2e-20260812-150209.json`·SHA-256
`a7b2f758…8071`이다. detached-clean `94666192…` 확인은 전용 engine ready 뒤 disposable DB init health에서
브라우저 전에 FAILED했고 receipt `periodic-learner-e2e-20260812-155929.json`·SHA-256 `1bd95e01…52a8`
public/NAS/active DB 접촉 0과 cleanup 0을 남겼다. 같은 heartbeat에서는 재시도하지 않았다.
- 현재 공유 worktree에는 이 실패의 cleanup 전 `compose ps`·db/api 로그를 secret/email/UUID/query-safe tail로
영수증에 고정하는 runner 보강과, 실제 NAS 390px에서 남은 10px 로그인 overflow를 block auto-size로 고치는
scoped source가 있다. contract 14/14, 학생 route-fixture desktop/mobile 76/76, auth 2/2, dashboard 10/10,
type/API contract와 SSOT checker는 GREEN이지만 아직 commit/deploy/full run 전이다.
- 마지막 완료 작업은 G8 source HEAD `61a41d1f…6af`·tree `87dec55d…3b77`·archive `4d15d055…119d4d`
candidate 112/112와 actual NAS-origin 112/112다. API/Web `d5021950…e4b1`/`9796c092…4b36`, health
ok·db/engine true·auth 401·OpenAPI 126, fresh dump `36ec8748…24db8`을 확인했다.
@ -697,7 +705,7 @@ node.exe .\node_modules\@playwright\test\cli.js test e2e/session-layout.spec.ts
--project=chromium-desktop --project=chromium-mobile --project=chromium-single-run --workers=1 --reporter=line
```
전체 Playwright inventory는 627 tests / 45 files다. 실행 환경/API/DB를 정확히 맞추지 않고 fixture failure를
전체 Playwright inventory는 629 tests / 45 files다. 실행 환경/API/DB를 정확히 맞추지 않고 fixture failure를
제품 failure로 오인하지 않는다. 같은 blocker가 두 번 반복되면 전체 재시도 대신 원인·증거·수정 계획을 먼저 보고한다.
주기 실회기 검증은 `scripts/run-periodic-learner-e2e.py`가 소유한다. NAS 112건 중 실 API/DB는 22건이고
@ -706,7 +714,7 @@ route fixture는 90건이므로 전체 숫자를 실제 회기 폐루프로 부
검증한 뒤 sentinel resource·PID·listener·temp 잔여 0을 영수증으로 남긴다. 공개 8001/55432/9099와 NAS는 금지다.
최초 세 full run은 SSE body replay, durable turn 전 종료, 비종료 SSE `response.finished()` 대기를 차례로 찾아 모두
fail-closed했다. 4차 clean run은 reload 뒤 persisted episode를 `학습자만 실행`으로 표시하는 제품 결함을 검출했다.
5·6차 clean run은 핵심 동일 학습자 SSE·review·G4/G5 `0→1→1`을 연속 통과했지만 fixture 공유와 mobile success-state locator를 각각 fail-closed했다. 7차 clean `aa81af29…`same-learner SSE·review·G4/G5 `0→1→1`, 별도 zero-state returned desktop/mobile 4/4, route mock 0과 exact cleanup 0으로 첫 전체 GREEN receipt `periodic-learner-e2e-20260810-020117.json`·SHA-256 `bae963de…f32e1a`를 만들었다. 일곱 run 모두 public/NAS/active DB 접촉 0이며 cleanup 7/7 GREEN이다. 기존 hourly heartbeat는 중복 없이 갱신해 최신 GREEN이 6시간 이상 오래됐거나 material milestone이 바뀐 경우에만 preflight 뒤 full runner를 최대 1회 실행하고, 실패 시 자동 재시도하지 않는다.
5·6차 clean run은 핵심 동일 학습자 SSE·review·G4/G5 `0→1→1`을 연속 통과했지만 fixture 공유와 mobile success-state locator를 각각 fail-closed했다. 7차 clean `aa81af29…`첫 전체 GREEN을 만들었고 최신 full GREEN은 clean `64e1b221…``periodic-learner-e2e-20260812-150209.json`·SHA-256 `a7b2f758…8071`이다. current `94666192…` 단일 run은 disposable DB init health에서 브라우저 전에 FAILED했으며 receipt `periodic-learner-e2e-20260812-155929.json`·SHA-256 `1bd95e01…52a8`은 public/NAS/active DB 접촉 0·cleanup 0을 증명한다. 당시 cleanup 전 로그가 없어 exact init 원인은 미확정이다. runner는 이제 `compose ps`와 db/api log tail을 secret/PII-safe로 영수증에 남기고 unit 14/14를 통과한다. current source는 새 clean commit 뒤 single full run GREEN 전까지 완료로 부르지 않는다. heartbeat는 최신 GREEN이 6시간 이상 오래됐거나 material milestone이 바뀐 경우에만 preflight 뒤 full runner를 최대 1회 실행하고 실패 시 자동 재시도하지 않는다.
## 9. 핵심 변경 파일