AttributeError: 'NoneType' object has no attribute 'glGetError' — MuJoCo OSMesa import 단계. native render·CUDA·nvcc 증거 모두 미생성.libOSMesa.so.8가 libedit.so.2 부재로 로드 실패, ldd는 libxml2.so.2 not found. 개인 additive overlay 적용 후 preflight 통과.0.010000000474974513(Δ 4.75e-10)을 tolerance 1e-12로 거부.composite_and_gradient의 translation self-check에서 실패, 임시 arrays 미보존으로 원인 국소화 불가.Gaussian splat appearance를 native MuJoCo mesh와 합성하려면 (i) mesh depth 앞에 있는 Gaussian만 채택하고 (ii) actor/block 전경은 parent fallback을 그대로 유지하며 (iii) color/opacity 경로 gradient가 유효해야 한다. 이를 DROID fit 전에 synthetic fixture로 먼저 검증하는 one-oracle 계획(post-CAD handoff)이 승인되었다. 앞선 runtime smoke 134747은 nvcc 증거 누락으로 formal FAIL이었으므로 절대경로 compiler probe가 필수 조건이었다.
cutoff 특성: gsplat 1.5.3 CUDA path는 1/255 미만 contributor를 생략하고 next transmittance ≤ 1e-4일 때 종료 contributor를 생략할 수 있어, 두 cutoff를 고정·기록·테스트했다.
| Job | 유형 | 상태 / 시간 | 실패 원인 및 증거 |
|---|---|---|---|
| 135927 | GPU oracle #1 | FAILED 1:0 / 3 s | 'NoneType' object has no attribute 'glGetError' (OSMesa import). stdout 비어 있음, complete/manifest/runtime/PNG 없음 |
| 135937 | CPU 진단 (1 CPU/1 GiB) | COMPLETED / 1 s | ctypes.CDLL로 libOSMesa.so.8 로드 시 libedit.so.2 부재; ldd: libxml2.so.2 => not found. "PYOPENGL_PLATFORM 미설정" 가설은 철회(MuJoCo가 import 전에 설정) |
| 135972 | CPU preflight (1 CPU/2 GiB) | COMPLETED / 5 s | unresolved loader dependency 0, absolute-path/SONAME CDLL 성공, MuJoCo 3.3.7/PyOpenGL OSMesaPlatform + glGetError import 성공 (context 생성·렌더는 미증명) |
| 136000 | GPU oracle #2 | FAILED 1:0 / 5 s | nvcc 12.8.61, gcc 11.4.0 기록됨. XML znear .002 × extent 5 → float32 저장값 0.010000000474974513, 기대 0.01과 Δ 4.749745128e-10 > tol 1e-12 → native near-clip guard 거부 |
| 136025 | GPU oracle #3 | FAILED 1:0 / 2:30 | clip 수정(Decimal 비교 + float32 유도값 기록) 후 native·CUDA 호출 도달, composite_and_gradient stage translation self-check 실패. gsplat JIT 130.34 s. native evidence/NPZ/PNG/manifest/complete 없음 |
| CPU 테스트 (main / independent) | 시점 |
|---|---|
| 10 pass (13.421 s / 17.349 s) | 135927 제출 전 |
| 15 pass (24.951 s / 19.041 s) | 136000 제출 전 (loader overlay 반영, checker가 실제 preflight dependency map 검증하도록 수정) |
| 19 pass (31.964 s / 28.851 s) | 136025 제출 전 (native-clip 표현 규칙) |
실패가 loader(135927) → native clip 표현(136000) → native translation(136025)로 한 계층씩 아래로 이동하며 각 layer가 독립 증거로 분리됐다. 특히 float32 clip mismatch는 epsilon을 임의로 키우지 않고 stored float32 field 또는 half-ULP 유도 bound로만 바꿔야 한다는 원칙을 남겼다. 반면 136025는 임시 arrays가 삭제되어 실패 국소화 자체가 불가능했고, 이는 후속 계획의 "assertion 전에 seal" 규칙의 직접 근거가 되었다.
136025의 translation 실패 원인은 미확정(discard된 arrays 복구 불가). verifier는 아직 ideal exact clip 값을 요구해 producer/verifier의 단일 representation rule이 필요.
native-only 2-case CPU 진단으로 translation 불변성만 분리 (job 136150, 136204 → unlit native fixture 카드). DROID fit은 independent oracle PASS 전까지 승인 불가.