Files
readme-haness/README.md
T

108 lines
6.6 KiB
Markdown

# README Harness
README Harness는 Codex및 claude가 저장소에서 확인한 사실과 사용자가 지시한 목적을 기반으로 GitHub README를 만드는 검증 중심 Python 도구입니다. 명령, 경로, 링크, Markdown 구조와 비밀 값 노출을 검사하고 별도 품질 검토를 거친 패치를 제공하며, 사용자가 적용하기 전에는 원본 `README.md`를 바꾸지 않습니다.
대상 저장소를 처음 문서화하거나 기존 README의 정확성과 읽기 흐름을 함께 점검하려는 개발자를 위한 도구입니다. 현재는 Codex와 claude만 지원합니다.
## 빠른 시작
1. Python 3.12 이상이 설치된 환경에서 이 저장소를 전용 가상환경에 설치합니다.
```bash
python3 -m venv .venv
.venv/bin/python -m pip install -e .
```
2. Codex 및 claude에 대상 저장소, 주 독자, README의 목적을 알려 줍니다. `/work/acme-api`는 설명을 위한 예시 경로이므로 실제 대상의 절대 경로로 바꿉니다.
> `requirement-driven-readme` 스킬로 `/work/acme-api`의 README를 작성해 주세요. 처음 API를 연동하는 백엔드 개발자가 5분 안에 로컬 실행과 테스트를 마치는 것이 목표입니다.
>
3. 작업이 끝나면 대상 저장소의 `.readme-harness/README.generated.md`를 먼저 읽고 `README.patch`에서 기존 문서와의 차이를 확인합니다. `validation.json`의 `status`가 `READY`이고 `review.json`의 `verdict`가 `PASS`여야 적용할 수 있습니다.
4. 생성본에 동의할 때만 적용합니다.
```bash
.venv/bin/readme-harness apply /work/acme-api
```
적용 명령은 검토 이후 생성본, 검토 결과, 대상 README 또는 저장소가 바뀌었으면 중단됩니다.
## 작업 선택
| 목적 | 시작 방법 | 결과 |
| ------------------------------- | ------------------------------------------------ | ----------------------------- |
| 새 README 작성 또는 전면 재작성 | Codex에`requirement-driven-readme` 스킬로 요청 | 검증·검토된 후보와 전체 패치 |
| 기존 README의 사실과 형식 점검 | `audit` 하위 명령 실행 | 사실 목록과 검증 결과 |
| 승인한 후보 적용 | `apply` 하위 명령 실행 | 대상`README.md` 교체 |
기존 README만 점검하려면 다음 명령을 실행합니다. 감사 작업은 문장이나 패치를 생성하지 않습니다.
```bash
.venv/bin/readme-harness audit /work/acme-api
```
## 생성 흐름
1. 작성자는 사용자 요구와 저장소를 읽고 일반 Markdown 초안과 근거가 있는 사실 목록을 만듭니다.
2. 하네스는 초안을 검사하고 `README.generated.md`와 `README.patch`를 준비합니다. 첫 검증 통과 결과는 `REVIEW_REQUIRED`이며 원본 README는 그대로 남습니다.
3. 읽기 전용 검토자가 GitHub 방문자에게 보일 생성본을 평가합니다. `NEEDS_FIX`이면 작성자가 한 번만 수정하고 전체 검증과 검토를 다시 실행합니다.
4. 검토까지 통과한 실행은 `READY`가 됩니다. 이후 사용자가 `apply`를 실행해야 대상 README가 바뀝니다.
이 절차는 작성과 품질 판단을 Codex가 맡고, 반복 가능한 형식·경로·명령 검사를 코드가 맡도록 경계를 나눕니다.
## 결과 파일
모든 결과는 기본적으로 대상 저장소의 `.readme-harness/`에 기록됩니다.
| 파일 | 확인할 내용 |
| ----------------------- | --------------------------------------- |
| `README.generated.md` | GitHub에 표시될 최종 후보 |
| `README.patch` | 현재 README와 후보 전체 차이 |
| `validation.json` | 검사별 오류·경고와 현재 적용 가능 상태 |
| `facts.json` | 프로젝트 정보, 명령, 근거 파일 |
| `review.json` | 생성본에 결합된 별도 품질 검토 결과 |
첫 생성 단계에는 앞의 네 파일만 존재합니다. 품질 검토를 실행한 뒤 `review.json`이 추가됩니다. 검증에 실패하면 이유는 `validation.json`에 남고 적용 가능한 패치는 제공되지 않습니다.
## 검사와 적용 보호
- 사실 근거와 README 대상, 상대 링크가 저장소 안에 있는지 확인하며 저장소 밖을 가리키는 심볼릭 링크를 따라가지 않습니다.
- 코드 블록 닫힘, 제목 단계와 중복 앵커, 이미지 대체 텍스트, 이식할 수 없는 로컬 링크를 검사합니다.
- README에 적힌 명령을 프로젝트 메타데이터와 저장소 파일을 기준으로 정적으로 확인합니다.
- README와 사실 파일에서 할당된 비밀 값, 자격 증명이 든 연결 문자열, 개인 키, AWS 액세스 키 형식을 검사합니다.
- 적용 직전에 생성본, 검토 파일, 대상 README와 저장소의 해시를 다시 비교합니다.
- 파일 교체는 임시 파일을 완성한 뒤 원자적으로 수행합니다.
## Python API
명령줄 대신 `readme_harness.build_readme(...)`를 호출할 수 있습니다. 이 함수는 초안과 사실 목록을 검증하지만 대상 README를 직접 수정하지 않습니다.
```python
from readme_harness import build_readme
result = build_readme(
"/work/acme-api",
"/tmp/acme-readme.md",
facts="/tmp/acme-facts.json",
)
print(result.status)
```
함수의 입력과 산출물 경계, 외부 사실 결합 방식은 [아키텍처 문서](docs/architecture.md)에 정리되어 있습니다.
## 개발
개발 의존성을 설치한 뒤 전체 테스트를 실행합니다.
```bash
.venv/bin/python -m pip install -e ".[dev]"
.venv/bin/python -m pytest -q
```
테스트는 `tests/`에 있으며, GitHub Actions도 Python 3.12에서 같은 테스트 명령을 실행합니다. CLI 진입점은 `readme_harness.cli:main`, 공개 Python 진입점은 `readme_harness.build_readme(...)`입니다.
## 현재 한계
- 문장과 정보 구조는 Codex및 claude가 작성합니다. CLI 자체는 저장소만 보고 새 README 문장을 생성하지 않습니다.
- 명령 검증은 프로젝트 선언과 파일을 이용한 정적 검사입니다. 외부 서비스, 자격 증명, 배포 환경에서의 실행 성공까지 보장하지 않습니다.
- 생성 후보는 README 전체 문서입니다. 기존 문서의 일부 구역만 자동 병합하지 않으므로 적용 전에 전체 패치를 확인해야 합니다.
- 자동 수정 기회는 한 번입니다. 두 번째 품질 검토도 통과하지 못하면 남은 문제를 사용자에게 돌려줍니다.