release: 작물 선택 전체 탭·필터 시트 UX 및 음성 즉시 저장 유도 반영 (dev → main) - #67
Merged
Conversation
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
marked this pull request as ready for review
July 22, 2026 03:00
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
변경 내용
CropSelectionBody.swift)RecordFilterSheets.swift,ReportFilterSheets.swift)save_farming_record가 호출되도록 음성 세션 지침·tool 스키마 보강 (VoiceSessionInstructions.kt,FarmingRecordVoiceToolSchema.kt)변경 이유
영향 범위
save_farming_recordtool 스키마검증
./gradlew :application:test --tests "*Voice*"통과 (PR 작성 시 재확인)배포 및 호환성
체크리스트