JAM v0.46.0 · Metrics Spec v14.5.0

AI Agent 코드의 정적 품질 기준선

JHL Architecture Metrics는 빌드·테스트 환경이 없어도 코드베이스를 스캔해 구조, 복잡도, 중복, 보안 냄새, 리소스, 코드 위생을 점수와 finding으로 남깁니다. 기본 점수는 jam-lite, 테스트와 보안 증적까지 합친 점수는 jam-full입니다.

37개 jam-lite 지표 jam-full = lite + test + security Go · TS/JS · Python · Java · C# · Rust · C/C++ Markdown · CSV · JSON · SARIF
curl -fsSL https://jhl-labs.github.io/jam/install.sh | sudo bash
빌드 없는 스캔 소스 텍스트, 경량 구문 정보, 모듈 메타파일만으로 결과를 만든다.
감사 가능한 근거 모든 finding은 metric ID, severity, confidence, file:line을 가진다.
CI 게이트 친화 exit code, SARIF, diff, fail-under 옵션으로 PR 품질 기준을 고정한다.
jam-lite + jam-full 92 → 95 · Grade A
ARCH9696
CPLX9191
SEC100100
HYG8484
JAM Full Score lite 0.50 + test 0.25 + security 0.25
jam-lite92 test-cli96 security-cli100
highHYG-07parser.go:42
mediumCPLX-02planner.ts:118
lowDUP-02service.py:61
reports/jam
$ jam lite . --json --sarif --strict --out reports/jam
jam-lite: score 92/100 (Grade A) · 18 findings
outputs: report.md · detail.csv · result.json · jam.sarif

$ jam full . --out reports/jam-full
JAM Full Score: 95/100 · lite 92 · test 96 · security 100

What JAM answers

“프로덕션에 올려도 되는 코드인가?”를 정적 근거로 빠르게 좁힙니다.

JAM은 테스트 실행기나 SCA 도구를 대체하지 않습니다. 대신 빌드 없이 항상 측정 가능한 정적 코드 건강도 기준선을 만들고, 필요할 때 외부 test/security CLI를 붙여 full 점수로 승격합니다.

AI Agent 산출물 리뷰

큰 파일, 깊은 중첩, 복제된 함수, 위험한 문자열 조합처럼 리뷰 전에 걸러야 할 신호를 file:line으로 모읍니다.

PR 품질 게이트

--fail-under, --strict, SARIF 업로드로 점수 하락과 파스 실패를 CI에서 막습니다.

품질 회귀 추적

jam diff와 deterministic CSV로 finding 증감, category score 변화, 신규 debt를 비교합니다.

프로덕션 준비도 합성

jam full이 test-cli/security-cli 결과를 읽어 품질 실패와 측정 인프라 실패를 분리합니다.

Official distribution

공식 바이너리는 jhl-labs/dist GitHub Release에서 배포합니다.

설치 스크립트는 현재 OS/아키텍처에 맞는 단일 실행파일을 받고 SHA256SUMS로 검증합니다. Windows는 release asset을 직접 내려받아 PATH에 두면 됩니다.

현재 버전v0.46.0
Metrics Specv5.0.0
배포 저장소jhl-labs/dist
체크섬SHA256SUMS

한 줄 설치

기본 설치 위치는 /usr/local/bin/jam입니다. CI에서는 VERSION=v0.46.0로 고정할 수 있습니다.

Release 확인
최신 버전 설치 현재 문서가 가리키는 최신 dist 릴리스를 사용합니다.
curl -fsSL https://jhl-labs.github.io/jam/install.sh | sudo bash
버전 고정 재현 가능한 runner bootstrap에 사용합니다.
curl -fsSL https://jhl-labs.github.io/jam/install.sh | sudo env VERSION=v0.46.0 bash

Quickstart

기본은 jam-lite, 필요한 컴포넌트만 jam-full로 확장합니다.

1

정적 스캔

소스 파일을 발견하고 언어별 경량 프론트엔드로 함수, import, 토큰, finding 후보를 추출합니다.

2

점수화

finding debt를 category TDR로 정규화하고 grade cap, confidence, suppress 규칙을 적용합니다.

3

증적 출력

리뷰용 Markdown, 집계용 CSV/JSON, 코드 스캔 UI용 SARIF를 같은 실행에서 생성합니다.

4

Full 합성

옵션으로 test-cli/security-cli를 호출해 test/security 점수와 실패 원인을 합성합니다.

로컬 품질 스캔

Markdown/CSV/JSON/SARIF 생성 파스 실패를 exit 3으로 처리하려면 --strict를 사용합니다.
jam lite . --json --sarif --strict --out reports/jam

Full 전체 게이트

lite + test + security 합성 test-cli와 security-cli를 찾아 실행하고 jam-full.json을 생성합니다.
jam full . --out reports/jam-full

