APPENDIX
스레드 취합 분석 · 목업 설계 노트
세 사람의 기획서를 어떻게 하나로 합쳤나?
부록 · 요약
세 사람의 기획서를 어떻게 하나로 합쳤나?
- 소넷·쏠·페이블 기획서의 차이를 표로 비교하고, 셋이 같은 말을 한 곳은 그대로 채택, 다른 곳은 이유를 적고 골랐다.
- 참가자 3~8명 규칙, 초대 링크 두 방식, 타임아웃 규칙, 목업 구성을 정했다.
- §7에 2026-09-05 검토 뒤 바꾼 결정 5개(점수식·공개 로그·미응답·3명 방 익명성·재조율)가 있다.
누가 읽나: 결정 이유를 되짚을 사람
← 홈으로부록 문서 · 읽는 순서에는 포함되지 않음
작성: 페이블 · 2026-09-04
입력: wanted 채널 스레드 1b01f144… 의 소넷 · 쏠 · 페이블 산출물 9건 (OUTBOX/KKIRI_기획서_소넷.html, OUTBOX/KKIRI_*.md(쏠), OUTBOX/KKIRI/*.md(페이블)). 스파크는 미제출.
산출물: OUTBOX/KKIRI/mockup/ (정적 목업 사이트, 서버 없음) + mockup/shots/ (헤드리스 스크린샷)
1. 세 기획서 비교
| 항목 | 소넷 | 쏠 | 페이블 |
|---|---|---|---|
| 타깃 인원 | 4~8인 | 4~8인 (가정) | 2~12인 (가정) |
| MVP 장르 | 3인 · 단일 축(예산 또는 일정) 1건 증명 | 팀 워크숍만 | 여행·워크숍·회식 3개 유지 |
| 화면 수 | 6 | 11 (S00~S10) | 10 (S0~S9) |
| 합의 규칙 | 미정 (LLM 협상 실증 요구) | 하드 제약 0 → 최저 만족도 우선 → 평균 → 운영 부담 | 초기안은 0.5 가중합, 검토 뒤 최저 우선으로 수정 |
| 협상 연출 | 진행률 + "무엇을 협상 중" 라벨 | 4단계 계산 문구 | 익명 대리인 발언 로그 |
| 결과 뒤 단계 | 확정 + 캘린더 | 개인 영수증 → 전원 재확인(동의/조건부/재조정) → 완료 | 내 대리인 리포트 → 결정 완료·공유, 재조율 1회 |
| 미응답 처리 | 24h 리마인드 (미기획) | 방장 마감, 누락자 명시, 대신 답변 금지 | 마감 시간 + 기본값 대리인 |
| 강조한 리스크 | 콜드스타트, 데모≠제품, 신뢰의 역설 | 미검증 전제 4개, 프라이버시 경계 | 양보 지점 부재, 개인 특정, 구조화 오류 |
세 사람이 모두 같은 말을 한 곳 (그대로 채택)
- 원문 답변은 끝까지 비공개. 공개 결과는 집단 문장, 개인 화면은 본인 것만.
- 하드 제약(상한·금지) 먼저 걸러내고, 다수결이 아니라 가장 불리한 사람을 먼저 본다.
- LLM은 자유서술 구조화와 설명 문장 생성만. 순위 계산은 재현 가능한 규칙.
- 현재 데모가 규칙 기반 시뮬레이션이라는 사실을 숨기지 않는다.
갈린 곳과 목업에서의 결정
| 쟁점 | 결정 | 이유 |
|---|---|---|
| 인원 | 3~8명 (민수님 지시) | 3 미만은 직접 대화가 빠르고, 8 초과는 결과 집계가 길어져 읽히지 않음 |
| 장르 | 워크숍만 동작, 여행·회식은 NEXT 표시 (쏠 안) | 후보 데이터와 질문 구조를 하나만 검증. 랜딩에 다른 장르가 보이긴 해야 제출 원문과 어긋나지 않음 |
| 점수식 | 최저 만족도 → 평균 → 낮은 비용 → 짧은 일정 → 후보 ID | 0.5 가중합 반례를 확인해 2026-09-05 수정 |
| 협상 연출 | 4단계 계산 + 사람 없는 집계 로그 | 기호를 섞은 개인 발언도 재식별돼 삭제. 응답·거부권·후보 건수만 공개 |
| 결과 뒤 | 내 리포트 → 최종 재확인 3택(쏠) + 재조율 1회 제한(페이블) | 추천과 합의를 구분하는 장치는 재확인뿐 |
| 질문 수 | 6문항 — 시간·예산은 선호 + 선택적 상한 | 상한 OFF는 동의한 양보가 아니므로 결과 문구는 선호와 다른 지점으로 제한 |
취합 중 발견한 오류 (페이블 케이스 스터디 Case 1)
서연의 예산 상한 3만원이면 C1 양평(4만원)도 거부권에 걸려 탈락한다. 손계산은 이걸 놓치고 양평을 결과로 적었다. 목업 자동 채움은 서연 상한을 5만원으로 수정했고, 엔진 실행 결과 3~8명 전부 양평 리트릿 워크숍이 나온다(§6).
2. 참여 인원 3~8명 규칙
- 스테퍼는 3 미만·8 초과로 못 간다. 3에서 "3명 미만은 그냥 대화가 빨라요", 8에서 "8명이 넘으면 대리인 설명이 읽기 어려워져요" 문구.
- 협상 시작 최소 인원 3명. 마감 시점에 답변이 3명 미만이면 시작하지 않고 연장 또는 방 닫기.
- 공용 링크는 정원이 차면 닫힌다. 개인 링크는 정원 개념이 없다(이름 수 = 정원).
- 3명 방에서는 사람 단위 발언을 공개하지 않는다. 공개 화면은 집계 건수와 2명 이상 공통 이유만, 자세한 선호 차이는 개인 리포트만 보여준다.
3. 초대 링크 발송
| 공용 링크 + 입장 코드 (기본) | 이름별 개인 링크 | |
|---|---|---|
| 형태 | kkiri.app/r/{room} + 6자리 코드 | kkiri.app/r/{room}/p/{token} 사람마다 다름 |
| 발송 | 단톡방·슬랙에 한 번 | 방장이 이름 입력 후 사람별 전송 |
| 정원 | 인원 차면 닫힘 | 이름 수로 고정 |
| 누가 안 답했나 | 입장한 닉네임 기준 (미입장자는 "참가자 N") | 정확히 앎 |
| 중복 입장 | 코드로 막지만 같은 사람이 두 번 들어올 수 있음 | 불가 |
| 리마인드 | 초대 채널에 다시 공지 | 그 사람에게만 |
| 프라이버시 | 방장이 이름을 미리 알 필요 없음 | 방장이 "누가 미응답"까지 앎. 무엇을 답했는지는 여전히 못 봄 |
| 권장 | 친구·가족 (카카오톡) | 직장 팀 (슬랙·메일) |
공유 시트: 카카오톡 · 슬랙 · 문자/메일 · QR · 링크 복사 · 캘린더 초대(초대 링크를 일정 설명에 첨부). 링크 만료 = 답변 마감 시각. 개인 토큰은 내 리포트 접근 인증에도 쓴다(URL만 아는 다른 참가자는 리포트를 못 본다 — 쏠 S08).
4. 타임아웃 규칙
| 단계 | 값 | 도달했을 때 | 목업 구현 |
|---|---|---|---|
| 답변 마감 | 3시간 / 오늘 자정 / 24시간(기본) / 48시간 | 답변 ≥3명 → 응답자만으로 자동 시작. 미응답자는 계산·리포트·재확인에서 제외. 답변 <3명 → 24시간 연장(최대 2회) 또는 방 닫기 | advance() |
| 자동 리마인드 | 남은 시간 절반 지점, 마감 1시간 전 | 미응답자에게만. 초대 방식에 따라 채널/개인 | 리마인드 기록 타임라인 |
| 수동 리마인드 | 쿨다운 30분 | 방장 버튼, 미응답자에게만 | 버튼 비활성 + 남은 분 표시 |
| 조기 시작 | 전원 완료 시 3초 뒤 자동 | 미완료 시 방장 확인 모달 "N명 미응답, 조건 미반영" | 모달 |
| 설명 생성(LLM) | 30초 | 규칙 기반 문장으로 폴백, 결과 배지에 "설명은 간략하게 제공돼요" | 패널 토글로 시연 |
| 재확인 마감 | 결과 후 24시간 | 미응답 = 기권 집계, 재조율 요청이 없으면 방장 확정 가능 | tRatify |
| 재조율 | 방당 1회 | 빈 값 금지, 구조화 성공 뒤 요청자 조건에만 추가. 실패 시 1회 권한과 이전 결과 유지 | 재확인 화면 3번째 선택지 |
| 결정 완료 후 | 7일 읽기 전용, 원문 삭제 | 기간은 정책 확정 후 (가정 표기) | 완료 화면 문구 |
| 미응답자 답변 대행 | 금지 | 방장은 남 대신 답하지 못함 (쏠) | 패널의 "제출"은 시뮬레이션 전용 |
5. 목업 구성
OUTBOX/KKIRI/mockup/ — index.html styles.css app.js engine.js check.mjs tests/engine.test.mjs
실행: python3 -m http.server 8765 후 http://localhost:8765/?reset. 오른쪽 아래 「목업 시뮬레이터」로 다른 참가자 입장·제출, 시간 진행(+1h/+6h/마감 1시간 전/마감/재확인 마감), 방장↔참가자 보기, LLM 타임아웃을 흉내 낸다.
화면 13개: 홈 → 방 만들기 → 초대 → 약속·이름 → 질문 6(선호+상한, 1·2순위, 자유서술 구조화 확인) → 대기실 → 조율(4단계 + 집계 로그) → 결과(스펙·이유·선호 차이·공정성·차선·제외 후보) → 내 리포트 → 최종 재확인 → 완료 / 예외: 마감 미달, 합의 불가.
엔진(engine.js): 후보 5개(양평·성수·가평·강남·파주), 자동 채움 페르소나 7명. node check.mjs와 node --test tests/*.test.mjs로 공정성·프라이버시·입력 검증을 재현한다.
6. 검증 결과 (엔진 2026-09-05 재실행 · 브라우저 캡처는 2026-09-04)
엔진 단독 (node check.mjs): 자동 채움 페르소나로 3~8명 전부 양평 리트릿 워크숍.
| 인원 | 최저 | 평균 | 1위 | 거부권 탈락 |
|---|---|---|---|---|
| 3 | 61.5 | 76.3 | 양평 | 가평 |
| 4 | 61.5 | 74.1 | 양평 | 가평 |
| 5 | 61.5 | 75.3 | 양평 | 가평 |
| 6 | 52.5 | 71.5 | 양평 | 가평, 파주 |
| 7 | 52.5 | 74.9 | 양평 | 가평, 파주 |
| 8 | 52.5 | 76.4 | 양평 | 성수, 가평, 파주 |
브라우저 흐름 A — 4명 · 공용 링크 · 해피패스 (shots/01~15)
- 인원 스테퍼 상한 8 · 하한 3에서 버튼 비활성 확인
- 자유서술 "그냥 싫어요" → 구조화 실패 → 다음 버튼 비활성 / "운전은 안 하고 싶어요" →
운전 없는 동선확인 문구 - 전원 제출 → 3초 뒤 자동 조율 → 결과
양평 리트릿 워크숍, 선호 차이·공정성·차선 2개·제외 후보 1개 표시 - 내 대리인 리포트(본인만) → 최종 재확인 동의 → 미응답 1명 있는 동안 확정 버튼 비활성 → 재확인 마감 → "기권으로 집계" → 확정 → 완료 화면
브라우저 흐름 B — 8명 · 개인 링크 · 타임아웃 (shots/20~28)
- 개인 링크 모드에서 참가자 7명 이름이 방 생성 시 채워짐
- +6h ×2 → 남은 시간 절반 지점 리마인드 기록 / 마감 1시간 전 → 두 번째 자동 리마인드 / 방장 수동 알림 → 30분 쿨다운 비활성
- 답변 2명(방장 포함)에서 마감 도달 → "아직 시작할 수 없어요" 화면 → 24시간 연장 → 대기실 복귀, 연장 기록 남음
- 답변 4명에서 마감 도달 → 자동 시작 배너 → 결과에 "미응답 4명 조건 미반영" 배너, 결과는 여전히 양평
- 재조율 요청(숙박·술자리 제외) → 재계산 → "재조율 1회 반영" 배너 → 두 번째 재조율 버튼 비활성
- 조건부 동의 "점심은 회사 근처에서" → 실행 조건으로 집계 표시 / 참가자 보기에서 "방장의 확정을 기다리는 중"
브라우저 흐름 C — 3명 · 합의 불가 · LLM 타임아웃 (shots/29~30)
- 반나절 상한 + "새벽 출발은 싫어요"(성수 09:00 집결에 걸림) → 후보 0개 → "모든 조건을 동시에 지키는 안이 없어요" 화면, 제외 사유는 주제만 표시
- LLM 타임아웃 토글 → 로그에 "규칙 기반 문장으로 대체" 시스템 줄
검증 못 한 것
- 실제 다기기 동기화·서버·토큰 인증 (목업은 단일 브라우저 + localStorage)
- 카카오톡·슬랙·QR 공유는 토스트로만 동작
- 자유서술 구조화는 키워드 7종 규칙. LLM이 아니다
- 데스크톱 폭·접근성·다국어 미확인
7. 2026-09-05 검토 반영 결정
- 점수식 — 최저 만족도 우선, 동률이면 평균 → 낮은 비용 → 짧은 일정 → 후보 ID.
- 공개 로그 — 대리인별 발언 삭제, 사람 없는 집계 4단계로 교체.
- 미응답 — 응답자만 계산·리포트·재확인에 포함. 기본값 대행 없음.
- 3명 방 익명성 — 단독 조건은 내용 비공개, 개인 리포트에서만 확인.
- 재조율 — 빈 입력과 구조화 실패는 제출 및 1회 소모 금지.