Commit graph Vili/scripts
Author SHA1 Message Date
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
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
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
c2e4eb2b8f The entry gives cultnet-ts the candidate bind as http://host:port, the Expected route's endpoint
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 14:25:42 +02:00
Meta Vens
c094bb0072 Test first: the entry hands cultnet-ts the candidate bind as the Expected route's endpoint (first Idunn run: bind differs)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 14:25:14 +02:00
Meta Vens
a62028ea54 The entry's startup failure names its cause: the error code, or a plain Error's fixed text
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 14:18:32 +02:00
Meta Vens
6950434f9a Test first: a failed startup names its cause and repeats no value
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 14:17:57 +02:00
Meta Vens
970218c968 Tests: the constraints.json write is gated; a not-yet-existing root named through a symlink is one root (s3 residue)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 13:36:04 +02:00
Meta Vens
1b0d1a2d56 Test: the loss is made after the service-document rewrite has finished, so only the daemon's own ask can notice it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:26:27 +02:00
Meta Vens
74ddacf53b Tests: a worker that ignores SIGTERM is dead within a second of a loss; its output while the daemon stops is not copied
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:19:08 +02:00
Meta Vens
73c47d9c08 One write authority for loss, stop and reclaim: the lease is asked every 250 ms, SIGTERM gates writes and spawns, the root has one identity
- tick: the lease is asked every WATCH_MS (250 ms); a loss SIGKILLs the worker group at once (the bound is about a second, not the 5 s service-document tick)
- mayWrite() = not stopping and held(); guard() and the worker-output sink both read it
- shutdown: stopping first, listener closed, then the worker tree is stopped, then exit 0
- canonicalPath(): args.stateRoot is realpath'd once; lock name, reclaim marker and the worker environment derive from it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:18:18 +02:00
Meta Vens
1c412908e7 Tests first: loss noticed while a worker is awaited, SIGTERM gates writes and spawns, one root identity, leaderless group, every output line gated
Red at 658de07 for the lease-loss bound, SIGTERM and spelling tests; the leaderless-group and later-line tests pin behaviour that already holds, for mutants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:15:43 +02:00
Meta Vens
658de07927 Test: the daemon's copy of a worker's stdout is gated like every other write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 03:57:19 +02:00
Meta Vens
b4a4e770cf Test: the request.json write is gated, with the lease lost the moment the worker is healthy
The stub marks its first healthy answer; the stdout line it prints before ready
had been taking the lease through the log-sink gate first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 03:57:06 +02:00
Meta Vens
f3646e0dfd Tests: the lease lost between any two writes of one request, and during the first persist
The fake Idunn signer takes the lease the moment a named path exists under the
state root. Each gate in generate and startWorker now has a case that only that
gate stops, and a lease lost while the state root opens leaves the daemon up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 03:33:28 +02:00
Meta Vens
302e97b72d A lease lost while the state root is opening is a fence, not a crash
The startup persist now sits behind the same gate as every other write; its
LeaseLost ended serve() as an unhandled rejection. onLost has already run, so
serve returns without reporting active.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 03:11:21 +02:00
Meta Vens
f69e24eeff Test: the spawn is gated at the spawn, not by the request's earlier checks
The fake Idunn signer can lose the lease once a job's meta.json exists, which
pins the guards in startWorker (no logs or embeddings directory, no worker).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 03:06:18 +02:00
Meta Vens
a1579efbbc One owner by one bind, one gate at every write: the abstract-socket lock and guard()
The hand-run lock is a bind in the abstract socket namespace named by the state
root: atomic, exclusive, gone with its owner, so the probe, the unlink and the
takeover race are deleted. Every write to the state root and every spawn calls
guard(), which asks held() at that moment; Idunn's held() reads the lease each
time and reports a loss through the handler the daemon registered, so a request
admitted before the loss stops at its next write and a respawn cannot outlive it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 03:04:31 +02:00
Meta Vens
17e84c65da Tests first: crashed-lock race, in-flight fence, SIGTERM stop, foreign reclaim, port range
Red at 4fd3f60 for stale-lock-takeover-race, fence-admits-in-flight-request and
bind-port-65536-accepted; green guards for reclaim-root-unpinned and the SIGTERM
property. The daemon's stop() no longer leaves a daemon holding the run open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 03:01:17 +02:00
Meta Vens
4fd3f60c88 Test: a second daemon that fails to refuse is killed, not left holding the test run open
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:33:22 +02:00
Meta Vens
6a80b3b4b8 Test: the child refuses a vector of the wrong width
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:46:41 +02:00
Meta Vens
235321ed86 Entry: derive the daemon's environment in one exported function, and test its argument contract
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:45:01 +02:00
Meta Vens
956fdf8ff8 Daemon serves through a runtime port: Idunn write lease or hand-run socket lock
serve(runtime) listens first, writes the state root only once the runtime
holds it, answers Idunn's route challenge ahead of the cross-site refusal,
and fences on lease loss. --health is deleted; the pid file and /proc
reclaim move behind the hand-run runtime. Adds scripts/idunn-entry.mjs,
the kimodo and SOMA-X gitlinks, encode_texts for the child, and tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:23:07 +02:00
Meta Vens
70f60b9b8a Daemon tests: the pid file's life, strays that ignore SIGTERM, a worker with no encoder child, a live worker left alone
Closes the survivors StrykerJS reported over the new supervisor code (61 mutants, 41 killed, 20 survived): the pid
file is removed when its worker exits and not when it spawned nothing, the restart kill is SIGKILL (a stubborn stray
and a SIGTERM-proof encoder child), the group match is the pid file's, not any marked process. killGroup loses its
unused return value.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:54:01 +02:00
Meta Vens
6651662b2c Encoder: pool after LLM2Vec's query marker, live_identity reads its own versions, tests reach every field
The header-on vector now matches Kimodo's encoder loaded from the repo ids (cosine 1.0; the bare header gave
0.9974) because the wrapped text carries LLM2Vec's instruction/query separator, which keeps the header out of
the pooling. live_identity reads the installed versions itself, so the worker passes no version it could fake,
and the tests pin installed_versions against substituted modules, the prompt form and device in the identity,
and a text that differs past any prefix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:40:08 +02:00
Meta Vens
2bf4a1dba7 Daemon: own the worker's whole tree, across worker exits and daemon crashes
The worker's process group is killed when the worker exits for any reason, so no encoder child survives it.
A pid file in the state root names the group; the next daemon start kills a group left by a crashed
predecessor if one of its members carries this state root's embeddings directory, before serving. The
retired operator route's 404 test returns (built from parts, so the grep stays empty) and the test script
gets a per-test timeout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:20:01 +02:00
Meta Vens
4fe1fc963c Encoder: apply the Llama-3 chat header explicitly, and pin the identity at the worker's call site
The child wraps every text with text_encoding.chat_header and tokenizes it itself, so the prompt form no
longer rides on the model's _name_or_path. The identity names the assembly truthfully (header form
included, as a hash of the template) and re-keys the cache. The worker builds its identity through
live_identity and installed_versions, which the tests reach; the identity test now uses live-length
revisions, so a truncated identity or key fails. An env-gated test compares a fresh child vector with
Kimodo's own encoder loaded from the repo ids.

Supersedes encoder-assembly-b (motion-pipeline:ruling:encoder-chat-header-on).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:20:01 +02:00
Meta Vens
e673ec1d4a Test: the retired provider-advertisement route answers 404
Keeps the Eve path out of scripts/ so the negative grep over scripts/ is empty.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:28:55 +02:00
Meta Vens
b3ef8f3090 Test: drop the lastError check that no mutant could fail
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:22:45 +02:00
Meta Vens
c3b048a2ab Daemon: drop the unread worker.model; tests for grace, host default, relative models root, early death
Mutation triage (StrykerJS, 81 survivors on the first full run) showed worker.model was
written and never read. The new tests pin the survivors that were behaviour: the loopback
default, --host, stray flags, the models-root resolution, the SIGTERM grace, a worker that
dies while the daemon waits for its health, the POST route, and lastError after a
requested stop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:07:15 +02:00
Meta Vens
3843a772f8 Tests: worker failure paths, env twins, group kill, job record, store refresh
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 13:16:50 +02:00
Meta Vens
94e08d1fdc Test: write the snapshot revision file with a real newline escape
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 12:32:53 +02:00
Meta Vens
6487c7a063 Test: the worker applies the thread cap before it loads the model
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 12:32:04 +02:00