Skip to content

release: 작물 선택 전체 탭·필터 시트 UX 및 음성 즉시 저장 유도 반영 (dev → main) - #67

Merged
Kimseungin0529 merged 5 commits into
mainfrom
dev
Jul 22, 2026
Merged

release: 작물 선택 전체 탭·필터 시트 UX 및 음성 즉시 저장 유도 반영 (dev → main)#67
Kimseungin0529 merged 5 commits into
mainfrom
dev

Conversation

@Kimseungin0529

Copy link
Copy Markdown
Collaborator

변경 내용

  • 작물 선택 화면에 전체 탭 추가 및 필터링 성능 개선 (CropSelectionBody.swift)
  • 기록/리포트 필터 시트 높이 통일 및 풀시트 확장 지원 (RecordFilterSheets.swift, ReportFilterSheets.swift)
  • 상세 항목이 없는 유형(ETC 등) 분류 후에도 save_farming_record가 호출되도록 음성 세션 지침·tool 스키마 보강 (VoiceSessionInstructions.kt, FarmingRecordVoiceToolSchema.kt)

변경 이유

  • 작물 선택 시 전체 목록을 한 번에 볼 수 있는 진입점이 없어 탭과 필터 성능을 개선
  • 필터 시트가 화면마다 높이가 달라 UX 일관성이 떨어졌던 문제 보완
  • ETC 등 상세 필드가 없는 기록 유형에서 음성 분류 후 저장 호출이 누락되는 문제 방지

영향 범위

  • 프론트엔드: 작물 선택 화면, 기록/리포트 필터 시트
  • 백엔드: 음성 기록 세션 프롬프트 지침, save_farming_record tool 스키마

검증

  • ./gradlew :application:test --tests "*Voice*" 통과 (PR 작성 시 재확인)
  • 프론트엔드 변경은 로컬 Xcode 환경이 없어 실기기/시뮬레이터 검증 미실행 (각 커밋 단위 리뷰 완료 후 dev 반영)

배포 및 호환성

  • API 스키마 변경 없음(tool 스키마는 서버 내부 프롬프트 구성용), DB 마이그레이션 없음
  • 별도 배포 작업 해당 없음

체크리스트

  • 관련 테스트를 추가하거나 수정했습니다.
  • 로컬 검증을 완료했습니다. (프론트엔드는 Xcode 환경 부재로 미실행)
  • API·설정·DB 호환성 영향을 확인했습니다.
  • 민감한 정보가 포함되지 않았습니다.

iyungui and others added 5 commits July 22, 2026 00:35
record/report의 작물·영농활동 시트가 고정 높이라 서로 달랐던 것을 report 작물 시트와 동일한
half-sheet 기본값(.medium/.large)으로 맞추고 풀시트로 드래그할 수 있게 함. record 기간 시트는 그대로 유지.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
전체 탭을 첫 탭이자 기본 선택 상태로 추가하고, 카테고리 탭 전환 시
API를 재호출하지 않고 최초 로드한 목록을 로컬에서 필터링하도록 변경.
정렬 결과와 id→작물 조회를 crops 변경 시에만 재계산하도록 캐싱해
탭 전환/검색마다 반복 정렬·선형 탐색하지 않게 함.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
음성 기록에서 "기타(ETC)로 처리되면 작성 화면에 농장·작물·메모가 비고,
그 외 유형은 정상"인 버그 수정.

원인: 파서·매퍼·compose는 workType 무관하게 farm/crop/workType/memo를
처리하고(타입별 분기는 detail 객체뿐) 다른 유형은 정상 동작하므로, ETC만
비는 것은 모델이 ETC일 때 save_farming_record를 제대로 호출하지 않아
candidate가 비었기 때문. 지침은 일반 유형엔 "필수정보 수집→확인→저장"
구동이 있으나, ETC는 EXCEPTION_HANDLING에서 "기타로 분류·안내"까지만 있고
저장으로 이어지는 문구가 없어 모델이 분류만 하고 tool 호출 없이 멈출 수 있었음.

수정: ETC로 분류해도 농지·작물을 확인하고 memo를 작성해 다른 유형과 동일하게
save_farming_record를 반드시 호출하도록 EXCEPTION_HANDLING에 명시. 회귀 테스트
추가. `./gradlew :application:test --tests "*Voice*"` 통과.

주의: 모델 행동은 지침으로 유도하는 것이라 최종 확인은 실제 음성 세션 1회가
필요(진단 로그 PR #64/#65로 candidate null→채움 확인 가능).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
프론트 진단 로그로 근본 원인 확정: ETC 대화에서 function_call 이벤트가 전무하고
(response.function_call_arguments.done 0건, output_item은 전부 message/audio),
모델이 6+ 응답 사이클 동안 save_farming_record를 끝내 호출하지 않아 사용자가 수동
종료(toolArgsLen=-1)함. 파서/매퍼는 파싱할 이벤트 자체가 없었으니 결백.

모델 저항이 강해, EXCEPTION_HANDLING 보강(직전 커밋)만으로 부족할 수 있어 tool 바로
옆과 요구사항 섹션에도 신호를 추가:
- 스키마 tool description: 필수 4개(farmId·cropId·workType·memo)와 유형별 상세를
  구분하고, WATERING·WEEDING·PRUNING·ETC는 상세 없이 필수 4개만 갖춰지면 곧바로
  호출하도록 명시.
- WORK_TYPE_REQUIREMENTS: 상세 없는 유형은 상세를 기다리지 말고 곧바로 저장하도록
  명시(특히 ETC는 대화를 끌지 말 것).
회귀 테스트 2건 추가. `./gradlew :application:test *VoiceSessionInstructions* *FarmingRecordVoiceToolSchema*` 통과.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(voice): ETC 분류 후에도 save_farming_record를 호출하도록 지침 보강
@Kimseungin0529
Kimseungin0529 marked this pull request as ready for review July 22, 2026 03:00
@Kimseungin0529
Kimseungin0529 merged commit 84e6710 into main Jul 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants