nomoredasi — 분야 맞춤 학술 영어 교정 스킬 (v0.1)
"다시해와"가 나오기 전에 미리 다듬는 스킬. 논문 원고를 Nature 계열 학술지 투고 수준의 영어로 교정한다. 분야별 관행(단어선택·밀도·호흡·전개방식)은 references/overlays/<분야>.md가, 분야 공통 규칙은 references/core/가 담당한다.
4대 원칙 (모든 경로 공통, 위반 시 납품 금지)
- 의미 불변 — 내용·주장·논리 순서를 바꾸지 않는다. 문체와 표현만 고친다.
- 근거 기반 — 모든 교정은
references/core/규칙 또는 해당 분야 오버레이의 코퍼스 실측에 근거한다. 직감으로 "AI 같은" 표현을 지우지 않는다. - 장르 유지 — 학술 논문 레지스터를 유지한다. 구어체화·에세이화 금지. ASD-STE100식 규칙(능동태 강제·문장 20단어 상한·-ing 금지) 적용 금지 — 게재지 실측(수동태 111-137/10K, 평균 문장 16.5-18.3단어)과 충돌한다 (
references/core/academic-en.md참조). - 과윤문 금지 — 변경률 30% 초과 시 경고, 50% 초과 시 중단하고 사용자 확인.
scripts/verify_integrity.py가 결정적으로 판정한다.
Phase 0: 입력 유형 판별
작업 시작 시 한 줄 출력한다. 레이블은 사용자 요청 언어를 따른다:
-
한국어 요청:
nomoredasi v0.1 — 유형 {A|B} / 분야: {확정된 분야} -
영어 요청:
nomoredasi v0.1 — type {A|B} / field: {resolved field} -
그 외 언어: type/field 레이블을 해당 언어로 번역한다.
-
유형 A (한국어 원고) — 번역+교정 복합 경로.
references/core/korean-author-pitfalls.md의 번역투 유발 구조("~를 통해", "~에 의해" 등)를 먼저 탐지해 직역을 차단한 뒤 번역하고, 이후 유형 B와 동일한 3층 규칙을 적용한다. -
유형 B (영어 원고, AI 초안 포함) — 교정 경로. AI 초안 징후가 있으면
references/core/ai-tell-en.md계층을 추가 적용한다.
Phase 1: 분야 라우팅 (3단 우선순위)
- 사용자 명시 — 사용자가 분야를 말하면 그대로 사용.
- 폴터명 — 원고 파일이
papers/<분야>/등 분야명 폴터에 있으면 사용. - 자동감지 —
scripts/route_field.py <원고>실행, 상위 결과 사용. 상위 2개 점수가 근접하면 두 오버레이를 병합 적용. - 불명확 시 1회 확인 — 열린 질문 금지. "Optics and photonics로 보입니다. 맞으면 진행합니다" 형태로 추정값을 제시하고 한 번만 묻는다.
분야가 틀려도 코어 규칙은 분야 무관하게 동작하므로 안전하다. 오버레이 파일이 없는 분야면 코어 규칙만으로 진행하고 그 사실을 고지한다. 오버레이 헤더의 Maturity:가 immature면(파일 <10편 또는 <100K 단어) 그 수치는 하드 타겟이 아니라 방향 참고치로만 쓴다.
Phase 1.5: 원고 상태 파일 (manuscript.json)
원고 폴터에 manuscript.json이 있으면 읽고 반영한다 — 약어 정의 목록, 확정된 용어 표기(예: bandgap), 도표 목록. 부분 윤문이나 반복 요청에서 문서 전체 일관성을 유지하는 장치다. 없으면 새로 만들지 않고 진행하되, 교정 납품 후 scripts/manuscript_state.py learn <폴터> <교정본>으로 그날의 결정(정의한 약어, 다수 표기)을 기록한다. 기존 값과 충돌하는 새 관측은 덮어쓰지 않고 사용자에게 보고한다.
Phase 2: route_hint — 교정 강도 3경로
초안을 훑어 light / standard / heavy 중 하나로 결정하고 출력한다. 교정 중 아래 Phase 3 규칙에 따라 <교정본>.edits.json 저널을 섹션 단위로 항상 누적 작성한다.
- light (1패스) — 이미 잘 쓴 원고(게재 수준 문체, 산발적 문법 오류만). 코어 규칙 위반만 고치고 끝. 변경률 하한.
- standard (2패스) — 일반적 케이스. 1패스: 코어 3층 규칙(① 일반 학술 영어 — 시제·관사·수 일치 ② 분야 용어 표기 통일 — 오버레이 Notation watch ③ 저널 레지스터). 2패스: 자체 검토 + 검증 스크립트.
- heavy (3패스+) — 번역투/AI-tell 다수, 구조적 어색함. 패스1: 유형별 전처리(pitfalls 또는 ai-tell). 패스2: 코어 3층 규칙. 패스3: 문단 흐름·전개 다듬기. 그 후 검증.
교정 강도 예산 축 (level): route_hint는 원고 상태라는 진단(변경 금지, 에이전트 판단)이고, level은 사용자가 선택하는 변경 예산(기본 하/low) 이다. verify_integrity.py --level {low,mid,high}(log_edit.py --level으로 기록)로 입력하며 low=하/10-30%, mid=중/20-50%, high=상/30-50% 임계를 적용한다(내장 게이트보다 강할 수 없다). 유효 작업량 = min(진단, 예산) — 예산은 진단이 요구하는 강도를 낮출 수 있어도 결코 그보다 높게 끌어올리지 않는다. 요청 예산과 진단이 어긋나면 사용자에게 명시적으로 고지한다(예: “원고는 heavy 진단이나 하 요청으로 코어 위반만 교정했습니다”), 같은 원고를 light 목표로 도약하려면 재문의한다.
복수 강도 동시 요청: 사용자가 "하·중 둘 다", "중·상", "세 개 모두"처럼 여러 강도를 요청하면 강도별로 독립 교정·검증·납품한다. 출력은 <원고명>.low.md / .mid.md / .high.md로 구분하고, 저널(edits.json)·리포트(HTML)·로그(log_edit --level)도 강도별로 각각 생성한다.
Phase 3: 섹션 인식 교정
원고를 scripts/section_split.py로 나눠 인식한다 (IMRaD + Results and Discussion 병합, Experimental Section 등 변형 대응).
저널 (edits.json) 작성 의무: 교정하는 동안 <교정본>.edits.json을 섹션 단위로 조금씩 누적 작성한다 — 각 편집은 지운 뒤에 채우지 않고, 오히려 kept 항목(평가했지만 바꾸지 않은 스팬)과 함께 기록해둔다. 형식은 scripts/check_journal.py의 스키마 v1을 따른다:
changed— 원문 스팬(original, 교정본의corrected,<40토큰)을 바꾼 편집.rule: {source, id}로 근거 규칙을 지목하고reason으로 이유를 짧게 기록한다.kept— 평가했으나 건드리지 않은 스팬.original(양쪽 파일에 그대로 존재)과reason을 기록한다.rule은 선택.
original·corrected는 각각 원문·교정본의 정확한 부분 문자열이어야 한다. 구두점 편집도 빼놓지 말고 기록한다 — 저널 커버리지 게이트가 diff의 모든 changed/insert/delete 영역이 저널로 덮였는지를 기계 검증한다. 학회·논문집마다 구조는 다르지만 거시 구조는 요약/서론/본론/결과/결론의 선택이며, 병합형(Results+Discussion, 본론+결과)은 오류가 아니니 교정으로 "정규화"하지 않는다. 섹션별 시제·수동태 규칙과 전개·호흡 규칙은 references/core/academic-en.md §3·§8을 따른다.
- Methods = 과거·수동 우세 유지 (억지 능동화 금지)
- Results = 과거 중심, 도표 지시 현재. 해석 문장을 Results에 넣지 않는다
- Discussion/Conclusion = 해석은 현재 시제
- Abstract = 섹션 축약형, 시제 혼용 규칙 적용
- Introduction에는 결론 구조를 만들지 않는다 (§8 교차 오염 검사) — 서론에 "in conclusion" 류를 추가하는 것은 의미 불변 위반
부분 윤문 요청 ("서론만", "본론만")
사용자가 특정 섹션만 요청하면 범위 잠금: 요청한 구간만 고치고 다른 섹션은 건드리지 않는다. 그 섹션의 역할(§8)을 유지하고, 없는 섹션의 규칙은 적용하지 않으며, 교차 참조(“Section 3”, “Figure 4”)는 편집하지 않고 끊긴 참조만 노트로 보고한다. 검증 게이트도 그 구간 기준으로 실행한다 (academic-en.md §9).
Phase 4: 검증 (코드 게이트 — LLM 자기판정 금지)
테스트 실행: 비 UTF-8 콘솔(예: Korean Windows cp949)에서도 테스트 스위트는 인코딩을 명시하므로 환경 변수 없이 실행한다.
납품 전에 반드시 아래를 실행하고 결과를 보고한다 (게이트 0부터 순서대로 — 이전 게이트가 exit 1이면 이후 납품 금지):
-
scripts/check_journal.py <원고> <교정본> --journal <교정본>.edits.json— 저널 커버리지 게이트(모든 diff 변경 영역이 저널로 덮였는지, 스팬 ≤40토큰, rule.id가 rule.source에 존재). exit 1이면 납품 차단 — 빠진 편집/kept 항목을 저널에 보강하거나 스팬을 쪼개고 재실행한다. -
scripts/verify_integrity.py <원고> <교정본> --repeat 2 --report <교정본>.integrity-report.html— 수치·단위·화학식·인용·수식·DOI(+--overlay시 전문용어) 보존 + 변경률 게이트. exit 1이면 납품 금지, 해당 위반을 수정하고 재실행. 리포트 파일(<교정본>.integrity-report.html)을 교정본과 함께 납품해 사용자가 무엇이 바뀌었는지 diff로 검토할 수 있게 한다. -
scripts/check_terms.py <교정본>— 용어 표기 일관성 (bandgap/band gap 등). exit 1이면 다수형으로 통일 후 재실행. -
scripts/check_abbrev.py <교정본> [--state <폴터>]— 미정의 약어 탐지. exit 1이면 최초 사용 시 정의를 추가하거나 manuscript.json과 대조. 미검증 약어(전개형을 모르는 약어)는scripts/abbrev_registry.py references/abbrev-registry.json record <ABBR> --field <분야> --context <문장>으로 레지스트리에 기록한다. 이후 같은 분야 텍스트에서 같은 약어의 전개형이 관측되면(scan) 맥락 문장과 함께 verified로 갱신되고, 다른 전개형이 관측되면 conflict로 표시된다 — conflict는 사용자에게 확인을 요청한다. 사람용 뷰는references/abbrev-registry.html(자동 재생성, 편집 금지; SSOT는 json). -
부분 윤문이면 위 검사들을 해당 구간 기준으로 실행한다.
납품 시 scripts/log_edit.py <분야> <route_hint> <A|B> <원고> <교정본> [--journal <교정본>.edits.json]으로 교정 쌍과(삽입 시) 저널을 logs/edits/에 기록한다(품질 벤치 실측·pitfalls 파이프라인·왜 바꿨나 저널 입력).
품질 측정 (스킬 자체 개선용)
scripts/bench_edit.py <원고> <교정본> — 교정 전후 위반/100단어(AI-tell·중첩 헤징·과장 수식·도표 시제·장문·전이부사 과밀·표기 불일치)를 비교한다. 납품 게이트가 아니라 스킬 성능 측정 장치: 월/목 델타 사이클에서 golden 케이스와 실제 교정 로그에 적용해 위반율이 회귀(exit 1)하면 오버레이/규칙 변경을 되돌아본다.
참조 파일
references/core/academic-en.md— 시제·관사·수동태 균형·전이부사·헤징 (분야 공통)references/core/ai-tell-en.md— 영어 AI 초안 탐지 패턴 (게재지 비출현 근거 포함)references/core/korean-author-pitfalls.md— 한국어 화자 오류 사전 (초판, diff 축적으로 성장)references/overlays/<분야>.md— 분야별 실측: 문체 지표·상위 용어·phrase bank·표기 감시 목록.scripts/mine_corpus.py가~/Documents/papers/<분야>/에서 자동 생성, 주 2회 갱신.
하지 않는 것
- 내용 추가·삭제·재구성 (의미 불변 위반)
- ASD-STE100·Plain English 등 비학술 간소화 규칙 적용
- 분야를 모른 채 열린 질문으로 사용자에게 떠넘기기
- 검증 스크립트 없이 "확인했습니다"라고만 보고하기