## Resolution Closing as a duplicate of #228. The two blockers split cleanly: - Blocker 2 (dropped direction `<voice>`) is fixed in #238 — the editorial-voice `<voice>` on a `<direction>` now round-trips. - The four synthetic fixtures `synthetic/{segno,coda}.{3.0,3.1}.xml` are pinned to the strict gate in #238 (after removing the meaningless part-group stop editorial and giving each a real note so its `<divisions>` is legitimate). - Blocker 1 — the writer materializing `<attributes>`/`<divisions>` into a note-less measure — is the writer-policy bug already tracked by #228 (the `add:divisions`/`add:attributes` family). A naive "suppress when the part has no notes" guard regresses `ksuite/k016a` (which legitimately carries `<divisions>` in a note-less measure), so the correct fix needs divisions-presence tracking — #228's call, not a spot fix here. Nothing actionable remains in this issue beyond #228, so it is repointed there. --- ## Original report Follow-up to #204 / #235 (segno/coda api coverage) and #236 (editorial footnote/level support). ### The two blockers 1. Empty-measure `<attributes>`/`<divisions>` injection. The synthetic measure has no notes, so the writer materializes a `<divisions>` the source never had — the writer-materializes-implied-containers family of #228 (`add:divisions` / `add:attributes`). 2. Dropped direction `<voice>`. The `<direction>` carries `<voice>1</voice>` (editorial-voice-direction group), which the api dropped on write. Fixed in #238. ### Repro ``` cmake --build build/api --target mxtest-api-roundtrip ./build/api/mxtest-api-roundtrip discovery data --dump /tmp/dump diff /tmp/dump/synthetic__segno.3.0.xml.expected.xml /tmp/dump/synthetic__segno.3.0.xml.actual.xml ``` ### References - Follows #204 / #235 / #236; voice blocker fixed in #238 - Divisions blocker is the #228 writer-policy family - Part of #208 (api round-trip coverage)
Resolution
Closing as a duplicate of #228. The two blockers split cleanly:
<voice>) is fixed in feat: round-trip direction voice and pin the synthetic segno/coda fixtures #238 — the editorial-voice<voice>on a<direction>now round-trips.synthetic/{segno,coda}.{3.0,3.1}.xmlare pinned to the strict gate in feat: round-trip direction voice and pin the synthetic segno/coda fixtures #238 (after removing the meaningless part-group stop editorial and giving each a real note so its<divisions>is legitimate).<attributes>/<divisions>into a note-less measure — is the writer-policy bug already tracked by api: round-trip injects implied default elements:<type><line><voice><staff>#228 (theadd:divisions/add:attributesfamily). A naive "suppress when the part has no notes" guard regressesksuite/k016a(which legitimately carries<divisions>in a note-less measure), so the correct fix needs divisions-presence tracking — api: round-trip injects implied default elements:<type><line><voice><staff>#228's call, not a spot fix here.Nothing actionable remains in this issue beyond #228, so it is repointed there.
Original report
Follow-up to #204 / #235 (segno/coda api coverage) and #236 (editorial footnote/level support).
The two blockers
Empty-measure
<attributes>/<divisions>injection. The synthetic measure has no notes, so the writer materializes a<divisions>the source never had — the writer-materializes-implied-containers family of api: round-trip injects implied default elements:<type><line><voice><staff>#228 (add:divisions/add:attributes).Dropped direction
<voice>. The<direction>carries<voice>1</voice>(editorial-voice-direction group), which the api dropped on write. Fixed in feat: round-trip direction voice and pin the synthetic segno/coda fixtures #238.Repro
References
<type><line><voice><staff>#228 writer-policy family