--- name: lint description: Library-tidying scan over the entire wiki/. Detects broken wikilinks, orphan pages, missing frontmatter fields, stale sources, index mismatches, oversized index lines, and log gaps — then proposes and applies fixes. Use when the user says "위키 정리", "lint", "도서관 정리", or "/lint". --- # lint 위키 전체를 점검하고, 깨지거나 낡은 것·규칙 위반을 찾아 **수정·업데이트**까지 수행하는 도서관 정리 스킬. ## 절차 (순서대로 실행) ### 1. 인벤토리 수집 - `wiki/*.md` 전체 파일 목록(이하 `WIKI_FILES`). - `raw/` 전체 파일 목록(이하 `RAW_FILES`, README/CLAUDE 제외). - `wiki/index.md` 내 모든 `[[...]]` wikilink 목록(`INDEX_LINKS`). - `wiki/log.md` 내 `create`/`delete`/`rename` 이벤트 목록(`LOG_EVENTS`). - 각 위키 페이지의 frontmatter(`title`, `tags`, `sources`, `updated`, `principles`)와 본문 내 wikilink 전체(`PAGE_LINKS_BY_FILE`). ### 2. 점검 항목 각 항목은 **찾기(detect) → 제안(report) → 가능하면 자동 수정(apply)**. 의미가 모호한 수정은 제안만 하고 사용자 확인을 남겨둠. #### A. 깨진 wikilink (자동 수정 어려움 — 제안) - 각 페이지의 `[[X]]` 에 대해 `wiki/X.md` 가 존재하는지 검사. - 없으면 **깨진 링크**. 유사 이름(대소문자·띄어쓰기 차이) 페이지가 있으면 자동 교정 제안. #### B. 오탈자·이명 (자동 수정 어려움 — 제안) - 페이지 제목과 wikilink 텍스트 불일치 확인. #### C. 고아 페이지 (자동) - `WIKI_FILES` 중 어떤 다른 페이지에서도 링크되지 않고, **index.md에도 없는** 페이지. - index.md에 한 줄 엔트리를 추가 (카테고리: 내용 기반 판단, 애매하면 "개념"). 120자 이내. #### D. index.md 누락·불일치 (자동) - `WIKI_FILES` ⊄ `INDEX_LINKS` → 누락된 페이지는 index에 추가. - `INDEX_LINKS` ⊄ `WIKI_FILES` → 삭제된 페이지에 대한 **죽은 엔트리**는 index에서 제거. #### E. index 엔트리 길이 (자동) - `- [[X]] — ...` 한 줄이 **120자 초과** 시 설명을 요약해 자르기. #### F. frontmatter 누락·형식 (자동) - 필수 필드: `title`, `sources`, `updated`. - 누락이면 추가. `title`은 파일명에서, `updated`는 **오늘 날짜**로, `sources`는 빈 배열로 두고 사용자 보완 제안. #### G. 존재하지 않는 source 참조 (제안) - 각 페이지의 `sources:` 배열이 가리키는 경로가 실제로 `raw/`에 있는지 확인. 없으면 이름 변경·삭제 여부 조사를 제안. #### H. 로그 누락 (자동) - `WIKI_FILES` 각 페이지에 대해 `log.md`에 **해당 페이지명의 `create` 이벤트**가 있는지 확인. - 없으면 "(late)" 태그와 함께 **오늘 날짜의 create 엔트리**를 log.md 맨 위에 추가: `- YYYY-MM-DD create [[페이지명]] — (late) lint에 의해 역추적 등록.` #### I. 삭제된 페이지의 죽은 참조 (자동) - `log.md`의 delete 이벤트 대상 페이지가 여전히 다른 페이지에서 링크되면, 해당 링크를 **일반 텍스트로 변환** 또는 새 대상 제안. #### J. 오래된 `updated:` (제안) - 페이지의 `sources:` 파일들의 mtime이 페이지 `updated:`보다 **7일 이상 새것**이면 재검토 제안. #### K. 잠정 설계 원칙 연결 누락 (제안) - 페이지가 "해석" 섹션에서 원칙(비패밀리/증분/선형-GIS) 중 하나를 언급하는데, frontmatter `principles:` 에 빠져 있으면 추가 제안. #### L. 중복 개념 (제안) - 두 페이지 제목·핵심 용어가 과도하게 겹치면 **병합 후보**로 리포트. 자동 병합은 금지. ### 3. 실행 순서 1. 자동 가능한 항목부터 수정 (E → F → H → D → I → C 순서). 2. `log.md`에 `- YYYY-MM-DD meta — lint run: 자동 수정 N건 적용.` 한 줄 추가. 3. 제안만 가능한 항목(A, B, G, J, K, L)은 최종 보고에 리스트화. ### 4. 최종 보고 형식 ``` ## Lint 결과 ### 자동 수정 N건 - [A] ... - [B] ... ### 수동 확인 필요 M건 - **깨진 링크**: [[X]] (페이지 [[Y]] 내부) → 제안: [[Z]] 로 변경? - **병합 후보**: [[A]] ⟷ [[B]] - **오래된 updated**: [[C]] (sources 변경된 지 N일) - **원칙 연결 누락**: [[D]]에 'principles: [증분]' 추가? ### 원칙 커버리지 현황 - 비패밀리: 페이지 N개 - 증분: 페이지 N개 - 선형-GIS: 페이지 N개 ← ⚠️ 비어 있음 / 부족 ``` ## 주의사항 - `raw/` 파일은 **절대 수정·이동·삭제 금지** (불변 원본). lint는 오직 `wiki/` 쪽만 수정. - 자동 수정 전, 각 변경은 사용자가 되돌릴 수 있도록 `log.md`에 흔적을 남긴다. - 애매한 의미 수정(깨진 링크의 의도 추정, 병합)은 **절대 자동화 금지.** 보고만. - 한 번의 실행에서 **너무 많은 파일을 재작성하지 않는다.** 30건 넘으면 일부만 처리하고 나머지는 보고.