Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[32m'; Y=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[33m'; R=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[31m'; B=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[34m'; D=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[2m'; N=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[0m'\nelse\n G=; Y=; R=; B=; D=; N=\nfi\n\n# LLM CLI 자동 감지 (env LLM_CLI=claude|codex|gemini 로 override)\nLLM_CLI=\"${LLM_CLI:-}\"\nif [ -z \"$LLM_CLI\" ]; then\n if command -v claude >/dev/null 2>&1; then LLM_CLI=\"claude\"\n elif command -v codex >/dev/null 2>&1; then LLM_CLI=\"codex\"\n elif command -v gemini >/dev/null 2>&1; then LLM_CLI=\"gemini\"\n fi\nfi\nif [ -z \"$LLM_CLI\" ]; then\n echo \"${R}LLM CLI 필요: claude / codex / gemini 중 하나 설치${N}\"\n exit 1\nfi\necho \"${D}LLM CLI: $LLM_CLI${N}\"\nexport LLM_CLI\n\n# 수렴/사이클 검출용 상태\nPREV_FINDINGS=\"\"\nHISTORY_FILE=$(mktemp); trap 'rm -f \"$HISTORY_FILE\"' EXIT\n\nfor i in $(seq 1 \"$MAX_ITER\"); do\n echo\n echo \"${B}╔═══ Iteration $i/$MAX_ITER ═══╗${N}\"\n echo\n\n # 1. verify.sh 실행, Stage 4만 추출\n OUT=$(\"$VERIFY\" \"$FILE\" 2>&1)\n\n # 2. Stage 4 PASS면 종료\n if echo \"$OUT\" | grep -q \"Stage 4 PASS\"; then\n echo \"${G}✅ 수렴 — iteration $i 에서 Stage 4 PASS${N}\"\n exit 0\n fi\n\n # 3. Stage 4 발견 사항 추출 ([BLOCKING] 라벨만)\n FINDINGS=$(echo \"$OUT\" | awk '\n /\\[Stage 4\\]/ { in_s4=1; next }\n in_s4 && /━━━/ { exit }\n in_s4 && /\\[BLOCKING\\]/ { print }\n in_s4 && /^ - / { print }\n ')\n\n if [ -z \"$FINDINGS\" ]; then\n echo \"${Y}Stage 4 발견사항 없음 — 종료${N}\"\n exit 0\n fi\n\n echo \"${D}─── LLM 발견 사항 ───${N}\"\n echo \"$FINDINGS\"\n echo\n\n # 4. 수렴 검출: 이번 발견이 직전과 50% 이상 겹치면 STOP\n if [ -n \"$PREV_FINDINGS\" ]; then\n # 발견 텍스트 정규화 후 라인 단위로 비교\n PREV_NORM=$(echo \"$PREV_FINDINGS\" | sort -u)\n THIS_NORM=$(echo \"$FINDINGS\" | sort -u)\n OVERLAP=$(comm -12 \u003c(echo \"$PREV_NORM\") \u003c(echo \"$THIS_NORM\") | wc -l | tr -d ' ')\n TOTAL=$(echo \"$THIS_NORM\" | wc -l | tr -d ' ')\n if [ \"$TOTAL\" -gt 0 ] && [ \"$((OVERLAP * 2))\" -ge \"$TOTAL\" ]; then\n echo \"${Y}━━━ 수렴 검출: 직전과 ${OVERLAP}/${TOTAL} 동일 — 같은 자리 트집. 종료. ━━━${N}\"\n exit 0\n fi\n fi\n\n # 5. 사이클 검출: A→B 추천이 과거 B→A로 등장했으면 STOP\n THIS_PAIRS=$(echo \"$FINDINGS\" | grep -oE '\"[^\"]+\"[[:space:]]*→[[:space:]]*\"[^\"]+\"' || true)\n if [ -n \"$THIS_PAIRS\" ]; then\n while IFS= read -r pair; do\n [ -z \"$pair\" ] && continue\n from=$(echo \"$pair\" | sed -E 's/^\"([^\"]+)\".*/\\1/')\n to=$(echo \"$pair\" | sed -E 's/.*→[[:space:]]*\"([^\"]+)\".*/\\1/')\n # 역방향이 history에 있으면 사이클\n if grep -qF \"\\\"$to\\\" → \\\"$from\\\"\" \"$HISTORY_FILE\" 2>/dev/null; then\n echo \"${Y}━━━ 사이클 검출: '$from' ↔ '$to' 왔다갔다. 종료. ━━━${N}\"\n exit 0\n fi\n echo \"\\\"$from\\\" → \\\"$to\\\"\" >> \"$HISTORY_FILE\"\n done \u003c\u003c\u003c \"$THIS_PAIRS\"\n fi\n\n PREV_FINDINGS=\"$FINDINGS\"\n\n # 4. claude CLI에 수정 요청 (Edit 도구 허용)\n echo \"${D}─── 자동 수정 적용 ───${N}\"\n\n FIX_PROMPT=\"아래 한국어 슬라이드 HTML 파일에 어색한 표현이 발견되었습니다.\nLLM 리뷰의 [수정안]을 적용해주세요.\n\n[엄격한 원칙]\n- 발견 사항의 [수정안]만 적용. 다른 곳 건드리지 말 것.\n- 영어 약어/술어(verifier, AC, replay, fat-harness, ledger, run, auto, OS surface 등)는 의도적 용어. 보존.\n- HTML 구조, class, id, style은 그대로.\n- 슬라이드 의미·논리 보존.\n- 각 수정 후 1줄로만 보고 (예: 'slide 4 note: 살아있는 → 존재').\n\n[파일 경로]\n$FILE\n\n[LLM 리뷰 발견 사항]\n$FINDINGS\"\n\n case \"$LLM_CLI\" in\n claude)\n echo \"$FIX_PROMPT\" | claude --print --effort medium \\\n --allowed-tools \"Edit Read Grep\" \\\n --add-dir \"$(dirname \"$FILE\")\" 2>&1 | tail -20\n ;;\n codex)\n # Codex CLI: 파일 편집 권한으로 실행\n codex exec --skip-git-repo-check --cwd \"$(dirname \"$FILE\")\" \"$FIX_PROMPT\" 2>&1 | tail -20\n ;;\n gemini)\n # Gemini CLI: 파일 편집은 별도 설정 필요할 수 있음\n echo \"$FIX_PROMPT\" | gemini --non-interactive 2>&1 | tail -20\n ;;\n *)\n echo \"${R}지원하지 않는 LLM_CLI: $LLM_CLI${N}\"\n exit 1\n ;;\n esac\n\n echo\ndone\n\necho\necho \"${R}╔═══ Max iterations ($MAX_ITER) 도달 — 수렴 실패 ═══╗${N}\"\necho \"${D}수동 검토 필요${N}\"\nexit 1\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":4937,"content_sha256":"59e141752dd47e4d32b0b4392d86f2e9f8b89b3f2435fdac4dc4c56ec9165076"},{"filename":"verify.sh","content":"#!/usr/bin/env bash\n# slide-ko-verify — 한국어 슬라이드 번역체·구조 자동 검증\n# Stage 1 번역체 11시그널 lint (regex)\n# Stage 1.5 HTML 구조 lint (CSS / max-width)\n# Stage 2 브라우저 렌더링 안내 (수동)\n# Stage 3 입말 테스트 안내 (수동)\n#\n# usage: verify.sh \u003cslide-file.html|.md>\n# exit: 0=PASS, 1=WARN, 2=FAIL\n\nset -u\nexport LC_ALL=en_US.UTF-8\n\nFILE=\"${1:-}\"\nif [ -z \"$FILE\" ] || [ ! -f \"$FILE\" ]; then\n echo \"usage: $0 \u003cslide-file.html|.md>\"\n exit 64\nfi\n\n# 색상\nif [ -t 1 ]; then\n R=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[31m'; Y=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[33m'; G=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[32m'; B=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[34m'; D=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[2m'; N=

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…

\\033[0m'\nelse\n R=''; Y=''; G=''; B=''; D=''; N=''\nfi\n\necho \"${B}━━━ slide-ko-verify — $FILE ━━━${N}\"\n\n# ── Stage 1: 번역체 시그널 ──────────────────────────────\necho\necho \"${B}[Stage 1] 번역체 11시그널 lint${N}\"\n\nTMP=$(mktemp); trap 'rm -f \"$TMP\"' EXIT\n# HTML 태그·스크립트·스타일·주석·  제거 (정밀하진 않지만 충분)\nsed -E '\n s|\u003cscript[^>]*>.*\u003c/script>||g\n s|\u003cstyle[^>]*>.*\u003c/style>||g\n s|\u003c!--.*-->||g\n s|\u003c[^>]+>||g\n s| | |g\n' \"$FILE\" > \"$TMP\"\n\nSIGS=(\n \"① 대명사(그것 류)|그것(이|을|은|만|도|마저)\"\n \"② 피동 되어지다|되어지(다|는|었)\"\n \"③ 의 ~의 체인|의 [가-힣]+의[ ,]\"\n \"④ ~의 경우|의 경우(에|는| )\"\n \"⑤ ~에 대하여|에 (대해|대하여|대한 )\"\n \"⑥ ~하고 있는 중|하고 있는 중\"\n \"⑦ ~을 가지다(have)|(을|를) 가지(고 있|는 것|는 사람)\"\n \"⑧ ~로부터(from)|로부터\"\n \"⑨ ~을 통해(through)|(을|를) 통해\"\n \"⑩ ~에 있어(in)|에 있어[서 ]\"\n \"⑪ ~기 전에(before)|기 전에[ ,.]\"\n)\n\nTOTAL=0\nfor s in \"${SIGS[@]}\"; do\n L=\"${s%%|*}\"; P=\"${s#*|}\"\n C=$(grep -oE \"$P\" \"$TMP\" 2>/dev/null | wc -l | tr -d ' ')\n if [ \"$C\" -gt 0 ]; then\n echo \" ${Y}⚠${N} $L — ${C}회\"\n grep -nE \"$P\" \"$FILE\" 2>/dev/null | head -2 | sed \"s|^| ${D}line |; s|$|${N}|\"\n TOTAL=$((TOTAL+C))\n fi\ndone\n\nif [ \"$TOTAL\" -eq 0 ]; then\n echo \" ${G}✅ PASS — 시그널 0개${N}\"; S1=0\nelif [ \"$TOTAL\" -le 3 ]; then\n echo \" ${Y}⚠️ WARN — 시그널 ${TOTAL}개 (3개 이하)${N}\"; S1=1\nelse\n echo \" ${R}❌ FAIL — 시그널 ${TOTAL}개 (3개 초과)${N}\"; S1=2\nfi\n\n# ── Stage 1.5: HTML 구조 ──────────────────────────────\necho\necho \"${B}[Stage 1.5] HTML 구조 lint${N}\"\n\nS15=0\ncase \"$FILE\" in\n *.html|*.htm)\n if grep -qE 'word-break:\\s*keep-all' \"$FILE\"; then\n echo \" ${G}✓${N} word-break: keep-all\"\n else\n echo \" ${R}✗${N} word-break: keep-all 없음 (한국어 어절 보호 필수)\"\n S15=2\n fi\n if grep -qE 'text-wrap:\\s*(balance|pretty)' \"$FILE\"; then\n echo \" ${G}✓${N} text-wrap balance/pretty\"\n else\n echo \" ${Y}~${N} text-wrap 미적용 — 권장: balance (제목·짧은 본문)\"\n [ \"$S15\" -lt 1 ] && S15=1\n fi\n NARROW=$(grep -oE 'max-width:\\s*[12][0-9]ch|max-width:\\s*3[0-5]ch' \"$FILE\" | wc -l | tr -d ' ')\n if [ \"$NARROW\" -gt 0 ]; then\n echo \" ${Y}~${N} max-width ≤35ch ${NARROW}곳 — 자동 wrap 위험. \u003cbr /> 수동 박기 권장\"\n [ \"$S15\" -lt 1 ] && S15=1\n fi\n NB=$(grep -oE 'class=\"nb\"' \"$FILE\" | wc -l | tr -d ' ')\n echo \" ${D}(참고) \u003cspan class=\\\"nb\\\"> ${NB}곳 사용 — 인용구/고유명사 보호${N}\"\n\n # 검사용 임시 파일: CSS 주석(/* */)과 HTML 주석(\u003c!-- -->) 제거\n CLEAN=$(mktemp)\n trap 'rm -f \"$TMP\" \"$CLEAN\"' EXIT\n perl -0777 -pe 's|/\\*.*?\\*/||gs; s|\u003c!--.*?-->||gs' \"$FILE\" > \"$CLEAN\"\n\n # FAIL: 목적격 ~을/를 + \u003cbr /> = 목적어/서술어 분리 (Korean에서 절대 금지)\n BAD_OBJ=$(grep -nE '(을|를)[ ]*\u003cbr' \"$CLEAN\" 2>/dev/null)\n if [ -n \"$BAD_OBJ\" ]; then\n BAD_CNT=$(echo \"$BAD_OBJ\" | wc -l | tr -d ' ')\n echo \" ${R}✗ FAIL${N} ~을/를 + \u003cbr /> ${BAD_CNT}곳 — 목적어/서술어 분리\"\n echo \"$BAD_OBJ\" | head -3 | sed \"s|^| ${D}line |; s|$|${N}|\"\n S15=2\n fi\n\n # WARN: 주격/부사격 조사 + \u003cbr />. 은/는은 동사 어미(닫는, 본)와 헷갈리므로 제외.\n BAD_SUBJ=$(grep -nE '(이|가|와|과|에)[ ]*\u003cbr' \"$CLEAN\" 2>/dev/null)\n if [ -n \"$BAD_SUBJ\" ]; then\n BAD_CNT=$(echo \"$BAD_SUBJ\" | wc -l | tr -d ' ')\n echo \" ${Y}~ WARN${N} ~이/가/와/과/에 + \u003cbr /> ${BAD_CNT}곳 — 주어·부사어 분리\"\n echo \"$BAD_SUBJ\" | head -3 | sed \"s|^| ${D}line |; s|$|${N}|\"\n [ \"$S15\" -lt 1 ] && S15=1\n fi\n\n # FAIL: 동사 수식형(~하는/한/할/된/될) + \u003cbr /> + 한글 = modifier ↔ head noun 분리\n BAD_MOD=$(grep -nE '(하는|한|할|된|될|는|은)[ ]*\u003cbr[^>]*>[ ]*[가-힣]' \"$CLEAN\" 2>/dev/null)\n if [ -n \"$BAD_MOD\" ]; then\n BAD_CNT=$(echo \"$BAD_MOD\" | wc -l | tr -d ' ')\n echo \" ${R}✗ FAIL${N} 동사 수식형 + \u003cbr /> + 명사 ${BAD_CNT}곳 — 수식어/피수식어 분리\"\n echo \"$BAD_MOD\" | head -3 | sed \"s|^| ${D}line |; s|$|${N}|\"\n S15=2\n fi\n\n # WARN: 무거운 인용 부호 + 짧은 명사 + 콤마 패턴 (\"X\"는 Y, 형태)\n BAD_QUOTE=$(grep -nE '\"[가-힣]+\"는 [가-힣]{1,4},' \"$CLEAN\" 2>/dev/null)\n if [ -n \"$BAD_QUOTE\" ]; then\n BAD_CNT=$(echo \"$BAD_QUOTE\" | wc -l | tr -d ' ')\n echo \" ${Y}~ WARN${N} 무거운 인용+명사 단편 ${BAD_CNT}곳 — 슬라이드에 무겁고 어색 ('X'는 Y, 구조)\"\n echo \"$BAD_QUOTE\" | head -3 | sed \"s|^| ${D}line |; s|$|${N}|\"\n [ \"$S15\" -lt 1 ] && S15=1\n fi\n\n # WARN: 추상 은유 동사 — 영어 관용어(close/ship/kill 등) 직역 의심\n BAD_META=$(grep -nE '(닫는다|닫는|태운다|태우는|죽인다|죽이는|던진다|던지는) [가-힣]+(다|단계|작업|기능|모듈|트랙|페이즈)' \"$CLEAN\" 2>/dev/null)\n if [ -n \"$BAD_META\" ]; then\n BAD_CNT=$(echo \"$BAD_META\" | wc -l | tr -d ' ')\n echo \" ${Y}~ WARN${N} 추상 은유 동사 ${BAD_CNT}곳 — 영어 관용어(close/ship/kill) 직역 의심\"\n echo \"$BAD_META\" | head -3 | sed \"s|^| ${D}line |; s|$|${N}|\"\n [ \"$S15\" -lt 1 ] && S15=1\n fi\n ;;\n *.md|*.markdown)\n echo \" ${D}(MD — HTML 구조 검사 생략)${N}\"\n ;;\n *)\n echo \" ${D}(텍스트 — 구조 검사 생략)${N}\"\n ;;\nesac\n\n[ \"$S15\" -eq 0 ] && echo \" ${G}✅ PASS${N}\"\n[ \"$S15\" -eq 1 ] && echo \" ${Y}⚠️ WARN${N}\"\n[ \"$S15\" -eq 2 ] && echo \" ${R}❌ FAIL${N}\"\n\n# ── Stage 2: 시각 검증 안내 ──────────────────────────────\necho\necho \"${B}[Stage 2] 시각 검증 (수동)${N}\"\ncase \"$FILE\" in\n *.html|*.htm)\n ABS=$(cd \"$(dirname \"$FILE\")\" 2>/dev/null && pwd)/$(basename \"$FILE\")\n echo \" 열기: ${B}open '$ABS'${N}\"\n echo \" 스크린샷: ${B}npx playwright screenshot '$ABS' /tmp/slide.png --viewport-size=1280,720 --full-page${N}\"\n echo \" ${D}체크: 의미 단위로 줄바꿈이 떨어지는지${N}\"\n ;;\n *)\n echo \" ${D}(HTML 아님)${N}\"\n ;;\nesac\n\n# ── Stage 3: 입말 테스트 안내 ────────────────────────────\necho\necho \"${B}[Stage 3] 입말 테스트 (사람)${N}\"\necho \" 슬라이드 본문을 ${G}소리 내서${N} 읽으세요.\"\necho \" ${D}혀가 꼬이거나 호흡이 끊기면 그 문장 재작업${N}\"\n\n# ── Stage 4: LLM Fresh Review (Claude / Codex / Gemini CLI) ──────────────\necho\necho \"${B}[Stage 4] LLM Fresh Review${N}\"\necho \"${D}-----------------------------------${N}\"\n\n# LLM CLI 자동 감지 — claude → codex → gemini 순. env LLM_CLI=claude|codex|gemini 로 override 가능.\nLLM_CLI=\"${LLM_CLI:-}\"\nif [ -z \"$LLM_CLI\" ]; then\n if command -v claude >/dev/null 2>&1; then\n LLM_CLI=\"claude\"\n elif command -v codex >/dev/null 2>&1; then\n LLM_CLI=\"codex\"\n elif command -v gemini >/dev/null 2>&1; then\n LLM_CLI=\"gemini\"\n fi\nfi\n\nif [ -n \"$LLM_CLI\" ]; then\n # 슬라이드 텍스트 추출 — 인라인 태그는 공백 없이 제거, 블록 태그는 줄바꿈으로\n # 주의: s 연산자 delimiter는 # 사용 (alternation의 | 와 충돌 방지)\n SLIDE_TEXT=$(perl -0777 -pe '\n s#\u003cscript[^>]*>.*?\u003c/script>##gs;\n s#\u003cstyle[^>]*>.*?\u003c/style>##gs;\n s#\u003c!--.*?-->##gs;\n s#\u003c/?(span|strong|em|b|i|code|a)[^>]*>##g;\n s#\u003cbr\\s*/?>#\\n#g;\n s#\u003c/?(p|div|li|h[1-6]|section|main|article)[^>]*>#\\n#g;\n s#\u003c[^>]+>##g;\n s# # #g;\n s#&#\\&#g;\n s#^[ \\t]+##gm;\n s#[ \\t]+$##gm;\n s#\\n{2,}#\\n#g;\n s#[ \\t]+# #g;\n ' \"$FILE\")\n\n PROMPT=\"당신은 엄격한 한국어 카피라이터입니다. 이 슬라이드는 이미 여러 번 다듬어진 상태일 수 있습니다.\n**기본 응답은 PASS입니다.** 명백한 영어 직역체만 [BLOCKING]으로 보고하세요.\n\n[절대 지적하지 말 것]\n- 단어 선택 취향 ('X도 자연스럽지만 Y가 낫다' 류)\n- 동의어 추천 / 어순 미세 조정 / 띄어쓰기 / 오타\n- 슬라이드 명사구 enumeration ('A, B, C.')\n- 영어 약어 (verifier, AC, replay, fat-harness, ledger, run, auto, OS surface 등)\n- 직전 iteration에서 적용했을 만한 수정의 역방향\n\n[BLOCKING으로 보고할 것 — 이게 있을 때만]\n- 영어 전치사 직역체 ('X를 통해 Y를 한다' 류)\n- 이중 피동 ('~되어진다')\n- 영어 대명사 + be동사 직역 ('그것은 ~이다')\n- 영어 관용어 그대로 직역 (close/ship/kill/live → 닫다/태우다/죽이다/살아있다 식)\n- 한국어 화자가 명백히 '이건 번역이네' 라고 단언할 표현\n\n[리포트 형식]\n- BLOCKING 있을 때만:\n [BLOCKING] \\\"문제 텍스트\\\" → \\\"수정안\\\" (한 줄 이유)\n- BLOCKING 없으면 'PASS — 자연스러움' 한 줄만 출력. 끝.\n\n의심스러우면 무조건 PASS. 취향 차이는 BLOCKING 아닙니다.\n\n[슬라이드 텍스트]\n${SLIDE_TEXT}\"\n\n echo \" ${D}LLM CLI 호출 중 ($LLM_CLI, ~10초)...${N}\"\n case \"$LLM_CLI\" in\n claude)\n # Anthropic Claude Code CLI\n REVIEW=$(claude --print --effort low \"$PROMPT\" 2>&1 | tail -80)\n ;;\n codex)\n # OpenAI Codex CLI — non-interactive exec mode\n REVIEW=$(codex exec --skip-git-repo-check \"$PROMPT\" 2>&1 | tail -80)\n ;;\n gemini)\n # Google Gemini CLI — non-interactive\n REVIEW=$(echo \"$PROMPT\" | gemini --non-interactive 2>&1 | tail -80)\n ;;\n *)\n REVIEW=\"(지원하지 않는 LLM_CLI: $LLM_CLI)\"\n ;;\n esac\n\n if [ -n \"$REVIEW\" ]; then\n echo \"$REVIEW\" | sed \"s|^| |\"\n if echo \"$REVIEW\" | grep -qE \"^[ ]*PASS\"; then\n echo\n echo \" ${G}✅ Stage 4 PASS${N}\"\n else\n echo\n echo \" ${Y}⚠️ Stage 4 — LLM이 검토 항목 발견${N}\"\n [ \"$S15\" -lt 1 ] && S15=1\n fi\n else\n echo \" ${R}✗ $LLM_CLI 응답 없음${N}\"\n fi\nelse\n echo \" ${D}LLM CLI 없음 (claude/codex/gemini 중 하나 설치) — Stage 4 건너뜀${N}\"\nfi\n\n# ── 종합 판정 ──────────────────────────────────────────\necho\nif [ \"$S1\" -eq 0 ] && [ \"$S15\" -eq 0 ]; then\n echo \"${G}━━━ 종합: PASS — Stage 2/3 사람이 확인 ━━━${N}\"\n exit 0\nelif [ \"$S1\" -lt 2 ] && [ \"$S15\" -lt 2 ]; then\n echo \"${Y}━━━ 종합: WARN — 점검 권장 ━━━${N}\"\n exit 1\nelse\n echo \"${R}━━━ 종합: FAIL — 재작업 필요 ━━━${N}\"\n exit 2\nfi\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":11482,"content_sha256":"646463e34c7391f0352cef000a77b473baa1616ca3eeda41abf445ab5bd902cb"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Slide KO Polish","type":"text"}]},{"type":"paragraph","content":[{"text":"영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다.","type":"text"}]},{"type":"paragraph","content":[{"text":"Resolve bundled scripts relative to this skill directory:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"verify.sh","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"polish-loop.sh","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"Source: ","type":"text"},{"text":"https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish","type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish","title":null}}]}]},{"type":"paragraph","content":[{"text":"License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in ","type":"text"},{"text":"LICENSE","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"When to Use","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"슬라이드 한국어가 \"번역체\"로 어색할 때","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Don't use for:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"한국어로 원문이 쓰인 자료 (다른 종류의 문제)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"기술 문서/API 레퍼런스 (문장보다 정확성이 우선)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Core Diagnosis — 어색함의 3대 원인","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"명사 술어 남발","type":"text","marks":[{"type":"strong"}]},{"text":" — \"X는 Y입니다\" 구조 반복 → 한국어는 동사 중심 언어","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"~의 / ~을\" 체인","type":"text","marks":[{"type":"strong"}]},{"text":" — 한자어 명사가 조사로 줄줄이 → 무겁고 끊김","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"CJK 줄바꿈 기본값","type":"text","marks":[{"type":"strong"}]},{"text":" — ","type":"text"},{"text":"word-break: normal","type":"text","marks":[{"type":"code_inline"}]},{"text":"이 한글을 글자 단위로 끊음","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"번역체 12대 시그널 — 보이면 즉시 의심","type":"text"}]},{"type":"paragraph","content":[{"text":"출처: 한빛+ \"흔한 번역투 TOP 12\", 국립국어원 \"영한 번역 번역투 문장\", 우리말 박예진 기자.","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"시그널","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"영어/일본어 원형","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"자연어","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"① ","type":"text"},{"text":"대명사 남발","type":"text","marks":[{"type":"strong"}]},{"text":" (\"그것\", \"그\", \"그 말\")","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"it, this, that","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"생략 또는 명사 반복","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"② ","type":"text"},{"text":"피동 남용","type":"text","marks":[{"type":"strong"}]},{"text":" (\"~되어지다\", \"위치한다\")","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"passive","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"능동","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"③ ","type":"text"},{"text":"\"~의\" 남발","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"of, の","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"띄어쓰기 또는 생략","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"④ ","type":"text"},{"text":"\"~의 경우\"","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"in case of","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"생략","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"⑤ ","type":"text"},{"text":"\"~에 대하여\"","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"about","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"생략하거나 풀어쓰기","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"⑥ ","type":"text"},{"text":"\"~하고 있는 중\"","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"be -ing","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"단순 현재형","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"⑦ ","type":"text"},{"text":"\"~을 가지다\"","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"have","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"있다\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"⑧ ","type":"text"},{"text":"\"~로부터\"","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"from","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"에게서\", \"에서\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"⑨ ","type":"text"},{"text":"\"~을 통해\"","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"through","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"써서\", \"이용해\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"⑩ ","type":"text"},{"text":"\"~에 있어\"","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"in / for","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"생략","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"⑪ ","type":"text"},{"text":"\"~기 전에\"","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"before -ing","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"~지 말고\" / \"~이 아니라\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"⑫ ","type":"text"},{"text":"무정물 주어","type":"text","marks":[{"type":"strong"}]},{"text":" (\"시스템은 ~한다\")","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"inanimate subject","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"사람 주어 또는 명령형","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"부가 원칙","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"명사를 술어로 풀어라","type":"text","marks":[{"type":"strong"}]},{"text":" — 한자어 명사+합니다 대신 동사로 마치기","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"~의 / ~을\" 체인 끊기","type":"text","marks":[{"type":"strong"}]},{"text":" — 한 문장에 부사구 3개 이상이면 무조건 쪼개기","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"영어 술어(verifier, AC, replay)는 그대로","type":"text","marks":[{"type":"strong"}]},{"text":" — 조사·어순으로 한국어화","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"슬라이드는 입말","type":"text","marks":[{"type":"strong"}]},{"text":" — 소리 내서 읽었을 때 자연스러우면 OK","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"추상 은유 금지","type":"text","marks":[{"type":"strong"}]},{"text":" — 영어 관용어(","type":"text"},{"text":"close","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"ship","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"land","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"kill","type":"text","marks":[{"type":"code_inline"}]},{"text":")를 직역하면 한국어에서 뭘 하는지 모호해짐. 구체 동사로 바꿔라.","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"❌ ","type":"text"},{"text":"Phase 1을 **닫는다**","type":"text","marks":[{"type":"code_inline"}]},{"text":" (영어 close 직역 → 뭘 닫나?)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ ","type":"text"},{"text":"Phase 1을 **완성한다**","type":"text","marks":[{"type":"code_inline"}]},{"text":" (구체)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"❌ ","type":"text"},{"text":"이번 분기에 기능을 **태운다**","type":"text","marks":[{"type":"code_inline"}]},{"text":" (ship 직역)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ ","type":"text"},{"text":"이번 분기에 기능을 **출시한다** / **내보낸다**","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"❌ ","type":"text"},{"text":"버그를 **죽인다**","type":"text","marks":[{"type":"code_inline"}]},{"text":" (kill 직역)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ ","type":"text"},{"text":"버그를 **잡는다** / **고친다**","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"판별 단일 기준","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"소리 내서 읽었을 때 어색하면 번역체.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"+ 위 12대 시그널 중 하나라도 보이면 어색 확정.","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"CSS는 안전망일 뿐 — 줄바꿈은 수동 제어가 정답","type":"text"}]},{"type":"paragraph","content":[{"text":"핵심 깨달음:","type":"text","marks":[{"type":"strong"}]},{"text":" CSS는 \"어절을 안 끊는다\"까지만 보장한다. ","type":"text"},{"text":"어디서 끊을지는 브라우저가 모른다.","type":"text","marks":[{"type":"strong"}]},{"text":" 한국어 슬라이드는 의미 단위로 ","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":"를 직접 박아야 한다.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"CSS 안전망 (필수, 기본 깔기)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"css"},"content":[{"text":"body, .slide * {\n word-break: keep-all; /* 어절 단위 — 자동 wrap 안전망 */\n overflow-wrap: break-word;\n line-break: strict;\n}\n/* 제목·짧은 본문은 balance — 마지막 줄에 단어 하나만 남는 것 방지 */\nh1, .lede, .subtitle, .note { text-wrap: balance; }\n/* 끊기면 안 되는 표현은 명시적으로 보호 */\n.nb { white-space: nowrap; }","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"수동 제어 도구 3종","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — 의미 단위 줄바꿈 (가장 많이 씀)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\u003cspan class=\"nb\">…\u003c/span>","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — 절대 끊기면 안 되는 표현 (인용구, 고유명사, 흐름 끊는 영어 술어 등)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"max-width","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 넉넉히 (","type":"text","marks":[{"type":"strong"}]},{"text":"52ch","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 정도)","type":"text","marks":[{"type":"strong"}]},{"text":" — 자동 wrap 트리거를 최소화. 줄바꿈은 ","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":"로만 일어나게.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"⛔ ","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":" 금지 지점 — 의미 단위 깨짐","type":"text"}]},{"type":"paragraph","content":[{"text":"조사 바로 다음에 ","type":"text","marks":[{"type":"strong"}]},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 박지 말 것.","type":"text","marks":[{"type":"strong"}]},{"text":" 한국어는 조사 + 서술어가 한 묶음(문법 단위).","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"금지 패턴","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"심각도","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"왜 안 되는가","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~을/를\u003cbr />","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"FAIL","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"목적어 ↔ 서술어 분리 (한국어는 항상 묶음)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~하는/한/할/된/될\u003cbr />명사","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"FAIL","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"수식어(relative clause) ↔ 피수식 명사(head) 분리. 예: ","type":"text"},{"text":"Phase 1을 완성하는\u003cbr />세 트랙","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~이/가\u003cbr />","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"WARN","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"주어 ↔ 서술어 분리","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~과/와\u003cbr />","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"WARN","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"명사 나열 끊김","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~에\u003cbr />","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"WARN","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"부사구 ↔ 서술어 분리","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"주의 — ","type":"text","marks":[{"type":"strong"}]},{"text":"~은/는\u003cbr />","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"는 자동 검출 안 함.","type":"text","marks":[{"type":"strong"}]},{"text":" 이유: 한국어에서 ","type":"text"},{"text":"는/은","type":"text","marks":[{"type":"code_inline"}]},{"text":"은 주격 조사일 수도 있고 ","type":"text"},{"text":"동사 활용 어미","type":"text","marks":[{"type":"strong"}]},{"text":"일 수도 있어서 regex로 구분 불가. 예:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"❌ ","type":"text"},{"text":"말은\u003cbr />증거가 아니다","type":"text","marks":[{"type":"code_inline"}]},{"text":" (말 + 은 = 주격 조사 → 어색)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ ","type":"text"},{"text":"Phase 1을 닫는\u003cbr />세 트랙","type":"text","marks":[{"type":"code_inline"}]},{"text":" (닫 + 는 = 동사 어미 → 자연스러움)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"사람이 직접 점검: ","type":"text"},{"text":"은/는\u003cbr />","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 발견 시 앞 단어가 명사면 어색, 동사 어간이면 OK.","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"예시:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"❌ ","type":"text"},{"text":"AgentOS는 실행 증거와 verifier 판정, replay 기록을 \u003cbr />따로따로 다룹니다.","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ ","type":"text"},{"text":"AgentOS는 셋을 따로 다룹니다 — \u003cbr />실행 증거, verifier 판정, replay 기록.","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"❌ ","type":"text"},{"text":"AgentOS의 첫 단계가 \u003cbr />자리를 잡았습니다.","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ ","type":"text"},{"text":"AgentOS의 첫 단계가 자리를 잡았습니다.","type":"text","marks":[{"type":"code_inline"}]},{"text":" (한 줄로)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"✅ ","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":" OK 지점","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"문장 종결 후","type":"text","marks":[{"type":"strong"}]},{"text":" (","type":"text"},{"text":". \u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"! \u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"? \u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"쉼표 다음","type":"text","marks":[{"type":"strong"}]},{"text":" (","type":"text"},{"text":", \u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"대시(—) 사용","type":"text","marks":[{"type":"strong"}]},{"text":" — ","type":"text"},{"text":"X — \u003cbr />Y","type":"text","marks":[{"type":"code_inline"}]},{"text":" 형태로 자연스러운 단절","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"접속사 앞","type":"text","marks":[{"type":"strong"}]},{"text":" (","type":"text"},{"text":"\u003cbr />하지만","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"\u003cbr />그래서","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"자동 검출: ","type":"text"},{"text":"verify.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" Stage 1.5가 조사+","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":" 패턴을 잡아냄.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"안 좋은 자동 wrap 예시","type":"text"}]},{"type":"paragraph","content":[{"text":"원문: \"하지만 시스템은 그 말을 믿기 전에, 증거부터 따로 들여다봐야 합니다.\"","type":"text"}]},{"type":"paragraph","content":[{"text":"❌ ","type":"text"},{"text":"max-width: 38ch","type":"text","marks":[{"type":"code_inline"}]},{"text":"만 두면 브라우저가:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"하지만 시스템은 그 말을\n믿기 전에, 증거부터 따로\n들여다봐야 합니다.","type":"text"}]},{"type":"paragraph","content":[{"text":"\"믿기 전에\"가 \"그 말을\"이랑 떨어져서 의미 끊김.","type":"text"}]},{"type":"paragraph","content":[{"text":"✅ 수동 ","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":" 박으면:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"하지만 시스템은 그 말을 믿기 전에,\n증거부터 따로 들여다봐야 합니다.","type":"text"}]},{"type":"paragraph","content":[{"text":"의미 단위(절) 유지.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Mandatory Workflow — 4단계 (검증 게이트 포함)","type":"text"}]},{"type":"paragraph","content":[{"text":"중요:","type":"text","marks":[{"type":"strong"}]},{"text":" 다듬기와 검증은 분리하지 말 것. polish → verify가 한 동작.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 1 — 추출","type":"text"}]},{"type":"paragraph","content":[{"text":"WebFetch","type":"text","marks":[{"type":"code_inline"}]},{"text":" 또는 직접 읽어 슬라이드별 원문(제목/본문/불릿)을 텍스트로 정리","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 2 — 교정","type":"text"}]},{"type":"paragraph","content":[{"text":"번역체 11시그널 표 적용. 슬라이드별 Before/After.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 3 — CSS 패치 (HTML인 경우)","type":"text"}]},{"type":"paragraph","content":[{"text":"word-break: keep-all","type":"text","marks":[{"type":"code_inline"}]},{"text":" + ","type":"text"},{"text":"text-wrap: balance","type":"text","marks":[{"type":"code_inline"}]},{"text":" + ","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":" 수동 줄바꿈 + ","type":"text"},{"text":"\u003cspan class=\"nb\">","type":"text","marks":[{"type":"code_inline"}]},{"text":" 보호","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 4 — 자동 검증 (MANDATORY)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"verify.sh \u003cslide-file.html|.md>","type":"text"}]},{"type":"paragraph","content":[{"text":"스크립트가 자동으로 돌리는 검사:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Stage 1","type":"text","marks":[{"type":"strong"}]},{"text":" — 번역체 11시그널 regex 스캔 (line 번호 출력)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Stage 1.5","type":"text","marks":[{"type":"strong"}]},{"text":" — HTML 구조 (CSS, max-width, 조사+","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":", 수식어+","type":"text"},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"}]},{"text":"+명사, 무거운 인용, 추상 은유 동사)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Stage 2","type":"text","marks":[{"type":"strong"}]},{"text":" — 시각 검증 명령어 출력 (수동 확인)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Stage 3","type":"text","marks":[{"type":"strong"}]},{"text":" — 입말 테스트 안내 (수동 확인)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Stage 4","type":"text","marks":[{"type":"strong"}]},{"text":" — ","type":"text"},{"text":"LLM Fresh Review","type":"text","marks":[{"type":"strong"}]},{"text":" (Claude CLI 호출) — 영어 직역 은유·어색한 표현·제목-본문 호응을 fresh context로 검토. regex로 못 잡는 어색함을 잡아냄.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Exit code:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"0","type":"text","marks":[{"type":"code_inline"}]},{"text":" PASS — Stage 1/1.5 시그널 0개 + Stage 4 PASS","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"1","type":"text","marks":[{"type":"code_inline"}]},{"text":" WARN — Stage 1.5 권장 사항 있음 또는 Stage 4가 검토 항목 발견","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"2","type":"text","marks":[{"type":"code_inline"}]},{"text":" FAIL — Stage 1에서 시그널 4개 이상, Stage 1.5 FAIL 패턴 발견, 또는 word-break 누락","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"FAIL이 나오면 무조건 재작업. PASS/WARN이 나와도 Stage 2/3은 사람이 직접 확인.","type":"text","marks":[{"type":"strong"}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Stage 4 Prompt (참고)","type":"text"}]},{"type":"paragraph","content":[{"text":"verify.sh의 Stage 4는 다음 5가지 항목으로 LLM 평가:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"무거운 인용 부호 + 명사구 단편","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"추상 은유 직역 (닫는다/태우다/죽이다/살아있다 같은 영어 close/ship/kill 직역)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"영어 어순 직역","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"제목과 본문 메시지 불일치","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"한국어 화자가 보기에 명백히 어색한 표현","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"영어 약어(verifier, AC, replay 등)는 의도적 용어로 보호. 명사구 enumeration은 슬라이드 정상 패턴으로 인정.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Quick Reference — 자주 등장하는 패턴","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"번역체 (Before)","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"자연스러움 (After)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"X는 Y입니다\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"X는 Y\" (체언 종결) 또는 \"X가 Y한다\" (동사화)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"~을 분리합니다\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"~을 따로따로 다룹니다\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"기준선을 만들었습니다\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"자리를 잡았습니다\" / \"토대를 다졌습니다\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"방식의 한계\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"이렇게 해서는 안 되는 이유\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"내부 상태입니다\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"안에서만 살아있는 상태입니다\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"타입화된 증거\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"타입이 박힌 증거\" / \"구조화된 증거\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"재시작 시 의도 손실\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"재시작하면 사라지는 의도\"","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Common Mistakes","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"word-break: keep-all","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"만 믿고 자동 wrap에 맡기기","type":"text","marks":[{"type":"strong"}]},{"text":" → 어절은 유지되지만 의미 단위는 안 지켜져서 여전히 어색. ","type":"text"},{"text":"수동 ","type":"text","marks":[{"type":"strong"}]},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 박아야 함","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"text-wrap: pretty","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 신뢰","type":"text","marks":[{"type":"strong"}]},{"text":" → \"한 단어만 다음 줄로 가는 것\"은 막아주지만 의미 단위 끊김은 못 잡음. 슬라이드엔 ","type":"text"},{"text":"balance","type":"text","marks":[{"type":"code_inline"}]},{"text":"가 더 안전","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"영어 술어까지 번역하기","type":"text","marks":[{"type":"strong"}]},{"text":" → ","type":"text"},{"text":"verifier","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"replay","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"AC","type":"text","marks":[{"type":"code_inline"}]},{"text":" 같은 굳어진 용어는 그대로","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"한 슬라이드에 4개 이상 불릿","type":"text","marks":[{"type":"strong"}]},{"text":" → 호흡 못 맞춤. 3개 이하로 자르거나 슬라이드 분리","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"CSS만 고치고 텍스트는 그대로","type":"text","marks":[{"type":"strong"}]},{"text":" → 줄바꿈은 좋아지지만 번역체는 그대로 남음","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"텍스트만 고치고 줄바꿈은 자동에 맡기기","type":"text","marks":[{"type":"strong"}]},{"text":" → 좋은 문장이 엉뚱한 데서 끊겨서 안 살음","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"세 가지(CSS 안전망 + 자연스러운 문장 + 수동 ","type":"text","marks":[{"type":"strong"}]},{"text":"\u003cbr />","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":")를 다 잡아야 효과","type":"text","marks":[{"type":"strong"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Real-World Pattern","type":"text"}]},{"type":"paragraph","content":[{"text":"발표자에게 추천할 만한 작업 순서:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"영어로 먼저 쓰지 말고, 슬라이드별 핵심을 ","type":"text"},{"text":"한국어로 입으로 말해본 뒤 받아쓰기","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"그래도 안 되면 본 스킬로 사후 교정","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"번역의 흔적이 원천적으로 안 생기는 게 최선이고, 본 스킬은 차선.","type":"text"}]}]},"metadata":{"date":"2026-06-05","name":"slide-ko-polish","author":"@skillopedia","source":{"stars":4,"repo_name":"skills-store","origin_url":"https://github.com/mineru98/skills-store/blob/HEAD/.codex/skills/slide-ko-polish/SKILL.md","repo_owner":"mineru98","body_sha256":"5baaed55039028b26633e67f6ab4c007407e574e435a560026684959ae06a43f","cluster_key":"303175b4481ee01ce150e85026a54167c0db9f1ab994ecfdb38c04cad413a7ce","clean_bundle":{"format":"clean-skill-bundle-v1","source":"mineru98/skills-store/.codex/skills/slide-ko-polish/SKILL.md","attachments":[{"id":"322d4bca-b450-548f-b784-c2f23bb85076","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/322d4bca-b450-548f-b784-c2f23bb85076/attachment.sh","path":"polish-loop.sh","size":4937,"sha256":"59e141752dd47e4d32b0b4392d86f2e9f8b89b3f2435fdac4dc4c56ec9165076","contentType":"application/x-sh; charset=utf-8"},{"id":"4565c315-9695-5a8a-bfef-ffcb8b8b9206","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4565c315-9695-5a8a-bfef-ffcb8b8b9206/attachment.sh","path":"verify.sh","size":11482,"sha256":"646463e34c7391f0352cef000a77b473baa1616ca3eeda41abf445ab5bd902cb","contentType":"application/x-sh; charset=utf-8"}],"bundle_sha256":"6d1e8b14c90cb446509cecf496242f31241cd0be4bd7c70033c708e9932898d8","attachment_count":2,"text_attachments":0,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":2,"excluded_attachments":[]},"cluster_size":2,"skill_md_path":".codex/skills/slide-ko-polish/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"documents-office","category_label":"Documents"},"exact_dupes_collapsed_into_this":1},"version":"v1","category":"documents-office","import_tag":"clean-skills-v1","description":"Use when reviewing or rewriting Korean presentation slides translated from English — fixes translationese (\"X는 Y입니다\" 남발, 한자어 명사 체인, \"~의 ~을\" 줄잇기), CJK line-break issues (어절이 중간에 끊김), and noun-heavy 발표체. Triggers on \"발표자료 다듬어\", \"한국어 어색\", \"번역체\", \"줄바꿈 이상해\", \"슬라이드 자연스럽게\", \"$slide-ko-polish\"."}},"renderedAt":1782988585286}

Slide KO Polish 영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다. Resolve bundled scripts relative to this skill directory: - - Source: <https://github.com/hackertaco/skill-forge/tree/main/slide-ko-polish License: MIT License, Copyright (c) 2026 hackertaco. The full upstream license text is included in . When to Use - 슬라이드 한국어가 "번역체"로 어색할 때 - 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때 - 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때 Don't use for: - 한국어로 원문이 쓰인 자료 (다른 종류의 문제) - 기술 문서/API 레퍼런스 (문장보다 정확성이 우선) Core Diagnosis — 어색함의 3대 원인 1. 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심…