epiphany/crates/epiphany-render-svg/tests/golden
Levi Neuwirth b1bfe04d6c Inter-staff review fix: attribute a curve by its arc, not its nearest glyph
The stem tear-off repaired in 4132a7a had a twin one layer deeper, live in
the same fixture and baked into the same golden: the bottom staff's slur was
attributed to the TOP staff, kept shift 0, and tore off its own notes.

A distance metric cannot fix this one. A slur's start endpoint is deliberately
lifted off its notes -- staff_top + gap above, staff_bottom - gap below -- into
the inter-staff zone, where the nearest glyph is routinely a note on the
adjacent staff (here, a top-staff ledger note). So attribute a curve the way it
is drawn: the arc's direction picks the side. An upward arc (p1.y >= p0.y) hangs
below a staff -- take the greatest staff-line band bottom at or above p0.y; a
downward arc sits above one -- take the smallest band top at or below p0.y.
Fall back to the nearest band mid-line for a curve inside a staff.

Locked by a_slur_travels_with_its_own_staff, verified to fail without the fix
(d_bottom=8.695 > d_top=7.235 -- the slur riding the wrong staff).

Also assert the two metrics the solve moves rather than leaving them untested:
collision_penalty is 0 (the staves separate cleanly) and vertical_density_penalty
saturates at 1.0 -- the solve targets content extents while the metric scores the
realized gap against the band model's preferred height. That is the same
metric-vs-solver tension as casting_off under justification; DECISIONS.md records
it, plus three further reviewed gaps: staff-less content takes shift 0, the
preferred gap is read from the constructor rather than the region's declared
band, and the 3+-staff cumulative cascade is correct but unexercised.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 10:05:14 -04:00
..
ten_measure_single_staff.engrave.snapshot.txt Push 3 Standard-tier: per-system justification (fill the content width) 2026-07-08 19:21:46 -04:00
ten_measure_single_staff.engrave.svg Push 3 Standard-tier: optimal break search (replace greedy first-fit) 2026-07-08 21:29:08 -04:00
ten_measure_single_staff.stub.snapshot.txt Schema major 2 Phase E2: slur curves + cubic-bézier primitive 2026-07-08 15:33:00 -04:00
ten_measure_single_staff.stub.svg Schema major 2 Phase E2: slur curves + cubic-bézier primitive 2026-07-08 15:33:00 -04:00
ten_measure_with_repeats.engrave.snapshot.txt Push 3 Standard-tier: optimal break search (replace greedy first-fit) 2026-07-08 21:29:08 -04:00
ten_measure_with_repeats.engrave.svg Push 3 Standard-tier: optimal break search (replace greedy first-fit) 2026-07-08 21:29:08 -04:00
ten_measure_with_repeats.stub.snapshot.txt Schema major 2 Phase E2: slur curves + cubic-bézier primitive 2026-07-08 15:33:00 -04:00
ten_measure_with_repeats.stub.svg Schema major 2 Phase E2: slur curves + cubic-bézier primitive 2026-07-08 15:33:00 -04:00
ten_measure_with_slurs.engrave.snapshot.txt Push 3 Standard-tier: per-system justification (fill the content width) 2026-07-08 19:21:46 -04:00
ten_measure_with_slurs.engrave.svg Push 3 Standard-tier: optimal break search (replace greedy first-fit) 2026-07-08 21:29:08 -04:00
ten_measure_with_slurs.stub.snapshot.txt Schema major 2 Phase E2: slur curves + cubic-bézier primitive 2026-07-08 15:33:00 -04:00
ten_measure_with_slurs.stub.svg Push 3 (slur quality) 1/3: render dashed/dotted slurs faithfully 2026-07-08 17:13:32 -04:00
two_staff_close_content.engrave.snapshot.txt Inter-staff review fix: make staff attribution y-aware (stems tore off) 2026-07-09 09:42:51 -04:00
two_staff_close_content.engrave.svg Inter-staff review fix: attribute a curve by its arc, not its nearest glyph 2026-07-09 10:05:14 -04:00
two_staff_close_content.stub.snapshot.txt Inter-staff slice 1/2: a two-staff pressure fixture 2026-07-08 22:48:39 -04:00
two_staff_close_content.stub.svg Inter-staff slice 1/2: a two-staff pressure fixture 2026-07-08 22:48:39 -04:00
valid_score_rich.engrave.snapshot.txt Schema major 2 Phase E2: slur curves + cubic-bézier primitive 2026-07-08 15:33:00 -04:00
valid_score_rich.engrave.svg Justification review fix: keep stems attached to their noteheads 2026-07-08 19:54:18 -04:00
valid_score_rich.stub.snapshot.txt Schema major 2 Phase E2: slur curves + cubic-bézier primitive 2026-07-08 15:33:00 -04:00
valid_score_rich.stub.svg Schema major 2 Phase E2: slur curves + cubic-bézier primitive 2026-07-08 15:33:00 -04:00