install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/21-build-error-reporting" ~/.claude/skills/majiayu000-claude-skill-registry-21-build-error-reporting && rm -rf "$T"
manifest:
skills/data/21-build-error-reporting/SKILL.mdsource content
21-build-error-reporting
Status: ACTIVE
AppliesTo: v10
0. 목적
- 빌드/생성 파이프라인에서 실패 시 원인 파악 시간을 최소화한다.
- 사람이 읽는 1줄 요약 + 기계가 읽는 NDJSON 1줄을 항상 동일 규격으로 출력한다.
- 동일 규격의 로그 파일을
에 남겨 CI/로컬에서 재현 및 분석이 가능하게 한다.{tempDir}/log
1. 적용 범위
적용 대상
(및 CLI 엔트리)framework-ts/tools/builder- 입력 JSON 로딩/검증
- proto-json 파싱
- 테이블 변환
- 코드 생성 단계
비대상 (명시)
- 런타임(게임 실행 중) 로깅 정책은 별도 스킬에서 다룸
2. 용어 정의
| 용어 | 정의 |
|---|---|
| Build Error | 빌드 중단을 유발하는 오류 (ExitCode != 0) |
| Report Line | 콘솔에 출력되는 2줄 (요약 1줄 + NDJSON 1줄) |
| Log Record | 로그 파일에 쓰이는 NDJSON 한 줄 레코드 |
| KIND | 오류가 발생한 입력/단계를 나타내는 분류값 |
| jsonPath | 입력 JSON 내부 위치를 나타내는 JSONPath ( 기준) |
3. 출력 규격
3.1 콘솔 출력 (표준) — 항상 2줄
사람용 1줄 요약
[ERROR] <CODE> <KIND> <LOC> - <MESSAGE>
는 기본적으로<LOC>
형태<file><jsonPath>- 예:
(예:devian/{buildInputJson}$.domains[1].name
)devian/input/input_common.json$.domains[1].name
- 예:
는 1줄, 줄바꿈 금지<MESSAGE>
기계용 NDJSON 1줄
- JSON stringify 결과 1줄 (개행 금지)
- 레코드 스펙은 4장 참조
3.2 표준 출력 순서 규칙
- 요약 1줄 → NDJSON 1줄 순서 고정
- 동일 에러에 대해 중복 출력 금지 (최상위 catch에서 1회만)
3.3 경고(warn) 출력 규격 (선택)
+ 동일 포맷[WARN]- warn은 ExitCode를 바꾸지 않음 (기본)
4. NDJSON 레코드 스펙
4.1 필수 필드
| 필드 | 타입 | 설명 | 예시 |
|---|---|---|---|
| string | ISO8601 timestamp | |
| string | | | | |
| string | 에러 코드 문자열 | |
| string | 분류 문자열 | |
| string | 한 줄 메시지 (개행 금지) | |
| string | 입력 파일 경로 (레포 기준 상대경로) | (예: ) |
| string | JSONPath 문자열 (없으면 ) | |
4.2 권장 필드
| 필드 | 타입 | 설명 |
|---|---|---|
| string | 해결 힌트 1줄 |
| string | 관련 SSOT 문서 경로 |
| object | 추가 컨텍스트 (가능한 값만 포함) |
| object | 하위 예외 요약 (, — 둘 다 1줄) |
context 객체 예시 필드
domainKey
(domainType
|"DATA"
)"PROTOCOL"linkNameprotocolNamesheetKeytableNametarget
4.3 금지
- NDJSON 레코드 내에 멀티라인 문자열 금지
- 스택 트레이스는 레코드 필드로 넣지 말고 5장의 "로그 파일 분리 규칙"에 따라 별도 기록
5. 로그 파일 규칙
5.1 로그 디렉토리 (고정)
{tempDir}/log/
5.2 파일명 규칙
빌드 실행 1회당 "런(run)" 단위로 파일 분리:
build-{yyyyMMdd-HHmmss}-{pid}.ndjson
예:
build-20260125-103355-18432.ndjson
5.3 기록 규칙
- 콘솔에 출력한 NDJSON 레코드는 동일하게 파일에도 append
로 "build start / build end / summary" 레코드도 남기는 것을 권장level=info- 최소: start/end 2개
5.4 선택: 상세 로그 (스택/원문) 분리 파일
스택 트레이스/원문 예외를 남기고 싶으면:
{tempDir}/log/build-{...}.detail.log
- detail 파일은 텍스트 자유 포맷 허용 (멀티라인 OK)
6. 에러 코드 체계
6.1 네이밍 규칙
접두어 고정, 대문자 스네이크E_- 가능한 "원인 기반"으로 분리 (단계 기반 분리 과도 금지)
6.2 최소 필수 코드 (초기 세트)
| 코드 | 설명 |
|---|---|
| JSON 파일 읽기 실패 |
| JSON 파싱 실패 |
| JSON 스키마 검증 실패 |
| 중복 키 |
| 잘못된 값 |
| 경로/파일 없음 |
| 네임스페이스 불일치 |
| primaryKey 필수인데 없음 |
6.3 KIND enum (초기 세트)
| KIND | 설명 |
|---|---|
| 설정 JSON ( 등) |
| 프로토콜 JSON |
| 테이블 JSON |
| 엑셀 파일 |
| C# 코드 생성 |
| TypeScript 코드 생성 |
| UPM 패키지 처리 |
| 파일 복사/스테이징 |
7. 실패 처리 규칙 (Exit / FAIL 조건)
7.1 ExitCode 정책
발생 시 기본 ExitCode = 1level=error
은 기본 ExitCode에 영향 없음 (단, 옵션으로warn
가능)--warn-as-error
7.2 FAIL 조건 (강제)
빌드 중단이 발생한 경우, 아래 중 하나라도 위반하면 FAIL:
| 조건 | 설명 |
|---|---|
| 콘솔 표준 2줄 | 출력되지 않으면 FAIL |
| 로그 파일 | 생성되지 않으면 FAIL |
| 필수 필드 | , , , , 중 하나라도 누락이면 FAIL |
8. DoD (Definition of Done)
- 입력 JSON 파싱/검증 실패 시 표준 2줄 출력 +
에 NDJSON 로그 생성{tempDir}/log - 최소 3가지 케이스에서
가 의미 있게 기록됨:jsonPath- JSON parse error (가능하면 line/col은 context로)
- required field missing
- duplicate key
- CI/스크립트가 NDJSON 한 줄을 파싱해
,code
,file
를 안정적으로 읽을 수 있음jsonPath - 동일 에러가 중복 출력되지 않음 (최상위 1회)
9. 구현 지침 (비정책 섹션)
Note: 이 섹션은 구현 가이드이며, 정책 강제 사항이 아님
- 최상위 CLI에서만 출력/파일 기록을 담당 (중간 레이어는 throw만)
- 에러 객체에 구조화 정보 (
같은 payload)를 붙이는 방식 권장devianError
는 가능하면 생성 (없으면jsonPath
)$
는 가능한 한 "정본 스킬"로 연결link
예시: 로그 요약 레코드 (선택)
마지막에
level=info로 1줄 요약도 남기면 CI 통계에 유용:
{"level":"info","code":"I_BUILD_SUMMARY","errors":1,"warnings":0,"durationMs":1234}
10. Reference
이 스킬
skills/devian-tools/21-build-error-reporting/SKILL.md
빌드 관련
skills/devian-tools/20-build-domain/SKILL.mdskills/devian-core/03-ssot/SKILL.md
입력 규약 (연결 후보)
— 도메인 패키지 생성 규칙skills/devian-unity/20-packages/com.devian.domain.template/SKILL.mdskills/devian-unity-samples/01-policy/SKILL.mdskills/devian-examples/01-policy/SKILL.md