# 안전게이트(검사관) — 판단 기준 · 블랙박스 · 로그 설계 + 숙련자 판단 캡처

> 작성: 2026-07-28 | 대상 시스템: 3D 스캔·티칭 시스템 / JBI 안전게이트(`dzw_safety_gate.js`)
> 목적(CEO): "검사관이 어떤 관점으로 판단하는지"를 명문화·로그화(블랙박스)하고,
> 그 옆에 "숙련자(인간)는 실제로 어떻게 용접을 판단하는지"를 캡처해 둘을 잇는다. — 이것이 지능으로 가는 열쇠.
> 규칙: 게이트 판단기준은 **실제 코드 근거**로만 적는다. 숙련자 노하우는 **AI가 지어내지 않고 CEO 구술로 채운다**(빈칸 = [CEO 구술 필요]).

---

## 1부. 지금까지의 설명 (빠짐없이 보존)

### 이번에 무슨 일이 있었나 — 안전게이트가 실제로 작동한 사건
- "JBI 안전게이트 리포트"가 뜬 건, 이 경로에 방향 타협(최대 23.3°, 15° 초과)이나 관통 위험이 있어서 게이트가 **정상 내보내기를 막았다**는 뜻이다. 어제(2026-07-27) 그 막는 기능을 넣었다.
- CEO가 누른 "검증용 강제 보내기"는 그 막음을 **일부러 무시하고** 뽑는 버튼이다. 그래서 JBI가 나왔다.
- 중요(안전): 그래서 이 파일은 아직 **각도 타협이 남은 상태**다. 검증·확인용으로만 보고, 45° 국소보정+배치추천으로 각도를 잡기 전엔 **실제 로봇에 넣지 말 것.** 게이트가 "이건 위험하다"고 표시한 파일이다.
- JBI 자체 구조는 정상: 용접 3블록(ARCON~ARCOF 짝 다 맞음), 시작·끝 홈자세(C00000=C00063) 동일, 펄스 정상. 텍스트가 깨진 건 없다.

### 쉬운 설명 (5부)

**1. "안전게이트"가 뭔가 — 출고 전 최종 검사관**
JBI(로봇 작업파일)를 내보내기(다운로드)하기 직전에 자동으로 검사하는 문지기다. 자동차가 공장에서 나가기 전 마지막 검사관이 "이 차 안전한가?" 보는 것과 같다. 검사 항목은 로봇이 실제로 그 자세를 낼 수 있는지, 토치가 제품을 파고들지(관통), 토치 각도가 너무 틀어지지 않았는지 등이다.

**2. 왜 이 파일을 막았나 — 토치 각도가 너무 누웠다**
필렛 용접은 토치가 두 판 사이를 **45°로 반듯이** 겨눠야 비드(용접살)가 예쁘게 붙는다. 그런데 이 경로의 일부 지점에서 로봇 팔이 거기까지 못 닿아서, 토치가 **최대 23°나 옆으로 누운 채** 용접하게 돼 있었다. 각도가 이만큼 누우면 비드가 한쪽으로 쏠리거나 제품을 긁고 파고들 위험이 크다. 그래서 검사관(게이트)이 "이건 위험, 내보내기 정지"라고 막고 **리포트(사유서)**를 띄웠다. — 이 "막는 기능"이 바로 어제 넣은 수정이다. 전엔 이런 걸 그냥 통과시켰다.

**3. "검증용 강제 보내기"를 누르면 — 검사관을 밀치고 통과**
그 버튼은 검사관이 정지시킨 걸 CEO가 **일부러 무시하고** 강제로 파일을 뽑는 기능이다. "위험한 거 아는데, 지금은 검사·확인 목적이니 그냥 뽑자"용이다. 그래서 JBI 텍스트가 나온 것이다.

