--- title: Execution Profiles Rule source_type: meta status: stable tags: [meta, llm-wiki, validation, testing, static-analysis] last_reviewed: 2026-07-20 --- # Execution Profiles Rule 이 rule은 작업 비용을 줄이기 위한 생략 규칙이 아니라, 어떤 검증을 항상 실행하고 어떤 고비용 review를 profile·risk에 따라 추가할지 정하는 실행 계약이다. 기계 판독 SSOT는 [`harness/source/execution-profiles.json`](../harness/source/execution-profiles.json)이다. ## 공통 불변식 모든 profile은 다음 cheap deterministic check를 실행한다. profile이나 risk를 이유로 생략할 수 없다. - input schema와 repo-relative path 검증 - source 존재 여부, source 전체 bytes의 SHA-256, 지정 line range 검증 - 지정 line range 안 exact UTF-8 quote의 byte 일치 검증 - `(finding.id, finding.role)` 중복 검증 - 기록된 `argv`, `exit_code`, `stdout_utf8`, `stdout_sha256`, `exact_match` 검증 - 기존 frontmatter, link, naming, taxonomy, coverage 같은 적용 대상별 결정론 검사 quote proof의 SSOT는 `harness/runtime/proof_manifest.py`가 PASS로 검증한 `proof-manifest/v1` JSON이다. 이 도구는 manifest의 `argv`를 실행하지 않는다. 캡처한 stdout과 source bytes를 검증할 뿐이며, 기본 실행은 read/verify only다. `--output `가 명시된 경우에만 PASS manifest를 atomic write한다. 불일치, 파일 부재, hash mismatch, line range 오류, non-zero exit, `exact_match=false`, finding-role 중복은 non-zero다. ## Runtime CLI runtime은 모두 Python stdlib만 사용하며 JSON 결과와 non-zero 실패 코드를 반환한다. ```bash # project Work Item → branch packet + project MOC (쓰기 전 staging 검증) python3 harness/runtime/branch_from_project.py --dry-run python3 harness/runtime/branch_from_project.py --apply # structured project/parent_branch edge → generated children reverse view python3 harness/runtime/moc_indexer.py --root . --check python3 harness/runtime/moc_indexer.py --root . --apply # proof-request/v1의 source + expected quote → fixed proof-manifest/v1 python3 harness/runtime/proof_runner.py \ --repo-root . --run-root --output # persisted proof reference hard gate python3 harness/runtime/proof_hard_gate.py \ --repo-root . --run-root \ --manifest-sha256 \ --proof-count --pass-count --fail-count 0 # 사용자-facing 한국어 Markdown 검사; fix는 명확한 heading mapping만 변경 python3 harness/runtime/korean_lint.py --check python3 harness/runtime/korean_lint.py --fix-headings ``` `branch_from_project.py`는 target이 이미 있거나 WI/DEC pinned revision이 맞지 않으면 쓰지 않는다. apply의 project/branch 교체 중 한 파일이라도 실패하면 앞선 교체를 원본 bytes로 rollback한다. `proof_runner.py`는 request에서 argv를 받지 않고 `proof-runner/exact-utf8-v1` 고정 실행 기록만 생성한 뒤 같은 프로세스에서 `proof_manifest.py` verifier를 호출한다. ## Profile 선택 | Profile | 용도 | Semantic review | Adversarial review | |---|---|---|---| | `capture` | raw 원자료와 외부 source를 빠르게 보존 | `risk >= high`일 때 | 기본 불필요 | | `design` | 대안 비교, 결정 조건, 구현 계약 작성 | `risk >= medium`일 때 | `risk >= high`일 때 | | `audit` | corpus/report 감사와 finding 검증 | 항상 필수 | findings 5개 이상 또는 `risk >= high`일 때 필수 | | `publish` | canonical 기반 외부 파생·공개 전 최종 검수 | 항상 필수 | findings 5개 이상, `risk >= high`, 공개 claim 존재 중 하나면 필수 | risk 순서는 `low < medium < high < critical`이다. 여러 조건이 맞으면 더 강한 조건을 적용한다. 애매하면 한 단계 높은 risk를 선택하거나 보고서에 미확정 risk를 실패 gate로 남긴다. ## Audit 비약화 조건 `audit` profile은 기존 reporting 계약의 9 gates(`scope`, `matrix`, `finding`, `quote`, `adversarial`, `priority`, `link`, `language`, `artifact`)와 verdict 산식을 그대로 유지한다. proof manifest PASS는 `quote_gate`의 증거 형식만 교체하며 다른 gate를 대신하지 않는다. risk-sampled adversarial review는 기존과 같이 `PARTIAL (risk-sampled)`이고 `COMPLETE` 근거가 될 수 없다. ## Report 표현 v2 신규 v2 보고서는 모든 성공 proof를 Markdown에 복제하지 않는다. - §7.1에는 manifest 경로, `run.id`, profile, proof count, manifest SHA-256, verifier exit code를 기록한다. - Markdown에는 실패 proof만 `finding.id/role`, error code, source path와 line range 단위로 펼친다. 원문 stdout 전체를 성공 행마다 붙이지 않는다. - controller는 manifest를 다시 검증한 실제 명령과 exit code를 `controller-verification.md`에 남긴다. - manifest가 없거나 verifier가 non-zero면 `quote_gate` FAIL이다. 과거 audit 산출물은 재작성하지 않는다. 신규 run의 quote gate는 `proof-manifest/v1`과 `proof-hard-gate-result/v1`만 사용하며 inline shell transcript나 `sed-proofs.md`를 대체 SSOT로 인정하지 않는다.