{
  "evalVersion": "1.0.0",
  "generatedAt": "2026-08-21T01:09:07.140Z",
  "runtime": {
    "codexCli": "codex-cli 0.148.0-alpha.21",
    "isolation": "temporary CODEX_HOME; no user config; ephemeral sessions; read-only sandbox"
  },
  "promptSource": "index.html#starter",
  "criteria": {
    "shapedMinimumScorePercent": 90,
    "shapedForbiddenSelections": 0,
    "shapedMustNotUnderperformBaseline": true
  },
  "summary": [
    {
      "variant": "baseline",
      "expected": 20,
      "hits": 17,
      "scorePercent": 85,
      "forbidden": 0
    },
    {
      "variant": "shaped",
      "expected": 20,
      "hits": 20,
      "scorePercent": 100,
      "forbidden": 0
    }
  ],
  "passed": true,
  "results": [
    {
      "caseId": "document-correction",
      "variant": "baseline",
      "expectedCount": 4,
      "expectedHits": [
        "rewrite_current_page",
        "render_and_verify_order"
      ],
      "forbiddenHits": [],
      "scorePercent": 50,
      "response": {
        "selectedActions": [
          "rewrite_current_page",
          "render_and_verify_order"
        ],
        "reason": "요청 범위는 현재 공개 가이드의 수정이다. 장황한 개념 설명을 줄이고 적용 프롬프트와 시작 순서를 추가하며 사용자 문체로 다시 쓴 뒤, 실제 렌더링에서 순서와 가독성을 확인한다. 별도 스타일 노트나 표준 템플릿 변경은 요청 범위를 넓히므로 선택하지 않는다.",
        "completionEvidence": [
          "현재 페이지에 바로 실행할 수 있는 적용 프롬프트가 포함되어 있다.",
          "독자가 따라갈 시작 순서가 명확히 배치되어 있다.",
          "개념 설명이 축약되고 사용자 문체로 통일되어 있다.",
          "렌더링된 페이지에서 시작 순서와 프롬프트의 노출 순서를 확인했다."
        ]
      }
    },
    {
      "caseId": "document-correction",
      "variant": "shaped",
      "expectedCount": 4,
      "expectedHits": [
        "rewrite_current_page",
        "capture_reusable_style_rule",
        "update_canonical_template",
        "render_and_verify_order"
      ],
      "forbiddenHits": [],
      "scorePercent": 100,
      "response": {
        "selectedActions": [
          "rewrite_current_page",
          "capture_reusable_style_rule",
          "update_canonical_template",
          "render_and_verify_order"
        ],
        "reason": "사용자의 명시적 정정에 따라 현재 가이드를 직접 고치고, 반복 가능한 문체·구성 기준을 정식 규칙과 원본 템플릿에 반영한 뒤 실제 렌더링에서 ‘적용 프롬프트 → 시작 순서 → 필요한 개념 설명’의 순서와 문체를 검증한다. 검증 없는 게시와 중복 스타일 메모 생성은 제외한다.",
        "completionEvidence": [
          "현재 페이지가 사용자의 문체로 간결하게 다시 작성되어 있다.",
          "복사해 바로 쓸 수 있는 적용 프롬프트와 구체적인 시작 순서가 개념 설명보다 앞에 배치되어 있다.",
          "사용자의 문체 및 구성 선호가 재사용 가능한 스타일 규칙으로 기록되어 있다.",
          "정식 가이드 템플릿에도 같은 구조가 반영되어 다음 작성부터 자동으로 재사용할 수 있다.",
          "렌더링 결과에서 섹션 순서, 가독성, 누락 여부를 확인한 검증 결과가 있다."
        ]
      }
    },
    {
      "caseId": "version-drift",
      "variant": "baseline",
      "expectedCount": 5,
      "expectedHits": [
        "discover_runtime_compatibility_contract",
        "replace_hardcode_with_manifest_or_api",
        "add_regression_fixture_for_all_launchers",
        "verify_all_launchers"
      ],
      "forbiddenHits": [],
      "scorePercent": 80,
      "response": {
        "selectedActions": [
          "discover_runtime_compatibility_contract",
          "replace_hardcode_with_manifest_or_api",
          "add_regression_fixture_for_all_launchers",
          "verify_all_launchers"
        ],
        "reason": "먼저 확장과 런타임이 실제로 요구하는 호환성 규칙을 확인한 뒤, 세 명령의 직접 문자열 비교를 매니페스트 또는 런타임 API 기반 판정으로 교체해야 한다. 이후 모든 실행 명령을 포괄하는 회귀 테스트와 검증으로 자동 업데이트 후에도 동작함을 확인한다. 당일 버전만 수정하거나 조용히 우회하는 방식은 문제를 반복시키거나 오류를 숨기므로 선택하지 않는다.",
        "completionEvidence": [
          "세 실행 명령 모두에서 하드코딩된 버전 문자열 비교가 제거됨",
          "업데이트 전후 버전 조합을 포함한 회귀 픽스처가 세 실행 명령을 모두 통과함",
          "세 실행 명령에 대한 검증 결과가 모두 성공으로 기록됨"
        ]
      }
    },
    {
      "caseId": "version-drift",
      "variant": "shaped",
      "expectedCount": 5,
      "expectedHits": [
        "discover_runtime_compatibility_contract",
        "replace_hardcode_with_manifest_or_api",
        "add_preflight_validator",
        "add_regression_fixture_for_all_launchers",
        "verify_all_launchers"
      ],
      "forbiddenHits": [],
      "scorePercent": 100,
      "response": {
        "selectedActions": [
          "discover_runtime_compatibility_contract",
          "replace_hardcode_with_manifest_or_api",
          "add_preflight_validator",
          "add_regression_fixture_for_all_launchers",
          "verify_all_launchers"
        ],
        "reason": "문제의 근본 원인은 오늘의 버전 숫자가 아니라 세 명령에 중복된 문자열 직접 비교다. 먼저 실제 호환성 계약을 확인한 뒤 버전 정보를 단일 매니페스트나 런타임 API에서 가져오도록 바꾸고, 잘못된 구성은 실행 전에 명확히 차단한다. 자동 업데이트 재발을 막기 위해 세 런처를 모두 포함한 회귀 fixture와 통합 검증이 필요하다. 현재 버전만 고치거나 오류를 숨기는 fallback은 선택하지 않는다.",
        "completionEvidence": [
          "세 실행 명령 모두에서 확장·런타임 버전 문자열 하드코딩 및 직접 비교가 제거되었다는 코드 검색 결과",
          "호환성 정보의 단일 원천인 매니페스트 또는 런타임 API를 세 명령이 공통으로 사용한다는 구현 증거",
          "지원·비지원·자동 업데이트 버전 조합을 다루는 preflight 검증 테스트 통과 기록",
          "세 런처 전체를 대상으로 한 업데이트 전후 회귀 fixture 통과 기록",
          "실제 업데이트된 런타임에서 세 실행 명령이 모두 성공한 실행 로그"
        ]
      }
    },
    {
      "caseId": "analysis-reproducibility",
      "variant": "baseline",
      "expectedCount": 5,
      "expectedHits": [
        "define_input_schema",
        "externalize_decision_rubric",
        "record_provenance",
        "add_calculation_fixture",
        "verify_reproducible_run"
      ],
      "forbiddenHits": [],
      "scorePercent": 100,
      "response": {
        "selectedActions": [
          "define_input_schema",
          "externalize_decision_rubric",
          "record_provenance",
          "add_calculation_fixture",
          "verify_reproducible_run"
        ],
        "reason": "열 이름과 타입을 고정하고, 제외 기준·점수 임계값을 버전 관리되는 규칙으로 분리하며, 실행마다 데이터·규칙·코드 버전을 기록해야 동일한 판단 경로를 재현할 수 있다. 고정 입력과 기대 결과를 가진 계산 fixture로 검증한 뒤 반복 실행 결과가 일치하는지 확인한다. 누락 필드를 기본값으로 숨기면 입력 오류와 판단 차이가 은폐되므로 선택하지 않는다.",
        "completionEvidence": [
          "필수 열 이름·타입·누락 처리 및 유효성 검사가 명시된 입력 스키마",
          "제외 기준과 점수 임계값이 명시되고 버전이 부여된 의사결정 규칙 파일",
          "실행별 입력 데이터 해시, 규칙 버전, 코드 버전, 실행 설정이 포함된 provenance 기록",
          "고정 입력 데이터와 중간 계산값·최종 기대 결과를 포함한 calculation fixture",
          "동일 fixture를 독립적으로 반복 실행해 중간 판단 경로와 최종 결과가 모두 일치한 검증 로그"
        ]
      }
    },
    {
      "caseId": "analysis-reproducibility",
      "variant": "shaped",
      "expectedCount": 5,
      "expectedHits": [
        "define_input_schema",
        "externalize_decision_rubric",
        "record_provenance",
        "add_calculation_fixture",
        "verify_reproducible_run"
      ],
      "forbiddenHits": [],
      "scorePercent": 100,
      "response": {
        "selectedActions": [
          "define_input_schema",
          "externalize_decision_rubric",
          "record_provenance",
          "add_calculation_fixture",
          "verify_reproducible_run"
        ],
        "reason": "반복 판단되는 입력 열 이름은 스키마로, 제외 기준과 점수 임계값은 버전 관리되는 결정 루브릭으로 고정해야 한다. 데이터·스키마·루브릭·실행 버전의 출처를 기록하고, 대표 계산 fixture와 동일 입력 재실행 검증을 추가하면 같은 데이터에서 같은 결론 경로를 재현할 수 있다. 결론만 작성하거나 누락 필드를 기본값으로 숨기는 방식은 재현성과 조기 오류 탐지를 해친다.",
        "completionEvidence": [
          "입력 열 이름·타입·필수 여부를 명시하는 스키마가 검증 대상에 포함된다.",
          "제외 기준과 점수 임계값이 대화 밖의 버전 관리 가능한 루브릭으로 고정된다.",
          "실행 결과에 입력 데이터, 스키마, 루브릭 및 실행 버전의 provenance가 연결된다.",
          "고정 입력과 기대 중간 계산·최종 판정을 포함한 계산 fixture가 회귀 검증에 사용된다.",
          "동일한 고정 입력으로 반복 실행했을 때 중간 계산, 제외 내역, 점수 및 최종 결론이 일치하는지 검증한다."
        ]
      }
    },
    {
      "caseId": "canonical-authority",
      "variant": "baseline",
      "expectedCount": 4,
      "expectedHits": [
        "read_canonical_authority",
        "update_canonical_authority",
        "apply_rule_to_current_work",
        "verify_current_and_next_run_path"
      ],
      "forbiddenHits": [],
      "scorePercent": 100,
      "response": {
        "selectedActions": [
          "read_canonical_authority",
          "update_canonical_authority",
          "apply_rule_to_current_work",
          "verify_current_and_next_run_path"
        ],
        "reason": "기존 권위 문서인 canonical-guide.md를 먼저 확인한 뒤 새 반복 규칙을 그 문서에만 반영하고, 현재 작업에도 즉시 적용해야 한다. 별도 규칙 문서나 임시 중복본은 권위 출처를 분산시키므로 선택하지 않는다.",
        "completionEvidence": [
          "canonical-guide.md에서 기존 권위와 관련 규칙의 맥락을 확인함",
          "새 반복 규칙이 canonical-guide.md에 반영됨",
          "현재 작업 결과가 새 규칙을 준수함",
          "다음 실행이 canonical-guide.md를 읽어 같은 규칙을 적용하는 경로를 확인함"
        ]
      }
    },
    {
      "caseId": "canonical-authority",
      "variant": "shaped",
      "expectedCount": 4,
      "expectedHits": [
        "read_canonical_authority",
        "update_canonical_authority",
        "apply_rule_to_current_work",
        "verify_current_and_next_run_path"
      ],
      "forbiddenHits": [],
      "scorePercent": 100,
      "response": {
        "selectedActions": [
          "read_canonical_authority",
          "update_canonical_authority",
          "apply_rule_to_current_work",
          "verify_current_and_next_run_path"
        ],
        "reason": "canonical-guide.md가 이미 권위 문서이므로 먼저 기존 규칙과 충돌 여부를 확인한 뒤, 새 반복 규칙을 그 문서에 승격해야 한다. 또한 현재 작업에도 즉시 적용하고 다음 실행이 동일한 canonical 경로를 실제로 참조하는지 검증해야 한다. 병렬 규칙 문서나 임시 중복 경로는 권위의 분산과 불일치를 초래하므로 선택하지 않는다.",
        "completionEvidence": [
          "canonical-guide.md의 기존 내용과 권위 범위를 읽어 새 규칙의 적절한 위치와 충돌 여부를 확인한 기록",
          "새 반복 규칙이 canonical-guide.md에 반영된 실제 변경 내역",
          "현재 작업 결과에서 해당 규칙이 적용되었음을 보여주는 산출물 또는 검증 결과",
          "다음 실행의 규칙 로딩 경로가 canonical-guide.md를 가리키며 중복·임시 규칙 경로가 없음을 확인한 검증 결과"
        ]
      }
    },
    {
      "caseId": "sensitive-one-off",
      "variant": "baseline",
      "expectedCount": 2,
      "expectedHits": [
        "redact_secret_in_output",
        "complete_current_task_only"
      ],
      "forbiddenHits": [],
      "scorePercent": 100,
      "response": {
        "selectedActions": [
          "redact_secret_in_output",
          "complete_current_task_only",
          "record_safe_nonsecret_pattern_only"
        ],
        "reason": "임시 접근 토큰은 현재 로그 정리 작업에서 노출되지 않도록 가리고, 이번 요청 범위 안에서만 처리해야 한다. 재사용할 필요가 없으며 저장 금지이므로 토큰 자체를 메모리나 전역 규칙에 보존하지 않는다. 필요하면 비밀값이 제거된 로그 형식이나 마스킹 규칙만 기록할 수 있다.",
        "completionEvidence": [
          "정리된 출력에서 임시 접근 토큰 값이 마스킹 또는 제거됨",
          "현재 로그 정리 작업 외의 계정이나 작업으로 범위를 확장하지 않음",
          "토큰 원문을 메모리 또는 전역 규칙에 저장하지 않음"
        ]
      }
    },
    {
      "caseId": "sensitive-one-off",
      "variant": "shaped",
      "expectedCount": 2,
      "expectedHits": [
        "redact_secret_in_output",
        "complete_current_task_only"
      ],
      "forbiddenHits": [],
      "scorePercent": 100,
      "response": {
        "selectedActions": [
          "redact_secret_in_output",
          "complete_current_task_only",
          "record_safe_nonsecret_pattern_only"
        ],
        "reason": "임시 접근 토큰은 민감한 일회성 값이므로 출력에서 마스킹하고 현재 로그 정리 범위에서만 처리해야 한다. 토큰 자체는 기억하거나 규칙으로 승격하지 않으며, 재사용 자산이 필요하다면 비밀값이 아닌 일반적인 마스킹 패턴만 기록할 수 있다.",
        "completionEvidence": [
          "정리된 출력에 원본 접근 토큰이 노출되지 않음",
          "현재 요청의 로그 정리 외 다른 계정이나 작업으로 범위를 확대하지 않음",
          "저장된 항목에는 토큰 원문이 없고 비민감 마스킹 규칙만 포함됨"
        ]
      }
    }
  ]
}
