한국 금융 규제 당국(FSS, FSC, KICPA, KASB)의 분기별 규제 업데이트 문서를 작성하거나 갱신할 때 사용. 보도자료 요약, 분기 정리, 보일러플레이트 생성, 배포 전 스킵 제거 작업을 포함.
RIGID SKILL — 이 스킬의 모든 규칙은 엄격히 따른다. 포맷·표 스키마·들여쓰기 규칙을 임의로 변형하지 않는다.
기준 파일(gold standard):
docs/quality-updates/2024/2024-10-01_to_2024-12-31.md,docs/quality-updates/2025/2025-10-01_to_2025-12-31.md— 포맷·어조·상세 수준의 기준. 판단이 어려우면 이 파일들을 참조할 것.
스킬 호출 즉시 사용자에게 고지:
quality-updates-writer 스킬로 [작업 유형]을 시작합니다. 기준 파일: 2024-10-01_to_2024-12-31.md / 2025-10-01_to_2025-12-31.md
사용자 요청을 분석해 3개 유형 중 하나로 분류:
| 유형 | 감지 키워드 |
|---|---|
| SUMMARIZE | "요약", "정리", "처리", "보도자료", "Phase" |
| BOILERPLATE | "보일러플레이트", "골격", "생성", "빈 문서" |
| SKIP_REMOVAL | "스킵 제거", "배포 정리", "skip 제거", "skip 삭제" |
유형별로 아래 태스크를 즉시 생성:
SUMMARIZE
BOILERPLATE
SKIP_REMOVAL
SUMMARIZE 유형만: Phase 1 시작 전 아래 파일을 반드시 읽어 포맷·어조·상세 수준을 확인한다.
docs/quality-updates/2024/2024-10-01_to_2024-12-31.mddocs/quality-updates/2025/2025-10-01_to_2025-12-31.mddigraph quality_updates {
rankdir=TB;
"스킬 호출" [shape=doublecircle];
"Announce" [shape=box];
"작업 유형?" [shape=diamond];
"TaskCreate: SUMMARIZE" [shape=box];
"TaskCreate: BOILERPLATE" [shape=box];
"TaskCreate: SKIP_REMOVAL" [shape=box];
"Phase 0: 소스 결정" [shape=box];
"Phase 1: 링크별 요약" [shape=box];
"원문 접근?" [shape=diamond];
"요약 작성" [shape=box];
"OCR fallback" [shape=box];
"접근 불가 처리" [shape=box];
"Phase 2: 분기 요약" [shape=box];
"대상 연도·분기 확인" [shape=box];
"없는 분기 생성" [shape=box];
"skip 스캔" [shape=box];
"skip 쌍 삭제" [shape=box];
"품질 검증" [shape=box];
"완료" [shape=doublecircle];
"스킬 호출" -> "Announce";
"Announce" -> "작업 유형?";
"작업 유형?" -> "TaskCreate: SUMMARIZE" [label="SUMMARIZE"];
"작업 유형?" -> "TaskCreate: BOILERPLATE" [label="BOILERPLATE"];
"작업 유형?" -> "TaskCreate: SKIP_REMOVAL" [label="SKIP_REMOVAL"];
"TaskCreate: SUMMARIZE" -> "Phase 0: 소스 결정";
"Phase 0: 소스 결정" -> "Phase 1: 링크별 요약";
"Phase 1: 링크별 요약" -> "원문 접근?";
"원문 접근?" -> "요약 작성" [label="예"];
"원문 접근?" -> "OCR fallback" [label="아니오"];
"OCR fallback" -> "요약 작성" [label="성공"];
"OCR fallback" -> "접근 불가 처리" [label="실패"];
"요약 작성" -> "Phase 2: 분기 요약";
"접근 불가 처리" -> "Phase 2: 분기 요약";
"Phase 2: 분기 요약" -> "품질 검증";
"TaskCreate: BOILERPLATE" -> "대상 연도·분기 확인";
"대상 연도·분기 확인" -> "없는 분기 생성";
"없는 분기 생성" -> "품질 검증";
"TaskCreate: SKIP_REMOVAL" -> "skip 스캔";
"skip 스캔" -> "skip 쌍 삭제";
"skip 쌍 삭제" -> "품질 검증";
"품질 검증" -> "완료";
}
TaskUpdate → in_progress. 아래 우선순위 표 적용. 결정 후 TaskUpdate → completed.
| 우선순위 | 조건 | 동작 |
|---|---|---|
| 1 | 사용자가 경로 지정 | 해당 경로 사용 |
| 2 | 요약 지시 (경로 미지정) | downloads/*.pdf에서 링크 제목 키워드 포함 파일 검색 → 매칭 시 사용 |
| 3 | "관련 PDF" 요청 | downloads/1.pdf 사용. 없으면 경로 확인 요청 |
| 4 | "최근 PDF" 요청 | downloads/ 수정일 내림차순 첫 번째 파일 사용. 0건이면 경로 요청 |
PDF 추출: scripts/pdf_path.txt에 UTF-8로 경로 저장 → scripts/extract_pdf.py 실행 → scripts/pdf_extracted.txt 사용. pypdf 미설치 시 pip install pypdf.
추출 실패 시 OCR fallback (필수):
scripts/pdf_extracted.txt가 비어 있거나 의미 파악 불가 → 추출 실패로 간주shot 소스 → 필요 시 OCR clip 근거 사용<!-- 원문 접근 불가 --> 처리 후 다음 링크경로 인코딩 이슈: 파일명에 특수 유니코드(U+2019 등) 있으면 FileNotFoundError 발생 가능. 스크립트는 날짜 접두어(250827*.pdf) 패턴으로 glob 재시도함.
HWP: 수동으로 PDF 변환 후 PDF 추출 워크플로우 사용.
WEB 소스: 큐레이션 편집기에서 해당 링크의 WEB 미리보기(iframe) 내용을 원문 근거로 삼아 요약. 불안정 시 캡처(스크린샷) 저장 → <!-- source: shot|downloads/...png -->.
링크마다: TaskUpdate → in_progress → 요약 작성 → TaskUpdate → completed.
최우선 원칙: 원문(PDF/HWP) 또는 큐레이터 미리보기에서 직접 확인된 내용만 포함. 추정 절대 금지.
요약 배치: 링크 줄 바로 하단, 사이 빈 줄 1개. 요약 블록 마지막 줄과 다음 링크 사이 빈 줄 1개.
→ 포맷 규칙: REFERENCE A, B, C, D, E 참조
큐레이션 링크 상태 코드:
| 상태 | 표시 | 처리 |
|---|---|---|
| 미결정 | 링크 줄만, source/요약 블록 없음 | 처리 전 — 제목·링크만 노출 수준 |
| 요약 필요 | <!-- source: pdf|… -->, web, clip 등 | Phase 0·1 요약·원문 연결 큐 |
| 요약 없음 | <!-- no_summary --> | 요약하지 않음 |
| 스킵 | <!-- skip --> | 편집기 저장 시 기록; 배포 전 제거 대상 |
| 완료 | !!! note / ??? note 등 | 기존 Phase 1·2 규칙대로 유지·보강 |
TaskUpdate → in_progress.
구조 (엄수): Executive Summary → 기관별 요약 → 시사점. 추가 섹션 불가.
→ 포맷 규칙: REFERENCE F 참조
TaskUpdate → completed.
적용 시점: 사용자가 "○년도 분기 보일러플레이트 생성", "○년 분기별 골격 추가" 등으로 요청한 경우.
docs/quality-updates/{연도}/ 내 기존 파일 목록 확인파일 경로: docs/quality-updates/{연도}/{연도}-MM-DD_to_{연도}-MM-DD.md
분기별 구간:
01-01 ~ 03-3104-01 ~ 06-3007-01 ~ 09-3010-01 ~ 12-31필수 구조:
---