# 04-2 강사 노트 (내부 보관 — 납품 대상 아님)

## rev1 반려 대응 요약 (2026-09-03)
FAIL 14의 뿌리는 계약 결함 5건 — R1~R10 전부 반영. `assets/contracts/04-2-rev1.md` 참조.
- U1(시연에서 남기는 열 개수) → **12개로 확정**, 계약 R3 그대로. (rev5 V2에서 13개로 재개정 — 아래 rev5 요약 참조)
- U2("폐업 뒤 인허가일" 규칙의 단독 시연 가능성) → **폐기.** 버릴 규칙 셋을 표준산업분류명 결측 22행·상호+지번 중복·동정보/호정보 열 2개로 교체(R1).

## rev2 반려 대응 요약 (2026-09-03)
FAIL 7 중 넷이 계약·자료 결함(중복 탐지/제거 미구분·중분류 사실 오류·구간 규칙 충돌·quiz·qr 주인 표기 미지정) — `assets/contracts/04-2-rev2.md` S1~S6 반영.
- **S1** 상호+지번주소 중복을 탐지(1,862행·907그룹)와 제거(955행)로 분리. 표준산업분류명 22 + 중복제거 955 = 합계 977행(1.21%). 집필자가 quote-aware perl 파서로 원본 80,704행 전수 재확인(아래 「대본 근거 메모」).
- **S2** 전공 구간 전제 정정 — 카페(비알코올 중분류)와 빵/도넛(기타 간이 중분류)은 **다른** 중분류다. 갈리는 것은 분류표가 아니라 인허가(휴게음식점 vs 제과점 영업)라는 것으로 프레임 수정.
- **S3** 경도·위도 허용값을 실측 min/max(127.249~127.538 등, 검사가 항상 0건 나오는 순환논리)에서 **정의 기반** 값(대전시 행정경계 근사 외접 사각형, 경도 127.24~127.56·위도 36.18~36.51)으로 교체. 근거 URL: 대전광역시청 「대전의 수리적 위치」https://www.daejeon.go.kr/drh/DrhContentsHtmlView.do?menuSeq=2033
- **S4** 도입 첫 축자를 "손에 쥐고 나가십니다"(완료 단정)에서 "만드는 과정을 봅니다"(과정 서술)로 교체. 지정 문자열.
- **S5** `quiz.md`·`qr.md` 첫 줄에 사업명 주인 표기, 맨 아래 "제작 디벨로켓" 추가.
- **S6** script.md의 `**[화면: …]**` 지시 11개 전부에 `(재구성)` + 촬영 시 실제 화면 교체 지시를 붙임(이전에는 4개만 표기돼 있었다).
- 위 수정으로 script.md 본문 줄 번호가 rev1 대비 밀렸다 — quiz.md의 대본 행 인용을 전부 재확인해 갱신.
- rev3 T1 지적: 슬라이드 빌더(`assets/tools/build_slides.py`)가 여전히 배치되지 않아 빌드 경고 유무를 집필자가 확인할 수 없다 — 이것은 §0.16의 미확인이다. 아래 「슬라이드 빌드 관련」 참조. **이 편은 「완료」가 아니라 「미완 — 빌더 미배치」로 보고한다.**

