feat(ios): animate fold with timed hinge keyframes - #2763
Conversation
|
Size Report
Startup median (7 runs, lower is better):
|
|
Reviewed at e676092. The code has two blocking defects, so this is not ready to merge as is. A recorded For keyframe input, Not blocking: the comment next to the 210_000 timeout still says "one macOS helper press (30s)" and omits the 60s of motion, Is it worth parsing the fold intent once at the daemon boundary and passing a typed input down, so Once the script round trip is fixed, a live replay on the Duo simulator of a saved Does aborting the simulator spawn also stop the fold process inside the guest? The only evidence so far is the quoted 60.8 degree result. The category-boundary failure above comes from reading the thresholds and tolerance; I did not see it on a device. Smoke Tests failed while waiting for the fixture home screen on a non-foldable simulator in a route that only calls wait, open, and snapshot; this diff only touches the fold command, the fold pose helper, and the fold timeout, so the failure looks unrelated, but a rerun would confirm that. The next thing to fix is the fold keyframes round trip through the |
|
Addressed at
Live evidence on the Duo / Xcode 27.1, captured during this review: The saved file replayed all 4 steps successfully in 19.2s. Replaying the same saved keyframe line without the final reopening step completed 3 steps in 14.8s, with The CoreDevice stream ends via its documented timeout; that sample is the observed result. The original recorded fold response also reported Production cancellation probe (a 5s 0→180 sequence, abort requested at 2s; process inventory filtered to the exact temporary helper path): {"elapsedMs":2001,"phase":"before-abort","guestProcessIds":["83047"]}
{"phase":"aborted","elapsedMs":2347,"message":"request canceled","guestProcessIds":[]}
{"phase":"readback","angle":69.8,"elapsedMs":7795,"guestProcessIds":[]}
{"phase":"readback","angle":69.8,"elapsedMs":12965,"guestProcessIds":[]}
{"restoredAngle":180}Temporary sessions/claims were cleaned up, and the Duo was restored open with Safari running. |
Summary
Adds timed hinge keyframes to
foldacross CLI, Node, and MCP, building on #2762:Accepts 2–64 keyframes over at most 60 seconds, with linear interpolation, reversals, and holds. The final timestamp bounds motion; preparation and readback are additional. One cancellable guest process uses absolute deadlines at approximately 60 Hz and skips missed frames. Completion verifies the final angle, including stable intermediate poses. Presets remain supported. Recordings preserve keyframes for replay.
36 files; 871 additions / 106 deletions relative to the parent. Scope includes shared input/schema, Apple execution, tests, and documentation.
Validation
Head:
f5357444ecb4dc174dbad38c717faead994f46c6.pnpm check:affected --run: passed all runnable checks; GitHub-owned checks pending..adreplay passed with final 1.3° readback. Cancellation removed the guest helper and held 69.8° beyond the original deadline. CLI/Node trajectories, holds and reversals also verified. Review reply includes raw evidence. Sessions/claims cleaned up.