KIT: 이슈 방식으로 — 새 SPEC·CLAUDE.md, #1 완료 기준 검사 (#1)

이슈 #1 중 코치 몫(SPEC·CLAUDE·검사).
- SPEC.md: 지금 지킬 규약만 남긴 새 판
- CLAUDE.md: 이슈 방식 작업 규칙 (하이쿠용)
- check.sh: F17 기준을 짧은 README 기준으로 바꾸고 이슈 #1 완료 기준 F47 추가

코치가 저장소 밖 시험 사본(별도 README 참조안)으로 F47 이 통과 가능함을 확인.
이 저장소에서는 README·FEATURES·PROGRESS 작업 전이라 지금 F47 이 실패하는 것이 정상.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
오문성andClaude Haiku 5.5 committed 2026-10-27 16:24:59 +09:00
1 parent f33e00bce4
commit bdd296597a
3 files changed
+69 -648

No files matched your search

+17 -7
View File
@@ -7,10 +7,10 @@ cd "$(dirname "$0")" || exit 2
python3 - "$@" <<'PY'
import json, math, os, re, sys
ORDER = ["F01", "F02", "F03", "F04", "F05", "F06", "F07", "F08", "F09", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26", "F27", "F28", "F29", "F30", "F31", "F32", "F33", "F34", "F35", "F36", "F37", "F38", "F39", "F40", "F41", "F42", "F43", "F44", "F45", "F46"]
ORDER = ["F01", "F02", "F03", "F04", "F05", "F06", "F07", "F08", "F09", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26", "F27", "F28", "F29", "F30", "F31", "F32", "F33", "F34", "F35", "F36", "F37", "F38", "F39", "F40", "F41", "F42", "F43", "F44", "F45", "F46", "F47"]
upto = sys.argv[1].upper() if len(sys.argv) > 1 else ORDER[-1]
if upto not in ORDER:
print("사용법: bash check.sh [F01~F46]")
print("사용법: bash check.sh [F01~F47]")
sys.exit(2)
LIMIT = ORDER.index(upto)
TOL = 1.0
@@ -233,12 +233,9 @@ miss = [w for w in want if not any(w in h for h in heads)]
report("F16", bool(guide) and not miss, "구동설명서에 제목 목적·구동·조작 (SPEC 18.3)" + (f" — 없음: {', '.join(miss)}" if miss else ""))
rd = readme or ""
rheads = [l for l in rd.splitlines() if l.startswith("## ")]
rwant = ["파일 구조", "실행", "데이터", "코드", "그리기", "도면 연결", "검사"]
rwant = ["실행", "파일 구조", "검사", "사용 도구"]
rmiss = [w for w in rwant if not any(w in h for h in rheads)]
report("F17", "🔒" in rd and not rmiss, "README.md 에 🔒 와 ## 제목 7개(파일 구조~검사)" + (f" — 없음: {', '.join(rmiss)}" if rmiss else ""))
allf = sorted({n for fid2, names in FUNCS.items() if ORDER.index(fid2) <= LIMIT for n in names} | {"facesBox"})
fmiss = [n for n in allf if n not in rd]
report("F17", not fmiss, f"README.md 에 함수 이름 {len(allf)}개 전부" + (f" — 없음: {', '.join(fmiss)}" if fmiss else ""))
report("F17", "🔒" in rd and not rmiss, "README.md 는 짧은 안내서: 🔒 와 ## 제목(실행·파일 구조·검사·사용 도구) (이슈 #1)" + (f" — 없음: {', '.join(rmiss)}" if rmiss else ""))
# ---- F18: 구동설명서 HTML 위키 (SPEC 12장) ----
KEEP = ["index", "purpose", "run", "control"]
@@ -1083,6 +1080,19 @@ report("F46", re.search(r"Ubuntu\s+\S+\s+2\b", ev) is not None and "설치일" i
report("F46", "microsoft-standard-WSL2" in ev and "PRETTY_NAME" in ev and re.search(r"\$ claude --version\s*\n\s*\S", ev) is not None, "evidence/wsl2.txt WSL 안쪽: microsoft-standard-WSL2 커널·Ubuntu 버전·claude 버전")
report("F46", "evidence/wsl2.txt" in (readme or ""), "README 사용 도구가 evidence/wsl2.txt 를 가리킨다")
# ---- F47: md 가이드 최소화 (이슈 #1) ----
try:
trk47 = [t for t in subprocess.run(["git", "ls-files"], capture_output=True, text=True).stdout.split("\n") if t]
except OSError:
trk47 = []
md47 = [t for t in trk47 if t.lower().endswith(".md")]
sz47 = sum(os.path.getsize(t) for t in md47 if os.path.exists(t))
report("F47", bool(trk47) and len(md47) <= 3 and sz47 <= 8192, f"저장소 md 3개 이하·합계 8KB 이하 (실제 {len(md47)}개 {sz47} B: {', '.join(md47)})")
gone47 = [t for t in ("FEATURES.json", "PROGRESS.md") if t in trk47 or os.path.exists(t)]
report("F47", bool(trk47) and not gone47, "FEATURES.json·PROGRESS.md 없음 — 할 일은 이슈, 경과는 커밋" + (f" — 남음: {gone47}" if gone47 else ""))
cl47 = read("CLAUDE.md") or ""
report("F47", "Gitea 이슈" in cl47 and "그 이슈만" in cl47 and "(#이슈번호)" in cl47, "CLAUDE.md 에 이슈 규칙(작업 목록은 이슈·그 이슈만 읽기·커밋에 #번호)")
print(f"결과: PASS {count['PASS']} / FAIL {count['FAIL']} / SKIP {count['SKIP']} (검사 범위 F01~{upto})")
sys.exit(0 if count["FAIL"] == 0 else 1)
PY