90 Commits

Author SHA1 Message Date
Ian Gulliver
fc3bbf894f Apply go fix modernizations 2026-03-05 11:39:13 -08:00
Ian Gulliver
165b9d1c6c Add trigger linking, block weight computation via DFS 2026-02-23 22:54:48 -08:00
Ian Gulliver
7c1b2a8e7e Extract init methods and clean up sortedBlocks references 2026-02-23 22:42:21 -08:00
Ian Gulliver
88407f40c6 Replace generic constraint with sameRowConstraint 2026-02-23 22:35:24 -08:00
Ian Gulliver
49f0cdc290 Remove block sort algorithm and per-seed tests 2026-02-23 22:32:46 -08:00
Ian Gulliver
7dbc3e8088 Seed sort weights from cue order instead of input position 2026-02-23 21:04:09 -08:00
Ian Gulliver
389c204e27 Revert to simple trigger-edge weight sort (fix 450x perf regression) 2026-02-23 21:01:01 -08:00
Ian Gulliver
640038e74f Extract crossTrackWeight helper, disable debug output in tests 2026-02-23 20:22:50 -08:00
Ian Gulliver
6879ab46c3 Track-deepest map to fix cross-track weight ordering in sort 2026-02-23 20:19:56 -08:00
Ian Gulliver
0d77d2d6a1 Add deterministic seeds, debug tracing for assignRows cycle detection 2026-02-23 19:06:13 -08:00
Ian Gulliver
6c3eb67fb3 Implement weight-based topological sort for timeline blocks 2026-02-23 14:59:45 -08:00
Ian Gulliver
8dcd695f84 Split exclusive group rows instead of inserting single gap 2026-02-22 08:24:47 -08:00
Ian Gulliver
0341b5e1d8 Propagate chain cells through gaps inserted at cue rows 2026-02-21 23:15:33 -08:00
Ian Gulliver
9ae5204733 Use random seed for mock show generation, revert show size to default 2026-02-21 23:11:03 -08:00
Ian Gulliver
4ec5cbe8e0 Precompute exclusive group member tracks to avoid hot-loop map allocations 2026-02-21 23:01:07 -08:00
Ian Gulliver
1178adba92 Use slices.Insert instead of double-append in insertGap 2026-02-21 22:55:56 -08:00
Ian Gulliver
22dbb48b4e Split mock show generation into methods and clean up randBlock 2026-02-21 22:37:48 -08:00
Ian Gulliver
c830709976 Allow multiple time-limited blocks per track per cue 2026-02-21 22:30:04 -08:00
Ian Gulliver
7a125c0bc9 Simplify mock show state and allow same-track signal chaining in validator 2026-02-21 22:13:12 -08:00
Ian Gulliver
eaf59641fd Restructure mock show generation with clearer state model 2026-02-21 22:02:56 -08:00
Ian Gulliver
f49f3dff14 Remove debug logging from timeline solver
Clean up timeline.go by removing the diagnostic Printf statements added
during the investigation of the iterative solver cycle.
2026-02-21 19:15:53 -08:00
Ian Gulliver
34747e3ff8 Investigate timeline solver cycle and add trigger conflict validation
- Add trigger conflict validation in show.go to detect overlapping or
  mutually exclusive row constraints.
- Implement Trigger.String() for improved error reporting.
- Add detailed logging to timeline.go to trace iterative solver
  non-convergence and empty row optimization cycles.
