# Notes — 40-runtime-vendor-legal M7

계획서: `.claude/plans/insuniverse-docs-40-runtime-vendor-legal-m7.plan.md`

> 이 파일은 두 가지를 담는다. (1) `/mccp:prp-implement` 게이트의 리뷰 기록 —
> 계획서 본문에 쓰면 `plan_hash` 가 움직여 plan-codex receipt 가 stale 로 떨어지므로
> 여기에 쓴다. (2) Task 0 층 (b) 1회 관찰과 Task 7 음성 케이스 관찰 원본.

## Codex Implementation Review

decision-set already converged in mccp-plan-codex review. No new implement-time decisions detected. Cross-gate dedupe applied.

- 근거 1 — 계획서 §Codex Adversarial Review 가 6라운드(R1·R2·R3 + 재봉인 3)를 싣고
  16건 전건 ACCEPT_NOW, backlog 이월 0, Open Questions 없음으로 닫혔다. 파일 배치 ·
  추상 경계 · 외부 의존 · 동시성 모델 넷 다 계획서가 선점했다 —
  §Files to Change 12행 · Task 0b 의 `CHECKS` 등록부 계약 · INV1(신규 의존 0) ·
  단일 프로세스 동기 실행.
- 근거 2 — `git diff --name-only origin/main...HEAD` 가 0건이다. implement 시점
  파일 확장이 없다.
- 근거 3 — plan-codex receipt `plan_hash` 가 현재 계획서 해시와 일치한다
  (`sha256:3b8c511c…`). 계획 승인 이후 새 결정이 들어오지 않았다.

### Security Reviewer

이 마일스톤은 인증·암호·비밀·입력 검증·주입·SSRF·경로 순회·권한 상승 어느 축도
건드리지 않는다. 산출물은 문서(`docs/**` 마크다운)와 게이트 하네스(`node` 빌트인만
쓰는 읽기 전용 검사)다. 2.5.5 의 보안 트리거 조건에 해당하지 않으므로 호출하지 않았다
— 호출 실패로 인한 fallback 이 아니다.

### Design Review

`impeccable-detect.js detect --mode implement` 가
`skill_available=true · design_signal=false · reason=no-signal` 을 냈다.
렌더 표면(`.tsx/.css/.html`) 변경이 없으므로 silent-skip 행이고, receipt 에
`impeccable_silent_skip=true reason=no-signal` 로 기록한다.

## 구현 중 판정 기록

### 판정 1 · 라운드 2 수렴 계수가 0 이다 — 그러나 지표는 미충족이다

`#7` 이 라운드 2 수렴 계수를 **0** 으로 냈다 (`사실과다름 0 + 빠짐 0`). 그럼에도
`#13` 은 `미충족` 을 낸다. 수열이 `[8, 0]` 이고 목표는 **연속 0건 2회**이므로 최소
`8, 0, 0` — 라운드 3 이 있어야 성립한다. 계획서 §관측 1 이 착수 전에 못박은 그대로이며,
이 창은 `충족` 을 주장하지 않는다.

라운드 2 표기의 근거는 둘이다.

- **M6 라운드 1 의 `빠짐` 8** — M6 흡수(디렉터리 없는 기저명 → 저장소 접두 붙은 전체
  경로)가 닫았다. `m6#check5` 를 실제로 돌려 확인했다:
  `#5 ok 해석 296/296 · 모호 0 · 행 초과 0`. 라운드 1 의 빠짐 사유(*결정적으로 되찾는
  경로 부재*)가 사라졌으므로 라운드 2 표기는 `ok` 다.
- **M6 라운드 1 의 `미검증` 138** — 사유가 *"어느 선행 하네스도 이 축을 읽지 않는다"*
  였다. M7 `#8` 이 그 축을 읽는다. 결박 111 · 미결박 27 로 갈렸다.

### 판정 2 · 관측 5 의 반증은 참이었다 — 그리고 결박 방법을 바꿨다

M6 원장 note 는 *"실측: 그 파일에 '적용 범위'·'예외·폴백' 문자열 0건"* 이라 적는데
`docs/05-schedules/04-runtime-topology.md` 실측은 `## 강제 지점 (개발)` 412행 ·
`## 적용 범위 (actor × 서비스)` 667행 · `## 예외·폴백` 713행으로 **셋 다 있다.**
계획서 관측 5 의 반증이 참이다.

