# 보안 메모: 설계 문서 raw key 노출 + redact (2026-06-27)

상태: `RAW_KEY_REDACTED_NO_LITERAL_RETAINED · ROTATE_DECISION_SEPARATE_PENDING`

## 사실 (key 값 재기재 금지 — 라벨만)
- 위치: `design_limited_pilot_onoff_rollback_spec_260627.md` (v1) 의 rollback 확인 명령 예시 1곳.
- 노출 대상: ANU owner cokacdir key 1건이 **literal**로 박혀 있었음 (값 본문은 본 메모에 재기재하지 않음).
- 전파: 해당 v1 문서가 **Telegram(회장 chat)으로 전송됨** — 즉 redact 전 사본이 메신저 측에 존재.

## 조치 (완료)
- v1 문서의 raw key literal을 `"$ANU_OWNER_KEY"` 환경변수 표현으로 **교체(redact)** 완료.
- designs 디렉토리 전수 재검색 → **raw key 잔존 0** 확인.
- v2 문서에는 처음부터 literal key 미포함 + "raw key redacted / no literal key retained" 명시.
- 이후 어떤 새 문서·보고서·Telegram·comment에도 key 값 재출력 금지(준수 중).

## rotate 판단 (자동 수행 안 함 — 별도 안건)
- 본 key가 **live credential**(ANU 운영 cokacdir 콜백 키)일 가능성이 높음.
- 그러나 key rotation은 ANU 운영 credential 전반(스케줄 발사·콜백·sendfile)에 영향 → **자동 rotate 금지**.
- 필요 판단 항목(별도 승인 안건): ① 실제 live credential 여부 ② 어디에 쓰이는지(스케줄/콜백/파일전송) ③ 교체 절차가
  무중단·안전한지 ④ 교체 시 기존 등록 스케줄/콜백 영향.
- → **`KEY_ROTATE_DECISION_REQUIRED`** 로만 보고. 회장 별도 결정 전까지 rotate 미실행.

## 재발 방지
- 설계/운영 문서의 명령 예시는 **항상 placeholder/환경변수/sealed loader 표현**만 사용.
- raw key·token·secret literal을 문서에 적지 않는다(doctrine: raw key 0).
