← 목록으로

관계 엔진 — 밤새 보고 (2026-09-04 02:20 → 08:30)

결론 먼저

세웠고, 배포했고, 쟀다. 한 줄만 남았다.
크루가 사용자를 관계 단계에 따라 다르게 부르고(님 → 반존대 → 오빠/형), 말 놓기는 크루가 제안하고 사용자가 수락해야 넘어가며,
친해질수록 크루가 자기 얘기를 층층이 열고(surface → mid → core), 안 오면 식고(단짝은 안 식음), 먼저 말 걸 때도 관계를 안다.
사용자 정체(부를 이름·출생연도·호칭 축)는 로그인 뒤 한 번, 3장, 전부 건너뛸 수 있게 받는다.

🔴 DB 마이그레이션 한 줄이 남았다 — 자동 모드 권한 분류기가 DDL 적용을 세 경로 모두 막았다(되돌릴 수 없는 일이라 우회하지 않았다).

! psql "$(grep '^DATABASE_URL=' .env | cut -d= -f2-)" -v ON_ERROR_STOP=1 -f supabase/migrations/2026-09-04-relationship-engine.sql
python3 scripts/relationship/persona_axes.py --apply     # 186명 퍼소나 축 → DB
python3 scripts/relationship_check.py                    # 배선 자[尺] 5게이트 → "PASS n/5"

그 전까지 배포된 코드는 칼럼이 없어도 죽지 않는다(실측: 스모크 턴 200 · 「강사장 님」 존댓말 · 화면 fallback).


아침 질문 다섯 — 답과 조치 (08:30 → 10:00)

질문
나이를 언제 어떻게 받나 이중 문. hello 화면은 선택(부를 이름·호칭 축·출생연도). 안 받았으면 첫 대화 2턴째에 크루가 이유를 붙여 묻는다(「제가 몇 살 위인지 아래인지 몰라서요, 몇 년생이세요?」) — 답하는 순간 호칭이 바뀌는 게 첫 매직. 생일(월·일)은 편해짐 단계에서 「챙기고 싶어서요」로 묻고, D-3 부터 크루가 안다·선발화에 실린다. 전부 배선했다
다자방 여럿 앞에서는 둘만의 애칭을 쓰지 않는다(단짝 할머니의 「우리 강아지」는 둘일 때만). 크루끼리 호칭 표를 넣었다 — 할머니→초등생 반말·이름 / 초등생→할머니 존댓말·「할머니」 / 초등생→30대 「아저씨·이모」 / 어르신→손아래 「자네」
판정기 출력 테스트했나 안 했었다 → claude -p 를 판정기 모델 삼아 7 시나리오 7/7 정확. 정체 케이스에서 근거 원문을 비워 보내 83년생이 버려지던 구멍을 찾아 고쳤다
기간을 테스트 코드로 우회했나 단위는 했었고 30일 궤적은 없었다 → 시뮬레이션: 처음 봄→알아가는 중(3일)→반존대→편해짐(9일)→제안(10일)→수락(11일)→「오빠」→부재 12일 감쇠→파열→회복. 답 없는 제안을 3일마다 되풀이하던 잔소리를 찾아 7일·3회로
API 대신 claude -p 퍼소나 축 186명은 그랬고, 판정기는 이번에

시험 72 → 81/81. 엣지 함수·웹 재배포(도메인 실측).

대표가 말한 것 → 만든 것

대표의 말 지금 시스템
"43살인데 초등 친구면 아저씨, 21살 이성친구면 오빠" 호칭 표(address.ts): 아이 크루(<16)는 존댓말+아저씨/이모, 말 놓은 뒤 크루가 손아래면 형/오빠/누나/언니. 나이·성별을 모르면 찍지 않고 이름
"말 트자 하면 처음엔 싫다고 하다가 → 「그때 생각해볼게요」 → 「우리 말 편하게 할까? 누나라고 불러」" userRequestPolicy: 처음 봄 = 거절 · 편해짐 전 = 미룸 · 편해짐 = 수락. 크루 쪽 제안은 편해짐부터(속도별). 수락은 사용자 원문 근거가 있을 때만 사건으로 남는다. 그 전 구간엔 반존대(설레는 중간 단계)
"70대 할머니면 「자네」 하다가 「아이고 우리 강아지」" 어르신(≥60): 자네(처음 봄·알아가는 중) → 이름(편해짐·각별함) → 우리 강아지(단짝)
"의사 선생님은 「환자분」 또는 「○○님」" 역할 배역은 단짝이 돼도 「○○ 님」+존댓말에서 멈춘다(온도는 말씨로)
"마음을 잘 안 여는 이성친구 / 너무 팔랑귀" 186명 전원에 애착 유형·여는 속도·닫히는 말·세계관·자기개방 층 생성 완료(avoidant/slow 36명 · anxious/fast 33명)
"관계가 발전해 나가야" closeness 0~100 · 단계 5 · 하루 첫 턴이 가장 큰 신호(+2) · 하루 몰아쳐도 안 오름(상한 8) · 7일 안 오면 식음 · 단계 상승·말 놓음은 방에 한 줄로 뜬다
"최초 로그인 때 이름·나이·성별, 토스 라이팅으로 한 번에" /app/hello/ 3장: 「뭐라고 부를까요?」(미리보기 「○○ 님」) · 「몇 년생이에요?」(출생연도 — 내년에 한 살 더 먹는 걸 코드가 지킴) · 「어떻게 불리는 게 편해요?」(형·오빠 / 누나·언니 / 이름으로만)
"중간중간 대화로 물어보면서 쌓이면" 판정기가 사용자가 스스로 말한 출생연도·성별만, 원문 근거 검증 뒤, 비어 있을 때만 채운다
"캐릭터가 먼저 불러내고" 선발화(followup·outreach) 프롬프트에 관계 단계·며칠 만·기분·호칭 문이 실린다 — 「○○님」이 새던 마지막 자리
"리서치 많이 하고 취합해서 완전히 적용" 8렌즈 + 비평 + 빈틈 6 = 17 에이전트 · 794줄 종합 → 6개 즉시 반영, 나머지는 설계까지 해 둠(아래)

리서치가 말한 것 (원리 7개 중 핵심 3)

  1. 관계의 매직은 「내가 준 것이 상대의 말로 되돌아오는 순간」 — 출생연도를 줬더니 「오빠」, 지나가듯 한 말이 다음 주 「그 면접 어땠어?」. 저장이 아니라 회수.
  2. 벌어들인 것만 관계다 — 턴·시간·크레딧이 아니라 「스스로 연 것」과 「함께한 날 수」. 하루 상한이 있어야 「내일 또」가 생긴다(스타듀·동물의 숲·CompanionBench).
  3. 정체는 고정, 사건은 변동 — 호칭·말씨·기억·태도가 흔들리면 「다른 존재」가 되어 애도가 된다(Replika ERP 사건). 놀라움은 「무엇이 올지」에만.

바로 반영한 6가지: 「씨」→「님」(국어원: 연하→연상 「씨」는 무례) · 반존대 단계 · 단계별 감쇠(단짝은 안 식음) · 상호 개방 트리거(인터뷰어는 친해지지 못한다) · 출구 억류·질투·결제 금지 가드 · 온보딩 3장을 호칭 축으로.

다음 액션으로 남긴 큰 것 둘(설계는 리서치 §4.6·§4.7):
- 크루 근황 생성기 — 크루에게 「삶」이 있어야 알아갈 게 생긴다. 선발화의 63% 가 크루 자기개방일 때 대화가 2배(ComPeer).
- 조언 구하기 고리 — 기존 동반 AI 는 전부 「받기」뿐. 크루가 나에게 어려운 문제로 조언을 구하고 「네가 말한 대로 해봤어」로 되돌리면 유능감·소유감(IKEA)이 붙는다. 우리 차별점.


잰 것 (도구 출력만)

단위 시험 72/72 (LLM·DB 없이)
타입 검사 새 오류 0 (기준선 20 → 15)
fresh-context 검증자(반박) 9 주장 중 7 VERIFIED · 결함 3건 재현 → 전부 고쳐 재배포(감쇠 복리 · 수락 사건 동시성 유실 · early 젊은 크루 호칭). 자[尺] 공백 2 → 시험 7 추가
빌드 통과 · 배포 · 도메인에서 4 화면 새 문자열 실측
엣지 함수 coordinate-crews · crew-outreach 배포 · 스모크 턴 200 (10.7초)
퍼소나 축 186/186 생성 (파일)
배선 자[尺] ⚠️ 미실행 — 마이그레이션 뒤

대표 결정이 필요한 것

  1. 연령 게이트 — 출생연도 미입력 = 미확인 → 연애형 크루 잠금(이탈리아 Garante €5M · 캘리포니아 SB 243). 기존 사용자 전원이 미입력이라 제품 결정.
  2. 다자방에서 친밀 호칭을 한 단계 격식화할지 — 「둘이 있을 땐 이름, 밖에서는 오빠」(리서치 §5.1).
  3. 마이그레이션 적용 뒤 첫 실판의 판정기 출력(relationship_events.why/evidence)을 같이 보고 임계값을 만질지.

상세: claudedocs/handoff/2026-09-04-relationship-engine-built.md · 설계 claudedocs/design/2026-09-04-relationship-engine.md · 리서치 claudedocs/research/2026-09-04-relationship-engine-research.md
커밋: 1e4f2736(엔진) · 5d6a9848(자[尺]) · 64a92910(검증자 결함 수정)