그러나 *"문자열이 있다"* 는 *"검사가 읽는다"* 가 아니다. `#8a` 는 grep 이 아니라 선행
하네스 여섯을 **돌린 출력**에서 그 축을 무는 검사를 센다. 그 실측은 이렇다:

```
#8a ok 선행 하네스 6종 실행 대조 — 강제 지점 0건 · 적용 범위 0건 · 예외·폴백 0건 · 동의 기록의 두 문면 0건
```

**M6 note 의 핵심 주장은 참이었다.** 반증된 것은 괄호 안의 *문자열 0건* 이라는 부수적
근거이고, 그것이 뒷받침하려던 결론(*어느 선행 하네스도 이 축을 읽지 않는다*)은 여섯
하네스를 실제로 돌린 출력이 확인해 준다. 틀린 근거로 옳은 결론을 적은 자리였고, 이 창은
근거를 실행 대조로 갈아 끼웠다.

`#8` 의 결박은 세 부류다.

| 부류 | 방법 | 건수 |
|---|---|---|
| `anchor` | 동결 트리 앵커(`repo/path[:line]`)가 manifest head 에서 해석된다 | enforce 35 · fallback 36 |
| `table` | 표 행이 칸 전건을 갖고 어휘 안이며 id 가 3집합 교차에 있다 / 동의 표가 절 산문 주장과 정합 | scope 35 · 동의 표 5 |
| 미결박 | 사유를 이름으로 갖는다 | 저장소 밖 근거 17 · R-1 차단 10 |

**적용 범위 표의 열 수를 리터럴로 박지 않는다**(INV4). 처음 저작할 때 `11` 로 박았고
실제 헤더는 10열이라 35건 전부 거짓 미결박으로 떨어졌다 — 그 자리에서 리터럴을 지우고
표 헤더에서 유도하도록 고쳤다. 생산기(scratchpad)와 검증기(`.gates.mjs`)가 각각 계산하고
`#8` 이 둘을 대조하므로, 한쪽만 고치면 그 대조가 죽는다.

### 판정 3 · `digest` 정규화 규칙과 픽스처

Codex R3-F0 이 backlog 220행에서 네 값(`96feb485…`/`fc37398a…`/`52c7521d…`/`58438112…`)을
계산해 보이며 페이로드가 4가지로 읽힌다고 지적했다. 계획서가 못박은 정본은 **물리 행
전체**이고, 그것을 구현해 나온 값은 `96feb4854e602152` 다 — 네 후보 중 첫째와 일치한다.
`.claude/plans/insuniverse-docs-40-runtime-vendor-legal-m7.digest-fixture.json` 이 그 행
원문과 기대 digest 를 동결하고 `#1b` 가 매 실행 재현한다.

### 판정 4 · 두 소비기의 파싱 규칙을 **재구현하지 않았다**

`#12` 의 첫 구현은 `fixtask-projection` 의 `stripMarker` 를 하네스 안에 다시 썼고, 21행
중 3행에서 digest 가 갈렸다(backlog 222·223·224행). 재구현은 곧 세 번째 파서이고 그러면
`visible_to` 가 다시 자기 단언이 된다.

정정본은 **소비기 자신에게 묻는다** — mccp `scanBacklog` 를 호출하고
`fixtask-projection.mjs` 를 자식 프로세스로 spawn 해, 각 소비기가 낸 **필드**로 물리 행을
재구성한 뒤 정본 규칙으로 다시 해싱한다. 재구성이 물리 행을 되찾지 못하면 `#12` 가 죽는다
(실측: mccp 46/46 · fixtask 24/24 적중, 미적중 0). 배타성은 가정이 아니라 두 키 집합의
교차를 실제로 구해 얻는다 — 교집합 0, 합집합 70 == `#1a` 재열거 70.

## Task 0 — 층 (b) 1회 관찰

층 (a)(비파괴)가 게이트가 무는 유일한 층이고, 아래는 게이트 계약 **밖**의 1회 관찰이다.
`# 음성:` 행과 같은 지위이며 어떤 게이트도 이것을 재현하지 않는다.

