You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Per-section sync 2/5: decide the data model, beat-grid and boundary handling for a piecewise time-map #23
Part of #8. Design decision; no feature code. Sub-issues 3 and 4 depend on the answers.
#8 lists open questions that must be settled before a non-uniform time-map can be built. Settle and record them (in this issue, then link from #8).
Questions to answer
Beat grid. A non-uniform warp changes what "BPM" means and how the shared ebeats grid (used for quantization/snapping in the canvas timeline) is reconciled. Re-derive ebeats from the warped timeline, or keep a separate authored grid?
Data model. Sections today are {name, number, start_time} with one song-wide beat grid. Does piecewise correction need per-section tempo metadata or a resampled ebeats array? State the schema change and its save / build / XML round-trip implications.
Boundary handling. At section edges (a section that ends early or late): clamp, blend, or snap to the next section's anchor?
Each of the four questions has a written decision and a reason, including the rejected alternative.
The schema change (if any) is specified well enough to review without code, and is checked against the pack format rules in feedpak-spec before implementation (any new manifest key must land in the spec first).
@itsjustroxi this sub-issue is the design decision behind #8 (per-section sync), and the engine-to-timestamps work waits on it. Decisions to make and record (no code):
Beat grid: re-derive ebeats from the warped timeline, or keep a separate authored grid?
Data model: per-section tempo metadata or a resampled ebeats array, and the resulting schema and save/build/XML round-trip implications (a new pack-format key must land in feedpak-spec first).
Boundary handling at section edges: clamp, blend, or snap to the next section's anchor?
Scope guard: confirm it stays offline and baked, not a live score-follower.
Resolved by merged PR #68. The recorded decisions answer all four questions and include the rejected alternatives:
Fit the existing shared beat grid to the audio; keep beat identity and meter, rather than introducing a separate authored grid.
Bake into existing chart fields and song_timeline.json. Checked against pinned feedpak spec/schema sources; no schema change or new manifest key is needed.
Use a continuous, strictly increasing piecewise-linear map with shared boundary anchors, identity constraints for skipped sections, and preserved locks. Reject incompatible proposals rather than clamp or silently blend; preserve skipped objects exactly, including crossing spans.
Apply explicitly as one undoable offline edit; playback uses baked timestamps.
The document specifies the save/build/XML contract, precision requirements and acceptance fixtures for #25. Implementation remains in #24–#26; parent #8 remains open.
Activity
pullfrog commentedon Oct 2, 2026
cchacs commentedon Oct 2, 2026
@itsjustroxi this sub-issue is the design decision behind #8 (per-section sync), and the engine-to-timestamps work waits on it. Decisions to make and record (no code):
ebeatsfrom the warped timeline, or keep a separate authored grid?ebeatsarray, and the resulting schema and save/build/XML round-trip implications (a new pack-format key must land infeedpak-specfirst).Generated by Claude Code
docs(editor): decide per-section sync time-map contract (#23)
Merge pull request #68 from get-flashbacks/feat/per-section-sync-desi…
cchacs commentedon Oct 11, 2026
Resolved by merged PR #68. The recorded decisions answer all four questions and include the rejected alternatives:
The document specifies the save/build/XML contract, precision requirements and acceptance fixtures for #25. Implementation remains in #24–#26; parent #8 remains open.