product-launch-video: assemble-index.mjs is not idempotent — a second run drops every approved frame video
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 75/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- html, typescript
- 領域
- backend
調査の方向性
skills/product-launch-video/scripts/assemble-index.mjsから始め、特にguardFrame()、hoistApprovedVideos()、417行目付近の書き込み処理を確認してください。index.htmlの構築時に修復されたフレームHTMLがどのように使われるかを追い、その後、同じfixtureを2回組み立ててルートの動画数を比較する回帰テストを追加してください。両方の実行で承認済みの映像が保持され、2回目の実行で空のレンダリングがひそかに生成されなければ完了です。
索引モデルが issue の本文から書いたものです。
説明
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.
- 主要言語
- TypeScript
- スター
- 54.1k
- フォーク
- 4.9k
- 平均マージ
- 9時間 3分
- マージ済み PR(30日)
- 670
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
heygen-com/hyperframes のほかの issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
heygen-com/hyperframes#5863 ·
メンテナーはふだん 1 日以内に返信
-
gsap_tween_tail counts GSAP's force3D and autoRound flags as properties対応中かも @rudycelekli が 3 日前に担当しました。 オープンbug triage/needs-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
heygen-com/hyperframes#5683 ·
メンテナーはふだん 1 日以内に返信
-
Timeline: show a clip's full name when its label is cut off対応中かも @DanielMcSheehy が 1 日前に担当しました。 オープンdesktop-candidate difficulty/easy enhancement good first issue help wanted triage/ready
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
heygen-com/hyperframes#5582 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
Studio: press ? to open the keyboard shortcuts panel対応中かも @B-Payal が 5 日前に担当しました。 オープンdesktop-candidate difficulty/easy enhancement good first issue help wanted triage/ready
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
heygen-com/hyperframes#5580 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
remotion-to-hyperframes: Easing.cubic is mapped to power3 (quartic); cubic is power2対応中かも @user-github-me が 6 日前に担当しました。 オープンdifficulty/easy documentation help wanted triage/ready
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
heygen-com/hyperframes#5538 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
heygen-com/hyperframes の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
jessepollak/home#2223 ·
メンテナーはふだん 1 日以内に返信
-
grep fixture corpus test follows the corpus's loop symlink under the receipt runner (fails on main)オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
code-yeongyu/senpi#3756 ·
メンテナーはふだん 1 日以内に返信
-
org:external package:deepagents priority:triage topic:memory topic:middleware type:bug
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
langchain-ai/deepagents#7059 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
osmlab/name-suggestion-index#12992 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
hemilabs/ui-monorepo#2506 ·
メンテナーはふだん 1 日以内に返信