Full 보안 보강

security-cli만 합성 test evidence가 아직 없을 때도 보안 점수를 따로 붙일 수 있습니다.
jam full . --component security --out reports/jam-security

Metrics v14.5.0

jam-lite는 이 CLI만으로 측정 가능한 37개 정적 지표를 모두 구현합니다.

지표는 점수 범위와 함께 봐야 합니다. jam-lite는 유지보수성에는 강하지만, 정확성·성능·런타임 동작을 증명하지는 않습니다.

jam-lite가 말하는 것과 말하지 않는 것

jam-lite 점수는 "이 코드가 옳은가"가 아니라 "이 코드 위에 계속 쌓아도 되는가"에 대한 정적 신호입니다. 상세한 범위와 한계는 커버리지와 한계에서 정리합니다.

유지보수성 높음 · ARCH/CPLX/DUP/SIZE
보안 패턴 부분 · 명백한 위험 패턴
신뢰성/성능 낮음 · RES/HYG 대리 신호
정확성/UX/호환성 없음 · 실행/도메인 검증 필요
ID목적산출해석
SIZE-01리뷰하기 어려운 대형 파일 찾기파일별 코드 라인 수파일이 클수록 이해·변경 비용 증가
SIZE-02너무 긴 함수 찾기함수 라인 수긴 함수는 분리와 테스트 경계 검토 대상
SIZE-03넓은 함수 인터페이스 찾기파라미터 개수데이터 뭉치나 책임 과다 신호
SIZE-04책임이 몰린 파일·타입 찾기선언 수, 참조 집중도, 메서드/필드 수God file/type 후보
CPLX-01테스트 경로가 많은 함수 찾기순환 복잡도(CCN)분기와 예외 경로가 많을수록 위험
CPLX-02사람이 읽기 어려운 흐름 찾기인지 복잡도중첩과 제어 흐름 부담을 반영
CPLX-03깊은 들여쓰기 찾기최대 블록 중첩 깊이가독성과 빠른 리뷰를 방해하는 위치
CPLX-04어휘량이 큰 코드 찾기Halstead Volume직접 감점보다 유지보수성 보조 입력
CPLX-05파일 유지보수성 요약Maintainability Index낮을수록 읽고 고치기 어려움
ARCH-01모듈 순환 의존 찾기import graph SCC와 cycle path변경 전파와 빌드/테스트 비용 증가
ARCH-02같은 모듈 안 파일 얽힘 찾기파일 수준 심볼 참조 cycle응집도와 파일 분리 검토 신호
ARCH-03과결합·불안정 의존 찾기Ca, Ce, Instability, SDP 위반핵심 모듈이 흔들리는 변경 위험
ARCH-04평탄 구조와 죽은 내부 모듈 찾기디렉터리 파일 수, orphan module모듈 경계 재정리 후보
ARCH-05허브형 의존(God Component) 찾기Ca·Ce 동시 outlier + 절대 하한많은 것에 의존하며 많은 것이 의존하는 병목
ARCH-06변경 파급 비용 측정전이적 의존(가시성 행렬) 밀도작은 변경이 시스템 전체로 퍼지는 정도
ARCH-07낮은 응집도(LCOM4) 찾기타입 메서드의 상태 공유 연결요소 수(tree-sitter)한 타입에 무관한 책임이 묶인 신호
ARCH-08깊은 상속(DIT) 찾기프로젝트 내부 상속 체인 깊이(tree-sitter)동작이 여러 조상에 분산돼 이해·변경 어려움
DUP-01복사-붙여넣기 중복 블록 찾기정규화 토큰 중복률수정 누락과 결함 전파 위험
DUP-02조금 바뀐 유사 함수 찾기함수 토큰 유사도중복 추상화 또는 의도적 분기 검토
SEC-01하드코딩 시크릿 찾기고엔트로피 문자열, 알려진 토큰 형식즉시 제거해야 할 노출 위험
SEC-02인젝션 위험 문자열 결합 찾기위험 sink 주변 문자열 조립 패턴SQL/command/HTML 주입 가능성
SEC-03약한 암호·TLS 설정 찾기취약 crypto, 난수, TLS verify off보안 기본값 위반 신호
SEC-04위험 역직렬화·동적 실행 찾기eval, unsafe YAML/pickle, shell exec sink원격 실행·데이터 변조 위험
SEC-05민감 정보 로깅 찾기로그 인자 내 password/token/secret 식별자운영 로그를 통한 정보 노출 위험
SEC-06DOM XSS 찾기dangerouslySetInnerHTML/innerHTML= 등 비리터럴(JS/TS)살균 없는 값이 DOM에 들어가는 XSS 경로
SEC-07경로 조작(Path Traversal) 찾기파일 sink + 사용자 입력, 함수 내 taint 추적디렉터리 탈출로 임의 파일 접근 위험
SEC-08SSRF 찾기HTTP client + 사용자 입력, taint 추적서버가 임의 내부 주소로 요청하게 되는 위험
RES-01자원 해제 누락 찾기open/malloc/new/acquire와 close/free 짝파일·메모리·핸들 누수 가능성
RES-02무한정 동시성 찾기loop 안 goroutine/thread/promise spawn폭주, 큐 적체, 장애 증폭 위험
RES-03가변 전역 상태 찾기모듈/package level mutable global테스트 격리와 동시성 안정성 저하
HYG-01삼킨 예외·무시된 에러 찾기empty catch/except, ignored error장애 원인 은폐 위험
HYG-02죽은 코드 찾기미참조 비공개 심볼, 도달 불가 구문유지보수 노이즈와 오래된 경로
HYG-03방치된 TODO/FIXME 찾기SATD 주석 개수와 밀도명시된 기술부채 누적 신호
HYG-04매직 리터럴 과다 찾기KLOC당 숫자·문자열 리터럴 밀도설명 없는 정책값과 중복 상수 위험
HYG-05주석 밀도 이상치 찾기comment/CLOC, 공개 API 문서 누락률문서 부족 또는 주석 과다 신호
HYG-06테스트 부재 신호 찾기테스트 파일 비율, 테스트 없는 디렉터리커버리지는 아니며 test-cli 보강 대상
HYG-07분석 신뢰도를 깨는 파스 실패 찾기parser error file:line:column--strict에서는 exit 3 처리

