Skip to content

docs+safety: 바꾸는 범위/한계 명시 + --force 덮어쓰기 경고 - #4

Merged
wonjun-lab merged 3 commits into
mainfrom
docs/scope-limits-and-force-warning
Jun 2, 2026
Merged

docs+safety: 바꾸는 범위/한계 명시 + --force 덮어쓰기 경고#4
wonjun-lab merged 3 commits into
mainfrom
docs/scope-limits-and-force-warning

Conversation

@wonjun-lab

Copy link
Copy Markdown
Owner

배경 — 확장자/형식·압축·정규화구분 FS·예외 케이스 검토 후속

확장자/형식 다양성, 압축 파일, 정규화-구분 FS, 예외 케이스를 직접 + 4개 차원 멀티 에이전트 워크플로우(27건 confirmed)로 검토했습니다. 20건이 INFO(안정성 확인) — nfd2nfc는 이름만 정규화하고 내용·형식·메타데이터를 완전히 보존함이 광범위하게 입증됐습니다. 실질 조치 대상만 반영합니다.

✅ 검토로 확인된 안정성 (조치 불필요)

  • 확장자/형식 무관: 17종(png·jpg·pdf·hwp·hwpx·docx·xlsx·tar.gz·…) 전부 이름만 NFC, md5·inode·매직바이트·file(1) 인식 보존.
  • 메타데이터 보존: xattr·Finder 태그·quarantine·리소스포크·권한·mtime 모두 유지(rename(2) 기반).
  • 경계 케이스: 결합문자 확장자·이모지·선두점·하드링크·255바이트 경계·비-UTF8(APFS가 거부)·심링크 미추적 — 전부 정상.

🔧 조치

1) --force 덮어쓰기 경고 (safety) — 형식/FS 검토에서 --force가 충돌 시 기존 파일을 백업·확인 없이 영구 삭제하는 무방비 경로가 드러남. 실제 덮어쓰기가 일어날 때 덮어씀(기존 항목 영구 삭제): <new> 경고를 출력(loud opt-in). 단 이 충돌은 정규화-구분 FS에서만 발생 — APFS/HFS+/exFAT 등 macOS 네이티브 볼륨에선 NFD/NFC가 같은 inode라 충돌 자체가 생성 불가(데드 경로).

2) README "바꾸는 범위" 섹션 (docs) — 사용자 오해가 큰 한계를 명시:

  • 압축 파일 내부 엔트리명은 스코프 밖zip/tar/hwpx/docx는 파일 자체 이름만 정규화, 내부 NFD 엔트리는 그대로(다른 OS에서 여전히 깨짐). macOS zip이 내부를 NFD로 저장함을 실측 확인.
  • .app 번들 통째 정리 시 코드서명 무효화 주의.
  • --force 데이터 손실은 정규화-구분 볼륨 한정.

3) 회귀 테스트 (test) — 압축 파일 외부명만 정규화되고 내부 엔트리명·아카이브 내용은 불변임을 검증(스코프 한계 가드).

검증

  • perl -c / shellcheck(4파일) / ./test.sh 19/19(신규: 압축 내부 불변)

형식/FS 검토에서 --force가 충돌 시 기존 파일을 백업·확인 없이 영구 삭제하는
무방비 경로가 드러남(정규화-구분 FS 한정 — APFS/HFS+에선 충돌 자체가 불가).
실제 덮어쓰기가 일어날 때 '덮어씀(기존 항목 영구 삭제): <new>' 경고를 출력(loud opt-in).
zip 외부명만 정규화되고 내부 엔트리명(NFD)·아카이브 내용은 불변임을 검증(스코프 한계). 통과 19/19.
형식/FS 검토 결과 문서화: 파일 내용·형식 무관, 압축 내부 엔트리명은 스코프 밖,
.app 번들 서명 주의, --force 데이터 손실은 정규화-구분 볼륨 한정. CHANGELOG 기록.
@wonjun-lab
wonjun-lab merged commit 10505df into main Jun 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant