Slide Timing Rules (deck-v1)

Timing in Taleem is explicit, absolute, and declarative.

These rules define when content becomes visible. They do not define animation, transitions, or behavior.

Timing is part of the data contract. How that timing is enforced depends on the engine.

Objective

Ensure every timing value is:

These rules apply to all slide types, including flat-format eq slides.

Global Timeline

All timing values (start, end, showAt) are measured in absolute seconds from the beginning of playback.

There is no concept of relative, local, or slide-based time.

Slide Boundaries

Every slide defines a visible time window:

{
  "start": 10,
  "end": 20
}

A slide is considered visible when:

start ≤ currentTime < end

The start value is typically injected by the DeckBuilder and equals the previous slide’s end.

The end value must be provided and must be strictly greater than start.

Item-Level Timing (showAt)

Items inside a slide may define showAt, which controls when the item becomes visible.

{
  "name": "bullet",
  "content": "Key point",
  "showAt": 12
}

An item is visible when:

currentTime ≥ showAt

Each showAt must satisfy:

slide.start ≤ showAt ≤ slide.end

If showAt is omitted, it defaults to slide.start.

No Implicit Ordering

Item order in the data array does not control timing.

Only explicit time values matter.

Special Case: Flat EQ Slides

EQ slides use a flat list of entries.

{
  "type": "eq",
  "start": 50,
  "end": 60,
  "data": [
    { "name": "line", "type": "math", "content": "E = mc²", "showAt": 52 },
    { "type": "spText", "content": "Sidebar note" }
  ]
}

Validation Rules

  1. Slide timeline continuity
    slide[i].end ≤ slide[i+1].start
  2. Item bounds
    slide.start ≤ showAt ≤ slide.end
  3. Flat EQ pairing
    • sp* items must follow a main line
    • sp* items are attached during transformation

Common Pitfalls

Engine Behavior

Timing rules exist even if an engine chooses not to use them.

What Timing Does Not Do

Timing is a contract, not behavior.

Freeze Notice

These timing rules are fixed for deck-v1.

Any future timing-related features will appear only in deck-v2.