ADR-0013 — 협업 wiki 진입점 (Slack→raw / GitHub Issue→wiki 2단계 정책)¶
Context¶
ADR-0012는 "1인 단계" 한정 운영 룰북이었다. 사용자 확인 결과 실제로는 기획자·디자이너·마케터가 이미 결합되어 있고, 본인(사용자) 본인도 일상 wiki 운영을 로컬에서 직접 손대지 않겠다는 입장이다. 결과적으로 ADR-0012의 D1("변경 주체 ingest 책임")·D10("본인 = hub") 양쪽 가정 모두 깨졌다.
단순 자동화(Slack 이모지 1개로 wiki merge까지)는 위험 ↑ — 환각·오해·미공개 협상 유출 사고. 그래서 본 ADR은 2단계 분리 게이트 정책을 채택한다:
- 1단계: 박제 — Slack
@wiki-bot멘션 또는#wiki-inbox게시 → wiki-bot이 raw layer(immutable)에 자동 박제. 사고 위험 낮음 (raw는 hook으로 보호 + git history 추적). - 2단계: 반영 — raw → wiki 정식 페이지 반영은 GitHub Issue를 게이트로 통과. 본인이 라벨 review·조정 후
wiki:ready-to-ingest라벨 부착 시 GitHub Action이 wiki PR 자동 생성, 본인이 review·merge.
본 ADR은 정책·메커니즘만. Slack bot 라이브러리·GitHub Action 구조·Issue 라벨 컨벤션·시크릿·비용 등 인프라 디자인은 ADR-0014로 분리. 디자이너·마케터 워크플로는 ADR-0015로 분리.
Decision¶
§A — 2단계 분리 흐름도¶
1단계 (Slack → raw, 자동)
─────────────────────────
[팀원] Slack `@wiki-bot` 멘션 또는 `#wiki-inbox` 게시
+ 본문 / Notion 링크 + 선택 태그
↓
[wiki-bot] (자동)
- Notion 링크 있으면 → /sync-notion → raw/notion/<page>.md
- 본문만이면 → raw/meetings/<yyyy-mm-dd>-<slug>.md
- 가드레일 자동 분류 (반영 / 참고 / 금지)
- GitHub Issue 자동 생성 (요약 + 분류 라벨 + raw 경로)
- Slack 알림 broadcast (thread reply + #wiki-notify):
"raw/<...> 박제 완료 / Issue #N 생성 / 자동 분류: {반영|참고|금지}"
↓
[raw layer 갱신 완료] — wiki는 아직 안 건드림
2단계 (GitHub Issue → wiki, review 게이트)
─────────────────────────────────────────
[GitHub Issue (자동 생성)]
- 제목: "[wiki:{category}] {raw 요약}"
- 본문: raw 변경 요약 + 영향 wiki 페이지 후보 + ingest 카테고리 판정 사유
- 라벨: wiki:반영 / wiki:참고 / wiki:금지 + 선택 태그 (#plan #meeting 등)
↓
[본인] Issue review
- 라벨 조정 (반영 ↔ 참고 ↔ 금지 재분류 가능)
- 코멘트로 ingest 지침 ("이 페이지 강조해줘" 등)
- "wiki:ready-to-ingest" 라벨 추가 → trigger
↓
[GitHub Action 'wiki-ingest-from-issue.yml']
- Claude Code agent가 Issue 본문·코멘트·라벨 읽어 wiki PR 생성
- PR 본문: Issue 링크 + 변경 페이지 list + log.md draft entry
↓
[본인] PR review + merge
↓
[wiki 갱신 완료] + /log-append 자동 + Issue 자동 close
↓
[wiki-bot] Slack 알림 broadcast (#wiki-notify):
"wiki/<...> 갱신 완료 / Issue #N close / log entry +1 / PR 링크"
라벨 변경(반영 ↔ 참고 ↔ 금지 재분류, wiki:ready-to-ingest 부착·제거, wiki:stale 부착)도 모두 Slack 알림 broadcast — 본인·팀원이 wiki 상태를 별도 모니터링 없이 추적 가능.
§B — 1단계 (Slack → raw) 정책¶
raw/notion/·raw/meetings/는 immutable +deny-raw-write.shhook 보호 (CLAUDE.md §12)- wiki-bot은
/sync-notionskill 또는 heredoc 우회 패턴으로만 raw 작성 (사람·LLM 일반 쓰기 차단 일관) - 1단계 자동화는 본인 승인 게이트 없음 — raw 자체가 immutable이라 사고 위험 낮음. 잘못 박혀도 wiki 미반영 + git history로 추적·복구 가능
- 분당 메시지 빈도가 임계 넘으면 (남용·DDoS) wiki-bot rate limit (ADR-0014 인프라)
§C — 2단계 (GitHub Issue → wiki) 정책¶
- 모든 wiki 본문 변경은 GitHub Issue를 게이트로 통과. Issue 없이 wiki 직접 갱신 금지 (개발자 GitHub PR 경유 코드/spec 변경은 예외 — §E)
- Issue 자동 생성 → 본인 라벨 review →
wiki:ready-to-ingest라벨 추가 시 GitHub Action 트리거 - wiki PR은 Claude Code agent가 Issue 컨텍스트(본문·코멘트·라벨) 읽어 생성. 본인 review + merge
- Issue close 시점: wiki PR merge 완료 시 자동
- Issue가 1주 이상 미처리면
wiki:stale라벨 자동 부착 + Slack 알림 (ADR-0014 정책 디테일)
§D — 가드레일 3카테고리¶
| 카테고리 | 의미 | wiki 반영 처리 |
|---|---|---|
| 반영 | 의사결정·도메인 모델·API·가격·컴플라이언스·ADR 트리거 사유 | 정식 wiki 페이지(concepts·domains·decisions) 갱신 PR |
| 참고 | 보조 자료·추후 의사결정 후보·검증 필요·맥락만 보존 | wiki/inbox/<yyyy-mm-dd>-<slug>.md 또는 draft 상태(status: drafted)로만. 정식 페이지 X |
| 금지 | PII·미공개 협상(가격/계약/채용)·credentials·trade secret·험담·검증 안 된 추측 | wiki 격리. raw에만 보관. Issue는 만들지만 wiki:금지 라벨로 close. wiki PR 트리거 X |
이 카테고리는 ADR-0012 §C "반드시·보류·금지"의 사용자 표현 명확화 — 본 ADR로 명명 통일. 봇이 자동 분류 → 본인이 Issue에서 라벨 수정으로 재분류 가능. 카테고리 변경 시 처리 로직 자동 재실행.
§E — 역할별 워크플로¶
| 역할 | 1단계 (Slack → raw) | 2단계 (Issue → wiki) |
|---|---|---|
| 기획자 | Notion PRD 작성 → @wiki-bot 멘션 + Notion 링크 + #plan 태그 |
Issue 자동 생성. 본인이 라벨 조정 + wiki:ready-to-ingest |
| 회의 진행자 | 회의 종료 → @wiki-bot 멘션 + 본문/메모 링크 + #meeting 태그 |
자동 Issue. 가드레일 자동 분류 (PII 감지 시 wiki:금지 자동) |
| 개발자 | Slack 경유 X | 코드 PR + mvp-{back,front}/docs/frd/<X>/spec.md + wiki/domains 같이 작성. PR template 체크박스 (별도 가벼운 라운드) |
| 디자이너·마케터 | ADR-0015 분리 | ADR-0015 분리 |
§F — 양방향 Slack 알림 정책¶
| 이벤트 | 알림 대상 | 알림 내용 |
|---|---|---|
| 1단계 raw 박제 완료 | 멘션 thread reply + #wiki-notify 채널 |
raw 경로 / 자동 분류 결과 / Issue # |
| Issue 자동 생성 | #wiki-notify 채널 |
Issue 링크 + 라벨 + 요약 |
| Issue 라벨 변경 (본인 또는 봇) | #wiki-notify 채널 |
Issue # / 변경 전·후 라벨 |
wiki:ready-to-ingest 부착 |
#wiki-notify 채널 |
"wiki PR 생성 트리거" |
| wiki PR 생성 | #wiki-notify 채널 |
PR 링크 + 변경 파일 list |
| wiki PR merge → wiki 갱신 완료 | #wiki-notify 채널 |
변경 페이지 list + log entry + PR 링크 |
Issue 1주 미처리 → wiki:stale 자동 부착 |
#wiki-notify 채널 |
stale Issue list |
wiki:금지 라벨 → auto-close |
#wiki-notify 채널 |
"금지 카테고리, PR 생성 X" |
알림 채널·포맷·rate limit·DM vs 채널 등 디테일은 ADR-0014 인프라 라운드.
§G — 가드레일 = Issue 라벨링 강제 메커니즘¶
- 본인 의사결정 = Issue 라벨 클릭. 코드·CLI 손댈 일 0
- 라벨 조합이 자동화 트리거 조건:
wiki:반영+wiki:ready-to-ingest→ 정식 wiki PR (concepts·domains·decisions갱신)wiki:참고+wiki:ready-to-ingest→wiki/inbox/<slug>.md또는status: drafted로만wiki:금지→ auto-close, PR 트리거 X. raw는 그대로 유지- 봇 자동 분류 라벨을 본인이 재분류 시 처리 로직 자동 재실행 (예: 반영 → 참고 이동)
- Issue 검색·필터로 의사결정 누적 트래커 효과 (Stripe Spec-Kit·ThoughtWorks LADR 패턴 부분 채용)
§H — 봇·Issue 인프라 (ADR-0014 분리)¶
봇 이름·채널·이슈 라벨 컨벤션·GitHub Action 구조·시크릿 매트릭스·비용 추정·보안 모두 ADR-0014에서 결정.
본 ADR 시점 placeholder: @wiki-bot, #wiki-inbox, #wiki-notify, 라벨 wiki:반영/wiki:참고/wiki:금지/wiki:ready-to-ingest/wiki:stale.
Consequences¶
긍정¶
- 2단계 분리로 사고 위험 ↓ — raw는 immutable, wiki 반영은 Issue review 게이트
- 의사결정 누적 — 모든 wiki 변경 사유가 GitHub Issue로 영구 트래커 (Karpathy "compounding artifact" + ThoughtWorks ADR "git history" 두 패턴 모두 만족)
- 본인 일상 부담 = Issue 라벨 클릭 + PR merge만
- 양방향 Slack 알림으로 별도 모니터링 불필요
- 가드레일 3카테고리가 명확 — 봇·사람·LLM 모두 같은 분류 체계
- 자동 stale 라벨로 누락 보완
부정¶
- 2단계 통과 latency ↑ — Slack → Issue → 본인 review → ready-to-ingest → PR → merge. 분 단위 → 시간·일 단위 가능
- Issue 라벨·코멘트 컨벤션이 잘못 사용되면 봇이 잘못 트리거. 라벨 일관성 모니터링 필요
- 봇·Issue·GitHub Action·시크릿 운영 부담 (ADR-0014에서 구체화). 인프라 초기 비용 ↑
- 봇 자동 분류 LLM이 카테고리 잘못 판정 시 본인이 라벨 매번 수정 (false positive 누적 위험)
- Slack 알림 noise —
#wiki-notify채널이 자주 울리면 본인 알림 피로
Alternatives 거부¶
| 옵션 | 평가 |
|---|---|
| Slack 이모지 1개로 PR merge까지 자동 (검토했던 안) | ❌ 환각·오해 위험. wiki 반영은 의사결정 누적이라 review 게이트 필수 |
| 본인이 hub (ADR-0012 D1 그대로) | ❌ 사용자 명시 거부. 본인 일상 부담 ↑ |
| GitHub Issue 게이트 없이 PR 자동 머지 | ❌ Issue가 의사결정 트래커 역할 — 빼면 사유 휘발. 6개월 후 "왜 이 변경?" 답 불가 |
| Slack 스레드 자체를 의사결정 트래커로 | ❌ Slack 메시지는 검색·라벨·자동화 약함. 무료 플랜 90일 archive 한계. PII 제어 어려움 |
| 모든 wiki 변경에 사람 직접 작성 | ❌ ADR-0011 LLM=librarian 폐기. 시간 부담 ↑ |
| 디자이너·마케터도 본 ADR에 포함 | ❌ 워크플로 미정 — ADR-0015로 분리 (사용자 확정) |
| Granola·Otter·Fireflies 자동 transcript 즉시 도입 | ❌ 사용자 현재 도구는 수동 메모 (Notion/Slack). 별도 라운드 평가 |
향후 검토 항목¶
- ADR-0014 자동화 인프라 디자인
- Slack bot 라이브러리 비교 (Slack Bolt / Workflow Builder / Zapier·Make / n8n)
- GitHub Action 구조 (
.github/workflows/wiki-ingest-from-issue.yml) - Issue 라벨 컨벤션 + 자동 라벨링·stale·close 로직
- 시크릿: Slack bot token, GitHub PAT (issues:write + contents:write), Notion API
- 비용 추정 (월 Slack bot 호스팅, Claude API, GitHub Action 분, Issue·PR 수)
- 보안: Slack 입력 → GitHub 권한 escalation 차단, PII auto-redact (NIST AI RMF)
- rate limit·timeout·재시도 정책
- ADR-0015 디자이너·마케터 워크플로 — 같은 Slack→Issue 2단계 적용 가능성 확인
- PR template 체크박스 (별도 가벼운 라운드 — 개발자 워크플로 보강)
- Claude Code Hook 본인 적용 (PostToolUse Edit) — 본인 코드 작업 시 관련 wiki surface
Status¶
- 2026-05-25: accepted
Date¶
2026-05-25