```
$ bash .claude/plans/insuniverse-docs-40-runtime-vendor-legal-m7.probe0.sh --with-destructive
PROBE0-A golden findings.files 8건: 00-protocol.md 10-index-git.md 11-index-code.md 12-index-runtime.md 13-relation-contract.md 20-foundation-access.md 60-history-deprecated.md README.md
PROBE0-A 실 디렉터리 8건: 00-protocol.md 10-index-git.md 11-index-code.md 12-index-runtime.md 13-relation-contract.md 20-foundation-access.md 60-history-deprecated.md README.md
PROBE0-A golden 에만: [] · 디렉터리에만: []
PROBE0-B 임시 파일을 세우고 verify.sh --check 를 1회 관찰한다 — 관찰 뒤 지운다
PROBE0-B verify.sh --check rc=1
PROBE0-B   342:리포트 생성 실패 (1회차) — exclude 정합 MISMATCH 는 위 stderr 참조
PROBE0-B 청결 재확인 — findings/ 워킹트리 변경 0
PROBE0 blocked=yes reason=golden findings.files 동결 8건에 40-runtime-vendor-legal.md 가 없다 — 개설하면 유도 집합이 8에서 9로 커져 --check 가 어긋나고, 해소에 필요한 verify.sh --update 는 docs/_meta/verify/** 위임분이라 이 PRD 범위 밖이다
```

**층 (b)는 판정 근거가 되지 못했다.** `verify.sh` 가 `findings.files` 검사에 닿기 전
`exclude 정합 MISMATCH` 로 죽었다 — 서브모듈이 이 worktree 에서 빈 디렉터리이기 때문이며,
계획서 §Risks 첫 행이 예측한 그대로다. 그 죽음은 *"golden 이 막는다"* 의 증거가 아니라
**측정 실패**다. 판정을 낸 것은 층 (a)이고, 층 (a)는 `verify.sh` 를 거치지 않으므로
서브모듈 상태와 무관하게 답이 나온다. 이것이 계획서가 두 층을 가른 이유다.

## Task 7 — 음성 케이스 관찰

(아래 표는 `#1`~`#14` 전건을 깨뜨려 실행한 관찰의 원본이다. 계획서 §Validation 의
`# 음성:` 행이 이 표를 인용한다.)

### `#0` — 커밋 전 관찰

`#0` 의 음성은 나머지와 성질이 다르다. 손으로 깨뜨린 것이 아니라 **착수 시점의 실제
상태**에서 관찰됐다. PRD 마일스톤 표에 7행을 세우고 커밋하지 않은 상태에서:

```
$ node .claude/plans/insuniverse-docs-40-runtime-vendor-legal-m6.gates.mjs all
#0a FAIL: M4 rc=1 (검사 check15 에서)
all FAIL: 0/13 (실패: check0 … check12) — 전건 실행 후 집계

$ node .claude/plans/insuniverse-docs-40-runtime-vendor-legal-m4.gates.mjs check15
#15c ok [종료 후] provenance 행 1건 · Verdict done · closure 실재 · sha256 일치
#15b FAIL: 변경 행이 1개다 (기대 2)
```

M4 `#15b` 는 종료 후 모드에서 PRD diff 의 추가 행을 정확히 2개로 요구한다 —
`milestone-close` 가 4행과 provenance 행을 함께 쓰기 때문이다. 형제 창이 같은 PRD 를
미커밋으로 편집하면 그 계수가 어긋난다(backlog `id=40m5-m4-gate15-sibling-prd-edit`).
**커밋하면 `커밋 후` 모드로 갈려 통과한다** — 이 창의 `#0` 은 커밋 뒤에만 초록이다.

### `#1`~`#14`

실행기: `negative2.mjs` — 케이스마다 대상 파일을 백업 등록부에 넣고 깨뜨린 뒤 그 검사만
돌리고, 정상·실패·시그널 어느 경로로 끝나도 복구한다. 게이트 하네스의 `die()` 는 `finally` 를
건너뛰므로 `process.on("exit")` 훅이 필요하다. 끝나고 손댄 파일 전건의 sha256 을 다시 재
워킹트리가 시작 시점과 바이트 동일한지 확인한다.

