All checks were successful
Publish ParaWiki / build-and-deploy (push) Successful in 29s
- PLAN.md · PROGRESS.md 도입: 병렬 에이전트 조정 지점 - CLAUDE.md 린화 + 에이전트 작업 흐름 섹션 (상세는 Output/guides/로 분리) - Output/guides/cimery-dev-guide.md, obsidian-cli.md 신설 - Agents: cimery-architect-researcher, adr-drafter - Commands: /plan, /progress, /adr, /research, /cimery-start - Skill: plan-commit - Hooks: raw/ 쓰기 차단, SessionStart PLAN/PROGRESS 주입, wiki/ADR 변경 시 log 갱신 알림, auto-approve (deny 훅 우선 유지) - .gitignore: .claude/ 공유 자산 포함, 로컬 상태·바이너리만 유지 제외 Closes #3 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
96 lines
4.9 KiB
Markdown
96 lines
4.9 KiB
Markdown
---
|
|
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건 넘으면 일부만 처리하고 나머지는 보고.
|