generateDanceVideo() takes a queued generationJobs record through
prompt build -> forward character/garment/dance-ref uploads to H3
Console's /v1/assets -> POST /v1/videos -> poll -> push a traced clip
into library.json (characterId/garmentId/refDanceVideoId). Mirrors
generateForPrompt's submit/poll/persist shape but keyed off the new
generationJobs store so a restart resumes any in-flight job by its
h3JobId, same as resumeGenerations() does for the live queue.
POST /api/admin/generate accepts characterId/garmentId (+ optional
refDanceVideoId, else a random active dance-ref is picked) and skips
straight to the cached clip if that character x garment combo was
already generated (M.7 dedupe). GET /api/admin/generate/:id polls job
status.
Tests spin up a mock H3 Console over HTTP so the full submit/poll/land
path runs offline. Also fixes two existing test fixtures
(dressup-crud, admin-pages-flow) that spawn server.js without copying
prompt-template.js — worked until T8 added the first require() of it
into server.js, at which point the spawned server silently failed to
boot.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>