P25 가상 입력의 직접 검산 기준

main.csv
A01 docs/a.txt -> present, 24 bytes
A02 docs/missing.txt -> missing, not_found
A03 ../private.txt -> out_of_scope, parent_component; 이 경로를 조회하지 않음
1 present + 1 missing + 1 out_of_scope + 0 hold = 3 records
정확한 유효 경로의 중복 그룹 0, 중복 경고 행 0, 종료코드 1

normal.csv: 2+0+0+0=2, 중복 경고 행 0, 종료 0
duplicates.csv: 3+0+0+0=3, D01/D02가 같은 docs/a.txt 참조, 경고 행 2, 종료 1
중복 경고 2는 위 3행에 포함된 보조 표시이므로 3+2로 입력 행 수를 계산하지 않음
case_distinct.csv: Linux의 1+1+0+0=2, 대소문자 다른 경로를 같은 파일로 판정하지 않음, 종료 1
paths.csv: 0+0+13+0=13, 유효 경로 중복 그룹 0, 종료 1
directory.csv: 0+0+0+1=1, 일반 파일이 아니므로 보류, 종료 1
missing_parent.csv: 0+1+0+0=1, 상위 폴더가 없으므로 누락, 종료 1

첨부 파일 자체의 종류/크기 기대값
fixtures/root/docs/a.txt: 일반 파일, 24 bytes = 23 ASCII characters + LF 1
fixtures/root/docs/b.txt: 일반 파일, 24 bytes = 23 ASCII characters + LF 1
fixtures/root/unrelated.txt: 일반 파일, 37 bytes; 점검 목록에 없으므로 조회하지 않음
기본 fixture에는 심볼릭 링크/하드 링크/FIFO가 없음; 해당 반례는 테스트가 새 임시 폴더에서 생성

expected/*.json은 고정 기준이며 source_sha256과 실제 절대 root 경로는 제외됨
source_sha256은 현재 입력 CSV 바이트로 별도 계산해 대조함
파일 내용이 맞다는 정답, PDF 형식 정답, 업무상 증빙 승인 정답은 없음

root는 실제 --root로 지정한 폴더의 absolute 문자열과 별도로 대조함
