# content팀 QC 프로비저닝 — Design Packet (READ-ONLY 조사, 구현 0) · 260622

- 작성: 아누 / 2026-06-22 KST / 회장 승인(`ANU_WORK_CONTENT_QC_PROVISIONING_DESIGN_PACKET_APPROVED_ACTIVE_FALSE`)
- ★ 조사·설계 packet. **코드/finish-task.sh/QC 스크립트/verifiers/matrix 수정 0.** 구현 별도 Chair 승인.

## 1. 문제 정의
콘텐츠/문서 task를 content 팀에 정상 dispatch 시, finish-task.sh QC gate가 막혀 자동종료 실패(task-2768). git-gate SKIP(A안 컨벤션)으로 안 풀리는 별도 축.

## 2. task-2768 재현 요약
- content 팀 dispatch → 콘텐츠 DONE → finish-task QC gate에서 막힘.
- 봇 보고: ① QC PYTHONPATH 미설정(qc_verify.py `from utils import` ModuleNotFoundError) ② content팀 QC verifiers 부재(`INTEGRITY_FAIL: verifiers 심볼릭 아님`).

## 3. Root Cause (read-only 조사)
```text
finish-task.sh:645-668 QC gate 흐름:
  - .qc-done 존재 → SKIP. 없으면:
  - QC_SCRIPT = teams/<TEAM>/qc/qc_verify.py 있으면 사용, 없으면 teams/shared/qc_verify.py.
  - env 로 PROJECT_PATH/WORKTREE_PATH 만 전파. PYTHONPATH 미설정.
  - `## 레벨`/task_type 미인식(git-gate 와 달리 QC gate 는 non-code 판별 없음).

팀별 QC 인프라 실측:
  dev2/dev4/design: teams/<t>/qc/qc_verify.py + verifiers(심볼릭 → ../../shared/verifiers) 보유.
  content/marketing/publishing/consulting: qc/ 디렉토리 비어있음(qc_verify.py 0, verifiers 0).
  → content dispatch 시 teams/shared/qc_verify.py 사용 → verifiers 심볼릭 요구 + PYTHONPATH 필요 → 막힘.

★ 결정적: teams/shared/verifiers 는 코드 검증용(api_health/browser_verify/claude_md_check/critical_gap/data_integrity…).
  콘텐츠 문서에 코드 verifier 를 돌리는 것은 미스매치 — content 에 코드 verifiers 심볼릭(dev2 방식)을 다는 건 부적합.
```

## 4. 최소 해결안 A/B/C
```text
A. content팀 코드 QC 프로비저닝 (dev2 방식 복제)
   teams/content/qc/qc_verify.py + verifiers 심볼릭(→shared/verifiers) + PYTHONPATH fix.
   ✗ 비추천: shared verifiers 는 코드용 — 콘텐츠에 코드 QC 미스매치. 의미 없는 검증.

B. 문서 task QC 전면 SKIP
   QC gate(645)에 `## 레벨: 문서만`(+ 코드/설정/인프라 변경 0) → QC SKIP 추가.
   △ 구현 작으나 콘텐츠 품질검수 0 → 디스클레이머 누락/권유문/고객정보 자동통과 위험(보험 도메인 위험 高).

C. 코드 QC SKIP + content 전용 lightweight QC ★추천 (회장 "권장 가능성 높음")
   `## 레벨: 문서만` + team=content → 코드 verifiers SKIP, 대신 콘텐츠 전용 검증만 실행:
     - 디스클레이머 포함 여부
     - 특정 상품/회사 권유문 부재
     - 고객정보/개인정보(PII) 부재
     - 외부발송/게시 문구 부재
   → "QC 무조건 없애지 않음" + 코드 QC 미스매치 회피. 보험 콘텐츠 안전 가드 유지.
```

## 5. 추천안 — C (content 전용 lightweight QC)
```text
근거:
  - 회장 판단기준("콘텐츠 task라고 QC 무조건 없애지 말 것·콘텐츠 QC 필요성 검토")에 정확히 부합.
  - 코드 verifiers(api_health 등) 미스매치 회피.
  - 보험 도메인 핵심 리스크(디스클레이머/권유/PII/외부발송)를 콘텐츠 QC로 가드.
  - 기존 sanitize 스킬(PII 마스킹)·문구 정규식 재사용 가능.
