Community코딩 & 개발github.com

Ship Gate (출시 게이트)

Next.js-on-Vercel + Supabase + GitHub Actions 스택을 위한 검증 게이트입니다. 무엇이든 출시, 배포, 라이브, 병합, 통과, 완료되었다고 주장하기 전에 실행하세요. 사용자가 검증을 요청하지 않더라도, 변경 사항이 프로덕션에 있다고 말하기 전, PR을 병합하기 전, CI가 통과했다고 보고하기 전, 상태를 문서에 기록하기 전에 사용하세요.

Ship Gate (출시 게이트)란 무엇인가요?

이 스킬은 '출시 게이트(Ship Gate)'로, 소프트웨어 출시 및 배포 과정에서 흔히 발생하는 검증 오류를 방지하기 위해 설계된 규칙 기반 검증 시스템입니다. 특히 Next.js-on-Vercel과 Supabase, GitHub Actions로 구성된 현대적인 웹 개발 스택을 대상으로 하지만, 그 핵심 원칙인 '무엇이 이 주장을 거짓으로 만들 수 있는가?'라는 사고 방식은 모든 스택에 적용 가능합니다. 이 스킬은 단순히 CI가 통과했는지, PR이 병합되었는지, 배포가 'READY' 상태인지와 같은 피상적인 지표에 의존하는 대신, 실제 프로덕션 환경을 직접 질의하고 검증할 것을 강력히 요구합니다. 배포 검증, CI 검증, 타입 및 린트 게이트, 데이터베이스 변경, 환경 설정 등 다섯 가지 주요 영역에서 구체적인 함정(예: 잘못된 계정으로 CLI 실행, 'READY' 상태이지만 프로덕션이 아닌 배포 확인, 테스트 스위트가 데이터베이스를 전역 모킹하는 경우)을 식별하고 이를 우회하는 방법을 제시합니다. 각 게이트의 결과는 'PASS (근거)', 'NOT CHECKED (이유)' 형식으로 투명하게 보고해야 하며, 검증되지 않은 변경 사항에 대해서는 '출시되었다/배포되었다'라는 주장을 명시적으로 보류하도록 요구합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tderoussel/agent-skills/tree/main/skills/ship-gate

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

출시 게이트 (Ship Gate)

여기의 모든 규칙은 명백한 검사가 한 번 거짓 통과(false pass)를 반환했기 때문에 존재합니다. 주장을 하기 전에 게이트를 실행하고, 주장한 후에는 실행하지 마세요.

구체적인 내용은 여러분의 스택에 맞게 조정하세요. 핵심 원칙인 '무엇이 이 주장을 거짓으로 만들 수 있는가?' 는 모든 상황에 적용 가능합니다.

주장 규칙

프로덕션에 대한 주장은 프로덕션을 직접 질의해야 합니다.

통과하는 테스트는 프로덕션이 아닙니다. 병합된 PR은 프로덕션이 아닙니다. 녹색(green) 배포는 프로덕션이 아닙니다. 이 모든 것은 여러분이 주장하는 시스템과는 다른 시스템에 대한 주장입니다.

아무도 결과를 직접 눈으로 확인하지 않았다면, 그것은 '검증됨'이 아닙니다. 대신 실제로 확인한 내용을 말하세요.

배포 검증

  • 실제로 배포를 트리거하는 것이 무엇인지 알아두세요. Git 통합 호스트에서는 CLI 호출이 아니라 푸시(push)입니다. 프로젝트가 푸시로 배포될 때 CLI로 배포하면 사용자가 받는 빌드와 다른 빌드가 생성됩니다.
  • 프로젝트를 소유한 계정을 확인하세요. 로컬에 로그인된 CLI가 프로덕션 프로젝트를 소유하지 않은 개인 계정으로 인증될 수 있습니다. 그러면 모든 명령이 조용히 잘못된 대상을 대상으로 성공합니다.
  • 배포된 SHA에 대한 커밋 상태로 검증하고, 대시보드 한눈에 보는 것으로 검증하지 마세요.
  • 단순히 'READY' 상태인 배포가 아니라 현재 프로덕션인 배포를 확인하세요. 여러 개가 동시에 'READY' 상태일 수 있습니다.
  • 엣지/서버리스 함수는 앱과 별도로 배포됩니다. 병합된 PR이 엣지 함수를 배포하지는 않습니다. 버전을 명시적으로 확인하세요.
  • 클라이언트 전용 변경 사항은 함수 배포가 필요 없을 수 있습니다. 절대 오지 않을 배포를 기다리지 마세요.
  • 버전을 주장하기 전에 실시간 매니페스트를 다시 가져오세요. 병렬 작업이 여러분 아래에서 버전을 변경할 수 있습니다.

