---
name: preprep
description: '한국식 발표대본과 장표에 특화된 준비 하네스. 레퍼런스를 먼저 묻고(공식 장표가이드 · 참고 덱), 대화로 주제·구성·전개를 세운 뒤, 기승전결 배치안을 «여러 개» 내고 사람이 고른다. 제작 후 바닥 검사 — 금지 인용이 어느 면에 남았나, 원고와 노트의 단위 참조가 갈렸나, 재생성이 사람 편집을 삼켰나, 장 사이 의존이 깨졌나, 조어가 낭독면 첫 등장에 풀이를 달았나, 장당 발화가 상한을 넘었나. Triggers "발표 준비", "발표 대본 만들어줘", "장표 점검해줘", "덱이랑 대본 어긋난 데 있나", "발표 자료 정합성", "리허설 대본 확인", "presentation prep".'
user-invocable: true
allowed-tools: ["Read", "Bash", "Grep", "Glob"]
model: sonnet
---

# preprep — 한국식 발표대본·장표 준비 하네스

**특화가 한국식인 이유는 장식이 아니다.** 낭독 대본의 존댓말 레지스터, 조어를 첫 등장에
풀어주는 관습, 어절 중간에서 끊기지 않는 줄바꿈, 영어 직역이 남긴 번역투 — 이것들은
한국어 발표에서만 하중을 지고, 영어권 디자인 렌즈가 구조적으로 못 잡는다.

## 🟥 왜 «별도 하네스»여야 하나 — 스킬 하나로는 안 되는 자리

운영자 정의(2026-08-29): *「발표자료를 짓고 대본도 동기화하고 관련된 기술문서도 싱크하여
**출하할 수 있게 하는** 능력이 하네스를 별도로 두어야 하는 이유의 정체다.」*

기존 스킬은 전부 **표면 하나**를 본다 — `deep-clarify` 는 요구를, `ko-tech-writer` 는 산문 한 편을,
`corpus-grounding-expander` 는 코퍼스를. 🟥 **셋이 같이 움직이는 것과 «출하 가능 상태»를
아무도 소유하지 않는다.** 그 자리가 이 하네스다.

```
장표 ── 대본 ── 기술문서        셋은 «같은 것의 세 면»이지 세 문서가 아니다
  └──────┴──────┘
     동기화 + 출하 가능 상태 ← 여기를 소유하는 것이 이 하네스의 정체
```

그래서 레인 중 셋(L2 unit-ref · L7 regen · L8 interslide)이 **표면 사이**를 본다. 한 면만 보는
도구로는 구조적으로 못 잡는 자리이고, 실측이 그것을 세 번 보여줬다 — 재생성이 발표자 노트
20곳을 삼켰는데 빌드는 성공했고, S8 을 빼자 S9 가 성립 불가가 됐는데 렌더를 한 장씩 다 봐도 **구조적으로** 안 잡혔고 운영자가 잡았으며, 도해에 구워진 텍스트는 XML 을 읽는 눈에 구조적으로 안 보였다.

발표는 **자산군**이다. 덱 하나가 아니라 덱 + 원고 + 발표자 노트 + 기술문서 + Q&A prep +
초록 + 리허설 대본이고, 그것들이 **서로 어긋나는 자리**에서 사고가 난다. 한 장씩 봐서는
안 잡힌다 — 눈은 표면 하나를 보고 결함은 표면 사이에 있다.

## 🟥 이 하네스는 «검사기»가 아니다 — 레인은 마지막에 오는 바닥이다

운영자 정의(2026-08-29): *「위치 틀어짐, 일관성 없음, 번역투 등의 문제가 없고 구성을 잘
만들어내면 되겠지. 기승전결에 맞게끔 구성도 도와주고. 결국 많이 물어봐서 기초를 세우고
그것 기반으로 만들어서 퇴고를 하는 식일 거야. … 결국에는 취향이 중요하니까.」*

그래서 **무게중심은 만들기 전과 만드는 중**에 있고, 레인 아홉은 산출물이 아니라 **floor** 다.
레인이 초록이라고 좋은 발표가 아니다. 레인이 빨가면 나갈 수 없을 뿐이다.

| 층 | 무엇 | 누가 정하나 |
|---|---|---|
| **기계가 알아서** | 번역투 · 위치 틀어짐 · **논지 안 맞음** · **내용 순서** | 🟥 **묻지 않고 최적화한다.** 여긴 사람 시간을 쓸 자리가 아니다 |
| **사람과 대화로** | 알맹이 — 아이콘 하나, 대본을 취향에 맞춰 고치기, 주제 · 구성 · 전개 · 디자인 | 🟥 **절대 피할 수 없다.** 자동으로 정하면 그게 틀린 것이다 |

