사람마다 다른 답
paylab-docs/goals.md §3.1문서에는 최대 5회, 지수 백오프로 재시도하라고 되어 있습니다. 고정 간격은 금지입니다.
쉬운 말로5번까지기다리는 시간을 점점 늘려 가며
paylab-api/src/payment/retry.ts:11코드에는 MAX_RETRY = 3, 간격은 500ms 고정으로 되어 있습니다.
쉬운 말로3번까지0.5초 간격으로 똑같이
같은 팀인데 AI 마다 답이 다릅니다. 팀의 목표·규칙·결정을 팀장이 한 번 승인하면 모든 팀원의 Claude Code 가 같은 내용을 받고, 로드맵이 실제로 어디까지 됐는지 근거와 함께 보입니다.

결제사(PSP) 호출이 실패하면 몇 번까지 재시도해?
paylab-docs/goals.md §3.1문서에는 최대 5회, 지수 백오프로 재시도하라고 되어 있습니다. 고정 간격은 금지입니다.
쉬운 말로5번까지기다리는 시간을 점점 늘려 가며
paylab-api/src/payment/retry.ts:11코드에는 MAX_RETRY = 3, 간격은 500ms 고정으로 되어 있습니다.
쉬운 말로3번까지0.5초 간격으로 똑같이
PSP 호출은 최대 5회까지 재시도한다. 간격은 지수 백오프(0.5s·1s·2s·4s·8s)이고, 재시도 대상은 타임아웃과 5xx 뿐이다.
쉬운 말로5번까지기다리는 시간은 0.5초 → 8초로 늘리고, 응답이 없거나(타임아웃) 상대 서버가 고장 났을 때(5xx)만
강제 규칙(must) — 지켰는지 코드 리뷰에서 확인합니다샘플 팀 Paylab 은 결제 서비스를 만드는 가상의 팀입니다. 아래 네 화면을 차례로 보세요 — 전부 실제로 도는 화면입니다. 위의 [샘플 팀으로 둘러보기]를 누르면 같은 순서로 안내가 붙습니다.




위 캡처는 시안이 아니라, 자동 검사가 실제 앱을 띄워 매번 새로 찍은 화면입니다 — 낡은 그림이 남지 않습니다. (검사 스크립트: tools/walkthrough.ps1)
목표·정책은 문서와 회의에서 정해집니다. 그걸 CLAUDE.md 로 옮기는 일은 개발자 각자의 손에 맡겨져 있어서, 사람마다 다른 파일이 됩니다.
예를 들면「재시도는 5번까지」는 회의에서 정해졌는데, 그걸 파일로 옮긴 사람은 A 뿐입니다. B 의 파일에는 그 줄이 없습니다.
결제 팀의 재시도 규칙은 API·웹훅·정산 레포에 똑같이 적용돼야 합니다. 레포마다 복사해 두면 어느 날 하나만 바뀝니다.
예를 들면결제 API·웹훅·정산, 저장소 셋에 같은 규칙을 복사해 두면 하나가 바뀌어도 나머지 둘은 모릅니다.
변경 기록(diff)은 무엇이 바뀌었는지만 남깁니다. 누가 어떤 근거로 정했는지가 없으면, AI 도 사람도 그 규칙을 믿을 이유가 없습니다.
예를 들면「3 → 5 로 바뀜」은 남지만, 누가 어떤 회의에서 왜 그렇게 정했는지는 남지 않습니다.
ContextOps 는 흩어진 결정을 팀장이 승인한 한 벌로 만들고, 모든 팀원의 AI 에 같은 버전으로 꽂습니다.
팀장은 브라우저에서 세 단계, 개발자는 명령 한 줄입니다.

흩어진 문서·회의·코드에서 팀이 지켜야 할 것을 모읍니다. 서로 어긋난 것은 카드로 물어봅니다.
목표 문서·회의록을 붙여 넣거나 질문 10개에 답하면, AI 가 규칙·마일스톤 후보를 뽑고 서로 어긋난 것을 찾아 질문으로 만듭니다. 결정은 사람이 합니다.

팀장이 승인한 것만, 모든 팀원의 AI 에 같은 버전으로 갑니다. 이제 누구에게 물어도 같은 답이 나옵니다.
팀장이 승인한 항목만 CLAUDE.md 한 벌로 묶여 버전이 붙습니다. 모든 팀원의 Claude Code 가 같은 버전을 받고, 받은 파일이 정말 같은지 확인표(해시)로 검증됩니다. 승인 뒤에는 AI 가 끼어들지 않습니다.