| 검사 | 깨뜨린 입력 | 종료코드 | 파싱된 실패 사유 |
|---|---|---|---|
| `#1` | 처분 원장에서 한 행을 지운 사본 | 1 | `#1 FAIL: 누락 1건 — backlog 222행 (id=null digest=b43b89ab9e6397c5)` |
| `#1b` | digest 픽스처의 line 을 한 글자 고친 사본 | 1 | `#1 FAIL: digest 픽스처 재현 실패 — 기대 0000000000000000 실측 96feb4854e602152 (정규화 규칙이 저작 시점과 다르다)` |
| `#12` | 원장 한 행의 visible_to 를 mccp 에서 fixtask 로 고친 사본 | 1 | `#12 FAIL: visible_to 불일치 1건 — key=2c6df4e3ed337725/0 원장=fixtask 실측=mccp` |
| `#12c` | 신규 미결의 평문 행 원장 레코드만 지운 사본 | 1 | `#12c FAIL: logical_finding_id=40m7-round3-pending 의 물리 행이 1개 — visible_to={mccp}, 두 소비기 중 한쪽에서 비가시` |
| `#2` | verdict 를 어휘 밖 done 으로 고친 사본 | 1 | `#2 FAIL: 어휘 밖 verdict=done (backlog 220행)` |
| `#3` | findings 파일을 세우고 필수 표제 '근거 앵커' 를 뺀 사본 | 1 | `#3 FAIL: 항목 F-1 · 시험 항목 에 필수 표제 누락 — 근거 앵커` |
| `#4` | findings 를 세우고 원장 product-defect 를 파일에 안 쓴 사본 | 1 | `#4 FAIL: 원장에만 있음 10건 — 40m4-car-toggle-polarity-split` |
| `#5` | findings 파일을 세운 상태 (golden 갱신 없이) | 1 | `#5 FAIL: golden findings.files 에 없는 파일 1건 — 40-runtime-vendor-legal.md (회부 대상: docs/_meta/verify/** 소유자)` |
| `#5b` | probe0 이 blocked=undecidable 을 내도록 고친 사본 | 1 | `#5b FAIL: blocked 어휘 밖 — undecidable (허용: yes\|no)` |
| `#6` | meta.prior_ledger.sha256 을 한 글자 고친 사본 | 1 | `#6 FAIL: prior_ledger sha256 불일치 — 원장 0409178293a7 실측 e409178293a7` |
| `#7` | 라운드 2 원장에서 m6-01-code-015 를 뺀 사본 | 1 | `#7 FAIL: 라운드 1 비-ok id 미재등장 1건 — m6-01-code-015` |
| `#13a` | 원장에서 id 한 행을 지운 사본 | 1 | `#13a FAIL: 문서에만 있음 1건 — m6-01-anchor-001` |
| `#13b` | meta.convergence_count 만 0 에서 9 로 고친 사본 | 1 | `#13b FAIL: 재계산 0 != 기재 9` |
| `#8` | 미결박 행에서 사유(note)를 지운 사본 | 1 | `#8 FAIL: 결박 판정과 원장 불일치 1건 — m6-04-fallback-037 은 미결박인데 원장 note 가 비었다` |
| `#9b` | PRD 6행의 complete 를 in-progress 로 고친 사본 | 1 | `#9b FAIL: 6행이 기준선 blob 과 다르다` |
| `#10` | docs/_meta/verify/golden.txt 를 건드린 상태 | 1 | `#10 FAIL: 범위 밖 편집 1건 — docs/_meta/verify/golden.txt` |
| `#11` | 등록부에서만 check8 을 뺀 사본 (호출 행·기대 집합은 그대로) | 1 | `#11 FAIL: 4자 불일치 — '등록부' 에만 [] · 'all' 에만 [check8]` |
| `#14a` | receipt 의 meta.codex_disabled 를 true 로 고친 사본 | 1 | `#14a FAIL: codex_disabled=true — UI4 위반, 이 마일스톤은 Codex 리뷰 없이 봉인됐다` |
| `#14b` | codex_disabled=true 봉인 + MCCP_CODEX_DISABLED=1 을 준 실행 (receipt 는 그대로) | 1 | `#14b FAIL: 실효 정책 codex_disabled=true — 이 실행 시점에 Codex 가 꺼져 있다 (봉인 true · env 1)` |

복구 확인 — 손댄 파일 10건 전건이 시작 시점과 바이트 동일하다.
전건 exit 1 — 통과한 음성 0건 / 19건.