운영자 정의(2026-08-29): *「사람의 손이 번역투나 위치 틀어짐, 논지 안 맞음, 내용 순서에 맞는지를
최적화 **알아서** 시켜주고, 그 안의 디테일한 알맹이들을 … 사람과의 소통으로 맞춰나가는 것.
**이건 절대 피할 수 없지.**」*

🟥 **두 층은 실패 방향이 반대다.** 위는 «물어보면 마이너스»다 — 번역투를 고칠까 묻는 것 자체가
사람 시간을 쓰는 것이고 기계가 그냥 해야 한다. 아래는 «안 물으면 마이너스»다 — 아이콘 하나,
대본 한 줄의 말맛은 물어봐야만 맞는다. **어느 쪽을 반대로 하면 하네스가 방해물이 된다.**

### «알아서 커버» 가 지금 어디까지 되나 — 정직하게

운영자가 든 예시로 그대로 대조한다. **일일이 지적 안 해도 커버되어야 하는 것들**이다.

| 운영자 예시 | 지금 | 무엇이 보나 |
|---|---|---|
| **위치가 어긋나 있다** | 🟢 덮인다 | `ooxml/gate.py` ⑥ 화면 밖 도형 ⚠️ 그 검사에 붙은 사고 수치(`26p · 1,854,400 EMU`)는 **`gate.py` 자신의 인라인 주석 말고 대조할 기록이 없다** — 거짓이라는 뜻이 아니라 독립 출처가 없다는 뜻이다 |
| **번역투** | 🟢 덮인다 | ⑤에서 `ko-tech-writer` Step 2 |
| **주어가 빠져 있다** | 🔴 **미구현** (판별자는 있다) | 🟥 «패턴만으로는 못 한다»고 적었던 것을 정정한다 — 판별자가 이미 실재한다: **주어 생략의 가부는 문장이 아니라 화면이 정한다.** 그 문장이 뜨는 화면에 참조 대상이 있으면 생략이 맞고, **참조 대상이 사라지는 장에서 복원**한다. 화면 텍스트는 이미 추출되므로 이건 judged 가 아니라 **measured 후보**다. 다만 복원/유지는 4등급으로 갈린다 (목적어=복원 · 주어+신정보=복원 · **주어+구정보=그대로 둔다** · SOV 재배열) — 전부 복원하면 번역투를 **새로 만든다**. 미구현 상태다 |
| **화면이 너무 비어 보인다** | 🔴 **미구축** | gate.py 는 «밖으로 나갔나»를 보지 «안이 비었나»를 안 본다. 🟥 **정정 2026-09-01 — 「pptx→PDF 가 끊긴다」는 거짓이었고, 그 오진이 이 항목을 막고 있었다.** known-pair: `soffice` 부재는 **참**(`which soffice` → not found · LibreOffice.app 없음) · `pdftoppm` 실재는 **참**(`/opt/homebrew/bin/pdftoppm`) — **그런데 PowerPoint AppleScript `save as PDF` 로 120장 덱이 실제로 12회 렌더됐다**(`/tmp/v11*.pdf` 12개, 최신본 120페이지 `%PDF-1.3`, 2026-09-01 실측). ⇒ 끊긴 것은 **「LibreOffice 경로」**지 **「pptx→PDF」**가 아니다. 🟥 **미구축 사유가 바뀐다**: 「렌더가 안 된다」(장애물 실재) → **「기준선을 아직 안 쟀다」**(장애물 없음). 두 상태는 다르고, 전자는 «못 한다»로 후자는 «안 했다»로 읽힌다. [[feedback_rule_misdescribes_its_own_machine]] 기준선 형태는 정해져 있다: **레퍼런스 덱을 실측해 장 유형별 화면 자수 기준선을 세우고 미달 장을 센다** — 값은 발표마다 다시 재야 한다. 🟥 **정정 2026-09-04 — 기준선을 실제로 쟀다, 다만 반대편(과밀)이다.** 121장 한국어 덱 실측: 화면 자수 중앙 118 · 평균 133 · P90 207 · 최대 808. 읽는 부담(신규 글자 ÷ 발화 초) 중앙 10.0 · P90 16.9(§레인 R4·R5). ⚠️ 값은 발표마다 다시 재야 한다 — 임계를 코드에 안 박고 **그 덱 자기 분포**에서 뽑는 이유가 이것이다. 그리고 이건 게이트가 아니라 **순위표**다 — 정의상 항상 약 10%가 뜬다, 「후보 0건」을 목표로 삼으면 오독이다(§정직한 한계 참조). **「비어 보인다」쪽(하한)은 여전히 기준선이 없다** — 잰 것은 과밀(상한) 뿐이라 이 행은 아직 🔴 미구축으로 남는다 |
| **흐름이 매끄럽지 않다** | 🟡 **절반 덮인다** | L8 은 «지시 대상이 해소되나»를 볼 뿐 «논지가 서나»를 못 본다. 🟢 그 부분집합 하나는 이제 덮인다 — **L9 progression** 이 «선언된 단계가 화면에서 빠졌나»를 본다(압축에서 첫 칸이 떨어지는 실사고). ⚠️ «논지가 서나» 자체는 여전히 미해결이고, 되읊음 대조(리뷰어가 요약한 뜻이 저자 의도와 반대인가)는 **사람이 한다** |

