From a6d5b3fc2c30004f578284e79bbbea099723517f Mon Sep 17 00:00:00 2001 From: mkdev11 <94194147+MkDev11@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:08:27 +0200 Subject: [PATCH] Make social links drive speaker names in preview (Closes #63) Wire the setup social-link fields through to the live composed preview: derived handles now update canvas speaker labels immediately, persist across Split/Stack/Spotlight, clear/replace per bucket only, and keep export enabled. - episode.js: broaden deriveHandle (plain handles, trailing slashes, youtube @handles) and add speakerLabels() for preview/export consumers - preview.js: paint scaled labels per layout rect and expose data-speaker-labels on the canvas for verification - ui.js: handle both input and change on social-link fields; force a drawFrame after link edits so preview labels refresh without waiting - verify-social-context.mjs: upload 3 speakers, assert canvas + setup derived names, preset survival, per-speaker clear/replace, export enabled --- .builderloops/verify.json | 2 +- app/episode.js | 30 ++++++-- app/preview.js | 18 +++-- app/ui.js | 25 +++--- scripts/preview-build.mjs | 10 +++ scripts/typecheck.mjs | 2 +- scripts/verify-social-context.mjs | 122 +++++++++++++++++++----------- tests/episode.test.mjs | 13 ++++ 8 files changed, 157 insertions(+), 65 deletions(-) diff --git a/.builderloops/verify.json b/.builderloops/verify.json index 0d932f4..ca0097e 100644 --- a/.builderloops/verify.json +++ b/.builderloops/verify.json @@ -1,5 +1,5 @@ { - "comment": "Build-correctness and rendered-workflow gate: zero-dependency unit tests over the DOM-free episode/preset model, a preview-build smoke check, a headless Chrome rendered workflow that uploads three generated local WebM files through the shipped Host/Guest controls and decodes blob-backed pixels in the composed preview across Split/Stack/Spotlight — including per-region Stack row pixels and Spotlight host-dominant/PiP geometry — surviving preset switches with export still enabled, a headless social-context workflow that enters distinct per-speaker social links through the real inputs and confirms they store per speaker, surface as derived names in the preview, and survive a preset switch with the uploads intact, and a headless export workflow that uploads two generated videos, enters social links, chooses a preset, clicks the real Export action, and confirms the produced file is a genuinely playable video (loads back into a