제작 파이프라인의 반사 판정
제품 한 건을 만드는 동안 **답의 범위가 정해진 짧은 판단**이 수십~수백 번 반복된다. 이런 판단은
제품 한 건을 만드는 동안 답의 범위가 정해진 짧은 판단이 수십수백 번 반복된다. 이런 판단은
0.3초다. Jev 가 자신 있게
답하면 그 값을 쓰고, 애매하거나 연결이 안 되면 Claude 가 이 문서가 없던 때와 똑같이 판단한다.
어느 경우에도 작업은 멈추지 않는다.
cc-dev:jev-reflex(TypeSafe Jev, 판단 전용 모델)에 먼저 묻는다. 한 번에 0.2
단계의 통과·실패는 여기서 정하지 않는다. run_state.py 의 증거 검증, 요구 섹션 누락 시 미완료, 같은 실패
2회 예산 같은 fail-closed 규칙은 그대로 Claude 와 도구가 판정한다. 반사 판정은 "다음에 무엇을 할지"를
빨리 고르는 보조일 뿐이다.
호출#
JR="<cc-dev:jev-reflex 스킬 디렉터리>/scripts/jev_reflex.py"
SETS="<이 스킬 디렉터리>/jev" # cc-bricks 세트는 <cc-bricks:donor-registry 스킬 디렉터리>/jev
python3 "$JR" ask --set "$SETS/ci-failure.json" --field-file failure="$TAIL" [--field-file baseline="$BASE"]
python3 "$JR" ask --set "$SETS/screen-states.json" --items "$SCREENS" # 한 줄 = {"screen": "…"}
-
판단 대상은 셸 문자열에 넣지 않는다.
mktemp파일에 quoted heredoc(<<'EOF')으로 쓰고--field-file·--items로 넘긴다. - 여러 건은
--items(한 줄에 state 하나, 결과는 입력 순서)로 한 번에 보낸다. 줄마다route를 따로 읽는다. - 종료 코드 0·4 만 결과다. 3(키 없음·오류), 2(사용법 오류), cc-dev 미설치로 스크립트가 없는 경우는 모두 unavailable 로 읽는다.
- 로그·문자열 목록은 필요한 만큼만 넣는다 — 실패 로그는 꼬리 40~80줄, 도너 흔적은 코드가 먼저 후보를 거른 뒤 문자열마다.
세 경로#
| 경로 | 행동 |
|---|---|
reflex | 그 값을 쓴다. 단 아래 엄격화 전용 판단은 더 엄격한 쪽으로 움직일 때만 쓴다 |
deliberate | Claude 가 판단한다. choice 의 value 는 힌트일 뿐이다 |
unavailable | 이 문서가 없던 때와 똑같이 판단한다 |
판단 지점#
| 단계 | 세트 | 문항 | reflex 일 때 | 규칙 |
|---|---|---|---|---|
| 3 조립 | cc-bricks feature-brick (요구사항마다) |
brick · needs_book_domain |
FR → 브릭 후보. none 이면 atomic compose 로 새 feature |
엄격화 전용
—
none
이나
needs_book_domain
false 는 도너 브릭을
빼기만
한다. Jev 답으로 Claude 가 뺀 브릭을 다시 넣지 않는다. 책 도메인에 묶인 브릭(목록은
donor-registry
"반사 판정" 절)은 Claude 가 책/전자책 요구라고 판단할 때만 쓰고,
needs_book_domain
이 reflex false 면 뺀다
|
| 3 조립 · 5 배포 전 | cc-bricks donor-trace (문자열마다) |
donor_domain · exposure |
도너 흔적 여부와 노출 등급 V/S/L | 엄격화 전용 — true 는 흔적을 더하고 false 는 Claude 가 잡은 흔적을 지우지 않는다. 최종 등급은 Jev 와 Claude 중 더 보이는 쪽 (V > S > L) |
| 2 디자인 · 4 구현 | screen-states (화면마다) |
needs_loading · needs_empty · needs_error |
상태 프레임·상태 Knob·골든 목록 | 엄격화 전용 — 최종 상태 = Jev reflex true ∪ Claude 판단 ∪ PRD 인수 조건이 부른 상태. false 는 상태를 빼는 근거가 아니다 |
| 2 디자인 · 4 구현 | coui-component (요소마다) |
component |
불러올 cc-coui:coui-* 스킬과 라이브러리 검색어 |
소비 CoUI 릴리스·라이브러리에 실제로 있는지는 그대로 확인한다. other 는 coui-index 로 Claude 가 고른다 |
| 2 디자인 · 4 구현 | coui-defect (관찰마다) |
kind |
결함 분류 → 보고 대상(Figma 라이브러리 / coui 코드 / 승격 제안) | not_library_defect 는 힌트 — 저작 실수인지 다시 보라는 뜻이지 보고에서 빼는 근거가 아니다 |
| 2 디자인 · 4 구현 | cc-dev duplicate (검색 후보마다) |
same_work |
열린 같은 이슈가 정확히 하나 reflex true 면 새 이슈 대신 증거 댓글 | 그 밖(없음·여럿·위임)은 Claude 가 후보를 읽고 정한다 |
| 4 구현 | screen-owner (화면 × 후보 패키지) |
owns |
정확히 한 후보가 reflex true 이고 나머지가 모두 reflex false 면 그 패키지(와 그 그룹) | 그 밖은 Claude 가 정한다. "어느 것인가" 를 한 번에 묻지 않는다 |
| 4 구현 | shared-request (요청마다) |
route |
core 공유 계약 / 그룹 내부 / 실서버 전까지 보류(mock 은 DI 경계) | core 변경은 공유 패키지 소유자 한 명이 반영한다 — 그룹마다 따로 고치지 않는다. unclear 는 Claude 가 PRD·코드를 보고 정한다 |
| 3·4·5 CI | ci-failure (실패마다) |
cause |
수정 위치 — SDK 핀·비공개 의존 인증·메모리·시간 한도·골든 기준 이미지·기존 실패·코드 |
원인은 수정 위치만 고른다.
pre_existing_failure
도 기준선 실패 증거 파일이 있어야 제쳐 둘 수 있고, 실패한 게이트는 실패로 남는다
|
| 3·4·5 CI | cc-dev same-failure (직전 실패와 쌍) |
same_blocker |
true 면 같은 실패 2회 예산에 센다 | false·위임이면 Claude 가 원인을 비교한다. 예산 소진 판단(차단 기록)은 Claude 가 한다 |
-
세트 파일:
jev/*.json(이 스킬) ·<cc-bricks:donor-registry>/jev/*.json· cc-dev 의duplicate·same-failure는 이름으로 부른다(--set duplicate). - 판단 결과(값·경로·p/신뢰도·모델 버전)는 그 단계의 evidence 폴더에 남긴다. receipt 의 check 증거로는 쓰지 않는다 — 증거는 실제 도구 결과다.
- Jev 가 유일하게 올린 판단(Claude 는 아니라고 본 도너 흔적, 추가 상태 등)은 기록에 그 사실과 p 를 함께 적는다.
실측#
jev-1.13.0, 2026-09-29, 두 번 이상 실행. 정답은 "확정한 것 중 맞은 것 / 기대값이 있는 수". 나머지는 위임(deliberate)이며 오확정은 모두 0 이다. fixture 는 실제 제품 제작 실행의 CI 로그·도너 흔적 문자열·CoUI 결함 관찰을 일반화했다.
| 세트 · 문항 | 결과 |
|---|---|
feature-brick 브릭 · 책 도메인 필요 | 14~15/15 · 15/16 |
donor-trace 도너 도메인 · 노출 등급 | 12/15 · 14~15/15 |
screen-states Loading · Empty · Error |
10 |
coui-component | 22/23 |
coui-defect | 12~13/15 |
screen-owner (쌍 18 — 화면 9 중 5 확정) | 14/18 |
shared-request | 10/13 |
ci-failure | 17/17 |
duplicate · same-failure (이 파이프라인 예시로 잰 cc-dev 세트) |
4/5 · 6/8 — 정답이 사람마다 갈리는 1쌍(하단 탭 항목 vs 내비게이션 바 항목)은 뺐다 |
세트 문구나 임계값을 바꾸면 python3 "$JR" eval --set <세트 경로> 로 다시 재고 이 표를 고친다.
jev-latest 가 새 버전을 가리키면 다시 잰다.