🟥 **미구축 셋을 「advisory 라서 괜찮다」로 덮지 않는다.** 지금은 ④·⑤ 단계에서 **사람이** 하고
있고, 그건 운영자 정의상 **기계가 해야 할 일이 사람에게 남아 있다**는 뜻이다. 다음 개선의 과녁은
여기다 — 특히 「흐름」과 「주어」는 공통화될 수 있는 시행착오라 성공 정의에 직접 걸린다.

⚠️ **「논지 안 맞음 · 내용 순서」에는 아직 레인이 없다.** L8(장 사이 의존)이 가장 가깝지만 그것은
«지시 대상이 해소되나»를 볼 뿐 «논지가 서나»를 못 본다. 지금은 ④ 구성 단계에서 사람이 하고 있고,
**미구축이라고 여기 적어 둔다** — 없는 것을 있는 것처럼 두지 않는다.

## 이 하네스의 본체 — 그리고 성공을 무엇으로 재나

운영자 정의(2026-08-29, 이 하네스의 정본): *「**초기 영혼 심기를 질의응답을 통해서 같이 하고**,
하네스를 통해서 발표 자료 짓는 것 자체를 가속화시키고, 말미에는 페르소나나 스킬들로 커버 못 한
**취향의 영역을 사람과의 소통으로 깎아내는 것.** 그게 하네스의 본체다. 사람 손이 필연적으로 갈
수밖에 없는 하네스이지만, 적어도 우리가 겪어왔던 **구성과 형식, 그리기 등 공통화될 수 있는
시행착오만 단축시킬 수 있다면 그걸로 성공인 거다.」*

🟥 **성공 정의가 「사람 손을 없앤다」가 아니다.** 사람 손은 필연이고, 그것을 없애려는 하네스는
취향의 자리를 기계가 뺏어 결과를 나쁘게 만든다. 재는 것은 하나다 — **공통화될 수 있는
시행착오가 줄었나.** 구성 배치를 처음부터 더듬는 것, 형식을 매번 다시 정하는 것, 도해를
영점부터 그리는 것. 그것들만 줄면 성공이다.

🟥 **그리고 이 완료조건은 도달 가능하다.** 「다음에 이만한 발표가 오면 재자」 같은 조건은 영영
안 오므로 검증이 아니라 미루기가 된다(FH: 도달불가 Done-When 은 회피를 훈련시킨다).
반면 «이번에 겪은 시행착오 중 무엇이 공통화되나»는 **지금 이 자리에서 셀 수 있다.**

이것은 FH 교리의 이 도메인 사례다 — 하네스의 payoff 는 *「시행착오를 사람에게서 하네스로
옮겨, 사람 시간을 줄이고 주의를 비가역 지점으로 보내는 것」*. ①단계를 «영혼 심기»라 부르는
이유도 같다: FH 실측에서 **방향층(판단 회로)이 있으면 같은 토큰이 크게 효율적**이었다.
🟥 **다만 «정체성 선언»과 «심지(판단 회로)»는 다르고, 그 구분이 여기서 하중을 진다** — 선언만
떼어낸 12런에서는 **약한 모델이 오히려 올랐다**(Haiku 1.67 → 2.33). 원출처는 그 팔을
*"정체성 선언이 순손실"* 이라고 못박는다. 그러므로 ①이 심는 것은 «우리는 이런 하네스다» 라는
**선언문이 아니라**, 뒤 단계가 근거로 삼을 **판단의 축**이다 — 그래서 요구사항 수집이 아니라
**같이 세우는 것**이다.
⚠️ 초판은 이 자리에 «105런에서 영혼 선행이 결정적, 선언을 빼면 약한 모델 성능이 갈렸다» 고
적었다. **표본(105는 전체 합계, 해당 팔은 12런)과 방향이 둘 다 틀렸고**, 격리 그라운딩 감사가
잡았다.

## 제작 흐름 — 다섯 단계, 레인은 마지막

