Skip to content

Registry flowchart blocks render blank on 0.7.x: tl.labels is unreadable under the render compiler #2548

Description

@jurczykpawel

Summary

The registry blocks flowchart and flowchart-vertical render blank (dotted-grid background only, no nodes/connectors) on every hyperframes@0.7.x render, and every render that mounts them pays the full 45 s sub_timeline_readiness_timeout.

Reproduction

  1. hyperframes init a project (or take any existing one) and add the registry block:
    hyperframes add flowchart-vertical
  2. Mount it as a sub-composition window in index.html:
    <div class="clip" data-composition-id="flowchart-vertical"
         data-composition-src="compositions/flowchart-vertical.html"
         data-start="1" data-duration="3" data-track-index="1"
         data-width="1920" data-height="1080"></div>
  3. npx hyperframes@0.7.60 render

Expected: the flowchart animates inside its window.
Actual: only the dotted-grid background is captured for the whole window, and the render logs:

[sub_timeline_readiness_timeout] Sub-composition timelines did not become ready within 45000ms

With browser console visible, the root cause is explicit:

[Compiler] Composition script failed flowchart-vertical ... TypeError: Cannot read properties of undefined (reading 'hold5')

Root cause

registry/blocks/flowchart-vertical/flowchart-vertical.html (and the landscape flowchart twin) schedule the "Pythom" → "Python" typing correction by reading a label position back off the timeline:

tl.addLabel("hold5", "+=0.2");
// ...
const typingStart = tl.labels["hold5"];   // ← throws under the render compiler

The 0.7 render compiler executes composition <script>s under a GSAP proxy whose timeline exposes no readable .labels map, so this line throws before window.__timelines[...] = tl runs. The timeline is never registered → the readiness gate times out → the block ships blank.

Environment

Reproduced identically on:

  • macOS 15 arm64, native npx hyperframes@0.7.60 render
  • linux/amd64 (Docker), same version

The blocks work in Studio preview (real GSAP, .labels readable) — only the render compiler path breaks, which makes this easy to miss.

Fix

Use GSAP's own label-relative position syntax ("hold5+=<offset>") instead of reading .labels back — the idiom every other step in these files already uses. Timing is identical. PR incoming.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions