runtime: startResolver only checks the immediate parent for composition attributes, so a mount wrapped by any element is seeked on the root clock
メンテナーはふだん 1 日以内に返信
@ohad6k がすでに取り組んでいます。
2026年9月25日 から。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 74/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- typescript
- 領域
- web-dev
調査の方向性
Start in packages/core/src/runtime/startResolver.ts, focusing on the no-authored-start branch, then review packages/core/src/runtime/startResolver.test.ts and its existing resolver setup. Add the neutral-wrapper regression matrix for the three composition markers, run bun run --cwd packages/core test src/runtime/startResolver.test.ts, and verify the accepted boundary and timing cases remain intact.
索引モデルが issue の本文から書いたものです。
説明
Found while exporting After Effects comps to data-vfx-chain hosts (hyperframes-ae-mcp, findings §Task 3.14, 2026-09-23).
Symptom. A sub-composition mount whose data-composition-src element sits under a wrapper (here <canvas layoutsubtree class="hf-vfx-src"> > .hf-vfx-in[data-composition-src]) resolves its start to 0 and is seeked on the root clock. Once root time passes the sub-comp's own duration, its layers go visibility: hidden, and drawElementImage returns a transparent bitmap with no error. On retro-wave the mounted Logo comp painted 17,874 / 22,633 / 0 / 0 opaque px at root t = 7.3 / 8.5 / 10.444 / 12.5 s with byte-identical geometry; the threshold is exactly the sub-comp's 10.01 s duration.
Cause. startResolver's walk-up is one level: it fires only if the immediate parent carries data-composition-src / -id / -file. A canvas or any exporter/author wrapper between them breaks the chain.
Ask. Use a closest()-style walk (nearest ancestor carrying a composition marker, stopping at the composition root) so any wrapper is safe. The exporter works around it today by copying data-start/data-duration onto the wrapped element.
Method worth keeping. A DOM probe injected into a copy of the emitted project (rAF overlay drawn into the snapshot PNG, no CDP, no runtime patch) made the per-time paint counts observable under hyperframes snapshot.
Contribution brief — September 23, 2026
Confirmed behavior
Reproduced using the actual createRuntimeStartTimeResolver in Chrome 150.0.7871.24 at source fa4261bee (0.8.68), then rechecked against main 86fa10ced4297bfd9f4fe67b6767afae7a07fd3c (0.8.69): the resolver and its relevant dependencies are unchanged. For a host starting at 5 seconds and an untimed inner composition root:
| Host marker | Direct child | One neutral wrapper | Two neutral wrappers |
|---|---|---|---|
data-composition-src |
5 | 0 | 0 |
data-composition-id |
5 | 0 | 0 |
data-composition-file |
5 | 0 | 0 |
All cases should preserve the same host start. This reproduces the resolver defect; the complete AE export/snapshot/render path has not been rerun.
Minimal regression fixture
Add a test in the existing packages/core/src/runtime/startResolver.test.ts suite, where the resolver import, jsdom environment and cleanup already exist:
it("preserves the host start across a neutral wrapper", () => {
document.body.innerHTML = `
<div data-composition-id="root" data-start="0">
<div data-composition-src="child.html" data-start="5">
<section><div id="inner" data-composition-id="child"></div></section>
</div>
</div>`;
const inner = document.getElementById("inner");
if (!inner) throw new Error("Missing fixture root");
const resolver = createRuntimeStartTimeResolver({});
expect(resolver.resolveStartForElement(inner)).toBe(5);
});
The browser probe returns 0 for this shape, versus 5 when the section is removed. No media files or exporter are needed for this isolated regression. Expand the test to the full matrix rather than only covering one marker.
Accepted scope and starting points
In the no-authored-start branch of startResolver.ts, find the nearest enclosing composition host across neutral wrappers while preserving composition boundaries and existing timing semantics. Extend startResolver.test.ts.
This is medium work because host offsets, explicit timing, and boundary semantics interact. Keep the fix limited to host-start resolution; do not redesign VFX, playback clocks or media scheduling.
Acceptance checks
- All nine combinations above resolve to 5; the six wrapper cases fail before the fix.
- Stop at the nearest composition boundary; do not use an outer host or sibling clock.
- Preserve explicit authored starts, named/anonymous hosts, reference expressions and unresolved fallbacks.
- After following CONTRIBUTING.md, run
bun run --cwd packages/core test src/runtime/startResolver.test.ts, then the relevant broader core/runtime tests. Use the package's Vitest runner, not barebun test. - Exercise a mounted-composition snapshot/render regression before merge; unit success alone is not end-to-end proof. Include the fixture and observed timing in the PR.
- Lint and format changed files under the repository guidelines.
Availability and related work
On September 23 there were no assignments, claim comments or directly linked implementation PRs. PR #3826 touches this resolver, but its inspected diff only adds resolveLocalStartForElement; it does not repair this ancestor walk. PR #4330 is adjacent VFX work. Recheck both before starting and coordinate any shared-file changes. Comment with the intended approach before beginning so a maintainer can coordinate ownership.
triage/ready describes this accepted, specified scope. Reviewer/mentor ownership is still being confirmed; this brief does not assign anyone or promise newcomer mentoring.
- 主要言語
- TypeScript
- スター
- 54.1k
- フォーク
- 4.9k
- 平均マージ
- 7時間 21分
- マージ済み PR(30日)
- 722
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
heygen-com/hyperframes のほかの issue
-
gcp-cloud-run image pins Chrome 148, which drops `background-clip: text` glyphs inside layered children; the CLI's Chrome 152 paints them対応中かも @user-github-me が今日担当しました。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 84/100
heygen-com/hyperframes#5117 ·
メンテナーはふだん 1 日以内に返信
-
Docs: clarify that "Enable auto-update" is only available in the Claude Code terminal (CLI) /plugin UI対応中かも @rumi7911 が 2 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
heygen-com/hyperframes#5027 ·
メンテナーはふだん 1 日以内に返信
-
fix(producer): propagate useGpu to HDR layered streaming encoder対応中かも @Monster-GM が 4 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 87/100
heygen-com/hyperframes#5002 ·
メンテナーはふだん 1 日以内に返信
-
skills: remoteHeadSha() can open a Git Credential Manager dialog on Windows (GIT_TERMINAL_PROMPT does not cover GUI helpers; slug unvalidated)対応中かも @RaphaelFakhri が 9 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
heygen-com/hyperframes#4702 · コメント 1 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Studio catalog prompt editor has no accessible name対応中かも @lorenzozanee が 15 日前に担当しました。 オープンbug difficulty/easy triage/ready
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
heygen-com/hyperframes#4384 ·
メンテナーはふだん 1 日以内に返信
heygen-com/hyperframes の issue をすべて見る
似ている issue
-
Mondriaan
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
knaw-huc/textannoviz#709 ·
メンテナーはふだん 1 日以内に返信
-
Add: YRF Music Nepalオープンstreams:add
難易度 1/5 1時間未満 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
About page content is also published as an unstyled duplicate at /about/about/対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
walletbeat/walletbeat#1558 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
hawk-digital-environments/HAWKI#438 ·
メンテナーはふだん 1 日以内に返信
-
good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
OktoLabsAI/okto-pulse#114 ·
メンテナーはふだん 1 日以内に返信