From the M2a review (no bug in the bookkeeping reduction; the gap was that the Group-1 ops' *graph* materialization — reduce_onto — was unexercised by the gates, which hid two invalid-graph edges). Fixes are graph-materialization only; the bookkeeping projection, and therefore convergence/determinism, is unchanged. - DeleteIdentifiedPitch of a single-pitch note's last pitch left an empty (Chapter-5-invalid) PitchedEvent via EventArena::get_mut (which bypasses insert's well-formedness guard). It now degrades the note to a Rest of the same id/voice/position/duration; InsertIdentifiedPitch into a rest is the dual (rest -> one-pitch note), keeping the graph consistent with the bookkeeping that mints/tombstones the pitch object either way. - ModifyEvent now skips placement-changing (move) and malformed-empty pitched replacements in the graph rather than corrupting invariant 3 (VoiceEventsSortedNonOverlap) via get_mut; voice re-sort stays deferred and the LWW bookkeeping still records the modify. Coverage: graph_edit_session (criterion 1, reduce_onto + check_invariants) now emits all five Group-1 kinds, so the real-Score gate exercises their graph mutations at scale; plus two targeted reduce_onto regression tests (note->rest, rest->note) in tests/graph_reduction.rs. Docs: DECISIONS.md records the note<->rest equivalence and the ModifyEvent placement deferral (catalog section prose routed to M2e); Transpose / P12-K2 note the i8-saturation caveat; valuegen::pitch_value_nth no longer implies spelling() is injective. Gates: build/fmt/clippy -D warnings clean; cargo test --workspace green (ops graph_reduction 13, ops lib 51); conformance_suite scale 1 passes. The unrelated Agent-I working tree is left untouched; this commit stages only ops/testkit/spec. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| anomaly.rs | ||
| causal.rs | ||
| conflict.rs | ||
| decode.rs | ||
| effect.rs | ||
| encode.rs | ||
| envelope.rs | ||
| fuzz.rs | ||
| lib.rs | ||
| migrate.rs | ||
| opset.rs | ||
| payload.rs | ||
| reduce.rs | ||
| slot.rs | ||
| stamp.rs | ||
| support.rs | ||
| undo.rs | ||
| v0.rs | ||
| valuegen.rs | ||