Commit graph

144 commits

Author SHA1 Message Date
Meta Vens
7f6e0ce7c1 Merge cut/vili-request-marks: a request's marks and inPlace are kept in the job record and never reach the worker (Soul s1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:40:30 +01:00
Meta Vens
d1fcb03858 README: FBX export is live, and marks and inPlace are the caller's, kept in the record
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:23:42 +01:00
Meta Vens
6976520e52 Vili keeps a request's marks and inPlace in the job record, never gives them to the worker, and refuses malformed ones first
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:23:42 +01:00
Meta Vens
386c4d6691 Tests: a request's marks and inPlace are kept in the record, never reach the worker, and malformed ones are refused first
Red at base: the fields are not yet read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:19:17 +01:00
Meta Vens
3066c375d6 Merge cut/vili-loop-export: Vili exports a seam-matched loop window on request (Soul s1 fixed, s2 holds)
The worker picks the pose- and velocity-matched window from the generated
joints; the FBX is that window; the record keeps request.loop, worker.loops
and the constraints as sent. Constraints given more than once are refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 19:09:35 +01:00
Meta Vens
67979a78d2 vili-daemon.mjs and its test: back to LF line endings
The earlier fixes in this batch (16e585d, d35b9e2, bdee73c) staged both files with CRLF by a tool slip; this commit
changes no line but the endings, so the batch's net diff on them is its real lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:50:30 +01:00
Meta Vens
bdee73c028 Tests pin each window refusal: a negative first, first equal to last, a fractional last, extra or misnamed --frames arguments
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:32:27 +01:00
Meta Vens
d35b9e2c31 A sample's file and window pair by its own index, not by sorting the file names as text
motion_100.bvh sorted before motion_11.bvh, so past 100 samples a clip was exported over another sample's window.
The index is read from the file name and orders the samples and names the clips.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:32:26 +01:00
Meta Vens
16e585d0b9 Constraints given twice are a 400, so the record names the one input the worker read
The worker reads one path; with inline constraints and constraints_path both sent, the daemon preferred the path
but the record kept the inline list. Two inputs are now refused before anything is written, in the daemon's
fixed-text 400 shape, echoing nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:32:26 +01:00
Meta Vens
0426a7ce3a loop_windows moves beside loop_window and takes the model; a test pins it on a real take with the two skeletons
The worker's window path loaded the 8B model at import, so no test reached it and swapped atan2 arguments or
the 30-joint skeleton went unnoticed. loop_windows(output, model) needs only model.output_skeleton and
model.fps. The test uses a committed 240-frame somaskel77 take (fixtures/take.npz, joints from a live Vili BVH
by forward kinematics) and stand-ins that carry the 77- and 30-joint skeletons' names and parents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:32:25 +01:00
Meta Vens
d275f00aeb README: loop on the generate request, and what the FBX window is
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 09:05:56 +01:00
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