Repository navigation
Closiro v2.47.0
Closiro v2.47.0
호스트가 모델의 작업을 멈추던 지점들을 고치고, 작업별로 모델이 건너뛰던 검증 절차를 호스트 도구로 제공하며, SWE-bench Lite 공식 하네스를 추가한 버전입니다. 모든 호스트 변경은 SNAILER_FIX_*=0 스위치로 이전 동작으로 되돌릴 수 있습니다.
고친 것
- 셸 명령의 대기 시간과 프로세스 수명을 분리했습니다 (W1).
bash_run/run_cmd의wait_ms는 이번 호출이 기다리는 시간(최대 900 s)이고, 프로세스를 끝내는 시점은 모델이runtime_limit_ms로 정한 때뿐입니다. 대기가 끝나면 아무것도 죽이지 않고Running상태와 run_id, 출력 커서, 활동 기록(바이트, 자식 프로세스, 마지막 변화 이후 시간)을 돌려줍니다. 이전에는 모델이 어림잡은timeout에 빌드와 서버가 죽었습니다(TB 2.1에서 호스트가 죽인 프로세스 전부가 이 경우).SNAILER_FIX_WAIT_LIFETIME=0. - 요구사항 원장이 같은 말의 반복을 진행으로 세지 않습니다 (W4). 파일이 바뀌었거나 검사가 다시 돌았을 때만 진행이고, 모델에게 세 번 물은 항목은 열린 채로 둡니다. 코드 블록의 언어 태그를 명령의 일부로 읽던 문제(
bash python3 …를 39회 요구)와 126/127로 끝나는 호출을 의무로 삼던 문제를 고쳤습니다. - 변경 금지 범위를 문장 구조로 읽습니다 (W6a). "데이터 파일은 수정하지 말 것" 같은 금지는 그 목적어(콜론 뒤 목록이나 문장 주어)에만 걸리고, 확장자와 디렉터리로 시작 파일과 대조합니다. 소스 수정 211건이 잘못 거부되던 두 작업에서 소스 편집은 허용되고 데이터·읽기 전용 파일은 계속 거부됩니다.
- 일시적인 모델 장애는 같은 입력으로 한 번 다시 보냅니다 (W8). 응답 시간 초과, 멈춤, 빈 본문, 끊긴 스트림은 예산과 시간이 허락할 때 한 번 재제출합니다. 거절과 인증·결제 오류는 재시도하지 않습니다.
SNAILER_FIX_TRANSIENT_FAULT_RETRY=0. - 서비스 준비 판정을 종료 시점에 다시 하고, 소유 근거가 있을 때만 넘깁니다 (W2). 이 실행이 띄운 pid가 듣고 있거나 서비스 시작 전에 비어 있던 포트일 때만 "준비됨"이고, 아니면 "미확정"으로 기록합니다. 준비 대기 상한 900 s.
SNAILER_FIX_SERVICE_RECHECK=0. - 정체 안내는 한 번만 (W3b). 바뀐 것 없는 작업 공간에서 같은 호출이 세 번째일 때 한 줄, 파일 읽기 안내는 파일당 한 번.
SNAILER_FIX_STAGNATION_NOTE=0. - 재현 검사는 리다이렉트 대상에서도 기대 문자열을 찾고, 끝나지 않는 명령은 복사본에서 다시 돌리지 않습니다 (W5).
- 완료 전 한 번의 확인 라운드 (W6/W7). 이 실행이 설치한 패키지를 가져오는 산출물, 요청이 이름 붙인 경로를 잃은 실행 중 서비스, 답변이 "잠정"·"미확인"으로 표시한 값(P5)은 완료 직전에 한 번 짚습니다.
SNAILER_FIX_COMPLETION_ADVISORY=0,SNAILER_FIX_TENTATIVE_ADVISORY=0. - 잘못된 가설 선언이 명령 실행을 막지 않습니다 (W3a). 디버그 케이스 밖에서는 명령을 실행하고 결과에 한 줄 안내를 붙입니다.
SNAILER_FIX_HYPOTHESES_ADVISORY=0. - 재시도하지 않은 일시 장애 뒤 산출물이 없으면 "있는 것을 쓰라"는 초안 턴을 한 번 줍니다 (P6).
SNAILER_FIX_DRAFT_TURN=0.
새로 생긴 것
- 그레이더 뷰. 요청문에서 검사 가능한 문장(달라질 수 있는 입력, 없어야 하는 것, 수치, 점수 기준, 구조, 산출물)을 시작 시 한 번 인용하고 각각을 검사하는 방법을 붙입니다. 마감 안내는 절반 지점에서 아직 없는 산출물을 이름으로 부릅니다.
SNAILER_FIX_GRADER_VIEW=0. - 방법 도구 10개. 모델이 원칙으로만 알고 건너뛰던 절차를 호스트가 계산합니다. 호스트는 모델이 준 값으로만 계산하고 아무것도 결정하지 않습니다:
convergence_check(Richardson 차수와 허용오차의 h*),relation_check(두 실행의 출력·파일·수치 비교),absence_check(모든 산출물에서 금지 문자열·정규식),boundary_sweep(매개변수 조합 전체 실행과 최악값),structure_scan(디렉터리의 import·호출·텍스트 스캔),fixed_point(수렴 반복),detection_limit(Currie L_C·L_D),gap_report(목표까지의 격차와 실현 가능성),spec_coverage(명세 규칙 대 테스트),case_ledger(케이스 상태와 부분 점수). 요청에 검사 가능한 조건이 있을 때만 모델의 기본 도구 집합에 더해 제공됩니다.SNAILER_FIX_METHOD_TOOLS=0. - SWE-bench Lite 공식 하네스 (
swebench_lite/closiro/). 문제마다 SWE-bench 공식 Docker 이미지 안에서 closiro를 돌리고 공식 채점기로 바로 채점해 리더보드 제출 형식(all_preds.jsonl,logs/,trajs/)을 만듭니다. 병렬 워커, 재개, 이미지 정리, 제공자 429 시 자동 일시정지를 포함합니다. 실행 결과는 저장소에 넣지 않습니다.
확인한 것
- 호스트 변경과 방법 도구는 단위 테스트로 확인했습니다(새 테스트 20 + 방법 도구 11 + 에이전트 3, 대상 모듈 351개 중 350 통과, 1개는 알려진 TUI 이벤트 버스 병렬 플레이크). 벤치마크로 다시 측정하지는 않았습니다. 변경의 근거가 된 측정은 2026-11-05 TB 2.1(21개)·TB 4.0(15개) 기록으로, 호스트가 죽인 프로세스가 전부 모델이 고른 마감이었다는 사실입니다.
- SWE-bench Lite: 무작위 12문제 시범 실행에서 GPT-6 Astra(high)로 7/12 resolved(공식 채점, $25.99). 전체 300문제 실행은 진행 중이며 깨끗하게 끝난 104문제 기준 86 resolved입니다(django 비중이 커 전체 점수보다 높게 읽어야 함).
알아 둘 것
- 스위치는 전부 환경 변수이며 기본은 켜짐입니다. 이전 동작이 필요하면 해당
SNAILER_FIX_*=0. - SWE-bench 하네스는 Docker Desktop(containerd 이미지 저장소)에서
--platform linux/amd64이미지를 쓰므로 이미지 삭제는 ID로 강제 삭제해야 공간이 돌아오고, matplotlib 계열 이미지는 한 장 5–7 GB입니다. 하네스가 이를 처리하지만 VM 디스크 여유는 20 GB 이상 두는 것이 좋습니다. - 제공자 429(플랜 한도)의 영향을 받은 실행은 결과로 세지 않고 다시 돌립니다.