CI 검증

  • 모든 필수 컨텍스트에 대해 게이트를 실행하고, 첫 번째 녹색(green) 컨텍스트만으로 게이트하지 마세요.
  • 파이프 명령(piped command)에 게이트를 걸지 마세요. some-check | tail은 tail의 종료 코드를 보고하여 실제 실패를 가립니다. PIPESTATUS가 없는 셸(zsh는 bash와 다릅니다)에서는 이 실수를 하기 쉽습니다. 명령 자체의 상태를 확인하세요.
  • steps: 0은 작업이 실행되지 않았다는 뜻이지, 통과했다는 뜻이 아닙니다. Checks API는 아무 작업도 하지 않은 작업에 대해 결론(conclusion)을 보고할 수 있습니다.
  • 단계 없이 의심스럽게 빠른 실패는 보통 청구(billing) 또는 권한(permissions) 문제이지 YAML 문제가 아닙니다.
  • 실패한 작업만 다시 실행하면 브랜치의 오래된 스냅샷을 재생합니다. 먼저 브랜치를 업데이트한 후 다시 실행하세요.
  • Checks 목록은 생성되지 않은 작업을 생략합니다. 실패가 없다는 것은 통과의 증거가 아닙니다.
  • gh pr create는 명시적인 --base가 필요합니다. 그 주변의 연결된 heredoc는 조용히 실패할 수 있습니다.

타입 및 린트 게이트

  • 대규모 TypeScript 프로젝트는 증가된 Node 힙이 필요할 수 있습니다. 그렇지 않으면 tsc가 코드 오류처럼 보이는 방식으로 중단됩니다.
  • 타입 검사기와 린터가 실제로 커버하는 디렉토리를 알아두세요. 엣지 함수 디렉토리는 종종 둘 다에서 제외됩니다. 다른 런타임에서 실행된다면, 해당 런타임의 자체 검사기로 확인하세요. 테스트 작업은 타입 게이트가 아닙니다.
  • 작업 디렉토리가 아닌 워크트리(worktrees)나 클린 체크아웃(clean checkouts)에서 빌드하세요. 커밋되지 않은 변경 사항이 포함된 상태에서 빌드하지 마세요.

데이터베이스

  • 절대 프로덕션에 대해 스키마를 푸시하거나 마이그레이션을 임의로 실행하지 마세요. 프로젝트가 선택한 검토된 경로를 통해 스키마를 한 번만 적용하세요.
  • 실제 데이터베이스에 대해 새 저장 프로시저를 호출한 후에야 신뢰하세요. 모의(mock)는 실제 타입과 실제 모호성에서만 나타나는 런타임 오류를 숨깁니다.
  • 테스트 스위트가 데이터베이스를 전역적으로 모의(mock)한다면, 통과하는 단위 테스트는 데이터베이스에 대해 아무것도 증명하지 않습니다.
  • 트리거 관리 열(trigger-managed column)에 대해 절대 compare-and-set을 수행하지 마세요. 트리거가 쓰기 아래에서 값을 변경합니다.
  • 병합하기 전에 프로덕션 데이터에 대한 변경 사항의 영향 범위를 측정하세요. 로컬 시드(seed)에 비해 좁아 보이는 필터가 실제 행(row)의 매우 다른 비율과 일치할 수 있습니다.

