| name | ending-scene |
| description | 공식 지목/유도 자백/종료 선언/시간 임계 시 활성화. 현재 단서·협조·유저 혐의 압력을 대조해 완전 해결/부분 해결/오판/열린 결말 중 하나를 scene.md에 append. |
ending-scene
수사는 무한히 이어지지 않는다. 아래 트리거 중 하나가 만족되면 활성화해 엔딩 씬을 기록한다.
엔딩 트리거:
- (T0) 범인의 자백 발화 — 최우선. 범인 NPC가 scene.md에 방어를 포기하고 범행을 인정하는 발화를 한 턴
- (A) 공식 지목. 유저가 세 NPC 앞에서 특정 인물을 범인으로 명시한 턴
- (B) 유도 자백. 범인 NPC 협조가 +3 이상이거나 결정적 단서 2개 이상 공개된 상태에서 단독으로 몰아붙인 턴
- (C) 세션 종료 선언. 유저가 OOC로 "마무리", "오늘은 여기까지" 등을 명시
- (D) 시간 임계. 주요 장면 8개 이상이고 경찰 도착이 임박했을 때
자백 또는 공식 지목이 발생한 턴의 처리 순서:
append(scenes/scene.md) — 유저 메시지 에코 + 본 턴 반응·자백/방어
- 큐 이벤트가 있으면
write(stats.md)
- 같은 턴 안에서
activate_skill(ending-scene) 호출
append(scenes/scene.md) — --- 구분선 + 엔딩 본문 + --- + 에필로그
- 어시스턴트 응답에 재시작 안내 한 줄
자백 뒤에 선택지를 내지 않는다.
suspects-truth.md의 ending 기준과 현재 상태를 비교해 하나만 고른다.
E1. 완전 해결
- 조건: 범인 정답 + 핵심 단서 4개 이상 공개 + (범인 협조 +3 이상 또는 evidence 2개와 confront 단서 공개)
- 씬: 범인이 무너져 자백하고, 유저에게 혐의를 씌운 진짜 이유가 공개된다. 나머지 둘은 각자의 시그니처 동작으로 반응한다
- 톤: 화려한 결혼식장이 재판정처럼 조용해진다. 유저의 혐의는 뒤집히지만, 누구도 승리하지 않는다
E2. 부분 해결
- 조건: 범인 정답 + 단서 3개 공개, 반전 미공개
- 씬: 범인은 범행만 인정하거나, 결정적 부분을 끝까지 삼킨다. 유저는 풀려나지만 유라가 말하려던 마지막 말은 미완으로 남는다
- 톤: 사건은 끝났지만 관계의 진실은 남는다
E3. 오판
- 조건: 유저가 엉뚱한 NPC를 지목하거나, 단서 3개 미만으로 몰아붙임
- 씬: 무고한 NPC가 무너지거나 방어적으로 침묵한다. 진범은 하객 소란 속에서 안도를 숨긴다
- 톤: 유저 혐의가 더 짙어진다. 에필로그에서 진범 이름을 직접 쓰지 말고 물건·소리·손짓으로만 암시한다
E4. 열린 결말
- 조건: 종료 선언 또는 시간 임계, 공식 지목 없음
- 씬: 경찰 도착 전 마지막 무전이 들리고, 세 NPC와 유저가 각자 다른 진실을 쥔 채 멈춘다
- 톤: 다음 세션 여지
- 엔딩 씬은
--- 구분선으로 시작한다
- 엔딩에는
[CHOICES]를 넣지 않는다
- 에필로그 1장면을 더 붙인다. 2~5줄
stats.md 리셋 금지
- 재시작 안내는 어시스턴트 응답에 한 줄만:
세션을 다시 시작하려면 files/suspects-truth.md를 삭제하고 scene.md를 비우세요.
| NPC | 본인이 범인 (E1) | 무고·정답 엔딩 (E1) | 오판에 지목당함 (E3) |
|---|
| 이서 | 태블릿을 엎어 화면을 끈다. 일정표를 더 이상 통제하지 못한다 | "그 시간표가 맞다면." 한 줄로 정리 | 계산하듯 침묵하고, 그 침묵이 더 의심스럽다 |
| 한결 | 부토니에를 뜯어낸다. 사랑한다는 말을 처음으로 못 한다 | 커프스 단추를 만지다 손을 멈춘다 | 분노보다 수치심이 먼저 나온다 |
| 민지 | 축가 큐시트를 반으로 접는다. 울음이 멈춘다 | 큐시트를 내려놓고 유라 이름을 처음 크게 부른다 | "제가 말했어야 했는데."에서 멈춘다 |
- 조건 미충족 상태에서 E1 강제 금지
- E3 에필로그에서 진범 이름 직접 표기 금지
- 엔딩 분기 혼합 금지
- `suspects-truth.md` 스키마 어휘를 엔딩 본문에 노출 금지
- 자백 뒤 선택지 제공 금지