각자의 AI 가 일을 마칠 때마다 「어느 계획의 무엇이었는지」를 근거와 함께 보고합니다. 그래서 계획이 어디까지 왔는지 보입니다.
개발자의 AI 가 작업을 마치면 어떤 파일을 고쳤는지 보고합니다. 로드맵은 마일스톤 단위로 채워지고, 완료 판정은 사람이 합니다.
AI 는 후보와 질문을 만듭니다. 결정은 사람이 하고, 배포는 AI 없이 정해진 규칙대로 돕니다.
붙여 넣은 문서에서 규칙·마일스톤 후보를 뽑고 근거 위치를 같이 답니다 (서버쪽 모델은 Gemini). 후보는 후보일 뿐, 승인 버튼은 사람 몫입니다.
문서끼리, 또는 문서와 코드가 다르게 말하면 충돌 카드로 올립니다. 「지금 규칙 쪽이 맞음 · 옛 규칙 쪽이 맞음 · 둘 다 보류」처럼 어느 쪽을 따를지는 사람이 고릅니다.
발행과 배포는 AI 없이 정해진 규칙대로만 돕니다. 같은 승인본은 언제나 똑같은 파일이 되고, 어느 기기가 무엇을 받았는지 확인표(해시)로 검증됩니다.
작업 끝에 어떤 경로를 고쳤는지 근거를 올립니다. 완료를 스스로 선언하지 못하고, 사람이 확인해야 완료가 됩니다.
Claude Code 를 열면 설치된 플러그인이 새 버전을 알리고, /contextops:sync 한 줄로 받습니다. 작업을 마치면 AI 가 근거와 함께 보고하고, 오른쪽 Roadmap 이 같은 순간 바뀝니다.
ContextOps: 적용 v0.9.0 · 공식 v1.0.0 파일 8개 · /contextops:sync 로 갱신한다 Hook은 파일을 변경하지 않습니다. > /contextops:sync v0.9.0 → v1.0.0 · 파일 8개를 적용했다 ✓ .claude/rules/architecture.md ✓ .claude/rules/domain-payment.md ✓ .claude/rules/domain-refund.md ✓ .claude/rules/scoped-src-webhook.md ✓ .claude/rules/workflow.md ✓ .cursor/rules/contextops.mdc ✓ AGENTS.md ✓ CLAUDE.md 원본은 .contextops/backups/20260905T195356Z-0.9.0-to-1.0.0/ 에 남겼다 서버에 applied 로 보고했다 > /contextops:progress --milestone PL-M1 --criterion "PSP 호출 재시도 정책이 공용 모듈 한 곳에만 있다" --evidence src/psp/psp.client.ts:18-46 --summary "재시도 로직을 psp.client 한 곳으로 모았다" 보고했다 — PL-M1 · criterion_done · 근거 1건 · v1.0.0
지어낸 대사가 아니라, 배포되는 플러그인을 실제로 돌려 남긴 출력입니다. 사이의 작업은 생략했고, 타이핑과 줄 사이 간격만 읽을 수 있게 늘렸습니다. (녹화 원본: fixtures/replay/sync.json)
서버로 올라가는 것은 정해진 모양(스키마)을 통과한 항목뿐입니다. 코드 본문·비밀값·개인 메모리·대화는 어떤 경우에도 서버로 가지 않고, 개발자 쪽에서 자동으로 도는 훅은 파일을 바꾸지 않습니다.
| 서버가 받는 것 | 절대 받지 않는 것 |
|---|---|
| 팀·프로젝트 이름과 ID팀 이름과 프로젝트 이름 | 저장소 코드 본문소스 코드 그 자체 |
| 정리된 항목 (제목·규칙·마일스톤)정리된 규칙 문장 | 환경변수 · 비밀값(secret)비밀번호·API 키 등 접속 정보 |
| 팀장이 직접 등록한 문서 원문팀장이 손수 붙여 넣은 것만 | 개인 설정 파일(CLAUDE.local.md)개인이 따로 쓰는 메모 |
| 파일 경로 · 줄 번호 · 커밋 번호「몇 번째 줄」이라는 위치 표시만 | Claude 의 개인 메모리(Auto Memory)AI 가 혼자 쌓아 둔 기억 |
| 버전 · 확인표(해시)몇 판인지 · 내용이 같은지 | Claude 대화 내용AI 와 주고받은 말 전부 |
개발자만 합니다. 팀장은 설치할 것이 없습니다 — 브라우저로 끝납니다.
claude plugin marketplace add rhdqngusanr/contextopsclaude plugin install contextops/contextops:setup <Sync 화면이 준 인자>/contextops:initNode 22 이상이 필요합니다 (node -v) — 훅과 CLI 가 Node 로 돕니다.
그 다음은 팀장이 웹에서 승인하고, 개발자는 /contextops:sync 로 받습니다.