567 lines
20 KiB
JSON
567 lines
20 KiB
JSON
{
|
|
"schema-version": 1,
|
|
"mode": "bootstrap",
|
|
"current": "READY_FOR_APPLY",
|
|
"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:77b1a19a536615064a4894d23c78b2e7aa54a9ef4cf13bad194ae40565407951"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "FACTS_EXTRACTED",
|
|
"gates": [
|
|
{
|
|
"name": "facts",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"fact_ids": [
|
|
"F-PROJECT-001",
|
|
"F-RUNTIME-001",
|
|
"F-TOOL-PROFILE-001",
|
|
"F-MODES-001",
|
|
"F-WORKFLOW-001",
|
|
"F-AUDIT-001",
|
|
"F-REFRESH-001",
|
|
"F-SECTION-001",
|
|
"F-VERIFY-001",
|
|
"F-AUTHORITY-001",
|
|
"F-CLAIM-001",
|
|
"F-PROSE-001",
|
|
"F-VISUAL-001",
|
|
"F-OUTPUT-001",
|
|
"F-APPLY-001",
|
|
"F-BENCH-001",
|
|
"F-PROOF-001",
|
|
"F-CODEX-001",
|
|
"F-RUN-LAYOUT-001",
|
|
"F-REPO-LAYOUT-001",
|
|
"F-SAFETY-001"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "PROJECT_PROFILED",
|
|
"gates": [
|
|
{
|
|
"name": "profile",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"profile": "tool"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "README_PLANNED",
|
|
"gates": [
|
|
{
|
|
"name": "brief",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": null
|
|
},
|
|
{
|
|
"name": "outline",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"section_ids": [
|
|
"overview",
|
|
"proof",
|
|
"quick-start",
|
|
"usage",
|
|
"safeguards",
|
|
"workflow",
|
|
"inputs",
|
|
"development",
|
|
"documentation",
|
|
"limitations"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "README_DRAFTED",
|
|
"gates": [
|
|
{
|
|
"name": "conformance",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"sections": [
|
|
"overview",
|
|
"proof",
|
|
"quick-start",
|
|
"usage",
|
|
"safeguards",
|
|
"workflow",
|
|
"inputs",
|
|
"development",
|
|
"documentation",
|
|
"limitations"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "claim_map",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"claims": [
|
|
"C-PROJECT-001",
|
|
"C-OUTPUT-001",
|
|
"C-CODEX-001",
|
|
"C-XTOOL-001",
|
|
"C-PROOF-001",
|
|
"C-INVOCATION-001",
|
|
"C-RESULTS-001",
|
|
"C-NO-AUTO-APPLY-001",
|
|
"C-APPLY-CHECK-001",
|
|
"C-MODE-BOOTSTRAP-001",
|
|
"C-MODE-AUDIT-001",
|
|
"C-MODE-REFRESH-001",
|
|
"C-MODE-SECTION-001",
|
|
"C-SOURCE-SPLIT-001",
|
|
"C-FACT-TRACE-001",
|
|
"C-PRESERVE-001",
|
|
"C-CONFLICT-001",
|
|
"C-SECRET-PATH-001",
|
|
"C-STALE-001",
|
|
"C-WORKFLOW-001",
|
|
"C-REWORK-001",
|
|
"C-REQUEST-001",
|
|
"C-RUN-DIR-001",
|
|
"C-DEV-PREREQ-001",
|
|
"C-LAYOUT-001",
|
|
"C-WRITING-LIMIT-001",
|
|
"C-VERIFY-LIMIT-001",
|
|
"C-XTOOL-LIMIT-001",
|
|
"C-BENCH-LIMIT-001"
|
|
],
|
|
"derived-statements": {
|
|
"C-PROJECT-001": "저장소에서 확인한 사실과 사용자가 정한 요구를 바탕으로 README 초안을 만드는 도구입니다.",
|
|
"C-OUTPUT-001": "명령·링크·경로를 검사한 뒤, 사람이 검토하고 적용할 수 있는 패치를 생성합니다.",
|
|
"C-CODEX-001": "현재 지원하는 작성·검증 흐름은 Codex용입니다.",
|
|
"C-XTOOL-001": "Claude와 Antigravity에서 같은 동작을 하는지는 아직 미검증 상태입니다.",
|
|
"C-PROOF-001": "아래 내용은 검토와 적용을 마친 이전 실행의 패치 일부입니다.",
|
|
"C-INVOCATION-001": "현재 실행 경로는 Codex 작업 공간의 `requirement-driven-readme` 스킬입니다.",
|
|
"C-RESULTS-001": "<!-- quick-start-step: expected-result -->\n작업 뒤 확인할 파일은 `README.generated.md`와 `README.patch`입니다.",
|
|
"C-NO-AUTO-APPLY-001": "대상 `README.md`는 적용 명령을 실행하기 전까지 바뀌지 않습니다.",
|
|
"C-APPLY-CHECK-001": "적용 직전에 생성 파일과 대상 README, 저장소 기준 정보가 바뀌지 않았는지 다시 확인합니다.",
|
|
"C-MODE-BOOTSTRAP-001": "새 README 작성과 전면 재작성의 기본 선택은 `bootstrap`입니다.",
|
|
"C-MODE-AUDIT-001": "현재 README의 문제만 찾는 작업은 `audit`입니다.",
|
|
"C-MODE-REFRESH-001": "사람이 작성한 영역을 보존하는 갱신은 `refresh`입니다.",
|
|
"C-MODE-SECTION-001": "한 섹션과 영향을 받는 검사 결과의 갱신은 `section-update`입니다.",
|
|
"C-SOURCE-SPLIT-001": "코드에서 확인한 사실과 사용자가 정한 문서 요구는 따로 둡니다.",
|
|
"C-FACT-TRACE-001": "명령, 경로, 버전처럼 오류 영향이 큰 정보는 근거 파일과 연결합니다.",
|
|
"C-PRESERVE-001": "갱신 작업은 보호 영역과 마커 밖의 사람이 작성한 문장을 보존합니다.",
|
|
"C-CONFLICT-001": "사람이 고친 영역과 새 초안이 충돌하면 자동 병합과 적용이 중단됩니다.",
|
|
"C-SECRET-PATH-001": "비밀 값이나 저장소 밖 경로가 발견되면 패치를 준비하지 않습니다.",
|
|
"C-STALE-001": "검토 뒤 저장소나 생성 파일이 바뀌어도 적용을 중단합니다.",
|
|
"C-WORKFLOW-001": "사용자 요청 → 저장소 사실 확인 → README 작성 → 명령·링크·문장 검사 → 독립 검토 → 패치 확인 → 직접 적용",
|
|
"C-REWORK-001": "검사에서 문제가 나오면 해당 내용을 맡은 단계부터 다시 작성합니다.",
|
|
"C-REQUEST-001": "`readme-request.yaml`에는 독자, 목적, 언어, 보존 범위와 그림 정책을 적습니다.",
|
|
"C-RUN-DIR-001": "각 작업의 파일은 `runs/<repo-id>/<run-id>` 아래에 따로 저장됩니다.",
|
|
"C-DEV-PREREQ-001": "개발에는 Python 3.12 이상이 필요하며, 개발 의존성에는 `pytest`가 포함됩니다.",
|
|
"C-LAYOUT-001": "주요 구현은 `src/readme_harness`, 규칙과 워크플로는 `.agents`, 테스트는 `tests`에 있습니다.",
|
|
"C-WRITING-LIMIT-001": "- README 문장은 모델이 작성하고 검사 스크립트는 준비된 파일을 확인합니다.",
|
|
"C-VERIFY-LIMIT-001": "- 실행 기록이 없는 명령은 정적으로만 확인합니다.",
|
|
"C-XTOOL-LIMIT-001": "- `Claude`와 `Antigravity`에서 `Codex`와 같은 동작을 하는지는 아직 검증하지 않았습니다.",
|
|
"C-BENCH-LIMIT-001": "- 블라인드 품질 비교는 아직 실행하지 않았으며 더 좋은 결과를 낸다고 주장하지 않습니다."
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "VISUALS_PLANNED",
|
|
"gates": [
|
|
{
|
|
"name": "visual_plan",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"visuals": [
|
|
"reviewed-patch-preview"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "STRUCTURALLY_VALIDATED",
|
|
"gates": [
|
|
{
|
|
"name": "github_markdown",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": null
|
|
},
|
|
{
|
|
"name": "reader_prose",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"schema-version": 1,
|
|
"policy-id": "korean-reader-prose-v1",
|
|
"language": "ko-KR",
|
|
"applicable": true,
|
|
"scope": "candidate",
|
|
"state": "PASS",
|
|
"summary": {
|
|
"errors": 0,
|
|
"warnings": 0,
|
|
"sentences": 52,
|
|
"prose-characters": 1196,
|
|
"hangul-characters": 1007
|
|
},
|
|
"findings": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"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": 3,
|
|
"verified": 1,
|
|
"manual-required": 2,
|
|
"failed": 0
|
|
},
|
|
"paths": {
|
|
"total": 7,
|
|
"verified": 7,
|
|
"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": "README_PLANNED",
|
|
"from": "TECHNICALLY_VERIFIED",
|
|
"resumed": true,
|
|
"resume-from": "README_DRAFTED",
|
|
"invalidated": [
|
|
"README.candidate.md",
|
|
"claim-map.yaml",
|
|
"visual-plan.yaml",
|
|
"prose-report.json",
|
|
"verification.json",
|
|
"review-findings.yaml"
|
|
]
|
|
},
|
|
{
|
|
"state": "README_DRAFTED",
|
|
"gates": [
|
|
{
|
|
"name": "conformance",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"sections": [
|
|
"overview",
|
|
"proof",
|
|
"quick-start",
|
|
"usage",
|
|
"safeguards",
|
|
"workflow",
|
|
"inputs",
|
|
"development",
|
|
"documentation",
|
|
"limitations"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "claim_map",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"claims": [
|
|
"C-PROJECT-001",
|
|
"C-OUTPUT-001",
|
|
"C-CODEX-001",
|
|
"C-XTOOL-001",
|
|
"C-PROOF-001",
|
|
"C-INVOCATION-001",
|
|
"C-RESULTS-001",
|
|
"C-NO-AUTO-APPLY-001",
|
|
"C-APPLY-CHECK-001",
|
|
"C-MODE-BOOTSTRAP-001",
|
|
"C-MODE-AUDIT-001",
|
|
"C-MODE-REFRESH-001",
|
|
"C-MODE-SECTION-001",
|
|
"C-SOURCE-SPLIT-001",
|
|
"C-FACT-TRACE-001",
|
|
"C-PRESERVE-001",
|
|
"C-CONFLICT-001",
|
|
"C-SECRET-PATH-001",
|
|
"C-STALE-001",
|
|
"C-WORKFLOW-001",
|
|
"C-REWORK-001",
|
|
"C-REQUEST-001",
|
|
"C-RUN-DIR-001",
|
|
"C-DEV-PREREQ-001",
|
|
"C-LAYOUT-001",
|
|
"C-WRITING-LIMIT-001",
|
|
"C-VERIFY-LIMIT-001",
|
|
"C-XTOOL-LIMIT-001",
|
|
"C-BENCH-LIMIT-001"
|
|
],
|
|
"derived-statements": {
|
|
"C-PROJECT-001": "저장소에서 확인한 사실과 사용자가 정한 요구를 바탕으로 README 초안을 만드는 도구입니다.",
|
|
"C-OUTPUT-001": "명령·링크·경로를 검사한 뒤, 사람이 검토하고 적용할 수 있는 패치를 생성합니다.",
|
|
"C-CODEX-001": "현재 지원하는 작성·검증 흐름은 Codex용입니다.",
|
|
"C-XTOOL-001": "Claude와 Antigravity에서 같은 동작을 하는지는 아직 미검증 상태입니다.",
|
|
"C-PROOF-001": "아래 내용은 검토를 통과한 이전 실행의 패치 일부입니다.",
|
|
"C-INVOCATION-001": "현재 실행 경로는 Codex 작업 공간의 `requirement-driven-readme` 스킬입니다.",
|
|
"C-RESULTS-001": "<!-- quick-start-step: expected-result -->\n작업 뒤 확인할 파일은 `README.generated.md`와 `README.patch`입니다.",
|
|
"C-NO-AUTO-APPLY-001": "대상 `README.md`는 적용 명령을 실행하기 전까지 바뀌지 않습니다.",
|
|
"C-APPLY-CHECK-001": "적용 직전에 생성 파일과 대상 README, 저장소 기준 정보가 바뀌지 않았는지 다시 확인합니다.",
|
|
"C-MODE-BOOTSTRAP-001": "새 README 작성과 전면 재작성의 기본 선택은 `bootstrap`입니다.",
|
|
"C-MODE-AUDIT-001": "현재 README의 문제만 찾는 작업은 `audit`입니다.",
|
|
"C-MODE-REFRESH-001": "사람이 작성한 영역을 보존하는 갱신은 `refresh`입니다.",
|
|
"C-MODE-SECTION-001": "한 섹션과 영향을 받는 검사 결과의 갱신은 `section-update`입니다.",
|
|
"C-SOURCE-SPLIT-001": "코드에서 확인한 사실과 사용자가 정한 문서 요구는 따로 둡니다.",
|
|
"C-FACT-TRACE-001": "명령, 경로, 버전처럼 오류 영향이 큰 정보는 근거 파일과 연결합니다.",
|
|
"C-PRESERVE-001": "갱신 작업은 보호 영역과 마커 밖의 사람이 작성한 문장을 보존합니다.",
|
|
"C-CONFLICT-001": "사람이 고친 영역과 새 초안이 충돌하면 자동 병합과 적용이 중단됩니다.",
|
|
"C-SECRET-PATH-001": "비밀 값이나 저장소 밖 경로가 발견되면 패치를 준비하지 않습니다.",
|
|
"C-STALE-001": "검토 뒤 저장소나 생성 파일이 바뀌어도 적용을 중단합니다.",
|
|
"C-WORKFLOW-001": "사용자 요청 → 저장소 사실 확인 → README 작성 → 명령·링크·문장 검사 → 독립 검토 → 패치 확인 → 직접 적용",
|
|
"C-REWORK-001": "검사에서 문제가 나오면 해당 내용을 맡은 단계부터 다시 작성합니다.",
|
|
"C-REQUEST-001": "`readme-request.yaml`에는 독자, 목적, 언어, 보존 범위와 그림 정책을 적습니다.",
|
|
"C-RUN-DIR-001": "각 작업의 파일은 `runs/<repo-id>/<run-id>` 아래에 따로 저장됩니다.",
|
|
"C-DEV-PREREQ-001": "개발에는 Python 3.12 이상이 필요하며, 개발 의존성에는 `pytest`가 포함됩니다.",
|
|
"C-LAYOUT-001": "주요 구현은 `src/readme_harness`, 규칙과 워크플로는 `.agents`, 테스트는 `tests`에 있습니다.",
|
|
"C-WRITING-LIMIT-001": "- README 문장은 모델이 작성하고 검사 스크립트는 준비된 파일을 확인합니다.",
|
|
"C-VERIFY-LIMIT-001": "- 실행 기록이 없는 명령은 정적으로만 확인합니다.",
|
|
"C-XTOOL-LIMIT-001": "- `Claude`와 `Antigravity`에서 `Codex`와 같은 동작을 하는지는 아직 검증하지 않았습니다.",
|
|
"C-BENCH-LIMIT-001": "- 블라인드 품질 비교는 아직 실행하지 않았으며 더 좋은 결과를 낸다고 주장하지 않습니다."
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "VISUALS_PLANNED",
|
|
"gates": [
|
|
{
|
|
"name": "visual_plan",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"visuals": [
|
|
"reviewed-patch-preview"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "STRUCTURALLY_VALIDATED",
|
|
"gates": [
|
|
{
|
|
"name": "github_markdown",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": null
|
|
},
|
|
{
|
|
"name": "reader_prose",
|
|
"ok": true,
|
|
"warnings": [],
|
|
"data": {
|
|
"schema-version": 1,
|
|
"policy-id": "korean-reader-prose-v1",
|
|
"language": "ko-KR",
|
|
"applicable": true,
|
|
"scope": "candidate",
|
|
"state": "PASS",
|
|
"summary": {
|
|
"errors": 0,
|
|
"warnings": 0,
|
|
"sentences": 52,
|
|
"prose-characters": 1194,
|
|
"hangul-characters": 1005
|
|
},
|
|
"findings": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"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": 3,
|
|
"verified": 1,
|
|
"manual-required": 2,
|
|
"failed": 0
|
|
},
|
|
"paths": {
|
|
"total": 7,
|
|
"verified": 7,
|
|
"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": [
|
|
{
|
|
"id": "R-001",
|
|
"severity": "major",
|
|
"category": "technical-correctness",
|
|
"subject": "C-PROOF-001",
|
|
"section": "proof",
|
|
"message": "적용 완료 과잉 주장을 제거하고 검토 통과 사실만 남겼다.",
|
|
"evidence": [
|
|
{
|
|
"artifact": "README.candidate.md",
|
|
"section-id": "proof",
|
|
"line-start": 34,
|
|
"line-end": 35,
|
|
"content-hash": "sha256:dedc8a48d038f220392c136a4e6cf0544c53d12f6f2572744cf4f936892f4517",
|
|
"observation": "현재 문장은 F-PROOF-001이 기록한 검토 통과 상태만 주장한다."
|
|
}
|
|
],
|
|
"route-to": "README_DRAFTED",
|
|
"status": "resolved"
|
|
}
|
|
],
|
|
"report-valid": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"state": "READY_FOR_APPLY",
|
|
"gates": []
|
|
}
|
|
],
|
|
"rework": {
|
|
"iterations": 1,
|
|
"findings": {
|
|
"sha256:9c9a7da5c0916b83": {
|
|
"attempts": 1,
|
|
"status": "open",
|
|
"latest-id": "R-001"
|
|
}
|
|
}
|
|
},
|
|
"reasons": [
|
|
"R-001"
|
|
],
|
|
"resume-from": "README_DRAFTED"
|
|
} |