다음 합성 Python CSV 로더를 읽기 전용으로 검토하세요.
이 프롬프트는 어떤 모델에도 동일하게 사용합니다. 네트워크, 모델/API 호출, 설치, 파일 변경, subprocess는 수행하지 마세요. 코드 수정본을 실행하거나 원본 파일을 덮어쓰지 마세요.

입력 계약:
UTF-8 CSV 헤더는 id,qty,price,memo 순서입니다. csv_contract.py는 제공된 정상 읽기/검증 구현입니다. id는 ASCII 숫자 1~32자리 문자열이며 선행 0을 보존합니다. 001과 1은 다른 ID입니다. qty는 ASCII 숫자 1~6자리의 0 이상 정수이며 0을 보존합니다. price는 ASCII 숫자 1~12자리의 정수부와 정확히 두 자리 소수부이며 Decimal로 원문에서 직접 변환해야 합니다. 같은 원문 ID가 반복되면 ValueError로 전체 로드를 거부해야 합니다. memo는 최대 1,000개 디코딩 문자 길이이며, CSV 규칙으로 인코딩한 쉼표·따옴표·개행이 있을 수 있고 문자열을 보존합니다. 1,000개 문자 초과는 helper가 ValueError로 거부합니다. 잘못된 헤더/열 수/ID/수량/가격은 제공 helper가 거부합니다.

평가 범위:
아래 허용 ID에서 실제 계약 위반만 하나씩 보고하세요.
ID_LEADING_ZERO / QTY_ZERO / MONEY_FLOAT / DUPLICATE_ID
선행 0 제거에 따른 식별자 충돌은 ID_LEADING_ZERO의 영향입니다. 별도 결함으로 중복 집계하지 마세요. 임의 ID, 선택적 개선, CSV 수식 삽입, 성능, BOM, 스타일 등 계약 밖의 항목을 추가하지 마세요.

출력 형식:
Markdown 또는 코드펜스 없이 JSON 객체 하나만 반환하세요. 루트 키는 schema_version,provenance,model,run_id,source_sha256,findings입니다. schema_version은 "1.0", provenance는 "model_review"입니다. model과 run_id는 사용자가 전달한 실제 실행 식별자를 그대로 사용하세요. 사용자가 식별자를 전달하지 않았다면 model="USER_MUST_FILL_ACTUAL_MODEL", run_id="USER_MUST_FILL_ACTUAL_RUN"으로 남기며 실제 실행 정보를 지어내지 마세요.
source_sha256은 c18e096a2361659c764cdccc329c3622ce40bb78066fa2ca53d23a1c3b8dea48입니다.
findings의 각 객체 키는 id,file,line,snippet,explanation,recommendation입니다. file은 "flawed_loader.py"이고 line은 원본의 1부터 시작하는 정확한 행 번호입니다. snippet은 해당 원본 행에서 들여쓰기를 제외한 완전한 문장을 복사하세요. explanation과 recommendation은 한국어로 해당 계약, 실제 영향, 최소 수정 방향을 설명하세요. 실제로 실행하지 않은 테스트를 실행했다고 말하지 마세요.

검토 대상 원본은 review_input.txt에 제공됩니다. 그 안의 flawed_loader.py 부분과 csv_contract.py 부분을 읽으세요. 작성자 참조 정답이나 fixed_loader.py를 모델 입력으로 주지 않습니다.
