La interfaz está localizada; las descripciones y documentos de las Skills se traducen automáticamente con IA a su idioma. El código, los comandos, rutas y términos técnicos se mantienen en el original, y prevalece el documento del autor.
Explorar Skills
Documentos · SKILL.md

ko-tech-writer

ko-tech-writer

Writes or revises Korean technical prose across three registers — reader-facing documents (tech-blog posts, technical docs), spoken scripts, and derived compressed assets (teasers, summaries) — through a fixed pipeline: register detection, real-sample calibration of the target venue, a translationese-removal pass, honesty-level layering (reader information …

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentación de la Skill

GitHub

name: ko-tech-writer description: 'Writes or revises Korean technical prose across three registers — reader-facing documents (tech-blog posts, technical docs), spoken scripts, and derived compressed assets (teasers, summaries) — through a fixed pipeline: register detection, real-sample calibration of the target venue, a translationese-removal pass, honesty-level layering (reader information vs internal audit vocabulary), a number/claim gate, and a rendition + perceptual QA pass. Triggers: "기술문서 써줘", "테크블로그 초안 잡아줘", "이 문서 번역투 고쳐줘", "블로그체로 다듬어줘", "이 글 회사 기술블로그에 올릴 수 있게 다듬어줘", "발표 대본 다듬어줘", "낭독 대본 점검해줘", "이 스크립트 소리 내서 읽을 때 걸리는 데 있나".' user-invocable: true allowed-tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob", "WebFetch"] model: sonnet

ko-tech-writer — 한국어 기술문서 집필·개고 파이프라인

한국어 기술 산출물을 쓰거나 개고한다 — 독자 대면(테크블로그 글 · 기술문서 · 발표 파생 자산)과 청자 대면(발표 대본 자체) 둘 다이며, 레지스터는 Step 0 에서 가른다. 핵심 전제: 좋은 문장은 취향이 아니라 절차다 — 실물 표본으로 톤을 캘리브레이션하고, 번역투를 패턴 목록으로 제거하고, 수치는 근거와 창을 달고, 렌더 결과를 눈으로 확인한다.

출처: 2026-08-10 발표 기술문서 세션에서 실측으로 벼려진 규율의 자산화. 이 문서의 규칙 클래스는 그 세션의 개고에서 실제로 검출·수리된 것들이다 — 근거 원장은 그 세션 기록 (fh_completed_2026-08-10 및 해당 개고 커밋 이력. 비공개 세션 기록이라 외부 배포본 독자에게는 도달하지 않는 내부 포인터다). 실측 근거가 없는 클래스를 추가하지 않는 것이 이 문서의 유지 규칙이다. 이 SKILL.md 자체는 독자 대면 문서가 아니라 하네스 자산이므로 이 파이프라인의 적용 대상이 아니다(FH 하우스 스타일을 따른다).

Step 0 — 대상 판별 (레지스터 분기)

같은 내용도 매체에 따라 규율이 다르다. 먼저 셋 중 무엇인지 정한다:

대상레지스터이 스킬의 적용
독자용 문서 (블로그 글·기술문서)문어 존댓말 (습니다체)Step 1~5 전체
낭독 대본 (발표 스크립트)구어 발표체Step 2~4 + Step 5 콜드리드 + Step 5-s(소리 렌더) — 구어 리듬 유지, 줄표는 «쉼»으로만 실현되므로 소리로 안 들리는 동격·재진술 줄표 제거. 🟥 Step 5 를 N/A 로 비우지 않는다: 낭독은 «소리로 렌더»되므로 렌더 산출물이 없는 게 아니라 렌더 매체가 소리다
파생 압축 자산 (티저·요약 이미지·1장 슬라이드)자립형 평문Step 2~5 + 자립성 검사: 화면·본문 맥락 없이 서야 하므로 정본 어휘·주장 범위·은어를 따로 대조. 렌더 산출물을 만들면 Step 5 지각 QA 필수

검증된 원문에서 파생 자산을 만들 때도 재검사한다 — 압축은 주장 범위를 움직일 수 있다 (예: «지점 앞에서 벼려졌다» → «도메인에서 확인해 온»으로 줄면 담당 범위가 넓어져 읽힌다).

Step 1 — 실물 캘리브레이션 (표본 없이 톤 단정 금지)

게재 매체가 지정되지 않았으면 먼저 묻는다(한 줄). 답을 받을 수 없는 환경이면 일반 규율로 진행하고 그 사실을 이력에 명기한다.

게재 목표 매체의 실제 표본을 1편 이상 확인(WebFetch)하고 세 가지를 기록한다:

  1. 문체: 존댓말 변형(습니다/해요), 도입 형식(질문형/선언형)
  2. 구성: 소제목 밀도, 마무리 관행(일반화 + 트레이드오프 + 실무 조언 등)
  3. 시각물: 다이어그램/그래프/표를 어느 밀도로 쓰는가

캘리브레이션 기록은 산출물 이력(작업 로그·PR 본문·문서 frontmatter)에 남긴다 — 게재 본문에는 노출하지 않는다. 표본을 확인할 수 없으면 무엇을 시도했고 왜 안 됐는지(호출 실패·매체 미상 등)를 같은 이력에 명기하고 일반 규율(습니다체·소제목 세분화)로 진행한다 — 확인 안 된 톤을 확정처럼 쓰지 않는다. 시도 기록 없는 «확인 불가»는 Done When 1조를 충족하지 않는다.

Step 2 — 문체 규율 (번역투 클래스 목록)

아래는 실측으로 검출된 클래스다. 기계 스캔 + 눈 판정으로 제거한다 (grep은 후보를 표시할 뿐, 남길지 판정은 문맥으로):

🟥 정규식을 표 안에 두지 않는다. GFM 표 셀에서 | 는 열 구분자라, 이스케이프하면 복붙 실행이 깨지고(rg 에서 \| 는 리터럴 파이프) 안 하면 렌더가 깨진다. 두 뿔 어느 쪽도 답이 아니므로 패턴은 전부 아래 코드블록에 두고 표는 번호로만 가리킨다. 🟥 여기에 숫자를 적지 마라 — 계측 대상은 Step 2-a 의 정본 픽스처다. 파일은 편집할 때마다 자라므로 자기 자신을 대상으로 적은 크기는 다음 편집에서 조용히 거짓이 된다. 초판이 그렇게 적었고, 적대 라운드가 그 숫자들이 같은 커밋 안에서 이미 죽어 있는 것을 실측으로 보였다. 기전만 적는다: 이스케이프판은 리터럴 파이프를 찾으므로 0건을 내고, 저자는 그걸 「잔여 0」으로 읽는다. 크기가 필요하면 Step 2-a 의 레인을 돌려라.

#클래스검출수리check-class
S1줄표 이어붙임 「~다 — ~고,」S1a 분모(2분할) + S1b 판정 대상문장 분리. 줄표는 일을 하는 곳만 남긴다(열거 매달기·리듬 결속·인용된 원문) — 남긴 이유를 적는다measured
S2(비어 있다 — 「범위 표기의 물결표」가 여기 있었다. 2026-08-25 Added-Scope 판정으로 별건 분리: 그 클래스는 자기 행에 「낭독 대본은 N/A」라고 적어, 이 변경의 명시된 일과 다른 일이었다. 번호는 재사용하지 않는다 — 후속 변경이 이 자리로 돌아온다)———
S3용어-머리 「X — 설명」S3「X: 설명」 콜론형measured
S4콜론 나열투 「관측된 분업은: …」서술어 없는 : 도입. ⚠️ 정본 레인 C3 에 후보 패턴이 있다 — 다만 후보 표시용이고 판정은 눈이다완결 문장으로 (「…분업은 ~라는 것입니다」)judged
S5조각문 「걸리는 층.」서술어 없는 마침. ⚠️ 정본 레인 C4 에 후보 패턴이 있으나 «닫힌 명사 어휘»라 recall 이 낮다(스크립트 주석이 그렇게 적는다) — 넓히려면 형태소 분석이 필요하다서술어 복원 (「걸리는 층입니다」)judged
S6소유 직역 「~을 갖다/가지다」S6존재문으로 (「이전 상태를 갖지 않는다」 → 「이전 상태가 없다」). 영어 have 의 직역이고, 한국어는 소유보다 존재로 말한다. 소유가 실제 논점인 자리(권한·지분)는 남긴다measured
S7내부 조어·은어S7 — 후보 낱말을 목록화해 전수 세고, 각 낱말의 첫 등장 ±40자에 풀이가 있는지를 기계로 본다. 「3회 이상 나오는데 첫 등장 풀이 0」이 우선 후보청중 어휘로 평문화. 단 화면이 어휘를 받치면(실제 빨간 화면을 가리키는 발화) 유지 가능 — 근거를 적는다. 🟥 독자층 눈금을 먼저 정한다 — 기술 청중에게 「레포·커밋·도메인」은 일상어다judged
S8지시 불명확 대상어 (조어와 다른 축)타동사인데 목적어가 문장 안에 없는 낱말 — 「낸 것」·「돌렸다」·「그거」. 기계 패턴 없음, 눈. 🟥 풀이를 붙여도 안 닫힌다 — 어려운 게 아니라 「무엇을」이 비어 있다목적어를 문장 안에 복원한다 (「낸 것」 → 「변경분」·「작성자」)judged
S9레지스터 드리프트습니다↔해요↔평어 혼재 — 눈표본 기준 단일화judged

S8 의 1차 출처 (2026-08-24, 필드 리뷰): 발표 대본의 「낸것 / 안낸것」이 「인풋 / 아웃풋으로 직관화」 권고를 받았다 — 내부 전용 축약어를 일반 청중 언어로 번역하라는 지적이다. 🟥 「낸 쪽」은 그 리뷰가 지목한 결함이 아니다 — 2026-08-18 에 「저자」→「낸 쪽」으로 이미 수리된 형태였다. 처방을 결함으로 인용하지 마라(이 파일에서 두 번 났다). ⚠️ 그렇다고 최종형도 아니다 — 같은 2026-08-25 에 다시 「작성자」로 갔다. 한 낱말이 두 라운드에 걸쳐 움직였다는 사실 자체가 S8 이 눈 판정 클래스인 이유다.

F='대상.md'      # 🟥 <> 는 셸 메타문자다. 따옴표로 감싼 실제 경로를 넣어라

# ── S1a 줄표 분모 — 🟥 2분할. en dash 는 «줄표»와 «범위 표기» 둘로 쓰이므로 한 통에 세면
#    분모가 부푼다. 줄표 분모 = ①전수 + (②−③)
rg -c '[—―]' "$F"                     # ① em·horizontal — 전량 줄표 후보
rg -c '–'    "$F"                     # ② en dash 전수
rg -c '[0-9]\s*–\s*[0-9]' "$F"        # ③ 그중 범위 표기 = 정상. 줄표 분모에서 뺀다

# ── S1b 줄표 판정 대상 — 위험 부분집합만 건별로 판정
rg -n '(습니다|입니다|다|것|음)\s*[—–―]\s*\S' "$F"   # 거짓 종결: 종결어미 뒤로 문장이 계속된다
rg -n '[—–―]\s*#x27; "$F"                               # 줄끝
# ⚠️ `" — "`(양쪽 공백) 금지 — 줄 끝 em dash 는 오른쪽 공백이 없어 구조적으로 안 잡힌다.
#    🟥 여기에 크기를 적지 마라 — 대상이 움직이는 파일이면 그 숫자는 다음 편집에 죽는다.
# ⚠️ 문자군은 `[—–―]` — em(U+2014)만 잡으면 en(U+2013)·horizontal(U+2015)이 샌다.

# ── S3 용어-머리 「- **X** — 설명」. 🟥 `^\S+` 로 쓰면 «볼드 글머리»라는 자기 클래스 정의를
#    못 잡는다 — 정본 픽스처의 known-positive 를 0건으로 놓쳤다(2026-08-25 적대 라운드 적발).
rg -n '^\s*[-*]\s+\*\*[^*]+\*\*\s*[—–―]\s' "$F"
# ── S6 소유 직역
rg -n '(을|를) ?(갖|가지)' "$F"

# ── S7 내부 조어: 후보 낱말의 첫 등장 ±40자에 풀이가 있는지
# 🟥 W 를 리터럴로 두지 마라 — 복붙하면 글자 `W` 를 찾아 **무음 0건**이 되고 「잔여 0」으로 읽힌다
W='후보낱말'
rg -n "${W}.{0,40}(=|즉|라고 부|라는 뜻)|(=|즉|라고 부|라는 뜻).{0,40}${W}" "$F"

🟥 en dash 를 줄표로 쓰지 마라 — 범위 표기(30–50%)와 시각적으로 안 갈린다. 그래서 S1a 분모를 2분할해 «줄표로 쓰인 en dash»와 «범위 표기»를 따로 센다.

Step 2-a — 계기 보정 (돌리기 전에 갈리는지 본다)

🟥 새로 만들지 마라 — 이미 있다. 2026-08-17 에 갚힌 부채다.

plugins/fh-commons/skills/ko-tech-writer/fixtures/known_positive.md   ← 일부러 심은 번역투
plugins/fh-commons/skills/ko-tech-writer/fixtures/known_negative.md   ← 같은 내용의 정상 산문
scripts/ko_tech_writer_calibrate.py                                   ← 엔진 + 레인 정의
scripts/test_ko_tech_writer_lanes.sh                                  ← 재현 커맨드

bash scripts/test_ko_tech_writer_lanes.sh        # ← 이 한 줄이 보정이다

🟥 레인을 골라 돌리지 마라 — 위 한 줄이 전부 돈다. 고르는 순간 안 돈 축이 침묵으로 0이 된다. 실측 2026-08-25(병렬 세션): Step 2 레인만 돌리고 Step 4-b 전칭 단정 두 레인을 안 돌렸다. 🟥 그 세션은 축을 숨기지 않았다 — 잰 축을 명시해 보고했다. ⚠️ LOCAL-ONLY ATTESTATION — UNVERIFIED: 그 수치와 「정본 계기로도 참」은 그 세션의 자기신고 이고 이 문서의 저자가 재측정하지 않았다. 이 규율은 그 수치가 참인지에 기대지 않는다 — 오히려 보고가 참일 때 논지가 성립한다. 나중에 두 레인을 돌리니 후보 17건이 나왔고 그중 16건은 정당한 전칭 — 결함이 아니라 판정 대기였다. ⇒ 여기가 이 규율의 하중선이다: 성실히 축을 밝혀도, 안 돈 축은 독자에게 안 보인다. 읽는 쪽은 「명시된 축 = 전부」로 받는다. 그래서 처방이 「축을 밝혀라」가 아니라 **「고르지 마라」**다.

넷 다 package.json files[] 에 실려 소비자 설치에 그대로 간다. 클래스를 추가하면 known_positive.md / known_negative.md 에 표본을 더하고 calibrate.py 의 LANES 에 레인을 더한다 — 별도 픽스처를 짓지 않는다.

🟥 이 자리에서 실제로 그 실수를 했다(2026-08-25, 기록으로 남긴다). 챔버 판정의 carry-forward 를 인용하는 문단 세 줄 아래에서, 위 자산을 한 번도 grep 하지 않고 /tmp 에 두 번째 known-pair 를 heredoc 으로 지었다. 그리고 그때 새로 쓴 용어-머리 패턴은 정본 픽스처의 known-positive 를 0건으로 놓쳤다 — 픽스처를 계기에 맞춰 쓴 탓에 자기 픽스처 에서는 통과했다. 챔버가 「미보정 계기의 증식」이라 이름 붙인 형태 그대로다. ⇒ 보정 계기를 새로 짓기 전에 ls plugins/*/skills/<이 스킬>/fixtures/ 를 먼저 쳐라.

엔진 — 여기서 갈린다. 섞지 마라.

자리엔진왜
보정 레인(위 스크립트)Python re2026-08-17 실측: rg 로 고정했더니 CI 에서 죽었다(ubuntu-latest 에 ripgrep 부재, exit 10). 셸 안의 [가-힣] 은 GNU grep C 로케일에서 exit 2 → «무매치»로 읽히는 fail-open. re 는 세 허용 엔진 중 어디에나 있고 로케일을 안 탄다
손으로 도는 임시 스캔rg로컬 대화형. ⚠️ grep -P 는 \w 가 ASCII 한정이라 금지(Step 4)

클래스 라벨 대응 — 레인은 C, 이 문서는 S 다. 이름이 갈린 채로 두면 다음 사람이 다시 포크한다:

레인이 문서레인이 문서
C1 줄표 이어붙임S1C4 조각문S5
C2 용어-머리S3C5 소유 직역S6
C3 콜론 나열투S4C6 · C6b 전칭Step 4-b (S 번호 없음 — 다른 Step 소속)

🟥 대응표는 «라벨» 대응이지 «패턴» 대응이 아니다. 레인의 정규식과 위 코드블록의 정규식은 서로 다른 문자열이다(레인 C1 은 " — " 양쪽 공백형인데 이 문서는 그 형태를 금지한다). ⇒ 레인이 초록이라고 코드블록 패턴이 보정된 것이 아니다. 둘을 한 벌로 만드는 것이 옳은 방향이나 오늘 안 했다 — 지금은 두 벌이고, 그 사실을 여기 적어 둔다.

🟥 C6 · C6b 를 지우지 마라 — 챔버 carry-forward 는 Step 2 와 Step 4 둘 다를 대상으로 지정했고, 그 둘이 Step 4-b 쪽 절반이다. 레인을 손볼 때 같이 날아가기 쉬운 자리다.

미보정으로 남은 것 — 이름으로 남긴다: S7(내부 조어) · S8(지시 불명확) · S9(레지스터 드리프트) · P1~P3(Step 5-s) 는 아직 레인이 없다. 「레인이 없다」는 「결함이 없다」가 아니다.

Step 2-b — 부분 개고 전용: 기존 본문과의 리듬 대조

문서 전체를 새로 쓰는 경우가 아니라 기존 문서에 문단·문장을 끼워 넣는 경우, 위 클래스가 전부 0이어도 삽입분만 이질적으로 읽힐 수 있다. 클래스 목록은 «틀린 표현»을 잡지 «튀는 표현»을 못 잡기 때문이다. 삽입·개고분에 한해 두 가지를 수치로 대조한다:

  1. 문장 길이 분포 — 본문 평문 문장의 길이 중앙값·상위 10%를 먼저 구하고, 삽입분의 각 문장이 상위 10% 안에 드는지 본다. 넘으면 끊는다. (본문에 더 긴 문장이 있어도 근거가 못 된다 — 그건 그 문단의 리듬이지 삽입분의 것이 아니다.)
  2. 어휘 반복 — 삽입분 안에서, 그리고 직전·직후 문장까지 포함해 같은 어간이 3회 이상 연달아 나오는지. 특히 같은 글자가 뜻이 다른 채로 반복되면(«검사를 더 붙여도 … 지점 쪽에 붙습니다») 읽는 눈이 걸린다.

실측(2026-08-11, 기술문서 v2.1 작업): 클래스 스캔 잔여 0인 삽입분이 본문 112문장 중 유일한 소유 직역 1건을 들여왔고, 문장 길이 124자(본문 중앙값 40자 · 상위 10% 78자), 「내려가」 앞 문장 포함 4회 연속 · 「붙」 한 문장 안 2회였다. 셋 다 기존 클래스 목록으로는 안 잡혔고, 읽는 사람이 «톤이 다르다»로 먼저 알아챘다. 의도 보존으로 제외하는 항목은 명명된 사유(열거 매달기·리듬 결속·화면 받침·인용된 원문 — 도구가 찍은 출력이나 남의 글을 축자 인용한 자리는 고치면 «출력 그대로»가 거짓이 된다)에 한하며, 제외 목록은 Step 5 콜드리드 짝에게 통독이 끝난 뒤 별도 패스로 전달해 대조받는다 — 사전 전달은 첫-읽기 눈을 오염시키고, 자기가 쓴 사유만으로 무제한 제외하지 않는다.

Step 3 — 정직 수위 층 분리

정직함에는 두 층이 있고, 독자 문서에는 한 층만 싣는다:

  • 싣는다 — 논지를 받치는 정직: 한계 절, 소표본 명시, 자기 철회 사례, "측정 중". 이걸 빼면 글의 등뼈가 빠진다.
  • 뺀다 — 내부 감사 어휘: 검증 원장의 자기감사 디테일("실적은 X만 주장한다", "도달만·채택 아님" 같은 규율-말투), 내부 등급/게이트 상태 세부. 내부 기록에는 남기고 독자 본문에서는 뺀다.

판단 기준 한 줄: "이 문장이 독자의 다음 행동이나 판단을 바꾸는가?" — 바꾸면 정보, 안 바꾸면 자기감사다. 문장 단위로 적용하고, 한 절의 문장 대부분이 걸리면 절 단위로 제거를 검토한다. 경계 예시: «실패 3건은 내부 전용 API 의존이라 외부 재현이 안 된다»는 독자의 재현 판단을 바꾸므로 정보다. «실적은 머지된 것만 주장한다»는 저자의 집계 규율 서술이라 자기감사다.

Step 4 — 수치·주장 게이트 (기존 검증 자산으로 라우팅 — 재발명 금지)

분모는 기계로 연다: 본문의 아라비아 숫자 전수를 grep으로 추출해 목록을 만들고, 수치 주장이 아닌 항목(버전 표기·목차 번호·연도 등)을 사유와 함께 제외한 뒤, 남은 각 행에 아래 라벨 중 하나를 단다. 단위 목록으로 좁혀 시작하지 않는다 — 영문 단위(ms·GB)가 새기 때문이다. 한글 수사("세 배")는 아라비아 전수로도 못 잡으므로 눈 판정 잔여로 명기하고 통독에서 본다. 자기 눈으로 고른 수치만 채점하는 것은 measured가 아니다.

⚠️ \b 경계 금지 — 유니코드 인식 엔진(ripgrep·GNU grep UTF-8 로케일·Python re — grep -P는 예외다: (*UCP) 없이는 \w가 ASCII 한정이라 숫자-한글 사이에 경계가 생긴다. 반드시 rg 로 고정)에서 한글은 word 문자라 숫자와 한글 사이엔 경계가 생기지 않는다. \b\d[\d,]*\b류 패턴은 숫자 뒤에 한글 조사·단위가 바로 붙는 표기(예: «7개»)를 놓친다. known-pair로 직접 확인(엔진 고정, 복붙 실행): 이 SKILL.md 자신에 rg -n '\b\d[\d,]*\b'와 rg -n '\d(?:[\d,]*\d)?'(끝자리 콤마를 삼키지 않게 끝을 숫자로 고정)를 각각 돌려 델타를 세면, 경계판이 놓치는 숫자가 나온다(측정일 기준 델타 수를 이력에 기록 — 놓치는 쪽은 대부분 조사·단위가 바로 붙는 주장 수치이고, 날짜·Step 번호처럼 뒤에 공백·기호가 오는 숫자는 양쪽 다 잡힌다). 경계 없는 추출로 시작하고, 과다추출된 비주장 항목은 위 문장대로 사유와 함께 제외한다.

Step 4-b — 전칭 단정 후보 검출 (오탐 허용 — 후보 표시용, 판정은 사람)

«전부/모두/하나도 없다/전혀/일절/예외 없이» 류 전칭 단정 어휘 + 부정형 전칭을 rg -n '(안|못) ?(했|만들|나오|잡히)|지 않았(다|습니다)'(엔진 고정, 복붙 실행)로 걸러 후보로 표시하고, 각 후보의 반례가 정말 없는지 본문·근거를 다시 대조한다. grep은 후보만 내고 판정은 사람이 한다 — 오탐 다수가 정상이다. 단, 후보를 세지 않거나 판정을 비워두는 것은 결함이다 — 판정할 사람을 구할 수 없으면 후보 목록을 그대로 남기고 이 조건을 미충족으로 명시하고 발행 판단자에게 넘긴다(자기 판정으로 대체 금지 — Step 5 격리 규율과 동형).

실측(비공개 원장, 2026-08-14): 같은 개고 세션에서 반례 탐색 없는 전칭 단정을 두 번 썼고, 한 번은 위 어휘 목록에 없는 부정형("~을 안 만들었다")이었다 — grep 어휘만으로 못 잡는 계열이 실재한다는 뜻이라 부정형 패턴을 함께 넣는다. 반례 탐색 없이 쓴 전칭 단정은 원문보다 개고본에서 더 잘 나온다 — 다듬는 행위 자체가 근거 재확인 없이 서술을 넓히기 때문이다. Step 5 재콜드리드가 뒤늦게 잡을 수도 있지만, 앞단에서 후보를 먼저 좁혀두면 그 라운드의 비용이 준다.

수치·주장에는 두 가지 라벨이 있고 서로 다른 상태다 — 섞지 않는다:

  • «발행 직전 재측정 대상» — 근거는 확인됐으나 시간이 지나면 값이 변하는 것 (다운로드·별 수·테스트 수). 측정 시점·조건(창)을 병기하고 이 라벨을 단다.
  • «미확인» — 근거 실물을 아직 확인하지 못한 주장. 창을 지어 붙이지 않는다(조작된 정밀도). 라벨과 확인 경로(어느 저장소·로그를 보면 닫히는지)를 적고, 발행 전 해소를 필수로 남긴다. 미발견은 "미확인"이지 "없음"이 아니다.

기록에 없는 실적·사례는 1차 출처(저장소·PR·로그)를 직접 조회해 확인하고 나서 싣는다.

  • 출처 역추적이 필요하면 /phantom-quench 로 라우팅한다. 🟥 차트 검증 스킬은 «있다»고 전제하지 마라 — 그러나 «없다»고도 적지 마라. 이 줄의 이전 판은 「dataviz 스킬은 이 레포에 없다」고 적었는데 그 명제는 거짓이다 — dataviz 는 런타임이 공급하는 번들 스킬로 실재한다 (2026-09-17 확인 — 근거는 세션의 스킬 목록이고, 🟥 레포 grep 으로는 구조적으로 안 나온다). 「레포 자산이 아니다」와 「그런 스킬은 없다」는 다른 명제다 — 전자를 후자로 접으면 실재하는 스킬로 가는 포인터를 잃는다. 차트를 그리게 되면 그 시점의 런타임에서 확인하고 쓰되, 없으면 「없음」으로 적는다. 프로젝트에 금지·조건 수치 목록(원장)이 있으면 발행 전 1패스 대조한다. 이 스킬은 외부 검증 도구를 재발명하지 않는다(출처 검증·차트 검증은 위 라우팅으로) — 스킬 안의 grep 열거·스캔은 절차의 일부이지 검증기 신설이 아니다.

Step 5 — 렌디션 + 지각 QA

  • md 정본은 항상 만든다. 다이어그램은 mermaid(GitHub·주요 뷰어 네이티브 렌더).
  • HTML/PDF 렌디션은 조건부 — 요청이 명시했거나 게재 채널이 요구할 때만 만든다(판단 주체는 요청/채널이지 저자의 재량이 아니다): 자체완결 HTML(외부 의존 없는 인라인 SVG 다이어그램, 시스템 한글 폰트 스택, @page 인쇄 규칙) → headless Chrome --print-to-pdf.
  • md-only 예외의 범위는 좁다 — 게재 매체가 md 를 렌더하면(위키·GitHub 등) md-only 산출물도 렌더 산출물이다. N/A 는 게재 매체가 렌더를 하지 않음을 확인한 경우에만 쓴다. 매체가 미상이면(Step 1 «확인 불가» 경로로 진행한 경우) N/A 자격이 없다 — GitHub 렌더를 기본 렌더러로 가정하고 지각 확인을 수행하며, 그 가정 사실을 산출물 이력에 남긴다. 실측(비공개 원장, 2026-08-14): 렌더된 표의 한 셀에 여러 항목이 뭉쳐 기호-뜻 대응이 깨졌는데, 원문엔 항목이 전부 적혀 있어 논리적 누락이 없었고 열 수·이스케이프 같은 기계 검사도 통과했다. 배경지식 0 콜드리드를 여러 라운드 돌렸는데도 렌더된 표를 보는 사람만 그 결함을 알아챘다 — «md-only니까 N/A»로 판단한 것이 오판이었다 — 위키가 md를 렌더하는 순간 렌더 산출물이 생긴다.
  • 지각 QA(필수 — 렌더 산출물이 있을 때, md-only라도 게재 매체가 렌더하면 포함): 렌더 결과를 전 페이지 눈으로 확인한다 — 라벨 잘림(한글 받침), 페이지 나눔, 표/그림 겹침, 다이어그램 텍스트 가림, 표 셀 안에 여러 항목이 한 줄로 뭉쳐 있는지(구분자 반복 — 렌더된 표에서만 보이고 원문 grep으론 안 잡힌다). 도구 exit 0은 렌더 성공이지 가독성 판정이 아니다. 판정 짝은 독립 2차 지각 패스(다른 눈이 같은 렌더를 봄)다 — 콜드리드는 내용을 읽지 렌더 결함을 보지 않으므로 짝이 될 수 없다.
  • 발행 전 콜드리드 1패스: 격리된 검토가 처음 읽는 눈으로 통독한다. 저자는 자기 글의 전제 결손을 못 본다. 격리의 정의: 저작 맥락을 상속하지 않는 실행이다. 같은 레포에서 띄운 서브에이전트는 프로젝트 지침·메모리를 상속하므로 완전 블라인드가 아니다 — 저작 맥락 차단이 필요한 판정(전제 결손·자기 어휘 검사)은 레포 밖 cwd의 headless 실행 + 컨트롤(알려진 결함 1건 동반)로 하고, 통독 수준 검토는 다른 에이전트로도 되지만 어느 격리 수준이었는지 이력에 적는다. 에이전트 디스패치는 호출 세션의 권한·도구를 따른다 (이 스킬의 allowed-tools 밖의 일이다). 강격리도 비저자 짝도 구할 수 없으면 해당 judged 조건을 미충족으로 명시하고 발행 판단자에게 넘긴다 — 자기 검토로 대체하지 않는다.
  • 🟥 재콜드리드 — 지적을 반영해 고쳐 썼으면 고친 것을 다시 읽힌다. 콜드리드 1회는 초안을 검증할 뿐이고, 발행되는 것은 수리본이다. 수리는 결함의 주된 출처라서 «지적 반영»과 «통과»는 다른 사건이다. 본문이 바뀌었으면 라운드를 하나 더 돈다. 정지 조건은 라운드 수가 아니라 변경이다 — 그 라운드에 새 지적이 0건이고 본문 변경이 0건일 때만 닫는다(어느 하나만으로는 안 닫힌다). 고쳤으면 아직 안 닫힌 것이다. 미반영 지적이 남으면 각 건에 명명된 사유 + 발행 판단자 수락 기록을 붙인다 — 없으면 미충족으로 명시(Step 5 다른 judged 조건과 동형 라우팅). 라운드마다 «지적 n건 · 반영 n건 · 본문 변경 여부 · Step 4/4-b 스캔을 이 수리본에 재실행했는가(y/n)»를 이력에 적는다 — 수리가 결함의 주된 출처인데 수치·전칭단정 게이트가 초안 기준에 머물면 바로 그 자리에서 새 결함이 태어난다.

    실측(2026-08-11): 1차 콜드리드가 초안의 삽입 지점 오류를 잡았고, 그 수리가 새 결함 3종(소유 직역 · 문장 길이 124자 · 어휘 반복)을 낳았다. 재콜드리드를 안 돌아 그대로 발행될 뻔했고, 읽는 사람이 «톤이 다르다»로 먼저 잡았다. 돌려 보니 문체보다 큰 것까지 나왔다 — 삽입분의 주장이 반례가 흔한 단정이었고(«검사를 아무리 늘려도 잡히지 않는다»), 자리도 닫는 절이 아니라 한계 절이 맞았다. 문장 다듬기 라운드가 주장 범위와 배치를 되돌렸다. 추가 관측(2026-08-25, 병렬 세션이 이 스킬을 비공개 문서 2종에 적용): 콜드리드 3라운드에서 지적이 14 → 4 → 8 로 갔고, 3차 8건 중 4건이 2차 수리가 만든 것이었다. ⚠️ LOCAL-ONLY ATTESTATION — UNVERIFIED: 그 세션의 자기신고이고 이 문서의 저자가 재측정하지 않았다. 논지의 하중선은 위 2026-08-11 실측이고 이건 보강이다. ⚠️ 「독립 재현」이라 부르지 않는다 — 그쪽은 판정자가 하나인 약격리 콜드리드고 이쪽은 게이트라 관측 방식이 다르다. 정확한 표현은 「관측 방식이 다른 둘에서 같은 방향이 나왔다」 까지이고, n=2 는 센 표현이다(그 세션이 스스로 이 조건을 붙여 넘겼다).

Step 5-s — 소리 렌더 + 청취 QA (낭독 레지스터 전용)

🟥 낭독 대본은 렌더 산출물이 「없는」 게 아니라, 렌더 매체가 「소리」다. Step 5 를 N/A 로 비우면 그 표면은 한 번도 검사되지 않은 채 발행된다. Step 5 콜드리드는 낭독에도 그대로 적용된다 — 이 절이 대체하는 것은 지각 QA(눈 → 귀)이지 콜드리드가 아니다.

출처와 그 한계 (읽고 인용해라): 이 절의 축은 2026-08-09 낭독 렌즈 필드런의 교정판 A~F 에서 가져왔다. 🟥 그 필드런이 자기 축 셋을 반증했으므로 초안 판본을 인용하면 안 된다 — A 호흡은 계기가 틀렸고(아래), E 볼드 개수 기준은 판별력 0, D 어미 기준은 재조정됐다. 그 렌즈 자체는 챔버 KILL 판정을 받았고(별도 자산으로 출하하지 않는다), 그 판정의 운영자 확정 carry-forward 는 「새 계기를 짓기 전에 이미 있는 계기의 판별력을 세운다」였다 — 그래서 이 절은 축을 넓히지 않고 텍스트로 기계화되는 셋만 들여왔다. 🟥 「실측 근거가 있는 셋」이 아니다 — 정본이 유효 판정한 축은 넷이고(B 지시어 · B′ 동음이의 · C 낭독불가 · F 대구 음절 — 🟥 축자를 정확히 적는다: ✅ 를 받은 축은 B·C·F 셋이고, 그중 ✅ 유효 라는 축자가 붙은 것은 C·F 둘이다(B 는 ✅ 예측 적중 — 심장 맞다). B′ 는 ★ net-new. ⚠️ 「유효 판정」이라는 표현은 정본에 한 번도 안 나온다 — 이 문서가 만든 말이다. 🟥 이 줄은 정정하면서 새 팬텀을 낳았던 자리다: 적대 검토가 준 「유효 판정은 셋」이라는 지적자의 어휘를 축자 확인 없이 그대로 옮겨 적었다. 정정도 인용이다 — 원문을 열어라.), 그중 C 낭독불가에서 P1·P2 둘이 나왔다. 🟥 P2 를 B′ 의 절반이라 적지 마라 — 정본은 2,017 연도 오독을 C 행에 싣고, B′ 행의 내용은 「계기」 計器/契機 하나뿐이라 「나머지 절반」이라 부를 것이 없다. 안 들어온 것은 아래 미측정 목록에 이름으로 있다. 보정은 Step 2-a 의 정본 레인을 쓴다 — 이 절을 위해 픽스처를 새로 짓지 마라.

텍스트 렌즈로 잡히는 것 (기계 · 이 절의 분모)

🟥 엔진은 rg 로 고정한다 — .{60,} 류의 문자 계수와 [가-힣] 인식이 엔진마다 다르다. 축은 셋뿐이고, 넷째는 미보정으로 이름만 남긴다. 실측 근거 없는 축을 추가하지 않는 것이 이 파일의 유지 규칙이다(초판이 「한자어 연쇄」·「의 3연」 두 축을 근거 없이 넣었다가 뺐다).

F='낭독본.md'    # 🟥 <> 금지 — 실제 경로로 치환
# ── P1 낭독 불가 토큰 — 창: 줄. 소리로 읽는 법이 안 정해진 것
rg -n '[0-9]+/[0-9]+|★|%|[A-Za-z]{2,}' "$F"      # 🟥 {2,} 다 — PR·CI·QA·AI·ML 이 가장 안 정해진다
# ── P2 단위 없는 숫자 — 분모 opener. 숫자 + 뒤 3글자를 다 뽑아 «단위가 붙었나»를 눈으로 본다
rg -on '[0-9][0-9,]*.{0,3}' "$F"
# ── P3 거짓 종결 — 종결어미 뒤로 문장이 계속된다. Step 2 의 S1b 와 같은 계기다
rg -n '(습니다|입니다|다|것|음)\s*[—–―]\s*\S' "$F"
축왜 (1차 출처 = 2026-08-09 필드런)계기의 성격
P1 낭독 불가 토큰기호·분수·영문·2글자 약어를 대본에 그대로 두면 발표자가 무대에서 즉석에 정한다. 실측: 26건 중 8종이 읽는 법 미정. 읽는 법을 대본에 박아라(「XYZ, 즉 <풀어 읽는 이름>」 — 약어를 처음 쓰는 자리에서 한 번)잔여 0 스캔. ⚠️ 오탐이 정상 — ms·GB 같은 단위는 사유를 붙여 제외한다
P2 단위 없는 숫자실측: 단위 없는 2,017 이 「이천십칠」 = 연도로 들렸다. 🟥 계기는 「단위 없는 숫자」를 찾는 것이지 「한글 수사+단위」를 찾는 게 아니다 — 후자는 수리된 형태라, 그걸 스캔하면 처방을 결함으로 세게 된다(초판이 그렇게 틀렸다)분모 + 눈 판정(Step 4 와 같은 형태). 잔여 0 이 아니라 «전건에 판정이 붙었나»로 채점한다
P3 거짓 종결A축의 실제 얼굴. 필드런에서 「60자 초과」는 4건 전부 오탐이었고, 그 자리에서 진짜로 나온 결함이 이것이다(3건) — 「습니다 —」 뒤로 문장이 계속되면 청중은 문장이 끝난 줄 알고 주의를 놓는다잔여 0 스캔

🟥 P4 호흡 — 미보정(UNCALIBRATED). measured 에서 뺀다. 정본 상수는 「한 호흡 ≤22자 · 38자는 아님」(운영자 반복 낭독으로 실측)이고, 재는 단위는 **문장 길이가 아니라 「끊을 수 있는 자리 사이의 최장 구간」**이며, 세는 것은 문자수가 아니라 낭독 음절수다(1,857 은 5문자지만 6음절, QA 는 2문자지만 3음절 — 문자수로 재면 숫자·라틴이 든 문장이 조직적으로 과소평가된다). 이 셋을 다 만족하는 계기를 아직 안 만들었으므로 축을 「미보정」으로 표기하고 measured 조건에서 제외한다. 🟥 엔진 부재 시 degrade — 이 절은 rg 에 고정되어 있고, 그것이 §Step 2-a 와 긴장한다. Step 2-a 는 보정 레인을 Python re 로 고정했다 — 이유는 ubuntu CI 에 rg 가 없기 때문이다. 그런데 위 P1~P3 는 rg 로 적혀 있고, §Done When 은 그 셋을 measured 로 건다. 두 줄이 같은 문서 안에 있으므로 부재 경로를 명시한다:

  • rg 가 있는 노드 — 위 세 줄을 그대로 복붙해 실행한다(의도된 경로).
  • rg 가 없는 노드 — 다른 엔진으로 바꿔도 되나, 🟥 바꾸기 전에 known-pair 로 확인하고 바꿔라. 정규식 방언이 달라지면 세 스캔은 에러를 내지 않고 조용히 0건을 낸다 — 그것은 「결함이 없다」가 아니라 「계기가 안 돌았다」이고, 둘은 출력이 같다. ⚠️ 어느 종류의 grep 이 \s·\d 를 지원하는지를 기억으로 단정하지 마라 — POSIX ERE 는 그 둘을 정의하지 않아 구현마다 갈리고, 도는 것과 안 도는 것이 같은 이름을 쓴다. (이 문단의 초판이 「BSD grep -E 는 \s 를 리터럴 s 로 읽는다」고 단언했는데, 2026-09-17 실측이 반증했다 — 그 머신의 /usr/bin/grep -E 'a\sb' 는 a b 만 잡고 asb 는 안 잡았다. 단언이 틀렸고, 그래서 이 줄은 «어느 구현이 뭐를 한다» 대신 «확인하고 써라»로 바뀐다.) known-pair: 이 문서가 이미 가진 양성 사례 한 줄 + 안 걸려야 할 한 줄을 같은 실행에 통과시켜 둘이 갈리는지를 본다. ⇒ 해당 행을 «미충족»으로 명시하고 어떤 엔진이 없었는지 적는다. 통과를 주장하지 않는다 (P4 가 «미보정»으로 빠진 것과 같은 방향 — 없는 계기를 초록으로 접지 않는다). 파이썬 포팅은 아직 안 만들었다 — 만들면 Step 2-a 레인으로 가야 하고, 그때까지는 이 칸이 비어 있다.

🟥 rg -n '.{60,}' 를 쓰지 마라 — 초판이 그걸 넣었는데, 필드런이 이미 반증한 판본이다 (단위가 틀렸고, 「40~55자」조차 정본이 「출처 없이 쓴 값, 거의 두 배 과대」로 교정한 값이었다. 60 을 22 로 나누면 약 2.7 배이나 그 수는 정본에 없는 유도값이라 라벨을 붙여 둔다). 잘못된 계기는 없는 계기보다 나쁘다 — 초록을 내주기 때문이다.

🟥 텍스트로는 구조적으로 못 잡는 것 — 이름으로 남기고 미측정으로 표기한다 발음 충돌·혀 꼬임 · 억양과 강세 위치 · 실제 호흡 지점(P4) · 말버릇·군말 · 5분 넘게 떨어진 지시어(B 축 — 필드런의 심장이나 슬라이드-시각 매핑이 있어야 기계화된다) · 대구 음절 어긋남(F 축 — 정본이 8건 중 6통과로 유효 판정했으나 여기 계기가 없다) · 동음이의 낱말(B′ 축 통째로 — 「계기」가 計器인지 契機인지는 숫자 단위로 안 갈리고, 문법적으로 완벽히 파싱되므로 청중은 다른 문장을 듣고 그냥 넘어간다. 화면에 없으면 복구 경로 0). 🟥 이 넷은 「없는 축」이 아니라 「안 가져온 축」이다 — 정본에 있고, 여기에 계기가 없을 뿐이다. ⇒ 닫는 방법은 하나뿐이다: 소리 내어 통독 1패스. 그리고 **짝은 「듣는 사람」**이다 — 저자가 자기 대본을 읽는 것은 생성자=평가자이므로 충족이 아니다(Step 5 지각 QA 와 동형).

🎧 청취 라운드 — 정지 조건 (Step 5 재콜드리드와 동형) 소리를 실제로 렌더해 듣는 사람이 듣는다. 지적을 반영해 고쳤으면 고친 것을 다시 들린다. 정지 조건은 라운드 수가 아니라 변경이다 — 그 라운드에 새 지적 0건 ∧ 본문 변경 0건일 때만 닫는다. 라운드별 「지적 n · 반영 n · 본문 변경 여부」를 이력에 적는다. 🟥 수리는 결함의 주된 출처다 — 낭독을 고치면 리듬이 바뀌므로 P1~P3 기계 스캔도 그 수리본에서 재실행한다.

🔧 기계 앵커 — 소리를 「산출물」로 만든다 (주체: 발표자·사람) 🟥 md 정본을 그대로 먹이지 마라 — TTS 는 **·|·# 를 그대로 읽는다. 평문으로 먼저 내린다:

sed -E 's/`[^`]*`//g; s/\*\*//g; s/^#+ //; s/^\| *//; s/ *\| */ /g' "$F" > /tmp/script.txt
say -o /tmp/script.aiff -v Yuna -f /tmp/script.txt      # macOS 내장 TTS · 임의 TTS 가능

소리 파일을 산출물 이력에 첨부하고, 듣는 사람은 그 파일을 듣는다. 그러면 「렌더 매체가 소리다」가 비유가 아니라 첨부 가능한 산출물이 되고, Step 5 의 「스크린샷 첨부 + 미충족 명시」 degrade 와 같은 형태가 된다. ⚠️ 평문화 자체가 손실이다 — 표는 줄로 눌리고 강조는 사라진다. 무엇이 눌렸는지 확인하고, 눌린 자리가 발화에 필요하면 대본을 고쳐라(변환기를 고치는 게 아니다). ⚠️ TTS 는 사람 낭독의 대리물이다 — 억양·강세·말버릇을 보존하지 않는다. 대리물로 본 사실을 이력에 적는다.

degrade: 듣는 사람을 못 구하면 소리 렌더 파일을 이력에 첨부하고 해당 Done When 을 미충족으로 명시하여 발행 판단자에게 넘긴다. 자기 낭독으로 대체하지 않는다(생성자=평가자).

Done When

🟥 클래스 목록을 여기에 다시 열거하지 않는다 — Step 2 표의 check-class 열이 정본이다. 괄호로 닫힌 열거를 여기 두면, Step 2 에 행을 추가할 때마다 새 클래스가 채점되지 않은 채 남는다(관측 2026-08-25: 그때 새로 넣은 클래스들이 어느 Done When 행에도 안 걸렸다. ⚠️ 그중 하나는 이후 Added-Scope 판정으로 별건 분리됐으므로 «둘»이라는 당시 개수는 지금 표와 안 맞는다). ⚠️ 아래 라우팅은 measured·judged 둘만 받는다 — Step 2 표에 mandatory-pass 행을 만들면 그 행을 받는 Done When 줄도 같이 만들어라. 안 그러면 이 문단이 막으려던 고아가 그대로 재발한다.

조건check-class
대상 매체 실물 표본 확인 기록이 산출물 이력에 존재 — 불가 시 시도 내용·사유 포함 명기(시도 기록 없는 「불가」는 불충족)mandatory-pass
Step 2 표에서 check-class 가 measured 인 전 행의 스캔 잔여 0 — Step 2-a 보정을 먼저 실행(bash scripts/test_ko_tech_writer_lanes.sh — 전 레인 discriminates)한 뒤 스캔. 🟥 레인이 없는 클래스는 「보정 안 됨」으로 적고 measured 로 세지 않는다(레인 부재는 결함 부재가 아니다). 분모 opener(S1a·P2)는 neg=0 이 원리적으로 불가능하므로 「양성이 출력에 나오는가」로 본다. 제외는 명명 사유와 함께 목록화하되, 전수가 큰 분모(S1a)는 집계 1줄로 제외하고 위험 부분집합만 건별로 적는다measured
Step 2 표에서 check-class 가 judged 인 전 행의 통과judged — 짝: 콜드리드 통독(통독 후 제외 목록 대조)
부분 개고인 경우(기존 문서에 삽입·수정): Step 2-b 리듬 대조 — 삽입분 각 문장이 본문 길이 상위 10% 이내 ∧ 어간 3회 연속 반복 0. 전문 신규 집필이면 N/A 명기measured
본문 수치 전건(기계 추출 분모 기준, \b 미사용 경계없는 추출, 발행 직전 최종본 기준)이 라벨(창 병기/재측정 대상/미확인) 동반 + 한글 수사(세 배·두 배 등) 눈 판정 잔여 목록이 이력에 명기됨(0건이면 「0」으로 기록)measured
전칭 단정(부정형 포함) 후보 grep 스캔을 발행 직전 최종본에서 실행 — 후보 n건 수치 기록measured
위 후보 n건 각각에 반례 확인 결과(「확인함」/「확인 못 함」)가 붙음 — 미판정 0judged — 짝: Step 5 콜드리드(통독 후 후보 목록 대조)
파생 압축 자산인 경우(Step 0 세 번째 레지스터): 자립성 검사(정본 어휘·주장 범위·은어 대조) 결과가 이력에 존재 — 해당 없으면 N/A 명기judged — 짝: 배경지식 0 콜드리드(원문 비열람)
렌더 산출물(HTML/PDF/이미지 — 파생 압축 자산 포함)이 존재하거나 게재 매체가 md를 렌더하는 경우(위키·GitHub 등) 전 페이지 지각 확인 — 게재 매체가 md를 렌더하지 않음을 확인한 경우만 N/A 명기(사유 기록). 매체 미상이면 GitHub 렌더 가정으로 지각 확인 수행(가정 기록) — N/A 불가. 낭독 대본은 N/A 가 아니라 Step 5-s 청취 QA 로 간다(렌더 매체가 소리다)judged — 짝: 독립 2차 지각 패스(다른 눈이 같은 렌더를 봄)
콜드리드가 변경 없음으로 닫혔다 — 마지막 라운드에 새 지적이 0건이고 본문 변경이 0건일 때 닫는다(어느 하나만으로는 안 닫힌다). 지적을 반영해 고쳤으면 그 수리본으로 한 라운드 더. 미반영 지적이 남으면 각 건에 명명된 사유 + 발행 판단자 수락 기록을 붙임 — 없으면 미충족 명시. 라운드별 「지적 n · 반영 n · 본문 변경 여부」 + 격리 수준(강/약) 이력 기록. 🟥 낭독 대본도 이 행의 대상이다 — Step 5-s 가 대체하는 것은 지각 QA 이지 콜드리드가 아니다judged — 짝: 격리 검토(Step 5 정의)
낭독 레지스터인 경우: Step 5-s P1·P2·P3 실행 — P3 은 잔여 0. P1 은 오탐이 정상이므로 「잔여 0」이 아니라 «전건에 판정 + 제외는 명명 사유와 함께 목록화»로 채점한다(단위·고유명사가 늘 걸린다). P2 는 분모 전건에 판정. P4 호흡은 미보정이라 이 조건에 안 들어간다(빠뜨린 게 아니라 제외한 것이며, 그 사실을 이력에 적는다). 낭독 레지스터가 아니면 N/A 명기measured
낭독 레지스터인 경우: 소리 렌더(md→평문 변환 후 TTS) 파일이 이력에 존재 + 듣는 사람의 확인. 못 구하면 파일만 첨부하고 미충족 명시(자기 낭독 대체 금지). 낭독 레지스터가 아니면 N/A 명기judged — 짝: 듣는 사람
정직 수위 분리(Step 3)가 적용됨judged — 짝: 발행 승인자 확인 또는 격리 적대 검토. 둘 다 불가하면 미충족으로 명시 보고(자기 검토로 대체 금지)

역할 경계 (중복 아님을 명시)

  • hub-persona-auditor 에이전트 — 완성된 대외 초안의 페르소나 감사(검토). 이 스킬은 저작·개고 절차다. Step 5 콜드리드에서 그 에이전트를 짝으로 쓸 수 있다(라우팅 관계).
  • fh-preprep:preprep — 발표 표면 사이(덱↔원고↔노트)의 정합을 본다. 이 스킬은 한 편의 산문/대본 자체를 본다. 🟢 경계는 preprep 쪽이 먼저 그어 놓았다 — 그 스킬은 초판에 있던 Step 2 복제 레인(L9)을 빼면서 «번역투·레지스터·수치 게이트·지각 QA 는 ko-tech-writer 로 간다» 고 명시했다. Step 5-s 는 그중 «낭독의 지각 QA» 자리다 — 재발명이 아니다. ⚠️ 겹치는 축 하나: preprep 의 L5 jargon(조어가 낭독면 첫 등장에 풀이를 달았나, 차단) ↔ 이 문서의 S7. 같은 것을 두 번 재지 않도록, preprep 을 돌린 발표 대본은 S7 을 «preprep L5 로 대체»로 적는다. 🟥 그 둘이 정말 같은 것을 잡는지는 정의 대조로만 판단했고 같은 대본에 둘 다 돌려본 적은 없다 — 측정이 아니다.
  • harness-doctor --lint — 하네스 자산의 언어 패턴(자기마케팅) 검출. 이 스킬은 독자 대면 문서가 대상이고 번역투·레지스터·정직 수위까지 다룬다.
  • 플랫폼 내장 문서 기능 — 특정 문체 캘리브레이션·정직 수위 층 분리·지각 QA 파이프라인은 내장에 없다(이 스킬이 더하는 것은 거버넌스다).

독립 실행 및 degrade 경로: phantom-quench 미설치 → 해당 라우팅을 수동 대조로 · WebFetch 불가 → Step 1 «확인 불가» 경로(시도 기록 의무) · headless Chrome 부재 → HTML/PDF 렌디션을 «미생성»으로 명기하고 md 정본만 산출 · Step 4-b 판정 주체(사람) 부재 → 후보 목록을 그대로 두고 해당 Done When 을 미충족으로 명시(자기 판정 대체 금지) · 독립 2차 지각 패스 부재 → 렌더 스크린샷을 산출물 이력에 첨부하고 해당 Done When 을 미충족으로 명시(저자가 같은 렌더를 두 번 보는 것으로 대체 금지 — 생성자=평가자가 된다). 듣는 사람 부재 → 소리 렌더 파일 첨부 + 해당 Done When 미충족 명시(자기 낭독 대체 금지) · 🟥 TTS 부재(macOS 아닌 노드 · say 없음 · 한국어 보이스 미설치) → 소리 렌더를 「미생성」으로 명기하고, 사람이 직접 소리 내어 읽은 뒤 듣는 사람이 확인한다 — 기계 앵커가 없어지는 것이지 청취 라운드가 없어지는 게 아니다. 듣는 사람까지 없으면 그 Done When 은 미충족이다. ⚠️ 이 스킬은 say 를 어느 노드에서도 실행해 본 적이 없다 — 플래그 형태만 확인했다. · 각 degrade는 산출물 이력에 적는다.

언어 범위: 이름 그대로 한국어 전용이다. Step 0·1·3·4·5의 구조는 언어 무관이지만 Step 2 문체 클래스가 전부 한국어 실측이라, 영어 지원은 영어 실측 클래스가 쌓인 뒤 별도 확장(en- 자매 또는 일반화)으로 간다 — 실측 없는 클래스를 미리 짓지 않는다(유지 규칙).

Skills guardadas