**4. 그래서 지금 이 파일의 상태 — "위험 표시가 붙은 채 뽑힌 파일"**
강제로 뽑았다고 각도 문제가 사라진 게 아니다. 그 23° 누운 자세가 **파일 안에 그대로 들어있다.** 검사관은 막았는데 밀치고 나온 것뿐이라, 이 파일을 실제 로봇에 그대로 넣으면 그 위험한 각도로 용접한다. **그래서 이건 화면 확인·검증용으로만 쓰고, 실물 로봇엔 넣으면 안 된다.**

**5. 그럼 어떻게 안전하게 만드나 — 지금 하고 있는 일**
두 갈래로 근본을 잡는 중이다.
- (넣음) 점마다 45°를 다시 계산하는 보정 — 각도 틀어짐 자체를 줄인다. (`_weldDirAt` 점별 국소 45° 이등분, 커밋 c3038cf)
- (설계됨) 제품을 정반 위 어디·어느 방향으로 놓아야 전 구간이 45°로 닿는지 자동 추천 — 애초에 팔이 닿게 만든다.
이 둘이 적용되면 각도가 45°에 맞아 게이트가 **막지 않고 정상 통과**하게 되고, 그때 뽑은 JBI라야 로봇에 안심하고 넣을 수 있다.

**한 줄 요약:** 게이트가 "이 파일 각도 위험"이라 막았고, CEO가 강제로 뽑았을 뿐 위험은 그대로 — 그러니 이 파일은 실물 금지, 45° 보정·배치 끝난 뒤 다시 뽑아야 한다.

---

## 2부. 검사관은 어떤 관점으로 판단하는가 (코드 근거 · 블랙박스화)

> 근거 파일: `dzw_safety_gate.js` (함수 `gated`). 아래는 실제 검사 항목이다. 하나라도 걸리면 `rep.blocked=true`(내보내기 차단).

| # | 검사 항목 | 관점(무엇을 보는가) | 차단 기준 | 코드 필드 |
|---|-----------|--------------------|-----------|-----------|
| ① | IK 수렴 | 로봇이 그 자세를 물리적으로 낼 수 있나 | 수렴 실패점 존재 | `rep.ikFail` |
| ② | 위치 오차 | 토치 끝이 목표점에 얼마나 정확히 가나 | 0.5mm 초과 | `rep.errFail` |
| ③ | 관절 한계 | 6축이 기계 한계를 넘지 않나 | 한계 초과점 존재 | `rep.limFail` |
| ④ | 관절검사 가능 | 한계 검사 자체를 수행했나 | 검사 불가(=통과로 속이지 않음) | `rep.limitsUnavailable` |
| ⑤ | **방향(작업각) 타협** | 토치가 45° 목표에서 얼마나 누웠나 | **용접점 방향오차 15° 초과**(2026-07-28 신규, 종전 90°) | `rep.oriBlock` |
| ⑥ | 관통(CCD) | 토치가 제품을 파고드나 | 관통>0 또는 CCD 미수행 | `rep.ccdBad` / `rep.ccdMissing` |
| (참고) | 급회전 | 인접 스텝 관절 급변 | 45° 초과 = **경고만**(차단 아님) | `JUMP_WARN_DEG` |

핵심 철학(코드에 박힌 원칙): **"검사를 못 했으면 통과라고 속이지 않는다."** 관절검사 미수행(④)·CCD 미수행(⑥)도 차단 사유로 본다. — 무판단을 합격으로 위장하지 않는 것.

### 블랙박스 로깅 설계 (해야 할 일 — 아직 미구현)
게이트가 판단할 때마다 **왜 그렇게 판단했는지**를 파일로 남긴다. 목적: 나중에 "이 파일 왜 막혔나/왜 통과했나"를 재구성하고, AI 판단과 인간 판단을 대조하기 위함.

판단 1건당 로그에 남길 항목(제안):
- 시각, JBI 이름/구간 수, 총 스텝 수
- 판정 결과: 통과 / 차단(강제 여부)
- 항목별 수치: IK 실패 N점, 최대 위치오차 mm, 관절 초과 N점, **최대 방향오차 °·초과 N점(어느 좌표)**, 관통 N점
- 차단 사유(어느 항목이 걸렸나), 임계값(그때의 ORI_BLOCK_DEG 등)
- 강제 보내기 눌렀는지 + 눌렀다면 파일명에 `미검증_` 표식
- 저장 위치(제안): `E:\도진팩토리\3D스캔및티칭시스템\logs\gate\YYYYMMDD_gate.jsonl` (한 줄 1판단)

