# OSCODE 작업실

웹 CLI의 **작업실** 버튼에서 기능을 선택합니다. 작업 브라우저의 **동작 테스트 초안 기록 시작**은 별도 브라우저 창 안에 있습니다. 기능은 실제 기록과 사용자가 제공한 데이터로 실행하며 응답 완료·조건 통과·픽셀 차이를 구분합니다.

## 1. 화면 동작에서 테스트 초안 생성

1. 작업 브라우저를 열고 직접 제어로 전환합니다.
2. **동작 테스트 초안 기록 시작**에서 일반 입력값 기록에 동의합니다.
3. 클릭·입력·스크롤·키보드 동작을 수행합니다.
4. **동작 테스트 초안 받기**로 `oscode-flow.spec.js`를 받습니다.

테스트 파일은 `@playwright/test`를 사용하는 프로젝트에서 선택자와 완료 조건을 검토한 후 실행하세요. OSCODE가 다운로드한 초안을 자동 실행하지 않습니다. 비밀번호 필드는 초안에서 제외합니다. 일반 필드의 민감한 데이터는 사용자가 제거해야 합니다. 최대 100개 동작을 기록하며 기록 이후 브라우저 중지 시 초기화합니다. 기본 초안은 URL을 검사하므로 업무 결과에 대한 추가 assertion이 필요합니다. API의 `test-export`에 `checks`를 지정하면 URL·요소 표시·텍스트 조건의 assertion도 생성할 수 있습니다.

## 2. 완료 조건 블록

**완료 조건** 화면에 아래 JSON을 입력하고 **실제 화면 조건 검사**를 누릅니다.

```json
[
  {"kind":"visible","selector":"#login-form"},
  {"kind":"text","selector":"#result","value":"로그인 완료"},
  {"kind":"url","value":"http://localhost:3000/dashboard"},
  {"kind":"noErrors"}
]
```

최대 12개 조건을 지원합니다. 고유한 CSS selector를 지정하세요. 현재 브라우저의 수집된 오류를 기준으로 `noErrors`를 판정하며, 과거 오류가 남아 있으면 **브라우저 오류 기록 → 오류 기록 초기화** 후 다시 검사하세요. 지정하지 않은 기능은 검증한 것으로 표시하지 않습니다.

## 3. 모듈 연결 캔버스

**모듈 연결 캔버스 → 모듈 캔버스 열기**에서 블록을 추가하고 위·아래 버튼으로 순서를 바꿉니다. 다음 다섯 역할을 지원합니다.

| 블록 | 실제 동작 |
| --- | --- |
| 파일 읽기 | 1~8개 프로젝트 텍스트 파일을 읽어 다음 AI 요청에 참고 자료로 전달 |
| AI 분석 | 사용자가 작성한 분석 요청을 모델에 전달 |
| 화면 생성 | 생성 역할로 지정한 요청을 모델에 전달하며 실제 파일 변경은 기존 승인 사용 |
| 완료 조건 검증 | 현재 작업 브라우저에서 지정 조건을 실행하고 근거 저장 |
| 사람 검토 | 실행 결과를 확인하고 다음 단계를 승인 |

파일 읽기 설정은 `["src/App.tsx"]`, 검증 설정은 위 조건 배열입니다. 파일당 24KB·합계 48KB 제한과 기존 비밀 파일·프로젝트 경계 정책을 따릅니다. 파일 내용은 지시문이 아닌 참고 자료로 전달합니다. 각 단계는 사용자가 승인해야 하며 AI가 임의로 다음 블록을 실행하지 않습니다. 조건 실패 시 다음 단계가 차단됩니다. 화면을 수정한 후 **완료 조건 재검사 승인**으로 같은 조건을 재검사할 수 있습니다. 레시피 정의는 프로젝트에 저장되지만 실행 상태는 서버 재시작 시 복원하지 않습니다.

## 4. 변경 영향 지도

변경 파일 경로를 한 줄에 하나 입력합니다. 상대 경로 import를 추적해 영향받을 수 있는 모듈·페이지·테스트와 연결 근거를 표시합니다. 최대 300개 소스 파일·4MB를 읽습니다. 경로 별칭·동적 계산·프로젝트 밖 패키지는 완전히 해석하지 않으며 해석 실패 항목을 표시합니다. 모든 영향이 발견된다는 보장은 없습니다.

## 5. 두 구현 비교

