Skip to main content
Run any Skill in Manus
with one click
GitHub repository

looping-skills

looping-skills contains 40 collected skills from NewTurn2017, with repository-level occupation coverage and site-owned skill detail pages.

skills collected
40
Stars
1
updated
2026-06-16
Forks
0
Occupation coverage
5 occupation categories ยท 100% classified
repository explorer

Skills in this repository

a11y-audit-until-clean
software-quality-assurance-analysts-and-testers

๋ณ€๊ฒฝ๋œ ๋ผ์šฐํŠธ/ํŽ˜์ด์ง€์— axeยทpa11yยทeslint-plugin-jsx-a11y ๊ฐ™์€ ์ ‘๊ทผ์„ฑ(a11y) ์ž๋™ ๊ฒ€์‚ฌ๋ฅผ ๋Œ๋ ค์„œ ๋ผ๋ฒจยท์ƒ‰ ๋Œ€๋น„ยทํฌ์ปค์Šค ์ˆœ์„œยทARIA ์—ญํ•  ๊ฐ™์€ ์œ„๋ฐ˜์„ ๊ณ ์น˜๊ณ , ๊ฐ์‚ฌ๊ฐ€ ๊นจ๋—ํ•ด์งˆ ๋•Œ(์œ„๋ฐ˜ 0, ์ข…๋ฃŒ ์ฝ”๋“œ 0)๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ ‘๊ทผ์„ฑ ๊ฒ€์‚ฌ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "a11y ์œ„๋ฐ˜ ๋‹ค ๊ณ ์ณ์ค˜", "์ ‘๊ทผ์„ฑ ๊ฐ์‚ฌ ๊นจ๋—ํ•ด์งˆ ๋•Œ๊นŒ์ง€", "axe/pa11y ์œ„๋ฐ˜ ์žก์•„์ค˜", "์Šคํฌ๋ฆฐ๋ฆฌ๋”ยทํ‚ค๋ณด๋“œ ์ ‘๊ทผ์„ฑ ๊ณ ์ณ์ค˜", "run a11y audit until clean", "fix accessibility violations", "A11y Audit Until Clean"์ฒ˜๋Ÿผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ๋ณ€๊ฒฝํ•œ UI์˜ ์ ‘๊ทผ์„ฑ ์œ„๋ฐ˜์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์žก์•„ ์—†์• ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์‹œ๊ฐ์  ํ”ฝ์…€ ํšŒ๊ท€๋Š” looping:visual-regression-until-match, lintยทํƒ€์ž… ์—๋Ÿฌ ์ •๋ฆฌ๋Š” looping:lint-typecheck-fix, E2E UI ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋Š” looping:e2e-until-green)

2026-06-16
api-contract-until-match
software-quality-assurance-analysts-and-testers

OpenAPI๋‚˜ JSON Schema ๊ฐ™์€ API ๊ณ„์•ฝ(contract)์— ๋งž์ถฐ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๊ณ , ์‘๋‹ต์ด ์ŠคํŽ™๊ณผ ์–ด๊ธ‹๋‚˜๋ฉด(๋“œ๋ฆฌํ”„ํŠธ) ํ•ธ๋“ค๋Ÿฌ ๊ตฌํ˜„์ด๋‚˜ ์ŠคํŽ™์„ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ๊ณ ์ณ์„œ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ๊ฐ€ ์ „๋ถ€ ํ†ต๊ณผ(์ข…๋ฃŒ ์ฝ”๋“œ 0)ํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "API๊ฐ€ ์ŠคํŽ™๋Œ€๋กœ ์‘๋‹ตํ•˜๋Š”์ง€ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ ๋Œ๋ ค์ค˜", "OpenAPI ๊ณ„์•ฝ์ด๋ž‘ ๊ตฌํ˜„ ์•ˆ ๋งž๋Š” ๊ฑฐ ๋งž์ถฐ์ค˜", "API ์‘๋‹ต์ด ์Šคํ‚ค๋งˆ๋ž‘ ์ผ์น˜ํ•  ๋•Œ๊นŒ์ง€ ๊ณ ์ณ์ค˜", "๋ฌธ์„œ๋ž‘ ๊ตฌํ˜„ ๋“œ๋ฆฌํ”„ํŠธ ์žก์•„์ค˜", "contract test until match", "make the API match the OpenAPI/JSON Schema contract", "API Contract Until Match"์ฒ˜๋Ÿผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ๋ฌธ์„œ์™€ ์‹ค์ œ ๊ตฌํ˜„ ์‚ฌ์ด์˜ ๊ณ„์•ฝ ๋ถˆ์ผ์น˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋งž์ถ”๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: openapi.yaml ์ž์ฒด๋ฅผ lintํ•˜๊ณ  ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฑด looping:openapi-sync-until-valid, READMEยทAPI ๋ ˆํผ๋Ÿฐ์Šค ๋“ฑ ๋ฌธ์„œ๋ฅผ ์ฝ”๋“œ์— ๋งž์ถ”๋Š” ๊ฑด looping:docs-sync-after-edits, spec.md ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋Œ€๋กœ ์‹ ๊ทœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑด looping:spec-first-ship, ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ green๊นŒ์ง€ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:test-until-green)

2026-06-16
autoloop-tdd
software-quality-assurance-analysts-and-testers

์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์“ฐ๊ณ  โ†’ ํ†ต๊ณผ์‹œํ‚ฌ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  โ†’ ๋ฆฌํŒฉํ„ฐํ•˜๋Š” red-green-refactor TDD ์‚ฌ์ดํด์„, ๋Œ€์ƒ ๋™์ž‘์ด ํ…Œ์ŠคํŠธ๋กœ ์™„์ „ํžˆ ๋ฎ์ด๊ณ  ์ „์ฒด ์Šค์œ„ํŠธ๊ฐ€ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "TDD๋กœ ๋งŒ๋“ค์–ด์ค˜", "ํ…Œ์ŠคํŠธ ๋จผ์ € ์“ฐ๊ณ  ๊ตฌํ˜„ํ•ด์ค˜", "red-green-refactor๋กœ ๋Œ๋ ค์ค˜", "์‹คํŒจ ํ…Œ์ŠคํŠธ๋ถ€ํ„ฐ ์ž‘์„ฑํ•ด์„œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•ด์ค˜", "ํ…Œ์ŠคํŠธ ์ฃผ๋„๋กœ ์ด ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•ด์ค˜", "Autoloop TDD", "test-first loop", "write a failing test then implement", "TDD this feature"์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•ด ์ƒˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ด๋ฏธ ๊นจ์ง„ ๊ธฐ์กด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๋Š” ๊ฑด looping:test-until-green, ์ปค๋ฒ„๋ฆฌ์ง€ %๋ฅผ ์ฑ„์šฐ๋ ค๊ณ  ํ…Œ์ŠคํŠธ๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฑด looping:coverage-until-threshold, spec.md ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋กœ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑด looping:spec-first-ship, E2E ์Šค์œ„ํŠธ๋ฅผ green์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฑด looping:e2e-until-green)

2026-06-16
build-until-green
software-developers

ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์‹ค์ œ๋กœ ๋Œ๋ ค ์ปดํŒŒ์ผยทํƒ€์ž…ยท๋ฒˆ๋“ค๋ง ์—๋Ÿฌ๋ฅผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๊ณ ์น˜๊ณ , ๋นŒ๋“œ๊ฐ€ ์ข…๋ฃŒ ์ฝ”๋“œ 0์œผ๋กœ ์„ฑ๊ณตํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋นŒ๋“œ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "๋นŒ๋“œ ์—๋Ÿฌ ๋‹ค ๊ณ ์ณ์ค˜", "๋นŒ๋“œ ๊นจ์ง„ ๊ฑฐ green ๋  ๋•Œ๊นŒ์ง€", "ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์„ฑ๊ณต์‹œ์ผœ์ค˜", "npm run build ํ†ต๊ณผํ•˜๊ฒŒ", "build until green", "fix build errors until it compiles", "make the production build pass"์ฒ˜๋Ÿผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ๋นŒ๋“œ๊ฐ€ ๊นจ์ง„ ๊ฑธ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ ์ณ ์„ฑ๊ณต์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์‹คํŒจ๋ฅผ ๊ณ ์น˜๋Š” ๊ฑด looping:test-until-green, lintยทํƒ€์ž…์ฒดํฌ ์—๋Ÿฌ ์ •๋ฆฌ๋Š” looping:lint-typecheck-fix, ์›๊ฒฉ CI ๋นŒ๋“œ ์‹คํŒจ ๊ฐ์‹œ๋Š” looping:ci-failure-watcher, ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ ์˜ˆ์‚ฐ ์ดˆ๊ณผ๋Š” looping:bundle-size-budget)

2026-06-16
bundle-size-budget
software-developers

ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ๋Œ๋ ค ํด๋ผ์ด์–ธํŠธ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ธก์ •ํ•˜๊ณ , ์„ค์ •ํ•œ size-limit ์˜ˆ์‚ฐ์„ ๋„˜์œผ๋ฉด ๋ฌด๊ฑฐ์šด ๋ชจ๋“ˆ dynamic importยท๋ฏธ์‚ฌ์šฉ ์˜์กด์„ฑ ์ œ๊ฑฐยท๋ผ์šฐํŠธ ๋ถ„ํ• ๋กœ ๋‹ค์ด์–ดํŠธํ•œ ๋’ค size-limit์ด ์ข…๋ฃŒ ์ฝ”๋“œ 0์œผ๋กœ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋ฒˆ๋“ค ํฌ๊ธฐ ์ค„์—ฌ์ค˜", "๋ฒˆ๋“ค ์˜ˆ์‚ฐ ์•ˆ ๋„˜๊ฒŒ ํ•ด์ค˜", "size-limit ํ†ต๊ณผ์‹œ์ผœ์ค˜", "๋ฒˆ๋“ค ๋‹ค์ด์–ดํŠธํ•ด์ค˜", "client bundle ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€ํ•ด์ค˜", "bundle size budget", "keep the client bundle under budget", "loop until size-limit passes"์ฒ˜๋Ÿผ ํด๋ผ์ด์–ธํŠธ ๋ฒˆ๋“ค์„ ์˜ˆ์‚ฐ ์ดํ•˜๋กœ ๋Œ์–ด๋‚ด๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋นŒ๋“œ ์ž์ฒด๋ฅผ ์„ฑ๊ณต์‹œํ‚ค๋Š” ๊ฑด looping:build-until-green, ์ฃฝ์€ exportยท๋ฏธ์‚ฌ์šฉ ํŒŒ์ผยท๊ณ ์•„ ์˜์กด์„ฑ ์ •๋ฆฌ๋Š” looping:knip-until-clean, ์˜์กด์„ฑ์„ ํ•˜๋‚˜์”ฉ ์•ˆ์ „ํ•˜๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฑด looping:dependency-upgrade-one-by-one)

2026-06-16
changelog-sync-after-ship
software-developers

