[{"code":"syntax.expected","severity":"error","teaches":"the parser expected a different token here"},{"code":"syntax.notation","severity":"error","teaches":"this notation is not part of the grammar at this position"},{"code":"notation.conflict","severity":"error","teaches":"these marks contradict each other (e.g. [p, f] or [., ..])"},{"code":"chord.quality-case-mismatch","severity":"error","teaches":"the root's case sits on one side of the quality axis and the explicit quality on the other (e.g. fmaj7); case carries quality"},{"code":"chord.rare-quality","severity":"warning","teaches":"dM7 is the diminished-major seventh, an unusual chord — did you mean dm7 (half-diminished)?"},{"code":"tempo.unsupported-suffix","severity":"error","teaches":"tempo text takes no attachment; put the period in the string (*\"Andante.\") or the beat unit in the tempo directive"},{"code":"tempo.placement-needs-text","severity":"error","teaches":"the comma down-mark places tempo words below a sounding part; metronome values remain global above the staff"},{"code":"hairpin.kind-mismatch","severity":"error","teaches":"a crescendo was closed by a diminuendo marker (or vice versa); both endpoints carry the kind"},{"code":"spanner.unterminated","severity":"warning","teaches":"a span opened but never closed; a hairpin with nothing to arrive at stays one note wide, where you typed it (close it with a leading < or > , or a dynamic, to say how far it reaches), and a slur or glissando with no note to reach draws nothing"},{"code":"spanner.stop-without-start","severity":"error","teaches":"a closing span marker with no opening in effect"},{"code":"slur.adjacent-spans","severity":"info","teaches":"notes are nodes and one slur is one span between endpoint nodes; interior notes stay unmarked (D~ E ~F), while D~ E~ F spells two slurs"},{"code":"version.header-required","severity":"error","teaches":"from the container swap onward a source must declare its spec version — the same text can mean different music in different versions (<C4>/h)"},{"code":"syntax.unexpected","severity":"error","teaches":"this token cannot start anything the grammar knows at this position"},{"code":"syntax.incomplete","severity":"error","teaches":"the source ended (or the line ended) before this construct was finished"},{"code":"syntax.pitch","severity":"error","teaches":"a pitch is an uppercase letter A–G, an optional accidental, then an optional octave number (Eb, F#5); r is a rest"},{"code":"syntax.anchor","severity":"error","teaches":"an anchor is a measure label and an offset: m1:0, m2:q, m3:1/2"},{"code":"version.invalid","severity":"error","teaches":"the header is `scorescript` followed by a version like 0.3"},{"code":"repeat.invalid-target","severity":"error","teaches":"a measure repeat repeats the previous bar (%) or a labeled earlier bar (%m5); there must be one"},{"code":"repeat.mixed-content","severity":"error","teaches":"a repeat bar holds nothing else: && (or %) IS the bar's content, so a note beside it would be a second bar's worth of music in one bar"},{"code":"chord.empty","severity":"error","teaches":"a chord needs at least one pitch between [ and ]"},{"code":"pitch.invalid","severity":"error","teaches":"this is not a pitch: letters A–G (uppercase — case carries quality, never octave), accidentals b bb # ##, then an optional octave number"},{"code":"spanner.detached","severity":"warning","teaches":"a connector binds by adjacency: Eb< opens a crescendo on Eb, <D closes it at D; a < floating between spaces binds to the note before it"},{"code":"duration.invalid","severity":"error","teaches":"this duration is not one the grammar knows (numbers 1 2 4 8 16 32 64 with dots, or N/M)"},{"code":"duration.dangling","severity":"error","teaches":"a number is a duration when it comes BEFORE a note (4G) and an octave when it is glued AFTER the pitch letter (G4); this one has nothing to attach to, so it adds nothing to the bar"},{"code":"grid.bar-count","severity":"error","teaches":"a system block's range (m1-10) promises a number of bars; this row has a different count — check the | barlines"},{"code":"grid.too-many-rows","severity":"error","teaches":"a system block has one row per declared part, in order; this row has no part to belong to"},{"code":"grid.missing-row","severity":"warning","teaches":"a declared part has no row in this system block, so it is silent here; add a row of rests if that is intended"},{"code":"duration.nothing-to-complete","severity":"error","teaches":"& takes the value that completes the dotted note before it (q.Eb &G); the note before this one is not dotted"},{"code":"instrument.unknown","severity":"warning","teaches":"this instrument is not in the catalog (forty entries: flute, clarinet-bb, horn-f, tuba, voice …); it prints as written with a treble clef and no transposition"},{"code":"grid.unknown-group","severity":"error","teaches":"a group label on its own line names declared parts by instrument (fls, horns); no declared part has this instrument"},{"code":"grid.filled-rests","severity":"info","teaches":"a blank bar, a short row, or a part with no row in a system block is read as whole-bar rests; write r to make that explicit"},{"code":"chord.comma-separator","severity":"warning","teaches":"inside a chord a comma separates members ([C E G] is the spelling); an octave down is written with the octave digit ([C3 E G]) — outside chords , still lowers an octave"},{"code":"syntax.continuation","severity":"error","teaches":"a backslash joins this line to the next, so nothing may follow it on the line; a \\ in the middle of a line used to be swallowed in silence, which is the one thing the language forbids"},{"code":"grid.unbounded-continuation","severity":"warning","teaches":"N31 continues a grid row when its line ends with a barline, and the block's range is what says when the row is finished; a block whose header names no range ({ m1: rather than { m1-3:) cannot say, so the next line is read as another row"},{"code":"syntax.continuation-twice","severity":"warning","teaches":"a grid row already continues when its line ends with a barline (N31: a barline at the end of a line means what it means at the end of a system), so a backslash after that barline is the same instruction written twice; the backslash is for a line that breaks INSIDE a bar, which a barline cannot say"},{"code":"syntax.barline-dropped","severity":"warning","teaches":"a repeat barline IS a double bar — thin line, thick line, and the two dots (Gould: a double bar is never written beside a repeat, because the repeat already divides the section) — so a barline written in the same closing slot as a `:|` draws nothing and is dropped; `:||`, `:|||`, `:| ||` and `m2(end-repeat): … ||` all say it twice, and the one spelling is `:|`"},{"code":"line.unterminated","severity":"warning","teaches":"a bracketed line ([ped..], [8va..], [tr..]) is a printed line with two ends; without its closer ([..ped], [..8va], [..tr]) it runs to the last note of the part"},{"code":"line.stop-without-start","severity":"warning","teaches":"this closes a bracketed line, but none of that kind is open; a line OPENS with the dots trailing ([ped..]) and CLOSES with them leading ([..ped])"},{"code":"volta.unclosed","severity":"warning","teaches":"a volta bracket runs to the repeat barline that closes it (:|); with no repeat after it the bracket runs to the end of the part, which is almost never what an ending means"},{"code":"navigation.ambiguous-abbreviation","severity":"info","teaches":"[DC] and [DS] are two capitals in a bracket, which is a boxed REHEARSAL mark (N11) — write the jump with its periods ([D.C.]) or in lower case ([dc]) and it is a jump"},{"code":"multirest.invalid-count","severity":"error","teaches":"a multirest counts the bars one printed H-bar stands for, so it counts at least two; a single bar of rest is written r"},{"code":"repeat.invalid-count","severity":"error","teaches":"&&4 is a RUN of measure repeats — four bars that each repeat the one before — so the count is at least two; one repeated bar is written &&"},{"code":"lyric.bar-misalign","severity":"warning","teaches":"the | in a lyrics row lines up with the music's barlines, which is what lets the row check itself: a row with a different number of bars, or a bar with more syllables than notes, has slipped against the music it sings"},{"code":"grid.inside-braced-part","severity":"error","teaches":"a system block's ROWS are the parts, so it belongs to the score, not inside one player's braces; declare the part with no braces (part hn: Horn in F) and write the block beside it"},{"code":"grid.spine-address","severity":"error","teaches":"a mark on a block head is the SCORE's, stated once outside the rows, so it has to say which bar it stands at — glued to it, like every other adjacency in the language: ||m5, [A]m5, [key G]m9"},{"code":"grid.spine-part-change","severity":"warning","teaches":"the spine carries what the whole SCORE does at a bar; a clef and an instrument change belong to one player, so they stay in that part's row or its `at` block"},{"code":"layout.duplicate-break","severity":"error","teaches":"one score point needs at most one system/page cut; a page already begins a system"},{"code":"layout.break-without-measure","severity":"error","teaches":"a part cut may point to its following range, but a score-wide layout cut must name its measure (`\\n29` or `\\p46`)"},{"code":"layout.exact-span-scope","severity":"error","teaches":"only a system has a measure count; write `system-map {96:3}` for exactly three measures beginning at m96, while page-map and multi-map remain point addresses"},{"code":"layout.invalid-span","severity":"error","teaches":"an exact system span counts the measures on that line, so its count must be at least one"},{"code":"layout.unknown-measure","severity":"error","teaches":"a layout cut must address a measure declared by the score"},{"code":"rehearsal.unknown-mode","severity":"error","teaches":"`rehearsal auto` mints a mark at every structural seam (a key, meter or tempo change); `rehearsal manual` is the default, where the marks you write are the marks you get"},{"code":"exercise.no-sections","severity":"warning","teaches":"an exercise labels its music through its sections, so one with none prints no label and claims no bars — the number would be minted for something invisible"},{"code":"exercise.reversed-section","severity":"error","teaches":"a section covers a forward span of bars; a backwards range would give the exercise a negative length and put its closing double bar before its label"},{"code":"shared-line.unknown-reader","severity":"error","teaches":"a reader head names players by the key the roster declares them with, so a key no part carries would hand its music to nobody"},{"code":"shared-line.too-many-readers","severity":"error","teaches":"naming one key several times in a head addresses successive instances of it, so more namings than declared players leaves a reading with no one to play it"},{"code":"span.not-found","severity":"error","teaches":"bars written as a repeat borrow a passage by the name it was given, so an unmatched name would leave those bars with no music at all"},{"code":"span.unknown-interval","severity":"error","teaches":"a repeat moves by a signed interval such as +P4 or -P5, and an unreadable one would silently leave the borrowed bars at pitch"},{"code":"span.length-mismatch","severity":"error","teaches":"a repeat writes exactly the bars it names, so a target longer or shorter than the passage it borrows is an arithmetic slip that would drop or duplicate music"},{"code":"shared-line.empty","severity":"warning","teaches":"a line exists to hold the music every reader plays, so one with no measures leaves every part that reads it silent"},{"code":"shared-line.unknown-interval","severity":"error","teaches":"a reading interval is a quality and a number such as P5 or m3, and an unreadable one would silently leave the reader at unison"},{"code":"shared-line.reading-conflict","severity":"warning","teaches":"an exercise reading and a part's own reads statement both name the interval a player takes, so when they disagree one of them is a stale edit"},{"code":"shared-line.overridden","severity":"info","teaches":"a part that writes its own measures keeps them, so a reads statement beside authored music is inert and probably a leftover"},{"code":"exercise.container-empty","severity":"warning","teaches":"an exercise container that holds no bars still prints its heading and its number, so the page gains a title over silence and the numbering of everything after it shifts"},{"code":"exercise.empty-reading","severity":"warning","teaches":"a reading exists to move named parts off the section's concert pitch, so one naming no parts changes nothing and hides a typo in a part symbol"},{"code":"exercise.unknown-reading-part","severity":"warning","teaches":"a reading names parts by the symbol they are declared with, so a symbol no part carries means that instrument silently keeps the section's pitch in its label"},{"code":"exercise.unknown-interval","severity":"error","teaches":"an interval is written quality-then-number (P5, M2, m3, A4, d5); without one the label cannot say what those parts actually sound"},{"code":"exercise.unknown-concert-pitch","severity":"error","teaches":"a section sounds at a pitch class such as F, Bb or C#; every part's `(your X)` is derived from it, so an unreadable one would silence the whole label"},{"code":"exercise.broken-alignment","severity":"warning","teaches":"an exercise's parts must break at the same bars so \"line 3\" is the same music for every player; a part laid out alone may add breaks its neighbours did not, and a rehearsal where the flute and the trumpet count different lines is the cost"},{"code":"exercise.empty-systems","severity":"error","teaches":"`systems N` says how many bars go on a line, so N must be at least one — a line carrying no bars describes no page and could never be drawn"},{"code":"rudiment.empty","severity":"warning","teaches":"a rudiment is a named pattern of strokes, so one with no strokes has nothing to print beside the exercise that plays it"},{"code":"rudiment.unknown-token","severity":"error","teaches":"a rudiment is written in hands (R, L, and the grace hands lR and rL) and the language's own roll words ((trem), (trem2), (trem3), (z)); anything else would print a pattern no drummer could read"},{"code":"rudiment.duplicate","severity":"warning","teaches":"a rudiment's name is its address — an exercise titled with it plays it — so two declarations of one name leave the heading quoting whichever was read last"},{"code":"exercise.overlapping-sections","severity":"error","teaches":"two sections claiming the same bar would stamp two labels on one system and mint two double bars at one score point"},{"code":"link.file-not-found","severity":"error","teaches":"a referenced exercise is read from the master file at every compile, so the path is resolved against the directory of the file that wrote it; a path that does not open means the consumer would print a hole where the pulled music goes"},{"code":"link.id-not-found","severity":"error","teaches":"an exercise is referenced by the id its master authored (`exercise =the-scale`), never by position or title — so a master that renames or drops an id says so here instead of silently handing back the wrong exercise"},{"code":"link.cycle","severity":"error","teaches":"a file cannot pull from a file that pulls from it: the resolution would never finish, and there is no answer to which of the two is the source of truth"},{"code":"link.part-missing","severity":"warning","teaches":"the pull matches the two rosters by part symbol; a master part the consumer does not carry is dropped, and a consumer part the master does not carry is filled with rests, and both are things the arranger should have decided on purpose"},{"code":"link.floating-octave","severity":"warning","teaches":"a bare letter takes the octave NEAREST the note before it, and the note before the first bar of a pulled exercise is in the master, not here — so an exercise meant to be linked anchors its opening note with an explicit octave (4Bb4), or the same scale arrives in a register nobody asked for"},{"code":"link.override-pending","severity":"warning","teaches":"`concert X` on a reference is parsed and reserved but not yet applied: pitch math has one home, the semantic layer, which runs after this splice — so v0 pulls the master's own pitch rather than performing a second, private transposition"},{"code":"link.master-diagnostics","severity":"info","teaches":"the master was read with diagnostics of its own; they are reported against the master's text, where their line numbers mean something, and counted here so a consumer is never silently built on music its source could not read"},{"code":"link.no-filesystem","severity":"error","teaches":"a reference names a file, so resolving it needs a place to look; a host that compiles source text with no directory of its own cannot follow one, and says so rather than pretending the exercise was empty"},{"code":"book.exercise-unanchored","severity":"warning","teaches":"a contents line points at a page, and the page is found from the bar the exercise opens at; an exercise that states no `section` and follows another that states none has no bar of its own, so the book prints its title with no page number rather than a page number that is wrong"},{"code":"book.contents-without-cover","severity":"warning","teaches":"a contents list is printed on the cover, so asking for one without a cover asks for a page that is never made — either add `cover` or drop `contents`"},{"code":"lyric.no-music","severity":"error","teaches":"a lyrics row sings the row above it, so it needs a line of music before it in the same part"},{"code":"version.unsupported","severity":"error","teaches":"this toolchain implements spec versions 0.1, 0.2 and 0.3; a newer header means the source may use constructs it cannot read"},{"code":"score.no-parts","severity":"warning","teaches":"a score with no parts engraves nothing; add `part name: instrument { … }` or bare measure lines"},{"code":"metadata.duplicate","severity":"error","teaches":"composer and movement-title name one thing each; a second declaration would silently win"},{"code":"metadata.empty","severity":"error","teaches":"an empty metadata string prints an empty line on the page; delete the statement instead"},{"code":"symbol.duplicate-part","severity":"error","teaches":"part symbols address parts from statements and hosts; two parts with one symbol make that address ambiguous"},{"code":"meter.invalid","severity":"error","teaches":"a meter is beats over a note value (4/4, 6/8) or printed additive groups (3+2+2/8); every group is positive and the beats total at most 64"},{"code":"beams.invalid","severity":"error","teaches":"a beam grouping is additive groups counted in the meter's own unit (3+3+2), or in a unit named after a slash (3+3+2/8 — the same bar as 6+6+4/16), or one of the words none (every note flags), beat (one group per beat) and standard (this meter goes back to its own grouping)"},{"code":"beams.does-not-fill-the-bar","severity":"warning","teaches":"a beam grouping fills its bar. Counted in the meter's own unit that means its groups add up to the meter's beats — 3+3+2 under 8/8, but 2+2 under 4/4; name another unit after a slash and the same claim is made in that unit (3+3+2/8 fills a 4/4 bar)"},{"code":"key.invalid","severity":"error","teaches":"a key is a major or minor name (G, Eb, Am, F#m) or `open` — no signature and no implied tonic"},{"code":"tempo.invalid","severity":"error","teaches":"a tempo is a positive number of beats per minute"},{"code":"spell.unknown-mode","severity":"error","teaches":"spelling modes are `spell key` (a bare letter takes the key signature's accidental, and `n` is the natural) and `spell absolute` (a letter is exactly what it says) — absolute is the default, so nothing already written changes meaning"},{"code":"solfege.unknown-mode","severity":"error","teaches":"solfège modes are `solfege movable` (do is the tonic of the key, read as major) and `solfege fixed` (do is C) — movable is the default"},{"code":"solfege.no-key","severity":"warning","teaches":"movable do puts do on the key's tonic, so music with no key signature (or `key open`) has no tonic to move to; the syllables are read in C until a key is stated, or write `solfege fixed` to mean C on purpose"},{"code":"solfege.si-ambiguous","severity":"info","teaches":"in movable do, `si` is RAISED SOL (di ri fi si li) and the leading tone is `ti`; under `solfege fixed`, `si` IS the seventh degree, as the fixed-do cultures say it — both cultures keep their word (Brandon's ruling)"},{"code":"clef.invalid","severity":"error","teaches":"a clef is treble, bass, alto, tenor, soprano, mezzo-soprano, baritone, percussion, an octave clef (treble-8vb), or a number 1–7 — the seven clefs ordered by where middle C sits"},{"code":"context.unknown-measure","severity":"error","teaches":"`at mN` changes the context at a bar the score declares; an unknown bar means the change never happens"},{"code":"context.duplicate","severity":"error","teaches":"one bar takes one meter, one key, one tempo and one clef; a second declaration would silently win"},{"code":"context.scope","severity":"error","teaches":"meter, key and tempo belong to the score (every part shares them); the clef and the transposition belong to a part"},{"code":"transpose.invalid","severity":"error","teaches":"a transposition is a diatonic distance and a chromatic one — `transpose -1 -2` for a B-flat instrument, `transpose -5 -9 -1` when an octave comes with it — and `transpose 0` is none, which hands the bar back to concert pitch"},{"code":"transpose.incomplete","severity":"error","teaches":"one number is only half a transposition: the letters move by the diatonic distance and the sound by the chromatic one, so both are needed — only `transpose 0` stands alone"},{"code":"measure.overfull","severity":"error","teaches":"the events in this bar sound longer than its meter allows — the bar line cannot move"},{"code":"measure.incomplete","severity":"info","teaches":"a short bar completes itself with rests in the printed music; the source stays as typed. A pickup bar (m0) stays short on purpose"},{"code":"measure.noncontiguous","severity":"error","teaches":"bars run m1…mN (or m0 for a pickup) with no gaps; a gap means a bar was renamed or lost"},{"code":"measure.duplicate-symbol","severity":"error","teaches":"a measure name belongs to one bar; reusing it makes the name useless as an address"},{"code":"measure.inconsistent-symbol","severity":"error","teaches":"one bar carries one name across every part and voice"},{"code":"measure.invalid-symbol","severity":"error","teaches":"a stable name is a letter or _ then letters, digits, _ and -; names survive edits, so they may not be arbitrary text"},{"code":"symbol.duplicate-measure","severity":"error","teaches":"one voice declares each bar once; a second declaration of the same label would silently replace the first"},{"code":"note.duplicate-symbol","severity":"error","teaches":"a note name addresses one note from lyrics and ties; two notes with one name make that address ambiguous"},{"code":"note.invalid-symbol","severity":"error","teaches":"a stable name is a letter or _ then letters, digits, _ and -"},{"code":"voice.mixed-shorthand","severity":"error","teaches":"direct measure lines ARE voice 1; mixing them with explicit voice blocks makes the voice numbering unreadable"},{"code":"voice.invalid","severity":"error","teaches":"a staff carries voices 1 through 4"},{"code":"voice.duplicate","severity":"error","teaches":"one voice number, one block; write the bars of a voice in a single block"},{"code":"repeat.no-previous-bar","severity":"error","teaches":"&& repeats the bar before it, so the first bar of a part or voice has nothing to repeat — write the music once, then && it"},{"code":"repeat.unknown-measure","severity":"error","teaches":"a % repeats a bar this voice declares; naming a bar that does not exist repeats nothing"},{"code":"repeat.forward","severity":"error","teaches":"a % repeats an EARLIER bar — music cannot copy what has not been written yet"},{"code":"repeat.meter-mismatch","severity":"error","teaches":"a repeated bar carries the earlier bar's notes; if the meter changed in between, those notes no longer fill the bar"},{"code":"repeat.named-content","severity":"error","teaches":"named notes and named tuplets have one identity each, and a repeat would need two copies of it"},{"code":"navigation.unknown-option","severity":"error","teaches":"navigation words are start-repeat, end-repeat-N, ending-N, segno, to-coda, coda, fine and the jumps (jump-dc, jump-ds-al-coda…)"},{"code":"navigation.duplicate-option","severity":"error","teaches":"a bar states each navigation word once"},{"code":"navigation.conflict","severity":"error","teaches":"a bar declares at most one repeat count, one ending set, one marker and one jump"},{"code":"navigation.invalid-repeat-count","severity":"error","teaches":"a repeat plays between 2 and 16 times"},{"code":"navigation.invalid-ending","severity":"error","teaches":"ending numbers run from 1 to 32"},{"code":"navigation.missing-segno","severity":"error","teaches":"a D.S. jump needs a segno to jump back to, or the player has nowhere to go"},{"code":"navigation.missing-coda","severity":"error","teaches":"an al Coda jump needs both a to-coda (where to leave) and a coda (where to land)"},{"code":"navigation.missing-fine","severity":"error","teaches":"an al Fine jump needs a Fine marker to stop at"},{"code":"notation.unknown","severity":"error","teaches":"this word is not in the mark vocabulary; quoted text (\"con brio\") prints any words you like"},{"code":"notation.duplicate","severity":"warning","teaches":"the same mark is written twice on one node; the second one changes nothing"},{"code":"notation.run-nothing-to-continue","severity":"warning","teaches":"(sim) continues the articulation already in force, so it needs one: mark the first note ((-)4C) and write (sim) on the next — on its own it continues nothing, and the passage stays plain"},{"code":"notation.run-not-open","severity":"warning","teaches":"(non) is “non sim.” — it stops a run that (sim) opened; with no run in force the notes here are already plain, so it changes nothing"},{"code":"chord.duplicate-pitch","severity":"error","teaches":"a chord writes each pitch once; altered unisons (C4 with C#4) are legal, an exact repeat is not"},{"code":"chord-symbol.invalid-root","severity":"error","teaches":"a chord symbol starts with a root: A–G (case carries quality) with an optional accidental"},{"code":"chord-symbol.unknown-option","severity":"error","teaches":"the only chord-symbol option is bass-<pitch>, the slash bass"},{"code":"chord-symbol.conflicting-bass","severity":"error","teaches":"a chord symbol names at most one bass pitch"},{"code":"chord-symbol.empty-display","severity":"error","teaches":"an explicit chord-symbol spelling replaces the generated one, so it cannot be empty"},{"code":"tie.pitch-mismatch","severity":"error","teaches":"a tie joins the SAME written pitch; ~ between different pitches is a slur, which is what you want here"},{"code":"tie.no-common-pitch","severity":"error","teaches":"a tie between chords needs at least one written pitch present in both"},{"code":"tie.partial-pitch-mismatch","severity":"error","teaches":"a tied chord member must exist in the next chord; a tie that lands on nothing is not engravable"},{"code":"tie.missing-endpoint","severity":"error","teaches":"a tie needs a pitched note immediately after it to arrive at"},{"code":"tie.conflicting-scope","severity":"error","teaches":"tie the whole event (tie-next) or single chord members ([Eb~ G]), never both — the two scopes contradict each other"},{"code":"tie.invalid-endpoint","severity":"error","teaches":"a tie statement names two pitched notes that exist in this part"},{"code":"tie.double-connector-no-pitch","severity":"warning","teaches":"a trailing ~~ says BOTH things at once — tie forward and open a slur (4C~~ C D ~E) — so its tie half needs the very next node to repeat the written pitch; with no repeat there is nothing to tie and the second ~ quietly spells a second slur instead. Write one ~ for the slur alone, or repeat the pitch to tie"},{"code":"tie.connector-run-too-long","severity":"warning","teaches":"a node trails one ~ (a tie when the next node repeats the pitch, a slur otherwise) or two (~~ — tie forward AND open a slur); there is deliberately no third form, so every ~ past the second says nothing"},{"code":"tie.not-adjacent","severity":"info","teaches":"a tie says two notes are ONE SOUND, so it only ever joins ADJACENT notes of the same pitch; X~ … ~X with anything in between is a slur across all of them, however the endpoints are spelled (N34) — if two ties were meant, the pitch has to repeat on the very next note"},{"code":"range.above-practical","severity":"info","teaches":"the catalog's practical range is the band a DEVELOPING player can be counted on for, and this note is above it; one strong player will have it and a section will not, which is worth knowing now rather than at the first rehearsal — the instrument's full range is stated separately, and this note is still inside it"},{"code":"range.below-practical","severity":"info","teaches":"the bottom of a range is where tone and intonation go first, and this note is below the band a DEVELOPING player owns; the note is on the instrument — the section playing it will simply be quiet, flat and late"},{"code":"range.outside-professional","severity":"warning","teaches":"this note is outside the instrument's range as the orchestration literature states it — not merely hard but very likely not there at all for whoever is handed the part; ranges are stated in WRITTEN pitch, so a transposing part is judged by what its player reads and not by what it sounds"},{"code":"hairpin.unterminated","severity":"warning","teaches":"an inline cresc/dim ends at the next node carrying a dynamic; without one it has no printed length"},{"code":"transition.stop-without-start","severity":"warning","teaches":"[...] is the last dash of a tempo transition's dashed line, so it needs an earlier [rit..], [rall..] or [accel..] to end; with none open it prints nothing"},{"code":"transition.overlapping","severity":"warning","teaches":"one tempo transition is in force at a time: a second [rit..]/[accel..] closes the one already running where it stands, exactly as a tempo event would — write [...] where you meant the first to end"},{"code":"expressive.invalid-symbol","severity":"error","teaches":"a stable identifier names the expression so edits elsewhere keep pointing at it"},{"code":"expressive.duplicate-symbol","severity":"error","teaches":"each expression in a part carries its own name"},{"code":"expressive.invalid-placement","severity":"error","teaches":"placement is above, below, or auto"},{"code":"expressive.unknown-measure","severity":"error","teaches":"an anchor names a bar this part declares"},{"code":"expressive.invalid-offset","severity":"error","teaches":"an anchor offset is a position inside the bar: 0, a note value (q), or an exact N/M"},{"code":"dynamic.invalid-mark","severity":"error","teaches":"dynamics are pppp…ffff plus fp, sfz, sf, sfp, fz, rfz and n"},{"code":"text.invalid-role","severity":"error","teaches":"a text role is tempo, rehearsal, technique, staff, or system — the role decides how it is engraved"},{"code":"text.empty","severity":"error","teaches":"a text expression prints something; an empty one is invisible"},{"code":"breath.invalid-symbol","severity":"error","teaches":"a breath is `breath` (comma) or `caesura` (railroad tracks)"},{"code":"breath.always-above","severity":"warning","teaches":"a breath is drawn above the stave, so `below` cannot move it"},{"code":"figured-bass.invalid-figures","severity":"error","teaches":"figured bass is a non-empty comma-separated list of figures"},{"code":"lyric.invalid-target","severity":"error","teaches":"a lyric syllable attaches to a pitched note; rests are not sung"},{"code":"lyric.invalid-verse","severity":"error","teaches":"lyric verses are numbered from 1"},{"code":"lyric.invalid-syllabic","severity":"error","teaches":"a syllable is single, begin, middle, or end — this is what draws the hyphens between syllables"},{"code":"lyric.unknown-option","severity":"error","teaches":"lyric options are extender (the melisma line) and elision"},{"code":"lyric.duplicate-verse","severity":"error","teaches":"a note carries one syllable per verse; a second one would print on top of the first"},{"code":"lyric.duplicate-option","severity":"error","teaches":"a lyric states each option once"},{"code":"lyric.empty","severity":"error","teaches":"an empty syllable prints nothing; delete it instead"},{"code":"sticking.grace-spelling","severity":"error","teaches":"a grace stroke is written with the language's grace slash (/R L is a flam), because r is already the rest letter and the slot law refuses a second meaning for it"},{"code":"sticking.pitched-part","severity":"error","teaches":"R and L are hands, and they stand where a note stands only on an unpitched part; on a pitched one the sticking is a mark after the note (4C(R)), which is the side that prints below"},{"code":"sticking.duplicate","severity":"error","teaches":"a note is struck by one hand, so it carries one sticking; a second would print on top of the first"},{"code":"sticking.unknown-rudiment","severity":"error","teaches":"an exercise applies a rudiment by naming a declared one, so a name the score's dictionary does not hold says nothing about which hands the notes take"},{"code":"sticking.pattern-mismatch","severity":"info","teaches":"a rudiment's strokes are laid under the attacks in order and restart when they run out, so a count that is not a whole number of times through leaves the last pass cut short — and a flam or a roll in the pattern wants a grace stroke or the same roll mark in the music"},{"code":"staff-lines.invalid","severity":"error","teaches":"a staff has one to five lines — five is the standard staff and one is the unpitched percussion line"},{"code":"span.invalid-kind","severity":"error","teaches":"span kinds are slur, hairpin, pedal, ottava, volta, glissando, trill-line, custom-line and tuplet-bracket"},{"code":"span.invalid-range","severity":"error","teaches":"a span ends at or after where it starts"},{"code":"span.unknown-option","severity":"error","teaches":"each span kind has its own options; this one is not among them"},{"code":"span.conflicting-options","severity":"error","teaches":"these options contradict each other (a hairpin grows or shrinks, never both)"},{"code":"span.duplicate-option","severity":"error","teaches":"a span states each option once"},{"code":"span.empty-text","severity":"error","teaches":"a labelled span prints its label, so the label cannot be empty"},{"code":"volta.empty-text","severity":"error","teaches":"a volta prints its ending numbers and label; an empty label leaves the bracket blank"},{"code":"tuplet.invalid-ratio","severity":"error","teaches":"a tuplet plays at least 2 notes in the time of 1 or more (3:2, 5:4)"},{"code":"tuplet.too-few-events","severity":"error","teaches":"a tuplet groups at least two events; one note in the time of another is just a different duration"},{"code":"tuplet.unknown-option","severity":"error","teaches":"tuplet options are bracket-auto/show/hide and number-ratio/actual/none"},{"code":"tuplet.conflicting-options","severity":"error","teaches":"a tuplet states its bracket once and its number once"},{"code":"tuplet.duplicate-symbol","severity":"error","teaches":"a tuplet name addresses one group; two groups with one name make that address ambiguous"},{"code":"tuplet.invalid-symbol","severity":"error","teaches":"a stable name is a letter or _ then letters, digits, _ and -"},{"code":"transform.source-has-errors","severity":"error","teaches":"a transform rewrites text it fully understood — the formatter's own contract; fix the errors and the same command will run"},{"code":"transform.unnamed-rows","severity":"error","teaches":"a grid row belongs to a DECLARED part; rows the parser had to name for itself (\"row 2\") have no braced form to become, and inventing one would print a name on a staff nobody wrote — declare the parts, or label the rows"},{"code":"transform.score-spine","severity":"error","teaches":"a block head's spine states a fact about a SCORE POINT — a double bar, a rehearsal mark, a key change — not about a player, which is why it stands outside the rows; part-first has no shared head to carry it, so a score with a spine keeps the block road (`m1-8 { … }`), where the head still exists"},{"code":"transform.part-statements","severity":"error","teaches":"a grid row holds bars; a transpose, a span, a lyric, a part-level clef or an `at` block that changes more than the clef has no cell to print in, so that part keeps its braced form"},{"code":"transform.bar-head","severity":"error","teaches":"a grid cell prints its bar's music alone — navigation words (a repeat, an ending, a jump) and a stable bar name live on a labelled measure line, which a row has no room for"},{"code":"transform.bar-count","severity":"error","teaches":"a grid is a rectangle and a re-woven part is a replacement: every row spans the same bars, and an edited part hands back exactly the bars it was given — adding or removing one is a change to the SCORE"},{"code":"transform.group-label","severity":"error","teaches":"rows past a group label's parts are those parts' further voices, taken in turn — so a part with more than one voice needs a label that names it ALONE; give it a printed name nothing else answers to"},{"code":"transform.woven-context","severity":"error","teaches":"a direction written inside another player's bar has a beat, and this part's bar has different notes in it; move it to the bar's head, where every part can read it at the same moment"},{"code":"transform.part-not-found","severity":"error","teaches":"a part is addressed by its PRINTED name (\"Flute 1\") or by an instrument key that names only one part; `scorescript parts` lists what this score answers to"},{"code":"transform.part-ambiguous","severity":"error","teaches":"an instrument key that names several parts cannot pick one of them; the printed name disambiguates it"},{"code":"transform.not-one-part","severity":"error","teaches":"`part put` takes the file `part get` made — one part — because it re-weaves that part into the score it came from, and a whole score has nothing to weave into"},{"code":"transform.voices-changed","severity":"error","teaches":"a part's voice rows are its staff layout, not its notes; `part put` replaces bars one for one, so adding or dropping a voice is a change to the SCORE and belongs there"},{"code":"transform.meter-changed","severity":"error","teaches":"a bar line cannot move for one player: the meter belongs to the score, so a part whose bars are measured differently is describing different music"},{"code":"transform.context-changed","severity":"error","teaches":"the key and the tempo are the conductor's; a part file CARRIES them so the player can read them, but changing one there would silently rewrite every other part — change it in the score"},{"code":"import.malformed","severity":"error","teaches":"the file is not well-formed XML, so nothing in it can be trusted to mean what it looks like; the position given is where the document stopped making sense"},{"code":"import.not-musicxml","severity":"error","teaches":"the importer reads score-partwise MusicXML — the root element every notation program exports by default; score-timewise and other XML dialects are a different grammar"},{"code":"import.archive","severity":"error","teaches":"a .mxl is a bounded zip container whose META-INF/container.xml names one primary MusicXML score; malformed, ambiguous, encrypted, unsafe, or expansion-heavy archives are refused before importing"},{"code":"import.size","severity":"error","teaches":"the imported score expands beyond the host's bounded MusicXML limit; reduce or split the source rather than letting one document exhaust the process"},{"code":"import.encoding","severity":"error","teaches":"MusicXML and every text entry in an .mxl container are UTF-8; replacing invalid bytes would silently change names or notation, so the importer refuses instead"},{"code":"import.empty","severity":"warning","teaches":"the file parsed but holds no music — no parts, or parts with no measures; an importer that returned an empty score would look like it worked"},{"code":"import.unsupported","severity":"warning","teaches":"this element has no home in ScoreScript, so it did not come across; it is named rather than dropped in silence, because a file that is quietly smaller than it was is worse than one that says what it lost"},{"code":"import.lossy","severity":"info","teaches":"this came across, but not exactly as it was written — a spelling the language has no glyph for, a span drawn a different way, a value rounded; the music is there and the notation moved"}]