**`#5` 의 음성이 곧 Task 0 판정의 반사실이다.** findings 파일을 세우는 것만으로
`#5 FAIL: golden findings.files 에 없는 파일 1건` 이 난다 — `blocked=yes` 가 추정이 아니라
실행으로 확인된 값이라는 뜻이다.

**`#11` 의 음성은 한쪽만 지운 것으로 잡았다.** 등록부와 호출 행을 **함께** 지우면 기대 집합도
같이 줄어 통과한다 — 앞 판(R2-F2)이 그 자리에서 거짓 음성 케이스를 적었다. 기대 집합을
계획서 펜스에서 파싱하고 `all` 분모를 `CHECKS` 가 아니라 자기 실행 순서 배열에서 읽게 바꾼
뒤에야 이 음성이 재현 가능해졌다.

**`#14b` 가 `#14a` 와 갈린다는 것이 이 음성의 요점이다.** receipt 는 그대로 둔 채 봉인과 env
만 뒤집으면 `#14a` 는 통과하는데 `#14b` 가 죽는다 — 낡은 receipt 가 실행 시점 정책을
대신할 수 없다(R2-F1 흡수의 반사실).
## 로컬 리뷰 라운드 (`/mccp:code-review` · 브랜치 커밋 기준)

`origin/main...HEAD` 5커밋 · 13파일 대상. 게이트를 **실제로 돌려** 팁 상태를 실측했다.
실측 진입값: `all FAIL: 14/15 (실패: check10)` — 리포트 커밋 자신이 게이트를 깼다.

| 라운드 | A | B | 층위 | 흡수 | 기각 |
|---|---|---|---|---|---|
| L1 | code-review Local Mode (실행 대조) | (없음) | 1·5·6 | 5 | 0 |

### L1-F1 · 팁 커밋이 자기 게이트를 깼고 그 커밋이 15/15 을 주장했다 (층위 5)

`ea0b475` 가 더한 `.claude/PRPs/reports/…m7-report.md` 가 `ALLOWED_PREFIXES` 밖이라
`#10` 이 죽는다. 그런데 그 리포트 본문과 커밋 제목이 `15/15` 를 인용한다 — 리포트가
자신을 게이트에 넣지 않은 상태의 출력을 싣고, 커밋되는 순간 그 문장이 거짓이 된다.

흡수: 허용 접두에 `.claude/PRPs/reports/${SLUG}` 추가.
반사실: 추가 전 `all FAIL: 14/15 (실패: check10)` → 추가 후 `all ok 15/15 통과`.

### L1-F2 · `#0a` 선행 회귀 캐시가 자기 입력의 대부분을 키에 안 물었다 (층위 6)

구 `priorCacheKey` 는 `sha256(하네스) + EDITABLE_DOCS 2건`뿐이었고 주석은
*"입력이 하나라도 움직이면 키가 달라진다"* 고 적었다. 실제로 빠진 입력:

| 하네스 | 키에 없던 입력 |
|---|---|
| m1·m2·m4·m5 | `.claude/prds/insuniverse-docs-40-runtime-vendor-legal.prd.md` |
| m6 | `.claude/plans/codex-findings-backlog.md` · `docs/_meta/verify/golden.txt` · `docs/_meta/onboarding-questions.yaml` |
| m5·m6 | 11문서 중 `EDITABLE_DOCS` 밖 9개 |
| m3~m6 | `docs/_meta/extraction-manifest.yaml` · `docs/_meta/index/*` |

`#0b` 가 이것을 못 막는다 — 11문서만 보고, 내용이 `origin/main` 과 같으면 `foreign` 으로
빼고 통과시킨다. 그것이 이 저장소 규약(자식 브랜치 merge 필수)이 매번 만드는 상태다.
**실측 증거**: PRD 는 `987e67f` 17:45 에 바뀌었는데 m1 캐시는 17:30 에 쓰인 파일 하나뿐이고
재생성된 적이 없다 — 지금의 `M1 15/15` 는 PRD 편집 이전 트리에 대해 돈 결과였다.

흡수: 입력 집합을 **하네스 소스에서 유도**한다(`priorInputs`). 리터럴 목록을 이 파일에
박으면 하네스가 새 파일을 읽기 시작할 때 키가 따라가지 못하므로 유도로 둔다. 유도 건수는
`#0a` 가 출력에 싣는다 — 실측 `M1 7 · M2 11 · M3 13 · M4 20 · M5 30 · M6 28`.

