runtime: startResolver only checks the immediate parent for composition attributes, so a mount wrapped by any element is seeked on the root clock
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 74/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ệ
- typescript
- Lĩnh vực
- web-dev
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- TypeScript
- Star
- 54.1k
- Fork
- 4.9k
- Merge trung bình
- 10 giờ 29 phút
- Pull request đã merge (30 ngày)
- 756
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
-
fix(producer): propagate useGpu to HDR layered streaming encoderCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 87/100
heygen-com/hyperframes#5002 ·
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 78/100
heygen-com/hyperframes#4702 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Studio catalog prompt editor has no accessible nameCó thể đã có người làm @lorenzozanee đã nhận 11 ngày trước. Đang mởbug difficulty/easy triage/ready
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
heygen-com/hyperframes#4384 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
lint: validate composition variables declared on supported root elementsCó thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mởbug difficulty/easy triage/ready
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
heygen-com/hyperframes#4383 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
lint: report AVIF/M4A media-kind mismatches consistently with JPEG/MP3Có thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mởbug difficulty/easy triage/ready
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 91/100
heygen-com/hyperframes#4382 · 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ự
-
security-scan
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Studio feedback] 一轮对话的折叠Đang mởenhancement from-studio
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
esengine/DeepSeek-Reasonix#12048 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
fix(data-lake): land GitHub callback failures on the lake instead of the home page (epic #3813)Đang mởbug data-lake github-integration UI/UX
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
test: pet colorsĐang mởtestplan-item
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug claimable good first issue pillar/platforms
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
hurttlocker/o8#3277 ·
Maintainer thường phản hồi trong vòng 1 ngày