Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

runtime: startResolver only checks the immediate parent for composition attributes, so a mount wrapped by any element is seeked on the root clock

オープン
#4,334 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 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 の本文から書いたものです。

説明

difficulty/medium triage/ready

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 bare bun 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 を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

heygen-com/hyperframes のほかの issue

heygen-com/hyperframes の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。