- Extend mock show generator with experimental cross-track triggers.
2026-02-21 19:14:14 -08:00
Ian Gulliver
4e42b6ea60 Randomly trigger FADE_OUT instead of END for previous cue's blocks in mock show generator 2026-02-21 17:04:54 -07:00
Ian Gulliver
956bd5dd2e Make constraint kind a typed enum, remove dead next_row handling, panic on invalid kinds 2026-02-21 17:01:37 -07:00
Ian Gulliver
a847c17596 Add cellTypeAt helper to simplify repeated type checks in timeline solver 2026-02-21 16:56:55 -07:00
Ian Gulliver
a504b3e34f Replace boolean cell flags with CellType enum (event, title, continuation, gap, chain, signal) 2026-02-21 16:52:10 -07:00
Ian Gulliver
50d4b12299 Render chain cells as arrows in timeline UI 2026-02-21 16:40:30 -07:00
Ian Gulliver
13a4c41cc6 Replace breaks and next_row constraints with chains and gap separators 2026-02-21 16:33:02 -07:00
Ian Gulliver
b527b94b16 GenerateMockShow takes scenes/avgCuesPerScene/avgBlocksPerCue instead of fixed cue/block counts 2026-02-20 22:39:29 -07:00
Ian Gulliver
7d3a23dfc1 allowedTracks gating, constraint/exclusive helpers, duplicate trigger source validation, re-enable untimed block validation 2026-02-20 22:31:04 -07:00
Ian Gulliver
99f79e82f3 Place blocks on random tracks, chain via lastOnTrack 2026-02-20 21:29:16 -07:00
Ian Gulliver
ac259bb7a0 Use lastOnTrack for chaining triggers between blocks 2026-02-20 21:22:25 -07:00
Ian Gulliver
8b9d9b633a Add scene end cues that trigger END on untimed blocks 2026-02-20 21:18:32 -07:00
Ian Gulliver
911121e463 Scene-based cue naming in mock show generator, stub validation for untimed blocks 2026-02-20 21:14:50 -07:00
Ian Gulliver
b282ab710f Realistic mock show generator, validation for same-track chains and untimed signals, loop icon, assignRows convergence limit 2026-02-20 21:02:18 -07:00
Ian Gulliver
4e2135f483 Switch qrunproxy to generated mock show, remove show.json 2026-02-20 20:23:34 -07:00
Ian Gulliver
287ca83724 Add mock show generator and timeline benchmark 2026-02-20 20:20:25 -07:00
Ian Gulliver
2c31d9505c Refactor show model/validation into show.go and simplify timeline internals 2026-02-20 20:10:43 -07:00
Ian Gulliver
7d398082dd Simplify const syntax, remove redundant map lookups in buildCells 2026-02-20 17:31:03 -07:00
Ian Gulliver
0bfa11c640 Don't add trailing break gap after last block on a track 2026-02-20 17:22:11 -07:00
Ian Gulliver
fd0687f2af Remove dead empty-members check, extract gapInsertionPoint from insertGap 2026-02-20 17:12:50 -07:00
Ian Gulliver
bd3dd1a43d Extract enforceConstraints from assignRows 2026-02-20 17:10:02 -07:00
Ian Gulliver
69402ea2e4 Switch Show to pointer slices, share objects between Show and Timeline 2026-02-20 17:06:43 -07:00
Ian Gulliver
a7e831cfab Pre-compute end-chains-same-track set, remove per-block trigger scan 2026-02-20 16:58:42 -07:00
Ian Gulliver
f12ef296aa Switch to []*TimelineCell with embedded row/track, eliminating cellID and index maintenance 2026-02-20 16:46:37 -07:00
Ian Gulliver
6ff8675348 Switch to []*TimelineTrack and pointer-based cellID.track 2026-02-20 16:40:27 -07:00
Ian Gulliver
90ce4d93fa Add --print-timeline-and-exit flag 2026-02-20 16:36:18 -07:00
Ian Gulliver
47ed09a848 Merge Timeline and timelineBuilder into single struct, remove cells()/setCells() 2026-02-20 16:27:23 -07:00
Ian Gulliver
4607e77ee7 Avoid empty rows in solver by pulling other tracks up instead of pushing down 2026-02-20 16:16:23 -07:00
Ian Gulliver
214bd91cb2 Inline setSignal, remove iteration limit from assignRows 2026-02-20 15:58:43 -07:00