이렇게 남기면 "검사관의 눈"이 블랙박스로 축적되어, 시간이 지나며 어떤 형상·배치에서 무엇이 자주 걸리는지 패턴이 보인다.

---

## 3부. 판단 지능 = 모든 소스를 종합 (무엇 하나 보조가 아니다)

> **[CEO 확정 2026-07-28] 어느 것도 보조가 아니다. 클로드는 모든 걸 종합한다.** 네 개의 소스가 대등하게 하나의 판단 지능으로 합쳐진다:
> - **① 실제 생산 JBI (인간 작성)** — 숙련자가 실제로 *무엇을* 했나 (증명된 경로)
> - **② 숙련자 구술** — *왜* 그렇게 했나 (JBI 숫자 뒤의 이유)
> - **③ 게이트 블랙박스 로그(2부)** — *기계는* 그 경로를 어떻게 봤나 (계산 관점·차단/통과 근거)
> - **④ 시뮬레이션 검증(4부, 엔비디아식)** — 디지털트윈에서 *실제로 되는지* 확인·훈련
>
> 종합의 핵심: 같은 제품에 대해 [① 인간 JBI] ↔ [AI 생성 경로]를 [③ 게이트]로 채점하고, 그 차이를 [② 구술]로 설명하고, [④ 시뮬]로 검증한다. 넷을 짝지은 것이 곧 학습 씨앗이다.

