3.5.3 (2026-08-06) {#353-2026-08-06}
내부 개선 {#internal-improvements}
core/log: 지연 포맷 haply_* 매크로 형태 추가 (cf7dbfc), #271 해결핵심: 피벗 및 compose/inverse 변환 프리미티브 추가 (01080f6), #283 해결디바이스: 0xE4 본체 방향 캐시 및 trigger_mode 라우팅 (#265) (4864700)devices: 서비스 측에서 0xE4 IMU 센서 프레임 보정 (#286) (e6d877c), tapi-prototype-firmware#87을 닫음기기: inkwell 보정 시 body_orientation 업데이트 (#268) (89b190b), #286 #286 #286 해결기기: 실시간(0x0C)과 기준(0xE4) 본체 방향 분리 (#286 #315) (638487a), #268 #266 #268 해결http: 지원되지 않는 프로토콜 응답을 422로 통일 (e0e7638), #293, #293, #295 해결http: transform의 에코 및 sdf 입력을 오일러 지원 패치로 마이그레이션 (#279, #280, #291) (bb29404)http: scope=device 삭제 시 장치 마운트 초기화 (#265) (f6bf26b), #286 해결modules::navigation: 모션 잠금에 클러치 모드 추가 (게이트 적용, 기본값: 비활성화) (4b69eed), #308 #308 #283 #308 해결modules::navigation: prevent_default 적용 버튼 입력; clutch force_scale; 버블 홀드-투-네비게이트 지원 (fb216aa), #317, #318, #316, #317, #318 해결modules::navigation: 클러치 max_motion/force_scale 상한 설정 (a946088), #316 해결modules::navigation: 미러링된 기능 킬 스위치, 둘 다 기본적으로 활성화됨 (b6ee0c0), #318 해결modules::navigation: inputs[]에 대한 입력별 설정 패치; bubble이 status.engaged를 발행 (ba2058f), #318 해결프로토콜: 기능 파일 분리, 댐핑 게이트, 베이스 호이스팅 (30d7d5d), #293 해결프로토콜: 기능 테이블 + 지원되지 않는 단일 발행자 (289382e), #293 및 #295 해결프로토콜: 테이블을 통해 home_return 및 pen_attached 게이트 적용 (8a05d20), #293 해결프로토콜: fw_version 도입 및 버전 확인 마이그레이션 (38c2cae), #293 해결시리얼라이제이션: v3.1 세션 패스에 grip 버튼 마스크 적용 (7b93e35), #316 해결직렬화: euler.output 하위 config.mount 회전값에 euler 값 출력 (#268) (f6b54a2)직렬화: euler.output 하위 변환에서 회전값에 euler 값을 할당 (96c6cc9), #283 해결직렬화: set_transform에 ‘zoom-about-pivot’ 작업 공간 노출 (#309) (c1d08fc), #280 해결직렬화: config/body_orientation trigger_mode 평탄화 (#265) (8781b8a), #268 해결직렬화: transform 노브를 세션별 serial_options로 승격 (#280) (03b2fd6)직렬화: config/mount를 scope와 body_orientation으로 분리 (#265) (5618839), #280 해결직렬화: 세션 옵션을 출력 전반에 전달하고 중첩된 reshape에 게이트 적용 (#279, #280) (59984ce), #265 해결직렬화: WS 및 HTTP 구성 디코딩 통합 (#280) (6076917)sessions: ‘bake’ 해제 기능을 포함한 범용 모션 잠금 메커니즘 추가 (c8d2a93), #304 해결세션: live_motion 추가: 틱 단위 모션 잠금 진행 (게이트 적용) (d29013c), #308, #304, #308 해결세션: 메인 루프 전달 방식의 매니저 수준 세션 관찰자 추가 (83e76ef), #284 해결sessions: 마운트 reparent 및 워크스페이스 zoom-about-pivot 추가 (294d6e8), #265, 297, #272, #304 해결sessions: 네임스페이스가 적용된 config.body_orientation 이벤트 범위 추가; 레거시 'values' 입력에 대한 경고 (3f70047), #320 해결세션: config/mount 소스 및 트리거 라우팅 미리보기 추가 (#265) (5d11dbf), #268 해결sessions: 마운트 영역에서 장치 마운트 저장/ 불러오기 (#265) (4cec178), #292 해결세션: 피벗 에코 포함 set_workspace_transform_around 일반화 (0b242a2), #309 해결세션: 그립 버튼 마스크 + force_scale 오버레이 메커니즘 (836ef2f), #316 해결세션: 클라이언트 프로필 기준으로 Tracy 세션 플롯에 레이블 추가 (72a8f34), #258 해결세션: 마운트 범위 라우팅 및 스토리지 가상화 (#265) (9a4e7f4), #286 및 #293 이후 사항 처리 완료sessions: 세션별 force_scale 덕킹 (미리보기) (bff66ad)버그 수정 {#bug-fixes}
ci: 변경 내역 복원을 위해 릴리스 툴체인 고정 (72c6773), #313 해결새 글레이즈에 대한 컴파일 수정 (e2c53d3)deps: rust crate nix를 0.31로 업데이트 (b3b9a84)장치: 전송 병목 지점에서 safety-config 프로토콜에 게이트 적용 (b8e8401), #295 해결장치: 펌웨어 버전 및 보정 기준에 따라 safety-config 쓰기 보호 (5ad5128), #295 해결디바이스: 웨이크업 안정화 구간 동안 inverse3 와이어 연결 유지 (4afed45)디바이스: 웨이크업 안정화 구간 동안 inverse3 와이어 연결 유지 (79c2b66)기기: 유선 버즈 그립에서 [secure] 배터리 알림 억제 (ea54a1a), #314 해결http: 세션 범위 safety 쓰기 시 보정 확인 (89f9cd7), #295 #293 해결http: 세션 규약에 따라 오일러 회전값 통합 (#288) (97cf203)inverse_ux: calibration_notifier 처리를 Minverse로 제한 (418913f)크래시 방지를 위한 lifetime 정리 (e7b3785)modules::inverse-ux: 펌웨어가 차단할 때 항상 calibration-failed를 발생시킴 (3841d06)modules::inverse-ux: 페어링된 장치 하나를 교체한 후 다시 페어링 (cf85707), #278 해결modules::sdf: 세션 규약에 따른 sdf transform euler 통합 (#291) (9741ac6)modules::sdf: SDF 도형을 클라이언트 좌표계에 맞춰 방향 설정 (c29e4f2), #276 해결프로토콜: 서비스를 중단시키거나 멈추게 하는 타이머 수명 경쟁 상태 제거 (0cb019b), #303 해결프로토콜: 포트 열 때 시리얼 버퍼 플러시를 통해 핫스왑 장치 인식 (b8724d9)프로토콜: 장치 소멸 경쟁 상태에 대비하여 펌웨어 클라이언트 콜백 보호 (3d795bb), #303 해결프로토콜: 유형이 지정된 열거형과 올바른 와이어 형식을 사용하여 0xE4 IMU 방향 API 재작성 (8733ec0)inverse3x 활성화/비활성화 BIA 허브에 대한 홈 화면으로 돌아가기 (f435454)서비스: 적응형 디스패치 기본값 비활성화 (9415638)서비스: 서비스 종료를 순서 보장, 경계 지정, 비경쟁 상태 방식으로 개선 (ff888d7), #303 해결세션: 실제로 도달 가능한 중심에 맞춰 *_중앙 정렬_ 프리셋 중앙 정렬 (ad6e726), #321 해결세션: 마운트 변경 시 SIGGRAPH 워크스페이스 경계 자동 푸시 제거 (2df1654)sessions: 라이브 세션에서 아직 실행 중인 장치의 경우, 종료 중인 세션의 강제 종료 건너뛰기 (e1f9ff7), #324 해결세션: 연결 시점에 협상된 serial_options를 start()가 지우는 문제 수정 (#290) (27e27d8)sessions: set_transform 이후 작업 공간 변환 속도를 0으로 설정 (133c3ad), #280 해결websocket: 발신 세션의 규약에 따라 명령 디코딩 (#289) (1b24049), #265 해결성능 개선 {#performance-improvements}
core/log: 비활성화 시 fmt::format을 건너뛰도록 haply_* 매크로에 게이트 적용 (672a87a), #270 해결modules::sdf: 틱마다 처리 대신 생성 시 한 번만 SDF 베이크 (15350c5), #277 해결