๊ธฐ๋Šฅ์„ ์ถœ์‹œ(ship)ํ•œ ์งํ›„, ๋งˆ์ง€๋ง‰ ํƒœ๊ทธ ์ดํ›„์˜ ์ปค๋ฐ‹์„ ํ›‘์–ด CHANGELOG.md์˜ [Unreleased] ์„น์…˜์— ์‚ฌ์šฉ์ž ๊ด€์  ํ•ญ๋ชฉ์„ ์ฑ„์šฐ๊ณ  conventional commits๋ฅผ ๋ฐ˜์˜ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ์ˆ˜๋™ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ฒด์ธ์ง€๋กœ๊ทธ ์—…๋ฐ์ดํŠธํ•ด์ค˜", "๋ฐฉ๊ธˆ ์ถœ์‹œํ•œ ๊ฑฐ CHANGELOG์— ๋ฐ˜์˜ํ•ด์ค˜", "๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ •๋ฆฌํ•ด์ค˜", "CHANGELOG ๋™๊ธฐํ™”", "changelog sync after ship", "update the changelog for this release", "sync CHANGELOG after shipping"์ฒ˜๋Ÿผ ์ถœ์‹œยท๋จธ์ง€ ์งํ›„ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์‚ฌ์šฉ์ž ์นœํ™”์ ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: READMEยทAPI ๋ ˆํผ๋Ÿฐ์Šคยท์ฃผ์„ ๋“ฑ ์ผ๋ฐ˜ ๋ฌธ์„œ ๋™๊ธฐํ™”๋Š” looping:docs-sync-after-edits, openapi.yaml ์ŠคํŽ™ ๋™๊ธฐํ™”๋Š” looping:openapi-sync-until-valid, API ์‘๋‹ต์ด ๊ณ„์•ฝ๊ณผ ๋งž๋Š”์ง€ ๊ฒ€์ฆ์€ looping:api-contract-until-match, ์ž‘์„ฑํ•œ spec.md ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋Œ€๋กœ ๊ตฌํ˜„์€ looping:spec-first-ship)

2026-06-16
ci-failure-watcher
software-developers

์›๊ฒฉ CI๋ฅผ ์ผ์ • ๊ฐ„๊ฒฉ(๊ธฐ๋ณธ 5๋ถ„)๋งˆ๋‹ค ํด๋งํ•ด์„œ, ์ฒดํฌ๊ฐ€ ๋นจ๊ฐœ์ง€๋ฉด(red) ์‹คํŒจ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ , green์ด ๋  ๋•Œ๊นŒ์ง€ ์ˆ˜์ •์„ push ํ•˜๋Š” ์ธํ„ฐ๋ฒŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "CI ๋นจ๊ฐ„๋ถˆ ๋œจ๋ฉด ์ž๋™์œผ๋กœ ๊ณ ์ณ์ค˜", "CI 5๋ถ„๋งˆ๋‹ค ๊ฐ์‹œํ•˜๋‹ค ๊นจ์ง€๋ฉด ์ˆ˜์ •", "CI ์ดˆ๋ก ๋  ๋•Œ๊นŒ์ง€ ์ง€์ผœ๋ด", "gh run ํด๋งํ•ด์„œ ์‹คํŒจ ์ถ”์ ยท์ˆ˜์ •", "watch CI", "CI failure watcher", "poll CI until green", "investigate CI failures and push fixes"์ฒ˜๋Ÿผ ์›๊ฒฉ CI ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ์‹œํ•˜๋‹ค๊ฐ€ ์‹คํŒจ๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ ยท์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์‚ฌ๋žŒ์ด ์ง์ ‘ ํ•œ ๋ฒˆ ๋Œ๋ฆฌ๋Š” CI ์ˆ˜์ •์€ looping:fix-ci-until-green, ์—ฌ๋Ÿฌ PR์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋Œ๋ณด๋Š” ๊ฑด looping:pr-babysitter, ๋ฐฐํฌ ํ›„ ํ—ฌ์Šคยท์Šค๋ชจํฌ ์—”๋“œํฌ์ธํŠธ ๊ฐ์‹œ๋Š” looping:deploy-verification-loop, ๋กœ์ปฌ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ํ†ต๊ณผ๋Š” looping:build-until-green)

2026-06-16
coverage-until-threshold
software-quality-assurance-analysts-and-testers

ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€(coverage)๋ฅผ ๋ชฉํ‘œ ์ž„๊ณ„์น˜(์˜ˆ: 80%)๊นŒ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋™์ž‘์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฐ”๊พธ์ง€ ์•Š๊ณ , ์ปค๋ฒ„๋˜์ง€ ์•Š์€ ๋ถ„๊ธฐ์—๋งŒ ์ง‘์ค‘ ํ…Œ์ŠคํŠธ๋ฅผ ๋”ํ•ด "์ž„๊ณ„์น˜ ์ถฉ์กฑ + ์ „์ฒด ํ…Œ์ŠคํŠธ ํ†ต๊ณผ(์ข…๋ฃŒ ์ฝ”๋“œ 0)"์— ์ˆ˜๋ ด์‹œํ‚ต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ปค๋ฒ„๋ฆฌ์ง€ 80%๊นŒ์ง€ ์˜ฌ๋ ค์ค˜", "ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ๋Œ์–ด์˜ฌ๋ ค์ค˜", "์ปค๋ฒ„๋ฆฌ์ง€ ์ž„๊ณ„์น˜ ์ฑ„์›Œ์ค˜", "์•ˆ ๋ฎ์ธ ์ฝ”๋“œ์— ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ํ•ด์ค˜", "coverage until threshold", "raise test coverage to 80%", "add tests until coverage passes"์ฒ˜๋Ÿผ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ชฉํ‘œ๋ฅผ ์ฑ„์šฐ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๊ทธ๋ƒฅ ๊นจ์ง„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๋Š” ๊ฑด looping:test-until-green, ์‹คํŒจ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์“ฐ๋Š” TDD ์‚ฌ์ดํด์€ looping:autoloop-tdd, ๋ถˆ์•ˆ์ •ยท๊ฐ„ํ— ์‹คํŒจ ๋ถ„๋ฅ˜๋Š” looping:flaky-test-triage, e2e ์Šค์œ„ํŠธ ํ†ต๊ณผ๋Š” looping:e2e-until-green)

2026-06-16
de-sloppify-pass
software-developers

๊ตฌํ˜„์ด ๋๋‚œ ์งํ›„ "์ •๋ฆฌ ํŒจ์Šค"๋ฅผ ํ•œ ๋ฒˆ ๋Œ๋ ค, ๋””๋ฒ„๊ทธ ๋กœ๊ทธยท์ฃฝ์€ ๋ถ„๊ธฐยท์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ์ฝ”๋“œยทTODO ๋•œ์งˆยท๋“ค์ญ‰๋‚ ์ญ‰ํ•œ ๋„ค์ด๋ฐ์„ ๊ฑท์–ด๋‚ด๊ณ  ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ๋‹ค๋“ฌ๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ๋งค ํšŒ์ฐจ lint์™€ ํ…Œ์ŠคํŠธ๋กœ ๋™์ž‘์ด ๊นจ์ง€์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๊ตฌํ˜„ ๋๋‚ฌ์œผ๋‹ˆ ์ •๋ฆฌ ํ•œ ๋ฒˆ ๋Œ๋ ค์ค˜", "๋ฐฉ๊ธˆ ์ง  ์ฝ”๋“œ ์Šฌ๋กญ ์ •๋ฆฌํ•ด์ค˜", "๋””๋ฒ„๊ทธ ์ฝ”๋“œ๋ž‘ ์ฃฝ์€ ์ฝ”๋“œ ์‹น ์น˜์›Œ์ค˜", "๋„ค์ด๋ฐ ๋‹ค๋“ฌ๊ณ  ์ปจ๋ฒค์…˜ ๋งž์ถฐ์ค˜", "AI๊ฐ€ ์ง  ์ง€์ €๋ถ„ํ•œ ์ฝ”๋“œ ์ •๋ฆฌ", "de-sloppify", "de-sloppify pass", "cleanup pass after implementation", "remove debug code", "tighten naming", "delete dead branches", "align with project conventions"์ฒ˜๋Ÿผ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์‹œ๋‹ˆ์–ด ๊ด€์ ์œผ๋กœ ์ž๊ธฐ diff๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ์ž๊ธฐ ๋ฆฌ๋ทฐ๋Š” looping:pr-self-review, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” exportยทํŒŒ์ผยท๊ณ ์•„ ์˜์กด์„ฑ ์ œ๊ฑฐ๋Š” looping:knip-until-clean, ํฌ๋งคํ„ฐ๋กœ ์Šคํƒ€์ผ๋งŒ ๋งž์ถ”๋Š” ๊ฑด looping:format-until-clean, lintยทtypecheck ์˜ค๋ฅ˜๋งŒ ์žก๋Š” ๊ฑด looping:lint-typecheck-fix)

2026-06-16
dependency-audit-weekly
software-developers

๋งค์ฃผ ํ•œ ๋ฒˆ ์˜ค๋ž˜๋œ(outdated) ์˜์กด์„ฑ์„ ํ›‘์–ด ํŒจ์น˜ยท๋งˆ์ด๋„ˆยท๋ฉ”์ด์ €๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ , ๊นจ์งˆ ์œ„ํ—˜์ด ๋‚ฎ์€ ๊ฒƒ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ณ„ํš์„ ์š”์•ฝ์œผ๋กœ ๋‚ด๋†“๋Š” ์ธํ„ฐ๋ฒŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  "์ด๋ฒˆ ์ฃผ์— ๋ญ˜ ์˜ฌ๋ฆด์ง€"๋งŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ฃผ๊ฐ„ ์˜์กด์„ฑ ์ ๊ฒ€", "๋งค์ฃผ outdated ํŒจํ‚ค์ง€ ํ™•์ธํ•˜๊ณ  ์—…๊ทธ๋ ˆ์ด๋“œ ์ œ์•ˆํ•ด์ค˜", "์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ ์š”์•ฝ ์ฃผ๊ฐ„์œผ๋กœ ๋Œ๋ ค์ค˜", "dependency audit weekly", "weekly dependency audit", "check outdated deps and propose safe upgrades"์ฒ˜๋Ÿผ ์ •๊ธฐ์ ์œผ๋กœ ์˜์กด์„ฑ ํ˜„ํ™ฉ์„ ์ ๊ฒ€ํ•˜๊ณ  ์•ˆ์ „ํ•œ ์—…๊ทธ๋ ˆ์ด๋“œ์•ˆ์„ ๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์‹ค์ œ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๊ณ  ๊นจ์ง„ ๊ฑธ ๊ณ ์น˜๋Š” ๊ฑด looping:dependency-upgrade-one-by-one, ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ฃผ๊ฐ„ ์Šค์บ”ํ•˜๋Š” ๊ฑด looping:security-audit-weekly, npm audit ๊ณ ยท์‹ฌ๊ฐ ์ทจ์•ฝ์ ์„ ํ•˜๋‚˜์”ฉ ๊ณ ์น˜๋Š” ๊ฑด looping:npm-audit-fix-loop, ๋ฏธ์‚ฌ์šฉ ์˜์กด์„ฑ ์ œ๊ฑฐ๋Š” looping:knip-until-clean)

2026-06-16
dependency-upgrade-one-by-one
software-developers

์˜ค๋ž˜๋œ(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)

2026-06-16
deploy-verification-loop
network-and-computer-systems-administrators