반사실: `docs/_meta/index/vendor-behaviors.yaml`(m3·m4 만 읽는다)에 한 줄 더하고 `check0`
재실행 → `m3-eb60b0405d8d1a9e.out` · `m4-3621beb75e7463ae.out` 두 키가 새로 생겼고
m1·m2·m5·m6 키는 그대로였다. 구 키 함수에서는 이 파일이 움직여도 키가 불변이다.
파일은 즉시 복원했고 `git status` 로 청결을 확인했다.

**대가를 적는다.** 캐시 미스 시 선행 6종 전건 재실행이며 실측 m1 7s · m2 21s · m3 37s ·
m4 73s · m5 158s · m6 294s = 약 10분이다. 캐시를 지우면 `#0a` 와 `#8a` 가 서로 다른
프로세스라 20분이 된다 — 그래서 캐시는 남기고 키만 고쳤다.

**잔여 사각지대**: 런타임에 조립되는 경로는 소스에 리터럴로 없어 유도되지 않는다.
`#0a` 가 건수를 출력에 싣고, 0건이면 `priorCacheKey` 가 죽는다.
반사실: 경로 리터럴이 없는 소스에 같은 정규식을 걸면 유도 0건 — 그 값이 `die` 의 입력이다.

### L1-F3 · 파일 머리 주석이 `#12a` 를 사실과 다르게 적었다 (층위 1)

*"저장소 파일·플러그인 모듈은 자식 프로세스로만 부른다(#12a·#12b·#13a)"* — `#12b`·`#13a` 는
맞고 `#12a` 는 아니다. `mccpItems()` 는 `createRequire(import.meta.url)` 로 mccp
`derive/sources/backlog.js` 를 **인프로세스** require 한다. `#11c` 의 *신규 의존 0* 도
정적 `import` 지정자에 대한 주장이라 이 동적 require 를 포함하지 않는다.
결론(소비기에게 직접 묻는다)은 살아 있고 틀린 것은 방법 서술 하나였다. 주석만 고쳤다.

### L1-F4 · `#12` 의 삼항이 유령 키를 조용히 `fixtask` 로 읽었다 (층위 6)

`derived = mcSet.has(k) ? "mccp" : "fixtask"` — 두 집합 어디에도 없는 원장 키가 `fixtask`
가 된다. `all` 순서에서는 `#1` 의 집합 대조가 앞서 막지만 `check12` 단독 실행에는 그 선행이
없다. 이름 있는 실패로 갈랐다.

반사실: 원장 첫 행의 `digest` 를 `dead0000dead0000` 으로 바꾼 사본에 `check12` →
`#12 FAIL: visible_to 불일치 1건 — key=dead0000dead0000/0 이 두 소비기 키 집합 어디에도
없다 (원장에만 있는 유령 행)`, exit 1.

### L1-F5 · `frozenHas()` 죽은 코드

선언만 있고 호출 0건. 지웠다.

### 기각 0건 · 관측으로 남긴 것

- **`#8a` 가 네 축 전부 `0건` 인데 `ok` 를 찍는다** — 결함이 아니다. 위 §판정 2 가 그
  `0` 을 기대값(*어느 선행 하네스도 이 축을 읽지 않는다*)으로 명시한다. 게이트가 아니라
  관측 줄이다.
- **세션 진입 배너의 `Open Findings HIGH 12건` 은 오탐이다.** `.claude/state/findings/…m7.jsonl`
  실측 `finding_opened 16 / finding_adjudicated 16`, 잔여 0, 전건 `accepted`. 다만 그 항목들이
  가리키는 `.claude/reviews/plan-review-…-m7.md` 는 실재하지 않는다 — 판정의 정본은 이 notes 다.
  프로모터가 판정을 안 보는 것은 mccp 쪽 성질이고 이 창이 닫을 수 없다.
- **`plan_hash` 는 이 라운드에서 움직이지 않았다.** 흡수는 전부 `.gates.mjs`·notes·리포트에
  들어갔고 계획서 본문은 손대지 않았다. 실측 `hash-plan` =
  `sha256:3b8c511c3ddfe115f9a833bf8611941a9a00de57f17222fbc6b13a8f214c2c5f` == receipt 2종 기재값.
