Studio AI 제안 검증
Studio AI의 Proposal Checks는 변경안을 실제 프로젝트에 쓰기 전에 별도 임시 workspace에서 검사하는 선택 기능입니다. 기존 프로젝트 상태인 baseline과 제안을 반영한 candidate를 같은 조건으로 실행해 새 실패가 생겼는지 구분합니다.
이 기능은 기본적으로 꺼져 있습니다. 켜지 않아도 제안 생성, diff preview와 적용 전 정책 검증은 그대로 동작합니다.
LLAMON_STUDIO_AI_CHECKS=on uv run llamon studio .승인부터 적용까지
섹션 제목: “승인부터 적용까지”- Studio가 현재 파일을 다시 읽어 fresh preview를 만듭니다.
- 서버가 프로젝트와 변경 범위에 맞는 검사 명령, timeout과 fingerprint를 준비합니다. 이 단계에서는 프로세스를 실행하지 않습니다.
- Drawer가 서버 소유의 정확한 명령 목록을 표시합니다. 사용자가 승인하면 UI는 명령 문자열이 아니라 해당 fingerprint만 서버에 돌려보냅니다.
- 서버는 저장해 둔 profile과 승인을 다시 대조하고 baseline과 candidate를 검사합니다.
- 실행이 취소되지 않으면 결과와 digest에 묶인
checkRef를 발급합니다. 적용 시 서버는 preview, 선택한 변경, project snapshot, 검사 profile, 진단과checkRef를 다시 검증하며 차단 결과는 거부합니다.
선택 변경, 파일 상태, 검사 설정 또는 세션이 바뀌면 이전 승인과 checkRef는 폐기됩니다. Drawer를 닫거나 프로젝트를 바꾸거나 검사 취소를 누르면 실행 중인 process group과 임시 workspace를 정리합니다.
제공하는 Python 검사
섹션 제목: “제공하는 Python 검사”| 검사 | 기본 timeout | 동작 |
|---|---|---|
py_compile | 10초 | 변경 영향 범위의 Python 문법을 검사합니다. 새 문법 오류는 적용을 차단합니다. |
| Ruff | 20초 | 현재 interpreter에서 Ruff를 사용할 수 있을 때 명시적 파일 경로를 검사합니다. |
| pytest | 80초 | 프로젝트 import가 frozen workspace 안으로 격리됐음을 증명할 수 있을 때만 실행합니다. |
현재 프로젝트가 editable install이거나 import origin을 증명할 수 없으면 pytest를 실행하지 않습니다. 이 경우 결과는 통과가 아니라 unavailable이며 이유가 화면에 표시됩니다. Studio가 dependency를 설치하거나 editable finder를 수정해 검사를 강제로 실행하지는 않습니다.
timeout은 다음 환경 변수로 각각 바꿀 수 있습니다. 값은 1~120초 범위여야 하며, 전체 검사 deadline 240초는 늘어나지 않습니다.
export LLAMON_STUDIO_AI_CHECK_PY_COMPILE_TIMEOUT=10export LLAMON_STUDIO_AI_CHECK_RUFF_TIMEOUT=20export LLAMON_STUDIO_AI_CHECK_PYTEST_TIMEOUT=80각 검사 profile은 서버가 shell=False로 실행할 argv를 결정합니다. 모델과 브라우저는 임의 명령이나 인자를 추가할 수 없습니다. 한 세션에서는 검사 하나만 실행할 수 있고 Studio 서버 전체에서도 동시에 최대 8개까지만 허용합니다.
결과 해석
섹션 제목: “결과 해석”| 결과 | 의미 | 적용 동작 |
|---|---|---|
| 통과 | candidate가 검사를 통과했습니다. | 바로 적용할 수 있습니다. |
참고 (advisory) | 기존 baseline 실패가 유지됐거나 검사를 실행할 수 없었습니다. | 결과를 남기고 적용할 수 있습니다. |
확인 필요 (confirm) | candidate가 새 실패 또는 timeout을 만들었습니다. | digest에 묶인 사유를 확인한 뒤 다시 승인해야 합니다. |
차단 (block) | candidate가 새 Python 문법 오류를 만들었습니다. | 해당 제안은 적용할 수 없습니다. |
baseline이 이미 실패한 경우 candidate의 같은 실패는 새 회귀로 취급하지 않습니다. 반대로 candidate에서만 생긴 일반 검사 실패는 확인이 필요하고, 새 Python 문법 실패는 항상 차단됩니다. timeout, deadline 부족과 실행 불가는 성공으로 바뀌지 않습니다.
임시 workspace와 데이터 경계
섹션 제목: “임시 workspace와 데이터 경계”- baseline과 candidate는 같은 frozen 파일 목록에서 따로 만듭니다.
.git,.llamon, virtual environment, dependency, cache,build,dist, symlink와 secret 경로는 복사하지 않습니다.- workspace 하나의 크기는 256 MiB로 제한합니다.
- 임시
HOME과 cache 디렉터리, 제한된 환경 변수 allow-list를 사용합니다. - stdout과 stderr는 각각 64 KiB까지만 보존하며 ANSI/control character와 발견한 secret은 가립니다.
- workspace는 성공, 실패, timeout과 취소 여부와 관계없이 삭제합니다.
baseline 결과는 같은 project snapshot과 검사 profile에 한해 최대 10분간 재사용할 수 있습니다. 파일이나 timeout이 바뀌면 cache와 기존 승인은 자동으로 무효화됩니다.
관련된 제안 생성·preview·적용 정책은 Studio AI와 OKF 지식을 참고하세요.