% !TEX program = xelatex % % Epiphany --- Reference Suite (companion specification) % Companion to the Core Specification. Compile with XeLaTeX. % % This document is versioned independently of the Core Specification % (independent semver; see the Versioning note in the front matter). Its preamble % is intentionally a self-contained copy of the core specification's preamble so % the two documents build independently; factoring a shared preamble file is a % later cleanup, not a v0.1 deliverable. \documentclass[11pt,letterpaper]{report} % --------------------------------------------------------------------------- % Packages % --------------------------------------------------------------------------- \usepackage{fontspec} \usepackage{geometry} \geometry{ letterpaper, top=1.05in, bottom=1.05in, left=1.15in, right=1.15in, headheight=15pt } \usepackage[english]{babel} \usepackage{microtype} \usepackage{parskip} \usepackage{xcolor} \usepackage{hyperref} \usepackage{enumitem} \usepackage{titlesec} \usepackage{fancyhdr} \usepackage{booktabs} \usepackage{array} \usepackage{longtable} \usepackage{listings} \usepackage{amsmath} \usepackage{amssymb} \usepackage{tcolorbox} \tcbuselibrary{breakable, skins} % --------------------------------------------------------------------------- % Color palette (shared with the core specification) % --------------------------------------------------------------------------- \definecolor{epiphanyteal}{HTML}{1A4044} \definecolor{epiphanygold}{HTML}{8E6E2E} \definecolor{epiphanyink}{HTML}{1F1B16} \definecolor{epiphanyslate}{HTML}{6B6660} \definecolor{epiphanycream}{HTML}{F8F4ED} \definecolor{epiphanymist}{HTML}{ECE8E0} \definecolor{epiphanycode}{HTML}{2A2520} \definecolor{epiphanycrimson}{HTML}{7A2424} \hypersetup{ colorlinks=true, linkcolor=epiphanyteal, citecolor=epiphanyteal, urlcolor=epiphanygold, pdftitle={Epiphany --- Reference Suite}, pdfauthor={The Epiphany Project}, pdfsubject={Reference Suite companion for the Epiphany music notation platform}, pdfkeywords={music notation, engraving, reference suite, conformance, solver tiers, test scores}, bookmarksnumbered=true, bookmarksopen=true } % --------------------------------------------------------------------------- % Typography (shared with the core specification) % --------------------------------------------------------------------------- \setmainfont{TeX Gyre Pagella}[Numbers={OldStyle, Proportional}, Ligatures={TeX, Common}] \setsansfont{TeX Gyre Heros}[Scale=0.94, Ligatures={TeX, Common}] \setmonofont{TeX Gyre Cursor}[Scale=0.88, Ligatures={TeX}] \newfontfamily\titlefont{TeX Gyre Pagella}[Numbers={OldStyle}, Ligatures={TeX, Common}] \newcommand{\tablenums}[1]{{\addfontfeatures{Numbers={Lining,Tabular}}#1}} \newcommand{\sectionsc}[1]{{\addfontfeatures{Letters=SmallCaps}#1}} % --------------------------------------------------------------------------- % Section styling (shared with the core specification) % --------------------------------------------------------------------------- \titleformat{\chapter}[display] {\normalfont\filright} {\raggedright\color{epiphanygold}\fontsize{14pt}{16pt}\selectfont \scshape Chapter\ \thechapter} {16pt} {\raggedright\color{epiphanyteal}\fontsize{32pt}{36pt}\selectfont\bfseries} [\vspace{4pt}{\color{epiphanygold}\rule{2in}{0.6pt}}] \titlespacing*{\chapter}{0pt}{-20pt}{30pt} \titleformat{\section} {\normalfont\Large\bfseries\color{epiphanyteal}} {\color{epiphanygold}\thesection}{1em}{} \titleformat{\subsection} {\normalfont\large\bfseries\color{epiphanyteal}} {\color{epiphanygold}\thesubsection}{1em}{} \titleformat{\subsubsection} {\normalfont\normalsize\bfseries\color{epiphanyink}} {\thesubsubsection}{1em}{} % --------------------------------------------------------------------------- % Headers and footers (shared with the core specification) % --------------------------------------------------------------------------- \pagestyle{fancy} \fancyhf{} \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} \fancyhead[L]{\small\scshape\color{epiphanyslate}Epiphany --- Reference Suite} \fancyhead[R]{\small\itshape\color{epiphanyslate}\leftmark} \fancyfoot[C]{\small\color{epiphanyslate}\thepage} \renewcommand{\headrule}{ \color{epiphanygold!50}\hrule width\headwidth height 0.4pt \vspace{1pt} \color{epiphanygold!30}\hrule width\headwidth height 0.2pt } % --------------------------------------------------------------------------- % Code listing style (shared with the core specification) % --------------------------------------------------------------------------- \lstdefinelanguage{Rust}{ keywords={fn,let,mut,pub,struct,enum,impl,trait,for,in,if,else,match,return, use,mod,crate,self,Self,as,where,move,async,await,const,static, ref,type,unsafe,extern,dyn,box,break,continue,loop,while}, keywordstyle=\color{epiphanyteal}\bfseries, ndkeywords={i8,i16,i32,i64,i128,u8,u16,u32,u64,u128,f32,f64,bool,char,str, String,Vec,Option,Result,Box,Rc,Arc,HashMap,BTreeMap, NonZeroU16,NonZeroU32,NonZeroU64,Duration,Timestamp}, ndkeywordstyle=\color{epiphanygold}\bfseries, sensitive=true, comment=[l]{//}, morecomment=[s]{/*}{*/}, commentstyle=\color{epiphanyslate}\itshape, stringstyle=\color{epiphanycrimson}, morestring=[b]", morestring=[b]' } \lstset{ basicstyle=\ttfamily\small\color{epiphanycode}, backgroundcolor=\color{epiphanycream}, frame=leftline, rulecolor=\color{epiphanygold!60}, framesep=8pt, framerule=1.5pt, xleftmargin=10pt, xrightmargin=4pt, breaklines=true, showstringspaces=false, numberstyle=\tiny\color{epiphanyslate}, numbersep=10pt, captionpos=b, aboveskip=10pt, belowskip=10pt, language=Rust } % --------------------------------------------------------------------------- % Custom environments (shared with the core specification) % --------------------------------------------------------------------------- \newtcolorbox{openquestion}[1][]{ enhanced, breakable, colback=epiphanymist, colframe=epiphanycrimson, fonttitle=\bfseries\color{white}, title={\scshape\hspace{2pt}Open Question}, coltitle=white, colbacktitle=epiphanycrimson, arc=1pt, boxrule=0pt, leftrule=2pt, left=10pt, right=10pt, top=8pt, bottom=8pt, attach boxed title to top left={xshift=0pt, yshift=0pt}, boxed title style={arc=0pt, sharp corners, boxrule=0pt, left=6pt, right=8pt, top=2pt, bottom=2pt}, #1 } \newtcolorbox{rationale}[1][]{ enhanced, breakable, colback=epiphanymist, colframe=epiphanyteal, fonttitle=\bfseries\color{white}, title={\scshape\hspace{2pt}Rationale}, coltitle=white, colbacktitle=epiphanyteal, arc=1pt, boxrule=0pt, leftrule=2pt, left=10pt, right=10pt, top=8pt, bottom=8pt, attach boxed title to top left={xshift=0pt, yshift=0pt}, boxed title style={arc=0pt, sharp corners, boxrule=0pt, left=6pt, right=8pt, top=2pt, bottom=2pt}, #1 } % Numbered within chapter (this document has chapters); see core_spec.tex's % requirement box for why a plain counter + `code=` step is used instead of % tcolorbox's own "auto counter, number within=..." keys. \newcounter{requirement}[chapter] \renewcommand{\therequirement}{\thechapter.\arabic{requirement}} \newtcolorbox{requirement}[1][]{ enhanced, breakable, colback=white, colframe=epiphanygold, fonttitle=\bfseries\color{white}, code={\refstepcounter{requirement}}, title={\scshape\hspace{2pt}Requirement~\therequirement}, coltitle=white, colbacktitle=epiphanygold, arc=1pt, boxrule=0pt, leftrule=2pt, left=10pt, right=10pt, top=8pt, bottom=8pt, attach boxed title to top left={xshift=0pt, yshift=0pt}, boxed title style={arc=0pt, sharp corners, boxrule=0pt, left=6pt, right=8pt, top=2pt, bottom=2pt}, #1 } \newtcolorbox{nongoal}[1][]{ enhanced, breakable, colback=epiphanymist, colframe=epiphanyslate, fonttitle=\bfseries\color{white}, title={\scshape\hspace{2pt}Non-Goal}, coltitle=white, colbacktitle=epiphanyslate, arc=1pt, boxrule=0pt, leftrule=2pt, left=10pt, right=10pt, top=8pt, bottom=8pt, attach boxed title to top left={xshift=0pt, yshift=0pt}, boxed title style={arc=0pt, sharp corners, boxrule=0pt, left=6pt, right=8pt, top=2pt, bottom=2pt}, #1 } \newcommand{\MUST}{\textbf{MUST}} \newcommand{\MUSTNOT}{\textbf{MUST}\nobreak\ \textbf{NOT}} \newcommand{\SHOULD}{\textbf{SHOULD}} \newcommand{\SHOULDNOT}{\textbf{SHOULD}\nobreak\ \textbf{NOT}} \newcommand{\MAY}{\textbf{MAY}} \setlist[itemize]{topsep=2pt, itemsep=3pt, parsep=0pt} \setlist[enumerate]{topsep=2pt, itemsep=3pt, parsep=0pt} \setlist[description]{topsep=2pt, itemsep=5pt, parsep=0pt} \AtBeginDocument{\color{epiphanyink}} % --------------------------------------------------------------------------- % Document % --------------------------------------------------------------------------- \begin{document} \begin{titlepage} \thispagestyle{empty} \centering \vspace*{2.2in} {\color{epiphanygold}\rule{3in}{0.8pt}}\\[18pt] {\titlefont\fontsize{34pt}{38pt}\selectfont\color{epiphanyteal}\bfseries Epiphany}\\[10pt] {\Large\scshape\color{epiphanyslate}Reference Suite}\\[6pt] {\large\itshape\color{epiphanyslate}A companion to the Core Specification}\\[14pt] {\color{epiphanygold}\rule{3in}{0.8pt}}\\[24pt] {\normalsize\color{epiphanyink}Version 0.1.0 --- Phase 3 (the initial entry set: six scores, required at Minimal, declared for Standard)}\\[4pt] {\small\color{epiphanyslate}Normative for solver conformance claims} \vfill \end{titlepage} \tableofcontents % =========================================================================== \chapter{About This Companion} \label{ch:about} The \emph{Reference Suite} is a companion to the Epiphany Core Specification. It fulfils the core specification's delegation in its \sectionsc{Companion Specifications} appendix (the \texttt{sec:deferred:companions} section), which charters this document as ``the collection of test scores against which solver conformance is established, with per-tier inclusion, per-tier metric thresholds, and any fixed-expectation tests. Versioned with this specification.'' This release (v0.1.0) delivers: \begin{itemize} \item the \textbf{suite entry model} --- how entries name their test scores, how each solve is configured, what passing an entry and passing the suite mean, and how fixed-expectation tests work (Chapter~\ref{ch:model}); \item the \textbf{v0.1 entry set}: six scores, every one required for Minimal-tier conformance and the same six constituting the Standard-tier subset (Chapter~\ref{ch:entries}); \item a non-normative note on the reference implementation's suite harness (Chapter~\ref{ch:harness}). \end{itemize} This document does \emph{not} cover: \begin{itemize} \item the definition, normalization, and default thresholds of the quality metrics --- those are the \emph{Quality Metric Catalog} companion's, and this document consumes them; \item performance conformance (edit traces, frame budgets) --- the \emph{Performance Reference Suite} companion's, per the core specification's explicit boundary; \item the reference solving algorithm --- the non-normative \emph{Reference Algorithm} companion's. \end{itemize} \section{Relationship to the Core Specification} \label{sec:about:relationship} The suite's charter is the core specification's Chapter~9 (\sectionsc{The Constraint Solver Interface}, the \texttt{ch:solver} chapter), \sectionsc{Conformance: The Reference Suite} section (\texttt{sec:solver:conformance}). That section's suite-entry requirement fixes what every entry consists of --- a test score in canonical \texttt{.musc} form; per-tier inclusion; per-tier metric thresholds; and optional fixed-expectation tests, used sparingly --- and fixes the pass rule: ``A solver claiming a given tier \MUST{} pass every entry required at that tier. Failure on any single entry is conformance failure at the claimed tier.'' Three more core anchors bind this document: \begin{itemize} \item The \sectionsc{Cross-Implementation Conformance} requirement (in the core's solver-determinism section) enumerates the four conditions a conforming solver meets across the suite; this document's per-entry evaluation rule (Section~\ref{sec:model:pass}) is those conditions applied entry-by-entry. \item The \sectionsc{Reference Algorithm} section makes fixed-expectation tests the \emph{only} place the suite may force a particular layout; everywhere else, any algorithm within thresholds conforms. Section~\ref{sec:model:fixed} inherits that discipline. \item The \emph{Quality Metric Catalog} companion defines every metric, its normalization, and the default per-tier thresholds this suite's entries reference. This document never restates a threshold; it names the catalog's defaults and records per-entry overrides (v0.1: none). \end{itemize} Where this document and a ratified core requirement disagree, \textbf{the core requirement governs} and the discrepancy is a defect in this document. One deliberate v0.1 deviation from the charter's letter --- naming scores by deterministic builder rather than shipping \texttt{.musc} bundles --- is called out as such, with its open question, in Section~\ref{sec:model:referencing}. \section{Conformance} \label{sec:about:conformance} The entry set, entry construction rules, solve configurations, and tier inclusions in this document are \textbf{normative}. A solver conformance claim at a tier is a claim about \emph{this} suite at \emph{this} version: \begin{itemize} \item claiming tier $T$ means passing every entry (Section~\ref{sec:model:pass}) that Chapter~\ref{ch:entries} requires at tier $T$ --- failure on any single entry is conformance failure at the claimed tier; \item per the core specification, suite versions are tied to specification versions, and a conforming implementation \MUST{} declare which suite version it passes (Section~\ref{sec:model:versioning}). \end{itemize} % =========================================================================== \chapter{The Suite Entry Model} \label{ch:model} \section{Score Referencing} \label{sec:model:referencing} \begin{requirement} \label{req:refsuite:referencing} A v0.1 suite entry names its test score by \textbf{reference-implementation builder and seed}: a deterministic constructor exported by the reference implementation's test kit (the \texttt{epiphany-testkit} crate), together with any seed argument, reproduces the score graph bit-for-bit. Two referencing forms are used: \begin{itemize} \item a \textbf{seeded builder}: a public function taking a \texttt{u64} seed (e.g.\ \texttt{fixtures::ten\_measure\_single\_staff}, or a generator re-exported through the test kit), with the entry pinning the exact seed value; \item a \textbf{corpus name}: the \texttt{name} string of an entry of the test kit's tagged corpus (\texttt{corpus()}), whose builder takes no arguments and is deterministic by construction. \end{itemize} The constructed score graph --- not any serialized artifact of it --- is the entry's test score. Implementations under test \MUST{} evaluate the entry against a score graph identical to the one the named builder produces with the named seed. \end{requirement} \begin{rationale} The core charter describes each entry as ``a test score in canonical \texttt{.musc} form.'' v0.1 deliberately references builders instead of shipping bundles, because today \emph{the builders are the canonical definition}: they are versioned, reviewed, deterministic (seeded \texttt{SplitMix64} identity minting), asserted invariant-clean, and reproducible bit-for-bit by anyone building the reference crates --- while the \texttt{.musc} byte format is still absorbing schema-major evolution, so a shipped bundle would rot faster than the builder that made it. A corpus caution: the test kit tags corpus fixtures with an \emph{eligibility-taxonomy} tier (\texttt{Common} / \texttt{Edge} / \texttt{Torture}); that taxonomy is unrelated to solver conformance tiers (Minimal / Standard / Advanced) and carries no normative weight in this suite. \end{rationale} \begin{openquestion} \textbf{Builder references versus shipped \texttt{.musc} bundles.} The charter's letter --- entries in canonical \texttt{.musc} form --- is not met by v0.1: builder-plus-seed is implementation-anchored, which makes the suite awkward for an independent implementation that does not link the reference test kit (it must re-derive the score graphs from the builders' sources). A future revision \MAY{} ship canonical \texttt{.musc} bundles for every entry, exactly as the charter describes, once schema-major bytes are stable enough that shipped bundles do not rot; at that point builder references would remain as the bundles' provenance record. Until then, the deviation is deliberate and this open question owns it. \end{openquestion} \section{Solve Configuration} \label{sec:model:solve-config} A suite entry is only reproducible if the solve it prescribes is fully specified: the same score under a different page geometry casts off into different systems, and several metric axes are defined over the declared content bounds. \begin{requirement} \label{req:refsuite:solve-config} Each suite entry declares the full solve configuration it is evaluated under: \begin{itemize} \item the \textbf{page geometry}: page size and margins, in staff spaces. In v0.1 every entry uses the reference implementation's documented default --- A4 portrait at an 8\,mm staff height: page $105 \times 148.5$ staff spaces, margins $7.5$ staff spaces on all four sides, hence a content area of $90 \times 133.5$ staff spaces. (Schema major~1 defines \texttt{Canvas.layout\_defaults} and its type \texttt{CanvasLayoutDefaults} (P12-I7); the reference implementation's code graph home lands in a later phase, so until then geometry is declared per entry as a solver parameter.) \item the \textbf{solver configuration}: the \texttt{SolverConfig} fields. In v0.1 every entry uses the default configuration --- the \texttt{Standard} profile, an unbounded deterministic budget, and the Quality Metric Catalog's default tie-breaking weights. \end{itemize} An implementation \MUSTNOT{} substitute its own defaults for a declared configuration when evaluating an entry. \end{requirement} \section{Passing an Entry, Passing the Suite} \label{sec:model:pass} \begin{requirement} \label{req:refsuite:pass} A solver \textbf{passes an entry at tier $T$} when, solving the entry's score under the entry's declared configuration, all four of the core specification's cross-implementation conformance conditions hold for that solve: \begin{enumerate} \item every hard constraint of the solve is satisfied; \item the result is internally deterministic per the core's within-implementation rule (byte-identical \texttt{ResolvedLayoutIR} for repeated identical solves within one implementation version); \item the \texttt{SolveReport} is well-formed and diagnostically accurate --- in particular the metric vector is computed per the Quality Metric Catalog, never a placeholder; \item every normative quality metric is at or below tier $T$'s threshold for its axis --- the Quality Metric Catalog's default per-tier threshold table, unless the entry declares a per-entry override (no v0.1 entry does); \end{enumerate} and additionally every fixed-expectation test the entry declares is reproduced exactly (no v0.1 entry declares any). A solver \textbf{passes the suite at tier $T$} when it passes every entry required at tier $T$. Per the core specification, failure on any single entry is conformance failure at the claimed tier; a status of \texttt{Unsatisfiable} or a budget-exhausted partial solve on a suite entry is a failure of condition~(1) or~(3), not an exemption. \end{requirement} \section{Fixed-Expectation Tests} \label{sec:model:fixed} The core specification permits an entry to pin specific layout properties --- a particular bar's width, a specific system-break location --- that all conforming solvers must reproduce, and directs that they be used sparingly. In the resolved layout such expectations are checkable against concrete structures: a bar's width against its \texttt{ResolvedMeasure} bounding box, a system count or break location against the \texttt{ResolvedSystem} list and the slots at which systems begin. \begin{requirement} \label{req:refsuite:fixed-expectations} v0.1 declares \textbf{no fixed-expectation tests}. The mechanism is deliberately unused: every v0.1 entry is evaluated by validity, determinism, report accuracy, and thresholds alone. An entry of a future suite revision that adds a fixed expectation \MUST{} state the expected value, the resolved structure it is checked against, and the exact comparison (including any tolerance). \end{requirement} \begin{rationale} A fixed expectation binds \emph{every conforming solver} to one layout fact forever after; it is the only place the suite may force a layout, and none is warranted yet --- no cross-implementation ambiguity has surfaced that thresholds fail to resolve. The reference implementation's golden files (SVG snapshots, byte-anchored layouts) are \emph{implementation regression locks}: they pin what \emph{that} implementation produced so its own drift is caught, and they are deliberately not suite conformance --- promoting them to fixed expectations would freeze the ecosystem to the reference algorithm's choices, exactly what the core's threshold-based conformance model exists to avoid. \end{rationale} \section{Suite Versioning} \label{sec:model:versioning} \begin{requirement} \label{req:refsuite:versioning} Per the core specification, suite versions are tied to specification versions: each release of this companion names the core-specification version whose conformance story it serves, and a revision of the core's solver chapter that changes tier obligations requires a corresponding suite revision. This v0.1.0 suite serves the pre-1.0 core working draft. A conforming implementation \MUST{} declare which suite version it passes; a claim without a suite version is not a conformance claim. \end{requirement} This document keeps its own revision history (Chapter~\ref{ch:history}), independent of the Quality Metric Catalog's: entry-set growth and threshold-override changes are suite revisions, while metric definitions and default thresholds revise in the catalog. % =========================================================================== \chapter{The v0.1 Entry Set} \label{ch:entries} \section{Overview} \label{sec:entries:overview} \begin{requirement} \label{req:refsuite:entries} The v0.1 entry set is exactly the six entries of Table~\ref{tab:entries}. Every entry is \textbf{required at the Minimal tier}. The \textbf{Standard-tier subset is the same six entries}, evaluated against the Quality Metric Catalog's Standard threshold column. No entry declares a per-entry threshold override; no entry declares a fixed-expectation test. No entry is designated Advanced-only in v0.1 (the Advanced tier adds obligations, not entries, until an extension's layout requirements enter the suite). \end{requirement} \begin{table}[h] \centering \small \begin{tabular}{lp{4.2cm}p{6.6cm}} \toprule \textbf{Id} & \textbf{Entry} & \textbf{Construction} \\ \midrule RS-1 & Ten-measure single staff & \texttt{fixtures::ten\_measure\_single\_staff} with seed \texttt{0x000A\_11CE} \\ RS-2 & Rich multi-region score & \texttt{generators::valid\_score\_rich} with seed \texttt{0xF302} (= corpus entry \texttt{gen\_valid\_score\_rich}) \\ RS-3 & B-flat major scale & corpus entry \texttt{b\_flat\_major\_scale} \\ RS-4 & Two-voice counterpoint & corpus entry \texttt{two\_voice\_counterpoint} \\ RS-5 & Notes and rests & corpus entry \texttt{notes\_and\_rests} \\ RS-6 & Three-four meter line & corpus entry \texttt{meter\_three\_four} \\ \bottomrule \end{tabular} \caption{The v0.1 entry set. All six entries are required at Minimal; the same six constitute the Standard subset. Solve configuration for every entry: the declared default geometry and solver configuration of Requirement~\ref{req:refsuite:solve-config}.} \label{tab:entries} \end{table} No implementation claims Standard-tier conformance as of this suite version; the Standard listing exists so that the first Standard claim is made against a pre-declared bar rather than a bar negotiated after the fact. Where an entry's layout lacks a metric's geometry class (a single system, a single page, no drawn slurs or beams), the affected axes evaluate to $0.0$ under the catalog's vacuous-geometry rule and the entry's threshold on those axes is trivially met; each entry's coverage note below says which axes it exercises non-degenerately. \section{RS-1: Ten-Measure Single Staff} \label{sec:entries:rs1} \begin{description} \item[Construction.] \texttt{epiphany\_testkit::fixtures::ten\_measure\_single\_staff(0x000A\_11CE)} --- the seed the reference implementation's engraving and rendering acceptance goldens document. \item[Content.] A 10-measure, single-staff, single-voice metric score: 40 quarter notes (four per measure, all C4), plus a tie, a spanner, a marker, and a chord symbol. Invariant-clean by construction. \item[Coverage.] The multi-system workhorse. Under the declared geometry the spaced line (about 99 staff spaces) exceeds the content width of 90 staff spaces and casts off into \textbf{two systems}, chosen among the barline break candidates --- so the \texttt{SystemBreak}, \texttt{CastingOff}, and \texttt{SymbolDensity} axes are exercised non-degenerately, alongside \texttt{Collision} and \texttt{Spacing} (axis names per the catalog's \texttt{QualityMetricKind} mapping). The cross-cutting objects (tie, spanner, marker, chord symbol) ride through the projection. Single page: the \texttt{PageFill} axis degenerates. \item[Tiers, thresholds, expectations.] Required at Minimal; in the Standard subset. Catalog default thresholds; no overrides; no fixed expectations. \end{description} \section{RS-2: Rich Multi-Region Score} \label{sec:entries:rs2} \begin{description} \item[Construction.] \texttt{generators::valid\_score\_rich(0xF302)} (the core crate's generator), identically reachable as the test-kit corpus entry \texttt{gen\_valid\_score\_rich} (the corpus pins the same seed). \item[Content.] Three \emph{concurrent} regions on disjoint staves: a metric region (measures, an eighth-note triplet tuplet, a tie, a spanner, a marker, a chord symbol, a decomposition attachment), a proportional region (wall-clock events), and an aleatoric region (musical-discipline events) --- plus tombstoned pitch and event ids and a spelling attachment resolving to a tombstoned pitch. Every core graph invariant holds. \item[Coverage.] Multi-region, multi-staff validity: concurrent regions must each be cast off and placed without cross-region interference. At the Minimal tier this entry demands validity and honest diagnostics on the projection it induces --- the non-metric regions reach the solver as ordinary constrained IR (their decompositions deferred upstream), so the entry does \emph{not} smuggle the Advanced tier's proportional/aleatoric layout obligation into Minimal; it guards that a multi-region document neither breaks hard constraints nor corrupts the report. \item[Tiers, thresholds, expectations.] Required at Minimal; in the Standard subset. Catalog default thresholds; no overrides; no fixed expectations. \end{description} \section{RS-3: B-flat Major Scale} \label{sec:entries:rs3} \begin{description} \item[Construction.] Corpus entry \texttt{b\_flat\_major\_scale} (zero-argument deterministic builder). \item[Content.] Seven quarter notes ascending through B-flat major (B$\flat$ C D E$\flat$ F G A) in one metric region, one staff, one voice --- accidentals inferred in a flat context. \item[Coverage.] The accidental entry: flats produce glyph clusters with left overhang, exercising overhang-aware spacing, the same-column cluster of accidental and notehead (the collision axis's same-slot exclusion), and the \texttt{Spacing} axis under uneven column ink. Single system and page: the break-family and page axes degenerate. \item[Tiers, thresholds, expectations.] Required at Minimal; in the Standard subset. Catalog default thresholds; no overrides; no fixed expectations. \end{description} \section{RS-4: Two-Voice Counterpoint} \label{sec:entries:rs4} \begin{description} \item[Construction.] Corpus builder \texttt{two\_voice\_counterpoint} (zero-argument, deterministic). \item[Content.] Two voices in one staff instance: an upper quarter-note line and a lower quarter-note line two octaves beneath it, sounding simultaneously. \item[Coverage.] Simultaneity: both voices' notes share musical time columns, so each spring slot carries a two-voice cluster, and the low line sits below the staff (ledger territory). Exercises same-column stacking, the collision sweep across a vertically spread texture, and column-advance regularity when columns are ink-heavy. Single system and page: the break-family and page axes degenerate. \item[Tiers, thresholds, expectations.] Required at Minimal; in the Standard subset. Catalog default thresholds; no overrides; no fixed expectations. \end{description} \section{RS-5: Notes and Rests} \label{sec:entries:rs5} \begin{description} \item[Construction.] Corpus entry \texttt{notes\_and\_rests} (zero-argument deterministic builder). \item[Content.] Note, rest, note, rest --- quarter values in one metric region, one staff, one voice. \item[Coverage.] Rest glyphs interleaved with noteheads: rest columns carry different ink boxes than note columns, exercising the spacing pass's treatment of mixed column content and the collision sweep over non-notehead glyphs. Single system and page: the break-family and page axes degenerate. \item[Tiers, thresholds, expectations.] Required at Minimal; in the Standard subset. Catalog default thresholds; no overrides; no fixed expectations. \end{description} \section{RS-6: Three-Four Meter Line} \label{sec:entries:rs6} \begin{description} \item[Construction.] Corpus entry \texttt{meter\_three\_four} (zero-argument deterministic builder). \item[Content.] Three quarter notes under a declared $\tfrac{3}{4}$ time signature (three quarter-beat groups), in one metric region, one staff, one voice. \item[Coverage.] Meter variety: the declared time signature drives measure length past the whole-note default, exercising the meter-resolution path that feeds the layout projection. Guards that a non-default meter neither breaks hard constraints nor perturbs spacing regularity. Single system and page: the break-family and page axes degenerate. \item[Tiers, thresholds, expectations.] Required at Minimal; in the Standard subset. Catalog default thresholds; no overrides; no fixed expectations. \end{description} % =========================================================================== \chapter{Harness Binding (Non-Normative)} \label{ch:harness} This chapter is informative. The reference implementation binds this suite to executable checks in its test kit, following the test kit's established library-module-per-harness pattern (one public module per harness, mirroring the corpus and prepass harnesses, with an integration test driving it). The suite harness constructs each Chapter~\ref{ch:entries} entry from its named builder and seed, solves it under the declared configuration, and asserts the Minimal-tier pass of Requirement~\ref{req:refsuite:pass}; it is delivered with the reference implementation. \begin{nongoal} The harness is not part of this document's normative surface. Conformance is defined by Chapters~\ref{ch:model} and~\ref{ch:entries} alone; an independent implementation may bind the suite with any machinery that evaluates the same entries under the same configurations. Likewise, the reference implementation's golden files (SVG snapshots, byte-anchored layouts) are that implementation's regression locks, not suite conformance (Section~\ref{sec:model:fixed}). \end{nongoal} % =========================================================================== \chapter{Revision History} \label{ch:history} \begin{longtable}{p{2cm} p{2.5cm} p{9cm}} \toprule \textbf{Date} & \textbf{Section} & \textbf{Change} \\ \midrule \endhead \today & All & 0.1.0 --- Initial companion: pins the suite entry model (builder-and-seed score referencing with the \texttt{.musc}-bundle open question, per-entry solve configuration over the declared A4/8\,mm default geometry, the four-condition per-entry pass rule, the deliberately empty fixed-expectation set, suite-version declaration); delivers the six-entry v0.1 set (\texttt{ten\_measure\_single\_staff} seed \texttt{0x000A\_11CE}, \texttt{valid\_score\_rich} seed \texttt{0xF302}, \texttt{b\_flat\_major\_scale}, \texttt{two\_voice\_counterpoint}, \texttt{notes\_and\_rests}, \texttt{meter\_three\_four}), all required at Minimal and all constituting the Standard subset under the Quality Metric Catalog's default thresholds, with no per-entry overrides. \\ \bottomrule \end{longtable} \end{document}