Commit graph

133 commits

Author SHA1 Message Date
Meta Vens
447bf09ddf loop: the worker picks the seamless window, the daemon forwards loops[k] to Blender, the record keeps it
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>
2026-10-25 08:59:03 +01:00
Meta Vens
928eb15592 test_bvh_to_fbx: the BVH builder's newlines are escapes, not line breaks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 08:56:14 +01:00
Meta Vens
303cb28683 bvh-to-fbx.py applies a --frames range it is handed and chooses none
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>
2026-10-25 08:55:43 +01:00
Meta Vens
f5fa841d58 loop_window: the lowest-cost seam of a generated take, pose and velocity matched
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>
2026-10-25 08:54:53 +01:00
Meta Vens
3499d86b2b Map: the RPS slot clips r1 (takes, pace, slide, loop seams, countdown contacts)
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>
2026-10-25 07:24:52 +01:00
Meta Vens
a496fbc42c Map: SOMA avatar against the live export (r3 body facts and rationale)
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>
2026-10-25 04:08:29 +01:00
Meta Vens
51eb113d57 Merge fix/vili-runner-build: daemon tests run their stub Blender from the checkout, not noexec /tmp (Soul s4)
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>
2026-10-25 02:49:11 +01:00
Meta Vens
af0280840d Test: declare the exec scratch directory the previous commit used
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 02:24:21 +01:00
Meta Vens
b6a87f9d1d Test: the stub Blender lives where the runner can execute it, not in the noexec /tmp
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>
2026-10-25 02:08:00 +01:00
Meta Vens
8329da9cbc Map: job ids are vili-<ms>-<8 hex>, unique by exclusive create
Soul s3 finding docs-map-job-id-shape-stale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 02:49:32 +02:00
Meta Vens
95384ef1ec Merge cut/vili-fbx-export: Vili exports each clip as FBX on the SOMA skeleton through sealed Blender (Soul s1-s3)
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>
2026-10-25 02:49:11 +02:00
Meta Vens
889c3eb945 Test: the ordinary job after the FIFO jobs names a model, since the resident worker keeps the last one served
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 01:51:42 +02:00
Meta Vens
579244b166 Test: the FIFO refusal's canary is checked outside the job record, which keeps the request by design
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 01:49:47 +02:00
Meta Vens
8e007cd10d README: the rest job id is rest-<13-digit ms>-<8 hex>, and the work slot is named (Soul s2 readme-rest-job-id-stale)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 01:45:14 +02:00
Meta Vens
6bdbc27c1c Fix: a listed BVH is opened non-blocking, and the work directory is a declared state slot swept at start (Soul s2 readinside-opens-before-checking, work-dir-undeclared-unswept)
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>
2026-10-25 01:45:14 +02:00
Meta Vens
19d894c5a7 Test: Soul s2 findings as behavioural tests (id suffix burst, FIFO listed as BVH, work slot and sweep)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 01:40:54 +02:00
Meta Vens
bff0a86c04 Map: Blender bundles sixteen bookworm libraries, not nine
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>
2026-10-25 00:49:12 +02:00
Meta Vens
113dcaa745 Test: the mapped-library record is written beside the FBX it names
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 00:43:23 +02:00
Meta Vens
2891f016bf Fix: the sealed Blender carries libx11-6, libxext6, libxcb1, libxau6, libxdmcp6, libbsd0 and libmd0 too (Soul s1 blender-uses-host-x-libs)
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>
2026-10-25 00:42:32 +02:00
Meta Vens
ae47430522 Test: the container precheck exempts libmd (dpkg needs it, so the slim image has it); the test demands the release's copy is the one mapped
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 00:41:43 +02:00
Meta Vens
2f5e48f1db Test: the sealed Blender loads no host library outside the libc family (container job, red until the X libraries are bundled)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 00:41:11 +02:00
Meta Vens
32eb3e4c87 Test: a directory above the BVH swapped for a symlink is refused too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:23:22 +02:00
Meta Vens
b015658962 README: the FBX routes are planned until the next idunn up; the seed and the export's file handling as built (Soul s1: front-door-claims-fbx-live)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:19:17 +02:00
Meta Vens
ea7ce34d90 Fix: job ids from one source with an exclusive mkdir, an integer seed at the door, Blender handed a private copy and its FBX created exclusively (Soul s1: job-id-collision, seed-recorded-not-used, bvh-swap-after-check)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:19:16 +02:00
Meta Vens
3574efe92e Test: the rest-fbx lease test waits for the Blender probe, so the lease is what stops it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:19:02 +02:00
Meta Vens
37e23f03e2 Test: the plant-link stub writes its file with a newline escape, not a newline
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:15:55 +02:00
Meta Vens
a9413d4444 Test: Soul s1 findings as behavioural tests, red at the h1 head (job ids, seed, link swap) or pinning gates (lease, LD_LIBRARY_PATH, record links, header time, key loss)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:04:36 +02:00
Meta Vens
385a7e5733 Test: the signal comes after the export's first line is logged
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:32:26 +02:00
Meta Vens
3d80c7f0b5 Test: wait for the version probe's answer, not its start, before asking for an export
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:25:51 +02:00
Meta Vens
1328b5514c Test: a planted directory that is not a job id's serves nothing
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:22:48 +02:00
Meta Vens
f344cef3b9 Tests for unpack-debs.py: only libraries, flat, sibling links, no overwrite
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:20:52 +02:00
Meta Vens
a65cc60113 Export: the redundant guard after Blender is gone; tests for a lying exit code, a malformed result with an FBX, output after SIGTERM, and a hung request
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:17:07 +02:00
Meta Vens
62c0217d1f test_bvh_to_fbx: a clip's timing, pose against Blender's native reading, the unit factor and every key
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:13:39 +02:00
Meta Vens
f99d95b4c6 Test: the hung export's grandchild is the one that is new since the orphan's
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:08:45 +02:00
Meta Vens
8479465cd1 Recipe: the Blender input has its own id; idunn validate refuses an input id that collides with an artifact id
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:08:28 +02:00
Meta Vens
f7fba1c115 bvh-to-fbx.py: the header names no in-place bake, matching the negative grep
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:07:57 +02:00
Meta Vens
2688e69fbe test_bvh_to_fbx: pin the result line, the frame range and the take name
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:07:27 +02:00
Meta Vens
ae7c8a1e52 stub-blender: the orphan's grandchild does not keep the stub alive
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:06:40 +02:00
Meta Vens
c109f436b8 Tests: malformed result, missing FBX, a grandchild left behind, clip order independent of the worker's listing
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:00:22 +02:00
Meta Vens
d4375d458f Tests: say why a job ended before its export; minted seeds differ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:54:48 +02:00
Meta Vens
13ca0df731 test_bvh_to_fbx: read Hips travel past the importer's late take end
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:51:16 +02:00
Meta Vens
c6c79bfdef test_bvh_to_fbx: report the frame range and Hips travel by frame when travel is off
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:49:37 +02:00
Meta Vens
bfbcd7a1ee stub-blender: the hung export's grandchild logs its pid
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:49:15 +02:00
Meta Vens
f38f420df1 The version probe writes nothing to the state root; existing tests learn the new backend and routes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:33:13 +02:00
Meta Vens
89ddb8dab0 README: Vili is live on Yggdrasil; FBX export, the read route, rest-fbx and the v1 job record
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:29:42 +02:00
Meta Vens
0c34679bdc Recipe: Blender 5.2.2 and its nine Debian libraries are sealed in the release
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>
2026-10-24 20:29:41 +02:00
Meta Vens
742de6314d Vili exports each clip as FBX through the sealed Blender, in the daemon, under the write gate
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>
2026-10-24 20:29:41 +02:00
Meta Vens
9c50b64226 Tests first: the FBX export's behavioural tests and the stub Blender they run against
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>
2026-10-24 20:26:54 +02:00
Meta Vens
1ed33272e0 Map: Vili FBX export r3 against the live Yggdrasil body
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>
2026-10-24 20:07:43 +02:00
Meta Vens
c5cf4457c6 Merge cut/vili-admission: Vili is an Idunn target on Yggdrasil (Soul s1-s4)
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>
2026-10-24 17:06:43 +02:00