🟥 **새로 짓지 않는다.** 아래 네 단계는 FH 에 **이미 있는 능력**을 이 도메인 순서로 합주하는
것이다(no-reinvention). 각 단계는 **사람의 선택으로 끝난다** — 자동 결정이 있으면 그 단계는 틀렸다.

```
① 영혼 심기   /deep-clarify — 주제 · 내용 · 구성 · 전개 · 청중 · 시간 · «성공은 무엇인가».
              🟥 «많이» 묻고 **같이 세운다**. 받아적기가 아니다 — 답이 스펙이 되고 그 스펙이
              뒤 단계 전부의 근거다. 여기가 비면 뒤가 전부 기본값으로 채워진다
② 레퍼런스    「참고하려는 것이 있나」를 **먼저 묻는다**(ko-tech-writer §Step 1 과 같은 규율:
              표본 없이 톤을 단정하지 않는다). 행사 공식 장표가이드 · 좋다고 본 남의 덱 ·
              조직 템플릿. 있으면 /corpus-grounding-expander 로 그 실물을 근거로 세운다.
              🟥 «위반»은 원문 **문장**을 인용할 수 있을 때만 낸다 — 스와치·템플릿 실측값과의
              차이는 «위반»이 아니라 «차이»로만 낸다(§방법론 ⓖ, 숫자가 없는 원문에서 「위반」을
              냈다가 정정하고, 스와치만 근거로 「위반」을 냈다가 철회한 실사고)
③ 프런티어    ②가 비었거나 더 넓히고 싶을 때만. persona-innovator(Mode F) · /frontier-digest
              로 세련된 방법을 찾아온다. 🟥 찾아온 것은 **후보**지 결정이 아니다
④ 구성        기승전결. 하네스는 배치안을 «몇 개» 내고 사람이 고른다.
              🟥 하나만 내면 그건 제안이 아니라 결정이다
⑤ 제작·퇴고   마이크로매니징. 문체는 /ko-tech-writer 로 — 레지스터 · 실물 캘리브레이션 ·
              번역투 제거 · 수치 게이트 · 지각 QA.
              🟥 **도해를 건드렸으면 렌더한다** — 연결선 잔해 · 도형 종류 이탈 · 빌드 프레임
              텍스트 소실 · 부연-본문 밝기 경쟁 넷 다 렌더 없이는 구조적으로 안 보였다(§방법론 ⓒ).
              🟥 **장을 뺄 때는 뒤 장의 전제인지 먼저 본다** — 지운 장이 다음 장 부제의
              접속사(「그러나」 류)가 받는 말이었던 실사고가 있다(§방법론 ⓔ)
              🔷 **도해는 타입 있는 JSON 에서 굽는다**(2026-09-05 신설, 5단계 안의 갈래이지 6단계가
              아니다). `python3 diagram_from_json.py <spec.json> --out <png> --css <덱 토큰.css>
              --no-legend` — 외부 렌더러 archify(MIT, 로컬 설치·소스 복사 0)의 showcase validate 를
              **못 통과하면 굽기를 거부**하고, 통과하면 deliver → 뷰어 크롬 없는 SVG 단독 PNG(≥3840px)
              → 굽기 영수증. 덱 자기 규약(배경·강조색·폰트)은 archify CSS 변수 override 로 꽂는다 —
              archify 색을 덱에 가져오는 게 아니라 **덱 규약을 렌더러에 꽂는다**(§방법론 ⓓ). 가이드 뷰
              인터랙션은 장표에 없으므로 `--focus id,…` 빌드 프레임으로 번역한다(§B3 좌표 고정).
              🟥 archify 는 글자 크기 토큰이 없어 **viewBox 폭이 글자 pt 를 정한다**(720 → 라벨 29pt·
              부제 19pt / 1137 → 12pt) — 그래서 폭 상한이 굽기 거부 조건이다. 대응표·차이·취향 판정
              항목: `tracks-meta/dispatch/2026-09-05_archify-preprep/DESIGN_TOKENS.md`(운영자 로컬)
─────────────────────────────────────────────────────────────────
바닥         `python3 preprep.py` — 아래 레인. 걸리면 ⑤ 로 되돌아간다
```

**②를 건너뛰지 마라.** 「레퍼런스 있나」를 안 묻고 만든 것은 취향이 아니라 **기본값**이다.

> 출처: 챔버 런 #14 EMIT(2026-08-20). 실사용 검증 = 2026-08-29, **여러 차례 리뷰를 반영해
> 운영자가 정본으로 확정한 덱**(`ifkakao26_slides_v1.0`)에 돌려 벼려졌다.
> 🟥 **이 하네스가 그 덱을 통과시킨 것이 아니다** — 이미 확정된 뒤에 스캔했고, 발표 자체는
> 2026-10-14 로 아직 하지 않았다. 「이견 없이 통과」는 운영자 구두 보고(2026-08-29)이고
> 기록으로 대조할 문서가 없다 — 반대로 그 덱에 대한 리뷰 지적은 최소 3회차가 기록에 있다. 「다표면 읽기」는 이 하네스의 **한 렌즈(L2)** 이지 전체 이름이 아니다.

