init: readme 작성 하네스 설계
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
# README Harness
|
||||
|
||||
이 하네스는 저장소의 실제 코드와 사용 목적을 바탕으로 문서 후보를 만들고,
|
||||
명령·경로·근거를 검사한 뒤 검토 가능한 패치로 제공합니다. <!-- claim-id: C-PROJECT-001 -->
|
||||
|
||||
- 새 README 작성
|
||||
- 기존 문서 점검
|
||||
- 사람 작성 영역을 보존한 갱신
|
||||
- 특정 섹션과 관련 검증 산출물의 재생성
|
||||
- 검토 후 별도로 실행하는 적용
|
||||
|
||||
<!-- section-id: overview -->
|
||||
## 무엇을 만드는가
|
||||
|
||||
README를 새로 만들거나 기존 문서를 안전하게 갱신하려는 개발자를 위한 도구입니다.
|
||||
|
||||
`bootstrap`, `audit`, `refresh`, `section-update` 네 모드를 구현했습니다. <!-- claim-id: C-MODE-001 -->
|
||||
|
||||
저장소 근거와 사용자 요구를 분리해 읽고, 고위험 사실을 근거에 연결합니다. 그림을
|
||||
넣기로 했다면 실제 소스나 자산까지 확인하고, 품질 심사는 원문의 줄과 해시에 묶인
|
||||
근거를 사용합니다. 패치 준비가 끝나도 대상 `README.md`는 자동으로 바뀌지 않습니다.
|
||||
<!-- claim-id: C-SAFETY-SUMMARY-001 -->
|
||||
|
||||
결정론적 Codex 경로는 구현됐습니다. 후보 문장 작성은 모델 파이프라인이 담당하며,
|
||||
다른 도구와의 런타임 동등성은 Phase 4 검증 전까지 보장하지 않습니다.
|
||||
<!-- claim-id: C-LIMIT-001 -->
|
||||
|
||||
<!-- section-id: installation -->
|
||||
## 설치
|
||||
|
||||
`Python` 3.12 이상이 필요합니다.
|
||||
런타임 의존성은 `jsonschema`와 `PyYAML`입니다.
|
||||
개발 의존성은 `pytest`입니다. <!-- claim-id: C-RUNTIME-001 -->
|
||||
|
||||
저장소 루트에서 개발 의존성을 포함한 편집 가능 설치를 실행합니다.
|
||||
|
||||
```bash
|
||||
python3 -m pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
이 설치 명령은 프로젝트 선언에서 확인했지만, 현재 작업에서는 새 가상환경 설치까지
|
||||
실행해 증명하지 않았습니다. <!-- claim-id: C-INSTALL-001 -->
|
||||
|
||||
<!-- section-id: quick-start -->
|
||||
## 빠른 시작
|
||||
|
||||
먼저 전체 테스트를 실행합니다.
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q
|
||||
```
|
||||
|
||||
종료 코드 0과 실패 항목 없는 통과 요약이 성공 기준입니다. 이 후보는 아직 현재
|
||||
README를 바꾸지 않았으므로 최종 전체 결과는 명시적 적용 뒤 다시 확인합니다.
|
||||
|
||||
자체 README 테스트는 이 명령을 최소 실행 경로로 요구합니다. 다른 운영체제와 새
|
||||
가상환경의 동일한 결과까지 보장하는 계약은 아닙니다. <!-- claim-id: C-TEST-COMMAND-001 -->
|
||||
|
||||
이 프로젝트는 명령 하나로 문서를 완성하는 독립 실행 도구가 아닙니다. Codex 작업 공간에서
|
||||
`requirement-driven-readme` 스킬로 대상 저장소의 `bootstrap` 실행을 요청하면 작성
|
||||
역할이 사용자 요구, 저장소 근거, 개요, 후보, 주장 지도, 그림 계획과 품질 심사
|
||||
산출물을 준비합니다. <!-- claim-id: C-AUTHORING-001 -->
|
||||
|
||||
대상 저장소용 실행 디렉터리를 만듭니다.
|
||||
|
||||
```bash
|
||||
python3 .agents/skills/requirement-driven-readme/scripts/init_run.py --repo-id demo --run-id first --mode bootstrap --target-repository /path/to/repository --tool-adapter codex
|
||||
```
|
||||
|
||||
이 명령은 `runs/demo/first`에 상태와 실행 매니페스트를 초기화합니다.
|
||||
<!-- claim-id: C-INIT-001 -->
|
||||
|
||||
실행 디렉터리에 `readme-request.yaml`, `repository-facts.yaml`, `readme-brief.yaml`,
|
||||
`readme-outline.yaml`, `README.candidate.md`, `claim-map.yaml`, `visual-plan.yaml`,
|
||||
`review-findings.yaml`이 준비되면 모든 결정론적 게이트를 재생합니다.
|
||||
|
||||
```bash
|
||||
python3 .agents/skills/requirement-driven-readme/scripts/run_bootstrap.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
```
|
||||
|
||||
드라이버는 후보를 새로 쓰지 않고 준비된 산출물을 `QUALITY_REVIEWED`까지
|
||||
검증합니다. <!-- claim-id: C-BOOTSTRAP-001 -->
|
||||
|
||||
<!-- section-id: usage -->
|
||||
## 사용 모드
|
||||
|
||||
| 작업 | 모드 | 결과 |
|
||||
|---|---|---|
|
||||
| README가 없거나 전면 재작성 | `bootstrap` | 검증된 후보와 적용 준비용 패치 |
|
||||
| 기존 문서의 결함만 점검 | `audit` | 감사 결과와 검증 보고서, 후보·패치 없음 |
|
||||
| 사람 작성 영역을 보존한 갱신 | `refresh` | 3방향 병합과 병합본 전체 재검증 |
|
||||
| 한 섹션과 파급 산출물 갱신 | `section-update` | 관련 산출물 무효화 후 갱신 검증 재실행 |
|
||||
|
||||
네 모드는 요청 스키마에 선언되어 있고 각 흐름의 상태·게이트 계약이 구현되어
|
||||
있습니다. <!-- claim-id: C-USAGE-001 -->
|
||||
|
||||
<!-- section-id: api -->
|
||||
## 요청 API, 설정과 산출물
|
||||
|
||||
`readme-request.yaml`은 독자, 언어, 길이, 보존 범위, 공개 용어, 그림 정책을
|
||||
정합니다. 기술 사실은 `repository-facts.yaml`에 저장하고, 각 실행은
|
||||
`runs/<repo-id>/<run-id>` 아래에서 격리합니다. <!-- claim-id: C-INPUT-001 -->
|
||||
|
||||
어댑터가 제공하는 단계별 모델 사용량은 실행 매니페스트에 누적합니다. 제공되지
|
||||
않은 값은 0으로 추정하지 않습니다. <!-- claim-id: C-USAGE-METRICS-001 -->
|
||||
|
||||
대표 산출물은 다음 순서로 이어집니다.
|
||||
|
||||
```text
|
||||
readme-brief.yaml + readme-outline.yaml
|
||||
README.candidate.md + claim-map.yaml + visual-plan.yaml
|
||||
prose-report.json + verification.json + review-findings.yaml
|
||||
quality-manifest.yaml
|
||||
README.generated.md + README.patch + apply-manifest.yaml
|
||||
```
|
||||
|
||||
품질 검토를 통과한 뒤 다음 명령으로 패치를 준비합니다.
|
||||
|
||||
```bash
|
||||
python3 .agents/skills/requirement-driven-readme/scripts/generate_patch.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
```
|
||||
|
||||
이 단계는 `README.generated.md`, `README.patch`, `apply-manifest.yaml`을 만들고
|
||||
상태를 `READY_FOR_APPLY`로 전진시킵니다. <!-- claim-id: C-PREPARE-001 -->
|
||||
|
||||
검토가 끝난 패치만 별도 명령으로 적용합니다.
|
||||
|
||||
```bash
|
||||
python3 .agents/skills/requirement-driven-readme/scripts/apply_patch.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
```
|
||||
|
||||
적용 직전에 후보·저장소·대상 README 해시와 경로 경계를 다시 검사합니다.
|
||||
<!-- claim-id: C-APPLY-001 -->
|
||||
|
||||
<!-- section-id: architecture -->
|
||||
## 동작 방식
|
||||
|
||||
사용자 요구는 독자 흐름과 공개 용어, 그림 결정을 만듭니다. 대상 저장소에서는
|
||||
근거와 프로젝트 유형을 수집합니다. 두 입력이 합쳐진 후보와 시각 자료는 결정론적
|
||||
게이트와 독립 품질 심사를 통과해야 패치가 됩니다. <!-- claim-id: C-FLOW-001 -->
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
T[Codex / Claude / Antigravity] --> O[실행 조정]
|
||||
U[사용자 요구] --> P[독자 흐름·용어·그림 결정]
|
||||
R[대상 저장소] --> E[근거 수집·프로젝트 분류]
|
||||
O --> E
|
||||
O --> P
|
||||
E --> P
|
||||
P --> W[README 작성]
|
||||
P --> V[그림 소스·자산 생성]
|
||||
W --> G[근거·명령·경로·문체 검사]
|
||||
V --> G
|
||||
G --> Q[독립 품질 심사]
|
||||
Q -->|수정 필요| P
|
||||
Q -->|통과| A[패치 준비·명시적 적용]
|
||||
H[(해시 기반 실행 산출물)] --- E
|
||||
H --- P
|
||||
H --- G
|
||||
H --- A
|
||||
```
|
||||
|
||||
<!-- visual-id: harness-flow -->
|
||||
|
||||
구성요소 책임과 컨텍스트 경계는 [아키텍처 문서](docs/architecture.md)에,
|
||||
모드별 전이는 [상태기계 문서](docs/state-machine.md)에 정리했습니다.
|
||||
|
||||
<!-- section-id: safeguards -->
|
||||
## 안전장치
|
||||
|
||||
- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.
|
||||
- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을
|
||||
차단합니다. <!-- claim-id: C-TERM-001 -->
|
||||
- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이
|
||||
일치해야 시각 자료 게이트를 통과합니다. <!-- claim-id: C-VISUAL-001 -->
|
||||
- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,
|
||||
`review.md`는 검증된 YAML에서 렌더링합니다. <!-- claim-id: C-REVIEW-001 -->
|
||||
- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로
|
||||
전진합니다. <!-- claim-id: C-AUDIT-001 -->
|
||||
- 갱신 모드는 보호 영역과 마커 밖 문장을 보존하며, 사람이 고친 관리 영역과 새
|
||||
후보가 충돌하면 자동 적용을 막습니다. <!-- claim-id: C-MERGE-001 -->
|
||||
- 비밀 값, 저장소 밖 경로, 오래된 스냅숏, 검토 뒤 바뀐 산출물은 패치 준비나
|
||||
적용을 차단합니다. <!-- claim-id: C-APPLY-SAFETY-001 -->
|
||||
|
||||
시각 자료의 소스·자산·대체 텍스트·신선도 규칙은
|
||||
[시각 자료 정책](docs/visuals.md)에서 확인할 수 있습니다.
|
||||
|
||||
<!-- section-id: tests -->
|
||||
## 테스트
|
||||
|
||||
전체 회귀 테스트는 다음 명령으로 실행합니다.
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q
|
||||
```
|
||||
|
||||
GitHub Actions는 의존성을 설치한 뒤 전체 테스트를 실행합니다. 실행 환경은
|
||||
Python 3.12입니다. 자체 README 테스트는 라이브러리 프로파일, 30초 독자 흐름, 최소 실행
|
||||
경로, Mermaid 그림 결정을 확인합니다. <!-- claim-id: C-CI-001 -->
|
||||
|
||||
<!-- section-id: documentation -->
|
||||
## 상세 문서
|
||||
|
||||
- [구성요소와 컨텍스트 경계](docs/architecture.md)
|
||||
- [그림 결정과 소스·자산 계약](docs/visuals.md)
|
||||
- [모드별 상태와 차단 조건](docs/state-machine.md)
|
||||
- [모델 사용량 계측](docs/usage-metrics.md)
|
||||
- [블라인드 README 품질 벤치마크](docs/quality-benchmark.md)
|
||||
- [전체 설계 명세](docs/superpowers/specs/2026-07-16-readme-harness-design.md)
|
||||
|
||||
주요 구현은 `src/readme_harness`, 스키마·규칙·워크플로는 `.agents`, 테스트는
|
||||
`tests`에 있습니다. <!-- claim-id: C-LAYOUT-001 -->
|
||||
|
||||
<!-- section-id: limitations -->
|
||||
## 현재 한계
|
||||
|
||||
- 후보 작성은 LLM 파이프라인의 판단에 의존합니다. 결정론적 드라이버는 준비된
|
||||
산출물을 검증하고 상태를 전진시킵니다.
|
||||
- 네 모드의 결정론적 경로는 구현됐지만 도구 간 런타임 동등성은 Phase 4 검증
|
||||
목표입니다. <!-- claim-id: C-LIMIT-002 -->
|
||||
- 명령 검증 보고서의 기본 수준은 정적 검사입니다. 실행을 별도로 기록하지 않은
|
||||
명령은 실제 실행 성공을 뜻하지 않습니다. <!-- claim-id: C-VERIFY-LIMIT-001 -->
|
||||
- 여덟 저장소 유형의 블라인드 비교 계약은 마련했지만 결과 상태는 아직 `not-run`입니다.
|
||||
`PASS` 결과 전에는 품질 우월성을 주장하지 않습니다. <!-- claim-id: C-BENCH-LIMIT-001 -->
|
||||
@@ -0,0 +1,224 @@
|
||||
# README Harness
|
||||
|
||||
이 하네스는 저장소의 실제 코드와 사용 목적을 바탕으로 문서 후보를 만들고,
|
||||
명령·경로·근거를 검사한 뒤 검토 가능한 패치로 제공합니다. <!-- claim-id: C-PROJECT-001 -->
|
||||
|
||||
- 새 README 작성
|
||||
- 기존 문서 점검
|
||||
- 사람 작성 영역을 보존한 갱신
|
||||
- 특정 섹션과 관련 검증 산출물의 재생성
|
||||
- 검토 후 별도로 실행하는 적용
|
||||
|
||||
<!-- section-id: overview -->
|
||||
## 무엇을 만드는가
|
||||
|
||||
README를 새로 만들거나 기존 문서를 안전하게 갱신하려는 개발자를 위한 도구입니다.
|
||||
|
||||
`bootstrap`, `audit`, `refresh`, `section-update` 네 모드를 구현했습니다. <!-- claim-id: C-MODE-001 -->
|
||||
|
||||
저장소 근거와 사용자 요구를 분리해 읽고, 고위험 사실을 근거에 연결합니다. 그림을
|
||||
넣기로 했다면 실제 소스나 자산까지 확인하고, 품질 심사는 원문의 줄과 해시에 묶인
|
||||
근거를 사용합니다. 패치 준비가 끝나도 대상 `README.md`는 자동으로 바뀌지 않습니다.
|
||||
<!-- claim-id: C-SAFETY-SUMMARY-001 -->
|
||||
|
||||
결정론적 Codex 경로는 구현됐습니다. 후보 문장 작성은 모델 파이프라인이 담당하며,
|
||||
다른 도구와의 런타임 동등성은 Phase 4 검증 전까지 보장하지 않습니다.
|
||||
<!-- claim-id: C-LIMIT-001 -->
|
||||
|
||||
<!-- section-id: installation -->
|
||||
## 설치
|
||||
|
||||
`Python` 3.12 이상이 필요합니다.
|
||||
런타임 의존성은 `jsonschema`와 `PyYAML`입니다.
|
||||
개발 의존성은 `pytest`입니다. <!-- claim-id: C-RUNTIME-001 -->
|
||||
|
||||
저장소 루트에서 개발 의존성을 포함한 편집 가능 설치를 실행합니다.
|
||||
|
||||
```bash
|
||||
python3 -m pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
이 설치 명령은 프로젝트 선언에서 확인했지만, 현재 작업에서는 새 가상환경 설치까지
|
||||
실행해 증명하지 않았습니다. <!-- claim-id: C-INSTALL-001 -->
|
||||
|
||||
<!-- section-id: quick-start -->
|
||||
## 빠른 시작
|
||||
|
||||
먼저 전체 테스트를 실행합니다.
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q
|
||||
```
|
||||
|
||||
종료 코드 0과 실패 항목 없는 통과 요약이 성공 기준입니다. 이 후보는 아직 현재
|
||||
README를 바꾸지 않았으므로 최종 전체 결과는 명시적 적용 뒤 다시 확인합니다.
|
||||
|
||||
자체 README 테스트는 이 명령을 최소 실행 경로로 요구합니다. 다른 운영체제와 새
|
||||
가상환경의 동일한 결과까지 보장하는 계약은 아닙니다. <!-- claim-id: C-TEST-COMMAND-001 -->
|
||||
|
||||
이 프로젝트는 명령 하나로 문서를 완성하는 독립 실행 도구가 아닙니다. Codex 작업 공간에서
|
||||
`requirement-driven-readme` 스킬로 대상 저장소의 `bootstrap` 실행을 요청하면 작성
|
||||
역할이 사용자 요구, 저장소 근거, 개요, 후보, 주장 지도, 그림 계획과 품질 심사
|
||||
산출물을 준비합니다. <!-- claim-id: C-AUTHORING-001 -->
|
||||
|
||||
대상 저장소용 실행 디렉터리를 만듭니다.
|
||||
|
||||
```bash
|
||||
python3 .agents/skills/requirement-driven-readme/scripts/init_run.py --repo-id demo --run-id first --mode bootstrap --target-repository /path/to/repository --tool-adapter codex
|
||||
```
|
||||
|
||||
이 명령은 `runs/demo/first`에 상태와 실행 매니페스트를 초기화합니다.
|
||||
<!-- claim-id: C-INIT-001 -->
|
||||
|
||||
실행 디렉터리에 `readme-request.yaml`, `repository-facts.yaml`, `readme-brief.yaml`,
|
||||
`readme-outline.yaml`, `README.candidate.md`, `claim-map.yaml`, `visual-plan.yaml`,
|
||||
`review-findings.yaml`이 준비되면 모든 결정론적 게이트를 재생합니다.
|
||||
|
||||
```bash
|
||||
python3 .agents/skills/requirement-driven-readme/scripts/run_bootstrap.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
```
|
||||
|
||||
드라이버는 후보를 새로 쓰지 않고 준비된 산출물을 `QUALITY_REVIEWED`까지
|
||||
검증합니다. <!-- claim-id: C-BOOTSTRAP-001 -->
|
||||
|
||||
<!-- section-id: usage -->
|
||||
## 사용 모드
|
||||
|
||||
| 작업 | 모드 | 결과 |
|
||||
|---|---|---|
|
||||
| README가 없거나 전면 재작성 | `bootstrap` | 검증된 후보와 적용 준비용 패치 |
|
||||
| 기존 문서의 결함만 점검 | `audit` | 감사 결과와 검증 보고서, 후보·패치 없음 |
|
||||
| 사람 작성 영역을 보존한 갱신 | `refresh` | 3방향 병합과 병합본 전체 재검증 |
|
||||
| 한 섹션과 파급 산출물 갱신 | `section-update` | 관련 산출물 무효화 후 갱신 검증 재실행 |
|
||||
|
||||
네 모드는 요청 스키마에 선언되어 있고 각 흐름의 상태·게이트 계약이 구현되어
|
||||
있습니다. <!-- claim-id: C-USAGE-001 -->
|
||||
|
||||
<!-- section-id: api -->
|
||||
## 요청 API, 설정과 산출물
|
||||
|
||||
`readme-request.yaml`은 독자, 언어, 길이, 보존 범위, 공개 용어, 그림 정책을
|
||||
정합니다. 기술 사실은 `repository-facts.yaml`에 저장하고, 각 실행은
|
||||
`runs/<repo-id>/<run-id>` 아래에서 격리합니다. <!-- claim-id: C-INPUT-001 -->
|
||||
|
||||
어댑터가 제공하는 단계별 모델 사용량은 실행 매니페스트에 누적합니다. 제공되지
|
||||
않은 값은 0으로 추정하지 않습니다. <!-- claim-id: C-USAGE-METRICS-001 -->
|
||||
|
||||
대표 산출물은 다음 순서로 이어집니다.
|
||||
|
||||
```text
|
||||
readme-brief.yaml + readme-outline.yaml
|
||||
README.candidate.md + claim-map.yaml + visual-plan.yaml
|
||||
prose-report.json + verification.json + review-findings.yaml
|
||||
quality-manifest.yaml
|
||||
README.generated.md + README.patch + apply-manifest.yaml
|
||||
```
|
||||
|
||||
품질 검토를 통과한 뒤 다음 명령으로 패치를 준비합니다.
|
||||
|
||||
```bash
|
||||
python3 .agents/skills/requirement-driven-readme/scripts/generate_patch.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
```
|
||||
|
||||
이 단계는 `README.generated.md`, `README.patch`, `apply-manifest.yaml`을 만들고
|
||||
상태를 `READY_FOR_APPLY`로 전진시킵니다. <!-- claim-id: C-PREPARE-001 -->
|
||||
|
||||
검토가 끝난 패치만 별도 명령으로 적용합니다.
|
||||
|
||||
```bash
|
||||
python3 .agents/skills/requirement-driven-readme/scripts/apply_patch.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
```
|
||||
|
||||
적용 직전에 후보·저장소·대상 README 해시와 경로 경계를 다시 검사합니다.
|
||||
<!-- claim-id: C-APPLY-001 -->
|
||||
|
||||
<!-- section-id: architecture -->
|
||||
## 동작 방식
|
||||
|
||||
사용자 요구는 독자 흐름과 공개 용어, 그림 결정을 만듭니다. 대상 저장소에서는
|
||||
근거와 프로젝트 유형을 수집합니다. 두 입력이 합쳐진 후보와 시각 자료는 결정론적
|
||||
게이트와 독립 품질 심사를 통과해야 패치가 됩니다. <!-- claim-id: C-FLOW-001 -->
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
T[Codex / Claude / Antigravity] --> O[실행 조정]
|
||||
U[사용자 요구] --> P[독자 흐름·용어·그림 결정]
|
||||
R[대상 저장소] --> E[근거 수집·프로젝트 분류]
|
||||
O --> E
|
||||
O --> P
|
||||
E --> P
|
||||
P --> W[README 작성]
|
||||
P --> V[그림 소스·자산 생성]
|
||||
W --> G[근거·명령·경로·문체 검사]
|
||||
V --> G
|
||||
G --> Q[독립 품질 심사]
|
||||
Q -->|수정 필요| P
|
||||
Q -->|통과| A[패치 준비·명시적 적용]
|
||||
H[(해시 기반 실행 산출물)] --- E
|
||||
H --- P
|
||||
H --- G
|
||||
H --- A
|
||||
```
|
||||
|
||||
<!-- visual-id: harness-flow -->
|
||||
|
||||
구성요소 책임과 컨텍스트 경계는 [아키텍처 문서](docs/architecture.md)에,
|
||||
모드별 전이는 [상태기계 문서](docs/state-machine.md)에 정리했습니다.
|
||||
|
||||
<!-- section-id: safeguards -->
|
||||
## 안전장치
|
||||
|
||||
- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.
|
||||
- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을
|
||||
차단합니다. <!-- claim-id: C-TERM-001 -->
|
||||
- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이
|
||||
일치해야 시각 자료 게이트를 통과합니다. <!-- claim-id: C-VISUAL-001 -->
|
||||
- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,
|
||||
`review.md`는 검증된 YAML에서 렌더링합니다. <!-- claim-id: C-REVIEW-001 -->
|
||||
- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로
|
||||
전진합니다. <!-- claim-id: C-AUDIT-001 -->
|
||||
- 갱신 모드는 보호 영역과 마커 밖 문장을 보존하며, 사람이 고친 관리 영역과 새
|
||||
후보가 충돌하면 자동 적용을 막습니다. <!-- claim-id: C-MERGE-001 -->
|
||||
- 비밀 값, 저장소 밖 경로, 오래된 스냅숏, 검토 뒤 바뀐 산출물은 패치 준비나
|
||||
적용을 차단합니다. <!-- claim-id: C-APPLY-SAFETY-001 -->
|
||||
|
||||
시각 자료의 소스·자산·대체 텍스트·신선도 규칙은
|
||||
[시각 자료 정책](docs/visuals.md)에서 확인할 수 있습니다.
|
||||
|
||||
<!-- section-id: tests -->
|
||||
## 테스트
|
||||
|
||||
전체 회귀 테스트는 다음 명령으로 실행합니다.
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q
|
||||
```
|
||||
|
||||
GitHub Actions는 의존성을 설치한 뒤 전체 테스트를 실행합니다. 실행 환경은
|
||||
Python 3.12입니다. 자체 README 테스트는 라이브러리 프로파일, 30초 독자 흐름, 최소 실행
|
||||
경로, Mermaid 그림 결정을 확인합니다. <!-- claim-id: C-CI-001 -->
|
||||
|
||||
<!-- section-id: documentation -->
|
||||
## 상세 문서
|
||||
|
||||
- [구성요소와 컨텍스트 경계](docs/architecture.md)
|
||||
- [그림 결정과 소스·자산 계약](docs/visuals.md)
|
||||
- [모드별 상태와 차단 조건](docs/state-machine.md)
|
||||
- [모델 사용량 계측](docs/usage-metrics.md)
|
||||
- [블라인드 README 품질 벤치마크](docs/quality-benchmark.md)
|
||||
- [전체 설계 명세](docs/superpowers/specs/2026-07-16-readme-harness-design.md)
|
||||
|
||||
주요 구현은 `src/readme_harness`, 스키마·규칙·워크플로는 `.agents`, 테스트는
|
||||
`tests`에 있습니다. <!-- claim-id: C-LAYOUT-001 -->
|
||||
|
||||
<!-- section-id: limitations -->
|
||||
## 현재 한계
|
||||
|
||||
- 후보 작성은 LLM 파이프라인의 판단에 의존합니다. 결정론적 드라이버는 준비된
|
||||
산출물을 검증하고 상태를 전진시킵니다.
|
||||
- 네 모드의 결정론적 경로는 구현됐지만 도구 간 런타임 동등성은 Phase 4 검증
|
||||
목표입니다. <!-- claim-id: C-LIMIT-002 -->
|
||||
- 명령 검증 보고서의 기본 수준은 정적 검사입니다. 실행을 별도로 기록하지 않은
|
||||
명령은 실제 실행 성공을 뜻하지 않습니다. <!-- claim-id: C-VERIFY-LIMIT-001 -->
|
||||
- 여덟 저장소 유형의 블라인드 비교 계약은 마련했지만 결과 상태는 아직 `not-run`입니다.
|
||||
`PASS` 결과 전에는 품질 우월성을 주장하지 않습니다. <!-- claim-id: C-BENCH-LIMIT-001 -->
|
||||
@@ -0,0 +1,295 @@
|
||||
--- README.md (current)
|
||||
+++ README.md (candidate)
|
||||
@@ -1,77 +1,224 @@
|
||||
# README Harness
|
||||
|
||||
-A GitHub-README-specialized harness built around a shared core with entrypoints
|
||||
-for **Codex**, **Antigravity**, and **Claude**. It does not "prettify" READMEs —
|
||||
-it analyzes the facts that exist in a repository, judges project type and
|
||||
-audience, then iteratively produces and maintains a README with a readable
|
||||
-structure, verified run instructions, and planned (not decorative) visuals.
|
||||
-
|
||||
-> **Status:** `bootstrap`, `audit`, `refresh`, and `section-update` have
|
||||
-> deterministic Codex-path drivers and gates. The repository does **not** yet
|
||||
-> claim Claude/Antigravity runtime equivalence; that remains the Phase 4
|
||||
-> conformance goal.
|
||||
-
|
||||
-## Core idea
|
||||
-
|
||||
-Two authority sources: the **repository** (technical facts, always
|
||||
-evidence-backed) and **`readme-request.yaml`** (why the project exists, audience,
|
||||
-language, length, what to preserve). Every state transition is blocked by a
|
||||
-deterministic gate script. High-risk factual claims—commands, versions,
|
||||
-prerequisites, modules, dependency directions, endpoints, guarantees, and
|
||||
-limitations—are traced to repository facts via `claim-map.yaml`.
|
||||
-
|
||||
-## Layout
|
||||
+이 하네스는 저장소의 실제 코드와 사용 목적을 바탕으로 문서 후보를 만들고,
|
||||
+명령·경로·근거를 검사한 뒤 검토 가능한 패치로 제공합니다. <!-- claim-id: C-PROJECT-001 -->
|
||||
+
|
||||
+- 새 README 작성
|
||||
+- 기존 문서 점검
|
||||
+- 사람 작성 영역을 보존한 갱신
|
||||
+- 특정 섹션과 관련 검증 산출물의 재생성
|
||||
+- 검토 후 별도로 실행하는 적용
|
||||
+
|
||||
+<!-- section-id: overview -->
|
||||
+## 무엇을 만드는가
|
||||
+
|
||||
+README를 새로 만들거나 기존 문서를 안전하게 갱신하려는 개발자를 위한 도구입니다.
|
||||
+
|
||||
+`bootstrap`, `audit`, `refresh`, `section-update` 네 모드를 구현했습니다. <!-- claim-id: C-MODE-001 -->
|
||||
+
|
||||
+저장소 근거와 사용자 요구를 분리해 읽고, 고위험 사실을 근거에 연결합니다. 그림을
|
||||
+넣기로 했다면 실제 소스나 자산까지 확인하고, 품질 심사는 원문의 줄과 해시에 묶인
|
||||
+근거를 사용합니다. 패치 준비가 끝나도 대상 `README.md`는 자동으로 바뀌지 않습니다.
|
||||
+<!-- claim-id: C-SAFETY-SUMMARY-001 -->
|
||||
+
|
||||
+결정론적 Codex 경로는 구현됐습니다. 후보 문장 작성은 모델 파이프라인이 담당하며,
|
||||
+다른 도구와의 런타임 동등성은 Phase 4 검증 전까지 보장하지 않습니다.
|
||||
+<!-- claim-id: C-LIMIT-001 -->
|
||||
+
|
||||
+<!-- section-id: installation -->
|
||||
+## 설치
|
||||
+
|
||||
+`Python` 3.12 이상이 필요합니다.
|
||||
+런타임 의존성은 `jsonschema`와 `PyYAML`입니다.
|
||||
+개발 의존성은 `pytest`입니다. <!-- claim-id: C-RUNTIME-001 -->
|
||||
+
|
||||
+저장소 루트에서 개발 의존성을 포함한 편집 가능 설치를 실행합니다.
|
||||
+
|
||||
+```bash
|
||||
+python3 -m pip install -e ".[dev]"
|
||||
+```
|
||||
+
|
||||
+이 설치 명령은 프로젝트 선언에서 확인했지만, 현재 작업에서는 새 가상환경 설치까지
|
||||
+실행해 증명하지 않았습니다. <!-- claim-id: C-INSTALL-001 -->
|
||||
+
|
||||
+<!-- section-id: quick-start -->
|
||||
+## 빠른 시작
|
||||
+
|
||||
+먼저 전체 테스트를 실행합니다.
|
||||
+
|
||||
+```bash
|
||||
+python3 -m pytest -q
|
||||
+```
|
||||
+
|
||||
+종료 코드 0과 실패 항목 없는 통과 요약이 성공 기준입니다. 이 후보는 아직 현재
|
||||
+README를 바꾸지 않았으므로 최종 전체 결과는 명시적 적용 뒤 다시 확인합니다.
|
||||
+
|
||||
+자체 README 테스트는 이 명령을 최소 실행 경로로 요구합니다. 다른 운영체제와 새
|
||||
+가상환경의 동일한 결과까지 보장하는 계약은 아닙니다. <!-- claim-id: C-TEST-COMMAND-001 -->
|
||||
+
|
||||
+이 프로젝트는 명령 하나로 문서를 완성하는 독립 실행 도구가 아닙니다. Codex 작업 공간에서
|
||||
+`requirement-driven-readme` 스킬로 대상 저장소의 `bootstrap` 실행을 요청하면 작성
|
||||
+역할이 사용자 요구, 저장소 근거, 개요, 후보, 주장 지도, 그림 계획과 품질 심사
|
||||
+산출물을 준비합니다. <!-- claim-id: C-AUTHORING-001 -->
|
||||
+
|
||||
+대상 저장소용 실행 디렉터리를 만듭니다.
|
||||
+
|
||||
+```bash
|
||||
+python3 .agents/skills/requirement-driven-readme/scripts/init_run.py --repo-id demo --run-id first --mode bootstrap --target-repository /path/to/repository --tool-adapter codex
|
||||
+```
|
||||
+
|
||||
+이 명령은 `runs/demo/first`에 상태와 실행 매니페스트를 초기화합니다.
|
||||
+<!-- claim-id: C-INIT-001 -->
|
||||
+
|
||||
+실행 디렉터리에 `readme-request.yaml`, `repository-facts.yaml`, `readme-brief.yaml`,
|
||||
+`readme-outline.yaml`, `README.candidate.md`, `claim-map.yaml`, `visual-plan.yaml`,
|
||||
+`review-findings.yaml`이 준비되면 모든 결정론적 게이트를 재생합니다.
|
||||
+
|
||||
+```bash
|
||||
+python3 .agents/skills/requirement-driven-readme/scripts/run_bootstrap.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
+```
|
||||
+
|
||||
+드라이버는 후보를 새로 쓰지 않고 준비된 산출물을 `QUALITY_REVIEWED`까지
|
||||
+검증합니다. <!-- claim-id: C-BOOTSTRAP-001 -->
|
||||
+
|
||||
+<!-- section-id: usage -->
|
||||
+## 사용 모드
|
||||
+
|
||||
+| 작업 | 모드 | 결과 |
|
||||
+|---|---|---|
|
||||
+| README가 없거나 전면 재작성 | `bootstrap` | 검증된 후보와 적용 준비용 패치 |
|
||||
+| 기존 문서의 결함만 점검 | `audit` | 감사 결과와 검증 보고서, 후보·패치 없음 |
|
||||
+| 사람 작성 영역을 보존한 갱신 | `refresh` | 3방향 병합과 병합본 전체 재검증 |
|
||||
+| 한 섹션과 파급 산출물 갱신 | `section-update` | 관련 산출물 무효화 후 갱신 검증 재실행 |
|
||||
+
|
||||
+네 모드는 요청 스키마에 선언되어 있고 각 흐름의 상태·게이트 계약이 구현되어
|
||||
+있습니다. <!-- claim-id: C-USAGE-001 -->
|
||||
+
|
||||
+<!-- section-id: api -->
|
||||
+## 요청 API, 설정과 산출물
|
||||
+
|
||||
+`readme-request.yaml`은 독자, 언어, 길이, 보존 범위, 공개 용어, 그림 정책을
|
||||
+정합니다. 기술 사실은 `repository-facts.yaml`에 저장하고, 각 실행은
|
||||
+`runs/<repo-id>/<run-id>` 아래에서 격리합니다. <!-- claim-id: C-INPUT-001 -->
|
||||
+
|
||||
+어댑터가 제공하는 단계별 모델 사용량은 실행 매니페스트에 누적합니다. 제공되지
|
||||
+않은 값은 0으로 추정하지 않습니다. <!-- claim-id: C-USAGE-METRICS-001 -->
|
||||
+
|
||||
+대표 산출물은 다음 순서로 이어집니다.
|
||||
|
||||
```text
|
||||
-.agents/ portable core shared by all three tools
|
||||
- skills/requirement-driven-readme/{SKILL.md,references/,scripts/}
|
||||
- workflows/ profiles/ schemas/ rules/ rubrics/ templates/ adapters/
|
||||
-AGENTS.md / GEMINI.md / CLAUDE.md thin tool entrypoints
|
||||
-.codex/ .claude/ tool-native subagents & config
|
||||
-src/readme_harness/ deterministic gate logic (Python)
|
||||
-runs/<repo-id>/<run-id>/ per-run artifacts (git-ignored)
|
||||
-```
|
||||
-
|
||||
-## Modes
|
||||
-
|
||||
-`bootstrap` · `refresh` · `audit` · `section-update` are implemented. Candidate
|
||||
-authoring remains an LLM role; state transitions, merge/apply safety, and
|
||||
-verification are deterministic.
|
||||
-
|
||||
-```bash
|
||||
-# Claude
|
||||
-/readme-harness bootstrap
|
||||
-# Codex / Antigravity: follow AGENTS.md / GEMINI.md
|
||||
-```
|
||||
-
|
||||
-## State machine
|
||||
-
|
||||
-`INITIALIZED → INPUT_CAPTURED → REPOSITORY_SNAPSHOTTED → FACTS_EXTRACTED →
|
||||
-PROJECT_PROFILED → README_PLANNED → README_DRAFTED → VISUALS_PLANNED →
|
||||
-STRUCTURALLY_VALIDATED → TECHNICALLY_VERIFIED → QUALITY_REVIEWED →
|
||||
-READY_FOR_APPLY → APPLIED`
|
||||
-
|
||||
-`READY_FOR_APPLY` writes `README.generated.md` + `README.patch`; applying to the
|
||||
-target README is an explicit step. The reviewed candidate is sealed in
|
||||
-`quality-manifest.yaml`; apply rechecks repository freshness, target and
|
||||
-generated hashes, and path containment through `apply-manifest.yaml`.
|
||||
-
|
||||
-After the logical roles have authored the run artifacts, the bootstrap gates
|
||||
-can be replayed as one deterministic command:
|
||||
-
|
||||
-```bash
|
||||
-python3 .agents/skills/requirement-driven-readme/scripts/run_bootstrap.py \
|
||||
- --run-dir runs/<repo-id>/<run-id> --repo /path/to/repository
|
||||
-```
|
||||
-
|
||||
-The driver stops at `QUALITY_REVIEWED`. `generate_patch.py` prepares the sealed
|
||||
-candidate, and `apply_patch.py` is the separate explicit apply step.
|
||||
-
|
||||
-## Development
|
||||
+readme-brief.yaml + readme-outline.yaml
|
||||
+README.candidate.md + claim-map.yaml + visual-plan.yaml
|
||||
+prose-report.json + verification.json + review-findings.yaml
|
||||
+quality-manifest.yaml
|
||||
+README.generated.md + README.patch + apply-manifest.yaml
|
||||
+```
|
||||
+
|
||||
+품질 검토를 통과한 뒤 다음 명령으로 패치를 준비합니다.
|
||||
+
|
||||
+```bash
|
||||
+python3 .agents/skills/requirement-driven-readme/scripts/generate_patch.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
+```
|
||||
+
|
||||
+이 단계는 `README.generated.md`, `README.patch`, `apply-manifest.yaml`을 만들고
|
||||
+상태를 `READY_FOR_APPLY`로 전진시킵니다. <!-- claim-id: C-PREPARE-001 -->
|
||||
+
|
||||
+검토가 끝난 패치만 별도 명령으로 적용합니다.
|
||||
+
|
||||
+```bash
|
||||
+python3 .agents/skills/requirement-driven-readme/scripts/apply_patch.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
+```
|
||||
+
|
||||
+적용 직전에 후보·저장소·대상 README 해시와 경로 경계를 다시 검사합니다.
|
||||
+<!-- claim-id: C-APPLY-001 -->
|
||||
+
|
||||
+<!-- section-id: architecture -->
|
||||
+## 동작 방식
|
||||
+
|
||||
+사용자 요구는 독자 흐름과 공개 용어, 그림 결정을 만듭니다. 대상 저장소에서는
|
||||
+근거와 프로젝트 유형을 수집합니다. 두 입력이 합쳐진 후보와 시각 자료는 결정론적
|
||||
+게이트와 독립 품질 심사를 통과해야 패치가 됩니다. <!-- claim-id: C-FLOW-001 -->
|
||||
+
|
||||
+```mermaid
|
||||
+flowchart LR
|
||||
+ T[Codex / Claude / Antigravity] --> O[실행 조정]
|
||||
+ U[사용자 요구] --> P[독자 흐름·용어·그림 결정]
|
||||
+ R[대상 저장소] --> E[근거 수집·프로젝트 분류]
|
||||
+ O --> E
|
||||
+ O --> P
|
||||
+ E --> P
|
||||
+ P --> W[README 작성]
|
||||
+ P --> V[그림 소스·자산 생성]
|
||||
+ W --> G[근거·명령·경로·문체 검사]
|
||||
+ V --> G
|
||||
+ G --> Q[독립 품질 심사]
|
||||
+ Q -->|수정 필요| P
|
||||
+ Q -->|통과| A[패치 준비·명시적 적용]
|
||||
+ H[(해시 기반 실행 산출물)] --- E
|
||||
+ H --- P
|
||||
+ H --- G
|
||||
+ H --- A
|
||||
+```
|
||||
+
|
||||
+<!-- visual-id: harness-flow -->
|
||||
+
|
||||
+구성요소 책임과 컨텍스트 경계는 [아키텍처 문서](docs/architecture.md)에,
|
||||
+모드별 전이는 [상태기계 문서](docs/state-machine.md)에 정리했습니다.
|
||||
+
|
||||
+<!-- section-id: safeguards -->
|
||||
+## 안전장치
|
||||
+
|
||||
+- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.
|
||||
+- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을
|
||||
+ 차단합니다. <!-- claim-id: C-TERM-001 -->
|
||||
+- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이
|
||||
+ 일치해야 시각 자료 게이트를 통과합니다. <!-- claim-id: C-VISUAL-001 -->
|
||||
+- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,
|
||||
+ `review.md`는 검증된 YAML에서 렌더링합니다. <!-- claim-id: C-REVIEW-001 -->
|
||||
+- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로
|
||||
+ 전진합니다. <!-- claim-id: C-AUDIT-001 -->
|
||||
+- 갱신 모드는 보호 영역과 마커 밖 문장을 보존하며, 사람이 고친 관리 영역과 새
|
||||
+ 후보가 충돌하면 자동 적용을 막습니다. <!-- claim-id: C-MERGE-001 -->
|
||||
+- 비밀 값, 저장소 밖 경로, 오래된 스냅숏, 검토 뒤 바뀐 산출물은 패치 준비나
|
||||
+ 적용을 차단합니다. <!-- claim-id: C-APPLY-SAFETY-001 -->
|
||||
+
|
||||
+시각 자료의 소스·자산·대체 텍스트·신선도 규칙은
|
||||
+[시각 자료 정책](docs/visuals.md)에서 확인할 수 있습니다.
|
||||
+
|
||||
+<!-- section-id: tests -->
|
||||
+## 테스트
|
||||
+
|
||||
+전체 회귀 테스트는 다음 명령으로 실행합니다.
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q
|
||||
```
|
||||
|
||||
-Design spec: `docs/superpowers/specs/2026-07-16-readme-harness-design.md`.
|
||||
-Phase 1 plan: `docs/superpowers/plans/2026-07-16-readme-harness-phase1.md`.
|
||||
+GitHub Actions는 의존성을 설치한 뒤 전체 테스트를 실행합니다. 실행 환경은
|
||||
+Python 3.12입니다. 자체 README 테스트는 라이브러리 프로파일, 30초 독자 흐름, 최소 실행
|
||||
+경로, Mermaid 그림 결정을 확인합니다. <!-- claim-id: C-CI-001 -->
|
||||
+
|
||||
+<!-- section-id: documentation -->
|
||||
+## 상세 문서
|
||||
+
|
||||
+- [구성요소와 컨텍스트 경계](docs/architecture.md)
|
||||
+- [그림 결정과 소스·자산 계약](docs/visuals.md)
|
||||
+- [모드별 상태와 차단 조건](docs/state-machine.md)
|
||||
+- [모델 사용량 계측](docs/usage-metrics.md)
|
||||
+- [블라인드 README 품질 벤치마크](docs/quality-benchmark.md)
|
||||
+- [전체 설계 명세](docs/superpowers/specs/2026-07-16-readme-harness-design.md)
|
||||
+
|
||||
+주요 구현은 `src/readme_harness`, 스키마·규칙·워크플로는 `.agents`, 테스트는
|
||||
+`tests`에 있습니다. <!-- claim-id: C-LAYOUT-001 -->
|
||||
+
|
||||
+<!-- section-id: limitations -->
|
||||
+## 현재 한계
|
||||
+
|
||||
+- 후보 작성은 LLM 파이프라인의 판단에 의존합니다. 결정론적 드라이버는 준비된
|
||||
+ 산출물을 검증하고 상태를 전진시킵니다.
|
||||
+- 네 모드의 결정론적 경로는 구현됐지만 도구 간 런타임 동등성은 Phase 4 검증
|
||||
+ 목표입니다. <!-- claim-id: C-LIMIT-002 -->
|
||||
+- 명령 검증 보고서의 기본 수준은 정적 검사입니다. 실행을 별도로 기록하지 않은
|
||||
+ 명령은 실제 실행 성공을 뜻하지 않습니다. <!-- claim-id: C-VERIFY-LIMIT-001 -->
|
||||
+- 여덟 저장소 유형의 블라인드 비교 계약은 마련했지만 결과 상태는 아직 `not-run`입니다.
|
||||
+ `PASS` 결과 전에는 품질 우월성을 주장하지 않습니다. <!-- claim-id: C-BENCH-LIMIT-001 -->
|
||||
@@ -0,0 +1,7 @@
|
||||
schema-version: 1
|
||||
mode: bootstrap
|
||||
target-rel: README.md
|
||||
generated-hash: sha256:dd241b6b8b7a0972086226c73b217128d98224cf30ab87505a6d5e8e0d2dcedf
|
||||
target-before-hash: sha256:53b671528d4f99b6e806145e7b687b61a5a443ceffb1fd225059f92fdc50c456
|
||||
repository-snapshot-hash: sha256:8ea3e3693ce644a2576f9a8670088a36e5964ac8edaca5b279f7281e44aa428b
|
||||
review-score: 90
|
||||
@@ -0,0 +1,160 @@
|
||||
schema-version: 1
|
||||
claims:
|
||||
- id: C-PROJECT-001
|
||||
type: factual
|
||||
statement: 명령·경로·근거를 검사한 뒤 검토 가능한 패치로 제공합니다.
|
||||
section: overview
|
||||
sources: [{fact-id: F-PROJECT-001}]
|
||||
status: supported
|
||||
- id: C-MODE-001
|
||||
type: factual
|
||||
statement: '`bootstrap`, `audit`, `refresh`, `section-update` 네 모드를 구현했습니다.'
|
||||
section: overview
|
||||
sources: [{fact-id: F-MODE-001}]
|
||||
status: supported
|
||||
- id: C-SAFETY-SUMMARY-001
|
||||
type: factual
|
||||
statement: '패치 준비가 끝나도 대상 `README.md`는 자동으로 바뀌지 않습니다.'
|
||||
section: overview
|
||||
sources: [{fact-id: F-APPLY-001}]
|
||||
status: supported
|
||||
- id: C-LIMIT-001
|
||||
type: factual
|
||||
statement: 다른 도구와의 런타임 동등성은 Phase 4 검증 전까지 보장하지 않습니다.
|
||||
section: overview
|
||||
sources: [{fact-id: F-TOOL-001}, {fact-id: F-LIMIT-001}]
|
||||
status: supported
|
||||
- id: C-RUNTIME-001
|
||||
type: factual
|
||||
section: installation
|
||||
sources: [{fact-id: F-RUNTIME-001}, {fact-id: F-DEPENDENCY-001}]
|
||||
status: supported
|
||||
- id: C-INSTALL-001
|
||||
type: factual
|
||||
statement: 실행해 증명하지 않았습니다.
|
||||
section: installation
|
||||
sources: [{fact-id: F-DEPENDENCY-001}]
|
||||
status: supported
|
||||
- id: C-TEST-COMMAND-001
|
||||
type: factual
|
||||
statement: 가상환경의 동일한 결과까지 보장하는 계약은 아닙니다.
|
||||
section: quick-start
|
||||
sources: [{fact-id: F-SELF-README-001}, {fact-id: F-LIMIT-001}]
|
||||
status: supported
|
||||
- id: C-AUTHORING-001
|
||||
type: factual
|
||||
section: quick-start
|
||||
sources: [{fact-id: F-AUTHORING-001}, {fact-id: F-DRIVER-001}]
|
||||
status: supported
|
||||
- id: C-INIT-001
|
||||
type: factual
|
||||
statement: '이 명령은 `runs/demo/first`에 상태와 실행 매니페스트를 초기화합니다.'
|
||||
section: quick-start
|
||||
sources: [{fact-id: F-DRIVER-001}]
|
||||
status: supported
|
||||
- id: C-BOOTSTRAP-001
|
||||
type: factual
|
||||
statement: 검증합니다.
|
||||
section: quick-start
|
||||
sources: [{fact-id: F-DRIVER-001}, {fact-id: F-STATE-001}]
|
||||
status: supported
|
||||
- id: C-USAGE-001
|
||||
type: factual
|
||||
statement: 네 모드는 요청 스키마에 선언되어 있고 각 흐름의 상태·게이트 계약이 구현되어
|
||||
section: usage
|
||||
sources: [{fact-id: F-MODE-001}, {fact-id: F-STATE-001}]
|
||||
status: supported
|
||||
- id: C-INPUT-001
|
||||
type: factual
|
||||
statement: '`runs/<repo-id>/<run-id>` 아래에서 격리합니다.'
|
||||
section: api
|
||||
sources: [{fact-id: F-ARTIFACT-001}, {fact-id: F-LAYOUT-001}]
|
||||
status: supported
|
||||
- id: C-USAGE-METRICS-001
|
||||
type: factual
|
||||
section: api
|
||||
sources: [{fact-id: F-USAGE-001}]
|
||||
status: supported
|
||||
- id: C-PREPARE-001
|
||||
type: factual
|
||||
statement: '상태를 `READY_FOR_APPLY`로 전진시킵니다.'
|
||||
section: api
|
||||
sources: [{fact-id: F-APPLY-001}]
|
||||
status: supported
|
||||
- id: C-APPLY-001
|
||||
type: factual
|
||||
statement: 적용 직전에 후보·저장소·대상 README 해시와 경로 경계를 다시 검사합니다.
|
||||
section: api
|
||||
sources: [{fact-id: F-APPLY-001}]
|
||||
status: supported
|
||||
- id: C-FLOW-001
|
||||
type: factual
|
||||
statement: 게이트와 독립 품질 심사를 통과해야 패치가 됩니다.
|
||||
section: architecture
|
||||
sources: [{fact-id: F-STATE-001}, {fact-id: F-REVIEW-001}, {fact-id: F-APPLY-001}]
|
||||
status: supported
|
||||
- id: C-TERM-001
|
||||
type: factual
|
||||
statement: 차단합니다.
|
||||
section: safeguards
|
||||
sources: [{fact-id: F-TERM-001}]
|
||||
status: supported
|
||||
- id: C-VISUAL-001
|
||||
type: factual
|
||||
statement: 일치해야 시각 자료 게이트를 통과합니다.
|
||||
section: safeguards
|
||||
sources: [{fact-id: F-VISUAL-001}]
|
||||
status: supported
|
||||
- id: C-REVIEW-001
|
||||
type: factual
|
||||
statement: '`review.md`는 검증된 YAML에서 렌더링합니다.'
|
||||
section: safeguards
|
||||
sources: [{fact-id: F-REVIEW-001}]
|
||||
status: supported
|
||||
- id: C-AUDIT-001
|
||||
type: factual
|
||||
statement: 전진합니다.
|
||||
section: safeguards
|
||||
sources: [{fact-id: F-AUDIT-001}]
|
||||
status: supported
|
||||
- id: C-MERGE-001
|
||||
type: factual
|
||||
statement: 후보가 충돌하면 자동 적용을 막습니다.
|
||||
section: safeguards
|
||||
sources: [{fact-id: F-MERGE-001}]
|
||||
status: supported
|
||||
- id: C-APPLY-SAFETY-001
|
||||
type: factual
|
||||
statement: 적용을 차단합니다.
|
||||
section: safeguards
|
||||
sources: [{fact-id: F-APPLY-001}]
|
||||
status: supported
|
||||
- id: C-CI-001
|
||||
type: factual
|
||||
statement: 경로, Mermaid 그림 결정을 확인합니다.
|
||||
section: tests
|
||||
sources: [{fact-id: F-CI-001}, {fact-id: F-SELF-README-001}]
|
||||
status: supported
|
||||
- id: C-LAYOUT-001
|
||||
type: factual
|
||||
statement: '`tests`에 있습니다.'
|
||||
section: documentation
|
||||
sources: [{fact-id: F-LAYOUT-001}]
|
||||
status: supported
|
||||
- id: C-LIMIT-002
|
||||
type: factual
|
||||
statement: 목표입니다.
|
||||
section: limitations
|
||||
sources: [{fact-id: F-TOOL-001}, {fact-id: F-LIMIT-001}]
|
||||
status: supported
|
||||
- id: C-VERIFY-LIMIT-001
|
||||
type: factual
|
||||
statement: 명령은 실제 실행 성공을 뜻하지 않습니다.
|
||||
section: limitations
|
||||
sources: [{fact-id: F-LIMIT-001}]
|
||||
status: supported
|
||||
- id: C-BENCH-LIMIT-001
|
||||
type: factual
|
||||
section: limitations
|
||||
sources: [{fact-id: F-BENCH-001}]
|
||||
status: supported
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"schema-version": 1,
|
||||
"policy-id": "korean-reader-prose-v1",
|
||||
"language": "ko-KR",
|
||||
"applicable": true,
|
||||
"scope": "candidate",
|
||||
"state": "PASS_WITH_WARNINGS",
|
||||
"summary": {
|
||||
"errors": 0,
|
||||
"warnings": 1,
|
||||
"sentences": 108,
|
||||
"prose-characters": 2081,
|
||||
"hangul-characters": 1839
|
||||
},
|
||||
"findings": [
|
||||
{
|
||||
"rule-id": "KO-REPEATED-ENDING",
|
||||
"severity": "warning",
|
||||
"line": 4,
|
||||
"section": "README Harness",
|
||||
"region-kind": "candidate",
|
||||
"excerpt": "합니다 (29/43문장)",
|
||||
"message": "같은 문장 종결이 이어져 설명이 기계적으로 들릴 수 있습니다.",
|
||||
"suggestion": "정의, 절차, 제한에 맞춰 현재형 동사와 명사형 표제를 섞어 쓰세요.",
|
||||
"source-ids": [
|
||||
"NIKL-EASY-PUBLIC-LANGUAGE"
|
||||
],
|
||||
"id": "P-001"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
schema-version: 2
|
||||
mode: bootstrap
|
||||
profile: library
|
||||
repository-snapshot-hash: sha256:8ea3e3693ce644a2576f9a8670088a36e5964ac8edaca5b279f7281e44aa428b
|
||||
artifacts:
|
||||
readme-request.yaml: sha256:5aaa41c2d4131ea1587660751c73b6a92894c684737fb3315de44dd210e03a0f
|
||||
repository-facts.yaml: sha256:61f1fb4b892ca6b21ad4a54634e687f2e231d1582315ff37bda31b28e4a68735
|
||||
readme-brief.yaml: sha256:a17a7877ee3799ddd9e240f75fd59f285f79d8f95364c701f61fa0b280f89529
|
||||
readme-outline.yaml: sha256:9748f1e59bfb884044e685970f319fca3e54c8b7b1cdad7861993cd15cf0e57b
|
||||
README.candidate.md: sha256:dd241b6b8b7a0972086226c73b217128d98224cf30ab87505a6d5e8e0d2dcedf
|
||||
claim-map.yaml: sha256:886526bb672493d1846270540b422858f2a68985b2be5c79cdddd8a285e77ee6
|
||||
visual-plan.yaml: sha256:8e610350b341ce517de9a39746f83c62f0e97197916d41b3f857e67c4ce153d7
|
||||
prose-report.json: sha256:6c34d9c7d068786688dea529478b5a88ef2017b05d772b45c32374f1888a17fb
|
||||
review-findings.yaml: sha256:6d19d78927d7255f39ef7fb3f859dca715d2128ed1b96ab5bad3d65bc8aeaa32
|
||||
@@ -0,0 +1,47 @@
|
||||
schema-version: 1
|
||||
project-profile:
|
||||
primary: library
|
||||
secondary: [documentation-tooling]
|
||||
audiences:
|
||||
primary:
|
||||
- 저장소 README를 만들거나 갱신하는 개발자
|
||||
secondary:
|
||||
- 결정론적 게이트와 도구 어댑터를 확장하는 기여자
|
||||
reader-outcomes:
|
||||
- 프로젝트가 만드는 결과와 안전 경계를 30초 안에 설명한다.
|
||||
- 의존성을 설치하고 전체 테스트로 개발 환경을 확인한다.
|
||||
- 네 가지 모드 중 자기 작업에 맞는 경로를 선택한다.
|
||||
- 후보를 검증하고 패치를 준비한 뒤 명시적으로 적용한다.
|
||||
project-story:
|
||||
value-proposition: 저장소 코드와 사용자 요구를 근거로 README 후보를 만들고 검증 가능한 패치로 전달한다.
|
||||
problem: README 자동 작성은 실행 명령과 구조 설명이 실제 저장소와 어긋나거나 기존 문서를 훼손하기 쉽다.
|
||||
target-reader: README를 새로 만들거나 안전하게 갱신하려는 개발자
|
||||
notable-traits:
|
||||
- text: 저장소 사실과 사용자 의도를 분리하고 고위험 주장을 근거에 연결한다.
|
||||
fact-ids: [F-PROJECT-001, F-STATE-001]
|
||||
- text: 포함한 그림은 개요 결정부터 실제 소스 또는 자산까지 교차 검증한다.
|
||||
fact-ids: [F-VISUAL-001]
|
||||
- text: 품질 심사 근거는 실제 README 줄 범위와 해시에 묶인다.
|
||||
fact-ids: [F-REVIEW-001]
|
||||
- text: 패치 준비와 대상 README 적용이 분리되고 적용 직전에 상태와 해시를 다시 검사한다.
|
||||
fact-ids: [F-APPLY-001]
|
||||
maturity: Codex 경로의 네 모드 드라이버는 구현됐으나 후보 작성은 LLM 경계에 있고 도구 간 동등성은 아직 검증하지 않았다.
|
||||
limitations:
|
||||
- 후보 작성 자체는 결정론적 코드가 아니라 LLM 파이프라인이 담당한다.
|
||||
- Claude와 Antigravity의 런타임 동등성은 Phase 4 전에는 주장하지 않는다.
|
||||
narrative-variant: library
|
||||
reader-journey:
|
||||
- reader-question: 무엇을 만들고 어떤 문제를 막습니까?
|
||||
section-id: overview
|
||||
- reader-question: 로컬에서 설치와 테스트를 어떻게 확인합니까?
|
||||
section-id: quick-start
|
||||
- reader-question: 내 작업에는 어떤 모드를 선택해야 합니까?
|
||||
section-id: usage
|
||||
- reader-question: 저장소 분석부터 적용까지 어떤 흐름으로 동작합니까?
|
||||
section-id: architecture
|
||||
- reader-question: 어떤 오류와 문서 훼손을 차단합니까?
|
||||
section-id: safeguards
|
||||
- reader-question: 기여 전에 무엇을 검증해야 합니까?
|
||||
section-id: tests
|
||||
- reader-question: 상세 계약은 어디에서 확인합니까?
|
||||
section-id: documentation
|
||||
@@ -0,0 +1,129 @@
|
||||
schema-version: 1
|
||||
sections:
|
||||
- id: overview
|
||||
title-guidance: 무엇을 만드는가
|
||||
level: 2
|
||||
purpose: 프로젝트의 결과, 대상 독자, 사실 근거와 명시적 적용이라는 핵심 경계를 첫 화면에서 설명한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- 저장소 사실과 사용자 요구를 바탕으로 README 후보와 패치를 만든다는 한 문장 정의
|
||||
- bootstrap, audit, refresh, section-update 네 작업 결과
|
||||
- 후보 작성은 LLM 경계이고 도구 간 동등성을 아직 주장하지 않는다는 제한
|
||||
visual-slot:
|
||||
decision: exclude
|
||||
reader-question: 프로젝트 정체성을 이해하는 데 그림이 필요한가?
|
||||
rationale: 결과와 안전 경계는 짧은 정의와 목록으로 더 직접적으로 전달된다.
|
||||
- id: installation
|
||||
title-guidance: 설치
|
||||
level: 2
|
||||
purpose: 필요한 Python 버전과 개발 의존성 설치 명령을 제시한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- Python 3.12 이상
|
||||
- editable 개발 설치 명령
|
||||
- id: quick-start
|
||||
title-guidance: 빠른 시작
|
||||
level: 2
|
||||
purpose: 설치 후 전체 테스트를 실행하고 첫 bootstrap run을 초기화하는 최소 경로를 제공한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- 테스트 명령과 통과 신호
|
||||
- init_run 명령과 생성 위치
|
||||
- 독립형 생성 CLI가 아니라 Codex 스킬 요청으로 작성 산출물을 준비한다는 경계
|
||||
- 준비해야 할 작성 산출물과 run_bootstrap으로 게이트를 재생하는 조건
|
||||
visual-slot:
|
||||
decision: exclude
|
||||
reader-question: 세 개의 순차 명령을 이해하는 데 그림이 필요한가?
|
||||
rationale: 복사 가능한 명령과 각 성공 신호가 그림보다 정확하다.
|
||||
- id: usage
|
||||
title-guidance: 사용 모드
|
||||
level: 2
|
||||
purpose: 독자 작업을 기준으로 네 가지 모드의 선택 조건과 결과를 구분한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- 새 문서 작성, 기존 문서 점검, 안전 갱신, 부분 갱신의 선택 기준
|
||||
- audit은 후보나 패치를 만들지 않는다는 차이
|
||||
- id: api
|
||||
title-guidance: 요청 API, 설정과 산출물
|
||||
level: 2
|
||||
purpose: 사용자 의도 파일, 실행 디렉터리, 후보·검증·패치 산출물의 대응을 설명한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- readme-request의 역할
|
||||
- runs 경로와 주요 산출물
|
||||
- 어댑터 제공 모델 사용량과 미제공 값 비추정 원칙
|
||||
- patch 준비와 apply 명령의 분리
|
||||
- id: architecture
|
||||
title-guidance: 동작 방식
|
||||
level: 2
|
||||
purpose: 사용자 요구와 저장소 근거가 계획·작성·시각화·게이트·품질 심사·적용으로 흐르는 구조를 한 화면에서 설명한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- 의미 판단과 결정론적 검증의 경계
|
||||
- 실패 시 계획 단계로 돌아가는 재작업 흐름
|
||||
- 해시 기반 산출물 저장소
|
||||
visual-slot:
|
||||
decision: include
|
||||
reader-question: 저장소 근거와 사용자 요구가 어떻게 검토 가능한 패치로 변합니까?
|
||||
rationale: 두 입력이 계획에서 합쳐지고 작성과 그림이 검증으로 모인 뒤 품질 심사에서 재작업 또는 적용으로 갈라지는 관계는 산문보다 흐름도가 빠르다.
|
||||
purpose: 저장소 분석부터 독립 품질 심사와 명시적 적용까지의 데이터 흐름과 재작업 경계를 보여준다.
|
||||
- id: safeguards
|
||||
title-guidance: 안전장치
|
||||
level: 2
|
||||
purpose: 사실·명령·경로·비밀 값·시각 자료·품질 근거·보호 영역·적용 경계를 구체적으로 설명한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- 근거 없는 고위험 주장 차단
|
||||
- 공개 용어와 그림 완성도 계약
|
||||
- 감사 산출물 검증과 갱신 보호 영역
|
||||
- 패치 준비 후 별도 apply
|
||||
- id: tests
|
||||
title-guidance: 테스트
|
||||
level: 2
|
||||
purpose: 전체 회귀 테스트 명령과 자체 README 품질 계약을 설명한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- 전체 pytest 명령
|
||||
- CI가 같은 명령을 실행한다는 사실
|
||||
- 자체 README 독자 과업과 시각 결정 테스트
|
||||
- id: documentation
|
||||
title-guidance: 상세 문서
|
||||
level: 2
|
||||
purpose: 아키텍처, 시각 자료, 상태기계, 설계 명세로 독자를 안내한다.
|
||||
required: true
|
||||
content-strategy: summary-link
|
||||
target-doc: docs/
|
||||
content-requirements:
|
||||
- architecture.md
|
||||
- visuals.md
|
||||
- state-machine.md
|
||||
- usage-metrics.md
|
||||
- quality-benchmark.md
|
||||
- 설계 명세
|
||||
- id: limitations
|
||||
title-guidance: 현재 한계
|
||||
level: 2
|
||||
purpose: 결정론 게이트와 LLM 후보 작성의 경계, 도구 간 동등성 미검증 상태를 명시한다.
|
||||
required: true
|
||||
content-strategy: inline
|
||||
target-doc: null
|
||||
content-requirements:
|
||||
- 후보 작성은 LLM 파이프라인
|
||||
- cross-tool equivalence는 Phase 4 목표
|
||||
- 블라인드 품질 비교는 아직 not-run이며 PASS 전 우월성 주장 금지
|
||||
@@ -0,0 +1,57 @@
|
||||
schema-version: 1
|
||||
target:
|
||||
repository: /home/donghyeon/workspace/ai-tool/readme-harness
|
||||
readme-path: README.md
|
||||
mode: bootstrap
|
||||
profile-override: library
|
||||
project-intent:
|
||||
purpose: 저장소의 실제 코드와 사용자 요구를 바탕으로 검증 가능한 README 후보와 명시적으로 적용할 패치를 만드는 하네스를 설명한다.
|
||||
positioning: 사실 추적과 적용 안전성뿐 아니라 독자 과업, 공개 용어, 실제 시각 자료, 근거가 고정된 품질 심사를 함께 다루는 README 제작 도구다.
|
||||
maturity: Codex 경로의 bootstrap, audit, refresh, section-update는 구현됐고 도구 간 런타임 동등성은 아직 주장하지 않는다.
|
||||
audience:
|
||||
primary:
|
||||
- 저장소 README를 새로 만들거나 안전하게 갱신하려는 개발자
|
||||
secondary:
|
||||
- 하네스의 게이트와 워크플로를 확장하는 기여자
|
||||
reader-actions:
|
||||
- 이 프로젝트가 어떤 결과를 만들고 무엇을 보장하는지 30초 안에 판단한다.
|
||||
- 개발 환경을 준비하고 전체 테스트를 실행해 설치 상태를 확인한다.
|
||||
- 작업에 맞는 bootstrap, audit, refresh, section-update 모드를 고른다.
|
||||
- 생성된 패치를 검토한 뒤 별도의 명시적 적용 단계를 실행한다.
|
||||
content-policy:
|
||||
language: ko-KR
|
||||
tone: 직접적이고 검증 수준을 분명히 밝히는 기술 설명체
|
||||
target-length: medium
|
||||
preserve-existing-copy: false
|
||||
detail-docs-policy: summary-and-link
|
||||
visual-policy:
|
||||
mode: when-useful
|
||||
max-visuals: 1
|
||||
preferred-formats:
|
||||
- mermaid
|
||||
placeholder-format: HTML 주석 기반 제작 사양
|
||||
terminology-policy:
|
||||
exact-identifiers: []
|
||||
explain-on-first-use: {}
|
||||
internal-only:
|
||||
family: 작업 담당 방식
|
||||
fan-out: 여러 담당자가 나눠 검토
|
||||
collapse: 한 담당자가 맡아 처리
|
||||
concrete worker: 실제 변경 담당자
|
||||
verification family: 검증 담당 역할
|
||||
route-to: 재작업 시작 상태
|
||||
must-include:
|
||||
- 한 문장 가치 제안과 대상 독자
|
||||
- 설치 전제조건과 복사 가능한 첫 테스트 경로
|
||||
- 네 가지 모드의 독자 작업 기준 선택법
|
||||
- 저장소 분석부터 패치 적용까지의 한 화면 처리 흐름
|
||||
- 사실, 명령, 경로, 비밀 값, 보호 영역, 품질 근거에 대한 안전장치
|
||||
- 생성되는 주요 산출물과 명시적 적용 경계
|
||||
- Codex 경로 구현 범위와 도구 간 동등성 한계
|
||||
- 아키텍처, 시각화, 상태기계 상세 문서 링크
|
||||
must-exclude:
|
||||
- 저장소 근거 없는 최상 품질, 성능, 생산 준비 완료 주장
|
||||
- 전체 상태 이름과 내부 역할 배치를 첫 화면에서 장황하게 나열하는 설명
|
||||
- 내부 오케스트레이션 영문 용어를 독자용 개념처럼 노출하는 문장
|
||||
- 검증되지 않은 설치·실행 명령
|
||||
protected-sections: []
|
||||
@@ -0,0 +1,363 @@
|
||||
schema-version: 1
|
||||
repository-snapshot-hash: sha256:8ea3e3693ce644a2576f9a8670088a36e5964ac8edaca5b279f7281e44aa428b
|
||||
project-name: readme-harness
|
||||
languages: [Python]
|
||||
frameworks: [jsonschema, PyYAML, pytest]
|
||||
facts:
|
||||
- id: F-PROJECT-001
|
||||
category: purpose
|
||||
key: harness-description
|
||||
value: 저장소 사실과 사용자 요구를 바탕으로 GitHub README를 분석·설계·작성·검증하는 하네스
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: harness.yaml
|
||||
line-start: 2
|
||||
line-end: 13
|
||||
source-kind: harness-configuration
|
||||
- id: F-RUNTIME-001
|
||||
category: prerequisite
|
||||
key: python-version
|
||||
value: Python >=3.12
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: pyproject.toml
|
||||
line-start: 1
|
||||
line-end: 5
|
||||
source-kind: build-configuration
|
||||
- id: F-DEPENDENCY-001
|
||||
category: dependency
|
||||
key: runtime-and-dev-dependencies
|
||||
value: [jsonschema>=4.20, PyYAML>=6.0, pytest>=8.0]
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: pyproject.toml
|
||||
line-start: 5
|
||||
line-end: 8
|
||||
source-kind: build-configuration
|
||||
- id: F-MODE-001
|
||||
category: capability
|
||||
key: implemented-modes
|
||||
value: [bootstrap, audit, refresh, section-update]
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: harness.yaml
|
||||
line-start: 10
|
||||
line-end: 13
|
||||
source-kind: harness-configuration
|
||||
- id: F-TOOL-001
|
||||
category: compatibility
|
||||
key: tool-boundary
|
||||
value:
|
||||
supported-tools: [codex, antigravity, claude]
|
||||
deterministic-codex-drivers: implemented
|
||||
cross-tool-equivalence: phase-4
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: harness.yaml
|
||||
line-start: 8
|
||||
line-end: 13
|
||||
source-kind: harness-configuration
|
||||
- path: harness.yaml
|
||||
line-start: 99
|
||||
line-end: 107
|
||||
source-kind: capability-boundary
|
||||
- id: F-STATE-001
|
||||
category: workflow
|
||||
key: bootstrap-gates
|
||||
value:
|
||||
states: [INPUT_CAPTURED, REPOSITORY_SNAPSHOTTED, FACTS_EXTRACTED, PROJECT_PROFILED, README_PLANNED, README_DRAFTED, VISUALS_PLANNED, STRUCTURALLY_VALIDATED, TECHNICALLY_VERIFIED, QUALITY_REVIEWED]
|
||||
final-preparation: READY_FOR_APPLY
|
||||
final-apply: APPLIED
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: src/readme_harness/state.py
|
||||
line-start: 71
|
||||
line-end: 83
|
||||
source-kind: state-machine-code
|
||||
- id: F-VISUAL-001
|
||||
category: visual-contract
|
||||
key: included-visual-completeness
|
||||
value: 개요 include 섹션, visual plan 섹션, README visual id, 요청 모드에 맞는 생성 소스 또는 자산을 함께 검사
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: src/readme_harness/visuals.py
|
||||
line-start: 77
|
||||
line-end: 183
|
||||
source-kind: validator-code
|
||||
- id: F-DRIVER-001
|
||||
category: workflow
|
||||
key: bootstrap-driver-boundary
|
||||
value:
|
||||
init-run: runs/<repo-id>/<run-id>에 state.json과 run-manifest.json을 생성
|
||||
bootstrap-driver: 준비된 authoring artifacts를 QUALITY_REVIEWED까지 검증하며 후보나 대상 README를 작성하지 않음
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: .agents/skills/requirement-driven-readme/scripts/init_run.py
|
||||
line-start: 10
|
||||
line-end: 37
|
||||
source-kind: driver-code
|
||||
- path: .agents/skills/requirement-driven-readme/scripts/run_bootstrap.py
|
||||
line-start: 1
|
||||
line-end: 7
|
||||
source-kind: driver-code
|
||||
- id: F-AUTHORING-001
|
||||
category: usage
|
||||
key: model-authoring-boundary
|
||||
value: 독립형 종단 간 생성 CLI가 아니라 도구가 requirement-driven-readme 스킬을 로드하고 모델 역할이 작성 산출물을 준비한 뒤 결정론 드라이버가 검증하는 구조
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: AGENTS.md
|
||||
line-start: 1
|
||||
line-end: 14
|
||||
source-kind: codex-entrypoint
|
||||
- path: harness.yaml
|
||||
line-start: 100
|
||||
line-end: 109
|
||||
source-kind: capability-boundary
|
||||
- id: F-TERM-001
|
||||
category: prose-contract
|
||||
key: public-terminology
|
||||
value: 인라인 코드 식별자를 repository-facts.yaml과 대조하고 내부 전용 용어 노출과 첫 사용 설명을 검사
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: src/readme_harness/prose.py
|
||||
line-start: 120
|
||||
line-end: 207
|
||||
source-kind: validator-code
|
||||
- path: src/readme_harness/prose.py
|
||||
line-start: 286
|
||||
line-end: 379
|
||||
source-kind: validator-code
|
||||
- id: F-CLASSIFY-001
|
||||
category: classification
|
||||
key: root-first-python-classification
|
||||
value: 루트 선언을 우선하고 테스트·픽스처·예제·샘플·vendor를 주 분류 신호에서 제외하며 pyproject.toml을 CLI·서비스·라이브러리로 구분
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: src/readme_harness/scan.py
|
||||
line-start: 14
|
||||
line-end: 103
|
||||
source-kind: scanner-code
|
||||
- path: src/readme_harness/classify.py
|
||||
line-start: 6
|
||||
line-end: 29
|
||||
source-kind: classifier-code
|
||||
- id: F-REVIEW-001
|
||||
category: quality-contract
|
||||
key: hash-bound-review-evidence
|
||||
value: 품질 근거의 artifact, section-id, line-start, line-end, content-hash를 실제 README와 대조하고 review.md를 YAML에서 렌더링
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: src/readme_harness/review.py
|
||||
line-start: 18
|
||||
line-end: 103
|
||||
source-kind: review-validator-code
|
||||
- id: F-AUDIT-001
|
||||
category: audit-contract
|
||||
key: validated-atomic-audit-completion
|
||||
value: audit findings를 스키마 검증하고 산출물을 원자적으로 기록한 뒤 AUDIT_COMPLETED로 전이
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: .agents/skills/requirement-driven-readme/scripts/run_audit.py
|
||||
line-start: 107
|
||||
line-end: 134
|
||||
source-kind: audit-driver-code
|
||||
- id: F-APPLY-001
|
||||
category: safety
|
||||
key: explicit-apply-boundary
|
||||
value:
|
||||
prepared-artifacts: [README.generated.md, README.patch, apply-manifest.yaml]
|
||||
checks: [reviewed-artifact-hashes, repository-freshness, generated-hash, target-before-hash, path-containment]
|
||||
target-write: explicit apply_patch.py only
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: harness.yaml
|
||||
line-start: 134
|
||||
line-end: 141
|
||||
source-kind: apply-policy
|
||||
- path: .agents/skills/requirement-driven-readme/scripts/apply_patch.py
|
||||
line-start: 22
|
||||
line-end: 67
|
||||
source-kind: apply-driver-code
|
||||
- id: F-MERGE-001
|
||||
category: safety
|
||||
key: refresh-preservation
|
||||
value: refresh는 protected와 unmarked 영역을 보존하고 서로 다른 managed 편집을 manual-required 충돌로 기록
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: src/readme_harness/merge.py
|
||||
line-start: 7
|
||||
line-end: 79
|
||||
source-kind: merge-code
|
||||
- id: F-LAYOUT-001
|
||||
category: structure
|
||||
key: primary-paths
|
||||
value: [.agents, src/readme_harness, tests, docs/architecture.md, docs/visuals.md, docs/state-machine.md, runs]
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: harness.yaml
|
||||
line-start: 125
|
||||
line-end: 132
|
||||
source-kind: harness-configuration
|
||||
- path: docs/architecture.md
|
||||
line-start: 1
|
||||
line-end: 1
|
||||
source-kind: documentation
|
||||
- path: docs/visuals.md
|
||||
line-start: 1
|
||||
line-end: 1
|
||||
source-kind: documentation
|
||||
- path: docs/state-machine.md
|
||||
line-start: 1
|
||||
line-end: 1
|
||||
source-kind: documentation
|
||||
- id: F-ARTIFACT-001
|
||||
category: artifact-contract
|
||||
key: primary-authoring-artifacts
|
||||
value: [README.md, readme-request.yaml, repository-facts.yaml, readme-brief.yaml, readme-outline.yaml, README.candidate.md, claim-map.yaml, visual-plan.yaml, prose-report.json, verification.json, review-findings.yaml, review.md, quality-manifest.yaml, audit-findings.yaml, audit-report.md, README.generated.md, README.patch, apply-manifest.yaml, runs/demo/first, runs/<repo-id>/<run-id>, requirement-driven-readme, bootstrap]
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: .agents/skills/requirement-driven-readme/scripts/run_bootstrap.py
|
||||
line-start: 46
|
||||
line-end: 56
|
||||
source-kind: bootstrap-driver-code
|
||||
- path: harness.yaml
|
||||
line-start: 134
|
||||
line-end: 141
|
||||
source-kind: apply-policy
|
||||
- id: F-SELF-README-001
|
||||
category: readme-contract
|
||||
key: own-readme-quality-tests
|
||||
value: [library profile quality audit, 30-second reader order, python3 -m pytest -q, Mermaid, harness-flow]
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: tests/unit/test_own_readme_quality.py
|
||||
line-start: 14
|
||||
line-end: 38
|
||||
source-kind: repository-owned-readme-test
|
||||
- id: F-CI-001
|
||||
category: testing
|
||||
key: continuous-integration
|
||||
value: GitHub Actions는 Python 3.12에서 개발 의존성을 설치하고 python -m pytest -q를 실행
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: .github/workflows/ci.yml
|
||||
line-start: 1
|
||||
line-end: 17
|
||||
source-kind: ci-workflow
|
||||
- id: F-USAGE-001
|
||||
category: observability
|
||||
key: adapter-supplied-model-usage
|
||||
value: 어댑터가 제공한 단계별 입력·캐시 입력·출력 토큰과 컨텍스트 파일 기여를 run-manifest.json에 누적하며 미제공 값은 추정하지 않음
|
||||
assertion-type: observed
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: src/readme_harness/usage.py
|
||||
line-start: 11
|
||||
line-end: 66
|
||||
source-kind: usage-recorder-code
|
||||
- path: docs/usage-metrics.md
|
||||
line-start: 1
|
||||
line-end: 29
|
||||
source-kind: usage-documentation
|
||||
- id: F-BENCH-001
|
||||
category: limitation
|
||||
key: quality-superiority-gate
|
||||
value:
|
||||
repository-types: 8
|
||||
arms: [human-maintained, single-prompt, harness]
|
||||
current-status: not-run
|
||||
required-status: PASS
|
||||
superiority-claims: prohibited-until-benchmark-pass
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: benchmarks/quality-benchmark.yaml
|
||||
line-start: 1
|
||||
line-end: 37
|
||||
source-kind: benchmark-contract
|
||||
- path: harness.yaml
|
||||
line-start: 108
|
||||
line-end: 114
|
||||
source-kind: capability-boundary
|
||||
- id: F-LIMIT-001
|
||||
category: limitation
|
||||
key: candidate-generation-boundary
|
||||
value: 후보 작성은 LLM pipeline이며 결정론 코어가 아니고 도구 간 런타임 동등성은 phase-4 목표
|
||||
assertion-type: declared
|
||||
confidence: high
|
||||
evidence:
|
||||
- path: harness.yaml
|
||||
line-start: 99
|
||||
line-end: 107
|
||||
source-kind: capability-boundary
|
||||
commands:
|
||||
- id: CMD-001
|
||||
command: python3 -m pip install -e ".[dev]"
|
||||
cwd: .
|
||||
source:
|
||||
path: pyproject.toml
|
||||
verification:
|
||||
status: discovered
|
||||
method: pyproject dependencies and editable install syntax
|
||||
- id: CMD-002
|
||||
command: python3 -m pytest -q
|
||||
cwd: .
|
||||
source:
|
||||
path: pyproject.toml
|
||||
verification:
|
||||
status: executed
|
||||
method: pytest execution in current workspace
|
||||
level: execution
|
||||
limitations: [운영체제와 새 가상환경에서의 설치까지 증명하지는 않음]
|
||||
- id: CMD-003
|
||||
command: python3 .agents/skills/requirement-driven-readme/scripts/init_run.py --repo-id demo --run-id first --mode bootstrap --target-repository /path/to/repository --tool-adapter codex
|
||||
cwd: .
|
||||
source:
|
||||
path: .agents/skills/requirement-driven-readme/scripts/init_run.py
|
||||
verification:
|
||||
status: static-verified
|
||||
method: python script path exists
|
||||
- id: CMD-004
|
||||
command: python3 .agents/skills/requirement-driven-readme/scripts/run_bootstrap.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
cwd: .
|
||||
source:
|
||||
path: .agents/skills/requirement-driven-readme/scripts/run_bootstrap.py
|
||||
verification:
|
||||
status: static-verified
|
||||
method: python script path exists
|
||||
- id: CMD-005
|
||||
command: python3 .agents/skills/requirement-driven-readme/scripts/generate_patch.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
cwd: .
|
||||
source:
|
||||
path: .agents/skills/requirement-driven-readme/scripts/generate_patch.py
|
||||
verification:
|
||||
status: static-verified
|
||||
method: python script path exists
|
||||
- id: CMD-006
|
||||
command: python3 .agents/skills/requirement-driven-readme/scripts/apply_patch.py --run-dir runs/demo/first --repo /path/to/repository
|
||||
cwd: .
|
||||
source:
|
||||
path: .agents/skills/requirement-driven-readme/scripts/apply_patch.py
|
||||
verification:
|
||||
status: static-verified
|
||||
method: python script path exists
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"git-sha": "636617ccd9f20440f21339f808557c096b55fec2",
|
||||
"dirty": true,
|
||||
"diff-hash": "sha256:8ea3e3693ce644a2576f9a8670088a36e5964ac8edaca5b279f7281e44aa428b",
|
||||
"scanned-at": null,
|
||||
"file-count": 228
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
schema-version: 1
|
||||
verdict: PASS
|
||||
score: 90
|
||||
scores:
|
||||
project-specificity:
|
||||
score: 5
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: overview
|
||||
line-start: 12
|
||||
line-end: 26
|
||||
content-hash: sha256:e6881327a3a749eecb74b02636fbc9c3d254ce9b952896f59c7093d0d89e2799
|
||||
observation: 주 독자를 README 작성·갱신 개발자로 명시하고 네 모드와 근거·적용 경계, 런타임 동등성 한계를 프로젝트 고유 특성으로 설명한다.
|
||||
reader-journey:
|
||||
score: 5
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: overview
|
||||
line-start: 12
|
||||
line-end: 26
|
||||
content-hash: sha256:e6881327a3a749eecb74b02636fbc9c3d254ce9b952896f59c7093d0d89e2799
|
||||
observation: 대상 독자, 제공 결과, 핵심 안전 경계와 구현 한계가 첫 개요에 모여 있어 후속 과업을 빠르게 판단할 수 있다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: usage
|
||||
line-start: 84
|
||||
line-end: 95
|
||||
content-hash: sha256:1cb56273e71777d93e55ce3eee23094d33f4d6d66b8e56d5f57b842107c8857a
|
||||
observation: 네 모드를 새 작성, 감사, 보존 갱신, 부분 갱신이라는 독자 작업과 결과 기준으로 바로 선택할 수 있다.
|
||||
technical-explanation:
|
||||
score: 4
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: architecture
|
||||
line-start: 135
|
||||
line-end: 166
|
||||
content-hash: sha256:f39304dc61c0a017a37676b2077d572aaf9c8bd78b24ae51eb125762d41ef623
|
||||
observation: 사용자 요구와 저장소 근거가 계획, 작성, 시각 자료, 결정론적 검사, 독립 심사와 재작업으로 이어지는 책임과 흐름을 설명한다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: safeguards
|
||||
line-start: 168
|
||||
line-end: 186
|
||||
content-hash: sha256:f4aeba8e1e5aae86600fc4f2c70f10da1b67120222cf8c45912b88e9882fc509
|
||||
observation: 용어·시각 자료·품질 근거·갱신 보호에 해당하는 검증 책임과 차단 조건을 구체적인 계약으로 구분한다.
|
||||
task-usability:
|
||||
score: 4
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: installation
|
||||
line-start: 28
|
||||
line-end: 42
|
||||
content-hash: sha256:0854377cd971afc6408b317ba1308f319f8a2025bef86dfac262ab253e999565
|
||||
observation: 전제조건, 복사 가능한 설치 명령과 새 가상환경에서의 미검증 범위를 함께 밝혀 설치 판단이 가능하다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: quick-start
|
||||
line-start: 44
|
||||
line-end: 82
|
||||
content-hash: sha256:ee017689603496487003245c0cb4e00a7be4ac3a0eec8921a5edb111da68d78b
|
||||
observation: 테스트 성공 기준, 모델 기반 작성 경계, 준비 산출물과 초기화·검증 명령을 순서대로 제시한다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: api
|
||||
line-start: 97
|
||||
line-end: 133
|
||||
content-hash: sha256:86cc70fd60e94877c1de9c3db099c67df7b18adedfebff01dc84217329d11fa0
|
||||
observation: 입력, 주요 산출물, 패치 준비와 명시적 적용 명령을 분리해 검토 후 작업을 안전하게 수행할 수 있다.
|
||||
prose-clarity:
|
||||
score: 4
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: installation
|
||||
line-start: 28
|
||||
line-end: 42
|
||||
content-hash: sha256:0854377cd971afc6408b317ba1308f319f8a2025bef86dfac262ab253e999565
|
||||
observation: 런타임과 패키지 식별자를 인라인 코드로 구별하고 전제조건과 검증 한계를 직접적인 한국어로 설명한다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: quick-start
|
||||
line-start: 44
|
||||
line-end: 82
|
||||
content-hash: sha256:ee017689603496487003245c0cb4e00a7be4ac3a0eec8921a5edb111da68d78b
|
||||
observation: 독립 실행 도구가 아니라는 제한과 독자가 요청할 행동을 먼저 밝히며 기술 식별자는 인라인 코드로 구별한다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: safeguards
|
||||
line-start: 168
|
||||
line-end: 186
|
||||
content-hash: sha256:f4aeba8e1e5aae86600fc4f2c70f10da1b67120222cf8c45912b88e9882fc509
|
||||
observation: 반복 종결 경고는 있으나 항목 구조와 구체적인 현재형 동사가 함께 쓰여 이해를 방해하지 않는다.
|
||||
visual-judgment:
|
||||
score: 5
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: architecture
|
||||
line-start: 135
|
||||
line-end: 166
|
||||
content-hash: sha256:f39304dc61c0a017a37676b2077d572aaf9c8bd78b24ae51eb125762d41ef623
|
||||
observation: 단일 Mermaid 흐름도가 두 입력의 결합, 작성과 그림의 합류, 독립 심사, 재작업과 명시적 적용을 한 화면에 보여 준다.
|
||||
hard-gates:
|
||||
passed: true
|
||||
failures: []
|
||||
reader-simulations:
|
||||
30-seconds:
|
||||
outcome: PASS
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: overview
|
||||
line-start: 12
|
||||
line-end: 26
|
||||
content-hash: sha256:e6881327a3a749eecb74b02636fbc9c3d254ce9b952896f59c7093d0d89e2799
|
||||
observation: 도구의 정체성, 안전 목적과 README를 작성·갱신하는 개발자라는 대상을 모두 확인할 수 있다.
|
||||
5-minutes:
|
||||
outcome: PASS
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: quick-start
|
||||
line-start: 44
|
||||
line-end: 82
|
||||
content-hash: sha256:ee017689603496487003245c0cb4e00a7be4ac3a0eec8921a5edb111da68d78b
|
||||
observation: 테스트 성공 기준, 모델 기반 작성 요청, 준비 산출물, 초기화와 결정론적 게이트 재생 순서를 확인할 수 있다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: architecture
|
||||
line-start: 135
|
||||
line-end: 166
|
||||
content-hash: sha256:f39304dc61c0a017a37676b2077d572aaf9c8bd78b24ae51eb125762d41ef623
|
||||
observation: 요구와 근거가 작성·검사·독립 심사·재작업·적용으로 이어지는 전체 구조를 한 화면에서 식별할 수 있다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: limitations
|
||||
line-start: 214
|
||||
line-end: 224
|
||||
content-hash: sha256:10ae2331d6b1858e08b4affefc718b064393da0947295bf78246e4f6eb6c2038
|
||||
observation: 모델 작성 의존성, 도구 간 동등성 미검증, 정적 명령 검증과 미실행 품질 벤치마크를 현재 한계로 구분한다.
|
||||
contributor:
|
||||
outcome: PASS
|
||||
evidence:
|
||||
- artifact: README.candidate.md
|
||||
section-id: tests
|
||||
line-start: 188
|
||||
line-end: 199
|
||||
content-hash: sha256:7eb8e5a521f7d6a821377078e40f288a27fd197437a9bd25922013f5a11bc927
|
||||
observation: 전체 테스트 명령, CI 환경과 자체 README 계약 범위를 기여 전에 확인할 수 있다.
|
||||
- artifact: README.candidate.md
|
||||
section-id: documentation
|
||||
line-start: 201
|
||||
line-end: 212
|
||||
content-hash: sha256:97129977e42c81be1ff70cdfa2402147fed9366468c0e39dc48ba71b1c0259b2
|
||||
observation: 구현·규칙·테스트 위치를 구분하고 아키텍처·상태기계·계측·벤치마크 상세 문서로 이동할 수 있다.
|
||||
findings: []
|
||||
@@ -0,0 +1,22 @@
|
||||
# README quality review
|
||||
|
||||
Verdict: **PASS** — 90/100
|
||||
|
||||
## Dimension scores
|
||||
|
||||
- project-specificity: 5/5
|
||||
- reader-journey: 5/5
|
||||
- technical-explanation: 4/5
|
||||
- task-usability: 4/5
|
||||
- prose-clarity: 4/5
|
||||
- visual-judgment: 5/5
|
||||
|
||||
## Reader simulations
|
||||
|
||||
- 30-seconds: PASS
|
||||
- 5-minutes: PASS
|
||||
- contributor: PASS
|
||||
|
||||
## Findings
|
||||
|
||||
No findings.
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"schema-version": 1,
|
||||
"run-id": "20260720-review-remediation",
|
||||
"repo-id": "readme-harness",
|
||||
"mode": "bootstrap",
|
||||
"target-repository": "/home/donghyeon/workspace/ai-tool/readme-harness",
|
||||
"harness-version": "0.1.0",
|
||||
"started-at": null,
|
||||
"tool-adapter": "codex",
|
||||
"input-hashes": {},
|
||||
"usage": {}
|
||||
}
|
||||
@@ -0,0 +1,347 @@
|
||||
{
|
||||
"schema-version": 1,
|
||||
"mode": "bootstrap",
|
||||
"current": "APPLIED",
|
||||
"history": [
|
||||
{
|
||||
"state": "INITIALIZED"
|
||||
},
|
||||
{
|
||||
"state": "INPUT_CAPTURED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "request",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": null
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "REPOSITORY_SNAPSHOTTED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "snapshot",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": {
|
||||
"diff-hash": "sha256:8ea3e3693ce644a2576f9a8670088a36e5964ac8edaca5b279f7281e44aa428b"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "FACTS_EXTRACTED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "facts",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": {
|
||||
"fact_ids": [
|
||||
"F-PROJECT-001",
|
||||
"F-RUNTIME-001",
|
||||
"F-DEPENDENCY-001",
|
||||
"F-MODE-001",
|
||||
"F-TOOL-001",
|
||||
"F-STATE-001",
|
||||
"F-VISUAL-001",
|
||||
"F-DRIVER-001",
|
||||
"F-AUTHORING-001",
|
||||
"F-TERM-001",
|
||||
"F-CLASSIFY-001",
|
||||
"F-REVIEW-001",
|
||||
"F-AUDIT-001",
|
||||
"F-APPLY-001",
|
||||
"F-MERGE-001",
|
||||
"F-LAYOUT-001",
|
||||
"F-ARTIFACT-001",
|
||||
"F-SELF-README-001",
|
||||
"F-CI-001",
|
||||
"F-USAGE-001",
|
||||
"F-BENCH-001",
|
||||
"F-LIMIT-001"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "PROJECT_PROFILED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "profile",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": {
|
||||
"profile": "library"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "README_PLANNED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "brief",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": null
|
||||
},
|
||||
{
|
||||
"name": "outline",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": {
|
||||
"section_ids": [
|
||||
"overview",
|
||||
"installation",
|
||||
"quick-start",
|
||||
"usage",
|
||||
"api",
|
||||
"architecture",
|
||||
"safeguards",
|
||||
"tests",
|
||||
"documentation",
|
||||
"limitations"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "README_DRAFTED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "conformance",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": {
|
||||
"sections": [
|
||||
"overview",
|
||||
"installation",
|
||||
"quick-start",
|
||||
"usage",
|
||||
"api",
|
||||
"architecture",
|
||||
"safeguards",
|
||||
"tests",
|
||||
"documentation",
|
||||
"limitations"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "claim_map",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": {
|
||||
"claims": [
|
||||
"C-PROJECT-001",
|
||||
"C-MODE-001",
|
||||
"C-SAFETY-SUMMARY-001",
|
||||
"C-LIMIT-001",
|
||||
"C-RUNTIME-001",
|
||||
"C-INSTALL-001",
|
||||
"C-TEST-COMMAND-001",
|
||||
"C-AUTHORING-001",
|
||||
"C-INIT-001",
|
||||
"C-BOOTSTRAP-001",
|
||||
"C-USAGE-001",
|
||||
"C-INPUT-001",
|
||||
"C-USAGE-METRICS-001",
|
||||
"C-PREPARE-001",
|
||||
"C-APPLY-001",
|
||||
"C-FLOW-001",
|
||||
"C-TERM-001",
|
||||
"C-VISUAL-001",
|
||||
"C-REVIEW-001",
|
||||
"C-AUDIT-001",
|
||||
"C-MERGE-001",
|
||||
"C-APPLY-SAFETY-001",
|
||||
"C-CI-001",
|
||||
"C-LAYOUT-001",
|
||||
"C-LIMIT-002",
|
||||
"C-VERIFY-LIMIT-001",
|
||||
"C-BENCH-LIMIT-001"
|
||||
],
|
||||
"derived-statements": {
|
||||
"C-PROJECT-001": "이 하네스는 저장소의 실제 코드와 사용 목적을 바탕으로 문서 후보를 만들고,\n명령·경로·근거를 검사한 뒤 검토 가능한 패치로 제공합니다.",
|
||||
"C-MODE-001": "`bootstrap`, `audit`, `refresh`, `section-update` 네 모드를 구현했습니다.",
|
||||
"C-SAFETY-SUMMARY-001": "저장소 근거와 사용자 요구를 분리해 읽고, 고위험 사실을 근거에 연결합니다. 그림을\n넣기로 했다면 실제 소스나 자산까지 확인하고, 품질 심사는 원문의 줄과 해시에 묶인\n근거를 사용합니다. 패치 준비가 끝나도 대상 `README.md`는 자동으로 바뀌지 않습니다.",
|
||||
"C-LIMIT-001": "결정론적 Codex 경로는 구현됐습니다. 후보 문장 작성은 모델 파이프라인이 담당하며,\n다른 도구와의 런타임 동등성은 Phase 4 검증 전까지 보장하지 않습니다.",
|
||||
"C-RUNTIME-001": "`Python` 3.12 이상이 필요합니다.\n런타임 의존성은 `jsonschema`와 `PyYAML`입니다.\n개발 의존성은 `pytest`입니다.",
|
||||
"C-INSTALL-001": "이 설치 명령은 프로젝트 선언에서 확인했지만, 현재 작업에서는 새 가상환경 설치까지\n실행해 증명하지 않았습니다.",
|
||||
"C-TEST-COMMAND-001": "자체 README 테스트는 이 명령을 최소 실행 경로로 요구합니다. 다른 운영체제와 새\n가상환경의 동일한 결과까지 보장하는 계약은 아닙니다.",
|
||||
"C-AUTHORING-001": "이 프로젝트는 명령 하나로 문서를 완성하는 독립 실행 도구가 아닙니다. Codex 작업 공간에서\n`requirement-driven-readme` 스킬로 대상 저장소의 `bootstrap` 실행을 요청하면 작성\n역할이 사용자 요구, 저장소 근거, 개요, 후보, 주장 지도, 그림 계획과 품질 심사\n산출물을 준비합니다.",
|
||||
"C-INIT-001": "이 명령은 `runs/demo/first`에 상태와 실행 매니페스트를 초기화합니다.",
|
||||
"C-BOOTSTRAP-001": "드라이버는 후보를 새로 쓰지 않고 준비된 산출물을 `QUALITY_REVIEWED`까지\n검증합니다.",
|
||||
"C-USAGE-001": "네 모드는 요청 스키마에 선언되어 있고 각 흐름의 상태·게이트 계약이 구현되어\n있습니다.",
|
||||
"C-INPUT-001": "`readme-request.yaml`은 독자, 언어, 길이, 보존 범위, 공개 용어, 그림 정책을\n정합니다. 기술 사실은 `repository-facts.yaml`에 저장하고, 각 실행은\n`runs/<repo-id>/<run-id>` 아래에서 격리합니다.",
|
||||
"C-USAGE-METRICS-001": "어댑터가 제공하는 단계별 모델 사용량은 실행 매니페스트에 누적합니다. 제공되지\n않은 값은 0으로 추정하지 않습니다.",
|
||||
"C-PREPARE-001": "이 단계는 `README.generated.md`, `README.patch`, `apply-manifest.yaml`을 만들고\n상태를 `READY_FOR_APPLY`로 전진시킵니다.",
|
||||
"C-APPLY-001": "적용 직전에 후보·저장소·대상 README 해시와 경로 경계를 다시 검사합니다.",
|
||||
"C-FLOW-001": "사용자 요구는 독자 흐름과 공개 용어, 그림 결정을 만듭니다. 대상 저장소에서는\n근거와 프로젝트 유형을 수집합니다. 두 입력이 합쳐진 후보와 시각 자료는 결정론적\n게이트와 독립 품질 심사를 통과해야 패치가 됩니다.",
|
||||
"C-TERM-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다.",
|
||||
"C-VISUAL-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. <!-- claim-id: C-TERM-001 -->\n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다.",
|
||||
"C-REVIEW-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. <!-- claim-id: C-TERM-001 -->\n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다. <!-- claim-id: C-VISUAL-001 -->\n- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,\n `review.md`는 검증된 YAML에서 렌더링합니다.",
|
||||
"C-AUDIT-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. <!-- claim-id: C-TERM-001 -->\n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다. <!-- claim-id: C-VISUAL-001 -->\n- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,\n `review.md`는 검증된 YAML에서 렌더링합니다. <!-- claim-id: C-REVIEW-001 -->\n- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로\n 전진합니다.",
|
||||
"C-MERGE-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. <!-- claim-id: C-TERM-001 -->\n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다. <!-- claim-id: C-VISUAL-001 -->\n- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,\n `review.md`는 검증된 YAML에서 렌더링합니다. <!-- claim-id: C-REVIEW-001 -->\n- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로\n 전진합니다. <!-- claim-id: C-AUDIT-001 -->\n- 갱신 모드는 보호 영역과 마커 밖 문장을 보존하며, 사람이 고친 관리 영역과 새\n 후보가 충돌하면 자동 적용을 막습니다.",
|
||||
"C-APPLY-SAFETY-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. <!-- claim-id: C-TERM-001 -->\n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다. <!-- claim-id: C-VISUAL-001 -->\n- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,\n `review.md`는 검증된 YAML에서 렌더링합니다. <!-- claim-id: C-REVIEW-001 -->\n- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로\n 전진합니다. <!-- claim-id: C-AUDIT-001 -->\n- 갱신 모드는 보호 영역과 마커 밖 문장을 보존하며, 사람이 고친 관리 영역과 새\n 후보가 충돌하면 자동 적용을 막습니다. <!-- claim-id: C-MERGE-001 -->\n- 비밀 값, 저장소 밖 경로, 오래된 스냅숏, 검토 뒤 바뀐 산출물은 패치 준비나\n 적용을 차단합니다.",
|
||||
"C-CI-001": "GitHub Actions는 의존성을 설치한 뒤 전체 테스트를 실행합니다. 실행 환경은\nPython 3.12입니다. 자체 README 테스트는 라이브러리 프로파일, 30초 독자 흐름, 최소 실행\n경로, Mermaid 그림 결정을 확인합니다.",
|
||||
"C-LAYOUT-001": "주요 구현은 `src/readme_harness`, 스키마·규칙·워크플로는 `.agents`, 테스트는\n`tests`에 있습니다.",
|
||||
"C-LIMIT-002": "- 후보 작성은 LLM 파이프라인의 판단에 의존합니다. 결정론적 드라이버는 준비된\n 산출물을 검증하고 상태를 전진시킵니다.\n- 네 모드의 결정론적 경로는 구현됐지만 도구 간 런타임 동등성은 Phase 4 검증\n 목표입니다.",
|
||||
"C-VERIFY-LIMIT-001": "- 후보 작성은 LLM 파이프라인의 판단에 의존합니다. 결정론적 드라이버는 준비된\n 산출물을 검증하고 상태를 전진시킵니다.\n- 네 모드의 결정론적 경로는 구현됐지만 도구 간 런타임 동등성은 Phase 4 검증\n 목표입니다. <!-- claim-id: C-LIMIT-002 -->\n- 명령 검증 보고서의 기본 수준은 정적 검사입니다. 실행을 별도로 기록하지 않은\n 명령은 실제 실행 성공을 뜻하지 않습니다.",
|
||||
"C-BENCH-LIMIT-001": "- 후보 작성은 LLM 파이프라인의 판단에 의존합니다. 결정론적 드라이버는 준비된\n 산출물을 검증하고 상태를 전진시킵니다.\n- 네 모드의 결정론적 경로는 구현됐지만 도구 간 런타임 동등성은 Phase 4 검증\n 목표입니다. <!-- claim-id: C-LIMIT-002 -->\n- 명령 검증 보고서의 기본 수준은 정적 검사입니다. 실행을 별도로 기록하지 않은\n 명령은 실제 실행 성공을 뜻하지 않습니다. <!-- claim-id: C-VERIFY-LIMIT-001 -->\n- 여덟 저장소 유형의 블라인드 비교 계약은 마련했지만 결과 상태는 아직 `not-run`입니다.\n `PASS` 결과 전에는 품질 우월성을 주장하지 않습니다."
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "VISUALS_PLANNED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "visual_plan",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": {
|
||||
"visuals": [
|
||||
"harness-flow"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "STRUCTURALLY_VALIDATED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "github_markdown",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": null
|
||||
},
|
||||
{
|
||||
"name": "reader_prose",
|
||||
"ok": true,
|
||||
"warnings": [
|
||||
"KO-REPEATED-ENDING line 4: 같은 문장 종결이 이어져 설명이 기계적으로 들릴 수 있습니다."
|
||||
],
|
||||
"data": {
|
||||
"schema-version": 1,
|
||||
"policy-id": "korean-reader-prose-v1",
|
||||
"language": "ko-KR",
|
||||
"applicable": true,
|
||||
"scope": "candidate",
|
||||
"state": "PASS_WITH_WARNINGS",
|
||||
"summary": {
|
||||
"errors": 0,
|
||||
"warnings": 1,
|
||||
"sentences": 108,
|
||||
"prose-characters": 2081,
|
||||
"hangul-characters": 1839
|
||||
},
|
||||
"findings": [
|
||||
{
|
||||
"rule-id": "KO-REPEATED-ENDING",
|
||||
"severity": "warning",
|
||||
"line": 4,
|
||||
"section": "README Harness",
|
||||
"region-kind": "candidate",
|
||||
"excerpt": "합니다 (29/43문장)",
|
||||
"message": "같은 문장 종결이 이어져 설명이 기계적으로 들릴 수 있습니다.",
|
||||
"suggestion": "정의, 절차, 제한에 맞춰 현재형 동사와 명사형 표제를 섞어 쓰세요.",
|
||||
"source-ids": [
|
||||
"NIKL-EASY-PUBLIC-LANGUAGE"
|
||||
],
|
||||
"id": "P-001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "TECHNICALLY_VERIFIED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "verify",
|
||||
"ok": true,
|
||||
"warnings": [
|
||||
"manual verification required: python3 -m pip install -e \".[dev]\" (unsupported-static-verifier)",
|
||||
"manual verification required: python3 -m pytest -q (unsupported-static-verifier)"
|
||||
],
|
||||
"data": {
|
||||
"schema-version": 1,
|
||||
"state": "PASS_WITH_MANUAL",
|
||||
"verification-level": "static",
|
||||
"execution-verified": false,
|
||||
"checks": {
|
||||
"commands": {
|
||||
"total": 6,
|
||||
"verified": 4,
|
||||
"manual-required": 2,
|
||||
"failed": 0
|
||||
},
|
||||
"paths": {
|
||||
"total": 9,
|
||||
"verified": 9,
|
||||
"failed": 0
|
||||
},
|
||||
"anchors": {
|
||||
"total": 0,
|
||||
"verified": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"readme-contracts": {
|
||||
"total": 0,
|
||||
"verified": 0,
|
||||
"failed": 0
|
||||
}
|
||||
},
|
||||
"failures": [],
|
||||
"limitations": [
|
||||
"manual verification required: python3 -m pip install -e \".[dev]\" (unsupported-static-verifier)",
|
||||
"manual verification required: python3 -m pytest -q (unsupported-static-verifier)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "secret_scan",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": null
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "QUALITY_REVIEWED",
|
||||
"gates": [
|
||||
{
|
||||
"name": "review",
|
||||
"ok": true,
|
||||
"warnings": [],
|
||||
"data": {
|
||||
"verdict": "PASS",
|
||||
"score": 90,
|
||||
"findings": [],
|
||||
"report-valid": true
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"state": "READY_FOR_APPLY",
|
||||
"gates": []
|
||||
},
|
||||
{
|
||||
"state": "APPLIED",
|
||||
"gates": []
|
||||
}
|
||||
],
|
||||
"rework": {
|
||||
"iterations": 0,
|
||||
"findings": {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"schema-version": 1,
|
||||
"state": "PASS_WITH_MANUAL",
|
||||
"verification-level": "static",
|
||||
"execution-verified": false,
|
||||
"checks": {
|
||||
"commands": {
|
||||
"total": 6,
|
||||
"verified": 4,
|
||||
"manual-required": 2,
|
||||
"failed": 0
|
||||
},
|
||||
"paths": {
|
||||
"total": 9,
|
||||
"verified": 9,
|
||||
"failed": 0
|
||||
},
|
||||
"anchors": {
|
||||
"total": 0,
|
||||
"verified": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"readme-contracts": {
|
||||
"total": 0,
|
||||
"verified": 0,
|
||||
"failed": 0
|
||||
}
|
||||
},
|
||||
"failures": [],
|
||||
"limitations": [
|
||||
"manual verification required: python3 -m pip install -e \".[dev]\" (unsupported-static-verifier)",
|
||||
"manual verification required: python3 -m pytest -q (unsupported-static-verifier)"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
schema-version: 1
|
||||
visuals:
|
||||
- id: harness-flow
|
||||
section: architecture
|
||||
type: request-flow
|
||||
purpose: 저장소 분석과 사용자 요구가 후보 작성, 그림 생성, 결정론적 게이트, 독립 품질 심사를 거쳐 패치와 명시적 적용으로 이어지는 흐름을 보여준다.
|
||||
placeholder-text: 왼쪽의 두 입력이 계획에서 합쳐지고 작성과 그림이 검증으로 모인 뒤 품질 심사에서 재작업 또는 적용으로 갈라지는 Mermaid 흐름도다.
|
||||
must-show:
|
||||
- 사용자 요구와 대상 저장소라는 두 입력
|
||||
- 독자 흐름·용어·그림 결정과 저장소 근거·프로젝트 분류
|
||||
- README 작성과 그림 소스·자산 생성
|
||||
- 근거·명령·경로·문체 검사와 독립 품질 심사
|
||||
- 수정 필요 시 계획으로 돌아가는 재작업
|
||||
- 통과 후 패치 준비와 명시적 적용
|
||||
- 해시 기반 실행 산출물
|
||||
relationships:
|
||||
- 사용자 요구 -> 독자 흐름·용어·그림 결정
|
||||
- 대상 저장소 -> 근거 수집·프로젝트 분류
|
||||
- 근거 수집·프로젝트 분류 -> 독자 흐름·용어·그림 결정
|
||||
- 계획 -> README 작성
|
||||
- 계획 -> 그림 소스·자산 생성
|
||||
- README 작성 + 그림 -> 결정론적 검사
|
||||
- 결정론적 검사 -> 독립 품질 심사
|
||||
- 독립 품질 심사 -> 계획 (수정 필요)
|
||||
- 독립 품질 심사 -> 패치 준비·명시적 적용 (통과)
|
||||
emphasize:
|
||||
- 의미 판단과 결정론적 검증의 경계를 별도 노드로 나눈다.
|
||||
- 재작업 화살표와 정방향 적용 흐름을 다른 라벨로 구분한다.
|
||||
- 해시 기반 산출물이 분석·계획·검증·적용에 연결됨을 보인다.
|
||||
avoid:
|
||||
- 전체 내부 상태 이름을 노드에 나열하지 않는다.
|
||||
- Claude와 Antigravity 런타임 동등성을 구현 완료처럼 표현하지 않는다.
|
||||
- 자동 적용처럼 보이는 우회 경로를 만들지 않는다.
|
||||
placement:
|
||||
after-section-id: architecture
|
||||
accessibility:
|
||||
alt-text: 사용자 요구와 대상 저장소에서 출발해 계획, README와 그림 작성, 결정론적 검사, 독립 품질 심사를 거친다. 수정이 필요하면 계획으로 돌아가고 통과하면 패치를 준비한 뒤 별도로 적용한다.
|
||||
production:
|
||||
format: mermaid
|
||||
status: embedded
|
||||
Reference in New Issue
Block a user