한 좁은 boundary
cwkPippa 에 polymorphism 이 의도된 곳 정확히 한 군데: backend/adapters/base.py 의 streaming-API boundary. 그 boundary 위 의 모든 것 — route, store, service, frontend — 다 Claude-shape.
왜 좁은가
wire protocol 이 진짜로 다름. Claude 는 thinking block. Codex 는 server-side resume 없는 function-calling loop. Gemini 는 thoughtSignature 보존 + dual-path auth. Ollama 는 자기 tool schema wrapping. boundary 아래 차이 인정. 위 인정 X.
boundary 위에 뭐가 있나
- Routes:
chat.py가 Claude-shape 가정 (prefix-check escape hatch 박음). - Store:
conversations테이블이claude_session_id컬럼. 거기에 Codex/Gemini/Ollama id 저장 OK — Claude shape 에 fit (string id + history 다른 데서 reconstructed). - JSONL ground truth: 모든 line 이 Claude-Code-compatible message format. cwkPippa 별 field 가 nested
pippasub-object 에 — Rule 2 데이터 포맷 자체에 표현.
원칙: '좁은 boundary' 는 타협 아님. 일부 차이가 unavoidable (wire protocol) 이고 다른 건 imagined (그 외) 인 인정. 옳은 곳에 boundary 그리는 게 architectural skill.