๋ฐฐํฌ ์งํ›„ ์ผ์ • ๊ฐ„๊ฒฉ(์˜ˆ 15๋ถ„)๋งˆ๋‹ค healthยทsmoke ์—”๋“œํฌ์ธํŠธ๋ฅผ curl๋กœ ์ฐ”๋Ÿฌ๋ณด๊ณ , ์‹คํŒจํ•˜๋ฉด ๋ฐฐํฌ ๋กœ๊ทธยทํ™˜๊ฒฝ๋ณ€์ˆ˜ยท๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ ๊ฒ€ํ•ด ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์ •์„ ์ ์šฉํ•œ ๋’ค, ์„ค์ •ํ•œ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์„ฑ๊ณต ์‘๋‹ต์„ ์ค„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ์ธํ„ฐ๋ฒŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋ฐฐํฌ ํ›„ ํ—ฌ์Šค์ฒดํฌ ๋Œ๋ ค์ค˜", "๋ฐฐํฌ ๊ฒ€์ฆ ๋ฃจํ”„", "deploy ๋๋‚˜๊ณ  health/smoke ์—”๋“œํฌ์ธํŠธ ๋‹ค ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ 15๋ถ„๋งˆ๋‹ค ์ฒดํฌ", "๋ฐฐํฌํ•˜๊ณ  ๋‚˜์„œ ํ—ฌ์Šค ์—”๋“œํฌ์ธํŠธ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฐ”๋Ÿฌ์ค˜", "๋ฐฐํฌ ์ž˜ ๋–ด๋Š”์ง€ ํ™•์ธ ๋ฃจํ”„", "deploy verification loop", "hit health and smoke endpoints after a deploy", "verify deploy until healthy", "post-deploy health check loop"์ฒ˜๋Ÿผ ๋ฐฐํฌ๊ฐ€ ์ •์ƒ์ธ์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฒ€์ฆํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋ฐฐํฌ ํ›„ ํ•œ ๋ฒˆ ์ˆ˜๋™์œผ๋กœ ๊ณ ์ • ์Šค๋ชจํฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„๋Š” ๊ฑด looping:staging-smoke-test, ์›๊ฒฉ CI ์‹คํ–‰์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ์‹œํ•˜๋Š” ๊ฑด looping:ci-failure-watcher, DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊นจ๋—์ด ์ ์šฉ์‹œํ‚ค๋Š” ๊ฑด looping:migration-until-applied, ์—ด๋ฆฐ PR์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋Œ๋ณด๋Š” ๊ฑด looping:pr-babysitter)

2026-06-16
docs-sync-after-edits
software-developers

์ฝ”๋“œ๋ฅผ ๋ฐ”๊พผ ๋’ค ๊ทธ ๋ณ€๊ฒฝ์— ์˜ํ–ฅ๋ฐ›์€ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„ READMEยทAPI ๋ ˆํผ๋Ÿฐ์Šคยท์ธ๋ผ์ธ ์ฃผ์„์„ ์ฝ”๋“œ์™€ ์ผ์น˜ํ•˜๊ฒŒ ๋งž์ถ”๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ฝ”๋“œ ๋ฐ”๊ฟจ์œผ๋‹ˆ ๋ฌธ์„œ๋„ ๋งž์ถฐ์ค˜", "README๋ž‘ ์ฃผ์„ ์ฝ”๋“œ์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธ", "๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„ ๋ฌธ์„œ ๋™๊ธฐํ™”", "์ด๋ฒˆ diff์— ๋งž์ถฐ docs ๊ฐฑ์‹ ", "API ๋ ˆํผ๋Ÿฐ์Šค ์ตœ์‹ ํ™”", "sync docs after edits", "update README to match the code", "docs sync after edits"์ฒ˜๋Ÿผ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์ดํ›„ ๋’ค์ฒ˜์ง„ ๋ฌธ์„œ๋ฅผ ์ฝ”๋“œ์— ๋‹ค์‹œ ๋งž์ถ”๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ถœ์‹œ ํ›„ CHANGELOG ํ•ญ๋ชฉ ์ฑ„์šฐ๊ธฐ๋Š” looping:changelog-sync-after-ship, API ์‘๋‹ต์ด OpenAPI/JSON Schema ๊ณ„์•ฝ๊ณผ ๋งž๋Š”์ง€ ๊ฒ€์ฆ์€ looping:api-contract-until-match, openapi.yaml ์ŠคํŽ™ ์ž์ฒด๋ฅผ ๋ผ์šฐํŠธ์™€ ๋™๊ธฐํ™”๋Š” looping:openapi-sync-until-valid, ๊ตฌํ˜„ ํ›„ ์ฝ”๋“œ ์ •๋ฆฌ ํŒจ์Šค๋Š” looping:de-sloppify-pass)

2026-06-16
e2e-until-green
software-quality-assurance-analysts-and-testers

E2E(์—”๋“œํˆฌ์—”๋“œ) ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด UIยทํ†ตํ•ฉ ๋‹จ๊ณ„ ์‹คํŒจ๋ฅผ ๊ณ ์น˜๊ณ , ๋ชจ๋“  spec์ด ํ†ต๊ณผ(์ข…๋ฃŒ ์ฝ”๋“œ 0)ํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "E2E ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "์—”๋“œํˆฌ์—”๋“œ ํ…Œ์ŠคํŠธ green ๋งŒ๋“ค์–ด์ค˜", "E2E ๊นจ์ง„ ๊ฑฐ ๋‹ค ๊ณ ์ณ์ค˜", "Playwright/Cypress E2E ํ†ต๊ณผ์‹œ์ผœ์ค˜", "UI๋ž‘ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์‹คํŒจ ๊ณ ์ณ์ค˜", "e2e until green", "run end-to-end tests until they pass", "fix e2e failures and loop until the suite passes"์ฒ˜๋Ÿผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ๊นจ์ง„ E2E ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ ์ณ ์ „๋ถ€ ํ†ต๊ณผ์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์œ ๋‹›ยท์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋Š” looping:test-until-green, Playwright/Percy ์Šคํฌ๋ฆฐ์ƒท ํ”ฝ์…€ ๋น„๊ต๋Š” looping:visual-regression-until-match, ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋Š” looping:build-until-green, ๋ฐฐํฌ ํ›„ ์Šคํ…Œ์ด์ง• ์Šค๋ชจํฌ ์ ๊ฒ€์€ looping:staging-smoke-test)

2026-06-16
fix-ci-until-green
software-quality-assurance-analysts-and-testers

์ด ๋ธŒ๋žœ์น˜์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ์‹คํŒจํ•œ CI ์‹คํ–‰์„ gh๋กœ ๊ฐ€์ ธ์™€ ๋กœ๊ทธ๋ฅผ ์ฝ๊ณ , ๋กœ์ปฌ์—์„œ ๋˜‘๊ฐ™์ด ์žฌํ˜„ํ•œ ๋’ค ๊ทผ๋ณธ ์›์ธ์„ ์ตœ์†Œ diff๋กœ ๊ณ ์น˜๊ณ  pushํ•ด์„œ, ์ฒดํฌ๊ฐ€ ๋‹ค์‹œ green์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "CI ๋นจ๊ฐ„๋ถˆ ๊ณ ์ณ์ค˜", "CI ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ๊ณ ์ณ์ค˜", "๊นจ์ง„ CI ์ดˆ๋ก๋ถˆ ๋งŒ๋“ค์–ด์ค˜", "CI ์‹คํŒจ ์›์ธ ์ฐพ์•„์„œ ๊ณ ์ณ์ค˜", "GitHub Actions ์‹คํŒจ ๊ณ ์ณ", "fix CI until green", "fix the failing CI", "make CI pass", "get the build green"์ฒ˜๋Ÿผ ์›๊ฒฉ CI๊ฐ€ ๋นจ๊ฐ›๊ฒŒ ๋–  ์žˆ์–ด ๊ทธ๊ฑธ ์ง์ ‘ ๊ณ ์ณ ํ†ต๊ณผ์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ฃผ๊ธฐ์ ์œผ๋กœ CI๋ฅผ ํด๋งํ•˜๋ฉฐ ๊ฐ์‹œยท์ž๋™ ์ˆ˜์ •ํ•˜๋Š” ๊ฑด looping:ci-failure-watcher, ๊ตฌํ˜„๋ถ€ํ„ฐ PR์„ ์—ด๊ณ  ๋จธ์ง€ ๊ฐ€๋Šฅ ์ƒํƒœ๊นŒ์ง€ ๋Œ๊ณ  ๊ฐ€๋Š” ๊ฑด looping:ship-pr-until-green, ์›๊ฒฉ์ด ์•„๋‹ˆ๋ผ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ green๊นŒ์ง€ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:test-until-green, ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๊ณ ์น˜๋Š” ๊ฑด looping:build-until-green)

2026-06-16
flaky-test-triage
software-quality-assurance-analysts-and-testers

์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต ์‹คํ–‰ํ•ด ๊ฐ ์‹คํŒจ๋ฅผ ๋ถˆ์•ˆ์ •(flaky)์ธ์ง€ ์ง„์งœ ํšŒ๊ท€(real)์ธ์ง€ ๋ถ„๋ฅ˜ํ•˜๊ณ , ํ™•์ธ๋œ ์ง„์งœ ํšŒ๊ท€๋งŒ ๊ณ ์น˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ด ํ…Œ์ŠคํŠธ flaky์ธ์ง€ ์ง„์งœ ๊นจ์ง„ ๊ฑด์ง€ ๊ฐ€๋ ค์ค˜", "๊ฐ„ํ—์ ์œผ๋กœ ๊นจ์ง€๋Š” ํ…Œ์ŠคํŠธ ๋ถ„๋ฅ˜ํ•ด์ค˜", "ํ…Œ์ŠคํŠธ ์—ฌ๋Ÿฌ ๋ฒˆ ๋Œ๋ ค์„œ ๋ถˆ์•ˆ์ •ํ•œ ๊ฑฐ ๊ณจ๋ผ์ค˜", "flaky ํ…Œ์ŠคํŠธ ํŠธ๋ฆฌ์•„์ง€", "flaky test triage", "classify flaky vs real failures", "run failing tests repeatedly and fix only real regressions"์ฒ˜๋Ÿผ ๊ฐ„ํ— ์‹คํŒจ์™€ ์ง„์งœ ์‹คํŒจ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ „์ฒด ์Šค์œ„ํŠธ๋ฅผ ๋ฌด์กฐ๊ฑด green๊นŒ์ง€ ๊ณ ์น˜๋Š” ๊ฑด looping:test-until-green, ๋ฒ„๊ทธ ํ•˜๋‚˜๋ฅผ ์žฌํ˜„ ์Šคํฌ๋ฆฝํŠธ๋กœ ํŒŒ๊ณ ๋“œ๋Š” ๊ฑด looping:investigation-script-loop, ์‹คํŒจํ•  ๋•Œ๋งˆ๋‹ค ํšŒ๊ณ  ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ธฐ๋ฉฐ ์žฌ์‹œ๋„ํ•˜๋Š” ๊ฑด looping:reflexion-debug-loop, ์›๊ฒฉ CI ์‹คํŒจ ๊ฐ์‹œ๋Š” looping:ci-failure-watcher)