### 3-A. 실제 생산 JBI와 정량 대조 — AI 경로 vs 인간이 짠 JBI
- 실제 용접에 쓰인 **인간 작성 검증필 JBI 파일**을 정답지로 삼는다(현장에서 실제로 붙은, 증명된 경로).
- 같은 제품/형상에 대해 **AI가 스스로 경로를 생성** → 그 둘을 정량 비교한다.
- 비교 지표(CEO 지정 항목 포함):
  - **시작점 위치와 그 이유** — 인간은 왜 하필 그 지점에서 용접을 시작했나(AI 시작점과 대조)
  - **작업각·진행각(°)** — 토치를 세운 각도
  - **속도** (V=용접, VJ=이송)
  - **전압 / 전류** (용접 조건, ASF# 등 용접조건 번호에 매핑)
  - **티칭 거리(점 간격)** — 점을 얼마나 촘촘히 찍었나
  - 용접 순서, ARCON/ARCOF 위치, 구간 분할 지점, 중첩 길이
  - → **AI가 인간과 다른 지점 = 학습 신호이자 게이트 임계 보정 근거.**
- **데이터셋 위치(확정 2026-07-28): `E:\VLA시스템\` — 실제 생산 JBI 189개.**
  - 카고텍 12500(너클붐): `E:\VLA시스템\카고텍\12500_knuckle_boom\JBI\` (1번·2번 용접기, IN/OUT 부재별)
  - 에버다임 락드릴: `E:\VLA시스템\에버다임\광산기계\락드릴\` (프론트붐/리어붐 — 쫄대·Box·완전체 용접 단계별, 프레임 — 트랙서포트/오일탱크/브라켓)
  - 현장 용접기·공정단계·부재별로 폴더 구분된 검증필 인간 파일. 3부 종합의 정답지(골드).
- **추가 정답지(조사 2026-07-28): `E:\06_고객사데이터\설우기계\` — 인간 작성 실전 JBI 865개.**
  - 2020~2024년 실제 용접 사용분. BOOM/BRACKET 등 크레인·굴삭기 부재. 포인트 3~403점, ARCON/ARCOF 안정 구현.
  - 12500 원본 인간 JBI가 여기 있음: `...\1번용접기\1번로봇 세팅값 파일\12500(IN1111).JBI` 등(2024년, 113~138점).
  - (참고) E드라이브 전체 JBI 약 1,708개 중 인간 추정 865 · 자동생성(DZWAUTO 초안) 8. 자동생성분은 정답지 아님(AI 초안).
- **정답지는 JBI만이 아니라 제품별 멀티모달 세트다** (예: 12500 한 제품 안에):
  - **비전**: 사진 713장(.jpg/.png) + 영상 24개(.mp4) — 제품·용접부·완성/불량 모습
  - **행동**: JBI 46개 — 실제 로봇 경로
  - **용접조건(언어/수치)**: .cnd 104 · .prm 285 · .dat 700 — 전압·전류·속도 등 조건이 여기 담김(파싱 필요)
  - **구조화**: json 560 (`12500_map.json` 등)
  - **불량 폴더**: 나쁜 용접 샘플 = 음성(negative) 학습 데이터(게이트가 "이건 불량"을 배우는 금값)
  - **공정·이력**: `_history_briefing.md`, txt/md 다수 — 재질·공정 순서·설변 이유
  - → 즉 **사진(V)+조건·공정(L)+JBI(A)**가 한 제품에 다 있어 VLA 학습의 완결된 입력이 된다.

### 3-B. 숙련자 구술 — JBI 숫자 뒤의 "왜" [CEO 구술로 채움]
> AI는 아래를 **지어내지 않는다.** 각 항목은 CEO(숙련자) 구술로 채운다. 채워지면 3-A의 수치 차이가 "왜 그런지"로 설명되고, 검사관 기준(2부)과 대조되어 "기계가 놓치는 인간의 판단"이 드러난다.

1. **작업각(토치를 판 사이에서 몇 도로 세우나)**
   - 기본 45°라 했는데, 실제로는 어떤 경우에 45°에서 일부러 벗어나나? (예: 하향/수직/위보기 자세, 판 두께 차이)
   - [CEO 구술 필요]
2. **진행각(토치를 진행 방향으로 앞/뒤로 몇 도 눕히나) 및 전진/후진법**
   - [CEO 구술 필요]
3. **비드 함몰/시작·끝 처리 — 왜 중첩을 주나**
   - 오늘 나온 얘기: 끝나는 점은 비드 함몰이 생겨서 중첩을 준다. 얼마나(길이/겹침)? 어떤 조건에서?
   - [CEO 구술 필요]
4. **로봇이 못 닿을 때 숙련자는 어떻게 하나**
   - 제품을 어디로/어떻게 돌려 놓나(정반 배치), 구간을 어디서 끊나, 자세를 어떻게 바꾸나?
   - [CEO 구술 필요]
5. **"이건 위험/불량"이라고 사람이 느끼는 신호** (게이트가 수치로 보는 것과 대응)
   - 각도가 얼마쯤 누우면 "이건 안 된다"고 판단하나? (게이트는 지금 15°) 실제 감각 수치는?
   - [CEO 구술 필요]
6. **속도·전류 등 조건과 각도의 관계** (도번·치수는 도면 확인, 여기엔 원리만)
   - [CEO 구술 필요]

> 채우는 방법: 도면을 함께 보며 구술 → Chat-Claude가 발주도면과 대조 검증 → Claude Code가 이 파일에 정리본만 기록(새 내용 생성 금지). 도번·치수는 [CEO확인] 표시.

---

## 4부. 종합 루프 — 엔비디아식 시뮬 검증 + 인간 JBI 대조 (지능의 핵심)

CEO 비전: 엔비디아가 시뮬레이션으로 로봇을 검증·훈련하듯, **AI가 경로를 짜고 → 시뮬레이션(디지털트윈)으로 검증하고 → 실제 인간이 짠 JBI와 대조**한다. 우리 3D 뷰어 자체가 이미 디지털트윈(로봇·정반·충돌·IK)이라 이 루프의 토대가 있다.

### 루프 (한 바퀴)
1. **AI 경로 생성** — 같은 제품/형상에 대해 AI가 필렛 45° 경로를 스스로 만든다.
2. **시뮬 검증** — 디지털트윈에서 IK·관절한계·관통·방향각을 돌려본다(=게이트 2부가 채점).
3. **인간 JBI 대조** — 실제 생산 JBI(정답지)와 3-A 지표로 정량 비교(시작점·각도·속도·전압·전류·티칭거리 등).
4. **구술로 해석** — 차이가 나는 지점을 왜 그랬는지 숙련자 구술(3-B)로 설명.
5. **종합→씨앗** — 위 넷을 한 세트로 묶어 학습 씨앗 저장. 게이트 임계값(예: 방향 15°)도 인간 실제치로 교정.

### 필요한 준비물
- **정답지 JBI 수집**: 실제 용접에 쓰인 인간 작성 JBI들을 한곳에 모아 제품별로 인덱싱(위치 확정 필요 — 아래 미완료).
- **게이트 로그(2부)**: 판단마다 jsonl로 축적(미구현).
- **대조기**: 인간 JBI ↔ AI 경로를 지표별로 자동 비교하는 도구(신규, 후속).

> 즉 **①인간 JBI + ②구술 + ③게이트 로그 + ④시뮬 검증을 종합한 세트 = VLA 판단 씨앗.** 이것이 "지능으로 가는 열쇠".

## 5부. 오차 기반 학습 — 숙련자 의도로 수렴 (핵심 학습 메커니즘)

> **[CEO 확정 2026-07-28] 인간의 구술 데이터는 하나하나가 전부 골드 데이터다.** 시스템은 그걸 흉내만 내는 게 아니라, 같은 상황에서 스스로 해보고 그 차이를 기록하며 숙련자를 닮아가야 한다.

작동 방식:
1. **인간 = 골드(정답)**: 숙련자의 구술 한 마디, 움직임 하나, 판단 하나가 모두 정답 데이터. 버릴 것 없음.
2. **AI도 똑같이 해본다**: 같은 제품/상황에서 AI(시스템)가 스스로 구술·움직임·판단(경로·각도·시작점·속도·조건)을 생성.
3. **오차를 데이터로 기록**: [AI 결과] − [인간 골드]의 차이(오차 범주)를 항목별로 대장(ledger)에 남긴다. — 각도 몇 도 차이, 시작점 몇 mm 차이, 순서/조건 차이, 판단 불일치 등.
4. **수렴 학습**: 그 오차를 줄이는 방향으로 반복 학습 → AI가 점점 **숙련자의 "의도"까지 닮아간다**(단순 모방이 아니라 왜 그렇게 하는지의 의도).

이 오차 대장이 곧 학습 진척의 눈금이자, 게이트 임계·경로생성 규칙을 인간 실제치로 교정하는 근거다.

- **오차 대장 위치(제안)**: `E:\도진팩토리\3D스캔및티칭시스템\logs\learn\오차대장.jsonl` (한 줄 = 한 비교: 제품, 항목, 인간값, AI값, 오차, 시각)
- 이는 2부 게이트 로그·3부 인간JBI/구술·4부 시뮬을 **종합**하는 최종 산출물이다.

### 미완료·확인 필요 (정직 보고)
- 게이트 판단 **로그(2부 블랙박스)**: 아직 미구현. 설계만 위 표대로.
- **오차 대장(5부)**: 미구현. 설계만.
- **정답지 실제 인간 JBI 수집(3-A/4부)**: 위치 조사 진행 중(결과 나오면 이 문서에 인덱스 추가).
- 3부 숙련자 구술 항목: 전부 [CEO 구술 필요] — 미기입.
- 실시간 JBI 펜던트 화면: 구현·커밋(d37089a, 4147deb) 완료. 로드·버튼·64스텝 매핑 검증됨(캐시 무시 시). **남은 확인: 재생 중 노란 강조·자동스크롤이 실시간으로 도는지 — CEO가 포그라운드에서 ▶ 눌러 육안 확인 필요.**
