chore: 저장소 구조 정리 및 문서화, 첫 커밋

- src/dist 산출물 분리 원칙 정리(.gitignore, .gitattributes)
- 루트 및 주요 폴더(config/scripts/prompts/tests/src, 런타임 폴더 5종)에
  안내용 README.md 추가
- CHANGELOG.md, LICENSE, docs/ops/05-release-and-versioning.md 추가
- docs/README.md 문서 지도 갱신
This commit is contained in:
Yun Chan 2026-09-04 09:25:44 +09:00
commit 56a6e2da93
159 changed files with 145825 additions and 0 deletions

31
tests/README.md Normal file
View file

@ -0,0 +1,31 @@
# `tests/` — 테스트
이 프로젝트는 **No RED, No Code**로 개발한다(`AGENTS.md` §1). `src/`의 모든 기능은
여기 어딘가에 그 기능을 실패시켰던 RED가 있어야 한다.
```powershell
.\.venv\Scripts\python.exe -m pytest tests -q
```
네트워크·실제 API 키가 필요한 테스트는 기본 실행에 포함하지 않는다(마커 `network`,
`pyproject.toml` 참고). fixture/mock으로 대체하고, 실제 nedrug/공공데이터포털 호출은
사용자 승인 후 수동 smoke로 분리한다.
## 파일
| 파일 | 무엇을 검증하는가 |
|---|---|
| `conftest.py` | 임시 DB·설정 fixture, 네트워크 차단 fixture |
| `test_project_contracts.py` | R0 계약 — 모듈이 존재하고 임포트되는지, CLI 최소 동작 |
| `test_normalize.py` | 원본 필드 → `DmfRecord` 정규화, `dmf_key` 안정성 |
| `test_storage_repo.py` | SQLite 저장소 read/write 경로, append-only 무결성 |
| `test_import_prototype_xlsx.py` | 기존 프로토타입 xlsx(9,084건) 임포트 |
| `test_agy_headful_collection.py` | AGY headful Chrome 수집 경로 — 권한 스코프, 다운로드 검증, 실패 보고 |
| `test_pipeline_preflight_ux.py` | 파이프라인 사전 점검과 사용자에게 보이는 문구 |
| `test_gui_design_contracts.py` | tkinter 온보딩 GUI 디자인 감사(레이아웃 붕괴, overflow, 라벨 누락 등) |
| `test_report_e2e_design.py` | 실제 SQLite → 실제 xlsx 생성 → zip/XML 구조 감사(시트 순서, 틀고정, 조건부서식 등) |
| `test_ux_regressions.py` | 실사용자 제보 회귀(cp949 콘솔, 선택 기능 정책, 버튼 가독성 등) |
| `fixtures/` | API 응답 샘플, agy 응답 봉투(정상/오염), diff 비교용 스냅샷 |
디자인 감사 RED의 구체 기준(무엇을 RED로 잡아야 하는가)은
`docs/design/07-tdd-red-system.md` R4/R5가 정본이다.