Files
readme-haness/runs/readme-harness/20260720-review-remediation/state.json
T

347 lines
18 KiB
JSON

{
"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": {}
}
}