mock_openai.return_value = "fake response"처럼 모델 응답을 고정한 test는 계속 통과할 수 있어. 그 사이 SDK parameter, prompt, tool schema가 바뀌면 운영 환경만 깨져. 고정 mock은 실제 모델과 wire의 변화를 반영하지 못해.
실제 session을 capture해 replay해
실제 session event를 JSONL에 저장하고 CI에서 코드에 다시 흘려보내. 모델 event는 임의 fixture가 아니라 capture한 JSONL에서 읽어. final text, tool 순서, 전체 비용처럼 관찰 가능한 결과를 검증하면 logic 변화가 생긴 지점에서 실패해.
mock과 replay가 묻는 질문은 달라
- mock — 'X로 호출하면 내가 정한 Y를 반환했을 때 코드가 동작하는가?'
- replay — '실제 호출에서 받은 event sequence를 다시 넣으면 같은 final state에 도달하는가?'
cwkPippa JSONL은 저장 상태에서도 암호화돼
conversation별 JSONL line을 Fernet으로 암호화하고 passphrase는 office Mac Keychain에 둬. 다른 Mac에는 opaque blob으로 rsync되어 plaintext 파일로 남지 않아. 이 방식은 2026-04-28에 적용됐어.