## 쓰는 법

```bash
SKILL=plugins/fh-commons/skills/preprep     # 이 스킬의 위치
cd "$ASSET_ROOT"                            # 발표 자산군의 루트
cp "$SKILL/surfaces.example.yaml" surfaces.yaml   # 표면 목록은 사람이 적는다
python3 "$SKILL/preprep.py"
# exit 0 통과 · 1 발견 · 2 판정불가(계기오류/미측정 — PASS 아님)
```

🟥 **표면 목록은 코드가 아니라 `surfaces.yaml` 에 있다.** 챔버 런 실측: 목록을 코드에 박아서
같은 물건이 세 번 따로 지어졌다. 무엇을 표면으로 볼지는 발표마다 다르고, 그건 판단이다.

## 레인

| 레인 | 무엇을 재나 | 성격 |
|---|---|---|
| L1 canon | 인용금지·조건필수·**폐어**가 **전 표면**에 걸리나. USE 와 MENTION 을 **갈라서** 낸다 — 🟥 폐어를 «걷어냈다»고 적은 원장 자신이 그 낱말을 담으므로, 이 구분이 없으면 원장이 자기를 신고한다 | 차단 |
| L2 unit-ref | 표면 쌍의 단위 참조 정합(원고 ↔ 노트) | 차단 |
| L3 inventory | 선언된 표면이 실물로 있나 · 기계로 읽히나 | 차단 |
| L4 getput | 왕복 no-op 컨트롤 — 사람이 안 고쳤는데 왕복이 안 닫히면 그 차이는 **왕복기 손실**이다 | 차단 |
| L5 jargon | 선언된 조어가 **낭독면 첫 등장에 풀이**를 달았나 | 차단 |
| L6 pacing | 장당 발화 상한·평균·분포. 상한은 사람이 `surfaces.yaml` 에 적는다 | 차단 |
| L7 regen | **재생성이 사람 편집을 삼켰나** | 차단 |
| L8 interslide | 장 사이 의존이 깨졌나 (OK/BROKEN/**UNRESOLVED**) | 🟥 advisory |
| **L11 promise** | **앞에서 예고한 것이 뒤에서 상환되나** — 후보를 나열하고 «예고 N 회 vs 뒤에서 M 회»를 센다. 실사고: 「세 번」 예고에 상환 1건 | 🟥 advisory · **판정은 사람** |
| **L10 adjacent-dup** | **인접 장이 같은 문장을 다시 읽나** — 쪼갤 때 뒤 프레임에 원본을 통째로 남기면 앞 장에서 읽은 문장을 또 읽는다. 실측 117자 중 82자(70%) | 차단 (임계는 사람이 적는다. 미기재면 측정만) |
| **L9 progression** | **선언된 단계 중 하나가 화면에서 빠졌나** — 실사고: ①②③④ 중 ①이 화면에서 떨어져 리뷰어가 논지를 **정반대로** 읽었다. 개별 문장은 전부 옳았다 | 차단 (선언된 것만 본다) |
| **L12 diagram** | **타입 JSON 도해가 «지금 JSON» 에서 validate 를 거쳐 구워졌나** — `kind: diagram_source` 표면의 굽기 영수증(`*.receipt.json`)으로 JSON 지문 일치 · showcase validate ok · PNG 실제 폭(IHDR 직독) ≥ 3840 · viewBox 폭 ≤ 720 · 여백. 실사고 후보 셋: JSON 고치고 PNG 안 구움 · 미검증 JSON 손렌더 · 픽셀은 충분한데 글자 12pt | 차단 (선언된 표면만 · 영수증 없는 손그림은 **UNMEASURED**, 0 아님) |
| **G ooxml** | pptx 구조 9종 — 관계 참조 무결성 · 죽은 Content_Types Override · **화면 밖 도형** · 열린 도형 채움 · 선 굵기 토큰 래칫 | 차단 (`python3 ooxml/gate.py <풀린 pptx 트리>`) |
| **R1 orphan-connective** | 선두 줄이 «그러나/그래서»로 뒤집는데 그 문장의 주어가 **직전 장 어디에도 없다** | 🟥 advisory · **실물 known-positive**(실제 백업에서 뜬 결함) |
| **R2 enum-dropped** | 앞 장이 ①②③ 으로 센 것을, 이 장이 «이 셋 중…» 이라 부르며 **번호 없이** 재편한다 — 1:1 대응이 안 보인다 | 🟥 advisory · **실물 known-positive** |
| **R3 lead-term-unbacked** | 선두 줄이 **강조색으로 선언한 낱말**이 그 장 다른 어디에도 없다 — 화면이 자기 부제를 못 받친다 | 🟥 advisory · **합성 뮤턴트 known-pair**(자연 발생본이 파일로 안 남아 실물 2장을 줄여 만든 픽스처로만 계량됨 — R1·R2·P1·P3 과 증거 등급이 다르다) |
| **R4 screen-heavy** | 화면 자수가 **이 덱 자기 분포**(P90)의 상위권 — 한 장에 너무 많이 얹었다 | 🟥 advisory · **순위표**(게이트가 아니다 — 늘 자기 덱의 상위 약 10%가 뜬다, 「후보 0」이 목표가 아니다) |
| **R5 read-load** | **직전 장 대비 새로 뜬 글자** ÷ 발화 초 — 화면은 늘었는데 말은 짧다. 무대 지시([간지]/[진행])는 발화로 안 센다 | 🟥 advisory · **순위표**(R4 와 같은 성질) |
| **P1 build-jitter** | 같은 이름 도형이 **연속한 두 장**에서 조금 다른 자리에 있다 — 넘길 때 튄다 | 🟥 advisory · **실물 known-positive** — 🟥 대조된 도형-쌍이 0 건이면 「튐 없음」이 아니라 **UNMEASURED**(이름 중복 도형은 대조 못 해 통째로 뺀다) |
| **P3 adjacency** | 한 도형의 **오른쪽 끝**과 다른 도형의 **왼쪽 끝**이 맞닿으려다 어긋났다 | 🟥 advisory · **실물 known-positive** · 🟥 절대 목록으로 읽지 마라(기저 오탐 76건 실측) — `surfaces.yaml` 의 `geometry.baseline`(이전 판 pptx)을 주면 **편집 전/후 델타**로 돈다. **P2(near-miss, 같은 종류 모서리만 대조)는 미채택** — 구조적으로 실제 결함(다른 종류 모서리의 인접)을 못 잡아서다 |

🟥 **L8 이 advisory 인 이유**: 두 계기의 오탐을 **최저비용으로 무마하는 길이
「그 문장을 지우는 것」**이라, 종료코드에 태우면 원고를 나쁜 방향으로 미는 압력이 된다.
후보를 내고 판정은 사람이 한다. 오탐 다수가 정상이다.

🟥 **R1~R5·P1·P3 이 전부 advisory 인 이유**: L8·L11 과 같다 — 오탐의 최저비용 무마가 원고를
망가뜨리는 방향(문장 삭제·형식 왜곡)이라 종료코드에 태우지 않는다. `preprep.py` 배선도 findings 를
버리고 notes 로만 낸다(L8·L11 관례). `--lane R1,R2,R3,R4,R5,P1,P3`(또는 그룹 `R`·`P`)로 이 일곱만
골라 돌릴 수 있다 — 🟥 **L1~L11 은 아직 이 `--lane` 필터를 안 탄다**(늘 전부 돈다). 정본:
`tracks-meta/fh_signal_2026-09-04_preprep-evolution.md` §1·§2 · 코드: `lane_slide_relations.py` ·
`lane_geometry.py` · 픽스처: `fixtures/mk_slide_fixtures.py`(테스트 시 생성) +
`fixtures/fixture_R3_{positive,negative}.pptx`(실물 2장) · self-test: `test_preprep_lanes_rp.py`.

## 문체는 레인이 아니다 — 레퍼런스와 스킬이 한다

초판에는 `ko-tech-writer` Step 2 를 레인으로 복제한 **L9** 가 있었다. **뺐다.** 이유가 둘이다.

🟥 **① 예측보다 레퍼런스다.** 패턴으로 «나쁜 문장을 미리 맞히는» 것보다 **참고할 실물을 묻고
받는 것**이 확실하다. 회고 검증을 세 문서쌍에 돌렸는데 **전부 판별 불가**였다 — 고편집 쌍은
소음(base 52%·43%)이 신호를 덮고, 저편집 쌍은 사건 자체가 없었다(base 1.6%, 짚힌 8줄 중 1건,
기대값 0.13). 그리고 이 급의 산출물은 다시 오지 않으므로 **앞으로도 측정 불가다.**
반면 레퍼런스는 물어보면 그냥 받는다.

🟥 **② 그것은 중복이었다.** L9 의 다섯 클래스는 `ko-tech-writer` Step 2·4-b 를 옮긴 것이고,
이 스킬은 ⑤에서 그 스킬을 부른다. 즉 **빼도 능력은 정본 자리에 그대로 있다** — 제거는 손실이
아니라 중복 해소이고, 이 하네스가 이원화에서 지키는 단일-소스 원칙과 같은 자리다.

⇒ **번역투·레지스터·수치 게이트·지각 QA 는 `ko-tech-writer` 로 간다.** 여기 레인으로 두지 마라.

## 갈라 적는 것 (합치면 계기가 거짓말한다)

- **USE ↔ MENTION** — 금지어를 «쓴 줄»과 «쓰지 말라고 적은 줄»은 다르다. 거르지 않고 두 부류로
  낸다. 죽은 필터는 진짜를 죽인다. ⚠️ 이 구분은 **패턴 매칭으로는 못 가른다** — 제거된 L9 의
  known-negative 픽스처 초판이 자기 헤더의 «언급»에 걸렸던 것이 그 실측이다. `ko-tech-writer`
  로 넘길 때도 같은 한계가 따라가므로, 후보 목록을 사람이 볼 때 이 축을 먼저 갈라라.
- **부재 ↔ 0** — 선언된 표면이 없으면 UNMEASURED 다. Keynote 는 사람만 읽는 면이라 영구 UNMEASURED.
- **텍스트 레이어 ↔ 화면** — pptx 는 XML 만 본다. **이미지에 구워진 텍스트는 구조적으로 안 보인다.**
  생성기를 `kind: figure_source` 표면으로 세우면 사각이 **좁아지지만 닫히지는 않는다**.
- **생성면 ↔ 사람 편집면** — 재생성은 사람 손질을 전량 덮어쓴다. 실측: 발표자 노트 **20곳**이
  소리 없이 사라졌고 빌드는 성공했으며 원고↔빌드 대조는 «원고대로»였다. L7 의 자리다.

## 방법론 — 실사용 하루치에서 역산 (2026-09-04)

121장 한국어 발표 덱 한 벌을 하루 동안 실사용하며 나온 판단 축이다. 코드가 된 것은 §레인의
신규 레인들이고, 아래는 코드만으로는 안 닫히는(또는 아직 코드가 아닌) 것들이다.

### ⓐ 장을 지워도 시간은 안 줄어든다
장 삭제만으로는 발화 시간이 0초 줄었다. 시간은 **대사**에 있고, 대사는 **화면 글자**에
묶여 있다(화면에 적혀 있으면 안 말할 수가 없다). 실제로 줄어든 것은 화면 자수를 깎았을 때뿐이다.
⇒ **분량 정리의 1순위 대상은 «장 수»가 아니라 «화면 글자»다.**

### ⓑ 전역 축은 한 장짜리 렌더로 판정하면 안 된다
색을 여러 면 바꾸고 한 장씩 렌더해서 「개선」이라 판정했는데, 전체를 이어서 넘겨 본 판정은
전달력 저하로 되돌렸다. 두 판정은 다른 것을 본다 — 한 장 안의 대비와, 여러 장을 흐르는 동안
「여기가 문제다」가 꽂히는 일관성은 같은 속성이 아니다. **후자는 한 장짜리 렌더에 구조적으로
안 나타난다.**
⇒ 색·타이포 같은 전역 축은 **연속 구간을 이어서** 보거나 사람이 넘겨 봐야 한다.
⇒ 반대 방향도 같이: 한 장에서 보인 것을 **전역으로 밀지도 마라** — 다른 장은 이미 다른
요소(예: 테두리 있는 카드)가 같은 문제를 막고 있을 수 있다.

### ⓒ 렌더 없이는 구조적으로 안 보이는 것들
같은 하루에 렌더 없이는 놓쳤던 것 넷 — 옛 도해의 연결선 잔해(도형만 지우고 선을 안 지움) ·
도형 종류가 덱 규약과 다름 · 빌드 프레임 전환에서 텍스트가 사라지는 자리 · 부연이 본문과
같은 밝기로 경쟁하는 자리. ⇒ **도해를 건드렸으면 렌더한다** — ⑤ 단계 규율.

### ⓓ 새 도형을 넣기 전에 «같은 역할의 기존 도형»을 세라
새로 넣을 도형이 덱 전체와 혼자 달랐던 사고는, 덱에 이미 그 역할의 규약이 백 회 넘게
있었기 때문이었다 — 색도 형태도. 희귀한 값(전체 중 여섯 번뿐)이라도 **그 여섯 번이 전부
같은 역할**이면 그게 답이다. ⇒ **덱 자기 규약을 먼저 추출**한다. 지어내는 것은 마지막 수단.

### ⓔ 장을 뺄 때 «그 장이 받는 말이었나»를 본다
한 장을 지우자 다음 장 부제의 「그러나」가 받을 말을 잃었다. 삭제 전 **뒤 장의 전제인지**
확인한다 — ⑤ 단계 규율.

### ⓕ 「알고도 남긴 것」과 「몰라서 남은 것」을 갈라 적어라
팔레트 밖 색을 정해서 남긴 자리가 있었다. 그렇게 적지 않으면 다음 감사자가 다시 «발견»한다
(실측: 지운 색이 다른 색번호로 되살아나 있었다). 체크리스트 항목: `presentation_checklist.md` C6.

### ⓖ 외부 가이드를 인용할 때 — «정의»는 «금지문»이 아니다
같은 레퍼런스를 두고 두 판정이 갈렸다: 폰트 크기 「위반」을 유보했는데 원문에 **숫자가 한
개도 없어서** 위반이 아닌 것으로 확정됐고, 색 「위반」은 스와치(정의)를 근거로 올렸다가
**철회**했다 — 색에 대한 유일한 **문장**은 「같은 위계에 같은 색으로 통일」이라 오히려 만족하고
있었다. ⇒ 레퍼런스에서 «위반»을 낼 때는 **원문 문장을 인용**하고, 스와치·템플릿 실측값은
«차이»로만 낸다 — ② 단계 규율.

## 정직한 한계 (2026-09-04 실측분, 인용 전에 읽어라)

§레인의 신규 텍스트 레인(orphan-connective · enum-dropped · lead-term-unbacked · screen-heavy ·
read-load)과 신규 기하 레인(build-jitter · adjacency)에 대한 캘리브레이션 잔여다. **이 절
없이 그 레인들의 수치를 인용하면 과계상이다.**

- **reps=1.** 텍스트·기하 신규 레인은 모두 known-positive 한 팔씩이다. 이 저장소 자기 바(≥3)
  미달.
- **lead-term-unbacked 의 known-positive 는 합성 뮤턴트다**(자연 발생본이 파일로 안 남았다).
  나머지는 실제 백업에서 떴으니 **증거 등급이 다르다 — 묶어 말하지 마라.**
- **오탐 0 은 n=1 코퍼스에서의 수치다.** 다른 덱에 옮기면 임계(선두 줄 판별 · 강조색 비교 ·
  활용 어미 제외 · 자기분포 P90)를 다시 재야 한다.
- **enum-dropped 는 표에서 한 칸 어긋난 프레임에서 뜬다** — 같은 표의 이웃 프레임이라 부류는
  맞지만 쪽수가 어긋난다.
- **adjacency 기저 오탐이 76건.** 절대 목록으로 쓰면 안 된다 — 편집 전/후 델타 용법이 전제다.
- **L8 오탐 진단(«저희»·«그대로»)은 이 한 덱에서 나왔다.** 다른 한국어 코퍼스에서 같은 비율인지는
  미측정.

## Done When

| 조건 | check-class |
|---|---|
| `python3 preprep.py` 가 선언된 전 표면에 대해 돌고 종료코드가 0/1/2 중 하나로 확정된다 | mandatory-pass |
| **공통화된 시행착오가 줄었다** — 이번 제작에서 «지난번에도 겪었고 이번엔 안 겪은» 것을 이름으로 적을 수 있다(구성 배치 · 형식 결정 · 도해 영점 그리기). 0건이면 이 하네스는 이번에 값을 안 냈다 | judged — 적대 짝: 그 목록을 저자가 아닌 사람이 읽고 «그건 원래 안 겪는 것 아닌가»를 되묻는다 |
| **레퍼런스를 물었다** — 참고할 실물이 있나를 묻고, 있으면 그것을 근거로 세웠다. 없으면 «없다»고 기록했다(안 물은 것과 구분) | mandatory-pass |
| 단일 소스 드리프트 앵커가 통과한다 (`scripts/test_preprep_drift_anchor.sh`) | measured |
| 발견 목록을 사람이 판정했고, advisory 후보 중 **남긴 것에는 남긴 이유**가 적혔다 | judged — 적대 짝: 그 판정을 저자가 아닌 사람이 다시 읽는다(격리 그라운딩). 자기 판정으로 대체 금지 |
| **도해를 건드렸으면 렌더 결과를 첨부했다**(§방법론 ⓒ) | judged — 적대 짝: 렌더 파일이 실제로 존재하는지(경로·확장자·이번 편집 이후의 mtime)는 별도로 measured 로 확인한다. 「첨부했다」는 자기신고만으론 인정하지 않는다 |

## 이 하네스가 못 하는 것

발표를 **잘 만들어 주지 않는다.** 어긋난 자리를 찾을 뿐이고, 무엇을 말할지·어떤 순서로
놓을지는 판단이다. 그리고 위 「갈라 적는 것」의 네 사각은 **좁아진 것이지 닫힌 게 아니다**.