환경 함정

  • 머신의 시간대를 절대 가정하지 말고 date를 실행하세요. 날짜 종속 테스트는 오프셋(offset)에서 실패하며, 그 실패는 코드 버그처럼 보입니다.
  • 설정되지 않은 git 신원(identity)은 배포를 차단하고 관련 없는 네트워크 오류로 표면화될 수 있습니다.
  • 호스트 환경 변수는 인라인 할당보다는 파일에서 설정하세요. 셸과 CLI는 값에 보이지 않게 개행 문자(trailing newlines)를 포함하여 값을 손상시킬 수 있습니다.
  • 예약된 작업의 성공은 작업 효과의 성공이 아닙니다. succeeded를 보고하는 실행기는 호출이 반환되었음을 의미할 뿐, 작업이 수행되었음을 의미하지는 않습니다. 효과를 검증하세요.

출력

각 게이트의 상태를 PASS (근거) 또는 NOT CHECKED (이유) 형식으로 명시하세요.

게이트가 실행되지 않았는데 실행된 것처럼 암시하지 마십시오. 어떤 게이트라도 실패하거나 확인되지 않은 경우, 변경 사항이 검증되지 않았음을 명확히 말하세요. 주장을 보류하는 것이 올바른 행동입니다.

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

tderoussel/codebase-audit

Runs a ranked, evidence-backed audit of a product, codebase, or subsystem, ending in a verify list that separates proven findings from inferred ones. Use when the user asks for an audit, a gap analysis, a deep read, a bug hunt, a readiness check, a re-audit, a state reconciliation, or asks what they are not seeing. Trigger phrases include "audit", "gap analysis", "what am I missing", "deep audit", "readiness", "bug hunt", "review the whole thing". Produces findings and a verify list; does not fix.

tderoussel/competitive-teardown

Researches a competing product against your own and produces a ranked build-or-ignore verdict, plus optional comparison-page copy. Use when the user names a competitor or asks how their product stacks up against one. Trigger phrases include "vs us", "competitor", "what does X have", "should we copy", "competitive gap", "teardown", "are we behind". Produces a ranked verdict with effort estimates and an explicit not-worth-copying list.

tderoussel/decision-council

Run a structured multi-perspective review of a decision instead of getting one agreeable answer. Use when the user says run a council, get me perspectives on this, should I do X, stress-test this decision, or is this a good idea.

tderoussel/fleet-brief

Authors a workstream brief for dispatching multiple parallel build agents across one codebase, with per-lane file ownership, shared-ground warnings, and a derived DO-NOT list. Use whenever work is about to be split across concurrent agents, workers, lanes, or waves — even if the user does not say "write a brief". Trigger phrases include "fan out", "parallel agents", "orchestrate this", "split into lanes", "workstreams", "run these in parallel", "review-gated build". Produces the brief; does not dispatch.

tderoussel/inbox-triage

Triage an email inbox — sort what needs a reply, draft the replies, flag what needs a decision, and surface what can be ignored or unsubscribed. Use when the user says triage my inbox, do my email, what's in my inbox, or clean up my email.

tderoussel/overnight-build

Composes an autonomous unattended Claude Code build prompt that survives usage-limit resets via BUILD_LOG.md checkpointing, plus the launcher that restarts it. Use when the user asks for an overnight build, an autonomous build, a build to run while they sleep, an unattended or unsupervised session, or any long build they will not be monitoring. Trigger phrases include "overnight build", "run overnight", "build while I sleep", "autonomous build", "let it run", "unattended". Produces a single copyable prompt; does not run the build.

tderoussel/session-log

Write a durable record of a work session — what was built, root-caused, or shipped — into the project's notes. Use when the user says log this session, write a session log, record this, or when a substantial piece of work has just finished and needs to be handed off to a future session.

tderoussel/vault-doctor

Audits and repairs an Obsidian vault's structural health — broken [[wikilinks]], ambiguous duplicate filenames, missing or malformed frontmatter, stale status markers, and hub notes whose state sections have gone cold. Use when the user asks about vault health, broken links, vault cleanup, dead links, orphan notes, tag consistency, or says the vault feels messy or out of date. Trigger phrases include "vault health", "broken links", "clean up the vault", "audit the vault", "is the vault current". Read-only by default; every repair is proposed before it is made.

관련 스킬