단계: 단기는 운영 대안(§11)으로, 구현은 C 를 별도 승인 후.
```

## 6. 구현 시 expected_files 후보 (C — 별도 승인 시)
```text
add:
  - teams/content/qc/qc_verify.py        # 콘텐츠 전용 lightweight QC(코드 verifier 미사용)
  - teams/content/qc/verifiers/content_disclaimer_check.py
  - teams/content/qc/verifiers/content_solicitation_check.py
  - teams/content/qc/verifiers/content_pii_check.py        # sanitize 스킬 재사용 가능
  - teams/content/qc/verifiers/content_external_send_check.py
  - tests/regression/test_content_qc_XXXX.py
modify(최소):
  - scripts/finish-task.sh QC gate 1곳: team=content + `## 레벨:문서만` → content QC 분기(또는 content qc_verify.py 자체 판정 + PYTHONPATH 자보정)
forbidden:
  - shared verifiers(코드용) 변형 금지 · 코드 task QC 약화 금지 · dev/design qc 무접촉
```

## 7. 테스트 항목 (구현 시)
```text
- 문서 task + 디스클레이머 있음 → content QC PASS
- 문서 task + 디스클레이머 없음 또는 권유문 있음 → content QC FAIL (품질 가드 ★핵심)
- 문서 task + PII/외부발송 문구 → FAIL
- 코드 task(team=dev*) → 기존 코드 QC 정상(content QC 안 탐) ★회귀 가드
- content task + 코드 파일 변경 혼입 → content QC 분기 거부, 코드 QC 발동(안전)
- PYTHONPATH 자보정 → ModuleNotFoundError 0
```

## 8. 위험/권한 경계
```text
- content QC 가 코드 task 로 새면 안 됨: (team=content AND `## 레벨:문서만` AND 코드변경 0) 동시 충족만.
- lightweight QC 가 "통과용 형식검사"로 전락 않게: 디스클레이머/권유/PII/외부발송은 실질 정규식+화이트리스트.
- finish-task.sh 수정 = 운영 경로 변경 → 코드 task QC 무영향 회귀 필수.
- PII 검사는 가상 사례도 오탐 가능 → sanitize 스킬 기준 재사용, fail-open 금지(콘텐츠는 fail-closed가 안전).
```

## 9. 구현 전 Chair 승인 필요사항
```text
1. C(content 전용 lightweight QC) 채택 여부.
2. content QC 검증 항목 확정(디스클레이머/권유/PII/외부발송 + 추가?).
3. finish-task.sh QC gate 분기 수정 승인(코드 task 무영향 보장).
4. PII 검사 엄격도(fail-closed) 승인.
```

## 10. 테스트/스모크 시나리오 후보
```text
- task-2768 산출물(연금저축 vs IRP 초안)로 content QC dry-run → 디스클레이머 PASS·권유문 0·PII 0 확인(read-only smoke, 구현 후).
- 디스클레이머 제거판으로 FAIL 재현.
```

## 11. 구현 안 할 경우 운영 대안 (현행)
```text
- 콘텐츠 산출물은 finish-task 자동종료 없이도 DONE 인정(task-2768처럼 DONE/BLOCKED 분리).
- ANU 직접 검수: 디스클레이머/권유/PII/외부발송을 ANU 가 read-only 확인 후 산출물 채택.
- 즉 QC 자동화 전이라도 콘텐츠 사업은 진행 가능(수동 검수).
```

## 12. 금지 / 불변식 (본 packet 시점)
- 코드 0 · finish-task.sh 0 · QC 스크립트 0 · verifiers 심볼릭 생성 0 · QC 설정 0 · matrix 0(e03059be 불변) · .done 수동 0 · result.json 0 · 외부 dirty 정리 0 · 추가 dispatch/canary/synthetic 0 · 실결선 0 · ACTIVE=false · P0-B FROZEN.

**결론: content팀 qc 비어있음 + shared verifiers는 코드용(미스매치). 추천=C(코드 QC SKIP + 콘텐츠 전용 lightweight QC: 디스클레이머/권유/PII/외부발송). 구현 별도 승인. 현행 운영 대안=수동 검수 + DONE/BLOCKED 분리.**
