{ "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//` 아래에서 격리합니다.", "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 차단합니다. \n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다.", "C-REVIEW-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. \n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다. \n- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,\n `review.md`는 검증된 YAML에서 렌더링합니다.", "C-AUDIT-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. \n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다. \n- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,\n `review.md`는 검증된 YAML에서 렌더링합니다. \n- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로\n 전진합니다.", "C-MERGE-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. \n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다. \n- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,\n `review.md`는 검증된 YAML에서 렌더링합니다. \n- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로\n 전진합니다. \n- 갱신 모드는 보호 영역과 마커 밖 문장을 보존하며, 사람이 고친 관리 영역과 새\n 후보가 충돌하면 자동 적용을 막습니다.", "C-APPLY-SAFETY-001": "- 명령·버전·전제조건·모듈·경로·보장·한계 주장은 저장소 근거에 연결합니다.\n- 인라인 코드의 영문 표현이 실제 식별자인지 확인하고 내부 전용 용어의 공개 노출을\n 차단합니다. \n- 그림을 포함하기로 한 개요 결정, 계획 항목, README 마커, 생성 소스나 자산이\n 일치해야 시각 자료 게이트를 통과합니다. \n- 품질 점수와 독자 과업 근거의 줄 범위와 해시를 실제 후보에 대조하고,\n `review.md`는 검증된 YAML에서 렌더링합니다. \n- 감사 모드는 결과 스키마를 확인하고 산출물을 원자적으로 기록한 다음 완료 상태로\n 전진합니다. \n- 갱신 모드는 보호 영역과 마커 밖 문장을 보존하며, 사람이 고친 관리 영역과 새\n 후보가 충돌하면 자동 적용을 막습니다. \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 목표입니다. \n- 명령 검증 보고서의 기본 수준은 정적 검사입니다. 실행을 별도로 기록하지 않은\n 명령은 실제 실행 성공을 뜻하지 않습니다.", "C-BENCH-LIMIT-001": "- 후보 작성은 LLM 파이프라인의 판단에 의존합니다. 결정론적 드라이버는 준비된\n 산출물을 검증하고 상태를 전진시킵니다.\n- 네 모드의 결정론적 경로는 구현됐지만 도구 간 런타임 동등성은 Phase 4 검증\n 목표입니다. \n- 명령 검증 보고서의 기본 수준은 정적 검사입니다. 실행을 별도로 기록하지 않은\n 명령은 실제 실행 성공을 뜻하지 않습니다. \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": {} } }