A·B 요청을 입력하고 **두 작업 공간 생성·요청 실행 승인**을 누릅니다. 원본 파일의 두 복사본과 각각의 웹 CLI를 만듭니다. 각 창에서 실제 도구 승인을 처리하세요. 부모 창에서는 실제 작업 상태·파일 해시 변화·기록된 예상 비용을 비교합니다. 두 개발 서버의 URL을 입력하면 화면 픽셀 차이도 비교할 수 있습니다.

Git 분기 또는 원본에 자동 병합하는 기능은 아닙니다. 최대 3쌍, 복사본당 1,000개 파일·64MiB, 파일당 2MiB 제한입니다. 기존 의존성 폴더·빌드 산출물·환경변수 파일·알려진 인증 설정·심볼릭 링크는 복사하지 않습니다. 누락 목록을 확인하고 의존성 설치·개발 서버 실행은 각 창에서 승인하세요. 파일 내부에 직접 적힌 비밀은 자동 식별하지 못합니다. 각 창의 연결이 없으면 기존 30초 유휴 취소 정책이 적용됩니다. 서버 종료 후 작업 창은 닫히지만 임시 복사본은 안내된 경로에 남습니다. 외부 부작용은 파일 비교에 포함되지 않습니다.

## 6. 실패 묶음 분석

실패한 도구 출력과 실제 브라우저의 콘솔·페이지 예외·요청 실패·HTTP 오류를 유형별로 묶습니다. 발생 횟수·원문·기록 ID와 진단 후보를 확인하세요. **근거로 재검토 요청 초안**은 대화 입력만 준비하며 자동 전송하지 않습니다. 오류 묶음은 근본 원인 확정이나 자동 해결 보장이 아닙니다. 브라우저 오류는 최근 100건이며 서버 메모리에 보관합니다.

## 7. 검증 결과 패키지

현재 대화의 작업을 1~10개 선택하고 다운로드 승인합니다. ZIP에는 `report.json`, 설명 문서, 작업 상태·도구 변경 경로·승인·모델 비용·완료 조건 결과가 담깁니다. 선택적으로 최근 5개 브라우저 캡처와 저장한 기준 화면을 포함할 수 있습니다.

소스 포함을 선택하면 최대 30개 도구 체크포인트의 변경 전·현재 파일을 기록합니다. 각 내용은 65,536자까지이며 잘림 여부를 표시합니다. 현재 파일은 내보내기 시점의 상태여서 이후 수정이 포함될 수 있습니다. 셸 변경은 체크포인트에서 누락될 수 있습니다. 화면과 코드의 민감한 정보를 검토한 뒤 공유하세요. ZIP은 최대 16MiB이며 외부에 자동 업로드하지 않습니다. 브라우저 검증 결과는 현재 브라우저에서 실행한 검사이며 선택한 각 작업과 자동으로 동일성을 증명하지 않습니다.

## 8. 작업 재사용

응답 완료된 작업을 골라 **레시피 후보**를 만듭니다. 원래 요청과 사람 검토 블록이 편집기에 들어가며 사용자가 수정·저장·새 실행 승인합니다. 이전 도구 결과나 승인을 재사용해 자동 실행하지 않습니다. 응답 완료가 실제 품질 성공을 보장하지 않으므로 후보를 검토하세요.

## 9. 이벤트 개인비서

파일 변경·예정 시각(ISO 형식, 일회)·MCP 도구 완료를 선택하고 제목과 제안할 요청을 저장합니다. **감시 시작 승인**을 눌러 켭니다. 이벤트 발생 시 제안만 생성하며 **제안 새로고침**에서 확인하고 실행 또는 닫기를 선택합니다. MCP는 현재 대화에서 실행된 정확한 `mcp_…` 도구의 완료 이벤트를 관찰합니다. 원격 서버의 push 알림 구독이나 자동 MCP 폴링은 아닙니다.

정의는 `.oscode/studio-events.json`에 최대 10개 저장합니다. 감시와 최대 50개 제안은 서버 실행 중에만 유지됩니다. 재시작 후 직접 감시를 켜세요. 날짜가 지난 일회 이벤트를 다시 켜면 다시 제안됩니다. 반복 일정·서버가 꺼진 동안의 이벤트 수집은 지원하지 않습니다. 파일 변경은 최대 초당 한 번 제안합니다.

## 10. 반도체 모델 비교

**반도체 모델 비교** 패널의 **검사 실패 사례 모으기** 링크로 가상 검사 환경을 새 탭에서 엽니다. **가상 생산라인** 패널에도 같은 링크가 있습니다. 일반 이미지의 분류·탐지·분할 A/B 화면은 기존 Model Lab에서 사용할 수 있습니다.