2026-06-16
format-until-clean
software-developers

ํ”„๋กœ์ ํŠธ ํฌ๋งทํ„ฐ(prettier, biome ๋“ฑ)๋ฅผ ๋Œ๋ฆฌ๊ณ , ํฌ๋งทํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋ชป ๊ณ ์นœ ์Šคํƒ€์ผ ๋ฌธ์ œ๋ฅผ ์†๋ณด๊ณ , ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ diff ํ•˜๋‚˜ ์—†์ด ๊นจ๋—ํ•˜๊ฒŒ ํฌ๋งท๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ์ˆ˜๋™ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "ํฌ๋งท ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด์ค˜", "prettier ๋Œ๋ ค์„œ diff ์—†์„ ๋•Œ๊นŒ์ง€", "ํฌ๋งทํŒ… ํ†ต์ผํ•ด์ค˜", "์ฝ”๋“œ ์Šคํƒ€์ผ ๋‹ค ๋งž์ถฐ์ค˜", "ํฌ๋งท ๊นจ๋—ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "format until clean", "run prettier/biome until clean", "fix formatting until no diff"์ฒ˜๋Ÿผ ํฌ๋งท์„ ๋๊นŒ์ง€ ๊นจ๋—ํ•˜๊ฒŒ ๋งž์ถ”๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋ฆฐํŠธยทํƒ€์ž… ์—๋Ÿฌ๊นŒ์ง€ ์žก๋Š” ๊ฑด looping:lint-typecheck-fix, ๋„ค์ด๋ฐยท์ฃฝ์€ ์ฝ”๋“œยท๋””๋ฒ„๊ทธ ์ž”์žฌ ์ •๋ฆฌ๋Š” looping:de-sloppify-pass, ๋ฏธ์‚ฌ์šฉ exportยท๊ณ ์•„ ํŒŒ์ผ ์ œ๊ฑฐ๋Š” looping:knip-until-clean, ์ ‘๊ทผ์„ฑ ๊ฒ€์‚ฌ ํด๋ฆฐ์—…์€ looping:a11y-audit-until-clean)

2026-06-16
guardrails-learning-loop
software-developers

๊ฐ™์€ ์ฒดํฌ๊ฐ€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‘ ๋ฒˆ ์‹คํŒจํ•˜๋ฉด ๊ทธ ์‹คํŒจ๋ฅผ `.ralph/guardrails.md`์— '๊ฐ€๋“œ๋ ˆ์ผ ์‚ฌ์ธ'์œผ๋กœ ์ ์–ด ๋‘๊ณ , ๋‹ค์Œ ๋ฐ˜๋ณต๋ถ€ํ„ฐ๋Š” ๋˜‘๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋˜ํ’€์ดํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ํ•™์Šตํ˜• ์ž๋™ํ™” ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ๊ฐ€๋“œ๋ ˆ์ผ์„ ๋จผ์ € ์ฝ๊ณ  โ†’ ์ฒดํฌ(`npm test && npm run lint`)๋ฅผ ๋Œ๋ฆฌ๊ณ  โ†’ ์‹คํŒจ๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด ์‚ฌ์ธ์„ ์ถ”๊ฐ€ํ•˜๊ณ  โ†’ ๊ทธ ์‚ฌ์ธ์„ ์ง€ํ‚ค๋ฉฐ ๊ณ ์นฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๊ฐ™์€ ์‹คํŒจ ๋ฐ˜๋ณตํ•˜์ง€ ๋ง๊ณ  ๊ธฐ๋กํ•˜๋ฉด์„œ ๊ณ ์ณ์ค˜", "๊ฐ€๋“œ๋ ˆ์ผ์— ์ ์–ด๊ฐ€๋ฉฐ ํ•™์Šตํ•˜๋Š” ๋ฃจํ”„", "์‹คํŒจ ํŒจํ„ด ๋ฉ”๋ชจํ•˜๊ณ  ํ”ผํ•ด๊ฐ€๊ฒŒ", "๋‘ ๋ฒˆ ๊นจ์ง„ ๊ฑด ๋‹ค์‹œ ์•ˆ ๊นจ์ง€๊ฒŒ", "guardrails learning loop", "append a guardrail sign", "learn from repeated failures and stop repeating them"์ฒ˜๋Ÿผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ๋ฐ˜๋ณต๋˜๋Š” ์‹คํŒจ๋ฅผ ๋””์Šคํฌ์— ๋‚จ๊ฒจ ๋‹ค์Œ ํšŒ์ฐจ๊ฐ€ ํ”ผํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋””๋ฒ„๊น… ํšŒ๊ณ ๋ฅผ ๋””์Šคํฌ์— ์ ์–ด ๊ฐ™์€ ์˜ค๋‹ต์„ ํ”ผํ•˜๋Š” ๊ฑด looping:reflexion-debug-loop, prd.json ์Šคํ† ๋ฆฌ๋ฅผ .ralph ์ƒํƒœ๋กœ ํ•˜๋‚˜์”ฉ ์‹คํ–‰ํ•˜๋Š” ๊ฑด looping:ralph-story-executor, ๊ทธ๋ƒฅ ํ…Œ์ŠคํŠธ๋งŒ green๊นŒ์ง€ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:test-until-green, lint+typecheck๋งŒ ์ •๋ฆฌํ•˜๋Š” ๊ฑด looping:lint-typecheck-fix)

2026-06-16
independent-verifier-pass
software-quality-assurance-analysts-and-testers

๊ตฌํ˜„์ด "๋‹ค ๋๋‹ค"๊ณ  ์„ ์–ธํ–ˆ์„ ๋•Œ, ๊ตฌํ˜„์ž์˜ ๊ทผ๊ฑฐ๋‚˜ ๋ณ€๋ช…์—๋Š” ์ ‘๊ทผํ•˜์ง€ ์•Š์€ ๋ณ„๋„์˜ ๊ฒ€์ฆ ํŒจ์Šค๊ฐ€ ๋นŒ๋“œยท๋ฆฐํŠธยทํ…Œ์ŠคํŠธ๋ฅผ ์ง์ ‘ ๋‹ค์‹œ ๋Œ๋ ค ์ •๋ง ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์‹คํŒจ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๊ตฌํ˜„ ๋๋‚ฌ๋‹ค๋Š”๋ฐ ์ง„์งœ ํ†ต๊ณผํ•˜๋Š”์ง€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒ€์ฆํ•ด์ค˜", "๊ตฌํ˜„์ž ๋ง ๋ฏฟ์ง€ ๋ง๊ณ  ๋นŒ๋“œยท๋ฆฐํŠธยทํ…Œ์ŠคํŠธ ๋‹ค์‹œ ๋Œ๋ ค์„œ ํ™•์ธ", "๋…๋ฆฝ ๊ฒ€์ฆ ํŒจ์Šค ๋Œ๋ ค์ค˜", "๋จธ์ง€ ์ „ ์ตœ์ข… ๊ฒŒ์ดํŠธ๋กœ ๊ฒ€์ฆ๋งŒ ๋”ฐ๋กœ", "independent verifier pass", "verify the implementation independently", "run build lint tests as a separate verifier"์ฒ˜๋Ÿผ ๊ตฌํ˜„ ์ฃผ์žฅ๊ณผ ๋ณ„๊ฐœ๋กœ ๋ช…๋ น ์ถœ๋ ฅ๋งŒ ์‹ ๋ขฐํ•ด ๊ฒ€์ฆํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ํ…Œ์ŠคํŠธ๋งŒ green๊นŒ์ง€ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:test-until-green, ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋งŒ ๊ณ ์น˜๋Š” ๊ฑด looping:build-until-green, ๋ฆฐํŠธยทํƒ€์ž…์ฒดํฌ๋งŒ ๊ณ ์น˜๋Š” ๊ฑด looping:lint-typecheck-fix, ์ž๊ธฐ diff๋ฅผ ๋ฆฌ๋ทฐ์–ด์ฒ˜๋Ÿผ ์ ๊ฒ€ํ•˜๋Š” ๊ฑด looping:pr-self-review)

2026-06-16
investigation-script-loop
software-developers

๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ์ž‘์€ ์ผํšŒ์šฉ(throwaway) ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง์ ‘ ์งœ์„œ ์‹คํ–‰ํ•˜๊ณ , ์ถœ๋ ฅ์„ ์ฝ๊ณ , ๊ทผ๋ณธ ์›์ธ์ด ์ฆ๋ช…๋  ๋•Œ๊นŒ์ง€ ์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ€์„ค์„ ๋‹ค๋“ฌ๋Š” ๋””๋ฒ„๊น… ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋ฒ„๊ทธ ์›์ธ ๋๊นŒ์ง€ ํŒŒ์ค˜", "์žฌํ˜„ ์Šคํฌ๋ฆฝํŠธ ์งœ์„œ ์›์ธ ์ฐพ์•„์ค˜", "์™œ ์ด๋Ÿฌ๋Š”์ง€ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ฆ๋ช…ํ•ด์ค˜", "์ถ”์ธก ๋ง๊ณ  ์ถœ๋ ฅ์œผ๋กœ ํ™•์ธํ•ด์ค˜", "throwaway repro๋กœ ๋””๋ฒ„๊น…", "investigation script loop", "write a repro script to find the root cause", "prove the root cause with a probe script"์ฒ˜๋Ÿผ ์ถ”์ธก ๋Œ€์‹  ์‹ค์ œ ์ถœ๋ ฅ์œผ๋กœ ๊ทผ๋ณธ ์›์ธ์„ ๊ทœ๋ช…ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์‹คํŒจํ•œ ์žฌํ˜„๋งˆ๋‹ค ๋””์Šคํฌ์— reflection์„ ๋‚จ๊ฒจ ๊ฐ™์€ ์˜ค๋‹ต์„ ํ”ผํ•˜๋Š” ๊ฑด looping:reflexion-debug-loop, ํ…Œ์ŠคํŠธ๋ฅผ ์ „๋ถ€ ํ†ต๊ณผ(green)์‹œํ‚ค๋Š” ๊ฑด looping:test-until-green, ๊ฐ„ํ— ์‹คํŒจ๋ฅผ flaky/real๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฑด looping:flaky-test-triage, CI ์‹คํŒจ๋ฅผ ๋กœ์ปฌ์—์„œ ์žฌํ˜„ํ•ด ๊ณ ์น˜๋Š” ๊ฑด looping:fix-ci-until-green)

2026-06-16
knip-until-clean
software-developers

