Schema major 2 Phase D: ratify the repeat-authoring pair (spec tranche)
CreateRepeatStructure / DeleteRepeatStructure enter the ratified operation set — the dedicated pair for RepeatStructure (repeats live in the cross-cutting registry but are deliberately NOT CrossCuttingValue wire kinds; the reconciliation note follows Ch6's CrossCuttingStructure listing). operation_catalog (0.6.0 -> 0.7.0): - New K0 §"Repeat Structures": the full six-part schema for the pair. Set-union mint with the ALL-anchors-live precondition (start/end, the kind's jump targets, each volta's span — the mint must leave the graph satisfying reference-resolution invariants; dead anchor => TargetMissing no-op); live-id re-create reads AlreadyApplied without value comparison (cross-cutting discipline; RecreateContentMismatch scope unchanged); delete-wins tombstone; create-undo tombstones the mint, delete-undo does not restore (P11-C8); volta well-formedness stays advisory. - K1 gains the "Added in the schema-major-2 revision" entry (net-new primitives, never drafted as slots). binary_format (0.5.0 -> 0.6.0): - OperationKind wire table appends 28 (lp(RepeatStructure)) / 29 (bare identifier); OperationKindTag 28/29, name-verbatim projection; requirement bounds move past 29. - Honest per-op stamping ratified: the CREATE is born at v2 (kind/voltas are unconditional fields — no lower-major payload layout exists, so every block carrying one stamps major 2 under minimal stamping); the DELETE's bare-id payload is a major-0 layout, so minimal stamping gives its blocks major 0 — the kind discriminant itself being a schema-minor vocabulary append (mechanism claim only; the stamp always follows minimal stamping, as discriminant 24's always-2 CreateStaff shows). - §Schema Major 2 restructured: RepeatStructure moves from the snapshot-only bullet to the canonical operation layer (eight embedding payloads now); the CanonicalValue seam grows to twenty-three (RepeatStructure joins — CreateRepeatStructure embeds it per req:catalog:value-encoding). core_spec: - Ch6 OperationKind + Ch8 OperationKindTag listings gain the variants; the CrossCuttingStructure/wire-vocabulary reconciliation note; the re-anchoring rule table gains the "Repeat structure / Anchor" row (re-anchor to the nearest surviving anchor across EVERY event-referencing anchor site; cascade-delete only when none survives — the spanner discipline); Ch8's schema-versioning paragraph now enumerates eight embedding payloads with the born-at-v2/major-0 split; revision-history row. Review-hardened: five-dimension workflow review, 22 findings, 9 confirmed + 1 recovered from a failed verifier (an API-error casualty, assessed by hand) — all fixed (the load-bearing ones: Ch8's stale seven-payload enumeration; the mis-attributed "Phase-3 precedent" gloss that would have taught a false stamping rule; the pair filed under "Snapshot-only"; the CanonicalValue seam omission). All three documents compile clean, zero undefined references. Code tranche follows this commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NEs4aYiu8MXjdYdMxw8PTd
This commit is contained in:
parent
437e0758a0
commit
b816144a43
Binary file not shown.
|
|
@ -235,7 +235,7 @@
|
||||||
{\Large\scshape\color{epiphanyslate}Binary Format}\\[6pt]
|
{\Large\scshape\color{epiphanyslate}Binary Format}\\[6pt]
|
||||||
{\large\itshape\color{epiphanyslate}A companion to the Core Specification}\\[14pt]
|
{\large\itshape\color{epiphanyslate}A companion to the Core Specification}\\[14pt]
|
||||||
{\color{epiphanygold}\rule{3in}{0.8pt}}\\[24pt]
|
{\color{epiphanygold}\rule{3in}{0.8pt}}\\[24pt]
|
||||||
{\normalsize\color{epiphanyink}Version 0.5.0 --- Schema major 2 (data-model expansion: cross-cutting bodies, repeats/voltas, staff/instrument/metadata fills; total default-fill migration)}\\[4pt]
|
{\normalsize\color{epiphanyink}Version 0.6.0 --- Repeat authoring (OperationKind/Tag 28/29; the born-at-v2 create, the major-0 delete)}\\[4pt]
|
||||||
{\small\color{epiphanyslate}Normative for the byte layouts it defines}
|
{\small\color{epiphanyslate}Normative for the byte layouts it defines}
|
||||||
\vfill
|
\vfill
|
||||||
\end{titlepage}
|
\end{titlepage}
|
||||||
|
|
@ -1132,7 +1132,10 @@ The public per-value codec --- the seam between this document and the
|
||||||
Operation Catalog's value-typed payloads (Operation Catalog,
|
Operation Catalog's value-typed payloads (Operation Catalog,
|
||||||
\sectionsc{Value-Typed Payloads}, requirement
|
\sectionsc{Value-Typed Payloads}, requirement
|
||||||
\texttt{req:catalog:value-encoding}) --- is defined for exactly these
|
\texttt{req:catalog:value-encoding}) --- is defined for exactly these
|
||||||
twenty-two types (the Phase-3 operation tranche added the last four):
|
twenty-three types (the Phase-3 operation tranche added
|
||||||
|
\texttt{Staff}/\texttt{TimeSignature}/\texttt{TempoSegment}/%
|
||||||
|
\texttt{StaffLineConfiguration}; the repeat-authoring revision added
|
||||||
|
\texttt{RepeatStructure}):
|
||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
\texttt{Event}, \texttt{Rest}, \texttt{Pitch}, \texttt{IdentifiedPitch},
|
\texttt{Event}, \texttt{Rest}, \texttt{Pitch}, \texttt{IdentifiedPitch},
|
||||||
|
|
@ -1142,7 +1145,7 @@ twenty-two types (the Phase-3 operation tranche added the last four):
|
||||||
\texttt{DecompositionAttachment}, \texttt{SpellingSourceKind},
|
\texttt{DecompositionAttachment}, \texttt{SpellingSourceKind},
|
||||||
\texttt{ScoreMetadata}, \texttt{MetricGrid}, \texttt{Staff},
|
\texttt{ScoreMetadata}, \texttt{MetricGrid}, \texttt{Staff},
|
||||||
\texttt{TimeSignature}, \texttt{TempoSegment},
|
\texttt{TimeSignature}, \texttt{TempoSegment},
|
||||||
\texttt{StaffLineConfiguration}.
|
\texttt{StaffLineConfiguration}, \texttt{RepeatStructure}.
|
||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
The seam introduces \textbf{no new bytes}: a value's stand-alone canonical
|
The seam introduces \textbf{no new bytes}: a value's stand-alone canonical
|
||||||
|
|
@ -1298,7 +1301,7 @@ AcceptLoser, \tablenums{1} KeepWinner, \tablenums{2} Override
|
||||||
\label{req:binfmt:kind-discriminants}
|
\label{req:binfmt:kind-discriminants}
|
||||||
The \texttt{OperationKind} wire discriminant is one byte, golden-locked to
|
The \texttt{OperationKind} wire discriminant is one byte, golden-locked to
|
||||||
the table below. The vocabulary is \textbf{append-only}: new primitive kinds
|
the table below. The vocabulary is \textbf{append-only}: new primitive kinds
|
||||||
take discriminants past \tablenums{27}; the assignments below never change.
|
take discriminants past \tablenums{29}; the assignments below never change.
|
||||||
\end{requirement}
|
\end{requirement}
|
||||||
|
|
||||||
Each row also pins the payload's byte layout; the field \emph{set and order}
|
Each row also pins the payload's byte layout; the field \emph{set and order}
|
||||||
|
|
@ -1415,6 +1418,14 @@ sequence sorted ascending by canonical bytes.
|
||||||
$\mathrm{lp}$(\texttt{StaffLineConfiguration}) if present \cat{}
|
$\mathrm{lp}$(\texttt{StaffLineConfiguration}) if present \cat{}
|
||||||
\texttt{visible} (bool, 1) &
|
\texttt{visible} (bool, 1) &
|
||||||
\sectionsc{SetStaffLayout} \\
|
\sectionsc{SetStaffLayout} \\
|
||||||
|
\tablenums{28} & \texttt{CreateRepeatStructure} &
|
||||||
|
$\mathrm{lp}$(\texttt{RepeatStructure}) --- the schema-major-2
|
||||||
|
layout, unconditionally (born at v2;
|
||||||
|
Section~\ref{sec:evolution:major2}) &
|
||||||
|
\sectionsc{Repeat Structures} \\
|
||||||
|
\tablenums{29} & \texttt{DeleteRepeatStructure} &
|
||||||
|
\texttt{repeat} (16) &
|
||||||
|
\sectionsc{Repeat Structures} \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{longtable}
|
\end{longtable}
|
||||||
\endgroup
|
\endgroup
|
||||||
|
|
@ -1459,7 +1470,7 @@ assigned independently of Section~\ref{sec:ops:kinds}, with both encode and
|
||||||
validating decode. One byte; only \texttt{Registered} carries a payload (its
|
validating decode. One byte; only \texttt{Registered} carries a payload (its
|
||||||
\texttt{OperationKindRegistryId}, 16 big-endian bytes, total 17). Unknown
|
\texttt{OperationKindRegistryId}, 16 big-endian bytes, total 17). Unknown
|
||||||
discriminants and wrong lengths are decode errors. Append-only past
|
discriminants and wrong lengths are decode errors. Append-only past
|
||||||
\tablenums{27}.
|
\tablenums{29}.
|
||||||
\end{requirement}
|
\end{requirement}
|
||||||
|
|
||||||
\begingroup\small
|
\begingroup\small
|
||||||
|
|
@ -1482,6 +1493,7 @@ discriminants and wrong lengths are decode errors. Append-only past
|
||||||
\tablenums{11} & \texttt{InsertStaffInstance} & \tablenums{23} & \texttt{SetMetricGrid} \\
|
\tablenums{11} & \texttt{InsertStaffInstance} & \tablenums{23} & \texttt{SetMetricGrid} \\
|
||||||
\tablenums{24} & \texttt{InsertStaff} & \tablenums{25} & \texttt{SetTimeSignature} \\
|
\tablenums{24} & \texttt{InsertStaff} & \tablenums{25} & \texttt{SetTimeSignature} \\
|
||||||
\tablenums{26} & \texttt{SetTempoSegment} & \tablenums{27} & \texttt{SetStaffLayout} \\
|
\tablenums{26} & \texttt{SetTempoSegment} & \tablenums{27} & \texttt{SetStaffLayout} \\
|
||||||
|
\tablenums{28} & \texttt{CreateRepeatStructure} & \tablenums{29} & \texttt{DeleteRepeatStructure} \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{longtable}
|
\end{longtable}
|
||||||
\endgroup
|
\endgroup
|
||||||
|
|
@ -1495,7 +1507,9 @@ discriminants and wrong lengths are decode errors. Append-only past
|
||||||
\texttt{OperationKindTag::\allowbreak InsertStaff}. The mismatch is
|
\texttt{OperationKindTag::\allowbreak InsertStaff}. The mismatch is
|
||||||
intentional
|
intentional
|
||||||
(the tag space predates the M2c naming) and is pinned here so barrier
|
(the tag space predates the M2c naming) and is pinned here so barrier
|
||||||
authors target the right tag.
|
authors target the right tag. The repeat-structure pair projects
|
||||||
|
name-verbatim (\texttt{CreateRepeatStructure}/%
|
||||||
|
\texttt{DeleteRepeatStructure}), as the cross-cutting tags do.
|
||||||
|
|
||||||
\section{Stamps and Causal Contexts}
|
\section{Stamps and Causal Contexts}
|
||||||
\label{sec:ops:stamp}
|
\label{sec:ops:stamp}
|
||||||
|
|
@ -2292,9 +2306,16 @@ The \emph{only} minor-additive mechanism in schema major~0 is
|
||||||
\textbf{appending discriminants to open vocabularies}:
|
\textbf{appending discriminants to open vocabularies}:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item \texttt{OperationKind}: append at ${\geq}\,\tablenums{24}$
|
\item \texttt{OperationKind}: append at ${\geq}\,\tablenums{30}$
|
||||||
(Requirement~\ref{req:binfmt:kind-discriminants});
|
(Requirement~\ref{req:binfmt:kind-discriminants}; the Phase-3
|
||||||
\item \texttt{OperationKindTag}: append at ${\geq}\,\tablenums{24}$
|
tranche took \tablenums{24}--\tablenums{27} under this mechanism,
|
||||||
|
and the repeat pair \tablenums{28}/\tablenums{29} in the
|
||||||
|
schema-major-2 revision --- the discriminant space is one append-only
|
||||||
|
table across majors, but a kind's \emph{block stamp} follows minimal
|
||||||
|
stamping over its payload: \tablenums{28}'s payload embeds a v2
|
||||||
|
layout, so its blocks stamp major~2,
|
||||||
|
Section~\ref{sec:evolution:major2});
|
||||||
|
\item \texttt{OperationKindTag}: append at ${\geq}\,\tablenums{30}$
|
||||||
(Requirement~\ref{req:binfmt:kind-tag});
|
(Requirement~\ref{req:binfmt:kind-tag});
|
||||||
\item \texttt{OperationPayload}: append at ${\geq}\,\tablenums{4}$
|
\item \texttt{OperationPayload}: append at ${\geq}\,\tablenums{4}$
|
||||||
(Section~\ref{sec:ops:payload});
|
(Section~\ref{sec:ops:payload});
|
||||||
|
|
@ -2523,12 +2544,28 @@ The major is assigned per payload type, exactly as in major~1:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item \textbf{Snapshot-only:} \texttt{Instrument} (no operation embeds
|
\item \textbf{Snapshot-only:} \texttt{Instrument} (no operation embeds
|
||||||
one) and \texttt{RepeatStructure} (no operation embeds one \emph{at
|
one); it reaches only the acceleration full-\texttt{Score} snapshot.
|
||||||
this revision}; the repeat-authoring operations planned for the same
|
(\texttt{RepeatStructure} was snapshot-only when this section was
|
||||||
push are born at v2 and change nothing about lower majors). These
|
first ratified; the repeat-authoring pair moved it to the canonical
|
||||||
reach only the acceleration full-\texttt{Score} snapshot.
|
operation layer --- next bullet.)
|
||||||
\item \textbf{Canonical operation layer:} seven existing operation
|
\item \textbf{Canonical operation layer:} eight operation
|
||||||
payloads embed filled values ---
|
payloads embed filled values. \texttt{CreateRepeatStructure} (this
|
||||||
|
revision --- Operation Catalog \sectionsc{Repeat Structures},
|
||||||
|
discriminant \tablenums{28}) embeds the v2 \texttt{RepeatStructure}
|
||||||
|
layout unconditionally (\texttt{kind} and \texttt{voltas} are not
|
||||||
|
optional fields) and is \emph{born at v2}: no lower-major layout for
|
||||||
|
its payload exists, so every block carrying one stamps major~2 under
|
||||||
|
minimal stamping. Its sibling \texttt{DeleteRepeatStructure}
|
||||||
|
(\tablenums{29}) carries a bare identifier --- a major-0 layout ---
|
||||||
|
so minimal stamping gives its blocks major~0; the kind discriminant
|
||||||
|
itself is an append-only schema-\emph{minor} vocabulary event (the
|
||||||
|
same append mechanism the Phase-3 tranche used for
|
||||||
|
\tablenums{24}--\tablenums{27} --- a mechanism claim only: what a
|
||||||
|
kind's blocks \emph{stamp} always follows minimal stamping over its
|
||||||
|
payload, as discriminant \tablenums{24}'s always-major-2
|
||||||
|
\texttt{CreateStaff} shows). Neither changes anything about
|
||||||
|
lower-major layouts. The seven payloads of the first ratification
|
||||||
|
embed filled values ---
|
||||||
\texttt{CreateCrossCutting} and \texttt{ModifyCrossCutting} (a
|
\texttt{CreateCrossCutting} and \texttt{ModifyCrossCutting} (a
|
||||||
\texttt{CrossCuttingValue} embedding \texttt{Slur}, \texttt{Tie},
|
\texttt{CrossCuttingValue} embedding \texttt{Slur}, \texttt{Tie},
|
||||||
\texttt{Beam}, or \texttt{Spanner}); \texttt{CreateStaff} (a
|
\texttt{Beam}, or \texttt{Spanner}); \texttt{CreateStaff} (a
|
||||||
|
|
@ -2567,8 +2604,12 @@ The major is assigned per payload type, exactly as in major~1:
|
||||||
\textbf{1} (the major-1 bool is always present);
|
\textbf{1} (the major-1 bool is always present);
|
||||||
\texttt{CreateStaffInstance} / \texttt{SetStaffLayout}
|
\texttt{CreateStaffInstance} / \texttt{SetStaffLayout}
|
||||||
$\Rightarrow$ \textbf{2} iff their \texttt{staff\_lines\_override}
|
$\Rightarrow$ \textbf{2} iff their \texttt{staff\_lines\_override}
|
||||||
is \texttt{Some}, else \textbf{0}; every other payload keeps its
|
is \texttt{Some}, else \textbf{0};
|
||||||
prior major. A block stamps the maximum over its payloads.
|
\texttt{CreateRepeatStructure} $\Rightarrow$ always \textbf{2}
|
||||||
|
(born at v2); \texttt{DeleteRepeatStructure} $\Rightarrow$
|
||||||
|
\textbf{0} (a bare identifier under a minor kind append); every
|
||||||
|
other payload keeps its prior major. A block stamps the maximum
|
||||||
|
over its payloads.
|
||||||
(Operation names are the Operation Catalog's; core Chapter~6's
|
(Operation names are the Operation Catalog's; core Chapter~6's
|
||||||
enum spells the creates \texttt{InsertStaff} /
|
enum spells the creates \texttt{InsertStaff} /
|
||||||
\texttt{InsertStaffInstance} / \texttt{InsertRegion}.)
|
\texttt{InsertStaffInstance} / \texttt{InsertRegion}.)
|
||||||
|
|
@ -3122,6 +3163,20 @@ layouts of Section~\ref{sec:values:representative}.
|
||||||
implementation phases land). Semantics: core specification schema-major-2 revision
|
implementation phases land). Semantics: core specification schema-major-2 revision
|
||||||
(leaf-type definitions, clef/key content-model ratification,
|
(leaf-type definitions, clef/key content-model ratification,
|
||||||
\texttt{ClefId} retirement, strictly-authored timestamp requirement). \\
|
\texttt{ClefId} retirement, strictly-authored timestamp requirement). \\
|
||||||
|
\today & Operation vocabularies & 0.6.0 --- Repeat authoring
|
||||||
|
(schema-major-2 revision, Phase D): appends \texttt{OperationKind}
|
||||||
|
\tablenums{28} (\texttt{CreateRepeatStructure},
|
||||||
|
$\mathrm{lp}$(\texttt{RepeatStructure}), born at v2 --- every block
|
||||||
|
carrying one stamps major~2 under minimal stamping) and \tablenums{29}
|
||||||
|
(\texttt{DeleteRepeatStructure}, bare identifier --- minimal stamping
|
||||||
|
over its major-0 payload layout gives major~0; the discriminant itself
|
||||||
|
a schema-\emph{minor} vocabulary append), with the
|
||||||
|
matching \texttt{OperationKindTag} \tablenums{28}/\tablenums{29}
|
||||||
|
(name-verbatim projection). No existing assignment changed;
|
||||||
|
Section~\ref{sec:evolution:major2} restates the per-payload stamping
|
||||||
|
with the pair. Semantics: Operation Catalog \sectionsc{Repeat
|
||||||
|
Structures}, 0.7.0; re-anchoring row (nearest-surviving-anchor across
|
||||||
|
every anchor site, cascade when none): core Chapter~6 rule table. \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{longtable}
|
\end{longtable}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -6159,6 +6159,10 @@ pub enum OperationKind {
|
||||||
DeleteCrossCutting(DeleteCrossCuttingPayload),
|
DeleteCrossCutting(DeleteCrossCuttingPayload),
|
||||||
ModifyCrossCutting(ModifyCrossCuttingPayload),
|
ModifyCrossCutting(ModifyCrossCuttingPayload),
|
||||||
|
|
||||||
|
// Repeat-structure operations
|
||||||
|
CreateRepeatStructure(CreateRepeatStructureOp),
|
||||||
|
DeleteRepeatStructure(DeleteRepeatStructureOp),
|
||||||
|
|
||||||
// Region and structure operations
|
// Region and structure operations
|
||||||
ChangeRegionTimeModel(ChangeRegionTimeModelOp),
|
ChangeRegionTimeModel(ChangeRegionTimeModelOp),
|
||||||
InsertRegion(InsertRegionOp),
|
InsertRegion(InsertRegionOp),
|
||||||
|
|
@ -7421,6 +7425,16 @@ table is normative.
|
||||||
as for slurs (surviving-endpoint collapse); per-spanner-kind
|
as for slurs (surviving-endpoint collapse); per-spanner-kind
|
||||||
proximity bounds are a deferred refinement \\
|
proximity bounds are a deferred refinement \\
|
||||||
|
|
||||||
|
Repeat structure & Anchor &
|
||||||
|
Re-anchor to the nearest surviving anchor; cascade-delete only
|
||||||
|
when no anchor survives &
|
||||||
|
as for spanners; the rule spans \emph{every} event-referencing
|
||||||
|
anchor site of the structure --- \texttt{start}/\texttt{end},
|
||||||
|
the kind's jump targets (\texttt{DaCapo.end\_target},
|
||||||
|
\texttt{DalSegno.segno}/\texttt{end\_target}), and each
|
||||||
|
volta's span (ratified with the repeat-authoring pair,
|
||||||
|
schema-major-2 revision) \\
|
||||||
|
|
||||||
Marker & Anchor &
|
Marker & Anchor &
|
||||||
Re-anchor to nearest event in same staff instance &
|
Re-anchor to nearest event in same staff instance &
|
||||||
proximity max: same staff instance; orphan on failure \\
|
proximity max: same staff instance; orphan on failure \\
|
||||||
|
|
@ -7962,6 +7976,17 @@ pub enum CrossCuttingStructure {
|
||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
The enum above is the data model's full cross-cutting family; the
|
||||||
|
\emph{wire} vocabulary the cross-cutting operations admit at this
|
||||||
|
revision (\texttt{CrossCuttingValue}, Binary Format companion) is the
|
||||||
|
four-kind subset \texttt{Tie}/\texttt{Slur}/\texttt{Beam}/%
|
||||||
|
\texttt{Spanner}. A \texttt{RepeatStructure} is authored by the
|
||||||
|
dedicated \texttt{CreateRepeatStructure}/%
|
||||||
|
\texttt{DeleteRepeatStructure} pair (Operation Catalog
|
||||||
|
\sectionsc{Repeat Structures}; ratified schema-major-2 revision), not
|
||||||
|
through \texttt{CreateCrossCutting}; the remaining variants await
|
||||||
|
their own authoring primitives.
|
||||||
|
|
||||||
\textbf{Invariant preconditions} (Slur case):
|
\textbf{Invariant preconditions} (Slur case):
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item The slur's id is unique within the cross-cutting registry.
|
\item The slur's id is unique within the cross-cutting registry.
|
||||||
|
|
@ -10810,6 +10835,10 @@ pub enum OperationKindTag {
|
||||||
SetTimeSignature,
|
SetTimeSignature,
|
||||||
SetTempoSegment,
|
SetTempoSegment,
|
||||||
SetStaffLayout,
|
SetStaffLayout,
|
||||||
|
// Schema-major-2 revision (repeat authoring). The pair keeps
|
||||||
|
// its kind names verbatim, as the cross-cutting tags do.
|
||||||
|
CreateRepeatStructure,
|
||||||
|
DeleteRepeatStructure,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum BarrierScope {
|
pub enum BarrierScope {
|
||||||
|
|
@ -11085,11 +11114,16 @@ truncated bodies of the cross-cutting structures (\texttt{Slur},
|
||||||
Chapter~5 definitions. The same per-payload-type rules apply: the
|
Chapter~5 definitions. The same per-payload-type rules apply: the
|
||||||
canonical-base \texttt{MaterializedState} embeds none of these values and
|
canonical-base \texttt{MaterializedState} embeds none of these values and
|
||||||
stays major~0; the filled values reach the acceleration snapshot
|
stays major~0; the filled values reach the acceleration snapshot
|
||||||
\emph{and}, through the seven operation payloads that embed them
|
\emph{and}, through the eight operation payloads that embed them
|
||||||
(\texttt{CreateCrossCutting}, \texttt{ModifyCrossCutting},
|
(\texttt{CreateCrossCutting}, \texttt{ModifyCrossCutting},
|
||||||
\texttt{InsertStaff} and \texttt{InsertStaffInstance} (the Operation
|
\texttt{InsertStaff} and \texttt{InsertStaffInstance} (the Operation
|
||||||
Catalog's \texttt{CreateStaff} / \texttt{CreateStaffInstance}),
|
Catalog's \texttt{CreateStaff} / \texttt{CreateStaffInstance}),
|
||||||
\texttt{SetStaffLayout}, \texttt{SetMetadata}, and --- transitively,
|
\texttt{SetStaffLayout}, \texttt{SetMetadata},
|
||||||
|
\texttt{CreateRepeatStructure} (the repeat-authoring revision --- it
|
||||||
|
embeds the filled \texttt{RepeatStructure} unconditionally, so it is
|
||||||
|
\emph{born at v2} and every block carrying one stamps major~2; its
|
||||||
|
\texttt{DeleteRepeatStructure} sibling carries a bare identifier, a
|
||||||
|
major-0 layout, and stamps major~0), and --- transitively,
|
||||||
because an embedded \texttt{Region} may carry a \texttt{StaffInstance}
|
because an embedded \texttt{Region} may carry a \texttt{StaffInstance}
|
||||||
whose \texttt{staff\_lines\_override} embeds the filled
|
whose \texttt{staff\_lines\_override} embeds the filled
|
||||||
\texttt{StaffLineConfiguration} --- \texttt{InsertRegion}
|
\texttt{StaffLineConfiguration} --- \texttt{InsertRegion}
|
||||||
|
|
@ -15339,6 +15373,22 @@ layouts they own versus inherit:
|
||||||
total default-filling migration: Binary Format companion
|
total default-filling migration: Binary Format companion
|
||||||
0.4.0~$\rightarrow$~0.5.0.
|
0.4.0~$\rightarrow$~0.5.0.
|
||||||
\\
|
\\
|
||||||
|
\today & Schema major 2 (repeat authoring, Phase D) &
|
||||||
|
The dedicated \texttt{CreateRepeatStructure}/%
|
||||||
|
\texttt{DeleteRepeatStructure} pair enters the operation set:
|
||||||
|
Chapter~6's \texttt{OperationKind} enum and Chapter~8's
|
||||||
|
\texttt{OperationKindTag} listing gain the two variants (repeats are not
|
||||||
|
\texttt{CrossCuttingValue} kinds on the wire --- the reconciliation
|
||||||
|
note follows the \texttt{CrossCuttingStructure} listing), and the
|
||||||
|
re-anchoring rule table gains the Repeat-structure~/ Anchor row
|
||||||
|
(re-anchor to the nearest surviving anchor across \emph{every}
|
||||||
|
event-referencing anchor site --- \texttt{start}/\texttt{end}, jump
|
||||||
|
targets, volta spans --- cascade-delete only when none survives).
|
||||||
|
Six-part schemas: Operation Catalog \sectionsc{Repeat Structures},
|
||||||
|
0.6.0~$\rightarrow$~0.7.0. Wire discriminants 28/29 and the
|
||||||
|
per-payload stamping (create born at v2; delete a minor kind append
|
||||||
|
at major~0): Binary Format companion 0.5.0~$\rightarrow$~0.6.0.
|
||||||
|
\\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{longtable}
|
\end{longtable}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -226,7 +226,7 @@
|
||||||
{\Large\scshape\color{epiphanyslate}Operation Catalog}\\[6pt]
|
{\Large\scshape\color{epiphanyslate}Operation Catalog}\\[6pt]
|
||||||
{\large\itshape\color{epiphanyslate}A companion to the Core Specification}\\[14pt]
|
{\large\itshape\color{epiphanyslate}A companion to the Core Specification}\\[14pt]
|
||||||
{\color{epiphanygold}\rule{3in}{0.8pt}}\\[24pt]
|
{\color{epiphanygold}\rule{3in}{0.8pt}}\\[24pt]
|
||||||
{\normalsize\color{epiphanyink}Version 0.6.0 --- Pass-12 G-ratification (meta-operation edge semantics, system-derived immutability, recreate vocabulary, slot retirement)}\\[4pt]
|
{\normalsize\color{epiphanyink}Version 0.7.0 --- Schema-major-2 repeat authoring (the CreateRepeatStructure / DeleteRepeatStructure pair)}\\[4pt]
|
||||||
{\small\color{epiphanyslate}Normative for the operation kinds it defines}
|
{\small\color{epiphanyslate}Normative for the operation kinds it defines}
|
||||||
\vfill
|
\vfill
|
||||||
\end{titlepage}
|
\end{titlepage}
|
||||||
|
|
@ -842,6 +842,73 @@ anchor; there is no \texttt{DeleteStaff} in this catalogue revision --- an
|
||||||
empty-only staff delete mirroring the container discipline is a later
|
empty-only staff delete mirroring the container discipline is a later
|
||||||
schema-fill).
|
schema-fill).
|
||||||
|
|
||||||
|
\section{Repeat Structures}
|
||||||
|
\label{sec:k0:repeat-structures}
|
||||||
|
|
||||||
|
Ratified with the schema-major-2 revision: the dedicated authoring pair for
|
||||||
|
\texttt{RepeatStructure} (core specification Chapter~5
|
||||||
|
\sectionsc{Repeat Structures}). Repeats live in the cross-cutting registry
|
||||||
|
but are \emph{not} \texttt{CrossCuttingValue} kinds on the wire --- the
|
||||||
|
cross-cutting operations admit only
|
||||||
|
\texttt{Tie}/\texttt{Slur}/\texttt{Beam}/\texttt{Spanner}
|
||||||
|
(Section~\ref{sec:k0:create-cross-cutting}) --- so the pair is a
|
||||||
|
first-class primitive mirroring the cross-cutting disciplines.
|
||||||
|
|
||||||
|
\textbf{Payload schema.} \texttt{CreateRepeatStructureOp \{ repeat:
|
||||||
|
RepeatStructure \}} --- the full value (schema major 2): identity, the
|
||||||
|
\texttt{start}/\texttt{end} anchors, the \texttt{RepeatKind}, and the
|
||||||
|
volta list. \texttt{DeleteRepeatStructureOp \{ repeat: RepeatStructureId
|
||||||
|
\}}.
|
||||||
|
|
||||||
|
\textbf{Canonical encoding.} Create: the length-framed canonical bytes of
|
||||||
|
\texttt{repeat} (the schema-major-2 layout). Delete: the bare identifier.
|
||||||
|
The create's payload embeds the v2 \texttt{RepeatStructure} layout
|
||||||
|
unconditionally (\texttt{kind} and \texttt{voltas} are not optional
|
||||||
|
fields), so under minimal stamping a block carrying one stamps schema
|
||||||
|
major~2 --- the create is \emph{born at v2}. The delete's payload is an
|
||||||
|
identifier --- a major-0 layout --- so minimal stamping gives its blocks
|
||||||
|
major~0; the kind discriminant itself is an append-only schema-\emph{minor}
|
||||||
|
vocabulary event (the same append mechanism as the Phase-3 tranche; the
|
||||||
|
stamp itself always follows minimal stamping over the payload, per the
|
||||||
|
Binary Format companion \sectionsc{Schema Major 2}).
|
||||||
|
|
||||||
|
\textbf{Reduction rule.} Set-union creation and a delete-wins tombstone,
|
||||||
|
mirroring the cross-cutting family. A create mints the repeat live if its
|
||||||
|
id is fresh and \emph{every} event-referencing anchor site resolves to a
|
||||||
|
live event --- \texttt{start}/\texttt{end}, the kind's jump targets
|
||||||
|
(\texttt{DaCapo.end\_target},
|
||||||
|
\texttt{DalSegno.segno}/\texttt{end\_target}), and each volta's
|
||||||
|
\texttt{start}/\texttt{end} --- since the mint must leave the graph
|
||||||
|
satisfying the reference-resolution invariants; a dead anchor is a
|
||||||
|
precondition no-op (\texttt{TargetMissing}). A repeat create of a live id
|
||||||
|
reads \texttt{AlreadyApplied} without value comparison (the cross-cutting
|
||||||
|
discipline; the \texttt{RecreateContentMismatch} scope of
|
||||||
|
Section~\ref{sec:k0:create-staff} is unchanged). A delete tombstones the
|
||||||
|
repeat (idempotent on re-delete, delete-wins); deleting a missing id is a
|
||||||
|
no-op precondition failure. Graph-aware reduction adds or removes the
|
||||||
|
structure from the cross-cutting registry.
|
||||||
|
|
||||||
|
\textbf{Conflict cases.} None at reduction time (set-union creation;
|
||||||
|
delete-wins is idempotent).
|
||||||
|
|
||||||
|
\textbf{Undo semantics.} Undo of a create tombstones the minted repeat
|
||||||
|
(Section~\ref{sec:k0:undo}). A delete mints nothing, so the prototype's
|
||||||
|
minted-object undo does not re-introduce the tombstoned structure
|
||||||
|
(P11-C8).
|
||||||
|
|
||||||
|
\textbf{Re-anchoring.} The structure participates in the re-anchoring rule
|
||||||
|
table when a referenced event is later tombstoned: re-anchor to the
|
||||||
|
nearest surviving anchor, cascade-delete only when none survives --- as
|
||||||
|
for spanners, spanning \emph{every} anchor site
|
||||||
|
(\texttt{start}/\texttt{end}, jump targets, volta spans). The rule row is
|
||||||
|
the core specification's (Chapter~6 re-anchoring rule table, ratified with
|
||||||
|
this pair).
|
||||||
|
|
||||||
|
\textbf{Authoring advisory.} The volta well-formedness constraints of
|
||||||
|
core Chapter~5 (endings non-empty, 1-based, ascending) are
|
||||||
|
\emph{advisory}: surfaced at authoring time under interactive validation,
|
||||||
|
never enforced under reduction.
|
||||||
|
|
||||||
\section{SetUserSystemBreak}
|
\section{SetUserSystemBreak}
|
||||||
\label{sec:k0:set-user-system-break}
|
\label{sec:k0:set-user-system-break}
|
||||||
|
|
||||||
|
|
@ -1246,6 +1313,16 @@ a fresh design.
|
||||||
creation, LWW structural overwrite, and LWW advisory respectively.
|
creation, LWW structural overwrite, and LWW advisory respectively.
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
|
\section*{Added in the schema-major-2 revision (Chapter~\ref{ch:k0})}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[Create / delete repeat structure]
|
||||||
|
Section~\ref{sec:k0:repeat-structures} --- net-new primitives (never
|
||||||
|
drafted as framework slots). Set-union creation with the
|
||||||
|
all-anchors-live precondition and a delete-wins tombstone; the create
|
||||||
|
is born at v2, the delete stamps major~0.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
\section*{Retired slots (ratified Pass~12: outside the operation set)}
|
\section*{Retired slots (ratified Pass~12: outside the operation set)}
|
||||||
|
|
||||||
\begin{description}
|
\begin{description}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue