Session handover — 2026-07-15 pt2¶
A follow-on to 2026-07-15, which segmented WCP's 27 missing
videos into ranked render buckets. This session took the biggest bucket — fcr.gallery ×13
(pt1's agreed workstream #1) — and shipped its render/producer/schema/adapter, but hit a real
stop on acquisition and did NOT deploy. The videos turned out to be Wix VOD channel videos,
a third media surface the ADR-0010 API can't reach.
What shipped (committed, NOT deployed — inert without acquired refs)¶
Branch gallery-video-render-producer (commit 37c2aa7). The full gallery-video CODE path,
A/B-proven zero-regression and reproducible-from-capture:
- Schema:
videosmultiline field onfcr.gallery(theslideshowUrls/subItemsline encoding; repeaters are scalar-only). - Producer:
makeStyleLookup(lib/cms/seed-from-build.js) emits each gallery section's attributed video refs as/assets/videos/<mediaId>.mp4lines, freshness-gated on the v8mediaRefs.sectionAttributionkey (presence-of-key, not version number — same discipline asCAPTURE_REQUIREMENTS);transformer.jsstampsfcr.gallery.videos. - Render:
gallery-wcp.astrodraws a<video controls>strip below the image grid, deliberately outside.gallery-item(lightbox index untouched), omitted when absent;Gallery.astroadapter parses the lines field throughgetImageSrc. - Migration hook:
migrateGalleryVideosintransform-seed-images.mjs(routes through the Media ManagermigrateVideoRefpath — which honestly reportsvideo-not-in-wix-pool).
A/B (change stashed vs applied, _key-normalized): garvanbay 6 gallery blocks gain
videos:"" + zero other diffs; WCP's 4 gallery-page category blocks carry exactly the 13
attributed refs (Commercial 4 / Residential 3 / Shed repair 2 / Misc 4), every other gallery
block videos:"". CMS build compiles; check-renderers + video-domain validates pass.
The real stop — the videos are Wix VOD channels, not Media Manager assets¶
Measured, not inferred: 0 of 13 gallery videos appear in the Media Manager pool
(mediaPool, mediaTypes=VIDEO, 46 files) by any id form (file id / media.video.id /
posters[].id) — nor does the hero id, in the capture's id form. The live network trace
settled it: the player enumerates them from
GET /_api/vod/public/v3-to-v2/public/lists/<channelId>?media_type=secure_video (items carry
source_url: null), gets a JWT from GET /_api/v1/access-tokens, and streams tokenized HLS
(repackager.wixmp.com/.../master.m3u8?token=<JWT> + .ts). The captured mp4-shaped URL
400/403s on direct fetch. So the content plane has three Wix media surfaces, and ADR-0010's
by-id join covers only the first two.
The seed graft (raw /assets/videos/ refs) was reverted so no dead <video> ships;
videoDebt is unchanged this session (gallery shortfall still 13); WCP was not redeployed.
Where to look¶
- Durable lesson: known-patterns "A Wix gallery's VIDEOS are VOD-channel HLS, not Media Manager" — and its detection rule (read the live network trace, don't re-derive the pool; the pool-truncation amendments condition you to reach for a pool fix, resist it).
- Deferral contract: known-issues "WCP asset debt …" → the new sub-section "Gallery bucket (13) — render/producer SHIPPED, acquisition BLOCKED on Wix VOD" carries the reopen trigger and the channel ids from the trace.
- ADR-0010 third amendment (VOD as a third media surface) + build Slice F (VOD-list API + access token + HLS→mp4 remux → R2), Planned.
- ADR-0009 Slice 5 row — the gallery bucket note (Slice 5c: render/producer shipped, acquisition deferred).
Next¶
- VOD acquisition (ADR-0010 Slice F) — the deferred half of this slice. Enumerate the VOD
channels (
9ba179c0…,4cd95f58…, + 2 more), mint per-video tokens, remux HLS→mp4 (needs an ffmpeg decision — cf. the Phase 5 oversize-video ffmpeg note in known-issues), upload to R2, graft the migrated refs into the committed WCP seed, redeploy, re-capture ours → confirm galleryvideoDebt13→0. Verify the other two buckets' source first —fcr.about×11 may be Media-Manager (API-reachable today) or also VOD; one probe decides. fcr.aboutvideo bucket (11) — the next render bucket; one adapter/block decision covers every service page. Probe its source before assuming the API path works.- Still open from earlier: garvanbay
/contacthero (its HOLD, untouched); home-FAQ heading extraction (double-motivated — the 20th FAQ tone stamp + 3 dropped-live video homes); aligner role-aware anchoring; Slice 6 calibration.
The through-line¶
pt1's rule was measure the join before building it. This session is the same rule at the acquisition layer: the acquisition join was measured against live before a single video was downloaded — the by-id API path returned 0/13, the network trace named the real product, and the pre-registered "risk" (some videos may lack a Media-Manager home) became the finding. The split — ship the proven measurement/render, defer the newly-scoped acquisition, and never stamp a dead ref into a committed seed to move the number — is the honest close.