knip์„ ๋Œ๋ ค ์ฃฝ์€ export, ์•ˆ ์“ฐ๋Š” ํŒŒ์ผ, ๊ณ ์•„(orphan) ์˜์กด์„ฑ์„ ์ฐพ์•„ ์ œ๊ฑฐํ•˜๊ณ , knip์ด ๊นจ๋—(์ข…๋ฃŒ ์ฝ”๋“œ 0)ํ•˜๋‹ค๊ณ  ํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์•ˆ ์“ฐ๋Š” ์ฝ”๋“œ ๋‹ค ์ง€์›Œ์ค˜", "๋ฐ๋“œ ์ฝ”๋“œ ์ •๋ฆฌํ•ด์ค˜", "์“ฐ์ง€ ์•Š๋Š” exportยทํŒŒ์ผยท์˜์กด์„ฑ ์ œ๊ฑฐ", "knip ๊นจ๋—ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "์‚ฌ์šฉ ์•ˆ ํ•˜๋Š” deps ํ„ธ์–ด์ค˜", "knip until clean", "remove dead exports and unused files", "find orphan dependencies"์ฒ˜๋Ÿผ knip(๋˜๋Š” depcheck) ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฏธ์‚ฌ์šฉ ์ฝ”๋“œยท์˜์กด์„ฑ์„ ๋ฐ˜๋ณต ์ œ๊ฑฐํ•ด ๊นจ๋—ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ผ๋ฐ˜์ ์ธ ๊ตฌํ˜„ ํ›„ ์ฒญ์†Œ(๋””๋ฒ„๊ทธ ์ฝ”๋“œยท์ฃฝ์€ ๋ถ„๊ธฐ ์ œ๊ฑฐ)๋Š” looping:de-sloppify-pass, ๋ฆฐํŠธยทํƒ€์ž…์ฒดํฌ ์œ„๋ฐ˜ ์ •๋ฆฌ๋Š” looping:lint-typecheck-fix, ํŒจํ‚ค์ง€๋ฅผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฑด looping:dependency-upgrade-one-by-one, ๋ณด์•ˆ ์ทจ์•ฝ์  ์˜์กด์„ฑ ํŒจ์น˜๋Š” looping:npm-audit-fix-loop)

2026-06-16
lint-typecheck-fix
software-developers

lint์™€ typecheck๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๊ณ ๋œ ๊ฒฝ๊ณ ยท์—๋Ÿฌ๋ฅผ ์ตœ์†Œ ๋ณ€๊ฒฝ์œผ๋กœ ๊ณ ์น˜๊ณ , ๋‘ ๋ช…๋ น์ด ๋ชจ๋‘ ๊นจ๋—ํ•ด์งˆ(์ข…๋ฃŒ ์ฝ”๋“œ 0) ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋ฆฐํŠธ ์—๋Ÿฌ ๋‹ค ๊ณ ์ณ์ค˜", "ํƒ€์ž… ์—๋Ÿฌ ๊นจ๋—ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "lint๋ž‘ typecheck ํ†ต๊ณผ์‹œ์ผœ์ค˜", "eslint ๊ฒฝ๊ณ  ์ •๋ฆฌํ•˜๊ณ  tsc ํ†ต๊ณผ", "ํƒ€์ž…์ฒดํฌ ํด๋ฆฐํ•˜๊ฒŒ", "lint and typecheck fix", "fix all lint and type errors", "run lint and tsc until clean"์ฒ˜๋Ÿผ ์ •์  ๊ฒ€์‚ฌ(lint/typecheck)๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ/์ปดํŒŒ์ผ ์—๋Ÿฌ๋Š” looping:build-until-green, ํฌ๋งคํ„ฐ ์Šคํƒ€์ผ ์ •๋ฆฌ๋Š” looping:format-until-clean, ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ํ†ต๊ณผ๋Š” looping:test-until-green, ์ฃฝ์€ exportยท๋ฏธ์‚ฌ์šฉ ํŒŒ์ผ ์ œ๊ฑฐ๋Š” looping:knip-until-clean)

2026-06-16
merge-conflict-resolver
software-developers

ํƒ€๊นƒ ๋ธŒ๋žœ์น˜(๋ณดํ†ต main)๋ฅผ rebase ๋˜๋Š” merge ํ•˜๊ณ , ๋จธ์ง€ ์ถฉ๋Œ์„ ํŒŒ์ผ ํ•˜๋‚˜์”ฉ ์–‘์ชฝ ์˜๋„๋ฅผ ์‚ด๋ ค ํ•ด๊ฒฐํ•œ ๋’ค, ๋ธŒ๋žœ์น˜๊ฐ€ ์ตœ์‹ ์ด ๋˜๊ณ  ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ(์ข…๋ฃŒ ์ฝ”๋“œ 0)ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ์ˆ˜๋™ ์‹œ์ž‘ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ด ๋ธŒ๋žœ์น˜ main ์œ„๋กœ rebase ํ•˜๊ณ  ์ถฉ๋Œ ๋‹ค ํ’€์–ด์ค˜", "๋จธ์ง€ ์ถฉ๋Œ ํ•ด๊ฒฐํ•ด์ค˜", "conflict ๋‚œ ๊ฑฐ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•˜๊ณ  ํ…Œ์ŠคํŠธ๊นŒ์ง€ ํ†ต๊ณผ์‹œ์ผœ์ค˜", "๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™”ํ•˜๊ณ  ์ถฉ๋Œ ํ’€์–ด์ค˜", "merge conflict resolver", "rebase on main and resolve conflicts", "resolve merge conflicts until tests pass"์ฒ˜๋Ÿผ ์ถฉ๋Œ์ด ๋‚œ ๋ธŒ๋žœ์น˜๋ฅผ ์ตœ์‹ ํ™”ํ•˜๋ฉด์„œ conflict๋ฅผ ๋๊นŒ์ง€ ํ’€๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋จธ์ง€/rebase ์งํ›„ ์Šค๋ชจํฌ ํšŒ๊ท€ ๊ฐ์‹œ๋Š” looping:post-merge-regression-guard, ๋‹จ์ผ PR์„ ๋งŒ๋“ค์–ด CI greenยท๋จธ์ง€ ๊ฐ€๋Šฅ๊นŒ์ง€ ๋Œ๊ณ  ๊ฐ€๋Š” ๊ฑด looping:ship-pr-until-green, rebase ์—†์ด ๊นจ์ง„ ํ…Œ์ŠคํŠธ๋งŒ ํ†ต๊ณผ์‹œํ‚ค๋Š” ๊ฑด looping:test-until-green, ์—ฌ๋Ÿฌ PR์„ ์ฃผ๊ธฐ์ ์œผ๋กœ rebaseยท๊ด€๋ฆฌํ•˜๋Š” ๊ฑด looping:pr-babysitter)

2026-06-16
migration-until-applied
database-architects

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ ์šฉํ•˜๊ณ , ์‹คํŒจํ•˜๋ฉด ์Šคํ‚ค๋งˆ๋‚˜ SQL์„ ๊ณ ์ณ์„œ, dev ํ™˜๊ฒฝ์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ๊น”๋”ํ•˜๊ฒŒ ์ ์šฉ๋  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ์šฉ๋  ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ๊ณ ์ณ์ค˜", "prisma migrate ์—๋Ÿฌ ๊ณ ์ณ์ค˜", "์Šคํ‚ค๋งˆ ์—๋Ÿฌ ๊ณ ์น˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊น”๋”ํ•˜๊ฒŒ ์ ์šฉํ•ด์ค˜", "migrate dev ์‹คํŒจํ•˜๋Š” ๊ฑฐ ๊ณ ์ณ์ค˜", "run database migrations until they apply cleanly", "migration until applied", "fix migration errors and retry"์ฒ˜๋Ÿผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋๊นŒ์ง€ ์ ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: API ์‘๋‹ต์ด ์Šคํ‚ค๋งˆ ๊ณ„์•ฝ๊ณผ ๋งž๋Š”์ง€๋Š” looping:api-contract-until-match, openapi.yaml ๋™๊ธฐํ™”๋Š” looping:openapi-sync-until-valid, ํŒจํ‚ค์ง€ ์—…๊ทธ๋ ˆ์ด๋“œ๋Š” looping:dependency-upgrade-one-by-one, ๋นŒ๋“œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋Š” looping:build-until-green)

2026-06-16
npm-audit-fix-loop
software-developers

high/critical npm audit ์ทจ์•ฝ์ ์„ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ, ๋งค๋ฒˆ ํ…Œ์ŠคํŠธ๋กœ ๊ฒ€์ฆํ•˜๋ฉฐ ๊ณ ์น˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ๋ฌด์ง€์„ฑ `npm audit fix --force`๋กœ ํ•œ๊บผ๋ฒˆ์— ๋ฐ€์–ด๋ถ™์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "npm audit ์ทจ์•ฝ์  ๊ณ ์ณ์ค˜", "high/critical ์ทจ์•ฝ์  ํ•˜๋‚˜์”ฉ ์•ˆ์ „ํ•˜๊ฒŒ ํŒจ์น˜", "audit fix ํ…Œ์ŠคํŠธ ํ™•์ธํ•˜๋ฉด์„œ ๋Œ๋ ค์ค˜", "๋ณด์•ˆ ์ทจ์•ฝ์  ๋‹ค ์žก์•„์ค˜", "npm audit fix loop", "fix npm audit high/critical with test verification"์ฒ˜๋Ÿผ npm ์˜์กด์„ฑ ์ทจ์•ฝ์ ์„ ์•ˆ์ „ํ•˜๊ฒŒ 0๊ฑด์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ฃผ๊ฐ„ npm audit ์Šค์บ”ยท์‹ฌ๊ฐ๋„๋ณ„ ํŠธ๋ฆฌ์•„์ง€๋Š” looping:security-audit-weekly, ์ทจ์•ฝ์ ์ด ์•„๋‹ˆ๋ผ outdated ํŒจํ‚ค์ง€๋ฅผ ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๋Š” ๊ฑด looping:dependency-upgrade-one-by-one, ์ฃผ๊ฐ„ outdated ์˜์กด์„ฑ ์ ๊ฒ€ยท์š”์•ฝ์€ looping:dependency-audit-weekly)

2026-06-16
openapi-sync-until-valid
software-developers

openapi.yaml์„ redoclyยทspectralยทswagger-cli๋กœ lintํ•˜๊ณ , ๋ฌธ์„œ์— ์ ํžŒ pathยทschemaยทstatus code๊ฐ€ ์‹ค์ œ ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ์–ด๊ธ‹๋‚œ ๋ถ€๋ถ„(drift)์„ ๋งค ํšŒ์ฐจ๋งˆ๋‹ค ๊ณ ์ณ lint๊ฐ€ 0 ์—๋Ÿฌ๋กœ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ์ž๋™ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "openapi.yaml lint ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ๊ณ ์ณ์ค˜", "OpenAPI ์ŠคํŽ™ ํ•ธ๋“ค๋Ÿฌ๋ž‘ ๋™๊ธฐํ™”ํ•ด์ค˜", "์ŠคํŽ™์ด๋ž‘ ๋ผ์šฐํŠธ ์•ˆ ๋งž๋Š” ๊ฑฐ ๋งž์ถฐ์ค˜", "OpenAPI drift ๊ณ ์ณ์ค˜", "API ๋ช…์„ธ ๊นจ๋—ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "keep openapi.yaml valid and in sync", "lint the spec and fix drift", "sync openapi until valid"์ฒ˜๋Ÿผ OpenAPI ๋ช…์„ธ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ๊ตฌํ˜„๊ณผ ๋งž์ถ”๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋Ÿฐํƒ€์ž„ API ์‘๋‹ต์ด ๊ณ„์•ฝ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ๋กœ ๊ฒ€์ฆํ•˜๋Š” ๊ฑด looping:api-contract-until-match, ์ฝ”๋“œ ์ž์ฒด์˜ lintยทํƒ€์ž…์ฒดํฌ๋Š” looping:lint-typecheck-fix, ์ฝ”๋“œ ๋ณ€๊ฒฝ ํ›„ READMEยท๋ฌธ์„œ๋ฅผ ๋งž์ถ”๋Š” ๊ฑด looping:docs-sync-after-edits)

2026-06-16
post-edit-test-guard
software-quality-assurance-analysts-and-testers

ํŒŒ์ผ์„ ํŽธ์ง‘ํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ ํŒŒ์ผ๊ณผ ์—ฐ๊ด€๋œ ํ…Œ์ŠคํŠธ๋งŒ ์ž๋™์œผ๋กœ ๋Œ๋ ค์„œ ํšŒ๊ท€(regression)๋ฅผ ์ฆ‰์‹œ ์žก์•„๋‚ด๋Š” ํ›…(hook) ๊ธฐ๋ฐ˜ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "ํŽธ์ง‘ํ•  ๋•Œ๋งˆ๋‹ค ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ž๋™ ์‹คํ–‰", "ํŒŒ์ผ ๊ณ ์น˜๋ฉด ๋ฐ”๋กœ ์—ฐ๊ด€ ํ…Œ์ŠคํŠธ ๋Œ๋ ค์ค˜", "ํšŒ๊ท€ ์กฐ๊ธฐ ๊ฐ์ง€ ํ›…", "post-edit test guard", "run related tests after every edit", "test guard on save"์ฒ˜๋Ÿผ ํŽธ์ง‘-ํ…Œ์ŠคํŠธ ๊ฐ€๋“œ๋ฅผ ๊ฑธ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์ด๋ผ Claude Code์—์„œ๋Š” hooks ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (๊ตฌ๋ถ„: ์ปค๋ฐ‹ ์ง์ „ ์ฐจ๋‹จ์€ looping:pre-commit-guard, ๋จธ์ง€ ์งํ›„ ์Šค๋ชจํฌ๋Š” looping:post-merge-regression-guard, ์ „์ฒด ์Šค์œ„ํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ green๊นŒ์ง€ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:test-until-green)

2026-06-16
post-merge-regression-guard
software-quality-assurance-analysts-and-testers

git merge๋‚˜ rebase๊ฐ€ ๋๋‚˜๋Š” ์ˆœ๊ฐ„ ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๋Œ๋ ค, ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น˜๋ฉด์„œ ์ƒ๊ธด ํ†ตํ•ฉ ํšŒ๊ท€(integration regression)๋ฅผ ์ƒˆ ์ž‘์—…์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ์ฆ‰์‹œ ์žก์•„๋‚ด๋Š” ํ›…(hook) ๊ธฐ๋ฐ˜ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋จธ์ง€ํ•˜๊ณ  ๋‚˜๋ฉด ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ ์ž๋™์œผ๋กœ ๋Œ๋ ค์ค˜", "rebase ์งํ›„ ํšŒ๊ท€ ๊ฒ€์‚ฌ", "๋ธŒ๋žœ์น˜ ํ•ฉ์นœ ๋‹ค์Œ ๊นจ์ง„ ๋ฐ ์—†๋Š”์ง€ ๋ฐ”๋กœ ํ™•์ธ", "๋จธ์ง€ ํ›„ ํ†ตํ•ฉ ํšŒ๊ท€ ๊ฐ€๋“œ", "post-merge regression guard", "run smoke tests after every merge", "catch integration regressions after rebase"์ฒ˜๋Ÿผ ๋จธ์ง€ยทrebase ์งํ›„ ํšŒ๊ท€ ๊ฐ€๋“œ๋ฅผ ๊ฑธ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์ด๋ผ Claude Code์—์„œ๋Š” hooks ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (๊ตฌ๋ถ„: ํŒŒ์ผ ํŽธ์ง‘ ์งํ›„ ์—ฐ๊ด€ ํ…Œ์ŠคํŠธ๋Š” looping:post-edit-test-guard, ์ปค๋ฐ‹ ์ง์ „ ์ฐจ๋‹จ์€ looping:pre-commit-guard, ๋จธ์ง€ ์ค‘ ์ถฉ๋Œ์„ ํŒŒ์ผ๋ณ„๋กœ ํ‘ธ๋Š” ๊ฑด looping:merge-conflict-resolver, ๋ฐฐํฌ๋œ ์Šคํ…Œ์ด์ง•์— ์Šค๋ชจํฌ๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:staging-smoke-test)

2026-06-16
pr-babysitter
software-developers

์ผ์ • ๊ฐ„๊ฒฉ(์˜ˆ 15๋ถ„)๋งˆ๋‹ค watch ๋ผ๋ฒจ์ด ๋ถ™์€ ์—ด๋ฆฐ PR๋“ค์„ ์ ๊ฒ€ํ•ด์„œ โ€” ๋ฆฌ๋ทฐ์–ด๋ฅผ ๋„›์ง€ํ•˜๊ณ , CI๋ฅผ ๊ณ ์น˜๊ณ , main๋ณด๋‹ค ๋’ค์ฒ˜์กŒ์œผ๋ฉด rebase ํ•˜๋Š” ์ธํ„ฐ๋ฒŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์—ด๋ฆฐ PR๋“ค ์ฃผ๊ธฐ์ ์œผ๋กœ ๋Œ๋ด์ค˜", "PR babysitter", "PR ์ƒํƒœ 15๋ถ„๋งˆ๋‹ค ์ฒดํฌํ•ด์„œ CI ๊ณ ์น˜๊ณ  rebase ํ•ด์ค˜", "watch ๋ผ๋ฒจ PR ๊ด€๋ฆฌ", "babysit my PRs", "keep PRs green on a schedule"์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ PR์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฑด๊ฐ•ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋‹จ์ผ PR์„ ๋จธ์ง€ ๊ฐ€๋Šฅ ์ƒํƒœ๊นŒ์ง€ ๋Œ๊ณ  ๊ฐ€๋Š” ๊ฑด looping:ship-pr-until-green, ์›๊ฒฉ CI ํ•œ ๊ฑด๋งŒ ๊ฐ์‹œํ•˜๋Š” ๊ฑด looping:ci-failure-watcher, ๋จธ์ง€๋œ PR ์•Œ๋ฆผ ๊ฐ์‹œ๋Š” looping:pr-watch-loop)

2026-06-16
pr-self-review
software-quality-assurance-analysts-and-testers

PR์„ ์—ด๊ธฐ ์ „์— ์ž์‹ ์ด ์ž‘์„ฑํ•œ diff๋ฅผ ์‹œ๋‹ˆ์–ด ๋ฆฌ๋ทฐ์–ด์˜ ๋ˆˆ์œผ๋กœ ์ง์ ‘ ๋ฆฌ๋ทฐํ•˜๊ณ  โ€” ๋ฒ„๊ทธยท์—ฃ์ง€์ผ€์ด์Šคยท๋„ค์ด๋ฐยท๋ˆ„๋ฝ๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ์•„ ๊ณ ์น˜๊ณ  โ€” ๊ฐ™์€ ์ž‘์—…์„ 3ํšŒ ๋ฐ˜๋ณตํ•˜๋Š” ์ˆ˜๋™ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "PR ์˜ฌ๋ฆฌ๊ธฐ ์ „์— ๋‚ด diff ์…€ํ”„ ๋ฆฌ๋ทฐํ•ด์ค˜", "PR ์—ด๊ธฐ ์ „ ์ž์ฒด ๋ฆฌ๋ทฐ ์„ธ ๋ฒˆ ๋Œ๋ ค์ค˜", "๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ ์‹œ๋‹ˆ์–ด์ฒ˜๋Ÿผ ๋ฆฌ๋ทฐํ•˜๊ณ  ๊ณ ์ณ์ค˜", "diff ์…€ํ”„ ๋ฆฌ๋ทฐ", "self-review my diff before the PR", "PR self-review", "review my own diff like a senior"์ฒ˜๋Ÿผ PR ์ œ์ถœ ์ง์ „์— ์Šค์Šค๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋Œ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๊ตฌํ˜„ ํ›„ ๋””๋ฒ„๊ทธ ์ฝ”๋“œยท๋ฐ๋“œ์ฝ”๋“œยท๋„ค์ด๋ฐ ์ •๋ฆฌ ํŒจ์Šค๋Š” looping:de-sloppify-pass, ๋ณ„๋„ ๊ฒ€์ฆ์ž๊ฐ€ buildยทlintยทtest๋ฅผ ๋…๋ฆฝ ์‹คํ–‰ํ•˜๋Š” ๊ฑด looping:independent-verifier-pass, ์‹ค์ œ๋กœ PR์„ ์—ด๊ณ  CI๋ฅผ green๊นŒ์ง€ ๋Œ๊ณ  ๊ฐ€๋Š” ๊ฑด looping:ship-pr-until-green, ์ด๋ฏธ ๋–  ์žˆ๋Š” ์—ฌ๋Ÿฌ PR์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋Œ๋ณด๋Š” ๊ฑด looping:pr-babysitter)

2026-06-16
pr-watch-loop
software-developers

codex-watch ๋ผ๋ฒจ์ด ๋ถ™์€ ์—ด๋ฆฐ PR๋“ค์„ 15๋ถ„๋งˆ๋‹ค ํด๋งํ•ด์„œ โ€” CI ์ƒํƒœยท๋ฆฌ๋ทฐ ์ง„ํ–‰ยท๋งˆ์ง€๋ง‰ ํ™œ๋™์„ ์š”์•ฝํ•˜๊ณ , ํšŒ๊ท€(regression)๋‚˜ ๋ฉˆ์ถ˜ ์Šค๋ ˆ๋“œ(stale thread)๋ฅผ ํ‘œ์‹œํ•˜๊ณ , watch ๋Œ€์ƒ PR๋งˆ๋‹ค ํ•œ ์ค„ ์ƒํƒœ ๋ฆฌํฌํŠธ๋ฅผ ๋‚จ๊ธฐ๋Š” ์ธํ„ฐ๋ฒŒ ๊ฐ์‹œ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์—ด๋ฆฐ PR๋“ค 15๋ถ„๋งˆ๋‹ค ๊ฐ์‹œํ•ด์ค˜", "PR ํ™œ๋™ ํด๋งํ•ด์„œ ํšŒ๊ท€/๋ฉˆ์ถ˜ ์Šค๋ ˆ๋“œ ํ‘œ์‹œํ•ด์ค˜", "watch ๋ผ๋ฒจ PR ์ƒํƒœ ๋ฆฌํฌํŠธ ๋Œ๋ ค์ค˜", "PR ์›Œ์น˜ ๋ฃจํ”„", "PR watch loop", "poll watched PRs", "flag stale PR threads", "watch open PRs for regressions"์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ PR์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ง€์ผœ๋ณด๊ณ  ๋ฆฌํฌํŠธํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋ฆฌ๋ทฐ์–ด ๋„›์ง€ยทCI ์ˆ˜์ •ยทrebase๊นŒ์ง€ ์ ๊ทน์ ์œผ๋กœ ๋Œ๋ณด๋Š” ๊ฑด looping:pr-babysitter, ์›๊ฒฉ CI ํ•œ ๊ฑด์„ green๊นŒ์ง€ ๊ฐ์‹œยท์ˆ˜์ •ํ•˜๋Š” ๊ฑด looping:ci-failure-watcher, ๋‹จ์ผ PR์„ ๋จธ์ง€ ๊ฐ€๋Šฅ ์ƒํƒœ๊นŒ์ง€ ๋Œ๊ณ  ๊ฐ€๋Š” ๊ฑด looping:ship-pr-until-green, ๋‚ด diff๋ฅผ ์‹œ๋‹ˆ์–ด์ฒ˜๋Ÿผ ์…€ํ”„ ๋ฆฌ๋ทฐํ•˜๋Š” ๊ฑด looping:pr-self-review)

