| name | dependency-upgrade-one-by-one |
| description | 오래된(outdated) 의존성을 한 번에 하나씩만 업그레이드하고, 그 패키지가 일으킨 타입 에러·API 변경·테스트 실패를 고친 뒤 커밋하는 닫힌 루프입니다. bulk `npm update`로 한꺼번에 올리는 것보다 안전하게, 패키지마다 따로 검증하며 의존성을 최신화합니다. 사용자가 "의존성 하나씩 업그레이드해줘", "패키지 하나씩 올리고 깨진 거 고쳐줘", "오래된 dependency 안전하게 업데이트", "npm outdated 하나씩 정리해줘", "dependency upgrade one by one", "upgrade dependencies one at a time", "bump packages one by one and fix breakages"처럼 의존성을 점진적으로·안전하게 올리고 싶을 때 사용하세요. (구분: 주간 의존성 점검·요약만 하는 건 looping:dependency-audit-weekly, npm audit 보안 취약점을 하나씩 고치는 건 looping:npm-audit-fix-loop, 주간 보안 스캔은 looping:security-audit-weekly, 안 쓰는 의존성·죽은 코드를 제거하는 건 looping:knip-until-clean) |
의존성 하나씩 업그레이드 (Dependency Upgrade One-by-One)
반복마다 오래된 패키지를 딱 하나만 올리고, 깨진 부분을 고친 뒤 커밋합니다 — bulk npm update보다 안전합니다.
| 항목 | 값 |
|---|
| 카테고리 | 유지보수(Maintenance) |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | npm outdated에 남은 critical 패키지가 없을 때 (또는 사용자가 중단) |
| 반복 한도(Max iterations) | 15 |
| 매 반복 체크 명령 | npm outdated && npm test && npm run build |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor |
이 루프는 언제 쓰나
npm update로 한꺼번에 의존성을 올렸다가, 어느 패키지가 무엇을 깨뜨렸는지 알 수 없어 빌드와 테스트가 동시에 무너진 경험이 있을 때 씁니다. 이 루프는 정반대로 갑니다. 한 반복에 패키지를 딱 하나만 올리고, 그 한 번의 bump이 일으킨 타입 에러·API 변경·테스트 실패만 고친 뒤 커밋합니다. 그래서 무언가 깨져도 원인이 방금 올린 그 패키지 하나로 좁혀지고, 커밋 단위가 깔끔해 되돌리기도 쉽습니다. 영향이 큰 패키지부터 한 칸씩 안전하게 최신화하고 싶을 때 적합합니다.
루프 흐름
수동 시작 → 패키지 하나 선택 → 업그레이드 & 수정 → bump 커밋 →〔피드백 게이트〕
↑ │ critical 패키지 남음 → 아니오
└──────────────────────────────────────────────┘
│ 남은 critical 없음 (또는 사용자 중단) → 예
종료
매 반복(pass)마다 하는 일
- 패키지 하나 선택 —
npm outdated를 실행한다. 영향이 가장 큰 오래된 패키지를 딱 하나만 고르고, 현재 버전과 목표 버전을 메모한다.
npm outdated
- 업그레이드 & 수정 — 그 패키지 하나만 업그레이드한다. bump으로 생긴 타입 에러, API 변경, 테스트 실패를 고친다.
npm test && npm run build
- bump 커밋 —
chore(deps): bump <package> to <version> 형태의 메시지로 커밋한다.
가드레일 (점수 조작 방지 규칙)
종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
Claude Code에서 실행하기
가장 간단합니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 스스로 반복합니다.
"의존성 하나씩 업그레이드(Dependency Upgrade One-by-One)" 루프를 시작합니다.
목표: critical한 오래된 의존성들이 테스트 green 상태로 업그레이드됨
최대 반복: 15
매 반복 사이 실행: npm outdated && npm test && npm run build
종료 조건: npm outdated에 남은 critical 패키지가 없거나 사용자가 중단할 때
1단계: 오래된 패키지를 하나 고르고, 업그레이드하고, 깨진 부분을 고치고, 커밋하고, 멈춘다. 한 반복에 패키지 하나.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: npm은 예시입니다. 프로젝트에 맞게 yarn upgrade, pnpm up, 파이썬 pip list --outdated/pip install -U, Rust cargo update -p <crate>, Go go get -u <module> 등으로 바꾸세요. 체크 명령의 npm test && npm run build도 그 생태계의 테스트·빌드 명령으로 맞추면 됩니다.
팁 / 변형
- "하나씩" 규칙을 깨지 말 것: 한 반복에 두 개 이상 올리면 이 루프의 장점(원인 추적·커밋 단위)이 사라집니다. 의존성이 서로 엮여 있어 동시에 올려야만 한다면, 그 묶음을 한 패키지처럼 다루고 커밋 메시지에 이유를 남기세요.
- 우선순위 정하기:
npm outdated가 길면 major 점프(파괴적 변경 가능성)보다 patch/minor부터, 또는 보안·빌드에 직접 닿는 패키지부터 올리는 식으로 "영향이 큰 것" 기준을 먼저 정하세요.
- 막힐 때: major 업그레이드가 마이그레이션을 요구하거나 같은 실패가 두 번 반복되면, 가드레일대로 그 패키지를 건너뛰고 블로커(필요한 코드 변경, 호환 안 되는 peer dep 등)를 사람에게 보고하게 하세요.
- 연관 루프: 주간으로 점검·요약만 받고 싶으면
looping:dependency-audit-weekly, npm audit 보안 취약점을 하나씩 고치려면 looping:npm-audit-fix-loop, 안 쓰는 의존성을 솎아내려면 looping:knip-until-clean.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "Dependency Upgrade One-by-One" loop.
Goal: critical outdated deps are upgraded with green tests
Max iterations: 15
Between iterations run: npm outdated && npm test && npm run build
Exit when: npm outdated shows no critical packages left or user stops
Step 1: Pick one outdated package, upgrade it, fix breakages, commit, and stop. One package per iteration.
Self-pace this loop. After each iteration, run the check command, read the output, and only continue if the exit condition is not met. Stop when the exit condition passes or max iterations is reached. Give a short status update each pass.
출처: https://loops.elorm.xyz/loops/dependency-upgrade-one-by-one