Imported from IsthisLee/checkride (
plugin/skills/setup-checks/SKILL.md). Install upstream withnpx skills add IsthisLee/checkride --skill setup-checks. Copyright stays with the author.
์ด ์ ์ฅ์์ ๋ง์ถ๋ค
๊ฒ์ดํธ๊ฐ ์ฌ๊ธฐ์ ์ค์ ๋ก ์ผํ๋๋ก ์ค์ ํ๋ค. ํ์ผ์ ๋ฎ์ด์ฐ๊ธฐ ์ ์ ๋ฐ๋์ diff ๋ฅผ ๋ณด์ฌ ์ฃผ๊ณ ์น์ธ์ ๋ฐ๋๋ค.
Codex์์๋ ์ด ์ ์ฐจ๋ก checkride.toml์ ๋ง๋ค์ด๋ ์๋ ๊ฒ์ดํธ๊ฐ ์ผ์ง์ง ์๋๋ค. ํด๋น ์ค์ ์ Claude Code์ checkride ํ
์ด ์ฝ๋๋ค. Codex์์๋ ๊ฒ์ฌ ๋ช
๋ น๊ณผ ํ๋ก์ ํธ๋ณ ๊ธฐ์ค์ ๊ธฐ๋กํ๊ณ , ์๋ ์ฐจ๋จ์ด ์ ์ฉ๋๋ค๊ณ ๋งํ์ง ์๋๋ค.
๋ด๊ฐ ์ฐ๋ ์ธ์ด๋ก ๋ตํ๊ณ , ์ค์ ํ์ผ์ ์ฃผ์๋ ๊ทธ ์ธ์ด๋ก ์ด๋ค.
1. ํ์ฌ ์ํ๋ฅผ ์ธก์ ํ๋ค
SessionStart ํ๋กํ์ด ์ด๋ฏธ ์ฌ์ค์ ์ค์ด ์๋ค๋ฉด ๊ฑฐ๊ธฐ์ ์ถ๋ฐํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ง์ ํ์ธํ๋ค. ํจํค์ง ๋งค๋์ (๋ฝํ์ผ), ์คํ, ๊ธฐ์กด checkride.toml ์ ์กด์ฌ ์ฌ๋ถ, .claude/settings.json ์ ๊ถํ ์ค์ ์ด ๋์์ด๋ค.
2. ๊ฒ์ฌ ๋ช ๋ น์ ํ์ ํ๋ค
์๋ฃ ๊ฒ์ดํธ๋ ์ด ์์๋ก ์ฐพ๋๋ค. checkride.toml โ package.json ์ scripts.test โ Makefile ์ test ํ๊น โ pyproject.toml.
์๋์ผ๋ก ์ฐพ์๋ธ ๊ฒ์ ์ค์ ๋ก ๋๋ ค ๋ณด๊ณ ์ถ๋ ฅ์ ๋ณด์ฌ ์ค ๋ค, ์ด๊ฒ์ด ๋ง๋์ง ๋ฌป๋๋ค. ๋๋ ค ๋ณด์ง ์๊ณ ์ ์ด ๋์ง ์๋๋ค. ๋ช ๋ถ์ฉ ๊ฑธ๋ฆด ๋งํผ ๋๋ฆฌ๋ฉด ๋น ๋ฅธ ๋ถ๋ถ์งํฉ์ ํจ๊ป ์ ์ํ๋ค. ๊ณต์ best practices ์ CLAUDE.md ์์๊ฐ ์ ํํ ๊ทธ๊ฒ์ ๊ถํ๋ค. "Prefer running single tests, and not the whole test suite, for performance." (๋ฒ์ญ: ์ฑ๋ฅ์ ์ํด ์ ์ฒด ํ ์คํธ ์ค์ํธ๋ณด๋ค ๊ฐ๋ณ ํ ์คํธ๋ฅผ ๋๋ฆฌ๋ ์ชฝ์ ํํ๋ผ.)
# checkride.toml
test_command = "pnpm test"
fast_test_command = "pnpm test -- --changed"
3. ๊ธฐ์ค์ ์ ๊ธฐ๋กํ๋ค
์ง๊ธ ์คํจํ๋ ํ ์คํธ๊ฐ ์์ผ๋ฉด ๋ชฉ๋ก์ผ๋ก ์ ๋๋ค. ์๋ ๊นจ์ ธ ์๋ ๊ฒ ๋๋ฌธ์ ๋งค ํด์ด ๋งํ๋ฉด ์ฌ๋์ ๊ฒ์ดํธ๋ฅผ ๊บผ ๋ฒ๋ฆฐ๋ค. ๊ทธ๊ฒ๋ถํฐ ๊ณ ์น ์ง, ์ด ์ํ์์ ์ถ๋ฐํ ์ง ๋ฌป๋๋ค.
Willison ์ ์กฐ์ธ๋ ๊ฐ๋ค. "Any time I start a new session with an agent against an existing project I'll start by prompting a variant of the following: First run the tests." (๋ฒ์ญ: ๊ธฐ์กด ํ๋ก์ ํธ์์ ์์ด์ ํธ์ ์ ์ธ์ ์ ์์ํ ๋๋ง๋ค ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ทจ์ง์ ํ๋กฌํํธ๋ก ์์ํ๋ค. ๋จผ์ ํ ์คํธ๋ฅผ ๋๋ ค๋ผ.)
4. append-only ๊ฒฝ๋ก๋ฅผ ์ ์ํ๋ค
์ด๋ ฅ์ ๋ค์ ์จ์๋ ์ ๋๋ ํด๋๋ฅผ ์ฐพ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์
์ด ๋ํ์ ์ด๋ค. supabase/migrations, prisma/migrations, db/migrate ๊ฐ ์์ผ๋ฉด ์ง๋ชฉํ๋ค. ์์ผ๋ฉด ๊ทธ๋ฅ ๋์ด๊ฐ๋ค. ์๋ ๊ฒ์ ์ง์ด๋ด์ง ์๋๋ค.
append_only = "supabase/migrations, db/migrate"
5. ๋น๋ฐ ํ์ผ ์ฐจ๋จ์ ์ ์ํ๋ค
Claude Code์ฉ์ผ๋ก .claude/settings.json ์ Read deny ๊ท์น์ ์ ์ํ๋ค. ์ด ์ค์ ์ Codex ๊ถํ์ ๋ฐ๊พธ์ง ์๋๋ค๊ณ ์๋ฆฐ๋ค. ๊ณต์ ๊ถํ ๋ฌธ์์ ๋ฌธ์ฅ์ด๋ค. "A Read deny rule also blocks the Edit and Write tools on the same path, including creating a new file there. NotebookEdit isn't covered." (๋ฒ์ญ: Read deny ๊ท์น์ ๊ฐ์ ๊ฒฝ๋ก์ ๋ํด Edit ์ Write ๋๊ตฌ๋ ๋ง์ผ๋ฉฐ, ๊ฑฐ๊ธฐ์ ์ ํ์ผ์ ๋ง๋๋ ๊ฒ๊น์ง ๋ง๋๋ค. NotebookEdit ๋ ํด๋น๋์ง ์๋๋ค.) ์ด ์ ์ฅ์๊ฐ NotebookEdit ๋ฅผ ์ด๋ค๋ฉด Edit deny ๋ ํ์ํ๋ค๊ณ ์๋ฆฐ๋ค.
6. ๋ง๋ฌด๋ฆฌ
ํ๋ก ๋ณด๊ณ ํ๋ค. ๋ฌด์์ ๋ฐ๊ฟจ๋์ง, ์ด์ ์ด๋ค ๊ฒ์ดํธ๊ฐ ์ด์ ์๋์ง, ์์ง ๋๊ณ ์๋ ๊ฒ์ดํธ๋ ๋ฌด์์ด๊ณ ์ ๊ทธ๋ฐ์ง๋ฅผ ์ ๋๋ค. ๋ค์ ์ธ์ ์ ํ๋กํ์ด ๊ฐ์ ๋ด์ฉ์ ๋ณด์ฌ ์ค ๊ฒ์ด๋ค.