2026-06-16
pre-commit-guard
software-quality-assurance-analysts-and-testers

git commit ๋ช…๋ น์ด ์‹คํ–‰๋˜๋ ค๋Š” ์ˆœ๊ฐ„์„ ๊ฐ€๋กœ์ฑ„, ์ปค๋ฐ‹ ์ „์— ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ๋Œ๋ฆฌ๊ณ  ์‹คํŒจํ•˜๋ฉด(์Šค์œ„ํŠธ๊ฐ€ ๋นจ๊ฐ€๋ฉด) ์ปค๋ฐ‹์„ ๋ง‰์•„ ๊นจ์ง„ ์ฝ”๋“œ๊ฐ€ ํžˆ์Šคํ† ๋ฆฌ์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ํ›…(hook) ๊ธฐ๋ฐ˜ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ปค๋ฐ‹ ์ „์— ํ…Œ์ŠคํŠธ ๋Œ๋ ค์„œ ์‹คํŒจํ•˜๋ฉด ๋ง‰์•„์ค˜", "๊นจ์ง„ ์ฑ„๋กœ ์ปค๋ฐ‹ ๋ชป ํ•˜๊ฒŒ", "์ปค๋ฐ‹ ์ „ ๊ฐ€๋“œ ๊ฑธ์–ด์ค˜", "pre-commit ํ›…์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฐ•์ œ", "pre-commit guard", "block commits when tests fail", "run tests before git commit"์ฒ˜๋Ÿผ ์ปค๋ฐ‹ ์ง์ „ ์ฐจ๋‹จ ๊ฐ€๋“œ๋ฅผ ๊ฑธ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์ด๋ผ Claude Code์—์„œ๋Š” hooks ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (๊ตฌ๋ถ„: ํŽธ์ง‘ํ•  ๋•Œ๋งˆ๋‹ค ์—ฐ๊ด€ ํ…Œ์ŠคํŠธ๋Š” looping:post-edit-test-guard, ๋จธ์ง€ยท๋ฆฌ๋ฒ ์ด์Šค ์งํ›„ ์Šค๋ชจํฌ๋Š” looping:post-merge-regression-guard, ์ „์ฒด ์Šค์œ„ํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ green๊นŒ์ง€ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:test-until-green)

2026-06-16
ralph-story-executor
software-developers

prd.json์— ์ ํžŒ ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์— ๋”ฑ ํ•˜๋‚˜์”ฉ, "๋งค๋ฒˆ ์ƒˆ ์ปจํ…์ŠคํŠธ(fresh-context)"๋กœ ๊ณจ๋ผ ๊ตฌํ˜„ํ•˜๊ณ  โ†’ testยทlintยทbuild ๋ฐฑํ”„๋ ˆ์…”(backpressure) ๊ฒ€์‚ฌ๋ฅผ ๋Œ๋ฆฌ๊ณ  โ†’ ์ปค๋ฐ‹ํ•˜๊ณ  โ†’ progress.md์— ๋ฐฐ์šด ์ ์„ ๊ธฐ๋กํ•œ ๋’ค ๋‹ค์Œ ์Šคํ† ๋ฆฌ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ž๋™ํ™” ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์Šคํ† ๋ฆฌ๊ฐ€ passes: true๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋ž ํ”„ ๋ฃจํ”„ ๋Œ๋ ค์ค˜", "prd.json ์Šคํ† ๋ฆฌ ํ•˜๋‚˜์”ฉ ๋‹ค ๊ตฌํ˜„ํ•ด์ค˜", "๋ฐฑ๋กœ๊ทธ ์Šคํ† ๋ฆฌ ์ž๋™์œผ๋กœ ๋๊นŒ์ง€ ์ฒ˜๋ฆฌํ•ด์ค˜", ".ralph ์Šคํ† ๋ฆฌ ์‹คํ–‰", "Ralph Story Executor", "run the ralph loop", "implement the prd stories one by one", "execute the backlog until every story passes"์ฒ˜๋Ÿผ .ralph/ ์Šค์บํด๋”ฉ์— ์Œ“์ธ ์Šคํ† ๋ฆฌ๋ฅผ ๋ฌด์ธ์œผ๋กœ ํ•˜๋‚˜์”ฉ ์™„์ฃผ์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ฒดํฌ๋ฆฌ์ŠคํŠธํ˜• spec.md ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑด looping:spec-first-ship, ์‹คํŒจ๊ฐ€ ๊ฐ™์€ ์‹์œผ๋กœ ๋‘ ๋ฒˆ ๋ฐ˜๋ณต๋˜๋ฉด .ralph/guardrails.md์— ์‚ฌ์ธ์„ ๋‚จ๊ธฐ๋Š” ๊ฑด looping:guardrails-learning-loop, ํ…Œ์ŠคํŠธ๋ถ€ํ„ฐ ์“ฐ๋Š” TDD ๋ฐ˜๋ณต์€ looping:autoloop-tdd, ๋ธŒ๋žœ์น˜์—์„œ ๊ตฌํ˜„โ†’ํ‘ธ์‹œโ†’PR๊นŒ์ง€ ๋Œ๊ณ  ๊ฐ€๋Š” ๊ฑด looping:ship-pr-until-green)

2026-06-16
reflexion-debug-loop
software-developers

๋””๋ฒ„๊น…์ด ๊ฐ™์€ ์ž˜๋ชป๋œ ์ˆ˜์ •์„ ๋น™๋น™ ๋„๋Š” ๊ฑธ ๋ง‰์•„์ฃผ๋Š” ๋””๋ฒ„๊น… ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์žฌํ˜„(repro)์— ์‹คํŒจํ•  ๋•Œ๋งˆ๋‹ค ๋ฌด์—‡์„ ์‹œ๋„ํ–ˆ๊ณ  ์™œ ์‹คํŒจํ–ˆ๋Š”์ง€, ๋‹ค์Œ์—” ๋ญ˜ ํ”ผํ• ์ง€ ํ•œ ์ค„ ํšŒ๊ณ ๋ฅผ `.loops/reflexion.md`์— ์ ์–ด ๋‘๊ณ , ๊ทธ ๊ธฐ์–ต์„ ์ฝ์€ ๋’ค ์ด์ „๊ณผ ๋‹ค๋ฅธ ํ‘œ์  ์ˆ˜์ •์„ ์‹œ๋„ํ•ด ์ด์ „์— ์‹คํŒจํ•˜๋˜ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ(์ข…๋ฃŒ ์ฝ”๋“œ 0)ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ด ๋ฒ„๊ทธ ๊ณ„์† ๋ชป ๊ณ ์น˜๊ฒ ์–ด ํšŒ๊ณ  ๋‚จ๊ธฐ๋ฉด์„œ ๋””๋ฒ„๊ทธํ•ด์ค˜", "๊ฐ™์€ ์ˆ˜์ • ๋ฐ˜๋ณตํ•˜์ง€ ๋ง๊ณ  ๊ธฐ๋กํ•˜๋ฉด์„œ ๊ณ ์ณ์ค˜", "๋ฆฌํ”Œ๋ ‰์…˜ ๋””๋ฒ„๊ทธ", "ํšŒ๊ณ  ๊ธฐ๋ฐ˜ ๋””๋ฒ„๊น… ๋ฃจํ”„", "reflexion debug loop", "debug with reflection memory", "stop repeating the same failed fix"์ฒ˜๋Ÿผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ๋””๋ฒ„๊น…์ด ์ œ์ž๋ฆฌ๊ฑธ์Œ์ผ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋ฒ„๋ ค๋„ ๋˜๋Š” ์žฌํ˜„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งœ์„œ ๊ทผ๋ณธ ์›์ธ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฑด looping:investigation-script-loop, ๊ฐ™์€ ์‹คํŒจ๊ฐ€ ๋‘ ๋ฒˆ ๋‚˜๋ฉด ๊ฐ€๋“œ๋ ˆ์ผ์„ .ralph/guardrails.md์— ์ ๋Š” ๊ฑด looping:guardrails-learning-loop, ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ๊ทธ๋ƒฅ green๊นŒ์ง€ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:test-until-green, ๋ถˆ์•ˆ์ •ยท๊ฐ„ํ— ์‹คํŒจ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฑด looping:flaky-test-triage)

2026-06-16
security-audit-weekly
information-security-analysts

๋งค์ฃผ npm audit๋กœ ์˜์กด์„ฑ ์ทจ์•ฝ์ ์„ ์Šค์บ”ํ•˜๊ณ , ์‹ฌ๊ฐ๋„(critical/high/moderate)๋ณ„๋กœ ํŠธ๋ฆฌ์•„์ง€ํ•œ ๋’ค, ์•ˆ์ „ํ•œ ํŒจ์น˜๋ฅผ ์ œ์•ˆํ•˜๊ฑฐ๋‚˜ ์ ์šฉํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋งค๊ฒจ์ง„ ์ˆ˜์ •์•ˆ์ด ๋‹ด๊ธด ์ฃผ๊ฐ„ ์š”์•ฝ ๋ฆฌํฌํŠธ๋ฅผ ๋‚ด๋†“๋Š” ์ธํ„ฐ๋ฒŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์ฃผ๊ฐ„ ๋ณด์•ˆ ๊ฐ์‚ฌ ๋Œ๋ ค์ค˜", "๋งค์ฃผ npm audit ์ž๋™์œผ๋กœ ๋Œ๋ ค์ค˜", "์ทจ์•ฝ์  ์ •๊ธฐ ์ ๊ฒ€", "๋ณด์•ˆ ์ทจ์•ฝ์  ์ฃผ๊ฐ„ ๋ฆฌํฌํŠธ ๋งŒ๋“ค์–ด์ค˜", "7์ผ๋งˆ๋‹ค ๋ณด์•ˆ ์Šค์บ”", "Security Audit Weekly", "run npm audit weekly", "weekly security scan", "triage vulnerabilities by severity"์ฒ˜๋Ÿผ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ •๊ธฐ์ ์œผ๋กœ ์ ๊ฒ€ยท์ •๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์˜ค๋ž˜๋œ(outdated) ์˜์กด์„ฑ์„ ์ฃผ๊ฐ„์œผ๋กœ ์ ๊ฒ€ยท์—…๊ทธ๋ ˆ์ด๋“œ ์ œ์•ˆํ•˜๋Š” ๊ฑด looping:dependency-audit-weekly, high/critical ์ทจ์•ฝ์ ์„ ํ…Œ์ŠคํŠธ ๊ฒ€์ฆํ•˜๋ฉฐ ํ•˜๋‚˜์”ฉ ์‹ค์ œ๋กœ ๊ณ ์น˜๋Š” ๊ฑด looping:npm-audit-fix-loop, ํŒจํ‚ค์ง€๋ฅผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๋ฉฐ ๊นจ์ง์„ ๊ณ ์น˜๋Š” ๊ฑด looping:dependency-upgrade-one-by-one)

