Skip to content

Latest commit

 

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

effect-xray

불필요한 useEffect행동 보존이 증명된 것만 통과시키는 게이트.

분석 도구가 아니다. useEffect를 어떻게 다뤄야 하는지에 대한 지식은 이미 commodity다 — 정본은 React 공식 문서 You Might Not Need an Effect이고, 프런티어 모델은 파생/비파생·key 리셋·누적기를 이미 정확히 가른다(자체 eval에서 baseline pass rate 100%).

어려운 건 패턴을 아는 게 아니라, 동등해 보이고 테스트도 통과하는데 조용히 아닌 변경을 출고하지 않는 것이다. 이 저장소가 설치하는 건 그 태도 하나다.

구성

.claude/skills/effect-xray-refactor/   ← 주 경로. triage → 변환 → 게이트
.claude/agents/
  effect-refactor-worker               ← effect 하나 변환 + 보존 주장 6축 명시
  effect-adversarial-reviewer          ← 그 주장을 구체적 입력 시퀀스로 반증 (read-only)
archive/effect-xray.mjs                ← 은퇴한 AST 도구 (v0.6.1)

게이트가 어떻게 무나

역할 도구
effect-refactor-worker effect 하나를 변환하고 보존 주장을 낸다 편집 가능
effect-adversarial-reviewer 그 주장을 반증한다. 못 하면 PASS read-only

보존 주장은 6축으로 명시된다 — 추가 렌더·중간 상태 / mount 시점 1회 실행 / 다른 writer / 이전 상태 의존 / deps 의도적 제외 / cleanup 타이밍.

설계에서 하중을 받는 두 가지:

  • 핵심은 에이전트 두 개가 아니라 둘 사이의 계약이다. 명시된 반증 가능한 주장이 없으면 "적대적" 리뷰는 트집 아니면 고무도장으로 퇴화한다. worker의 확인 못 한 것 필드를 비우는 건 금지고, 그게 리뷰어의 공격 표면이다.
  • 리뷰어는 read-only다. 찾은 걸 고칠 수 없어야 두 역할이 하나로 붕괴하지 않는다. 그리고 PASS는 완결된 답이다 — 적대적 프레이밍은 뭐라도 내놓게 편향시키고, 지어낸 우려 하나가 쌍의 신뢰도를 통째로 깎는다.

호출은 위험도에 비례한다. 명백히 파생이고 grep이 깨끗하면 에이전트 없이 그냥 고친다.

쓰는 법

Claude Code에서 스킬이 자동으로 걸린다. 명시적으로는:

/effect-xray-refactor

절차의 1단계는 도구가 아니라 이것 하나다:

grep -n 'setFoo(' path/to/File.tsx

effect 밖의 모든 호출처가 그 상태의 공동 소스다. 여기 하나라도 걸리면 파생 const로 바꾸는 건 정리가 아니라 그 write들을 삭제하는 것이다 — 절차 전체에서 값어치가 가장 높은 한 줄이고, "안전한" 제거가 뭘 깨뜨리는 통상적인 이유다.

도구는 왜 아카이브됐나

v0.6까지 이 저장소의 주인공은 effect-xray.mjs(AST 배선 분석기)였다. eval이 correctness 리프트 0을 보고했고, 결정적 디테일은 스킬 자신의 triage 표 안에 있었다 — 스킬이 baseline을 이긴 유일한 케이스(누적기)를 담당하는 행만 도구 신호가 없었다. setX(p => …p…)는 도구가 emit하지도 않는 순수 소스 관찰이다. 증명된 유일한 승리에 도구는 참여하지 않았다.

이후 능력 단위로 분해해 보니 배선 파악은 파일을 읽으면 나오고, 공동 소스는 grep, deps 불일치는 exhaustive-deps(진짜 스코프 해석이 있다)가 더 정확했다. 오히려 세 항목은 대체재보다 열등했다 — 스코프 해석 없는 값싼 근사를 사실처럼 출력하면 확인 절차가 하나 늘어난다.

남은 근거는 능력이 아니라 경제성 하나였다(파일 200개 훑기 = 토큰 0). 그 수요가 실제로 없었으므로, 7.2MB 네이티브 의존성 + 537줄 + 테스트 14건을 지고 가지 않기로 했다.

되살리는 법과 축소안은 archive/README.md.

기록

HANDOFF.md에 전체 경위가 있다 — v0.5 리프레임, v0.6 멀티파일·타입체크, v0.7 피봇(렌즈 → 게이트), 모듈 존치 검토, 그리고 사전 등록된 다음 실험.

이 저장소의 결론 하나만 옮긴다면: 두 번의 eval이 모두 값어치를 분석이 아니라 거절에서 찾았다. (자매 프로젝트 component-graph도 독립적으로 같은 곳에 도착해 ADR-0001: The Gate is the product로 적었다.)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages