product-launch-video: assemble-index.mjs is not idempotent — a second run drops every approved frame video
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 75/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- html, typescript
- Lĩnh vực
- backend
Hướng nghiên cứu
Bắt đầu với skills/product-launch-video/scripts/assemble-index.mjs, đặc biệt là guardFrame(), hoistApprovedVideos() và thao tác ghi gần dòng 417. Theo dõi cách HTML của frame đã sửa được dùng khi tạo index.html, rồi thêm một kiểm thử hồi quy lắp ráp cùng một fixture hai lần và so sánh số lượng video ở phần tử gốc. Hoàn tất khi cả hai lần chạy đều giữ lại footage đã được duyệt và lần chạy thứ hai không âm thầm tạo ra một bản kết xuất trống.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
skills/product-launch-video/scripts/assemble-index.mjs is not idempotent. The first run hoists each approved frame <video> out of its frame file and writes the frame file back with only a placeholder comment (<!-- approved frame video hoisted by assemble-index -->). A second run finds no <video> in the frame files, so it rebuilds index.html with no footage, and it exits cleanly without any error or warning.
Repro (hyperframes 0.8.163)
- A project with a frame
compositions/frames/02-x.htmlthat holds an approved video (data-frame-video="approved", withdata-start/data-duration/data-track-index/ layout attrs). - Run
assemble-index.mjs, andindex.htmlhas the root-level<video>. ✅ - Edit any frame (e.g. a caption fix) and run
assemble-index.mjsagain. index.htmlhas no<video>, the frame file has only the hoist comment, and the render shows empty device frames.
Cause
guardFrame() → hoistApprovedVideos() returns the stripped HTML as repairedHtml, and the caller persists it (writeFileSync(compAbs, guard.repairedHtml), ~line 417). The hoist is meant to happen at assembly time, but it mutates the source of truth, so the operation destroys data on re-run.
Suggested fix
Either of these would work:
- Don't write the hoist back: keep the
<video>in the frame source and strip it only in the in-memory copy used forindex.html(the root-dimension repair can still be persisted on its own). - Or make the placeholder carry the full tag (e.g. a
data-hoisted<template>or an attribute-bearing comment) so a re-run can re-hoist from it.
A regression test: run assembly twice on the same fixture and assert that the <video> count in index.html is equal across runs.
Impact
Any edit-and-reassemble loop, which the review loop encourages, silently loses all footage. The only signal is a blank render, found after a full render cycle.
- Ngôn ngữ chính
- TypeScript
- Star
- 54.1k
- Fork
- 4.9k
- Merge trung bình
- 8 giờ 49 phút
- Pull request đã merge (30 ngày)
- 667
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của heygen-com/hyperframes
-
gsap_tween_tail counts GSAP's force3D and autoRound flags as propertiesCó thể đã có người làm @rudycelekli đã nhận 2 ngày trước. Đang mởbug triage/needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
heygen-com/hyperframes#5683 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Timeline: show a clip's full name when its label is cut offCó thể đã có người làm @DanielMcSheehy đã nhận hôm nay. Đang mởdesktop-candidate difficulty/easy enhancement good first issue help wanted triage/ready
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
heygen-com/hyperframes#5582 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Studio: press ? to open the keyboard shortcuts panelCó thể đã có người làm @B-Payal đã nhận 5 ngày trước. Đang mởdesktop-candidate difficulty/easy enhancement good first issue help wanted triage/ready
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
heygen-com/hyperframes#5580 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
remotion-to-hyperframes: Easing.cubic is mapped to power3 (quartic); cubic is power2Có thể đã có người làm @user-github-me đã nhận 5 ngày trước. Đang mởdifficulty/easy documentation help wanted triage/ready
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
heygen-com/hyperframes#5538 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
`hyperframes docs examples` lists templates that don't existCó thể đã có người làm @Muhtasim-Munif-Fahim đã nhận 8 ngày trước. Đang mởbug difficulty/easy help wanted triage/ready
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
heygen-com/hyperframes#5393 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của heygen-com/hyperframes
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Pet submission: Sleepwing / 眠翼鸟Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
OpenPetsHQ/openpets#273 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
fritzprix/libr-agent#2161 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
macOS: clicking a menu item that has a submenu closes the menu instead of opening the submenuĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
blackboardsh/electrobun#581 ·
-
backlog-skill effort:xs frontend infra ready-for-agent
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
LucasSantana-Dev/Lucky#2862 ·
Maintainer thường phản hồi trong vòng 1 ngày