2026-06-16
ship-pr-until-green
software-developers

๋ธŒ๋žœ์น˜์—์„œ ๋ณ€๊ฒฝ์„ ๊ตฌํ˜„ํ•˜๊ณ  โ†’ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ โ†’ ์ปค๋ฐ‹ยทpush โ†’ PR ์—ด๊ธฐ โ†’ CI ๋Œ€๊ธฐ ์ˆœ์œผ๋กœ, ๋ชจ๋“  ์ฒดํฌ๊ฐ€ ํ†ต๊ณผํ•ด PR์ด ๋จธ์ง€ ๊ฐ€๋Šฅํ•ด์งˆ ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "PR ์ดˆ๋ก๋ถˆ ๋  ๋•Œ๊นŒ์ง€ ๋ฐ€์–ด์ค˜", "๊ตฌํ˜„ํ•˜๊ณ  PR๊นŒ์ง€ ์˜ฌ๋ ค์„œ CI green ๋งŒ๋“ค์–ด์ค˜", "์ด ๋ณ€๊ฒฝ PR ๋จธ์ง€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋๊นŒ์ง€ ๊ฐ€์ค˜", "PR ์—ด๊ณ  CI ํ†ต๊ณผ์‹œํ‚ฌ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต", "ship this PR until green", "open a PR and fix CI until it passes", "implement, push, and get the PR merge-ready"์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ์„ PR ๋จธ์ง€ ์ง์ „๊นŒ์ง€ ์™„์ฃผ์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ด๋ฏธ ์‹คํŒจํ•œ CI ํ•œ ๊ฑด๋งŒ ๊ณ ์น˜๋Š” ๊ฑด looping:fix-ci-until-green, ์›๊ฒฉ CI๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํด๋งยท๊ฐ์‹œํ•˜๋Š” ๊ฑด looping:ci-failure-watcher, ์—ฌ๋Ÿฌ PR์„ ์ •ํ•ด์ง„ ๊ฐ„๊ฒฉ๋งˆ๋‹ค ๋Œ๋ณด๋Š” ๊ฑด looping:pr-babysitter, PR ์—ด๊ธฐ ์ „ ์ž์ฒด ๋ฆฌ๋ทฐ๋งŒ ๋„๋Š” ๊ฑด looping:pr-self-review)

2026-06-16
spec-first-ship
software-developers

spec.md์— ์ ์–ด ๋‘” ์š”๊ตฌ์‚ฌํ•ญ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๋”ฐ๋ผ, ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ๋ฏธ์ฒดํฌ ํ•ญ๋ชฉ ํ•˜๋‚˜๋ฅผ ๊ฒ€์ฆ๊นŒ์ง€ ๋๋‚ด๊ณ  [x]๋กœ ๋งˆํ‚นํ•˜๋Š” ๊ธฐํš(Planning) ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "spec.md ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ํ•ด์ค˜", "๋ช…์„ธ ๋”ฐ๋ผ ์š”๊ตฌ์‚ฌํ•ญ ํ•˜๋‚˜์”ฉ ๊ฒ€์ฆํ•˜๋ฉด์„œ ship", "์ŠคํŽ™ ๋จผ์ € ์ ๊ณ  ๊ทธ ์ˆœ์„œ๋Œ€๋กœ ๋งŒ๋“ค์–ด์ค˜", "์ฒดํฌ๋ฆฌ์ŠคํŠธ ๋‹ค ์ฒดํฌ๋  ๋•Œ๊นŒ์ง€ ๊ตฌํ˜„", "spec-first ship", "implement from spec.md one requirement at a time", "spec-driven implementation loop"์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ์ ์–ด ๋‘” ๋ช…์„ธ/์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ํ•ญ๋ชฉ์”ฉ ์™„์„ฑํ•ด ๋‚˜๊ฐ€๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: prd.json ์Šคํ† ๋ฆฌ๋ฅผ fresh-context๋กœ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ยท์ปค๋ฐ‹ํ•˜๋Š” ๊ฑด looping:ralph-story-executor, ์‹คํŒจ ํ…Œ์ŠคํŠธ ๋จผ์ € ์“ฐ๊ณ  ์ตœ์†Œ ๊ตฌํ˜„ํ•˜๋Š” TDD ๋ฃจํ”„๋Š” looping:autoloop-tdd, ๋ธŒ๋žœ์น˜์—์„œ ๊ตฌํ˜„ํ•ด PR ์˜ฌ๋ฆฌ๊ณ  CI green๊นŒ์ง€ ๊ฐ€๋Š” ๊ฑด looping:ship-pr-until-green, ๋ช…์„ธ ์—†์ด ๊นจ์ง„ ํ…Œ์ŠคํŠธ๋งŒ ์ „๋ถ€ ํ†ต๊ณผ์‹œํ‚ค๋Š” ๊ฑด looping:test-until-green)

2026-06-16
staging-smoke-test
software-quality-assurance-analysts-and-testers

๋ฐฐํฌ ์งํ›„ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ๊ณ ์ •๋œ ์Šค๋ชจํฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ(๋กœ๊ทธ์ธ/์ธ์ฆ, ํ•ต์‹ฌ ํ”Œ๋กœ์šฐ, ์›นํ›…, ์—๋Ÿฌ ๋ฒ„์ง“)๋ฅผ ๋Œ๋ ค์„œ, ์‹คํŒจํ•˜๋ฉด ๊ฐ€์žฅ ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ๊ณ ์น˜๊ณ  ์ „๋ถ€ ํ†ต๊ณผ(์ข…๋ฃŒ ์ฝ”๋“œ 0)ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "์Šคํ…Œ์ด์ง• ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ ๋Œ๋ ค์ค˜", "๋ฐฐํฌ ํ›„ ์Šค๋ชจํฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ํ™•์ธํ•ด์ค˜", "staging์—์„œ ๋กœ๊ทธ์ธ/ํ•ต์‹ฌ ํ”Œ๋กœ์šฐ/์›นํ›… ์ ๊ฒ€ํ•ด์ค˜", "์Šค๋ชจํฌ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ๊ณ ์ณ์ค˜", "run staging smoke checklist", "post-deploy smoke check", "Staging Smoke Test"์ฒ˜๋Ÿผ ์Šคํ…Œ์ด์ง• ๋ฐฐํฌ ๊ฒ€์ฆ์„ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ๋ฐฐํฌ ํ›„ healthยทsmoke ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ ํ•‘ํ•˜๋Š” ๊ฑด looping:deploy-verification-loop, ๋จธ์ง€ยท๋ฆฌ๋ฒ ์ด์Šค ์งํ›„ ์ž๋™ ์Šค๋ชจํฌ๋Š” looping:post-merge-regression-guard, E2E ์Šค์œ„ํŠธ ์ „์ฒด๋ฅผ green๊นŒ์ง€ ๋Œ๋ฆฌ๋Š” ๊ฑด looping:e2e-until-green, ๋กœ์ปฌ ์œ ๋‹› ํ…Œ์ŠคํŠธ ํ†ต๊ณผ๋Š” looping:test-until-green)

2026-06-16
test-until-green
software-quality-assurance-analysts-and-testers

ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด ์‹คํŒจ๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ฐ€์žฅ ์ž‘์€ ๊ทผ๋ณธ ์›์ธ์„ ๊ณ ์น˜๊ณ , ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ(์ข…๋ฃŒ ์ฝ”๋“œ 0)ํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "ํ…Œ์ŠคํŠธ ํ†ต๊ณผํ•  ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์ค˜", "๊นจ์ง„ ํ…Œ์ŠคํŠธ ๋‹ค ๊ณ ์ณ์ค˜", "ํ…Œ์ŠคํŠธ ์ดˆ๋ก๋ถˆ ๋งŒ๋“ค์–ด์ค˜", "ํ…Œ์ŠคํŠธ ๋‹ค green ๋˜๊ฒŒ", "make all tests pass", "test until green", "fix failing tests until they pass"์ฒ˜๋Ÿผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ ์ณ ์ „๋ถ€ ํ†ต๊ณผ์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์—๋Ÿฌ๋Š” looping:build-until-green, ์›๊ฒฉ CI ์‹คํŒจ ๊ฐ์‹œ๋Š” looping:ci-failure-watcher, ๋ถˆ์•ˆ์ •ยท๊ฐ„ํ— ์‹คํŒจ ๋ถ„๋ฅ˜๋Š” looping:flaky-test-triage, ์ปค๋ฒ„๋ฆฌ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ๋Š” looping:coverage-until-threshold)

2026-06-16
visual-regression-until-match
software-quality-assurance-analysts-and-testers

UI ๋ณ€๊ฒฝ์— Playwright๋‚˜ Percy ๋น„์ฃผ์–ผ ์Šค๋ƒ…์ƒท์„ ๋Œ๋ ค์„œ, ์˜๋„์น˜ ์•Š์€ ์‹œ๊ฐ์  diff๋Š” ๊ณ ์น˜๊ณ  ์˜๋„๋œ ๋ณ€๊ฒฝ๋งŒ ๋ฒ ์ด์Šค๋ผ์ธ์— ๋ฐ˜์˜ํ•ด ์Šค๋ƒ…์ƒท์ด ๊น”๋”ํžˆ ์ผ์น˜(์ข…๋ฃŒ ์ฝ”๋“œ 0)ํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋‹ซํžŒ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋น„์ฃผ์–ผ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ๋Œ๋ ค์ค˜", "UI ๋ฐ”๋€ ๊ฑฐ ์Šคํฌ๋ฆฐ์ƒท diff ์žก์•„์ค˜", "Playwright ๋น„์ฃผ์–ผ ์Šค๋ƒ…์ƒท ๋งž์„ ๋•Œ๊นŒ์ง€", "์˜๋„ ์•ˆ ํ•œ ์‹œ๊ฐ ๋ณ€ํ™” ๊ณ ์ณ์ค˜", "Percy/Chromatic ๋ฒ ์ด์Šค๋ผ์ธ ์ผ์น˜์‹œ์ผœ์ค˜", "visual regression until match", "run visual snapshot tests", "fix unintended visual diffs until baselines match"์ฒ˜๋Ÿผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ๋””์ž์ธ ๋ณ€๊ฒฝ ํ›„ ํ”ฝ์…€ ๋‹จ์œ„ ํšŒ๊ท€๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ ์ณ ๋ฒ ์ด์Šค๋ผ์ธ์— ์ˆ˜๋ ด์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. (๊ตฌ๋ถ„: ์ „์ฒด E2E ์‚ฌ์šฉ์ž ํ๋ฆ„ ๊ฒ€์ฆ์€ looping:e2e-until-green, ์ ‘๊ทผ์„ฑ ์œ„๋ฐ˜ ์ ๊ฒ€์€ looping:a11y-audit-until-clean, ์ผ๋ฐ˜ ๋‹จ์œ„ยทํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ green๊นŒ์ง€๋Š” looping:test-until-green)

2026-06-16