# 03. 계약 검사와 코드 검토

현재 참가자 사본에서만 사용합니다.
수정 범위는 새 테스트 파일 한 개입니다.

```ai-prompt
Robot Atlas의 모델 출력 계약을 검사하는 테스트를 추가해 주세요.
먼저 현재 경로와 AGENTS.md를 확인하고 shared/contracts.ts, shared/plans.ts,
server/planner.ts, tests/plans.test.ts, tests/planner.test.ts를 읽으세요.

tests/workshop-plan.test.ts를 작성합니다.
node:test, node:assert/strict와 실제 validatePlan·PlanError를 사용합니다.
테스트 목적은 외부에서 받은 후보의 허용·거부 조건 확인입니다.

다음 사례를 포함하세요.
- 600자 summary와 red→tray 한 단계는 허용하고 601자는 거부.
- 빈 actions, 같은 물체의 중복 선택은 거부.
- 알 수 없는 green 물체는 거부.
- sort에서 red→blue-zone은 거부하고 올바른 색상 목적지는 허용.
- action에 position, torque, url을 더하거나 후보 최상위에 provider, id를 더하면 거부.
- blue→red→orange의 stack 순서를 그대로 보존.
- 일부 상자만 선택한 한 단계 계획은 정상 후보로 허용.

각 거부 조건은 PlanError가 발생하는지 검사하세요.
오류 문장 전체나 임의 UUID에 테스트를 묶지 마세요.
기존 테스트와 내용을 비교하고 새 경계값을 읽기 쉬운 사례 이름으로 표현하세요.
기존 파일이 있다면 먼저 읽고 참가자 변경을 보존하세요.

이 요청에서 shared/, server/, simulation/, agent/와 기존 테스트는 수정하지 마세요.
AWS와 모델은 호출하지 마세요. 응답을 주입한 단위 테스트는 실제 호출 증거가 아닙니다.
검증을 끄거나 모든 입력을 허용하는 수정은 하지 마세요.
모델 오류를 규칙 기반 성공으로 바꾸지 마세요.

작성 후 새 테스트, 기존 계획 테스트, npm test, npm run build를 실행하세요.
변경 파일, 실제 명령, 통과·실패 수와 남은 문제를 알려 주세요.
실패가 있으면 테스트를 지우지 말고 원인과 최소 수정 제안을 보고하세요.

마지막으로 tests/workshop-plan.test.ts를 검토해 주세요.
실제 validatePlan을 호출하는지, 허용할 단일 물체 계획을 잘못 거부하지 않는지,
추가 필드·중복·잘못된 목적지를 각각 검출하는지 확인하세요.
tests/planner.test.ts에서 클라우드 오류 시 503을 돌려주는 검사는
“실제 모델 호출 성공”이 아닌 “오류 처리 계약”이라는 점도 확인하세요.
테스트를 실행하지 않았다면 통과했다고 적지 마세요.
```

본문: [03. 작업 계획 검증](../chapters/03-ai-planner.md)
