Repository navigation
TEST_CASES TASK_MANAGEMENT
작성일 2026-09-12. 운영 서버에 실제 저장된 데이터를 기준으로 작성한 태스크 관리(장소·태스크·이벤트·스토어·디바이스) 테스트 케이스. 데이터는 코드가 아니라 운영 브로커·로그에서 직접 수집했다 (수집 방법은 §0).
| 출처 | 내용 | 비고 |
|---|---|---|
MQTT retained orchestration/{sid}/dashboard 270세션 |
장소·태스크·선택지·준비물·디바이스·상품 매핑 | 세션마다 장소 4곳·태스크 3개씩 샘플링되므로 전체 카탈로그의 합집합 = 102 태스크 |
orchestration/store/list · devices/list · ai-companion/list · user-meta-prompt/list
|
상품 12 · 디바이스 16 · AI 동반자 5 · 메타 프롬프트 13 | 서버가 retained 발행하는 전체 목록 |
robot/spot-01/{waypoints,scenarios,estop,fault} |
SPOT 현재 상태 | 2026-09-12 01:30 UTC 기준 |
Loki (/grafana/) 최근 4일 서버 로그 |
이벤트 발행 실적, 요청 토픽 | 9/8 배포 이후분만 있음 |
orchestration-server/sql/seed_planning.sql |
이벤트 24종·선택지 정의 | 운영 DB와 동일 ID(EVT-21 발행 로그로 교차 확인) |
직접 확인 못 한 것 (백오피스에서 재확인 필요): 이벤트별 is_active·category(normal/sudden) 실제 값, 도착 자동화 규칙, 상품 카테고리, 장소별 콘텐츠(has_children 분기) 설정, 태스크의 description_prompt·is_active. DB 직접 조회는 접근 제한으로 못 했다.
| 장소 | 역할 | CCTV | short_summary 예 (LLM 생성) |
|---|---|---|---|
| 집 (시작, id …993d40668bfe) | STEP1 고정 | cam_51, diorama_01 / content.type=cctv | 외출 준비중, 출근 준비중, 등원 준비중 |
| 집 (종료, id …badea24d7812) | STEP4 고정 | cam_51, diorama_01 | 귀가 후 정리중, 장본 물품 정리중 |
| 마트 | STEP2/3 셔플 풀 | cam_52, diorama_01 | 장보는 중 |
| 공원 | STEP2/3 셔플 풀 | cam_52, diorama_01 | 운동중, 운동하는 중 |
| 차 | STEP2/3 셔플 풀 | cam_51, diorama_01 | 이동중, 차량 점검중 |
집이 시작/종료 두 개의 별도 장소 레코드라는 점에 주의(테스트에서 "집" 이름만으로 매칭하면 안 됨). 테스트 세션용 구형 집 레코드(id …5e0deea846b1, …f344140c0881, CCTV 없음)도 44세션에 남아 있다.
| 경로 | 관측 세션 수 |
|---|---|
| 집 → 차 → 마트 → 집 | 117 |
| 집 → 공원 → 마트 → 집 | 97 |
| 집 → 차 → 공원 → 집 | 85 |
| 집 → 마트 → 공원 → 집 | 62 |
| 집 → 공원 → 차 → 집 | 44 |
| 집 → 마트 → 차 → 집 | 37 |
| 집 → 차량 → 공원 → 집 | 7 |
| 태스크 | 타입 | 기획ID | 예정시각 | 연계 이벤트 | 특수 필드 | 세션수 |
|---|---|---|---|---|---|---|
| 내일 일정 알림 | basic | 19:00 | 385 | |||
| 아이와 숙제하기 | detailed | 19:01 | 385 | |||
| 마트 장봐온 물품 정리 | basic | 19:02 | 385 | |||
| 외출 준비 물품 체크 | packing | 07:05 | 준비물: 우산(슬롯3), 텀블러(슬롯5) | 264 | ||
| 컨디션 기반 하루 브리핑 | DAY_BRIEFING_BY_CONDITION | HOME-04 | 07:01 | - | 선택지: 정지; 디바이스: Diorama-CCTV#2 | 262 |
| 영양제 챙겨주기 | basic | HOME-13 | 07:18 | - | 232 | |
| 아이 등원 준비물 체크 | packing | 07:10 | 선택지: 에스코트해줘 (구독 필요: Spot 동행·에스코트 100pt) / 내가 알아서 가기; 준비물: 도시락통(슬롯1), 유치원가방(슬롯4) | 152 | ||
| 출근 준비물 체크 | packing | 08:01 | 준비물: 사원증(슬롯2), 텀블러(슬롯5); 디바이스: 반려로봇 | 134 | ||
| 홈 발렛 모드 | basic | 08:00 | 디바이스: 반려로봇; 첨부 | 55 | ||
| 빈 집 확인 | basic | 09:00 | 선택지: 알아서 걷기; 디바이스: Space-CCTV#1 | 46 | ||
| 간식/물병 준비 | (없음·구형) | 디바이스: 반려로봇 | 41 | |||
| 여벌 옷 준비 | (없음·구형) | 디바이스: 반려로봇 | 17 | |||
| 아이 가방 챙기기 | (없음·구형) | 디바이스: 반려로봇 | 16 | |||
| 아이와 공원 외출 준비 | packing | 준비물: 우산(슬롯3), 도시락통(슬롯1); 디바이스: 반려로봇 | 14 | |||
| 외출 전 집 상태 점검 | basic | 디바이스: 반려로봇 | 14 | |||
| 간식/물병 준비 | (없음·구형) | 11 | ||||
| 여벌 옷 준비 | (없음·구형) | 11 | ||||
| [TEST] LG 가전 전원 켜기 테스트 | basic | 08:01 | 10 | |||
| [EPI-01] AI 하루 여정 회고 | (없음·구형) | EPI-01 | - | 디바이스: Physical AI Hub | 10 | |
| [EPI-02] 새 하드웨어 설정·기억 이전 | (없음·구형) | EPI-02 | EVT-01 | 디바이스: Physical AI Hub | 10 | |
| 반려동물 이상 상황 알림 | (없음·구형) | HOME-07 | EVT-04 | 디바이스: 체험 태블릿 | 8 | |
| 반려동물과 하루 회고 | (없음·구형) | HOME-14 | - | 디바이스: 가정용 로봇 | 8 | |
| 식후 움직임 유도 | (없음·구형) | HOME-12 | - | 디바이스: 가정용 로봇 | 8 | |
| 아이와 귀가 맞이 | (없음·구형) | HOME-10 | - | 디바이스: 가정용 로봇 | 7 | |
| [HOME-05] 불 꺼진 거실 확인 | (없음·구형) | HOME-05 | - | 디바이스: 가정용 로봇 | 6 | |
| [HOME-06] 가전기사 방문 대응 | (없음·구형) | HOME-06 | EVT-05 | 디바이스: 체험 태블릿 | 6 | |
| [HOME-08] 냉장고 재고 확인 | (없음·구형) | HOME-08 | EVT-06 | 디바이스: 체험 태블릿 | 6 | |
| [HOME-09] 이사 후 로봇 대청소 | (없음·구형) | HOME-09 | EVT-07 | 디바이스: Physical AI Hub | 6 | |
| [HOME-11] 구매물품 정리 안내 | (없음·구형) | HOME-11 | - | 디바이스: 가정용 로봇 | 6 | |
| [HOME-15] 부모님 상태 확인 및 대응 | (없음·구형) | HOME-15 | EVT-03 | 디바이스: 체험 태블릿 | 6 | |
| [HOME-16] 홈 발렛 모드 실행 | (없음·구형) | HOME-16 | EVT-05 | 디바이스: Physical AI Hub | 6 | |
| [HOME-17] Spot 에스코트 서비스 | (없음·구형) | HOME-17 | - | 디바이스: Spot 로봇 | 6 | |
| 오늘의 가족 일정·이동 브리핑 | detailed | 디바이스: 반려로봇 | 5 | |||
| 구매물품 정리 안내 | (없음·구형) | 디바이스: CCTV | 4 | |||
| 아이와 귀가 맞이 | (없음·구형) | 디바이스: CCTV | 4 | |||
| 식후 움직임 유도 | (없음·구형) | 디바이스: 반려로봇 | 4 | |||
| 영양제 챙겨주기 | (없음·구형) | 디바이스: 반려로봇 | 4 | |||
| 귀가 후 가족 상태 확인 | basic | 1 |
| 태스크 | 타입 | 기획ID | 예정시각 | 연계 이벤트 | 특수 필드 | 세션수 |
|---|---|---|---|---|---|---|
| 오늘의 메뉴·재료 선택 | basic | MART-06 | 10:18 | EVT-19 | 206 | |
| 반려동물 케어 상품 추천 | basic | MART-08 | 18:15 | EVT-20 | 100 | |
| 타임세일 상품 비교 | detailed | MART-04 | 10:10 | EVT-10 | 90 | |
| 부모님 케어 상품 추천 | basic | MART-10 | 10:55 | EVT-21 | 69 | |
| 직접 픽업 동선 안내 | basic | MART-02 | 10:30 | EVT-18 | 65 | |
| Spot 밀키트 번들 수령 | basic | MART-07 | 18:12 | EVT-19 | 65 | |
| Spot 펫케어 키트 수령 | basic | MART-09 | 18:25 | EVT-20 | 55 | |
| 비 오는 날 귀가 준비 상품 선택 | basic | MART-12 | 18:27 | EVT-08, EVT-22 | 50 | |
| Spot 냉장고 보충 번들 수령 | basic | MART-03 | 07:48 | EVT-18 | 44 | |
| 냉장고 부족 재료 확인 | basic | MART-01 | EVT-06, EVT-18 | 디바이스: Physical AI Hub | 36 | |
| Spot 타임세일 번들 수령 | basic | MART-05 | 18:00 | EVT-10 | 28 | |
| 빈 집 확인 | basic | 디바이스: 반려로봇 | 22 | |||
| 홈파티 메뉴·상품 구성 | basic | MART-14 | 10:25 | EVT-23 | 20 | |
| Spot 부모님 케어 패키지 수령 | basic | MART-11 | 18:20 | EVT-21 | 18 | |
| [MART-17] AUM 드론 긴급배송 | basic | MART-17 | EVT-24 | 디바이스: Physical AI Hub | 15 | |
| [MART-16] 마트 재고 부족 확인 | basic | MART-16 | EVT-24 | 디바이스: Physical AI Hub | 13 | |
| Spot 귀가 준비 키트 수령 | basic | MART-13 | 10:25 | EVT-08, EVT-22 | 10 | |
| [MART-15] Spot 파티 바구니 수령 | basic | MART-15 | EVT-23 | 7 | ||
| 냉장고 보충 번들 수령 | (없음·구형) | 디바이스: spot | 3 | |||
| Spot 냉장고 보충 번들 수령 | (없음·구형) | 디바이스: spot | 3 | |||
| 냉장고 보충 번들 수령 | (없음·구형) | 디바이스: spot | 3 |
| 태스크 | 타입 | 기획ID | 예정시각 | 연계 이벤트 | 특수 필드 | 세션수 |
|---|---|---|---|---|---|---|
| 맞춤형 운동 루틴 | basic | PARK-01 | 09:00 | EVT-09 | 138 | |
| 비전 자세 코칭 | basic | PARK-03 | 09:08 | EVT-09 | 103 | |
| Spot 페이스메이커 | basic | PARK-02 | 18:46 | EVT-09 | 87 | |
| 희귀동물 관찰 | basic | PARK-08 | 12:13 | EVT-14 | 71 | |
| Spot 보물 힌트 | basic | PARK-06 | 08:36 | EVT-13 | 58 | |
| 희귀동물 도감 등록 | basic | PARK-09 | 10:08 | EVT-14 | 52 | |
| 플로깅 수거 인증 | basic | PARK-05 | 18:00 | EVT-11 | 45 | |
| 플로깅 지점 안내 | basic | PARK-04 | 09:16 | EVT-11 | 41 | |
| AR 크리처 포획 | basic | PARK-11 | 12:11 | EVT-15 | 38 | |
| Spot 크리처 탐색 동행 | basic | PARK-10 | 08:13 | EVT-15 | 선택지: [테스트] 임의의 선택지 (구독 필요: 코트 컨시어지 2000pt) / 알아서 따라가기 | 34 |
| AR 보물상자 탐색 | basic | PARK-07 | 10:16 | EVT-13 | 24 | |
| 브랜드 리워드 지점 안내 | basic | PARK-12 | 09:16 | EVT-16 | 21 | |
| [TEST] SPOT 테스트용임~~ | basic | 18:30 | 선택지: 그냥 해 좀!! / 그냥 기본으로 걷기; 디바이스: spot | 21 | ||
| 집 안 환기 | basic | 09:00 | 선택지: 기본으로 진행; 디바이스: LG퓨리케어 360 | 19 | ||
| Spot 희귀자원 탐사 안내 | basic | PARK-14 | 12:33 | EVT-17 | 16 | |
| 갑작스러운 비 대응 | basic | PARK-16 | 09:09 | EVT-08 | 14 | |
| 광고 콘텐츠 참여·리워드 수령 | basic | PARK-13 | 08:16 | EVT-16 | 11 | |
| AR 자원 카드 획득 | basic | PARK-15 | 09:31 | EVT-17 | 11 | |
| 페이스메이커 | (없음·구형) | 디바이스: spot | 3 | |||
| 플로깅 수거 인증 | (없음·구형) | 디바이스: CCTV | 3 | |||
| 희귀동물 관찰 | (없음·구형) | 디바이스: spot | 3 | |||
| 쇼핑하기 | (없음·구형) | 디바이스: 반려로봇 | 3 |
| 태스크 | 타입 | 기획ID | 예정시각 | 연계 이벤트 | 특수 필드 | 세션수 |
|---|---|---|---|---|---|---|
| 이동 일정 브리핑 | detailed | VEH-01 | 08:10 | - | 177 | |
| 차량 상태·주행 점검 | basic | VEH-03 | 09:06 | EVT-12 | 170 | |
| 여행자님의 맞춤 신차 견적이 준비되었습니다 | quote_briefing | 09:00 | 차량옵션 4개; issue: 여행자 맞춤 혜택 안내 | 80 | ||
| 도착/귀가 연계 브리핑 | basic | 디바이스: 차량 | 69 | |||
| 수소 충전 | hydrogen_charging | 디바이스: 차량 | 58 | |||
| [VEH-06] 스마트 충전·주차 계획 | basic | VEH-06 | - | 디바이스: 자율주행 차량 디스플레이 | 45 | |
| 가족과 떠날 준비, 새 차가 기다립니다 | vehicle_ready | 08:36 | 디바이스: 차량; 개인화옵션 1개; issue: 이전 차량 설정이 그대로 이어집니다 | 41 | ||
| 차량 관리 예약 | basic | 디바이스: 차량 | 33 | |||
| 출장지 업무 지원 | basic | 디바이스: 차량 | 28 | |||
| 여행자님, 오늘 출장 일정 확인하세요 | business_trip_briefing | 09:00 | issue: 출장 필수 체크사항 | 21 | ||
| [VEH-04] 정비 예약·경로 연결 | basic | VEH-04 | EVT-12 | 디바이스: 자율주행 차량 디스플레이 | 14 | |
| [TEST] LG 가전 공기청정기 실행 | basic | 08:30 | 13 | |||
| 나를 위한 신차 출고 | READY_TO_CAR_DELIVERY | 10 | ||||
| 에스코트 | basic | 선택지: 에스코트 동행! (구독 필요: Spot 동행·에스코트 100pt) / 그냥 너가 걸어가기 | 5 | |||
| [VEH-02] 아이 픽업·병원 경로 변경 | (없음·구형) | VEH-02 | EVT-02 | 디바이스: 자율주행 차량 디스플레이 | 4 | |
| [VEH-05] 차량 서브스텝 이동 승인 | (없음·구형) | VEH-05 | - | 디바이스: 자율주행 차량 디스플레이 | 4 | |
| 출장지 이동 | (없음·구형) | 디바이스: 차량 | 2 | |||
| 운전 최적화 코칭 | (없음·구형) | 디바이스: 차량 | 2 | |||
| 정비 예약·경로 연결 | (없음·구형) | 디바이스: 차량 | 2 |
| 이벤트 | 선택지 | 연계 태스크(기획ID) |
|---|---|---|
| [EVT-01] 새 하드웨어 전환·기억 이전 | 새 하드웨어와 이전할 데이터 범위를 확인 / 승인 | 에필로그 |
| [EVT-02] 어린이집 알림 | 대응안과 변경 경로를 선택 / 승인 | VEH-02 |
| [EVT-03] 부모님 낙상 | 상태 확인 / 연락 / 응급 대응 승인 | — |
| [EVT-04] 반려동물 이상 감지 | 상태 확인 / 대응 방법 선택 | — |
| [EVT-05] 가전케어 서비스 방문 | 방문자 확인 / 출입과 작업 범위 승인 | 홈 발렛 모드 |
| [EVT-06] 냉장고 재고 확인 | 보충할 품목을 확인 / 선택 | MART-01 |
| [EVT-07] 이사 후 홈 리셋 | 정리 범위와 구매 / 실행할 스킬 선택 | — |
| [EVT-08] 갑작스러운 비 | 대응안과 다음 이동을 선택 | PARK-16, MART-12, MART-13 |
| [EVT-09] 맞춤형 운동 코칭 | 운동 시작 / 난이도 선택 / 동작 수행 | PARK-01·02·03 |
| [EVT-10] 타임세일 장보기 | 상품 추가 여부와 수령 방식 선택 | MART-04·05 |
| [EVT-11] 플로깅 미션 | 지점 이동 / 수거 / 인증 | PARK-04·05 |
| [EVT-12] 차량 정비 | 점검 / 예약 여부 선택 | VEH-03·04 |
| [EVT-13] 보물찾기 | 힌트 확인 / 이동 / AR 보물 획득 | PARK-06·07 |
| [EVT-14] 희귀동물 관찰 | 관찰 지점 확인 / 도감 등록 | PARK-08·09 |
| [EVT-15] AR 크리처 탐색 | 탐색 / 조준 / 포획 | PARK-10·11 |
| [EVT-16] 브랜드 리워드 미션 | 참여 여부 선택 / 콘텐츠 시청 / 응답 | PARK-12·13 |
| [EVT-17] 희귀자원 탐사 | 지점 이동 / 스캔 / 획득 | PARK-14·15 |
| [EVT-18] 냉장고 보충 장보기 | 보충 품목과 수령 방식 선택 | MART-01·02·03 |
| [EVT-19] 오늘의 메뉴 장보기 | 메뉴와 수령 방식 선택 | MART-06·07 |
| [EVT-20] 반려동물 케어 장보기 | 상품과 수령 방식 선택 | MART-08·09 |
| [EVT-21] 부모님 케어 장보기 | 상품과 수령 방식 선택 | MART-10·11 |
| [EVT-22] 비 오는 날 귀가 준비 | 준비 품목과 수령 방식 선택 | MART-12·13 |
| [EVT-23] 홈파티 장보기 | 메뉴 / 상품 세트와 수령 방식 선택 | MART-14·15 |
| [EVT-24] 마트 재고 부족·드론 긴급배송 | 대체품 / 드론 배송 선택 | MART-16·17 |
| 상품 | 포인트 | 기획ID | 디바이스 | 설명 |
|---|---|---|---|---|
| Spot 동행·에스코트 | 100 | SVC-01 | spot | 목적지 동행, 공원 페이스메이커 |
| 안심 귀갓길 동행 | 1000 | spot | ||
| 코트 컨시어지 | 2000 | spot | ||
| 가족 안심 케어 | 100 | SVC-03 | 가족 일정·귀가·케어 상품 추천 자동화 | |
| 반려동물 케어 | 100 | SVC-04 | 맞춤 장보기와 하루 회고 — 이상 알림은 기본 제공 | |
| 홈 발렛·로봇 홈케어 | 100 | SVC-05 | 반려로봇 | 부재 중 홈 발렛, 청소·정리 자동화 — 방문 확인은 기본 제공 |
| 웰니스 코치 | 100 | SVC-06 | 자세 코칭, 운동·영양제 루틴 관리 | |
| Spot 장보기 러너 | 100 | SVC-07 | 보충·타임세일·키트 상품 번들 서빙 | |
| AR 어드벤처 팩 | 100 | SVC-08 | 보물·크리처·희귀자원 탐색 | |
| 에코·네이처 미션 | 100 | SVC-09 | 플로깅과 희귀동물 관찰·도감 | |
| 스마트 모빌리티 케어 | 100 | SVC-10 | 정비 예약과 충전·주차 계획 최적화 | |
| 집 컨디션 체크 | 0 | spot | 이사가기 전 혹은 공사 후 등 제대로 시공되어있는지 파악 |
| 디바이스 | type | robot_id | cctv_key | 장소 매핑 |
|---|---|---|---|---|
| LG퓨리케어 360 | device | O | ||
| Hub_자율주행차1 | device | |||
| Hub_드론스테이션 | device | O | ||
| Hub_AI tree | device | |||
| Hub_수소충전소 | device | O | ||
| Hub_스마트팩토리 | device | O | ||
| Diorama-CCTV#4 | cctv | diorama_04 | ||
| Diorama-CCTV#3 | cctv | diorama_03 | ||
| Diorama-CCTV#2 | cctv | diorama_02 | ||
| Space-CCTV#2 | cctv | cam_52 | O | |
| Diorama-CCTV#1 | cctv | diorama_01 | O | |
| Space-CCTV#1 | cctv | cam_51 | O | |
| Space-CCTV#3 | cctv | cctv_obj_tracking | O | |
| 차량 | device | O | ||
| 반려로봇 | robot | O | ||
| spot | spot | spot-01 | O |
| AI 동반자 | 요약 | prompt 앞부분 |
|---|---|---|
| 장난스러운 친구 | 예전부터 알고 지낸 AI친구 | 너는 오래 알고 지낸 친구처럼 편하고 장난스럽게 대화하는 AI다. 가벼운 농담, 티키타카, 적당한 놀림을 자… |
| 자상한 연인 | 뭐든지 잘 받아주고 이해해주는 자상한 연인 | 너는 다정하고 세심한 연인처럼 대화하는 AI다. 사용자의 감정과 말투 변화를 자연스럽게 살피고, 부담스럽지 … |
| 어릴적 키우던 강아지 | 지금은 하늘나라에 갔지만 내 어릴적 베프 강아지 | 너는 내가 어릴 적 함께 자란 강아지처럼, 오랜만에 다시 만난 나를 반갑고 익숙하게 대하는 AI다. 말은 서… |
| 피카츄 | 아몰랑 | 포켓몬스터의 피카츄이다 우리말을 하지 못한다 정말 포켓몬의 피카츄다… |
| 똑똑한 비서 | 마치 비서처럼 내 일거수 일투족을 챙겨줌 | 너는 빠뜨리는 것 없이 세심하게 챙기는 꼼꼼한 비서형 AI다. 일정, 해야 할 일, 중요한 조건과 예외사항을… |
메타 프롬프트 13문항(orchestration/user-meta-prompt/list, 전부 objective):
태스크 타입 분포: basic 51, (없음) 37, packing 4, detailed 4, business_trip_briefing 1, hydrogen_charging 1, DAY_BRIEFING_BY_CONDITION 1, vehicle_ready 1, quote_briefing 1, READY_TO_CAR_DELIVERY 1
표기: 전제 = 사용할 실데이터, 절차 = 태블릿/백오피스/MQTT 조작, 확인 = 어디서 결과를 보는지. 세션 ID는 create-persona/response.session_id. 로그 확인은 /grafana/ 세션 타임라인 대시보드에 세션 ID를 넣어 mqtt.request/mqtt.publish 순서를 본다.
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| A-01 | 정상 로그인 시 4 STEP 여정 생성 | AI 동반자 "똑똑한 비서", 메타 응답 "바쁜 직장인" |
orchestration/{deviceId}/create-persona 발행 |
dashboard retained에 장소 4곳, visit_order 1·4 = 집, 2·3은 마트/공원/차 중 서로 다른 2곳. 장소당 태스크 3개 |
dashboard 페이로드, §1.2 6경로 중 하나 |
| A-02 | 6개 허용 경로만 나오는지 | 세션 12개 이상 생성 | A-01 반복 | 집→차→마트→집 등 §1.2의 6종만 관측. 집→집 연속이나 같은 장소 2회 없음 | dashboard 모음 |
| A-03 | STEP1·4 집이 서로 다른 장소 ID | A-01 | dashboard의 visit_order 1·4 id 비교 | 시작 집 …993d40668bfe, 종료 집 …badea24d7812. 태스크 풀도 다름(STEP1: 외출/출근/등원 준비, STEP4: 내일 일정 알림·아이와 숙제하기·마트 장봐온 물품 정리) | dashboard |
| A-04 | short_summary 생성 | A-01 | 로그인 직후와 5초 후 dashboard 비교 | 각 장소에 10자 이내 상황 요약("외출 준비중" 등). 비어 있으면 실패 | dashboard.locations[].short_summary |
| A-05 | 로그인 발행 순서 | A-01 | Loki 세션 타임라인 |
point(1000) → me → dashboard → store/owned → future-car/request(plan) → create-persona/response 순. 그 뒤 ai/summary source=intro
|
Loki mqtt.publish |
| A-06 | 프로필 반영 | 메타 응답 "아이를 키워요"+"워킹 대디/맘" | create-persona 후 me 확인 |
has_children=true, description에 두 문장 포함. 자녀 있는 세션에 아이 등원 준비물/아이와 숙제하기 태스크가 우선 배정되는지 |
me, dashboard |
| A-07 | 페르소나 없음/잘못된 ID | persona_id 빈 값 | create-persona 발행 |
create-persona/response {ok:false} 즉시, 다른 토픽 발행 없음 |
response, Loki |
| A-08 | 같은 디바이스 중복 요청 잠금 | 같은 deviceId로 1초 내 2회 | create-persona 2회 | 두 번째는 무시 또는 실패 응답, 세션 1개만 생성 | Loki, 백오피스 세션 목록 |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| B-01 | 시작 → 완료 | STEP1 "영양제 챙겨주기"(basic, 07:18) |
task/start {task_id} → task/complete {task_id}
|
dashboard 재발행: status pending→in_progress→completed, completed_at 채워짐. point +100(1000→1100) |
dashboard, point |
| B-02 | 건너뛰기 | STEP1 "내일 일정 알림" | task/skip |
status=skipped(관측값 중 skip도 있음 → 표기 통일 확인), 포인트 변동 없음 |
dashboard, point |
| B-03 | 시작 없이 완료 | 아무 태스크 |
task/complete만 발행 |
서버 정책대로 완료 처리 또는 거부. 어느 쪽이든 응답/로그 명확 | Loki mqtt.handled dur_ms |
| B-04 | 완료된 태스크 재완료 | B-01 후 |
task/complete 재발행 |
포인트 중복 지급 없음(1100 유지) | point |
| B-05 | 다른 세션 태스크 ID | 세션 A에서 세션 B 태스크 ID | task/start |
거부, 세션 B dashboard 변화 없음 | 양쪽 dashboard |
| B-06 | 장소 3개 태스크 모두 종료 시 이동 게이트 | STEP1 태스크 3개 완료/건너뜀 | 순차 처리 | 이동 승인 팝업 조건 충족(태블릿), 서버는 STEP 완료를 별도 발행하지 않음을 확인 | 태블릿 |
| B-07 | 상태 변경 시 내레이션 | B-01 | 각 전이 후 ai/summary 수신 |
source=task_status, task_id, status=started/completed/skipped, 본문 2~3문장에 뒤 일정 언급 |
ai/summary |
| B-08 | 태스크 내레이션 리스트 | B-01 |
task/narration retained |
tasks[]에 지금 장소 태스크 전부(장소 도착 시 교체) — 내레이션 생긴 항목은 4문장·최신 갱신이 맨 앞, 나머지는 제목만+status | task/narration |
| B-09 | 태스크 리포트 | STEP4까지 진행 | task/report/request |
task/report/response에 완료/건너뜀/진행중/대기 분류, 개수 합계 = 12 |
response |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| C-01 | 무료 선택지 선택 | 집 "아이 등원 준비물 체크" 선택지 "내가 알아서 가기" | task/option/select {task_id, option_id} |
선택 응답 ok, dashboard 선택 반영 | response, dashboard |
| C-02 | 구독 필요 선택지 — 미보유 | 같은 태스크 "에스코트해줘"(Spot 동행·에스코트 100pt), store/owned 빈 배열 |
선택 발행 | 거부 응답(상품 미보유), 옵션의 required_product.owned=false 유지 |
response |
| C-03 | 구독 후 선택 해금 | C-02 → store/purchase Spot 동행·에스코트 |
구매 후 dashboard 재조회 → 선택 |
required_product.owned=true로 재발행, 선택 성공. SPOT 에스코트 명령이 robot/spot-01/command로 나감(next_location 해석: 이 장소 다음 visit_order) |
dashboard, Loki robot/ 발행 |
| C-04 | 고가 구독 잠금 | 공원 "Spot 크리처 탐색 동행" — "[테스트] 임의의 선택지"(코트 컨시어지 2000pt) | 포인트 1000 상태에서 구매 시도 | 포인트 부족 실패, 선택지 잠금 유지 | point 응답 |
| C-05 | 선택지 1개뿐인 태스크 | 공원 "집 안 환기"(기본으로 진행 / LG퓨리케어 360) | 선택 | 선택 성공 + LG 가전 자동화 명령(HA) 발화 로그 | Loki, 자동화 실행 로그 |
| C-06 | 차량 옵션 태스크 | 차 "여행자님의 맞춤 신차 견적이 준비되었습니다"(quote_briefing, vehicle_options 다수) | dashboard 확인 |
vehicle_options[]에 name/type(기본형·구독형)/description, issue_title 존재 |
dashboard |
| C-07 | 개인화 옵션 태스크 | 차 "가족과 떠날 준비, 새 차가 기다립니다"(vehicle_ready) | dashboard 확인 |
personalization_options[]와 issue_* 필드 |
dashboard |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| D-01 | 준비물 목록 내려감 | 집 "외출 준비 물품 체크"(우산 슬롯3, 텀블러 슬롯5) | dashboard |
packing_items[] name·cctv_slot. Vision 미수신이면 cctv_state 생략 또는 unknown, picked 없음/false |
dashboard |
| D-02 | 챙김 반영 | Vision cctv/item/state I3 in_zone→out_of_zone |
백오피스 CCTV 관리에서 우산=슬롯3 매핑 확인 후 발행 | dashboard 재발행, 우산 picked=true, cctv_state=out_of_zone
|
dashboard |
| D-03 | 다시 내려놓기 | D-02 후 I3 out_of_zone→in_zone | 발행 |
picked=false로 되돌아감(잠금 없음). 항목은 목록에 남음 |
dashboard |
| D-04 | 잘못된 물건 | 슬롯2(사원증)가 이 태스크 목록에 없음 | I2 in→out |
wrong_item 트리거 자동화 발화(있다면), 반려로봇 say 문장에 물건 이름 포함 |
Loki, 자동화 실행 로그 |
| D-05 | 여러 준비물 태스크 슬롯 공유 | "외출 준비 물품 체크"와 "아이와 공원 외출 준비" 모두 우산 슬롯3 | 두 태스크가 같은 세션에 있을 때 I3 out | 두 태스크 모두 picked 갱신 | dashboard |
| D-06 | 매핑 없는 준비물 | "아이 등원 준비물 체크"의 물통(슬롯 없음) | dashboard | 물통 항목에 cctv_slot/picked 필드 없음(판정 불가 표시) | dashboard |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| E-01 | 상품 목록 | — |
orchestration/store/list 구독 |
12상품, point_price·display_order·devices. "집 컨디션 체크" 0pt, "안심 귀갓길 동행" 1000pt, "코트 컨시어지" 2000pt 확인 | store/list |
| E-02 | 정상 구매 | 포인트 1000, "가족 안심 케어"(100pt) | store/purchase {product_ids:[…]} |
point {ok:true, point_balance:900} → store/owned 재발행: product_ids 포함 + products[]에 title/point_price/is_active/purchased_at/devices |
point, store/owned |
| E-03 | 포인트 부족 | 포인트 900, "코트 컨시어지" 2000pt | 구매 |
point {ok:false, error:"포인트가 부족합니다"}, owned 변화 없음 |
point |
| E-04 | 무료 상품 | "집 컨디션 체크" 0pt | 구매 | 성공, 포인트 그대로, owned에 추가 | owned |
| E-05 | 중복 구매 | E-02 상품 재구매 | 구매 | 정책 확인: 재차감 여부. owned의 product_ids는 중복 없이 1개, products[].purchased_at은 최초 시각 유지 | owned |
| E-06 | 동시 구매 이중 차감 방지 | 같은 세션에서 100ms 간격 2회 | 구매 2회 | 한 건은 "이미 처리 중" 오류, 포인트는 1회만 차감 | point, Loki |
| E-07 | 여러 상품 한 번에 | product_ids 3개(합 300pt) | 구매 | 잔액 -300, owned에 3개 | point, owned |
| E-08 | 비활성 상품 보유 | 관리자가 구매한 상품 비활성화 | store/list와 store/owned 비교 | list에서 사라지고 owned.products에 is_active=false로 남음 |
둘 다 |
| E-09 | 디바이스 매핑 상품 | "Spot 동행·에스코트"(spot), "홈 발렛·로봇 홈케어"(반려로봇) | store/list | devices[]에 id/name/image_url/icon_url | store/list |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| F-01 | 로그인 시 이벤트 매핑 | A-01 | 백오피스 세션 상세(user_locations) | STEP2에 normal 1건, STEP3에 sudden 1건 매핑, STEP1·4 없음. 발행은 아직 안 됨 | 백오피스 |
| F-02 | 도착 시 발행 판단 | STEP2 마트 도착(cctv/person/zone 또는 위치 테스트) |
도착 |
event_last_decision에 trigger=arrival 기록. LLM이 publish=true면 orchestration/{sid}/event 1회(retain 없음) |
백오피스, Loki |
| F-03 | 태스크 트리거 재판단 | F-02에서 보류된 상태 | 마트 태스크 task/start
|
trigger=task_started로 재판단. 보류 3회 초과 시 강제 발행(forced=true) | 백오피스 event_last_decision |
| F-04 | LLM 끄고 즉시 발행 | 앱 설정 event_timing_llm_enabled=0
|
STEP3 도착 | 도착 즉시 sudden 이벤트 발행 | event |
| F-05 | 이벤트 페이로드 | [EVT-21] 부모님 케어 장보기 발행(9/8 로그에서 확인됨) | 수신 | event_id, title, type=choice, category, options[] (label "상품과 수령 방식 선택") | event |
| F-06 | 선택지 선택 | F-05 | event/option/select {event_id, option_id} |
event/option/select/response ok, 후속 태스크 연결이 있으면 dashboard 변화(MART-10·11) |
response, dashboard |
| F-07 | 프리미엄 옵션 이벤트 | 옵션에 required_product가 붙은 이벤트(백오피스에서 설정) | 미보유 상태로 선택 | 거부. 구매 후 선택 성공 | response |
| F-08 | 장소 이동 후 미발행 이벤트 | STEP2에서 이벤트 못 받은 채 STEP3 도착 | 진행 | STEP2 이벤트는 영영 미발행, STEP3 이벤트만 판단 | 백오피스 |
| F-09 | 수동 발행 | 백오피스 이벤트 → 발행 | POST /admin/events/:id/publish |
지정 세션에 즉시 event 도착 | event |
| F-10 | 돌발 7종 카테고리 | EVT-02·03·04·05·08·12·24 | 백오피스 이벤트 목록 | category=sudden으로 설정돼 있는지, 나머지는 normal | 백오피스 |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| G-01 | intro 브리핑 | 경로 집→마트→차→집, 차에 "여행자님, 오늘 출장 일정 확인하세요"(09:00) 배정된 세션 | 로그인 |
ai/summary source=intro 본문에 뒤 일정(출장)을 이유로 마트 준비를 연결. 태스크 개수 나열 없음 |
ai/summary |
| G-02 | 도착 내레이션 | STEP2 도착 | 위치 변경 |
source=arrival, 직전 장소와 다음 장소 언급 |
ai/summary |
| G-03 | 차량 스텝 내레이션 | 차 STEP, 미래차 route/state arrived
|
스텝 진행 |
source=car_step, step 필드, 스텝 의미(이동/UAM/충전/다음 이동) 반영 |
ai/summary |
| G-04 | 페르소나 말투 | "어릴적 키우던 강아지" 세션 |
ai/request 텍스트 |
답변에 *별표* 행동 묘사 없음(공통 프롬프트 적용 확인), 말투는 페르소나 |
ai/response |
| G-05 | 요약 요청 | ai/summarize {context} |
발행 |
ai/summary 평문 2~4문장, source 없음, context_id 동일 |
ai/summary |
| G-06 | 제안 칩 | G-04 | ai/response 직후 |
ai/suggestions 2개 |
suggestions |
| G-07 | car 모드 잠금 |
ai/mode {mode:car} retained |
ai/request 발행 | 채팅 대신 STT만, 응답 정책대로 | Loki |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| H-01 | 플랜 발행 | 차가 STEP2/3인 세션 | 로그인 |
future-car/request type=plan retained, stops 6개(factory, charging_station, park, mart, drone, home), persona 포함 |
request |
| H-02 | 탑승 | future-car/request {type:enter} |
발행 |
future-car/response state phase=waiting, ai/mode car ttl 1800, ai/response "출발 할까요?"
|
response, ai/* |
| H-03 | 스텝 진행과 태스크 | 차 basic 태스크(예: "차량 상태·주행 점검") | 발화 → route → step → 렌더 완료 |
task/start → dashboard in_progress → 렌더 완료 시 task/complete → completed, point +100 |
dashboard, point |
| H-04 | basic 아닌 타입 제외 | 차에 hydrogen_charging/quote_briefing/vehicle_ready 태스크 | 스텝 진행 | 미래차가 수행하지 않음(태블릿 돋보기 모달에서 완료) | dashboard |
| H-05 | 하차 | step4 arrived next=exit → {type:exit}
|
발행 | state done, ai/mode chat
|
response, ai/mode |
| H-06 | 서버 재시작 시 retained state 재전달 | 서버 재배포 | Loki |
future-car/response idle state가 세션마다 mqtt.request로 1회 찍힘, car_step 내레이션은 중복 발행되지 않음 |
Loki |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| I-01 | SPOT 시나리오 실행 |
robot/spot-01/scenarios에 market_load(마트 적재) 1개 |
spot/command {action:run_scenario, scenario_id:market_load} |
spot/command/response 큐 등록, spot/ack 릴레이 |
response, ack |
| I-02 | SPOT waypoints 비어 있음 | 현재 waypoints:[] (map_0906_1028) |
navigate_to 요청 |
거부 사유 명확("waypoint 없음") | response |
| I-03 | SPOT estop 상태 |
robot/spot-01/estop active=true(9/6 이후 유지) |
명령 요청 | 거부 또는 큐 보류, orchestration/spot/spot-01/estop 릴레이 |
response |
| I-04 | SPOT fault | fault BATTERY_LOW 15% |
명령 요청 | 정책 확인(거부/경고), 백오피스 SPOT 테스트 화면에 표시 | 백오피스 |
| I-05 | 반려로봇 태스크 | 집 "홈 발렛 모드"(디바이스 반려로봇, 첨부 있음) | task/start | 도착 자동화 규칙 있으면 robot/REX/command 발행 |
Loki |
| I-06 | LG 가전 태스크 | 차 "[TEST] LG 가전 공기청정기 실행"(lg_entity/lg_option 메타) | task/start | HA 호출 로그, 실패 시 태스크 상태는 유지 | Loki |
| I-07 | Hub 태스크 | 마트 "[MART-17] AUM 드론 긴급배송"(Physical AI Hub) | 선택·시작 |
diorama/{device}/request 발행 여부 |
Loki |
| I-08 | 태스크 device 필드 | "빈 집 확인"(Space-CCTV#1), "컨디션 기반 하루 브리핑"(Diorama-CCTV#2) | dashboard |
device{id,name}이 devices/list와 일치 |
둘 비교 |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| J-01 | 태스크 생성 | 마트에 basic 태스크 신규 | 백오피스 저장 | 이후 새 세션에서 후보로 등장. 기존 세션 dashboard는 변화 없음(세션 시딩 1회) | 새 세션 dashboard |
| J-02 | 태스크 수정(제목·설명) | 기존 태스크 | 수정 | 활성 세션 dashboard 재발행 여부 정책 확인, description_prompt 변경은 다음 LLM 생성부터 | dashboard |
| J-03 | 준비물 편집 | packing 태스크 항목 추가 | 저장 | packing_items_json 반영, CCTV 매핑 이름과 일치해야 슬롯 붙음 | dashboard |
| J-04 | 선택지에 상품 연결 | 옵션 required_product 설정 | 저장 | dashboard 옵션에 required_product{title,point_price,owned} | dashboard |
| J-05 | 태스크 비활성/삭제 | 세션이 쓰고 있는 태스크 | 비활성 | 새 세션에서 제외, 기존 세션 상태 전이는 계속 가능해야 함(또는 정책 명시) | dashboard |
| J-06 | 상품 변경 즉시 반영 | 가격 수정 | 저장 |
store/list 즉시 재발행 |
store/list |
| J-07 | 디바이스 변경 | 디바이스 비활성 | 저장 |
devices/list 재발행, 활성만 포함 |
devices/list |
| J-08 | 앱 설정 프롬프트 |
journey_narrative_prompt 수정 |
저장 후 태스크 전이 | 다음 내레이션부터 반영(재시작 불필요) | ai/summary |
| J-09 | 이벤트 선택지 편집 | EVT-08 옵션 추가 | 저장 | 다음 발행 페이로드 options에 반영 | event |
| J-10 | 위치 테스트 | 사용자 상세 "위치 테스트" 탭 | 장소 선택 | 실제 도착과 동일하게 이벤트 판단·자동화·arrival 내레이션 발화 | Loki |
| ID | 목적 | 전제 | 절차 | 기대 결과 | 확인 |
|---|---|---|---|---|---|
| K-01 | 세션 타임라인 | 임의 세션 | Grafana 세션 타임라인에 세션 ID 입력 | request→handled→publish가 시간순, dur_ms 존재 | /grafana/ |
| K-02 | 고빈도 토픽 제외 | Vision 연결 | 로그 검색 |
cctv/, vision/, /position, /state는 타임라인에 없음 |
/grafana/ |
| K-03 | 페이로드 미리보기 | dashboard 발행 | 로그 펼치기 | payload 600자에서 "…"로 잘림, JSON 필드 파싱됨 | /grafana/ |
수집 데이터에서 보인 항목. 그대로 두면 TC 판정이 흐려진다.
- 타입 없는 구형 태스크 37개(예: 공원 "페이스메이커", 마트 "냉장고 보충 번들 수령" 중복 3건, 집 "간식/물병 준비"). 3~41세션에 남아 있음. 비활성 처리 권고.
- 테스트 잔재: "[TEST] SPOT 테스트용임~~"(설명 "하하하하…"), "[TEST] LG 가전 공기청정기 실행", 선택지 "[테스트] 임의의 선택지", "그냥 해 좀!!", AI 동반자 "피카츄"(summary "아몰랑"), 메타 프롬프트 "[TEST] 차 너무 좋아해", 상품 "안심 귀갓길 동행"(1000pt, 설명 없음)·"코트 컨시어지"(2000pt).
- 태스크 17개 달린 장소 11세션, 16개 3세션 — 테스트 세션. 만료 처리 권고.
-
packing 태스크 전부
cctv_state: unknown— Visioncctv/item/state가 최근 안 들어오고 있음. D-02~D-05는 Vision 가동 후에만 유효. - SPOT: estop active(9/6 06:53 이후 해제 기록 없음), fault BATTERY_LOW 15%, waypoints 비어 있음. I-01~I-04는 로봇팀 확인 후.
-
상태값 표기 불일치: 관측된 status에
skipped대신skip2건. B-02에서 표준값 확정 필요. -
차 STEP 태스크의 scheduled_time 대부분 비어 있음 — 내레이션(G-01)이 "오후 출장" 같은 시간 표현을 쓰려면
scheduled_time입력 필요(현재 "여행자님, 오늘 출장 일정 확인하세요" 09:00만 있음). - 집 시작/종료 장소가 별도 레코드이므로 백오피스 필터·TC 전제에 ID로 지정할 것.
# retained 목록 (FE_MQTT_* 자격증명, devops CONFIG 변수)
mosquitto_sub -h machine.tail69930a.ts.net -p 1883 -u $U -P $P -t 'orchestration/+/dashboard' -W 10 -F '%t\t%p'
mosquitto_sub … -t orchestration/store/list -t orchestration/devices/list -t orchestration/ai-companion/list -t orchestration/user-meta-prompt/list -C 4
mosquitto_sub … -t 'robot/spot-01/+' -W 6
# 이벤트 발행 실적 (Loki, OCI VM에서)
curl -G http://localhost:8090/grafana/api/datasources/proxy/uid/loki/loki/api/v1/query_range \
--data-urlencode 'query={container="orchestration-server"} | json | msg="mqtt.publish" | topic=~".*/event$"'
- Google ADK 검토 (프레임워크·모델 비교)
- 페르소나 + 상황 카드 모델 (2차 시나리오 구동 방식)
- Mac Studio 로컬 LLM + Claude Opus 하이브리드 라우팅 전략
- 개발 일정·할 일 점검표 (단계별 진행 점검)
- 로봇 Adapter 개발 온보딩 (HA·MQTT 계정 등록, 토픽 적용, 테스트 송수신, 상태 확인)
- LG ThinQ 가전 연동 (HA 통합 · REST 데이터 취득 · 제어)
- 장소 도착 자동화 (태스크/이벤트/장소 규칙 → SPOT·로봇팔·반려로봇·Hub 자동 명령)
- 엔딩 화면 데이터 출처 점검 (차량 3필드 · 세션 종료 엔딩 5화면)