Worker: with loop true the answer gains loops (one {first, last, poseCost, velocityCost}
per sample) from loop_window over Kimodo's somaskel77 posed joints and compute_global_heading.
Daemon: loop must be a boolean and needs fbx (400 'Invalid fbx request.'); sample k is
exported with '--frames first+1 last+1'; an answer without a window for a sample fails
'fbx-export-failed (no loop window)'; the record keeps request.loop and, when inline,
the constraints as sent. The daemon never computes a window.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Optional '--frames A B' after the clip name sets the scene's frame range to A..B
(Blender frames, from 1); outside the take, or malformed, it exits 4 or 3 and writes
nothing. Without it the whole take, as before. The test's BVH builder is shared.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Numpy only; the resident worker is its one caller. Hips-relative, heading-normalised
poses; cost is pose RMS plus 0.1 s of velocity RMS; ties go to the longer window,
then the earlier. Tests: a periodic stride between rests, the stated cost against a
frame-by-frame oracle, heading, ties, minimum length.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Imagination pass for motion-pipeline:cut_spec:cut-rps-slot-clips.r1: 19 live
takes; the brisk mope covers the walk-off in 11.4 s, no celebrating take
reaches walking pace without a speed-up, and no countdown take shows three
separate fist-into-palm hits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Imagination pass for motion-pipeline:cut_spec:cut-soma-humanoid-avatar.r3:
the live rest FBX imports as a valid Humanoid with the finger table shifted
to *2/*3/*4, the bone map converges from code in two passes, clips reimport
through DependsOnArtifact, and exit travel comes from root motion read by the
duel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Idunn's node-build runner mounts /tmp noexec, so test-daemon failed 20 of 137 and
the 2026-10-25 deploy failed in Sealing. The stub now lives under the gitignored
.vili/test-scratch. The whole recipe passes by hand in the runner's shape.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Idunn's python/node runners mount /tmp noexec; test-daemon copied the stub Blender there, so every export test saw
"unavailable" and 20 tests failed in the release build (node --test prints to stdout, which Idunn's error drops).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
motion-pipeline:cut_spec:cut-vili-fbx-export.r3. Blender 5.2.2 plus sixteen
sha256-pinned bookworm libraries sealed in the release (operator rulings
blender-libs-bundled-in-release, blender-x-libs-bundled-in-release); export runs in
the daemon under the write gate on a private copy; byte-identical FBX on one
machine; unique job ids; motion_job.v1 provenance with the seed; GET
/motion/artifacts and POST /motion/rest-fbx. Not deployed yet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
readInside opens O_NONBLOCK|O_NOFOLLOW and checks the open descriptor before reading, so a FIFO is refused at once and holds no filesystem thread. work/ is a slot in the recipe; a daemon that holds the state root creates it and removes stale export-XXXXXX directories from it, nothing else, before it serves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The operator approved seven more X packages (motion-pipeline:ruling:
blender-x-libs-bundled-in-release) after Soul s1 found the sealed Blender
loading them from the host.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seven sha256-pinned bookworm inputs from the recipe's snapshot, unpacked by the one unpack-blender-libs step.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ten sha256-pinned external inputs, unpack-blender and unpack-blender-libs steps, the blender artifact (blender 0555),
VILI_BLENDER for test_bvh_to_fbx.py, jobs slot schema motion_job.v1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fbx and clipName on /motion/generate; scripts/bvh-to-fbx.py converts one BVH (SOMA77 names, standard T-pose,
metres, travel on Hips) with a fixed hash seed and time so one BVH on one host body gives one set of bytes. The
daemon runs it per listed BVH (regular file inside the job's artifact directory only), in its own process group,
killed with the worker on lease loss and stopped on SIGTERM. The seed is minted when absent and every job records
motion_job.v1 (seed, file sha256, export). GET /motion/artifacts and POST /motion/rest-fbx. The duplicated
bvh/bvhStandardTpose derivations are one plan. The entry points the daemon at the release's blender.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Red on the daemon at c5cf445: fbx jobs, the refusal ladder, export containment, kill on lease loss and SIGTERM,
the minted seed, motion_job.v1, the artifact read route and rest-fbx. test_bvh_to_fbx.py runs the converter in
real Blender (VILI_BLENDER). This commit does not pass its own tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Imagination pass for motion-pipeline:cut_spec:cut-vili-fbx-export.r3 at base
c5cf445: Blender is not yet in the release and needs nine bundled Debian
libraries; export runs in the daemon under the write gate; the FBX is
byte-identical on one machine with a fixed hash seed and header time; root
travel stays on Hips, so Unity can use root motion or in-place.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
motion-pipeline:cut_spec:cut-vili-admission.r1 under the operator's ruling
vili-moves-to-yggdrasil-now. Idunn's process write lease is the one writer
authority (hand-run: one abstract-socket bind per real root); the release carries
the pinned python-build-standalone tree and hash-locked packages; admitted live
under Idunn 804ed75 with end to end, continuity restart and rollout verified.
Follow-up: vili-worker-intake-local-callers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>