writing-mode.md v2.6.0: 형식 자동 검증 + 내용 검증 체크리스트
배경: - 문제: VERIFICATION에서 형식/내용 오류 다수 발견 (48-68건) - 원인 1: 형식 검증이 수동이라 깜빡하면 통과 (바텀, 작가의 말, 챕터 번호) - 원인 2: 내용 검증 프로세스 자체가 없음 (플롯 일치, 연결성, 설정) - 결과: VERIFICATION 부담 과다, FIX 모드 수정 비효율 추가: - Phase 3: 형식 자동 검증 스크립트 (Bash + PowerShell) - 바텀 3개 자동 카운트 (정확히 3개 강제) - 작가의 말 형식 자동 체크 (> [!NOTE] 필수) - 챕터 번호 일치 자동 검증 (파일명 vs 헤더) - 타임라인 형식 자동 검증 - Phase 4: 내용 검증 체크리스트 (신규) - 플롯 일치도 확인 (제목, 타임라인, 핵심 이벤트) - 이전 챕터 연결 확인 (시간/장소/상황 흐름) - 설정 일관성 확인 (숫자, 물리, 캐릭터) 예상 효과: - 형식 오류: 15건 → 0건 (100% 감소, 자동 검증) - 내용 오류: 35건 → 7건 (80% 감소, 체크리스트) - VERIFICATION 총 발견: 48-68건 → 19-23건 (65% 감소) 철학: ``` WRITING 모드 = 형식 오류 0건 + 내용 오류 최소화 VERIFICATION 모드 = 정말 최후 확인만 → 작성 단계에서 모든 문제 원천 차단! ``` 관련 파일: - writing-mode.md: v2.5.0 → v2.6.0 - README.md: 프로토콜 인덱스 업데이트 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -180,24 +180,38 @@
|
||||
### 9. WRITING 모드 ✍️
|
||||
|
||||
**파일:** `writing-mode.md`
|
||||
**버전:** v2.5.0
|
||||
**버전:** v2.6.0
|
||||
**최종 수정:** 2026-01-25
|
||||
**용도:** 새로운 챕터 작성 가이드 (타임라인 + 호칭 규칙 필수)
|
||||
**용도:** 새로운 챕터 작성 가이드 (형식 자동화 + 내용 검증 체크리스트)
|
||||
|
||||
**주요 기능:**
|
||||
- 작성 프로세스 (3/5/7화 유연)
|
||||
- 플롯 반영
|
||||
- 호칭 규칙 필수 체크포인트 ⭐ NEW (v2.5.0)
|
||||
- 호칭 규칙 필수 체크포인트 (v2.5.0)
|
||||
- 타임라인 역행 방지 필수 체크포인트 (v2.4.0)
|
||||
- 간이 검증 강화 (Git 커밋 전 필수)
|
||||
- 형식 자동 검증 ⭐ NEW (v2.6.0)
|
||||
- 바텀 3개 자동 카운트
|
||||
- 작가의 말 형식 자동 체크
|
||||
- 챕터 번호 일치 자동 검증
|
||||
- 내용 검증 체크리스트 ⭐ NEW (v2.6.0)
|
||||
- 플롯 일치도 확인
|
||||
- 이전 챕터 연결 확인
|
||||
- 설정 일관성 확인
|
||||
|
||||
**워크플로우:**
|
||||
```
|
||||
플롯 + 호칭 규칙 확인 → 타임라인 체크 → 작성 → 간이 검증 (필수!) → 커밋
|
||||
Phase 1: 준비 (호칭 규칙 숙지)
|
||||
Phase 2: 작성 (호칭 + 타임라인 체크포인트)
|
||||
Phase 3: 형식 자동 검증 (Bash 스크립트)
|
||||
Phase 4: 내용 검증 체크리스트
|
||||
Phase 5~8: 커밋
|
||||
```
|
||||
|
||||
**최근 변경 (v2.5.0):**
|
||||
- 📌 호칭 규칙 확인 3단계 필수 체크포인트 추가
|
||||
**최근 변경 (v2.6.0):**
|
||||
- 📌 형식 자동 검증 스크립트 추가 (바텀, 작가의 말, 챕터 번호)
|
||||
- 📌 내용 검증 체크리스트 추가 (Phase 4 신규)
|
||||
- 철학: WRITING = 형식 오류 0건 + 내용 오류 최소화
|
||||
- 예상 효과: VERIFICATION 발견 건수 65% 감소 (48-68건 → 19-23건)
|
||||
- 이번 화 등장인물 확인
|
||||
- characters.md 호칭 테이블 확인
|
||||
- 복수/단수 규칙 확인
|
||||
|
||||
@@ -1,15 +1,47 @@
|
||||
# 작성 모드 프로토콜
|
||||
|
||||
> **버전:** 2.5.0
|
||||
> **버전:** 2.6.0
|
||||
> **최종 수정:** 2026-01-25
|
||||
> **호환:** CWS Writing Guide v4.2.0+
|
||||
> **용도:** 신규 챕터 작성 (3/5/7화 유연)
|
||||
> **주요 변경:** 호칭 규칙 필수 체크포인트 추가 - 작성 전/후 검증 강화
|
||||
> **주요 변경:** 형식 자동 검증 + 내용 검증 체크리스트 추가 - VERIFICATION 발견 건수 대폭 감소
|
||||
|
||||
---
|
||||
|
||||
## 📋 CHANGELOG
|
||||
|
||||
### v2.6.0 (2026-01-25)
|
||||
|
||||
**배경:**
|
||||
- 문제: VERIFICATION에서 형식/내용 오류 다수 발견
|
||||
- 원인 1: 형식 검증이 수동이라 깜빡하면 통과됨 (바텀, 작가의 말, 챕터 번호)
|
||||
- 원인 2: 내용 검증 프로세스 자체가 없음 (플롯 일치, 연결성, 설정)
|
||||
- 결과: VERIFICATION 부담 과다, FIX 모드 수정 비효율
|
||||
|
||||
**추가:**
|
||||
- 📌 Phase 3: 형식 자동 검증 스크립트 (Git 커밋 전 필수)
|
||||
- 바텀 3개 자동 카운트 (정확히 3개 강제)
|
||||
- 작가의 말 형식 자동 체크 (> [!NOTE] 필수)
|
||||
- 챕터 번호 일치 자동 검증 (파일명 vs 헤더)
|
||||
- 📌 Phase 4: 내용 검증 체크리스트 (신규)
|
||||
- 플롯 일치도 확인 (제목, 타임라인, 핵심 이벤트)
|
||||
- 이전 챕터 연결 확인 (시간/장소/상황 흐름)
|
||||
- 설정 일관성 확인 (숫자, 물리, 캐릭터)
|
||||
- 검증 통과 필수 (Git 커밋 전)
|
||||
|
||||
**철학:**
|
||||
```
|
||||
WRITING 모드 = 형식 오류 0건 + 내용 오류 최소화
|
||||
VERIFICATION 모드 = 정말 최후 확인만
|
||||
|
||||
→ 작성 단계에서 모든 문제 원천 차단!
|
||||
```
|
||||
|
||||
**예상 효과:**
|
||||
- 형식 오류: 15건 → 0건 (100% 감소, 자동 검증)
|
||||
- 내용 오류: 35건 → 7건 (80% 감소, 체크리스트)
|
||||
- VERIFICATION 총 발견: 48-68건 → 19-23건 (65% 감소)
|
||||
|
||||
### v2.5.0 (2026-01-25)
|
||||
|
||||
**배경:**
|
||||
@@ -398,27 +430,133 @@ VERIFICATION 모드 = 최후의 보루 (검증)
|
||||
# characters.md 호칭 변화 시점 참조
|
||||
```
|
||||
|
||||
✅ 바텀 존재 여부
|
||||
✅ 형식 자동 검증 ⭐ 신규! (v2.6.0)
|
||||
```bash
|
||||
grep -n "\[.*화 끝\]\|다음.*화:" ch-XXX.md
|
||||
# 형식 자동 검증 스크립트 (Git 커밋 전 필수!)
|
||||
# 파일명 예시: ch-028.md
|
||||
|
||||
# 발견 시 → 즉시 삭제
|
||||
FILE="ch-028.md"
|
||||
ERROR=0
|
||||
|
||||
# 1. 바텀 검증 (정확히 3개)
|
||||
BOTTOM_COUNT=$(grep -c "^---$" "$FILE")
|
||||
if [ "$BOTTOM_COUNT" -ne 3 ]; then
|
||||
echo "❌ 바텀 오류: ${BOTTOM_COUNT}개 발견 (정확히 3개 필요)"
|
||||
echo " 위치: $(grep -n "^---$" "$FILE" | cut -d: -f1 | tr '\n' ' ')"
|
||||
ERROR=1
|
||||
else
|
||||
echo "✅ 바텀: 3개 정상"
|
||||
fi
|
||||
|
||||
# 2. 구버전 바텀 검증 ([X화 끝], 다음 X화: 금지)
|
||||
OLD_BOTTOM=$(grep -n "\[.*화 끝\]\|다음.*화:" "$FILE")
|
||||
if [ -n "$OLD_BOTTOM" ]; then
|
||||
echo "❌ 구버전 바텀 발견 (즉시 삭제 필요):"
|
||||
echo "$OLD_BOTTOM"
|
||||
ERROR=1
|
||||
fi
|
||||
|
||||
# 3. 작가의 말 형식 검증 (> [!NOTE] 필수)
|
||||
if ! grep -q "^> \[!NOTE\]$" "$FILE"; then
|
||||
echo "❌ 작가의 말 형식 오류"
|
||||
echo " 필수: > [!NOTE] (다음 줄에 작가의 말 내용)"
|
||||
ERROR=1
|
||||
else
|
||||
echo "✅ 작가의 말: 형식 정상"
|
||||
fi
|
||||
|
||||
# 4. 챕터 번호 일치 검증 (파일명 vs 헤더)
|
||||
FILENAME=$(basename "$FILE" .md)
|
||||
CHAPTER_NUM="${FILENAME#ch-}"
|
||||
|
||||
# 헤더에서 화수 추출 (예: # 1권 28화: 제목 → 28)
|
||||
HEADER_NUM=$(head -1 "$FILE" | grep -oP '\d+권 \K\d+(?=화:)')
|
||||
|
||||
if [ "$CHAPTER_NUM" != "$HEADER_NUM" ]; then
|
||||
echo "❌ 챕터 번호 불일치"
|
||||
echo " 파일명: ch-${CHAPTER_NUM}.md"
|
||||
echo " 헤더: ${HEADER_NUM}화"
|
||||
ERROR=1
|
||||
else
|
||||
echo "✅ 챕터 번호: 일치 (${CHAPTER_NUM}화)"
|
||||
fi
|
||||
|
||||
# 5. 타임라인 형식 검증
|
||||
TIMELINE=$(sed -n '3p' "$FILE")
|
||||
if ! echo "$TIMELINE" | grep -q "> \*\*타임라인:\*\* [0-9]\{4\}\.[0-9]\+-[0-9]\+"; then
|
||||
echo "❌ 타임라인 형식 오류"
|
||||
echo " 현재: $TIMELINE"
|
||||
echo " 필수: > **타임라인:** YYYY.M.D-M.D"
|
||||
ERROR=1
|
||||
else
|
||||
echo "✅ 타임라인: 형식 정상"
|
||||
fi
|
||||
|
||||
# 최종 판정
|
||||
if [ $ERROR -eq 1 ]; then
|
||||
echo ""
|
||||
echo "❌ 형식 검증 실패! Git 커밋 불가!"
|
||||
echo "⚠️ 위 오류를 모두 수정한 후 다시 검증하세요."
|
||||
exit 1
|
||||
else
|
||||
echo ""
|
||||
echo "✅ 형식 검증 통과!"
|
||||
fi
|
||||
```
|
||||
|
||||
✅ 헤더 형식
|
||||
```bash
|
||||
# 첫 줄 체크
|
||||
head -1 ch-028.md
|
||||
# 기대값: # 1권 28화: 제목
|
||||
# 파일명 028 = 헤더 28화 일치 확인
|
||||
```
|
||||
**Windows (PowerShell) 버전:**
|
||||
```powershell
|
||||
# 형식 자동 검증 스크립트 (Git 커밋 전 필수!)
|
||||
|
||||
✅ 타임라인 형식
|
||||
```bash
|
||||
# 3번째 줄 체크
|
||||
sed -n '3p' ch-028.md
|
||||
# 기대값: > **타임라인:** YYYY.M.D-M.D
|
||||
# 형식 검증
|
||||
$FILE = "ch-028.md"
|
||||
$ERROR = 0
|
||||
|
||||
# 1. 바텀 검증
|
||||
$BOTTOM_COUNT = (Select-String -Path $FILE -Pattern "^---$").Count
|
||||
if ($BOTTOM_COUNT -ne 3) {
|
||||
Write-Host "❌ 바텀 오류: ${BOTTOM_COUNT}개 발견 (정확히 3개 필요)" -ForegroundColor Red
|
||||
$ERROR = 1
|
||||
} else {
|
||||
Write-Host "✅ 바텀: 3개 정상" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# 2. 구버전 바텀 검증
|
||||
$OLD_BOTTOM = Select-String -Path $FILE -Pattern "\[.*화 끝\]|다음.*화:"
|
||||
if ($OLD_BOTTOM) {
|
||||
Write-Host "❌ 구버전 바텀 발견 (삭제 필요)" -ForegroundColor Red
|
||||
$ERROR = 1
|
||||
}
|
||||
|
||||
# 3. 작가의 말 형식
|
||||
$NOTE = Select-String -Path $FILE -Pattern "^> \[!NOTE\]$"
|
||||
if (-not $NOTE) {
|
||||
Write-Host "❌ 작가의 말 형식 오류" -ForegroundColor Red
|
||||
$ERROR = 1
|
||||
} else {
|
||||
Write-Host "✅ 작가의 말: 형식 정상" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# 4. 챕터 번호 일치
|
||||
$FILENAME = (Get-Item $FILE).BaseName
|
||||
$CHAPTER_NUM = $FILENAME -replace "ch-", ""
|
||||
$HEADER = Get-Content $FILE -First 1
|
||||
if ($HEADER -match '\d+권 (\d+)화:') {
|
||||
$HEADER_NUM = $Matches[1]
|
||||
if ($CHAPTER_NUM -ne $HEADER_NUM) {
|
||||
Write-Host "❌ 챕터 번호 불일치: ch-${CHAPTER_NUM} vs ${HEADER_NUM}화" -ForegroundColor Red
|
||||
$ERROR = 1
|
||||
} else {
|
||||
Write-Host "✅ 챕터 번호: 일치 (${CHAPTER_NUM}화)" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
|
||||
# 최종 판정
|
||||
if ($ERROR -eq 1) {
|
||||
Write-Host "`n❌ 형식 검증 실패! Git 커밋 불가!" -ForegroundColor Red
|
||||
exit 1
|
||||
} else {
|
||||
Write-Host "`n✅ 형식 검증 통과!" -ForegroundColor Green
|
||||
}
|
||||
```
|
||||
|
||||
🔴 **v2.3.0: 완성도 검증**
|
||||
@@ -439,11 +577,121 @@ VERIFICATION 모드 = 최후의 보루 (검증)
|
||||
|
||||
---
|
||||
|
||||
4. foreshadows.md 업데이트
|
||||
### Phase 4: 내용 검증 체크리스트 (Git 커밋 전 필수!) ⭐ 신규 (v2.6.0)
|
||||
|
||||
```
|
||||
⚠️ 형식 검증(Phase 3)과 별개로 반드시 확인!
|
||||
⚠️ 이 단계를 건너뛰면 VERIFICATION에서 대량 발견됩니다!
|
||||
```
|
||||
|
||||
**4-1. 플롯 일치도 확인**
|
||||
|
||||
```markdown
|
||||
- [ ] plot-XXX.md 읽기 (이번 화 플롯 확인)
|
||||
|
||||
- [ ] 주요 내용 일치 여부 체크:
|
||||
- [ ] 제목이 플롯과 일치하는가?
|
||||
- [ ] 타임라인이 플롯과 일치하는가?
|
||||
- [ ] 핵심 이벤트 3개가 모두 포함됐는가?
|
||||
- [ ] 등장인물이 플롯과 일치하는가?
|
||||
|
||||
- [ ] 플롯에 없는 중요 설정 추가하지 않았는가?
|
||||
- 예: 플롯에 없는 캐릭터 첫 등장
|
||||
- 예: 플롯에 없는 중요 사건 추가
|
||||
|
||||
판정:
|
||||
✅ 모두 일치 → 4-2로 진행
|
||||
❌ 불일치 발견 → 즉시 수정 또는 플롯 재확인
|
||||
```
|
||||
|
||||
**4-2. 이전 챕터 연결 확인**
|
||||
|
||||
```markdown
|
||||
- [ ] 이전 화 마지막 Part 읽기
|
||||
|
||||
- [ ] 현재 화 첫 Part와 자연스럽게 연결되는가?
|
||||
- [ ] 시간 흐름이 자연스러운가?
|
||||
- 예: 이전 화 밤 → 현재 화 다음날 아침 ✅
|
||||
- 예: 이전 화 오후 → 현재 화 3일 후 (설명 없음) ❌
|
||||
|
||||
- [ ] 장소 이동이 설명됐는가?
|
||||
- 예: 이전 화 서울 → 현재 화 만주 (이동 장면 있음) ✅
|
||||
- 예: 이전 화 경교장 → 현재 화 갑자기 만주 (이동 없음) ❌
|
||||
|
||||
- [ ] 상황 변화가 설명됐는가?
|
||||
- 예: 이전 화 회의 중 → 현재 화 회의 끝난 후 ✅
|
||||
- 예: 이전 화 회의 중 → 현재 화 갑자기 전투 (전환 없음) ❌
|
||||
|
||||
판정:
|
||||
✅ 모두 자연스러움 → 4-3으로 진행
|
||||
❌ 갑작스러운 변화 발견 → 연결 문장 추가
|
||||
```
|
||||
|
||||
**4-3. 설정 일관성 확인**
|
||||
|
||||
```markdown
|
||||
✅ 숫자 일관성 체크
|
||||
- [ ] 인원수, 금액, 날짜가 이전 화와 맞는가?
|
||||
- 예: 3화 "요원 20명" → 5화 "요원 50명" (설명 없음) ❌
|
||||
- 예: 4화 "100만 원" → 6화 "같은 돈인데 50만 원" ❌
|
||||
|
||||
- [ ] grep으로 숫자 추출 후 비교:
|
||||
```bash
|
||||
# 이전 화들에서 언급된 중요 숫자 확인
|
||||
grep -n "명\|원\|개\|톤" ch-025.md ch-026.md ch-027.md
|
||||
|
||||
# 현재 화에서 같은 숫자 확인
|
||||
grep -n "명\|원\|개\|톤" ch-028.md
|
||||
|
||||
# 불일치 발견 시 → 즉시 수정
|
||||
```
|
||||
|
||||
✅ 물리적 일관성 체크
|
||||
- [ ] 캐릭터 위치가 논리적인가?
|
||||
- 예: 강민준이 오후 2시에 서울, 오후 3시에 만주 ❌
|
||||
- 예: 강민준이 서울→만주 이동 (3일 소요) ✅
|
||||
|
||||
- [ ] 이동 시간/거리가 현실적인가?
|
||||
- 예: 1945년 서울→부산 1시간 (불가능) ❌
|
||||
- 예: 1945년 서울→부산 기차 8시간 ✅
|
||||
|
||||
✅ 캐릭터 일관성 체크
|
||||
- [ ] 성격에 맞는 행동인가?
|
||||
- characters.md의 성격 설정 확인
|
||||
- 예: 민준(냉철) "아악! 무서워!" 비명 ❌
|
||||
- 예: 민준(냉철) 손은 떨렸지만 표정 변화 없음 ✅
|
||||
|
||||
- [ ] 갑자기 아는 정보가 없는가?
|
||||
- 예: ch-004 "강세우? 누구야?"
|
||||
ch-005 "강세우가 형님이라 부른 이유는..." ❌
|
||||
- 예: ch-004 끝에 소개받음 → ch-005 언급 ✅
|
||||
|
||||
- [ ] 갑자기 할 수 있는 능력이 없는가?
|
||||
- 예: ch-003 "총 못 쏴" → ch-010 완벽한 저격 (연습 없음) ❌
|
||||
- 예: ch-005 사격 연습 → ch-010 성공 ✅
|
||||
|
||||
판정:
|
||||
✅ 모두 일관성 있음 → 4-4로 진행
|
||||
❌ 불일치 발견 → 즉시 수정 또는 설명 추가
|
||||
```
|
||||
|
||||
**4-4. 검증 결과 판정**
|
||||
|
||||
```
|
||||
✅ 모두 체크 완료 → Phase 5로 진행 (Git 커밋)
|
||||
❌ 하나라도 문제 → 즉시 수정 → 4-1부터 재검증
|
||||
|
||||
⚠️ 이 단계를 건너뛰면 VERIFICATION에서 대량 발견됩니다!
|
||||
⚠️ 5분 투자로 30분 수정 작업을 예방할 수 있습니다!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
5. foreshadows.md 업데이트
|
||||
- 설치된 복선 추가
|
||||
- 회수된 복선 체크
|
||||
|
||||
5. Git 커밋
|
||||
6. Git 커밋
|
||||
"X권 N-M화 작성 완료
|
||||
|
||||
- ch-XXX: 제목 (분량)
|
||||
@@ -453,13 +701,14 @@ VERIFICATION 모드 = 최후의 보루 (검증)
|
||||
- foreshadows.md 업데이트
|
||||
|
||||
총 XX,XXX자
|
||||
간이 검증: 통과 ✅
|
||||
형식 검증: 통과 ✅
|
||||
내용 검증: 통과 ✅
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||
|
||||
6. CURRENT-TASK.md 업데이트 또는 삭제
|
||||
7. CURRENT-TASK.md 업데이트 또는 삭제
|
||||
|
||||
7. 완료 보고 + 다음 작업 안내
|
||||
8. 완료 보고 + 다음 작업 안내
|
||||
```
|
||||
|
||||
---
|
||||
@@ -490,7 +739,15 @@ VERIFICATION 모드 = 최후의 보루 (검증)
|
||||
- [ ] 각 Part가 완전히 끝남
|
||||
|
||||
작성 후:
|
||||
- [ ] 바텀 없음 확인!
|
||||
- [ ] Phase 3: 형식 자동 검증 실행 ⭐ (v2.6.0)
|
||||
- [ ] 바텀 3개 정확히 존재
|
||||
- [ ] 작가의 말 형식 (> [!NOTE])
|
||||
- [ ] 챕터 번호 일치 (파일명 vs 헤더)
|
||||
- [ ] 타임라인 형식 정상
|
||||
- [ ] Phase 4: 내용 검증 체크리스트 완료 ⭐ (v2.6.0)
|
||||
- [ ] 플롯 일치도 확인
|
||||
- [ ] 이전 챕터 연결 확인
|
||||
- [ ] 설정 일관성 확인
|
||||
- [ ] summary 즉시 업데이트
|
||||
- [ ] CURRENT-TASK.md 업데이트
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user