From dfdbc625b1e59a7d24af956bc516182e20ad3497 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 26 Jun 2026 09:52:13 -0400 Subject: [PATCH] Agent K M2e review follow-up: tighten catalog accuracy + container creates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address the two-pass review of the M2e catalog expansion (ca07c28). All gates green: cargo test --workspace 535/0, conformance_suite scale 1, fmt + clippy -D warnings clean, catalog PDF rebuilt (no undefined refs). Pass 1 (doc-vs-implementation accuracy): - Undo semantics narrowed to the prototype minted-object model (the catalog's own UndoTransaction model + P11-C8): the new K0 sections' minting members (insert/create) keep tombstone-the-mint undo; the non-minting ops (modify / transpose / deletes / settings) now state they synthesize no inverse, rather than promising rich restore/reintroduction the reducer does not implement. - Spanner migration corrected: Tie/Slur/Beam reconstruct self-containedly while a Spanner remains read-only/unmigratable until the v0 projection carries its TimeAnchors (a Phase-3/Pass-12 extension); the "joins in M2" claim is removed, in both the CreateCrossCutting section and the migration chapter. - The reduce()/reduce_onto() agreement claim (DECISIONS + the staff_based_regions comment) narrowed to regions represented in reducer state: op-created/deleted regions agree, but reduce_onto additionally seeds base regions a base-free reduce() never sees. Pass 2 (empty-container enforcement, made real and complete): - create_region / create_staff_instance / create_voice reject (ContainerNotEmpty) a carried value bearing ANY typed child object — not just the structural hierarchy. A region: no staff instances, barline-alignment groups, or graphic objects; a staff instance: no voices or measures; a voice: no events. Each is a distinct TypedObjectId the reducer mints separately, so a carried child would otherwise materialize an unminted object into the graph (a graph/ledger faithfulness gap). ClefChange/KeySignatureChange/metric-grid carry no TypedObjectId and are values, so they are correctly not gated. The check reads the carried value only, so reduce() and reduce_onto() agree. - Catalog §Structural Containers states the precondition as "no typed child object" with the per-container enumeration, matching enforcement exactly. Coverage: new graph_reduction tests create_rejects_a_non_empty_carried_container (hierarchy children) and create_rejects_carried_non_hierarchy_children (barline group / graphic object / measure). DECISIONS M2c gains the create-emptiness bullet. Stages only ops + spec; the unrelated Agent-I working tree is left untouched. Co-Authored-By: Claude Opus 4.8 --- crates/epiphany-ops/DECISIONS.md | 20 +- crates/epiphany-ops/src/reduce.rs | 43 +++- crates/epiphany-ops/tests/graph_reduction.rs | 213 +++++++++++++++++++ spec/operation_catalog.pdf | Bin 92140 -> 94001 bytes spec/operation_catalog.tex | 68 +++--- 5 files changed, 312 insertions(+), 32 deletions(-) diff --git a/crates/epiphany-ops/DECISIONS.md b/crates/epiphany-ops/DECISIONS.md index 76da5f1..9d4fe4b 100644 --- a/crates/epiphany-ops/DECISIONS.md +++ b/crates/epiphany-ops/DECISIONS.md @@ -159,6 +159,17 @@ and delete semantics are **empty-only (precondition)**. feeding the cross-cutting re-anchoring table) are a strictly larger design than the slice needs. The empty-only gate is the conservative floor a cascade could later build on. Catalog §Structural Containers (M2e) states this normatively. +- **A create must carry an empty container, too — for *every* typed child + object, not just the structural hierarchy.** `create_region` / + `create_staff_instance` / `create_voice` reject (`ContainerNotEmpty`) a carried + value bearing any nested object with a distinct `TypedObjectId`: a region's + staff instances, barline-alignment groups, or graphic objects; a staff + instance's voices or measures; a voice's events. Graph creation clones the full + value into the score, so a carried child would materialize an object the reducer + never mints in its `objects` bookkeeping — a graph/ledger faithfulness gap. The + check reads the carried value only, so `reduce()` and `reduce_onto()` agree. + *(Review-driven: the first cut checked only the hierarchy vectors; + `barline_alignment_groups` / `graphic_objects` / `measures` were added after.)* - **Live-child sets are tracked in the reducer, not re-derived from the graph.** `region_instances: RegionId → {StaffInstanceId}` and `instance_voices: StaffInstanceId → {VoiceId}` (a voice's live events are read from @@ -196,8 +207,13 @@ classification names. Recorded here because the review changed code/tests. indices. - **`SetUserPageBreak` mirrors `SetUserSystemBreak` exactly, under the canonical LWW key.** Both now (i) share the live-and-staff-based precondition via a - `staff_based_regions` index, so `reduce()` and `reduce_onto()` agree on - missing / tombstoned / FreeGraphic targets, and (ii) materialize the graph break + `staff_based_regions` index, so for any region *represented in reducer state* + `reduce()` and `reduce_onto()` reach the same missing / tombstoned / FreeGraphic + verdict — that is, regions an op stream creates or deletes. (`reduce_onto(base)` + additionally seeds the base regions into that state, which a base-free `reduce()` + does not see, so a layout op targeting a live *base* region can still apply under + `reduce_onto` and no-op under `reduce`; the corpus exercises only op-created + regions, where the two agree.) Both also (ii) materialize the graph break under the anchor's **resolved musical position** (`apply_break_lww` + `resolved_anchor_position`): any existing anchor resolving to the same position is dropped before the new one is added, so the graph break list stays in lockstep diff --git a/crates/epiphany-ops/src/reduce.rs b/crates/epiphany-ops/src/reduce.rs index 39b3dd2..aba04a2 100644 --- a/crates/epiphany-ops/src/reduce.rs +++ b/crates/epiphany-ops/src/reduce.rs @@ -353,10 +353,14 @@ struct Reducer<'a> { region_instances: BTreeMap>, instance_voices: BTreeMap>, // Regions whose content carries a staff-based slot (staff-based or hybrid), - // and so can hold a metric grid or user break. FreeGraphic regions cannot; - // tracking this in the base-free reducer lets SetMetricGrid / SetUserPageBreak - // / SetUserSystemBreak reach the same precondition verdict with or without a - // graph, so reduce() and reduce_onto() never disagree on those ops. + // and so can hold a metric grid or user break. FreeGraphic regions cannot. + // Tracking this lets SetMetricGrid / SetUserPageBreak / SetUserSystemBreak + // reach the same precondition verdict for any region *represented in reducer + // state* (those an op stream creates/deletes) whether or not a graph is + // present. A base-only region exists in reducer state solely after + // `seed_from_graph` (reduce_onto), so a base-free reduce() that never sees it + // can still diverge on a base-region target — the corpus targets only + // op-created regions, where the two agree. staff_based_regions: BTreeSet, migrated_regions: BTreeSet, region_migrator: BTreeMap, @@ -394,6 +398,17 @@ struct WorkingSnapshot { graph: Option, } +/// The precondition no-op a structural create or delete returns when a container +/// is non-empty where the operation requires it empty (a create carrying children, +/// or a delete of a container with live children). +fn container_not_empty() -> OperationEffect { + OperationEffect::NoOp { + reason: NoOpReason::PreconditionFailedUnderReduction { + reason: PreconditionFailureReason::ContainerNotEmpty, + }, + } +} + /// Apply a user break to a region's break list under the canonical LWW key — the /// anchor's resolved musical position. Any existing anchor resolving to that same /// position is dropped first, so two anchors at one position never both persist, @@ -2053,6 +2068,18 @@ impl<'a> Reducer<'a> { if let Some(effect) = self.mint_precondition(robj) { return effect; } + // A create mints an *empty* container: its child objects are minted (or + // base-seeded) separately. A carried value bearing any typed child object + // — a staff instance, a barline-alignment group, or a graphic object, each + // a distinct TypedObjectId the reducer does not mint here — would import an + // unminted object into the graph, so it is rejected (Catalog §Structural + // Containers). + if !op.region.content.staff_instances().is_empty() + || !op.region.content.barline_alignment_groups().is_empty() + || !op.region.content.graphic_objects().is_empty() + { + return container_not_empty(); + } self.graph_create_region(&op.region); self.mint_container(env, robj); self.region_instances.entry(op.region_id()).or_default(); @@ -2081,6 +2108,11 @@ impl<'a> Reducer<'a> { if let Some(effect) = self.mint_precondition(iobj) { return effect; } + // Reject a carried staff instance bearing any typed child object — a voice + // or a measure (the two object collections it can hold). + if !op.instance.voices.is_empty() || !op.instance.measures.is_empty() { + return container_not_empty(); + } self.graph_create_staff_instance(op.region, &op.instance); self.mint_container(env, iobj); self.region_instances @@ -2107,6 +2139,9 @@ impl<'a> Reducer<'a> { if let Some(effect) = self.mint_precondition(vobj) { return effect; } + if !op.voice.events.is_empty() { + return container_not_empty(); + } self.graph_create_voice(op.staff_instance, &op.voice); self.mint_container(env, vobj); self.instance_voices diff --git a/crates/epiphany-ops/tests/graph_reduction.rs b/crates/epiphany-ops/tests/graph_reduction.rs index 0a3fe7f..df7f5b2 100644 --- a/crates/epiphany-ops/tests/graph_reduction.rs +++ b/crates/epiphany-ops/tests/graph_reduction.rs @@ -1615,3 +1615,216 @@ fn user_breaks_at_one_resolved_position_collapse_to_a_single_anchor() { ); assert!(check_invariants(&result.score).is_empty()); } + +#[test] +fn create_rejects_a_non_empty_carried_container() { + let base = epiphany_core::generators::valid_score(100); + let region = base.canvas.regions[0].id; + let (staff_instance, _) = target(&base); + + let rejected = |effect: OperationEffect| { + matches!( + effect, + OperationEffect::NoOp { + reason: NoOpReason::PreconditionFailedUnderReduction { + reason: PreconditionFailureReason::ContainerNotEmpty, + }, + } + ) + }; + + // A create mints an empty container; carrying a child the create does not + // itself mint must be rejected (else the graph gains unminted objects). + let fresh_region_id = epiphany_core::RegionId::new(ReplicaId(80), 0); + let mut region_with_child = valuegen::region(fresh_region_id); + region_with_child + .content + .staff_instances_mut() + .expect("staff based") + .push(valuegen::staff_instance( + StaffInstanceId::new(ReplicaId(80), 1), + base.staves[0].id, + )); + let create_region = envelope( + 80, + 0, + 10, + CausalContext::new(), + None, + OperationPayload::Primitive(OperationKind::CreateRegion(epiphany_ops::CreateRegionOp { + region: region_with_child, + })), + ); + + let mut instance_with_child = + valuegen::staff_instance(StaffInstanceId::new(ReplicaId(80), 2), base.staves[0].id); + instance_with_child + .voices + .push(valuegen::voice(VoiceId::new(ReplicaId(80), 3))); + let create_instance = envelope( + 81, + 0, + 11, + CausalContext::new(), + None, + OperationPayload::Primitive(OperationKind::CreateStaffInstance( + epiphany_ops::CreateStaffInstanceOp { + region, + instance: instance_with_child, + }, + )), + ); + + let mut voice_with_child = valuegen::voice(VoiceId::new(ReplicaId(80), 4)); + voice_with_child.events.push(EventId::new(ReplicaId(80), 5)); + let create_voice = envelope( + 82, + 0, + 12, + CausalContext::new(), + None, + OperationPayload::Primitive(OperationKind::CreateVoice(epiphany_ops::CreateVoiceOp { + staff_instance, + voice: voice_with_child, + })), + ); + + let mut set = OperationSet::new(); + set.accept_all(vec![ + create_region.clone(), + create_instance.clone(), + create_voice.clone(), + ]); + let result = set.reduce_onto(&base); + + assert!( + rejected(effect_of(&result, create_region.id)), + "a region carrying a staff instance is rejected" + ); + assert!( + rejected(effect_of(&result, create_instance.id)), + "a staff instance carrying a voice is rejected" + ); + assert!( + rejected(effect_of(&result, create_voice.id)), + "a voice carrying an event is rejected" + ); + assert!( + !result + .score + .canvas + .regions + .iter() + .any(|r| r.id == fresh_region_id), + "the non-empty region is not materialized into the graph" + ); + assert!(check_invariants(&result.score).is_empty()); +} + +#[test] +fn create_rejects_carried_non_hierarchy_children() { + let base = epiphany_core::generators::valid_score(100); + let region = base.canvas.regions[0].id; + let staff = base.staves[0].id; + + let rejected = |effect: OperationEffect| { + matches!( + effect, + OperationEffect::NoOp { + reason: NoOpReason::PreconditionFailedUnderReduction { + reason: PreconditionFailureReason::ContainerNotEmpty, + }, + } + ) + }; + + // A region carrying a barline-alignment group (a typed object, not a staff + // instance) must still be rejected. + let mut region_with_barline = valuegen::region(epiphany_core::RegionId::new(ReplicaId(83), 0)); + region_with_barline + .content + .staff_based_mut() + .expect("staff based") + .barline_alignment_groups + .push(epiphany_core::BarlineAlignmentGroup { + id: epiphany_core::BarlineAlignmentGroupId::new(ReplicaId(83), 1), + members: Vec::new(), + }); + let create_barline = envelope( + 83, + 0, + 10, + CausalContext::new(), + None, + OperationPayload::Primitive(OperationKind::CreateRegion(epiphany_ops::CreateRegionOp { + region: region_with_barline, + })), + ); + + // A free-graphic region carrying a graphic object. + let mut region_with_graphic = valuegen::region(epiphany_core::RegionId::new(ReplicaId(83), 2)); + region_with_graphic.content = + epiphany_core::RegionContent::FreeGraphic(epiphany_core::GraphicContent { + objects: vec![epiphany_core::GraphicObject { + id: epiphany_core::GraphicObjectId::new(ReplicaId(83), 3), + }], + }); + let create_graphic = envelope( + 83, + 1, + 11, + CausalContext::new(), + None, + OperationPayload::Primitive(OperationKind::CreateRegion(epiphany_ops::CreateRegionOp { + region: region_with_graphic, + })), + ); + + // A staff instance carrying a measure (a typed object, not a voice). + let mut instance_with_measure = + valuegen::staff_instance(StaffInstanceId::new(ReplicaId(83), 4), staff); + instance_with_measure.measures.push(epiphany_core::Measure { + id: epiphany_core::MeasureId::new(ReplicaId(83), 5), + start: TimeAnchor::WallClock { + time: WallClockTime(0), + }, + time_signature: None, + explicit_number: None, + number_visibility: Default::default(), + }); + let create_measure = envelope( + 84, + 0, + 12, + CausalContext::new(), + None, + OperationPayload::Primitive(OperationKind::CreateStaffInstance( + epiphany_ops::CreateStaffInstanceOp { + region, + instance: instance_with_measure, + }, + )), + ); + + let mut set = OperationSet::new(); + set.accept_all(vec![ + create_barline.clone(), + create_graphic.clone(), + create_measure.clone(), + ]); + let result = set.reduce_onto(&base); + + assert!( + rejected(effect_of(&result, create_barline.id)), + "a region carrying a barline-alignment group is rejected" + ); + assert!( + rejected(effect_of(&result, create_graphic.id)), + "a region carrying a graphic object is rejected" + ); + assert!( + rejected(effect_of(&result, create_measure.id)), + "a staff instance carrying a measure is rejected" + ); + assert!(check_invariants(&result.score).is_empty()); +} diff --git a/spec/operation_catalog.pdf b/spec/operation_catalog.pdf index d8534a8ca7fc2b46230da83bb45cdde515b18b99..e97094ee4402cf608ea6bc439dcc66f6bf1b3517 100644 GIT binary patch delta 40770 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 diff --git a/spec/operation_catalog.tex b/spec/operation_catalog.tex index f3b8ea2..91e4cdc 100644 --- a/spec/operation_catalog.tex +++ b/spec/operation_catalog.tex @@ -505,8 +505,10 @@ recorded but not materialised. \emph{differing} values produce a \texttt{StructuralFieldCollision} on the field \texttt{event}, recording the winner (later in canonical order) and the loser. -\textbf{Undo semantics.} Undo restores the pre-operation event value under the -active policy. +\textbf{Undo semantics.} Under the prototype's minted-object undo +(Section~\ref{sec:k0:undo}) a field overwrite mints nothing, so undoing the +enclosing transaction does not restore the prior event value; a snapshot-and- +restore inverse is a Phase-3 refinement (P11-C8). \textbf{Re-anchoring.} If the target event is tombstoned, the modification is a no-op (\texttt{TargetTombstoned}/\texttt{TargetMissing}). @@ -541,10 +543,11 @@ bookkeeping, which tombstones or mints the pitch object either way. is idempotent). Modify: two concurrent differing writes of one pitch produce a \texttt{StructuralFieldCollision} on the field \texttt{pitch}. -\textbf{Undo semantics.} Insert undoes by tombstoning the minted pitch (re-rest -if it was the only pitch); delete undoes by re-introducing the tombstoned pitch -(re-note from a degraded rest); modify restores the prior value --- each under -the active policy. +\textbf{Undo semantics.} Insert is the only minting member: undoing the enclosing +transaction tombstones the minted pitch, re-resting the event if it was the only +one (Section~\ref{sec:k0:undo}). The prototype's minted-object undo has nothing +to tombstone for delete or modify, so neither is inverted under it (re-introducing +a tombstoned pitch or restoring a prior value is a Phase-3 refinement, P11-C8). \textbf{Re-anchoring.} An operation whose target event or pitch is tombstoned is a no-op; tombstoning a pitch runs the cross-cutting re-anchoring table over any @@ -571,8 +574,9 @@ deferred (Chapter~4 tuning catalog; P12-K2). \textbf{Conflict cases.} None --- composition is deterministic in canonical order (a deterministic repair, not a conflict). -\textbf{Undo semantics.} Undo applies the negated interval to the same targets -under the active policy. +\textbf{Undo semantics.} Transpose mints nothing, so the prototype's minted-object +undo (Section~\ref{sec:k0:undo}) does not negate it; an inverse-interval undo is a +Phase-3 refinement (P11-C8). \textbf{Re-anchoring.} Tombstoned targets are skipped (the transpose applies only to live pitches). @@ -607,8 +611,9 @@ when one of its endpoints is later tombstoned (see DeleteEvent). A \texttt{Spanner} is anchored by \texttt{TimeAnchor}s rather than a fixed pair of event endpoints, so its full value is not reconstructable from the v0 event-reference projection; a \texttt{Spanner}-create is therefore reported -unmigratable (read-only) under M1, alongside the respell case of P12-K1. A -faithful spanner migration joins when the projection carries the anchors --- M2. +unmigratable (read-only), alongside the respell case of P12-K1, and remains so. +A faithful spanner migration awaits a richer v0 projection that carries the +anchors --- a Phase-3 / Pass-12 extension, not yet implemented. \section{DeleteCrossCutting} \label{sec:k0:delete-cross-cutting} @@ -627,8 +632,9 @@ reduction removes the structure from the score. \textbf{Conflict cases.} None (delete-wins is idempotent). -\textbf{Undo semantics.} Undo re-introduces the tombstoned structure under the -active policy. +\textbf{Undo semantics.} A delete mints nothing, so the prototype's minted-object +undo (Section~\ref{sec:k0:undo}) does not re-introduce the tombstoned structure +(P11-C8). \textbf{Re-anchoring.} The deletion is direct (the structure is the target, not a referenced endpoint); it does not itself trigger the endpoint re-anchoring table. @@ -654,8 +660,9 @@ Graph-aware reduction overwrites the structure in place. \textbf{Conflict cases.} Two concurrent differing modifications of one structure produce a \texttt{StructuralFieldCollision} on the field \texttt{cross\_cutting}. -\textbf{Undo semantics.} Undo restores the prior structure value under the active -policy. +\textbf{Undo semantics.} A modification mints nothing, so the prototype's +minted-object undo (Section~\ref{sec:k0:undo}) does not restore the prior +structure value (a snapshot-and-restore inverse is Phase-3, P11-C8). \textbf{Re-anchoring.} If the target structure is tombstoned, the modification is a no-op; re-deriving the endpoints lets a subsequent endpoint tombstone re-anchor @@ -704,8 +711,8 @@ the catalog's to design when graph-aware migration is the only reduction path. \texttt{DeleteStaffInstanceOp \{ staff\_instance: StaffInstanceId \}}; \texttt{CreateVoiceOp \{ staff\_instance: StaffInstanceId, voice: Voice \}} / \texttt{DeleteVoiceOp \{ voice: VoiceId \}}. Each create carries the full -container value (v1); the reduction preconditions it carries no children (an -empty container). +container value (v1); the reduction preconditions it bears \emph{no typed child +object} --- an empty container. \textbf{Canonical encoding.} Create: the parent id (where the schema names one), then the length-framed canonical bytes of the container value. Delete: the @@ -714,8 +721,11 @@ container id. \textbf{Reduction rule.} Set-union creation of an \emph{empty} container, and an \emph{empty-only} delete-wins tombstone. A create mints the container live if its id is fresh and (for staff instance and voice) its parent is live; it -preconditions the carried value to have no live children, so contents are added -by subsequent operations. A delete is a delete-wins tombstone, but a +preconditions the carried value to bear no typed child object (a region: no staff +instances, barline-alignment groups, or graphic objects; a staff instance: no +voices or measures; a voice: no events), since those carry distinct +\texttt{TypedObjectId}s the reducer mints separately --- so contents are added by +subsequent operations. A delete is a delete-wins tombstone, but a \emph{precondition no-op} (\texttt{ContainerNotEmpty}) unless the container has no live children --- the caller deletes contents first. Graph-aware reduction adds or removes the container and maintains the region's staff extent so @@ -725,9 +735,11 @@ or removes the container and maintains the region's staff extent so create is idempotent), and the empty-only delete is a deterministic precondition gate, not a conflict. -\textbf{Undo semantics.} Undo of a create tombstones the minted container; undo -of a delete re-introduces it. \texttt{StrictInverse} conflicts if the target was -concurrently mutated; the policy treatment is as for InsertEvent. +\textbf{Undo semantics.} Undo of a \emph{create} tombstones the minted container +(Section~\ref{sec:k0:undo}); \texttt{StrictInverse} conflicts if it was +concurrently mutated, with the policy treatment as for InsertEvent. A +\emph{delete} mints nothing, so the prototype's minted-object undo does not +re-introduce it (P11-C8). \textbf{Re-anchoring.} Not applicable (the containers are minted/tombstoned by id; the empty-only precondition means a delete never strands live children). @@ -788,9 +800,10 @@ single slot). SetMetricGrid: two concurrent differing grids for one region produce a \texttt{StructuralFieldCollision} on the field \texttt{metric\_grid}. -\textbf{Undo semantics.} Undo restores the prior metadata, the prior region grid, -or the prior \texttt{(region, resolved-position)} break preference, under the -active policy. +\textbf{Undo semantics.} All three are field overwrites that mint nothing, so the +prototype's minted-object undo (Section~\ref{sec:k0:undo}) does not restore the +prior metadata, grid, or break preference (a snapshot-and-restore inverse is a +Phase-3 refinement, P11-C8). \textbf{Re-anchoring.} The advisory breaks degrade as for SetUserSystemBreak; the metric grid and metadata are keyed by region / singleton and do not re-anchor (a @@ -873,8 +886,11 @@ opens read-only. The reference implementation (\texttt{epiphany-ops::migrate}) reconstructs the \texttt{InsertEvent} event, the \texttt{DeleteEvent} compensation, the \texttt{ChangeRegionTimeModel} model, the \texttt{SetUserSystemBreak} anchor, and -the cross-cutting structure self-containedly from the v0 projection; it recovers -a \texttt{RespellPitch} spelling from the context (P12-K1, +the event-anchored cross-cutting structures (\texttt{Tie} / \texttt{Slur} / +\texttt{Beam}) self-containedly from the v0 projection; a \texttt{Spanner}, +anchored by \texttt{TimeAnchor}s rather than event endpoints, remains unmigratable +until the projection carries them. It recovers a \texttt{RespellPitch} spelling +from the context (P12-K1, Section~\ref{sec:k0:respell-pitch}). The migration's merge gate (\texttt{epiphany-testkit::migration}) drives the inverse direction --- projecting a v1 corpus to v0 and migrating it back --- and asserts byte-identical reduction