## rev3 반려 대응 요약 (2026-09-03)
FAIL 3 + 지적 6. 계약 쪽 둘(동/호정보 100% 빈칸은 이상치가 아니라 열 단위 결측 · 조작 시간은 자유 초가 아니라 단가표)은 오케스트레이터가 고쳤다. `assets/contracts/04-2-rev3.md` T1~T10 반영.
- **T1** notes.md의 자기모순("완료"로 적어 놓고 빌더 미배치 미확인을 남김)을 지움 — 위 rev2 요약 마지막 줄에서 「미완 — 빌더 미배치」로 정정.
- **T2** 동정보·호정보 100% 빈칸을 이상치 항목에서 **결측(열 단위)** 항목으로 옮김. "행 단위 결측이 아니라 열 단위 결측이라 행이 아니라 열을 버린다"로 재서술. 이상치 검사는 좌표 허용값(127.24~127.56/36.18~36.51) 밖 0건으로 별도 기록.
- **T3** "자치구명" → "시군구명"(데이터 사전 첫 항목은 열 이름 그대로).
- **T4** 함정 코드블록의 최빈값을 "기타 음식점업"(가상)에서 **"한식 일반 음식점업" 7,900건**(awk/perl 실측, `mode_std.pl`로 표준산업분류명 전체 집계 후 최댓값 확인)으로 교체.
- **T5** 삽질1(무인 코드)의 "하나씩 눈으로 확인"이 각색이었다 — 원자료(`author-a/probe/A/LOG.md`)대로 **"291건 중 20건 표본을 눈으로 확인, 4건 오탐"**으로 정정.
- **T6** `(축자, 지정)` → `(축자)`. 계약이 따옴표로 준 지정 문자열은 "0과 빈칸은 다른 뜻입니다."와 "버린 행을 기록하지 않으면 남이 재현할 수 없습니다." 둘뿐 — 그 외 축자는 지정이 아니다.
- **T7** quiz.md 문항1 해설의 대본 인용이 축약돼 있었다 — 원문 그대로(타입과 단위·논리 모순 절 포함) 전체 인용으로 교체.
- **T8** 좌표 상한을 36.50(내림)에서 **36.51**로 통일 — 외접이면 대전시 북단 실측값(36°30'0.8450"=36.500235)을 내림하지 않는다. script.md·slides.md·notes.md 전부 일괄 교체.
- **T9** 조작 표기를 자유 초에서 단가표 유형(파일열기20·열고르기30·검사실행30·AI응답대기30·표작성20·화면전환8)으로 전환, 시연 화면 지시 9개 각각에 유형 하나씩 배정(파일열기1·열고르기1·표작성3·검사실행1·화면전환2·AI응답대기1 = 186초). 시연 발화도 300자 가까이 걷어냄(중복 설명 문단 삭제·문장 압축) — 시연 발화 3,921→3,666자. 결과: **시연 발화+조작 = 17.76분(기준 18.2분 이하 충족)**, 총량 26.89분(25~30분 이내). 도입·이론·정리는 손대지 않음.
- **T10** slides.md `title: 25분 뒤 손에 쥐는 것` → `25분 뒤에 보는 것`(§0.12-2, 통제 못 하는 결과 단정 금지).
- 위 편집으로 script.md 줄 번호는 이번엔 거의 안 밀렸다(트림한 문단만큼 새 문단이 채워 순번 유지) — quiz.md 인용 행 재확인 결과 전부 그대로 유효.

## rev4 반려 대응 요약 (2026-09-03)
FAIL 1 · 지적 잔존 1(T6) + 새 지적 4. 계약 쪽 둘(위도 상한 표기 04-2.md 갱신 · 지정 문자열 범위)은 오케스트레이터가 고쳤다. `assets/contracts/04-2-rev4.md` U1~U6 반영. **시연 여유가 17초뿐이라 조작·발화를 늘리지 않는 것을 최우선으로 편집했다.**
- **U1 (FAIL-1)** 삽질1의 291건은 서울(은평 탐침, `author-a/probe/A/LOG.md`) 숫자였는데 대본에 지역 꼬리표가 없어 대전 데이터처럼 들렸다. "다른 지역 탐침에서 그렇게 찾으니 291건..."으로 출처를 되살리고, 대전 실측값 **61건**(`awk -F, 'NR>1 && $2 ~ /무인/'` 및 quote-aware perl 파서 이중 확인)을 문장 끝에 추가. 순증감 **+1자**(A 221자→B 222자) — 문장 재배치로 숫자 추가분을 상쇄.
- **U2 (T6 잔존)** 나머지 `(축자, 지정)` 3곳("오늘은 이 화면...", "이번 차시에서 정하는 것...", 였던 "이 둘을 한 줄로...")을 전부 `(축자)`로 정정. 지정 문자열은 계약이 준 둘("0과 빈칸은 다른 뜻입니다."·"버린 행을 기록하지 않으면 남이 재현할 수 없습니다.")뿐 — 마커는 괄호 안이라 count_script에서 어차피 제외되므로 이 수정은 글자 수에 영향 없음. notes.md의 "신규 지정 문자열" 표현도 삭제.
- **U3 (지적 2)** 삽질 지시문 끝의 "숫자나 수치는 이 장면에서 말하지 않는다"가 (291·61·20·4)과 자기모순이었다 — 문장 삭제(순감 약 −26자).
- **U4 (지적 3)** quiz.md 생각 과제를 계약 원문 어순대로 "데이터 하나를 적으시오" → "데이터** 하나를 적으시오"로 정정(quiz.md만 영향, script.md 글자 수와 무관).
- **U5 (지적 4)** 좌표 범위 검사가 타입/단위와 이상치에서 두 번 선언되던 것을 `(요점, 타입/단위·이상치)` 한 문단으로 합침 — 순감(문단 하나 통삭제, 병합 문장으로 소폭 상쇄, 순수치는 아래 참조).
- **U6 (지적 5)** 자가추정을 검증자 실측 기준으로 앵커링 — 아래 「분량 측정」 절 참조. rev3 검증자 실측 6,010자(도입406·이론1,508·시연3,703·정리393)를 기준값으로 두고, rev4 편집분(U1~U5)의 순증감만 집필자 도구(perl, count_script.py 규칙 재구현)로 계산해 더한다.
- U1·U3·U5로 시연 문단 순감 발생 — 집필자 도구 측정 시연 3,666→3,647자(−19). 같은 도구로 rev3 시점에도 3,666자였고 검증자 실측은 3,703자였으므로(도구가 37자, 약 1% 낮게 잡음) **보정 시연 ≈ 3,703 − 19 = 3,684자**. 시연 발화+조작 = 3,684/250 + 186/60 = 14.736 + 3.1 = **17.836분**(기준 18.2분 이하, 여유 약 22초로 소폭 확대). 조작 유형·개수는 rev3와 동일(9개·186초) — 이번 편집에서 조작을 늘리지 않았다.
- 총량 보정 ≈ (6,010−19)/250 + 3.1 = 23.964 + 3.1 = **27.064분**(25~30분 이내).
- 이번 편집(U1·U3·U5)은 모두 중간 구간에서 발생해 그 이후 줄 번호가 **2줄 당겨졌다**(U5에서 문단 하나 통삭제) — quiz.md 인용 행과 이 notes.md의 「짚을 지점」을 전부 재확인·갱신.

## rev5 반려 대응 요약 (2026-09-03)
둘뿐. `assets/contracts/04-2-rev5.md` V1·V2 반영. **시연 여유 22초, 늘리지 않는 것을 최우선.**
- **V1** "다른 지역 탐침에서 291건" → "서울 탐침에서 291건" — §0.18이 지역 이름을 요구. 순감(다른 지역→서울, 짧아짐).
- **V2 (계약 결함, 오케스트레이터가 04-2.md 시연 ①을 13개로 고침)** 중복 검사(상호명+지번주소)와 논리 모순 검사(시군구명 vs 지번주소)가 **지번주소**를 쓰는데 남기는 열 목록(구 12개)에 지번주소가 빠져 있었다. 대본의 "12개"→"13개"로, 열 목록에 지번주소 추가, 데이터 사전도 13행으로. 숫자 907/1,862/955/977은 원래부터 지번주소 기준으로 계산돼 있었으므로 **변경 없음**(도로명주소 기준이 아니다 — 도로명주소로 계산하면 911/1,870/959가 되므로 절대 바꾸지 않는다). 문장은 "행정 내부용 식별 코드는 오늘은" → "행정 내부용 코드는"으로 압축해 열 이름 추가분을 상쇄(A 171자→B 169자, 순감 2자). "12개"→"13개"는 자릿수 동일이라 글자 수 불변. `**[화면: …]**` 안의 12→13 표기(우측 slides.md도 동일)는 count_script에서 제외되는 구간이라 자유롭게 갱신.
- 이번 rev5는 시연 발화 글자 수를 **순감 또는 불변**으로만 편집했다 — 조작 유형·초(9개·186초)도 손대지 않음. 시연 여유(rev4 보정치 약 17.84분 기준)는 그대로거나 소폭 늘었다.
- 이 편집으로 script.md 줄 번호 변화 없음(문장 내부 치환만) — quiz.md 인용 행 재확인 결과 전부 그대로 유효.

## rev6 반려 대응 요약 (2026-09-03)
중복의 근거 문장이 데이터로 반증됐다 — 뿌리는 계약(상호+지번주소만으로 「같은 가게」라 부른 것). `assets/contracts/04-2-rev6.md` W1~W4 반영. **시연 여유 23초, 늘리지 않는 것 최우선.**
- **W1(F1)** 중복 검사를 「정의 먼저」 4단계 장면으로 재구성 — (1) 상호+지번주소만으로 907그룹·탐지 1,862 (2) 화면에서 그룹 하나(농부애한우, 유성구 죽동 599-2, 소고기 구이/찜·정육점)를 연다 → 같은 가게인가? 아니다 (3) 사전에 「같은 가게 = 상호·지번주소·소분류가 같은 행」이라고 정의 (4) 그 키로 686그룹·탐지 1,411·제거 725. 축자 "무엇이 같은 가게인지 먼저 적지 않으면, 중복의 개수는 정해지지 않습니다.". 버린 행 기록 표를 키·탐지·제거·비율 4칸으로, 합계 22+725=**747행(0.93%)**. 상호+지번주소만의 955는 "키를 바꾸면 이렇게 달라진다"는 비교 한 줄로만 남김. 그룹 하나 여는 장면에 `조작: 화면전환`(8초) 하나만 추가 — 조작 9개·186초→10개·194초.
  - 숫자 재현(perl, quote-aware CSV 파서, awk와 동등한 전수 카운트): 상호+지번주소 키 → 그룹907·탐지1862·제거955(불변, 기존 값과 일치). 상호+지번주소+소분류 키 → 그룹686·탐지1411·제거725. 907그룹 중 소분류가 갈리는 그룹 225개(24.8%) — 계약이 준 숫자와 전부 일치.
  - 이 개정으로 시연 문단(중복·버릴규칙·버린행표·정리 한 줄)을 전부 다시 써서 순감(시연 발화 3,647→3,584자, 조작+8초에도 불구하고 시연 총량은 오히려 17.67→17.57분으로 줄었다).
- **W2** 위도 상한 36.51은 원래부터 맞았다(script.md) — 대본은 손대지 않음. 계약 04-2.md는 오케스트레이터가 36.51로 갱신.
- **W3(U-B)** notes.md의 미완성 자리표시("·L(함정 장면...)") 실제 행 번호로 채움 — 아래 「짚을 지점」에 반영.
- **W4(U-A·U-D)** U-A: 「짚을 지점」의 인용이 rev5 V1(다른 지역→서울) 개정 전 문장이었다 — 정정해 반영(아래). U-D: script.md 머리말/상태 필드가 rev1 시점에 멈춰 있었다 — rev6으로 갱신.
- W1로 script.md 줄 번호가 크게 밀렸다(중복 장면에 화면 지시 1개·요점/축자 문단 3개 추가) — quiz.md 인용 행 전부 재확인·갱신. 슬라이드 다섯검사 demo·버릴규칙 table도 새 키·숫자로 갱신(총 슬라이드 수는 14로 불변, 기존 슬라이드 안에서 내용만 교체).

## rev7 반려 대응 요약 (2026-09-03)
둘 + 지적. `assets/contracts/04-2-rev7.md` X1~X3 반영. **시연 여유 32초, 늘리지 않는 것 최우선** — 실제로는 거의 순증 0(전체 시연 +1자)으로 마쳤다.
- **X1(F1, 계약 결함·고침)** "경도·위도 열은 원본에 문자열로 들어 있어서 숫자로 바꾸는 검사를 돌린다"는 사실이 아니었다 — 이 파일은 39열 중 6열(지번본번지·지번부번지·건물본번지·건물부번지·경도·위도)을 애초에 따옴표 없는 숫자로 적어 두었다. "경도·위도에 문자가 섞였는지 검사했습니다 — 걸린 값 0건. 이 파일은 두 열을 숫자로 적어 두었습니다. 더러운 원천에서는 여기서 걸립니다."로 교체(축자, 지정 아님). 순감 12자.
- **X2(F2)** notes.md의 도입 목업 숫자가 rev2 값(22/955/열2, 합계 977)에 멈춰 있었다 — 22/725/열2, 합계 747(0.93%)로 정정. 「키를 바꾸면」 비교(대본 근거 메모 §)에만 907/1,862/955가 남는다.
- **X3(지적 A~F 중 A·B·C·D·F 닫음, E는 오케스트레이터 몫)**
 - A: notes.md 낭독 금지의 코드블록 행 번호가 6줄 어긋나 있었다 — 정정.
 - B·C: 대전 「무인」 61건에 서울(291건)과 같은 캐벗이 없었다 — "눈으로 보면 3건이 오탐, 버릴 규칙을 적용하면 60건이다"를 붙임(script.md). 정제 전 숫자를 정제 전이라 밝히지 않고 쓰던 문제를 닫았다.
  - D: rev6 W1이 넣은 중복 그룹 화면 하나가 좌표범위·논리모순·열단위결측 세 검사를 전부 삼켜 727자/175초짜리 정지 화면이 됐었다 — 화면 지시를 조작 추가 없이 여럿으로 쪼갬(중복 구간 3개 신규 화면, 삽질 4장면도 1개→4개로 분리). 새 화면은 전부 재구성 표기, 조작 태그는 기존 것만 유지(9→10개 그대로, 신규 화면은 무비용).
  - F: slides.md 이론 챕터 라벨의 "대전 없음"이 뜻은 정반대여도 §0.14 문자 검사(이론 슬라이드에 대전 0회)에 걸렸다 — "소재 없이 — 어디서든 쓰는 이야기"로 교체.
  - E(README 36.50 vs 대본 36.51)는 오케스트레이터 몫 — 집필자가 손대지 않음.
- X1·X3의 화면 분리로 script.md 줄 번호가 다시 크게 밀렸다 — quiz.md 인용 행 전부 재확인·갱신, notes.md 짚을 지점도 전부 재대조.

## rev8 반려 대응 요약 (2026-09-03)
방향 하나 + 지적 둘. `assets/contracts/04-2-rev8.md` Y1~Y3 반영. **시연 여유 34초, 늘리지 않는 것 최우선** — 순증은 최종 84자에서 트림으로 69자까지 줄였다(약 16.6초).
- **Y1(F1)** 중복 규칙의 방향이 반대로 적혀 있었다 — "그룹마다 뒤에 오는 것만 하나 남기고"(살아남는 686행이 뒤바뀜) → "그룹마다 앞의 하나를 남기고 뒤에 오는 725행을 버린다"(script.md)로 정정. 계약·README의 "뒤에 오는 것을 버린다"와 방향 일치. 버린 행 기록 표 설명에도 규칙 문구 추가: `"같으면 앞 행을 남기고 뒤 행을 버린다"는 규칙으로`.
- **Y2(지적 A)** 대전 「무인」 61건의 "3건 오탐, 60건"이 산수가 안 맞았다(61−3=58이지 60이 아님) — "서울처럼 눈으로 봤더니 글자가 겹친 것 3건이 오탐 — 기준은 「무인 매장이 아닌데 글자만 겹침」. 정제 규칙(중복 1행)까지 적용하면 남는 건 57건이다"로 교체. 61−3(오탐)−1(중복 1행)=57, 산수 성립. 오탐 3건(충무인쇄·나무인테리어·무인양품롯데대전점)과 중복 1행(투무인텔, 동구 구도동 355 — 완전 동일값 2행)을 전수 눈검사·perl로 재확인, 목록을 notes.md 「대본 근거 메모」에 추가.
- **Y3(지적 B)** notes.md의 "화면 지시 12개"가 rev7 이후(18개) 상태를 반영하지 못했다 — 18개로 정정. 「짚을 지점」 전체를 rev8 기준으로 재대조(중복 방향·무인 61/3/57 반영), 헤더도 rev8로 갱신.
- 시연 발화 3,573→3,642자(+69자, Y1 지시분 ~31자 + Y2 대체분 53자를 다른 두 문장 트림 −27자로 일부 상쇄) — 시연 발화+조작 17.80분/18.2(여유 유지), 조작 유형·개수(10개·194초) 불변.
- 이번 편집은 기존 줄 내부 치환만이라 script.md 줄 번호 변화 없음 — quiz.md 인용 행 재확인 결과 전부 그대로 유효.

## rev9 반려 대응 요약 (2026-09-04)
순서 하나. `assets/contracts/04-2-rev9.md` Z1~Z5 반영. 계약 결함(시연 ①이 열을 13개로 먼저 줄이게 해 놓고 ②에서 지점명·동/호정보를 검사하라 했음)은 오케스트레이터가 고쳤다. **시연 여유 실측 18.7초, 늘리지 않는 것 최우선.**
- **Z1(F1)** 시연 순서를 계약이 준 순서로 전면 재배치: (1) 데이터 사전 — 검사용 17열(남길 13 + 검사 후 삭제 후보 4: 지점명·건물명·동정보·호정보) (2) 다섯 검사(39열 원본에서) (3) 버릴 규칙 셋 + 기록 표 (4) 그다음 13열로 줄인다. 원래 이론상 검사 전에 미리 열을 줄여 놓아 지점명·동정보·호정보를 검사할 수 없는(KeyError) 순서였던 것을 계약이 인지하고 고쳤고, 대본도 같은 순서로 재배치했다. 「열 13개」 발화(전체 열거)는 (4)로 옮겼고, (1)에서는 "17개, 13은 그대로·4는 후보"라고만 짧게 말한다.
- **Z2(지적C)** 버린 행 기록 표의 동정보·호정보 행, 비율 칸을 "100%"(열의 빈칸 비율)가 아니라 **"열 삭제"**로 — 행 삭제 비율(분모 80,704)과 섞지 않는다. script.md·slides.md 표 둘 다 반영.
- **Z3(지적A)** notes.md가 투무인텔 중복 쌍을 "완전히 동일한 값으로 2행"이라 적었으나 실제로는 **상가업소번호만 다르고**(MA0101202305A0158333 vs MA0101202510A0009010) 나머지 38열이 같다 — 정정. 대본 "상가업소번호로 보면 중복은 0건"과 맞물리는 예라는 것도 명시.
- **Z4(지적B)** script.md (머리말)·(상태 필드)를 rev9로 갱신. **앞으로 매 rev마다 갱신한다** — rev1에서 rev5까지 멈춰 있던 걸 rev6(W4)에서 한 번 고쳤는데 다시 rev6에 멈춰 있었다. 이 습관이 계속 새는 지점이니 이후 REPORT.md에 rev를 적을 때 script.md 도 같이 확인한다.
- **Z5(지적E, 계약 개정)** quiz.md 머리말 "오답 넷의 이유" → "오답 셋의 이유(「속하지 않는 것」형은 넷)". 문항1만 4개 선택지 전부에 이유가 달려 있고(3개는 「포함되므로 오답」, 1개는 「없으므로 정답」) 나머지 4문항은 오답 3개씩 — 내용은 이미 이 형태였고 머리말 설명만 바로잡았다.
- 순서 재배치로 시연 발화가 일시적으로 +93자까지 늘었으나(신규 다섯 검사 전 사전 소개 + 신규 13열 축소 단락) 기존 문장 트림으로 상쇄해 최종 **순감 1자**(3642→3641) — 시연 발화+조작 17.80분/18.2(여유 유지), 조작 유형·개수(10개·194초) 불변.
- 시연 앞부분 재배치로 script.md 줄 번호가 다시 밀렸다 — quiz.md 인용 행 재확인·갱신, 나머지는 그대로 유효.

## rev10 반려 대응 요약 (2026-09-04)
건물명 하나 + 조작 태그. `assets/contracts/04-2-rev10.md` AA1·AA2 반영. 계약에서 건물명·층정보 결측 예시를 뺐다(오케스트레이터, 시연 예산에 검사를 늘릴 자리가 없어서). **순증 0 이하 — 실제로는 대폭 순감.**
- **AA1** 「검사 후 삭제 후보」를 지점명·동정보·호정보 셋으로 — 건물명은 39열 원본에서 열 고르기 단계(이제 4단계, 13개로 줄이는 자리)에서 그냥 걷어내고 어디서도 언급하지 않는다. 사전은 17행→**16행**. (사전 소개)·(13열로 줄이기) 두 곳에서 "건물명" 삭제, "네 개"→"세 개". slides.md 데모1 slide도 16열로 정정.
- **AA2(COMMON §0.14 개정 — 화면 지시마다 조작 태그, 없으면 자동 8초로 셈)** 화면 지시 18개 중 미태그 8개에 태그 부여: 도입·정리 화면 2개는 시연 밖이라 **조작: 없음**(태그만, 합산 무관). 시연 안 6개 중 3개(다섯 검사 결과가 이어지는 화면 — 좌표검사·논리모순·열단위결측)는 에서 시작한 같은 결과 화면이 계속되는 것이라 **조작: 없음**. 나머지 3개(삽질 2·3·4)는 실제로 다른 화면(다른 문서·다른 사이트)으로 바뀌므로 **조작: 화면전환**(8초×3=24초 추가). 조작 10개·194초 → **16개(시연 안)·218초(3.63분)**.
- 24초 증가분을 시연 발화 트림으로 상쇄하고도 더 줄였다 — 시연 발화 3641→3550자(순감 91자). 시연 발화+조작 **17.83분/18.2**(여유 약 22초, rev9의 17.80분과 비슷한 수준으로 복귀). 총량 26.96분.
- 이번 편집은 줄 내부 치환·태그 추가만이라 script.md 줄 번호 변화 없음 — quiz.md 인용 행 전부 그대로 유효. notes.md 「짚을 지점」·화면 전환 순서만 태그·개수 갱신.

## rev11 반려 대응 요약 (2026-09-04)
부재 5 + 태그 3. `assets/contracts/04-2-rev11.md` AB1~AB3 반영.
- **AB1(FAIL1)** 검증 §1 부재 5항·부분 1항을 채움: (47)907그룹 중 225그룹·24.8%가 소분류 상이, "두 번 들어간 것"이면 29% 거짓 → (48)두 번째 예 "가발 소매와 학원" → (49)최빈값 "한식 일반 음식점업" 7,900건 → 함정 장면 발화 (50)소분류 4종(백반/한정식 5,111·돼지고기 구이 1,708·김밥/만두/분식 1,409·치킨 1,211) → 전공 장면 발화 (51)39→16 선택 기준. 부분1(기록표 칸 수: 화면 5칸 vs 발화 "네 칸")도 "다섯 칸(규칙·키·탐지·제거·비율)"로 정정, slides·notes 동기화.
- **AB2(FAIL2)** `없음` 태그 3건(좌표검사·시군구-지번주소 비교·동/호정보 표시)이 실제로는 매번 다른 화면인데 0초 처리되던 오류 — 전부 `화면전환`으로(+24초).
- **AB3(지적4)** 칸수 불일치는 AB1에서 해소, `## 근거` 절 전용이던 핵심 숫자를 본문으로 이동, 자가측정 재측정 기준(여유 20초 이상)을 명문화, 머리말 rev11 갱신.
- AB1 추가분(~204자)+AB2 보정분(~100자 상당)을 반복 서술 정리로 상쇄해 순감. 시연 발화+조작 17.73분/18.2(여유 약 28.5초).

## rev11b 반려 대응 요약 (2026-09-04, 뒤이은 지시)
계약에 축자 한 줄이 추가됐다 — `04-2.md` 시연 ① 끝: "질문에 쓰지 않는 열은 사전에 올리지 않고 걷어냅니다 — 39열 중 23열. 걷어낸 열 이름은 기록에 남깁니다." 13열로 줄이는 4단계 자리에 이 축자를 추가(`(축자)` — 지정 아님). 39→16에서 제외된 23열 전체 목록을 이 파일 「대본 근거 메모」에 기록하고, script (버린 행 기록 표 화면 지시)에도 "23열 제외, 목록은 notes" 한 줄을 덧붙였다.
- 순증 62자(축자 문장) — 중복된 "39개 열 중 23개는 처음부터 골라내지 않는다" 서술을 축자로 대체(-36자), 논리 모순 문장 추가 압축(-13자)해 총 -49자, 최종 순증 13자만 남김.
- 화면 지시 1개 라인 추가 없음(기존 화면 재사용), 조작 개수·초 불변(16개·242초). 시연 발화+조작 17.78분/18.2(여유 약 25.4초).
- 새 (축자) 블록 삽입으로 이후 줄 번호가 +3 — quiz.md·notes.md 짚을 지점 전부 재확인·갱신.

## rev12 반려 대응 요약 (2026-09-04)
숫자 하나. `assets/contracts/04-2-rev12.md` AC1·AC2 반영. **29%는 계약의 오기였다**(어느 분모로도 안 나옴) — 오케스트레이터가 계약 04-2.md 시연② 중복 절을 907그룹 중 225그룹(24.8%)으로 고쳤다.
- **AC1** "'두 번 들어간 것'이라 부르면 29퍼센트가 거짓" → "…넷 중 하나가 거짓이 된다."로 정정(같은 문장 안 24.8%와 하나로 묶음, 별도 숫자 추가 없음). 순증 -1자. notes (짚을 지점)·(대본 근거 메모)의 같은 표현도 정정.
- **AC2 — 앞으로의 원칙.** 계약이 준 숫자는(수사 표현 안에 있는 것도) 옮기기 전에 `awk`/`perl`로 재확인한다. 안 맞으면 옮기지 말고 보고 줄에 적는다 — 계약 결함은 오케스트레이터가 고친다(§0.18). 이번엔 집필자가 아니라 검증자가 29%를 잡았다 — 다음부터는 집필 단계에서 걸러낸다.
- 머리말 rev12 갱신. 그 외 손대지 않음(시연 조작·재구성·순서 전부 rev11b 상태 유지).

## rev13 반려 대응 요약 (2026-09-04)
둘. `assets/contracts/04-2-rev13.md` AD1~AD3 반영. rev12 검증에서 새로 발견된 FAIL 5건 + 지적 3건.
- **AD1** 소분류 이름 "돼지고기 구이"(계약 축약)가 파일에 없다 — 파일 그대로 **"돼지고기 구이/찜"**으로 정정(script, notes). 옆 항목(백반/한정식·김밥/만두/분식)은 슬래시를 그대로 옮겼는데 이 하나만 잘렸던 것 — 계약 04-2.md 도 같은 축약을 썼으나(계약 결함), rev12에서 세운 AC2 원칙("계약 숫자는 재확인")이 **이름**에는 적용되지 않아 놓쳤다.
- **AD2** slides.md 에 "29% 거짓"이 남아 있었다(script는 rev12에서 이미 "넷 중 하나"로 정정, slides는 그 rev에 열리지 않았다) — "넷 중 하나가 거짓"으로 동일하게 정정. slides.md 강사 노트의 "17→13"(rev9 시점 숫자)도 "16→13"으로 정정(지적1), result 표가 4칸("규칙·탐지·제거·비율")으로 「키」가 빠져 있던 것도 5칸으로 정정(FAIL5).
- **AD3(그 외 FAIL 항목)** FAIL4: 조작 태그 3개가 화면 지시 문구 자체("검사를 통과한다"·"비교한다"·"표시된다")로 보아 실제 검사 실행 화면인데 화면전환(8초)으로 달려 있었다 — 태그 유형 선택 하나로 18.2분 상한 판정이 뒤집히는 문제였다. 셋 다 **검사실행**(30초)으로 재분류(+66초). FAIL2: notes.md 짚을 지점·낭독 금지의 줄 번호 4곳이 rev11b 이후 +3 시프트를 놓쳐 stale이었다(그중 3곳은 빈 줄을 가리켰다) — 전수 재대조해 갱신. 지적2: 짚을 지점 섹션 제목이 "rev11 시점"이라 rev11/rev11b가 섞여 있던 것을 "rev13 시점, 전항 재대조 완료"로 명확화. 지적3: "서울처럼 눈으로 봤더니"가 표본(서울 20건)과 전수(대전 61건)를 같은 방법처럼 들리게 했다 — "같은 기준으로"만 남기고 정정.
- FAIL4의 +66초를 상쇄하기 위해 시연 발화를 대대적으로 트림(3437→3180자, 순감 257자) — 반복되던 허용값 재진술·소분류 서술·삽질 문장들을 압축. 결과: 시연 발화+조작 **17.85분/18.2**(여유 약 20.8초). 총량 26.98분.
- 이번 편집은 script.md 줄 번호를 전혀 움직이지 않았다(전부 문장 내부 압축/치환) — quiz.md 인용 행 전부 재확인, 인용문만 문구 변경분 갱신. **이번엔 slides.md·quiz.md·notes.md를 전부 열어 grep으로 재확인**(rev12의 「산출물 3종 중 2종만 열림」 재발 방지).
- 머리말 rev13 갱신.

## rev14 반려 대응 요약 (2026-09-04)
셋. `assets/contracts/04-2-rev14.md` AF1~AF3 반영. 계약 하나(삽질 4장면·4분이 시연 상한과 충돌)는 오케스트레이터가 삽질을 2장면·2.5분으로 고쳤다. rev13이 건 13의 다섯 항목은 잘 닫았다는 평.
- **AF1(FAIL-1)** "그러면 검사가 항상 통과로만 나온다"가 rev13 삭감에서 조건절("허용값을 최솟값·최댓값으로 채우면")을 잃어 축자("허용값은 데이터에서 뽑지 않습니다")와 반대로 들렸다 — "허용값을 데이터의 최솟값·최댓값으로 채우면, 그 검사는 아무것도 걸러내지 못한다. 그래서 대전시 행정경계가 정의다."로 조건·결과를 한 문장에 복원(+40자 안팎).
- **AF2(FAIL-2, 계약 개정)** 삽질 4장면·4분이 시연 상한과 충돌했다 — 계약이 「무인」(서울 291·대전 61)과 「CSV 뱃지 뒤 거부 통보서」 둘만 남기고 「유동인구수→비율」·「zip 파일명 CP949」는 04-3으로 넘겼다. script.md에서 두 장면과 관련 화면 지시 2개(조작:화면전환)를 삭제, 남는 두 장면을 조금 늘려(무인 장면 +39자, CSV 장면을 81자→198자로 상세화) 삽질 구간 약 2.44분(발화+조작)으로 맞춤. slides.md·quiz.md·notes.md의 "삽질 4장면" 언급도 전부 2장면으로 정정.
- **AF3(FAIL-3, §0.18 개정)** "식품위생 쪽을 공부한 사람" → 계약 문자열 그대로 **"식품영양학과를 나온 사람"**으로 정정. 대본 전체에서 인물을 가리키는 다른 표현("인물의 전공")은 이미 계약과 일치해 추가 수정 없음.
- AF1(+40자 안팎)과 AF2의 장면 삭제·확장을 합쳐 시연 발화 순변화는 크지 않았으나(3180→3181, +1자), 화면전환 태그 2개가 통째로 사라져(−16초) 시연 발화+조작 **17.59분/18.2**(여유 약 36.6초로 확대). 총량 26.71분(25 이상 유지 확인).
- 삽질 장면 2개 삭제로 script.md 줄 번호가 뒤로 크게 당겨졌다 — quiz.md 인용 행 전부 재확인·갱신, notes.md 짚을 지점·낭독 금지·화면 전환 순서·대본 근거 메모 전부 재대조.
- 머리말 rev14 갱신.

## rev15 반려 대응 요약 (2026-09-04)
검증 `verify/results/04-2-rev14.md` FAIL 3 + 지적 1(§6-1). **빌더 도착** — `assets/tools/build_slides.py`·`build_quiz.py`가 배치되어 slides.md·quiz.md를 예시(`assets/ep-04-2/`) 규격으로 재작성. `assets/contracts/04-2-rev15.md` AG1~AG5 반영.
- **AG1(FAIL-1 + §6-1)** "카페 3,836·빵과 도넛 881건" → 파일·계약 그대로 **"빵/도넛"**으로 정정(발화에서 슬래시를 "과"로 읽던 유일한 자리). "정육점과 구이집" → 계약 04-2.md 문구 그대로 **"정육점과 소고기 구이집"**으로 정정(파일 소분류명 "소고기 구이/찜"의 축약이 "소고기"를 빠뜨렸었다). 글자 수: "구이집"→"소고기 구이집" +4자, "빵과 도넛"→"빵/도넛" −1자, 순증 +3자(perl 실측 확인).
- **AG2(FAIL-2)** `조작: 없음` 2건(도입 첫 화면·정리 화면)이 §0.14 정의("같은 화면 계속"일 때만 없음)에 안 맞았다 — 둘 다 직전 화면에서 실제로 바뀌므로 **화면전환**(8초)으로 정정. 화면 지시 16/16 전부 태그 보유. 총량 +16초(§0.14 전환 포함 계산 기준), 25~30분 범위 안 유지.
- **AG3(FAIL-3)** notes.md 「숫자를 적은 줄」 전수 재대조(세 번째 재발 — rev8 Y3·rev13 FAIL2에 이어): "화면 지시 18개"→**16개**로 정정(윗줄 은 rev14에서 이미 16으로 갱신했는데 바로 다음 줄을 놓쳤던 것). (현 「대본 근거 메모」의 삽질 경위 문단) "이 편 어디에도 이 둘은 남기지 않는다" → 실제로는 script.md (근거 절)·slides.md (강사 노트)에 넘긴 경위가 남아 있으므로 사실대로 정정. 「화면 전환 순서」 항목4의 "도입·정리 화면 2개는 조작:없음"도 AG2에 맞춰 갱신. 짚을 지점 인용문도 script.md 현재 문구(소고기 구이집·빵/도넛)로 동기화.
- **AG4** slides.md를 `assets/ep-04-2/slides.md` 예시 형식(11종·앞머리 6필드·chapter 3·big 1·steps 신설·demo 3·table·qr)으로 재작성. 본문 14장(cover 1·goal 1·result 1·chapter 3·big 1·two 1·steps 1·demo 3·table 1·wrap 1·qr 1 = 15, cover는 표지 별도 취급 시 본문 14). 모든 장에 `> ` 강사 노트, 챕터 노트에 「OBS 녹화 분할」 3/3. 이론 슬라이드(big·two·steps) 대전·자치구·인물 0회. 숫자는 script rev15와 전부 동기화(747/725/686/22/69,924/13열/삽질 2장면/빵·도넛/소고기 구이집). 예시의 옛 숫자(260,856·955·1,862 단독 사용 등)는 이 편 실측값으로 교체. slides.html은 만들지 않음 — 오케스트레이터 빌드 대기.
- **AG5** quiz.md를 `assets/ep-04-2/quiz.md` 예시 형식(앞머리 4필드 · `--- mc` ×5 · `--- open` ×1 · `q:`/`- ` 4보기/`a:`/`why:`)으로 재작성. 현재 5문항+생각 과제 내용을 그대로 옮기되 인용 행 번호(L##)는 rev15 script.md 기준(줄 이동 없음, rev14 인용 그대로)으로 유지. 주인 표기·「제작 디벨로켓」은 빌더 규격에 자리가 없어 앞머리 뒤 `#` 주석 한 줄로 이동.
- 시연 실측(perl 재구현, count3.pl): 도입399·이론1493·시연3184·정리389, 합계5465자. 시연 발화+조작 = 3184/250 + 292/60 = 12.736+4.867 = **17.60분/18.2**(여유 약 36초, rev14와 거의 동일 — AG1의 순증 소폭·AG2는 시연 밖 태그라 시연 예산에 영향 없음). 총량(§0.4, 시연 조작만) 26.73분, §0.14(도입·정리 전환 16초 포함) 약 27.0분 — 25~30분 범위 안.
- script.md 줄 번호 이동 없음(전부 문장 내부 치환 + 태그 값 변경) — quiz.md 인용 행 재확인 결과 rev14 그대로 전부 유효.
- 머리말 rev15 갱신.
- 미확인: 빌더 배치 완료(rev15) — 오케스트레이터가 slides.md·quiz.md를 실제로 빌드해 경고를 돌려주는 절차가 아직 남아 있음(집필자는 slides.html·build 결과를 만들지도 확인하지도 않는다, 계약 지시대로).

## rev16 반려 대응 요약 (2026-09-04)
이름 둘. `assets/contracts/04-2-rev16.md` AH1·AH2 반영. 검증 `verify/results/04-2-rev15.md` — 슬라이드 10/11 통과(qr 보류, rev15-b/c에서 이미 닫음)·diff 0·quiz 규격 통과. 남은 것은 소분류 이름 둘, 계약도 2026-09-04 정정.
- **AH1** script.md·slides.md 「가발 소매」→**「가발 소매업」**, 「학원」→**「입시·교과학원」**(파일 소분류 246종 문자열 그대로, 계약 04-2.md 2026-09-04 정정과 일치).
- **AH2(§0.18 이름 규칙 세 번째 재발 — rev13 AD1·rev15 AG1에 이어)** 대본·slides·quiz·notes에서 소분류·중분류·표준산업분류 이름이 나오는 모든 자리를 perl(quote-aware CSV, `Text::CSV` 미설치라 자체 파서)로 원본 필드8(소분류, 246종)·필드7(중분류)·필드10(표준산업분류) 목록과 대조. **감사 중 계약의 전제 하나가 틀렸음을 발견**: AH1 지시문이 "「정육점」·「소고기 구이/찜」은 이미 맞다"고 전제했으나, 실제 script·slides 은 rev15 AG1이 남긴 **"소고기 구이집"**(파일에 없는 문자열)이었다 — 246종 목록에 "소고기 구이/찜"만 있고 "소고기 구이집"은 없음을 확인. AH1 지시 범위를 벗어나지만 같은 문장·같은 §0.18 위반이라 함께 정정("정육점과 소고기 구이/찜"으로). 계약 결함이 아니라 rev15 편집 잔재이므로 옮기지 않고 대신 실측대로 고쳤다(CLAUDE.md "계약이 준 사실도 원자료로 확인 — 어긋나면 옮기지 말고 보고").
- **이름 대조 결과 34/34**: script.md 23곳·slides.md 11곳(정육점·소고기 구이/찜·가발 소매업·입시·교과학원·백반/한정식·돼지고기 구이/찜·김밥/만두/분식·치킨·카페·빵/도넛·비알코올·기타 간이·한식 일반 음식점업) 전부 246종 소분류·중분류·표준산업분류 목록과 일치. quiz.md는 이런 이름을 인용하지 않아 대조 대상 0(문제없음). "휴게음식점"·"제과점"(인허가 영업 신고 구분)은 CSV 소분류/중분류/표준산업분류 필드가 아니라 이번 대조 범위 밖.
- 시연 발화 순증 미미(정육점/가발 소매/학원 자리 문구 확장 — 소고기 구이/찜: −4자, 가발 소매업: +2자, 입시·교과학원: +5자, 합 +3자 안팎), perl 재측정 아래 참조.
- script.md 줄 번호 변화 없음(문장 내부 치환만) — quiz.md 인용 행 재확인 결과 전부 그대로 유효(이름 관련 인용 quiz에 없음).
- 머리말 rev16 갱신.
- 미확인 0.

## rev17 반려 대응 요약 (2026-09-04)
FAIL 2항. `assets/contracts/04-2-rev17.md` AI1·AI2 반영. 검증 `verify/results/04-2-rev16.md` — 건 17 지정 두 항목(이름 대조 43/43·slides diff 0)은 통과, 계약 §0.5가 파일럿 단계에서부터 예고했던 quiz 보기 길이 결함(5문항 중 4문항 80% 최장=정답)이 17건째에도 그대로였다.
- **AI1(FAIL-1, §0.14·§0.5)** mc1·2·4·5의 오답을 정답과 비슷한 길이로 늘림(정답은 손대지 않음). 그럴듯한 오답을 위해 대본에서 실제로 경고한 잘못된 방향을 썼다: mc2에 "0으로/평균으로 채움"(빈칸 처리 오류), mc4에 "눈으로 골라냄"(이론이 반박한 방법), mc5에 "뒤엣것 남김"(중복 제거 방향 반대)·"min/max 허용값"(이상치 허용값 오류)·"함정 장면과 혼동"(AI 결측치 처리). mc3은 이미 0.86배로 통과라 손대지 않음. why의 오답 이유도 새 보기 내용에 맞춰 다시 씀, 인용 행(대본 L##)은 그대로
- 재측정(perl quizlen.pl, 정답길이÷오답평균): mc1=0.226·mc2=1.024·mc3=0.857(불변)·mc4=0.892·mc5=1.009 — 전부 1.3배 이하, 5문항 전부 정답이 단독 최장이 아님(sole_longest=no). 정답 번호 분포 불변(4·3·1·2·1)
- **AI2(FAIL-2, §0.18)** script.md "식품영양학과를 나온 사람" → 계약 문자열 그대로 **"식품영양학과 졸업생"**으로 정정. rev14 AF3가 학과명만 고치고 "나온 사람"이라는 낱말 교체(§0.9 어미 변환 범위 밖)를 남겼던 것 — notes.md도 "그대로"라고 잘못 결산했던 자기보고를 함께 정정. `grep '식품영양학과 졸업생' script·slides·quiz` → script 1건(정답), slides·quiz 0건(원래 이 이름을 인용하지 않음, 해당 없음)
- 시연 실측(perl count3.pl): 시연 3188자, 발화+조작 17.62분/18.2(여유 약 34.8초)
- script.md 줄 번호 변화 없음(문장 내부 −1자 치환) — quiz.md 인용 행 전부 그대로 유효(이름 인용 quiz에 없음)
- 머리말 rev17 갱신. 미확인 0

## rev18 반려 대응 요약 (2026-09-04)
FAIL 1항 + 지적 6. `assets/contracts/04-2-rev18.md` AJ1·AJ2 반영. 검증 `verify/results/04-2-rev17.md` — 보기 길이·전공 이름·슬라이드·quiz 규격 전항 통과 확인, 남은 FAIL은 quiz.md (§0.12-2 「통제 못 하는 것을 단정하지 않는다」의 새 계열: 커리큘럼에 없는 후속 차시 내용을 약속).
- **AJ1(FAIL-1)** quiz.md mc1 why "상관관계는 정제 다섯 검사에 없다 — **탐색(다음 차시 이후) 단계에서 다루는 것으로**" → "탐색 단계에서 다루는 개념으로"로 정정. `grep -c 상관 assets/curriculum.md` = 0(38차시 어디에도 상관관계를 다룬다는 근거 없음)을 재확인하고 시점 약속 문구를 제거 — 「다음 차시에 상관관계를 배운다」로 읽힐 여지를 없앰
- **AJ2(§8 지적 6 중 닫을 수 있는 것)**
 - 지적1(script 내부 어긋남) — "…이유까지 말해 주지 않는다 — 식품영양학과 졸업생만 **소분류 이름으로 바로 구분해 낸다**"가 앞절(분류표로는 이유를 모른다)과 모순되던 것을 "…식품영양학과 졸업생만 **그 이유를 곧장 안다**"로 정정. 계약 문자열 "식품영양학과 졸업생"은 그대로 유지
 - 지적2(quiz mc3 오답이 대본 밖 상식형) — 오답 하나 "열 이름·색상·크기·순서·출처" → "열 이름·뜻·타입·단위·데이터에서 뽑은 최솟값·최댓값"(가 실제로 경고하는 오류 방향: 허용값을 데이터의 min/max로 잡는 것). why도 이 방향에 맞춰 갱신. 나머지 두 오답(행 수·파일 크기·작성자·작성일 / 중요도·담당자·마감일)은 손대지 않음 — 데이터 사전 문서 관리 항목과의 대비 자체가 유효한 오답 축이라 판단
  - 지적3(mc1 why가 오답 셋을 한 덩어리로 처리) — "결측·이상치·중복은 모두 다섯 검사에 포함되므로 오답이고"를 세 문장으로 분리, 각 오답이 왜 다섯 검사 항목인지 개별 서술
 - 지적5(script "두 열을 숫자로" — 39열 중 33/6 근거 숫자 누락) — "이 파일은 39열 중 33열을 따옴표로 감싸고, 경도·위도를 포함한 숫자 6열만 따옴표 없이 적어 두었습니다"로 계약 숫자(33·6) 추가
  - 지적4(quiz "제작 디벨로켓"이 §0.5 "맨 아래" 지정과 다르게 첫 줄 끝에 있음) — **닫지 않음.** `build_quiz.py`의 `parse()`는 마지막 `--- open` 블록 뒤에 오는 비어있지 않은 줄을 전부 `rubric` 필드에 이어 붙인다(`cur.get('_last')`가 여전히 `rubric`이라 `cur is None` 가드가 없음) — 맨 아래로 옮기면 그 텍스트가 rubric 안에 섞여 채점 기준이 깨진다. rev15 AG5가 앞머리 뒤 첫 줄(파싱 안전 지대)을 고른 이유가 이것이었다 — 빌더 쪽 수정 없이는 안전하게 옮길 자리가 없어 그대로 둔다(§9 오케스트레이터 조치 요청 항목, 3건째)
 - 지적6(script 실명 상호+번지 노출) — 공개 데이터라 §0.11 위반 아니고 검증자도 "확인 값"으로만 남김. 수정 대상 아님(조치 불요)
  - **닫힘 4/6**(지적1·2·3·5), **보류 1**(지적4, 빌더 파싱 위험), **조치 불요 1**(지적6, 원래 위반 아님)
- 시연 실측(perl count3.pl): 도입399·이론1493·시연3218·정리389, 합계5499자. 시연 발화+조작 17.74분/18.2(여유 약 27.7초 — 확장으로 rev17의 34.8초에서 줄었으나 여전히 여유 있음)
- script.md 줄 번호 변화 없음(전부 문장 내부 치환) — quiz.md 인용 행 전부 그대로 유효
- 머리말 rev18 갱신. 미확인 0

## rev19 반려 대응 요약 (2026-09-04)
notes 둘 + 후속 차시 둘 + mc3. `assets/contracts/04-2-rev19.md` AK1~AK4 반영. `COMMON.md` §0.16-a(notes 전수 재대조 규정 신설)·§0.18 「후속 차시는 제목만」 규정 먼저 읽음. 검증 `verify/results/04-2-rev18.md` FAIL-1·2·3 + 지적②.
- **AK1(FAIL-1, §0.16-a 5연속 재발)** notes.md의 「짚을 지점」 인용문 전부를 `grep -F`로 script.md와 전수 대조(이번엔 부분 재대조가 아니라 전항). 3건 불일치 발견·정정: (현 위치) "식품영양학과 졸업생만 소분류 이름으로 바로 구분해 낸다" — rev18 AJ2가 script 을 "그 이유를 곧장 안다"로 고쳤는데 notes 인용은 옛 문장 그대로였다(이번 재발의 본체). "두 번 들어간 것"·"한식 일반 음식점업"도 인용 부호가 script의 큰따옴표 대신 작은따옴표(' ')로 적혀 있어 `grep -F`가 실패하는 것을 발견해 함께 정정(내용은 같았으나 문자 단위로는 불일치)
- **AK2(FAIL-2)** `ls assets/tools/`로 재확인 — `build_slides.py`·`build_quiz.py`·`count_script.py`·`deck_assets.json`·`quiz-example.md`·`slides-example.md` 전부 존재(rev15부터). notes.md 「슬라이드 빌드 관련」 절이 rev1~2 시점 "아직 저장소에 없다"를 그대로 두고 있던 것을 rev15~18 매 건 빌드 경고 0 확인 사실로 정정. 미확인 0
- **AK3(FAIL-3, COMMON §0.18 신설 「후속 차시는 제목만」)** script.md "04-3 — 구별로 비교하는 기준(**정규화**)" → "4-3 「무엇으로 나눌 것인가 — 비교의 기준」"(curriculum.md 제목 그대로, 내용 단정 제거). slides.md 강사 노트 "다음 차시(**정규화**)"도 동일하게 정정. `grep -n '정규화\|상관' script.md slides.md quiz.md notes.md` 전수 재확인 — quiz.md의 "상관관계"(mc1 정답)·"상관이 없으며"(mc2 why)는 커리큘럼 약속이 아니라 무관한 문맥이라 해당 없음, 나머지 3파일 「정규화」 0건
- **AK4(지적②)** quiz mc3 오답 4개 중 상식 배제형으로 남아 있던 둘("행 수·파일 크기·작성자·작성일" · "중요도·담당자·마감일")을 대본이 실제로 경고하는 오류 방향으로 교체: "눈으로 봤을 때 이상해 보이는지 여부"(이론이 반박한 방법, big/two 슬라이드)·"0과 빈칸을 하나로 묶어 표시한 값"(§0.9 핵심 원칙 위반). why도 갱신. 재측정(quizlen.pl): mc3 ratio 0.505(불변 통과), 다른 4문항도 전부 1.3배 이하 유지
- 시연 실측(perl count3.pl) — script 본문은 한 곳만 손댔고(연결 절, count_script가 발화 집계에서 제외하는 구간) 시연·전체 발화량 불변: 도입399·이론1493·시연3218·정리389, 합계5499자. 시연 발화+조작 17.74분/18.2(여유 약 27.7초, rev18과 동일)
- script.md 줄 번호 변화 없음 — quiz.md 인용 행 전부 그대로 유효
- 머리말 rev19 갱신. 미확인 0

## rev20 반려 대응 요약 (2026-09-04)
notes stale 셋 + quiz 근거. `assets/contracts/04-2-rev20.md` AL1·AL2 반영. 검증 도구 출력(34개 STALE 인용 목록)을 그대로 받음 — notes stale이 6연속이라 오케스트레이터가 도구로 선제 검사.
- **AL1(FAIL-1·2)** 근본 원인: 「짚을 지점」의 여러 줄이 (a) 축자 인용 끝에 트임표 「...」를 붙여 존재하지 않는 문자열을 만들었거나 (b) `(요점)` 파라프레이즈를 다시 큰따옴표로 감싸 원문 안의 큰따옴표와 겹쳐 인용부호 쌍이 어긋났거나 (c) 정정 이력(구 문장 → 신 문장)을 같은 줄에 인용부호로 남겨 옛 문장이 "인용문"으로 남아 있었다. **형식 규칙 신설**: 이력은 개정 로그 절에만, 축자는 트임표 없이 그 문장만, 요점은 인용부호로 감싸지 않는다. 이 규칙으로 「짚을 지점」 전체(20줄)를 다시 씀 — 축자 10줄은 `grep -F` 전수 재확인(전부 일치), 나머지는 인용부호를 아예 없앤 요지 서술로 전환. 「화면 전환 순서」 항목4의 중첩 인용(화면 지시 문구 재인용)도 같은 방식으로 정리. 「낭독 금지」 코드블록 줄 번호·「대본 근거 메모」의 slides 줄 참조(script)도 AL2의 줄 이동에 맞춰 갱신
- **AL2(FAIL-3)** quiz mc3·mc4가 쓰는 "눈으로 골라내면" 오류 방향이 slides big의 note_text에만 있고 대본 발화에는 없었다 — 이론 구간(사이)에 그 문장 그대로 축자 한 줄 신설: "규칙 없이 눈으로 골라내면 결과는 나오지만, 남이 다시 만들 수 없습니다."(신). mc3 why 인용을 로, mc4 why 인용을 으로 갱신(둘 다 새 축자 추가)
- AL2의 축자 삽입(3줄, 순증 41자)으로 이론 발화 1493→1534자(1,534/2,000=0.767, 여전히 0.7배 이상), 시연·정리·도입은 불변(3218/389/399). 총 발화 5540자, 총량 27.03분(25~30 안). 시연 발화+조작 17.74분/18.2 그대로(이론 구간 삽입은 시연 예산과 무관)
- **줄 번호 전면 시프트**: (구) 이후 전부 +3(신규 (축자) 2줄 + 빈 줄 1줄). quiz.md 5문항 전부의 인용 행과 notes.md 「짚을 지점」 20줄 전부 재확인·갱신
- 머리말 rev20 갱신. 미확인 0

## rev21 반려 대응 요약 (2026-09-04)
근거 URL + notes 둘. `assets/contracts/04-2-rev21.md` AM1·AM2 반영. 검증 `verify/results/04-2-rev20.md` §7 FAIL-1 · §8 지적①②.
- **AM1(FAIL-1)** script "카페는 휴게음식점, 빵/도넛은 대부분 제과점 영업으로 신고가 다르다" — 근거 URL 0·"대부분"은 §0.8 측정 불가어. 웹에서 국가법령정보센터 식품위생법 시행령 제21조(영업의 종류)를 찾아 확인 — 휴게음식점영업·제과점영업 정의 문구 확보. "카페는 휴게음식점영업, 빵/도넛은 제과점영업으로 신고가 다르다"로 정정("대부분" 삭제, 정식 업종명 사용). "원가 구조도, 문을 닫는 이유도 다르다" → 저장소 데이터로 확인 안 되는 인물의 해석이라 "다르다고 본다"로 헤지. 「근거」 절에 URL·조문 인용·헤지 근거 추가(https://www.law.go.kr/법령/식품위생법시행령/제21조, 확인일 2026-09-04) — count_script가 「근거」 절 이후를 발화 집계에서 제외하므로 글자 수 영향 없음
- **AM2(지적①②)** 검사 도구가 「대본 근거 메모」까지 넓혀 잡은 stale 2건 — (구)→(구)→, 둘 다 rev20 AL2의 축자 삽입(+3 시프트)을 대본 근거 메모 절이 놓쳤던 것(짚을 지점·화면 전환 순서·낭독 금지는 rev20에서 이미 갱신함, 대본 근거 메모는 그때 빠졌다). 총량 수치도 「화면 전환 순서」 항목4의 "26.73분/약 27.0분"(자가추정, 옛 발화량 기준)을 검증자 실측 "27.15분/27.41분"으로 교체(§0.16-a)
- 시연·전체 발화량 불변(근거 절 추가만, count_script 집계 밖) — 자가추정 도입399·이론1534·시연3219·정리389, 합계5541자, 총량(자가추정) 27.03분. 검증자 실측(27.15/27.41)과 근접
- 줄 번호 변화 없음 — quiz.md 인용 행 전부 그대로 유효
- 머리말 rev21 갱신. 미확인 0

## rev22 반려 대응 요약 (2026-09-04)
슬라이드 노트 시간. `assets/contracts/04-2-rev22.md` AN1·AN2 반영. 검증 `verify/results/04-2-rev21.md` §7 FAIL-1 — slides.md 강사 노트의 「그 장에 쓸 시간」 합이 시연 7.67분인데 대본 실측은 17.75분(−10.08분). 촬영 당일 Hans가 보는 notes.md와 slides.html N키 노트가 10분 다르게 말하고 있었다.
- **AN1** 대본 하위 장면을 perl로 구간별 재측정(rangecount.pl, count3.pl과 같은 규칙): 원본열기+사전 2.24분·다섯검사 6.40분·규칙+기록표+13열 3.40분·삽질2 2.34분·함정 1.57분·전공 1.79분(합 17.74분, 시연 전체 실측과 일치). slides.md 노트 시간을 이 실측에 맞춰 전면 재기입:
  - 도입: cover 8초(불변)·goal 60→48초·result 60→49초 = 105초(1.75분, 목표 1.75분과 일치)
  - 이론: 기존 370초(chapter10·big120·two150·steps90)가 이미 목표 6.20분(372초)에 근접 — 손대지 않음
  - 시연: demo1(사전) 90→135초 · demo2(다섯검사) 120→385초 · table(규칙+기록표+13열) 120→205초 · demo3(함정) 120→340초(삽질2장면+함정+전공을 이 한 장 노트에 순서·소요시간과 함께 기재, 슬라이드가 4장뿐이라 세 장면을 합쳐 배정) = chapter10 포함 1,075초(17.92분, 목표 17.75분의 +0.9%)
  - 정리: wrap 60→92초, chapter10 포함 102초(1.70분, 목표 1.70분과 일치)
  - 4구간 전부 목표 ±10% 안. slides.md 구조(15블록·14장 본문·노트 14/14·chapter 3·big 1·demo 3·이론 대전 0회)는 불변, 문구만 재기입
- **AN2** notes.md 「화면 전환 순서」 항목6 신설 — slides.md 새 노트 시간과 대본 하위 장면 실측 매핑을 명시해 두 문서가 같은 숫자를 말하는지 대조 완료(§0.16-a 개정, slides 노트도 재대조 대상에 포함)
- script.md는 이번 rev에서 손대지 않음(머리말만 갱신) — 발화·시연 예산 불변
- 머리말 rev22 갱신. 미확인 0

## rev23 반려 대응 요약 (2026-09-04) — 승인 후 소폭 개정
04-2 PASS·승인. 내용은 손대지 않는 규격 반영 5건. `assets/contracts/04-2-rev23.md` AO1~AO5.
- **AO1** COMMON §0.1 개정(4박자 선언 = 실측) — script.md 구성표·상세 전개 제목을 도입2·**이론6**·**시연15**·정리2=25로 갱신(이론8→6, 시연13→15). "시연 발화+조작은 13분의 0.7~1.4배(9.1~18.2분) 이내로 유지한다" 문장 삭제 — 총량 25~30분에서 역산, 시연 개별 상한 없음. slides.md chapter clock도 8분→6분, 13분→15분으로 동기화(라벨 일관성, 내용 아님)
- **AO2** slides.md 앞머리 `minutes: 25` → **`minutes: 27`**(이 편 실측 총량 반올림)
- **AO3** `qr.md` 삭제(QR 페이지·드라이브 폴더 취소, 평가는 엑셀). script·slides·quiz에 QR 언급 0(재확인) — 애초에 script/slides 본문에는 없었고 qr.md 파일 자체만 삭제
- **AO4** quiz 보기 길이 새 규칙(최장÷최단 ≤2.0) — mc1 5.25배(21/4)·mc3 2.06배(33/16)가 걸림. mc1: 정답 "상관관계"에 설명을 붙여 "상관관계 — 함께 움직이는 정도"(17자)로 늘림 → 21/12=1.75배. mc3: 오답 둘("눈으로 봤을 때 이상해...", "0과 빈칸을 하나로...")에서 군더더기 어절을 빼 29/28자로 축소 → 29/16=1.81배. 기존 규칙(정답÷오답평균≤1.3·정답 단독 최장 금지)도 재확인 — 5문항 전부 유지(mc1 0.96·mc2 1.02·mc3 0.56·mc4 0.89·mc5 1.01, 최대÷최소 전부 ≤2.0, 단독 최장 0/5)
- **AO5** notes 숫자 줄 전수 재확인 — 「짚을 지점」·「화면 전환 순서」·「대본 근거 메모」에 8분/13분/18.2 고정을 현재 사실로 진술하는 줄 없음(구 개정 로그 절의 역사적 서술만 존재, §0.16-a상 손대지 않음). script 발화·시연 예산 불변(도입399·이론1531·시연3219·정리389, 합계5538자 — rev21b와 동일, 내용 미변경 확인)
- 머리말 rev23 갱신. 미확인 0

## 화면 전환 순서
1. S2(도입) 결과물 목업: 데이터 사전 13행 + 버린 행 기록(규칙·키·탐지·제거·비율, 22/725/열2, 합계 747·0.93%) 두 장 동시에 — 도입과 정리(마지막 요약 화면)가 같은 두 장이다. **재구성 표기.**
2. 이론 챕터: 화면에 대전 지명·구 이름·인물 얼굴이 나오지 않게. big/two 슬라이드만.
3. 시연 챕터 진입: 실제 `shops_2026-06_full.csv` 원본 화면(또는 화면 목업)으로 전환. **재구성 표기.**
4. 시연 조작 순서 고정(스크립트와 슬라이드 동일 순서): 원본 열기(파일열기 20초) → 사전 16행(표작성 20초, 13개+검사 후 삭제 후보 3개: 지점명·동정보·호정보, 허용값 축자 포함) → 다섯 검사 실행(검사실행 30초, 결측 포함) → 좌표 숫자검사(검사실행 30초, 화면 지시 문구는 숫자 검사 통과) → 중복 그룹 하나 열기(화면전환 8초, 농부애한우 예시) → 시군구-지번주소 비교(검사실행 30초, 화면 지시 문구는 비교) → 동/호정보 빈칸 표시(검사실행 30초, 화면 지시 문구는 표시) → 버릴 규칙(표작성 20초) → 버린 행 표(표작성 20초, 규칙·키·탐지·제거·비율 5칸, 중복 규칙 방향은 앞 행을 남기고 뒤 행을 버림, 동/호정보 비율 칸은 열 삭제) → 13열로 줄이기(열고르기 30초, 지점명·동정보·호정보 제외 — 건물명은 애초에 사전에 없었다) → 삽질 2장면(화면전환 8초씩 2개, 무인·CSV뒤PDF만) → AI 결측치 함정(AI응답대기 30초) → 카페/빵도넛(화면전환 8초, 다른 중분류 프레임). 시연 안 태그 14개(검사실행 4개·화면전환 4개 포함)·292초(4.87분). 도입·정리 화면 2개(L39·L185)도 화면전환(8초×2=16초, §0.14 총량에 포함). 화면 지시 16/16 전부 태그, 총량은 §0.4(발화+시연 조작) 27.15분 / §0.14(전환 포함) 27.41분(검증자 실측, rev20 — 집필자 자가추정 27.03분과 근접, §0.16-a에 따라 실측치로 교체).
5. **script.md의 화면 지시 16개 전부 재구성 표기.** 촬영 전 실제 화면으로 교체해야 한다 — 그 전까지는 재구성 텍스트/코드블록/목업으로 대체 촬영 가능.
6. **rev22 AN1 — slides.md 강사 노트 시간을 대본 실측에 맞춤(§0.16-a 개정, slides 노트도 재대조 대상).** 구간 합: 도입 105초(cover8+goal48+result49)=1.75분 · 이론 370초(chapter10+big120+two150+steps90)=6.17분 · 시연 1,075초(chapter10+demo135+demo385+table205+demo340)=17.92분 · 정리 102초(chapter10+wrap92)=1.70분 — 전부 대본 실측(1.75/6.20/17.75/1.70분) ±10% 안. 시연 4장 배분은 대본 하위 장면 실측(원본열기+사전 2.24분·다섯검사 6.40분·규칙+기록표+13열 3.40분·삽질2 2.34분·함정 1.57분·전공 1.79분)을 슬라이드 4장에 매핑: demo1=원본+사전(135초) · demo2=다섯검사(385초) · table=규칙+기록표+13열(205초) · demo3=삽질+함정+전공 합산(340초, 슬라이드가 4장뿐이라 세 장면을 한 장 노트에 순서·시간 함께 적음). notes.md 이 절의 숫자(도입/정리 화면전환 태그·시연 14태그·292초 등)와 slides.md 노트 숫자가 서로 다른 사실을 주장하지 않음 — 대조 완료.

## 짚을 지점 (촬영 중 강조, rev20 시점 script.md 줄 번호 기준 — AL2 축자 삽입에 따른 전체 시프트 반영. AL1로 형식 전면 개정)
**형식 규칙(rev20부터)**: 정정 이력·구 문장 비교는 이 목록에 쓰지 않는다(이력은 위 개정 로그 절에만). `>` 축자 인용은 그 문장 하나만 그대로 옮기고 트임표 「...」를 붙이지 않는다(붙이면 존재하지 않는 문자열이 되어 검사 도구가 stale로 잡는다). `(요점)` 문단은 따옴표로 감싸지 않고 요지를 내 문장으로 서술한다(원문에 이미 든 큰따옴표를 다시 감싸면 인용부호가 겹쳐 같은 문제가 난다).
- L42 "오늘은 이 화면 두 장을 만드는 과정을 봅니다 — 왼쪽은 데이터 사전, 오른쪽은 버린 행 기록입니다." — 완료형 어미로 흘러가지 않게 주의.
- L56 "규칙 없이 눈으로 골라내면 결과는 나오지만, 남이 다시 만들 수 없습니다." — **rev20 AL2로 신설**(slides big의 note_text와 같은 문장). quiz mc3·mc4의 "눈으로" 오답 방향의 발화 근거가 이 줄이다.
- L73 "0과 빈칸은 다른 뜻입니다." — 이론에서 한 번, 시연 L101·L172(함정 장면)에서 다시 인용. 같은 억양으로.
- L87 요지 — 검사에 쓸 열 16개를 먼저 사전에 적는다(13개는 그대로, 지점명·동정보·호정보 세 개는 검사 후 삭제 후보). 건물명은 여기서도 말하지 않는다. 39→16 사이의 23열 배제 근거는 L145가 따로 말한다.
- L90 "허용값은 데이터에서 뽑지 않습니다. 열의 정의에서 옵니다." — 핵심 문장, 여기서 한 번 멈춘다.
- L92 "허용값을 데이터의 최솟값·최댓값으로 채우면, 그 검사는 아무것도 걸러내지 못한다. 그래서 대전시 행정경계가 정의다." — 조건과 결과를 한 문장에 묶어 말한다. 여기서 한 번 멈춘다.
- L96·L101 22건 vs 69,924건 — 이 편에서 가장 중요한 실측 대비. 숫자를 흐리지 말고 또박또박.
- L103 요지 — 907그룹 중 225그룹(24.8%)은 소분류가 다르다는 것, 정육점과 소고기 구이/찜·가발 소매업과 입시·교과학원이 한 자리에 있다는 두 예, 두 번 들어간 것이라 부르면 넷 중 하나가 거짓이 된다는 결론. 이 차시에서 가장 중요한 숫자다 — 907그룹 중 몇이 가짜인지가 키를 바꾸는 이유이므로 여기서 속도를 늦춘다.
- L103~130 중복~결측(열단위) — 907그룹·1,862행(상호+지번주소만) → 화면에서 농부애한우 그룹(L105) → L110 "무엇이 같은 가게인지 먼저 적지 않으면, 중복의 개수는 정해지지 않습니다." → 686그룹·탐지 1,411·제거 725. 방향은 앞의 하나를 남기고 뒤에 오는 725행을 버린다 — 반대로 말하지 않는다.
- L114(화면: 좌표 숫자 검사 통과) → L117 "경도·위도에 문자가 섞였는지 검사했습니다 — 걸린 값 0건. 이 파일은 39열 중 33열을 따옴표로 감싸고, 경도·위도를 포함한 숫자 6열만 따옴표 없이 적어 두었습니다. 더러운 원천에서는 여기서 걸립니다." → L121(화면: 시군구명·지번주소 비교) → L128(화면: 동/호정보 빈칸) — 이 셋(L114·121·128) 다 검사실행 화면. L105(농부애한우 그룹)만 화면전환.
- L134·L138 요지 — 다섯 검사 결과를 놓고 버릴 규칙 셋을 정한다는 것, 다섯 칸(규칙·키·탐지·제거·비율)으로 표를 남긴다는 것. 네 칸이 아니라 다섯 칸(규칙 칸 포함), 화면 지시(L136)의 5칸과 일치. 동정보·호정보 비율 칸은 열 삭제라고 말한다. 100퍼센트라고 말하지 않는다.
- L142 요지 — 검사와 버릴 규칙이 끝났으니 이제 13개로 줄인다는 것. 여기서 처음으로 13개 열 이름을 전부 말한다(그 전에는 16개, 13은 그대로·3은 후보라고만 했다). 건물명은 여기서도 언급하지 않는다.
- L145 "질문에 쓰지 않는 열은 사전에 올리지 않고 걷어냅니다 — 39열 중 23열. 걷어낸 열 이름은 기록에 남깁니다." — 13열로 줄이는 4단계 화면(L140)에서 말한다. 23열 전체 목록은 아래 대본 근거 메모 절에 있다. 지정 문자열은 아님(계약의 두 문장뿐) — `(축자)`로만.
- L151 요지 — 서울 탐침 291건 중 20건 표본에서 4건이 오탐이었다는 것, 대전에서는 61건 전수를 같은 기준으로 보니 3건이 오탐, 정제 규칙(중복 1행)까지 적용하면 57건이 남는다는 것. 삽질 2장면(2.5분) 중 첫 장면. 291·61·3·57 숫자를 뭉개 읽지 않는다.
- L155 요지 — 대전 청년통계라는 이름의 파일에 CSV로 받을 수 있다고 표시돼 있었는데 실제로는 제공거부 통보서 PDF였다는 것. 삽질 2장면 중 두 번째. 유동인구/비율·zip 파일명 두 장면은 04-3으로 넘어갔다 — 이 편 어디에도 없다.
- L161 요지 — 표준산업분류명 22건을 최빈값 한식 일반 음식점업 7,900건으로 채운다는 것. 코드블록(L164~166, 낭독 금지)에만 있던 이름·숫자를 발화에도 넣었다.
- L176 요지 — 음식 대분류 23,850건 중 백반/한정식 5,111·돼지고기 구이/찜 1,708·김밥/만두/분식 1,409·치킨 1,211, 카페 3,836·빵/도넛 881건. 파일 그대로 돼지고기 구이/찜·빵/도넛이다. 카페·빵/도넛 두 숫자만으로는 23,850 안에서 얼마나 작은 자리인지(합 4,717=19.8%) 가늠이 안 됐다 — 전부 읽되 카페·빵/도넛에서 속도를 늦춘다.
- L179 "이 둘을 한 줄로 묶으면 안 됩니다. 인허가가 다르고, 망하는 이유가 다릅니다." — 전공 구간, 톤을 살짝 낮춰 확신 있게. 직전에 분류표는 다른 칸인데 갈리는 건 인허가라는 전제를 먼저 깔고 들어간다.
- L181 요지 — 분류표는 다른 중분류에 넣어 놨을 뿐 이유까지 말해 주지 않는다는 것, 식품영양학과 졸업생만 그 이유를 곧장 안다는 것. 인물 전공은 계약 문자열 그대로 — 유사어로 바꿔 쓰지 않는다.
- L188 "버린 행을 기록하지 않으면 남이 재현할 수 없습니다." — 정리 한 줄, 천천히.
- L193 "이제 셀 수 있습니다. 그런데 그냥 세면 서구가 이깁니다." — 04-3 예고. 여기서 서구가 왜 이기는지는 설명하지 않는다. 궁금증만 남기고 끊을 것.

## 분량 (자가측정, 회귀 수정 재실행 2026-09-06)
`python3 ../assets/tools/count_script.py ep-04-2/script.md` 출력:
```
구간    라인                공백포함      공백제외    ÷250
도입    37-50              406       297     1.6
이론    51-78             1549      1137     6.2
시연    79-182            3220      2495    12.9
정리    183-200            393       289     1.6

합계 공백포함: 5568  ÷250 = 22.3 분
합계 공백제외: 4218  ÷250 = 16.9 분
```
총량 산식(§0.4-a): 발화 5568÷250=22.27 + 시연 조작 292초÷60=4.867 + chapter 전환 3장×10초÷60=0.5 = **27.63분**(25~30 안). 시연 clock: 3220÷250=12.88 + 292÷60=4.867 = **17.747→18분**(slides.md clock 18과 일치). slides.md `minutes: 28`은 총량 27.63의 반올림.

## 낭독 금지
- 시연 데이터 사전 표(demo 슬라이드 상당)의 16행을 전부 읽지 않는다 — 핵심 1~2개만.
- AI 출력 코드블록(script.md L164~166)은 화면에 띄운 채로 두고 낭독하지 않는다.
- 정리 자막 `[자막: 몇 행을 버렸고...]`은 발화하지 않는다.

## 대본 근거 메모
수치는 `assets/data/daejeon/README.md` 「정제 실측」 절(오케스트레이터 실측, 원본 `shops_2026-06_full.csv` 80,704행)에서 그대로 인용하고, rev2에서 집필자가 직접 재검증했다.

**rev11b — 걷어낸 23열 전체 목록** (39열 − 사전에 올린 16열 = 23열, README 열 순서 그대로): 상권업종대분류코드 · 상권업종중분류코드 · 상권업종소분류코드 · 표준산업분류코드 · 시도코드 · 시도명 · 시군구코드 · 행정동코드 · 법정동코드 · 지번코드 · 대지구분코드 · 대지구분명 · 지번본번지 · 지번부번지 · 도로명코드 · 도로명 · 건물본번지 · 건물부번지 · 건물관리번호 · 건물명 · 구우편번호 · 신우편번호 · 층정보. 사전에 올린 16열(=13개 남길 것 + 지점명·동정보·호정보)과 합치면 39열 전부 — 규칙 없이 사라지는 열 0개(rev10 검증 §10-② 해소). script L136(버린 행 기록 표 화면 지시)에 "23열 제외, 목록은 notes" 한 줄을 덧붙였다.

**검증 방법(§0.18 대조)**: perl로 quote-aware CSV 파서를 짜서 원본을 전수(80,704행) 파싱. 필드가 `"..."` 인용 또는 비인용 숫자/공백으로 섞여 있어 단순 `split(",")`나 `awk -F'","'`로는 필드가 밀린다(지번본번지·지번부번지·건물부번지·층정보 등 숫자형 열이 비어 있으면 unquoted empty token이 되어 컬럼 수가 어긋남) — quote-aware 파서로 열었다.
- 표준산업분류명(필드 10) 빈칸: **22** — README와 일치.
- 상호명(필드1)+지번주소(필드24) 키로 그룹화: 2개 이상 행이 모인 그룹 **907개**, 그 그룹에 속한 행 합계(탐지) **1,862**, 그룹당 하나만 남기고 지우는 행(제거) = 1,862 − 907 = **955** — README와 일치. **이 키만으로는 「같은 가게」가 아니다**(rev6 W1) — 907그룹 중 225그룹(24.8%)이 소분류(필드8)가 서로 다름을 확인(예: 농부애한우, 유성구 죽동 599-2 — 정육점 vs 소고기 구이/찜).
- 상호명(필드1)+지번주소(필드24)+상권업종소분류명(필드8) 키로 재그룹화: 그룹 **686개**, 탐지 **1,411**, 제거 = 1,411 − 686 = **725** — README·계약과 일치.
- 경도(필드37)·위도(필드38): 신규 허용값(127.24~127.56 / 36.18~36.51) 밖 **0건** — README와 일치. 구 허용값(127.25~127.54 / 36.20~36.49, rev1에서 잘못 썼던 값)으로 재면 **10건** 걸림 — README의 경고와 일치, 이 값은 대본에 쓰지 않는다.
- 시군구명(필드14) vs 지번주소(필드24)의 구 이름 불일치(논리 모순): **0건** — 전수 재확인.
- 대전시 좌표 허용값 출처: 대전광역시청 「대전의 수리적 위치」(동단 동경 127°33'35.1438"·서단 127°14'47.9555"·남단 북위 36°10'59.1859"·북단 36°30'0.8450") https://www.daejeon.go.kr/drh/DrhContentsHtmlView.do?menuSeq=2033 (확인일 2026-09-03) — 십진도 변환 후 외접 사각형으로 근사(127.24~127.56/36.18~36.51).

삽질 2장면(rev14 AF2로 4장면에서 축소) 경위는 원자료 그대로: `author-a/probe/A/LOG.md`(무인 코드, 00:22 항목) · `author-b/probe-dj/2b/LOG.md`(청년통계, PK 15081597, 138,662B PDF 2쪽, CSV 뱃지 뒤 제공거부 통보서). 빠진 둘은 04-3으로 — `author-c/probe-dj/3/data/seogu_flow.csv` 헤더(iconv -f CP949 -t UTF-8로 확인, "비율" — 파일 제목은 "유동인구현황") · `author-a/probe-dj/5/LOG.md`(2023-06 zip, `unzip -l` 파일명 깨짐 → 바이트 크기로 재식별). **rev15 AG3로 정정**: 빠진 둘(유동인구수→비율·zip 파일명 CP949)은 04-3의 시연 장면으로는 이 편 어디에도 없지만, 넘긴 경위 자체는 script.md L201 근거 절과 slides.md L97(함정 demo 강사 노트)에 문장으로 남아 있다.

**rev11 AB1 — 계약 지정 사실 5건을 발화로 옮김(부재 47~51).** 225그룹/24.8%는 위 (필드8 재그룹화) 계산과 같은 소스. **rev12 AC2 — 계약의 29%는 오기였다(어느 분모로도 안 나옴), 넷 중 하나(24.8%≈25%)로 정정했다.** 최빈값 "한식 일반 음식점업" 7,900건은 표준산업분류명(필드10) 전체 카운트 1위(perl, `mode_std.pl`) — 재확인 완료. 소분류 4종(백반/한정식 5,111·돼지고기 구이/찜 1,708·김밥/만두/분식 1,409·치킨 1,211)은 README 「정제 실측」 절의 음식 소분류 상위표 값 그대로 인용(신규 계산 없음). "가발 소매와 학원"은 계약이 직접 지정한 두 번째 예시 문구였으나 **rev16 AH1로 파일 소분류 246종 문자열 그대로 "가발 소매업"·"입시·교과학원"으로 정정**(계약 04-2.md도 2026-09-04 정정 반영).

**rev11 지적③ — 자가측정 계통 오차.** rev10 시점 notes 자가추정(3,550자/17.83분)과 검증자 실측(3,572자/17.921분)이 22자·5.3초 어긋났다 — 여유가 16.7초인 편에서 위험한 폭이었다. rev11부터는 매 편집 직후 이 스크립트(perl 재구현)로 재측정하고, 보고 줄의 분량은 항상 "자가추정" 표기를 유지하되 여유를 최소 20초 이상 남기는 것을 편집 종료 기준으로 삼는다(이번 rev11 결과 시연 여유 약 28.5초).

**rev8 Y2 — 대전 「무인」 61건 전수 눈검사(perl, 상호명 필드).** 오탐 3건(「무인 매장이 아닌데 글자만 겹침」 기준): 충무인쇄(중구 대흥동, 명함/간판/광고물 제작) · 나무인테리어(서구 갈마동, 인테리어 디자인업) · 무인양품롯데대전점(서구 괴정동, 그 외 기타 종합 소매업 — 서울 LOG가 지목한 바로 그 브랜드). 정제 규칙(상호+지번주소+소분류 중복) 적용 대상 1행: 투무인텔(동구 구도동 355, 여관/모텔)이 상가업소번호(MA0101202305A0158333 vs MA0101202510A0009010)만 다르고 나머지 38열이 같은 값으로 2행 존재 — 1행 제거. 대본 L103 "상가업소번호로 보면 중복은 0건"과 맞물리는 예다 — 번호가 다르면 그 열만 봐서는 중복이 안 잡힌다. 61 − 3(오탐) − 1(중복) = **57**. 「무인텔」류(나루·호텔·자바·썸·투×2, 6건)는 오탐에 넣지 않았다 — 글자 겹침이 아니라 실제로 무인(비대면 체크인) 업소라 LOG의 6개 업종군 밖일 뿐 정의상 오탐은 아니다.

## 슬라이드 빌드 관련 (rev1~rev14는 미배치였으나 rev15부터 해소)
`assets/tools/build_slides.py`·`build_quiz.py`는 rev15부터 저장소에 있다(2026-09-04 `ls assets/tools/` 재확인: `build_slides.py`·`build_quiz.py`·`count_script.py`·`deck_assets.json`·`quiz-example.md`·`slides-example.md` 전부 존재). `slides.html`은 집필자가 만들지 않고 오케스트레이터가 직접 빌드한다 — rev15~rev18에서 매번 빌드 경고 **0건**으로 확인됐다(검증 원문 rev15~18 각 건 §5/§1 참조). 미확인 0.

## 검사 로그 (회귀 수정, 2026-09-06 — 도구 넷 실행, 이후 편집 0)
```
### axquiz ep-04-2
ep-04-2/AX부트캠프_온라인38차시_평가문항.xlsx  1차시 · 6문항
  정답 분포  1번 2(40%) 2번 1(20%) 3번 1(20%) 4번 1(20%)
  정답이 유일 최장인 문항(길이 순위만)  1/5
  진단 특징(관문 제외) 최대  전면부정(계수) 최다 50.0%
  어휘 겹침(진단, 관문 제외)  어휘 겹침 최다 45% · 어휘 겹침 최소 25%
  번호 찍기(전 차시 합산 검사용)  최대 40%
  영상 없이 찍기 기대 정답률(최대 전략)  최단 30.0%  [최단 30% · 길이3위 30% · 길이4위 30% · 단정형 고르기 30% · 글자 수 최소 30% · 숫자 지우기 30% · 강조 부사 최소 28% · 절대어 지우기 25% · 절대어 고르기 25% · 따옴표 최다 25% · 따옴표 최소 25% · 괄호 최다 25% · 괄호 최소 25% · 조건형(경우·수 있·때로·보였다·수도) 최다 25% · 조건형(경우·수 있·때로·보였다·수도) 최소 25% · 단정 어미(이다·된다·있다) 최다 25% · 단정 어미(이다·된다·있다) 최소 25% · 한자어 명사형 종결(~것·~함) 최다 25% · 한자어 명사형 종결(~것·~함) 최소 25% · 최장 20% · 길이1위 20% · 길이2위 20% · 단정형 지우기 20% · 쉼표 최다 20% · 글자 수 최다 20% · 어절 수 최소 20% · 쉼표 최소 17% · 쉼표 있는 보기 17% · 강조 부사 최다 15% · 강조 부사 없는 보기 13% · 숫자 고르기 10% · 어절 수 최다 0% · 쉼표 없는 보기 0% · 강조 부사 있는 보기 0%]
  정답이 유일 최단인 문항  1/5
  단정 서술 4계열(구조·배타·전면부정·빈도)  정답 2/5 · 오답 4/15
  절대어 보기  정답 0/5 · 오답 0/15
  정답 길이 순위 분포(1=최장)  1위 1 2위 1 3위 1 4위 1 동률 1
  정답이 눈에 띄게 긴 보기  0/5 (0%)

### axdeck ep-04-2/slides.md
SKIP minutes·clock 절대값 대조: script 화면 지시 16개, 「전환: 예/아니오」 칸 0개 — §0.4-a 두 칸 규격 이전의 편(소급 금지)
ep-04-2/slides.html  슬라이드 16장 (인트로·아웃트로 포함) · 납품본 — 강사 노트 제외
ep-04-2/slides_notes.html  슬라이드 16장 (인트로·아웃트로 포함) · 강사용 — 노트 내장

### axnotes ep-04-2
이력 절 줄참조 있는 줄 0개 (0이어야 한다)
SKIP 태그 표 대조: script에 「[화면: … · 조작: · 전환:]」 화면 지시가 0개 — §0.4-a 태그 표 이전 규격의 편(소급 금지, SPEC v2 2단계). notes 표 행 0개는 대조하지 않음
script 내부 참조 검사 0개
검사 절 31개(검사 로그 절 제외) 중 검사 대상 줄 70 · 인용 13개 · 줄참조 43개 · stale 0

### count_script.py
구간    라인                공백포함      공백제외    ÷250
도입    37-50              406       297     1.6
이론    51-78             1549      1137     6.2
시연    79-182            3220      2495    12.9
정리    183-200            393       289     1.6

합계 공백포함: 5568  ÷250 = 22.3 분
합계 공백제외: 4218  ÷250 = 16.9 분
drop log: {'heading': 4, 'screen': 17, 'boldhead': 0, 'comment': 0, 'fence': 2, 'blank': 72, 'paren': 50}
```