1. 합성 LOT 검사를 실행하고 과검출·미검출이 있는 다이를 선택합니다. UI 시연용 모의 실행기와 사용자 MLflow detection 모델을 구분합니다.
2. **검사 회귀 작업실**에서 이름을 입력하고 **선택한 실패 저장**으로 요청에 사용한 PNG·정답·기준 예측을 보관합니다. 첫 사례의 검사 당시 점수 임계값·IoU가 고정됩니다. 정답 JSON을 수정할 때는 **정답을 검수했습니다**를 체크합니다.
3. **회귀 세트 저장 / 회귀 세트 열기**로 파일을 보관하고 지문을 확인해 다시 사용합니다. 세트는 최대 48개 사례, PNG 파일 합계 12 MiB이며 JSON 파일은 최대 18 MiB입니다. 브라우저 메모리에만 있으므로 새로고침 전에 저장하세요.
4. 기존 MLflow 모델 규격을 설정하고 **새 모델로 회귀 검사**를 누릅니다. 전송 대상과 사례 수를 확인하면 저장한 PNG를 그대로 보내고, 정답·기준 예측은 보내지 않습니다.
5. 기존 오류의 감소·잔존·악화와 완료율을 확인하고 **검사 결과 저장**으로 근거를 내려받습니다. 모든 사례가 정상 완료되고, 사례별 FP·FN이 늘지 않으며 전체 허용 개수(기본 각각 0개)를 충족해야 통과합니다.

통신 실패·취소·미실행은 통과에 포함하지 않습니다. 오류 사례만 선별한 결과이며 전체 모델 성능·실제 공정 성능·배포 승인을 뜻하지 않습니다. 사용자 검수와 모델 id/version은 입력한 기록이며 외부 인증이나 서버 모델 식별 검증이 아닙니다. [회귀 검사 상세 가이드](inspection-simulator.md#오류-사례를-회귀-검사로-재사용)를 확인하세요. 저장소의 개발 중인 로컬 기능이며 npm 게시 여부는 설치·게시된 패키지 버전을 별도로 확인하세요.

### 고급: 직접 작성한 JSON으로 A/B 비교

같은 **반도체 모델 비교** 패널 아래에는 기존 JSON 비교 입력란도 유지합니다. **동일 데이터를 두 모델로 전송 승인**은 동일한 검사 요청 JSON을 두 로컬 HTTP(S) 엔드포인트로 전송하고 예측과 실제 처리시간을 비교합니다. **가져온 예측 평가**는 입력한 A·B predictions를 평가하며 서버를 호출하지 않습니다. 이 흐름은 위의 고정 PNG 회귀 세트와 별개입니다.

MLflow `/invocations`도 사용할 수 있으며 응답은 아래 ID 기반 레코드 형식으로 맞춰야 합니다. 모델 토큰이 필요하면 엔드포인트 JSON에 `tokenEnv` 환경변수 이름을 지정하세요. 키 값은 저장하지 않습니다.

```json
{"predictions":[{"id":"LOT-01-die-3","label":"defect","score":0.91}]}
```

분류 정답은 `[{"id":"LOT-01-die-3","label":"defect"}]`입니다. 오탐·미탐은 `positive` 라벨을 기준으로 계산합니다. 객체 검출은 검사마다 `objects` 배열을 사용합니다.

```json
{"predictions":[{"id":"LOT-01-die-3","objects":[{"label":"particle","box":[20,30,12,10],"score":0.91}]}]}
```

검출 정답도 같은 형태이되 `score`는 필요 없습니다. box는 동일한 이미지 좌표계의 `[x,y,width,height]`이며 IoU와 점수 임계값으로 일대일 매칭합니다. 검사 ID 중복·잘못된 점수·누락 예측·정답에 없는 ID를 검사합니다. 실제 엔드포인트 없이 A·B 예측 JSON을 가져와 평가할 수도 있으며 이 경우 실제 호출·시간 측정으로 표시하지 않습니다.

최대 500개 검사 ID, 검사당 100개 객체, 요청 512KB·응답 1MiB·모델당 15초 제한입니다. 두 모델에는 동일 payload를 순차 전송합니다. 정답 없이는 정확도·오탐·미탐을 표시하지 않으며 단일 실행 시간으로 모델 속도나 생산 환경 성능을 보장하지 않습니다. 숫자 행렬·사용자 정의 응답은 ID·라벨 어댑터가 필요합니다. 실제 반도체 장비나 MES에 자동 연결하지 않습니다.

## 작업 신뢰성과 미리보기 확장

[작업 복구·분석 재사용·모델 정책·반도체 통과 검사·파일 반영·오프라인 재현 가이드](reliable-workflows.md)를 참고하세요.
