$npx -y skills add tobyilee/book-writer --skill book-editingIntegrate all finished chapters into a single book-ready manuscript — polish chapter transitions, unify terminology, insert cross-chapter callbacks, and write front/back matter (preface, epilogue, references). Produce a manuscript + book_manifest.json for EPUB build. Use when cha
| 1 | # Book Editing |
| 2 | |
| 3 | 완성된 챕터들을 **한 권의 책**으로 직조한다. 내용을 새로 쓰지 않고, 흐름과 일관성만 다듬는다. |
| 4 | |
| 5 | ## 절차 |
| 6 | |
| 7 | 1. **확인** — 모든 `{NN}_final.md` 존재 여부 |
| 8 | 2. **순회 읽기** — 1장부터 마지막까지 순서대로 |
| 9 | 3. **전환부 점검** — 각 챕터 끝 단락과 다음 챕터 시작 단락의 연결 품질 |
| 10 | 4. **용어 통일** — 불일치 발견 시 한쪽으로 정렬 (기준은 `02_plan.md`의 용어 표기를 따름) |
| 11 | 5. **콜백 삽입** — 뒤 챕터가 앞 개념을 언급할 때 자연스러운 참조 추가 |
| 12 | 6. **부속 자료 작성** — 서문, 에필로그, 참고문헌, (선택) 용어집. 장르에 맞춘다: narrative=작가의 말/헌사(참고문헌 보통 생략), practical="이 책 활용법"+준비물 총정리, essay=짧은 머리말, tech-book=현행 그대로 |
| 13 | 7. **통합** — `04_manuscript.md`로 합본 저장 |
| 14 | 8. **분량 균형 점검** — 챕터별 분량 편차 확인 (아래 "분량 균형 점검" 절차) |
| 15 | 9. **매니페스트 생성** — `book_manifest.json` 작성 |
| 16 | 10. **스타일 점검 요청** — `style-guardian`에게 통합 원고 전체 변주 점검(책 단위 whole-book 점검)을 **반드시** 요청한다. 이 단계는 생략하지 않는다 — 최종 확정 전 책 전체의 문장·오프닝 변주가 한 번 더 검수되어야 한다 |
| 17 | |
| 18 | ## 전환부 체크 |
| 19 | |
| 20 | - 끝-시작 연결이 갑작스럽지 않은가? |
| 21 | - 다음 장 예고가 너무 길거나 짧지 않은가? |
| 22 | - 같은 표현("다음 장에서는 ~를 살펴보자")이 모든 챕터 말미에 반복되는가? |
| 23 | |
| 24 | ## 용어 통일 원칙 |
| 25 | |
| 26 | - 한 용어의 여러 표기(영문/한글, 축약/풀)가 있으면 **가장 많이 쓰인 표기** 기준 |
| 27 | - 예외: 장르가 기술서면 "사용자"보다 "유저"가 자연스러울 때도 있음 — 문맥 우선 |
| 28 | - 결정 불가능 → 서문에 "이 책에서는 {A}를 {B}로 표기한다" 정의 |
| 29 | |
| 30 | ## 서문 작성 지침 |
| 31 | |
| 32 | - 왜 이 책을 썼는가 (문제의식) |
| 33 | - 이 책을 누가 읽으면 좋은가 (대상 독자) |
| 34 | - 어떻게 읽으면 좋은가 (순서·선택 독서 가이드) |
| 35 | - 감사의 말 (선택) |
| 36 | - 길이: 2~4페이지 분량 |
| 37 | |
| 38 | ## 에필로그 작성 지침 |
| 39 | |
| 40 | - 여정을 짧게 돌아봄 |
| 41 | - 책이 답하지 못한 질문들 |
| 42 | - 다음 걸음에 대한 제안 (추천 도서·실천 과제) |
| 43 | - 길이: 1~2페이지 |
| 44 | |
| 45 | ## 참고문헌 |
| 46 | |
| 47 | - 챕터 각주를 모아 단일 목록으로 재정렬 |
| 48 | - 중복 제거 |
| 49 | - 정렬: 인용 순서 or 저자 가나다순 (한 방식 고수) |
| 50 | - 형식 통일: `저자. 제목. 발행처/URL, 날짜.` |
| 51 | |
| 52 | ## 분량 균형 점검 |
| 53 | |
| 54 | 챕터 간 분량 편차가 크면 독서 리듬이 무너진다. 통합 후 다음을 점검한다. |
| 55 | |
| 56 | 1. **코드 제거 후 글자 수 계산** — 챕터별로 코드 블록(```` ``` ````로 둘러싸인 영역)을 제외한 본문 글자 수를 센다 |
| 57 | 2. **편차 플래그** — 중앙값(median) 대비 **70% 미만**이거나 **150% 초과**인 챕터를 표시한다. (`02_plan.md`에 챕터별 "예상 분량"이 있으면 그 값 대비 ±20%를 함께 기준으로 쓴다) |
| 58 | 3. **오프닝 챕터 가드** — **1장(훅 챕터)이 중앙값 아래로 떨어지지 않게** 특별히 살핀다. 첫 장이 빈약하면 책의 첫인상이 죽는다 |
| 59 | 4. **리포트 작성** — `{slug}/length_report.md`에 챕터별 글자 수·중앙값·플래그를 기록한다 |
| 60 | 5. **조치 요청** — 플래그된 챕터는 해당 `chapter-writer`에게 표적 확장/축약을 요청하거나, 정당한 사유(예: 의도적으로 짧은 막간 장)가 있으면 `length_report.md`에 예외로 명시한다 |
| 61 | |
| 62 | `length_report.md` 예시: |
| 63 | |
| 64 | ```markdown |
| 65 | # 분량 균형 리포트 |
| 66 | |
| 67 | | 장 | 코드 제외 글자 수 | 중앙값 대비 | 예상 분량 대비 | 판정 | |
| 68 | |----|------------------|------------|---------------|------| |
| 69 | | 1장 | 8,200 | 96% | -4% | OK (훅 챕터, 중앙값 이상 확인) | |
| 70 | | 2장 | 5,100 | 60% | -35% | ⚠️ 축소됨 — 확장 요청 | |
| 71 | | 3장 | 13,400 | 158% | +30% | ⚠️ 비대 — 축약 또는 분할 검토 | |
| 72 | |
| 73 | 중앙값: 8,500자 |
| 74 | 조치: 2장 확장 요청, 3장 축약 요청. |
| 75 | ``` |
| 76 | |
| 77 | ## 출력 형식 |
| 78 | |
| 79 | `04_manuscript.md`: |
| 80 | |
| 81 | ```markdown |
| 82 | # {책 제목} |
| 83 | |
| 84 | ## 저자 |
| 85 | {author} |
| 86 | |
| 87 | **판본:** v{version} · {pub_date} |
| 88 | |
| 89 | --- |
| 90 | |
| 91 | ## 판권 |
| 92 | |
| 93 | **{책 제목}** |
| 94 | **판본:** v{version} |
| 95 | **발행일:** {pub_date} |
| 96 | **저자:** {author} |
| 97 | **식별자:** {identifier} |
| 98 | |
| 99 | ### 라이선스 |
| 100 | |
| 101 | 이 책은 [Creative Commons BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) 라이선스로 배포된다. |
| 102 | |
| 103 | - **저작자 표시(BY):** 출처를 밝힐 것. |
| 104 | - **비상업적 이용(NC):** 상업적 목적으로 이용할 수 없다. |
| 105 | - **동일조건 변경허락(SA):** 변경·재배포 시 동일한 라이선스를 적용해야 한다. |
| 106 | |
| 107 | 매니페스트에 `license` 필드가 다른 값으로 명시되어 있으면 그 값으로 위 문장과 링크를 갈음한다. |
| 108 | |
| 109 | ### 출처 |
| 110 | |
| 111 | 이 책은 [book-writer](https://github.com/tobyilee/book-writer) 하네스 v{harness_version}로 자동 생성되었다. |
| 112 | |
| 113 | --- |
| 114 | |
| 115 | ## 서문 |
| 116 | ... |
| 117 | |
| 118 | ## 목차 |
| 119 | - 1장. ... |
| 120 | - 2장. ... |
| 121 | |
| 122 | --- |
| 123 | |
| 124 | # 1장. {제목} |
| 125 | (전환부 다듬어진 본문) |
| 126 | |
| 127 | # 2장. ... |
| 128 | |
| 129 | ... |
| 130 | |
| 131 | ## 에필로그 |
| 132 | ... |
| 133 | |
| 134 | ## 참고문헌 |
| 135 | ... |
| 136 | ``` |
| 137 | |
| 138 | `book_manifest.json`: |
| 139 | |
| 140 | ```json |
| 141 | { |
| 142 | "title": "...", |
| 143 | "subtitle": "...", |
| 144 | "author": "Toby-AI", |
| 145 | "language": "ko", |
| 146 | "pub_date": "YYYY-MM-DD", |
| 147 | "identifier": "urn:uuid:...", |
| 148 | "description": "한 문단 소개", |
| 149 | "cover_image": "cover.png", |
| 150 | "cover_alt": "{title} 표지", |
| 151 | "version": "1.0.0", |
| 152 | "license": "CC BY-NC-SA 4.0", |
| 153 | "genre": "tech-book", |
| 154 | "delegation_mode": "production", |
| 155 | "harness_version": "1.9.0", |
| 156 | "rights": "© {year} {author} — Licensed under {license}" |
| 157 | } |
| 158 | ``` |
| 159 | |
| 160 | `license`, `harness_version`, `rights`는 옵션 필드. 비우면 빌드 스크립트가 하네스 기본값(`CC BY-NC-SA 4.0` + 루트 `VERSION` + 자동 생성 rights)으로 채운다. `genre`는 오케스트레이터가 확정한 장르(`tech-book`/`narrative`/`practical`/`essay`)를 기록한다 — 재실행 시 활성 프로필을 결정적으로 재사용하는 출처다. 누락 시 `tech-book`. `delegation_mode`는 오케스트레이터가 Phase 0에서 확정한 위임 다이얼(`production`/`learning`)을 같은 취급으로 기록한다 — 재실행 시 학습 터치포인트를 결정적으로 재사용하는 출처다. 누락 시 `production` (`docs/learning-loop.md`). |
| 161 | |
| 162 | `cover_alt`는 표지 이미지의 대체 텍스트로, 빌드 스크립트의 alt-text 주입이 이 값을 출처로 쓴다. 비우면 기본 패턴 `"{title} 표지"`를 적용한다. |
| 163 | |
| 164 | **식별자(identifier) 발급 규칙:** `identifier`는 **신규 책일 때 한 번만** 생성한다 — `python3 -c "import uuid;print('urn:uuid:'+str(uuid.uuid4()))"`. 플레이스홀더 `"urn:uuid:..."`를 그대로 복사하지 않는다. 같은 책 재빌드 시 기존 `book_manifest.json`의 `identifier`를 **그대로 보존**하고 `version`만 올린다 (식별자는 책의 영구 ID — 재빌드마다 바뀌면 안 된다). |
| 165 | |
| 166 | ## 재편집 시 |
| 167 | |
| 168 | - 일부 챕터만 갱신 → 해당 섹션만 교체 후 전체 재저장 |
| 169 | - 서문·에필로그 개선 요청 → 해당 섹션만 다시 작성, 버전 증가 |
| 170 | - 내용 변경 제안은 반드시 `editor_notes.md`에 기록 (직접 수정 금지) |