Outputs

사람이 읽는 리포트와 자동화가 읽는 파일을 동시에 만듭니다.

jam-report.md

요약 점수, category score, top findings, grade cap 원인을 리뷰 문서로 남깁니다.

jam-detail.csv

모든 finding을 행 단위로 기록합니다. metric version, threshold, confidence까지 포함합니다.

jam-result.json

대시보드, 회귀 테스트, release gate가 읽기 좋은 구조화 결과입니다.

jam.sarif

GitHub code scanning과 보안 대시보드로 올릴 수 있는 SARIF 2.1.0 출력입니다.

jam-detail.csvdeterministic finding evidence
metric_id,severity,confidence,file,line,value,threshold,debt_minutes
CPLX-02,warning,medium,internal/planner.ts,118,21,15,15
DUP-02,warning,medium,service.py,61,0.78,0.72,10
HYG-07,violation,high,parser.go,42,parse_error,0,60

JAM Full

jam-full은 test-cli와 security-cli까지 호출하는 프로덕션 게이트입니다.

jam-lite가 정적 코드 건강도를 만들고, test-cli가 테스트/커버리지 증적을, security-cli가 SAST/SCA/secret 증적을 제공합니다. JAM은 세 결과를 하나의 full 점수와 실패 사유로 합성합니다.

Composite score jam-full = weighted evidence
50% jam-lite 25% test 25% security

일부 컴포넌트만 실행하면 선택된 기본 가중치 합이 1.0이 되도록 재정규화합니다.

50%

jam-lite

jam 단독 실행. 정적 코드 debt, strict 파스 실패, SARIF/CSV/JSON을 담당합니다.

25%

test-cli

pass rate, coverage, evidence strength, density, source mix, skip/duration tail을 test 하위 지표로 분해합니다.

25%

security-cli

severity, policy, category, fixability, CVSS/CWE, suppression, toolchain 상태를 security 하위 지표로 합성합니다.

partial fullcomponent orchestration
jam full . --out reports/jam-full
jam full . --component security --out reports/jam-security
jam full . --component test --out reports/jam-test

Security assurance

Scanner finding과 확정 취약점, 감사 증거를 분리합니다.

중앙 정책과 commit 고정 리뷰 ledger로 보안 후보를 판정하고, framework control plan에 SHA-256 고정 증거를 연결합니다. 결과는 품질 점수와 독립이며 준수 인증을 주장하지 않습니다.

security verdict + control evidencepass · fail · incomplete
jam assurance verdict --input reports/jam --policy security-policy.json --review security-review.json --gate
jam assurance evidence --plan control-plan.json --out reports/audit --gate

E2E evidence

회귀 점수와 독립 보안 라벨을 분리해 검증합니다.

샘플 코퍼스는 고정 SHA를 4개 cache shard에서 실제 clone/scan합니다. jam-lite는 exact score·integrity·provenance와 5종 산출물 계약을 검증합니다. 별도 OWASP validation은 1,001개 지원 사례의 case-level confusion matrix를 고정합니다.

회귀 샘플16고정 SHA · exact score
CI shard4repository cache
Lite 산출물5/5Markdown · CSV · JSON · manifest · SARIF
보안 validation1,001TP · FN · TN · FP

Documentation

운영용 요약 문서와 원문 설계 문서를 함께 제공합니다.