3.5.3 (2026-08-06) {#353-2026-08-06}
내부 개선 사항 {#internal-improvements}
core/log: Makro-Form haply_* 서식 적용을 지연시켜 추가 (cf7dbfc), #271 해결핵심: 피벗 및 합성/역 변환 프리미티브 추가 (01080f6), #283 해결장치: 0xE4-본체 방향 임시 저장 및 trigger_mode 전달 (#265) (4864700)장치: den 0xE4-IMU-Sensorrahmen을 서비스 측에서 보정 (#286) (e6d877c), tapi-prototype-firmware#87 포함devices: 잉크웰 보정 시 본체 방향 업데이트 (#268) (89b190b), #286 #286 #286 해결장치: 라이브(0x0C) 및 참조 본체 방향(0xE4) 분리 (#286 #315) (638487a), #268 #266 #268 포함http: 지원되지 않는 프로토콜에 대한 응답을 422로 통일 (e0e7638), #293, #293, #295 해결http: Transform-Echos 및 sdf 입력을 euler 호환 패치로 전환 (#279, #280, #291) (bb29404)http: Delete scope=device 시 장치 마운트 재설정 (#265) (f6bf26b), #286 해결modules::navigation: 이동 제한에 클러치 모드 추가 (제어 가능, 기본적으로 비활성화됨) (4b69eed), #308 #308 #283 #308 해결modules::navigation: prevent_default를 사용한 버튼 입력; 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 세션 실행 과정에서 그리프트 버튼 마스크 적용 (7b93e35), #316 해결직렬화: config.mount 회전 시 euler.output으로 출력 (#268) (f6b54a2)직렬화: 오일러-바이 변환 회전 시 euler.output으로 출력 (96c6cc9), #283 해결시리얼라이제이션: set_transform을 통해 피벗을 제공하는 Workspace-Zoom (#309) (c1d08fc), #280 해결직렬화: config/body_orientation의 trigger_mode를 통일 (#265) (8781b8a), #268 해결직렬화: Transform-Regler를 세션별로 적용되는 serial_options로 변환 (#280) (03b2fd6)직렬화: 범위 내 config/mount + body_orientation 분리 (#265) (5618839), #280 해결직렬화: 출력 과정에서 세션 옵션을 전달하고 중첩된 변환을 보장 (#279, #280) (59984ce), #265 해결직렬화: WS 및 HTTP 구성 디코딩 방식 통합 (#280) (6076917)sessions: 디스엔게이지 시 베이크를 사용하는 일반적인 이동 제한 메커니즘 추가 (c8d2a93), #304 해결sessions: live_motion-틱당 이동 제한 값 추가 (제어됨) (d29013c), #308, #304, #308 해결세션: 메인 루프를 통해 전달되는 매니저 수준의 세션 관찰자 추가 (83e76ef), #284 해결세션: 피벗 주위에 마운트-리페어런팅 및 워크스페이스 줌 추가 (294d6e8), #265, 297, #272, #304 해결세션: 자체 네임스페이스를 가진 config.body_orientation 이벤트 스코프 추가; 구식 'values' 입력 시 경고 표시 (3f70047), #320 해결세션: config/mount 미리보기 소스 및 트리거 라우팅 추가 (#265) (5d11dbf), #268 해결세션: 마운트 영역에 장치 마운트 저장 및 불러오기 (#265) (4cec178), #292 해결sessions: set_workspace_transform_around를 Pivot-Echo와 함께 일반화 (0b242a2), #309 해결세션: 방향 키 마스크 및 force_scale 오버레이 메커니즘 (836ef2f), #316 해결세션: 클라이언트 프로필로 Tracy 세션 플롯에 레이블 지정 (72a8f34), #258 해결세션: 마운트-스코프-라우팅 및 스토리지 가상화 (#265) (9a4e7f4), #286 및 #293 이후 사항 포함세션: force_scale-Ducking pro 세션 (미리보기) (bff66ad)오류 수정 {#bug-fixes}
ci: 변경 로그를 복원하기 위해 릴리스 툴체인을 고정 (72c6773), #313 해결새로운 glaze 관련 컴파일 오류 수정 (e2c53d3)의존성: Rust-Crate의 nix를 0.31로 업데이트 (b3b9a84)장치: 송신 병목 지점에서 Safety-Config-Protokoll 보안 강화 (b8e8401), #295 해결장치: 펌웨어 버전 및 보정 상태에 따라 Safety-Config의 쓰기 작업을 보호 (5ad5128), #295 해결장치: 깨어난 후 안정화 기간 동안 inverse3 연결을 활성 상태로 유지 (4afed45)장치: 깨어난 후 안정화 기간 동안 inverse3 연결을 활성 상태로 유지 (79c2b66)기기: [보안] - 유선 Verse 그립에서 알림 표시 억제 (ea54a1a), #314 해결http: 세션 기반 안전 기록 작업 시 보정 확인 (89f9cd7), #295 #293 해결http: 세션 규칙에 따라 오일러 회전을 통합하기 (#288) (97cf203)inverse_ux: calibration_notifier에 의한 처리를 Minverse로 제한 (418913f)충돌 방지를 위한 라이프사이클 정리 (e7b3785)modules::inverse-ux: 펌웨어가 멈춘 경우 항상 'calibration-failed'를 출력하도록 수정 (3841d06)modules::inverse-ux: 페어링된 기기를 교체한 후 다시 페어링하기 (cf85707), #278 해결modules::sdf: 세션 규칙에 따라 sdf-Transformations-Euler 통합 (#291) (9741ac6)modules::sdf: 클라이언트 좌표계에서 SDF 형상 정렬 (c29e4f2), #276 해결프로토콜: 서비스의 중단이나 정지를 유발하는 타이머 수명 주기 관련 경합 조건을 제거함 (0cb019b), #303 해결프로토콜: 포트 열 때 직렬 버퍼를 비워, 작동 중에 교체된 장치를 감지하도록 함 (b8724d9)프로토콜: 기기 파기 시 발생하는 경합 조건으로부터 펌웨어-클라이언트-콜백을 보호 (3d795bb), #303 해결프로토콜: 0xE4-IMU-Orientierungs-API를 유형이 지정된 열거형과 올바른 Wire 형식으로 재작성 (8733ec0)허브를 통해 inverse3x를 활성화 및 비활성화할 때 기본 위치로 복귀 (f435454)서비스: adaptives 디스패칭이 기본적으로 비활성화됨 (9415638)서비스: 서비스 종료 과정을 체계적이고 제한적이며 경합 조건이 발생하지 않도록 설계 (ff888d7), #303 해결세션: *_중앙 정렬_-프리셋을 실제로 도달 가능한 중심점에 맞추기 (ad6e726), #321 해결세션: 시그그래프(Siggraph)-마운트 변경 시 워크스페이스 경계에서 자동 푸시 제거 (2df1654)세션: 활성 세션에 의해 여전히 제어되고 있는 기기의 경우, 세션 종료 시 강제 비우기를 건너뛰기 (e1f9ff7), #324 해결세션: start()가 연결 시 협상된 serial_options를 더 이상 재설정하지 않도록 수정 (#290) (27e27d8)세션: set_transform 후 작업 공간 변환 속도를 0으로 설정 (133c3ad), #280 해결websocket: 전송 세션의 규칙에 따라 명령을 디코딩 (#289) (1b24049), #265 해결성능 개선 {#performance-improvements}
core/log: haply_*-로그 기능이 비활성화된 경우 fmt::format이 건너뛰어지도록 매크로를 처리 (672a87a), #270 해결modules::sdf: 생성 시마다 SDF를 사전 계산하고, 틱(tick)마다 계산하지 않도록 변경 (15350c5), #277 해결