Commit a68fd8b356c0d6160b598dde2caf11a63026f38e
1 parent
719fdbb7
Fix: mark T8 dance-video library entries edited:true
ingest.js's syncLibrary() only carries a library entry forward as-is when edited is true; otherwise its periodic auto-sync (every 5 min) rebuilds the record from the raw H3 job and silently drops channel/characterId/garmentId/refDanceVideoId. That broke the M.7 dedupe cache and would have let dance clips leak into the regular live-channel pool once channel got wiped. Caught while running a real batch generation: the second sync cycle stripped a clip's traceability fields within 5 minutes of it landing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Deddn3sM3oQnmvqWSMb4y
Showing
2 changed files
with
13 additions
and
0 deletions
dressup-generate.test.js
| ... | ... | @@ -187,6 +187,12 @@ test("generate: full happy path lands a clip with character/garment/dance-ref tr |
| 187 | 187 | assert.equal(clip.garmentId, garment.id); |
| 188 | 188 | assert.equal(clip.refDanceVideoId, danceRef.id); |
| 189 | 189 | assert.equal(clip.channel, "dance"); |
| 190 | + // ingest.js's syncLibrary() only carries a library entry forward as-is | |
| 191 | + // when `edited` is true; otherwise its periodic auto-sync (every 5 min, | |
| 192 | + // server.js) rebuilds the record from the raw H3 job and silently drops | |
| 193 | + // channel/characterId/garmentId/refDanceVideoId — breaking both the M.7 | |
| 194 | + // dedupe cache and pickNextClip()'s dance-channel exclusion. | |
| 195 | + assert.equal(clip.edited, true, "dance clip must be edited:true or the next library sync wipes its traceability fields"); | |
| 190 | 196 | |
| 191 | 197 | // T10's admin.html traceability column joins clip.characterId/garmentId/ |
| 192 | 198 | // refDanceVideoId back against the three admin lists to show "谁的脸 + | ... | ... |
server.js
| ... | ... | @@ -779,6 +779,13 @@ async function generateDanceVideo(job, opts = {}) { |
| 779 | 779 | const clip = { |
| 780 | 780 | id: polled.id, |
| 781 | 781 | source: "h3console", |
| 782 | + // ingest.js's syncLibrary() only carries an entry forward as-is | |
| 783 | + // when `edited` is true — otherwise it rebuilds the record from | |
| 784 | + // the raw H3 job on its next periodic sync, which knows nothing | |
| 785 | + // about channel/characterId/garmentId/refDanceVideoId and would | |
| 786 | + // silently strip them (and leak this clip into the non-dance | |
| 787 | + // pickNextClip() pool, since `channel` would be gone too). | |
| 788 | + edited: true, | |
| 782 | 789 | channel: "dance", |
| 783 | 790 | characterId: job.characterId, |
| 784 | 791 | garmentId: job.garmentId, | ... | ... |