Vai al contenuto

Changelog ufficiale


neumaRk 0.6.0 — Versione corrente (in sviluppo)

Versione di riferimento dichiarata dagli esempi della specifica (nrk:0.6). Estende la 0.5.0 con un'ampia ondata di feature, elencate qui sotto.

Novità della 0.6

La 0.6 estende la 0.5.0 con le feature seguenti; ognuna è specificata nel documento indicato.

Feature Documento
Grace notes neumaRk_grace_notes.md
Seconda voce N2 neumaRk_voices.md
Continuità stave N+ / multi-stave neumaRk_datapack.md §4
Ripetizione di misura % neumaRk_flow_and_repeats.md §7
Polyaccordi [top\|bottom] neumaRk_chords.md §6
Comment-label / accordi alternativi C+ neumaRk_chords.md §7
Persistenza armonia (cella vuota + . di continuazione iniziale) + assenza accordo NC neumaRk_chords.md §1.1-1.2
Markup testuale unificato neumaRk_text_markup.md
Sezioni collassabili [? …] / [!] neumaRk_markers.md §4
Dinamiche D) estese neumaRk_dynamics.md
Play directive (=Style,Tempo) neumaRk_play_directive.md
PLAY) / FORM) neumaRk_play_and_form.md
Versioni %%NAME … %%end neumaRk_versions.md
Articolazioni A) (base + estensioni §8-12) neumaRk_articulations.md
Lyrics L) + blocco LYRICS) neumaRk_lyrics.md
Note estese N) (noteheads, glissato, ritmo {}) neumaRk_notes_and_durations.md §11-12
Pausa multi-misura RN neumaRk_notes_and_durations.md §13
Spacer s (pausa invisibile) neumaRk_notes_and_durations.md §14
Anacrusi di sezione (>>> misura aperta + > levare mid-brano) neumaRk_notes_and_durations.md §7.1
Collezioni (book / playlist) neumaRk_collections.md

Cambiamenti normativi rilevanti nella 0.6

Oltre alle nuove feature, la 0.6 introduce alcuni cambiamenti che modificano sintassi o codici rispetto alle bozze precedenti:

  • Codici del blocco LYRICS) rinumerati in W157/W158. In una prima bozza il blocco LYRICS) condivideva W152/W153 con le Collezioni; ora ogni codice ha un solo significato (Collezioni: W152W156; blocco LYRICS): W157 = sezione inesistente, W158 = pickup in overflow).
  • Chiusura di sezione opzionale: [!] sostituisce [?] (neumaRk_markers.md §4.2). [!] è un marker anonimo di apertura di sezione non-opzionale e chiude lo scope opzionale precedente come effetto della regola generale §4.1.
  • Ripetizione di misura % con span N>1: il token compare in ognuna delle N misure consecutive del run (es. | a | b | %2 | %2 |), preservando l'invariante "una cell = una misura" (neumaRk_flow_and_repeats.md §7).
  • La cella d'accordo vuota ora fa persistere l'armonia (prima: silenzio). Una misura C) priva di sigle/%/NC ri-realizza l'accordo precedente sul battere (neumaRk_chords.md §1.1). Per dichiarare esplicitamente l'assenza di armonia si usa il nuovo token NC (§1.2, glifo N.C., errore E128 se misto a un accordo). Cambia di conseguenza il trigger della slash notation implicita: ora include l'armonia persistente ed esclude NC (neumaRk_notes_and_durations.md §10).

Convenzione dei codici diagnostici

  • E###error: costrutto non valido, emesso come errore bloccante (LOG_ERROR).
  • W###warning: diagnostica non bloccante, best-effort (LOG_WARNING); il parsing prosegue.

Il prefisso indica la severità, non la categoria. L'intera famiglia diagnostica 0.6+ (W130W158: dinamiche, articolazioni, play directive, PLAY) / FORM), sezioni collassabili, versioni, HV), collezioni, blocco LYRICS)) è emessa come warning ed è stata rinominata da E13x/E14x/E15x a W13x/W14x/W15x per allineare il prefisso alla severità reale.

Le due tabelle che seguono — codici di base (pre-0.6 e fondamentali) e codici 0.6+ — insieme costituiscono la mappa completa e autorevole codice → significato, allineata al parser. Ogni codice ha un solo significato. I codici interni E901E905 sono dev-facing (EN-only) e non normativi.

Allocazione codici di base (pre-0.6 e fondamentali)

Codice Significato Famiglia (doc)
E001 Token non interpretabile: nota / evento grace / chord-stack <…> / rhythm group {…} malformato o non chiuso Note e durate / Grace
E002 Una durata non può seguire . o ! Note e durate
E003 Tuplet non valido Note e durate
E004 Impossibile interpretare la pitch Note e durate
E005 Le durate delle note superano il metro della misura Note e durate
E006 Più di uno slash-rhythm / per misura Note e durate
E007 Slash / senza spazio (meno di un beat dopo l'allineamento) Note e durate
E008 Ottava assoluta @<n>_ richiede durata esplicita Note e durate
E009 Durata grace mancante sul primo evento, o non conforme (solo 4/8/16) Grace notes
E010 Modificatore / o ^ ammesso solo sull'ultimo evento grace Grace notes
E011 Blocco grace vuoto [] Grace notes
E012 Blocco grace con più di 4 eventi Grace notes
E013 Pausa non ammessa come evento grace Grace notes
E101 Lista ritmica compatta / polychord / espressione accordo non interpretabile Accordi
E102 Token non riconosciuto nella riga accordi Accordi
E110 Troppi stave nel datapack (max 4) Datapack / multi-stave
E122 N) senza match: più continuazioni che stave nel datapack precedente (usa N+) Datapack (N+)
E123 N2 senza rigo parent valido Voci
E124 N2 duplicata sullo stesso rigo Voci
E125 Direttiva di chiave non ammessa in riga N2 Voci
E126 Più di un comment-label sullo stesso chord / group / row Accordi (alternate)
E127 Max 2 righe alternative C+ per datapack Accordi (alternate)
E128 NC misto ad altro contenuto nella stessa misura Accordi
E300 Measure-repeat (% / RN) senza sorgente valida Flusso / MMR
E301 Impossibile interpretare la nota dell'armatura di chiave Header / chiave
W002 Tuplet non chiuso prima della fine misura (auto-riempito con pause 1/64) Note e durate
W003 Blocco grace non adiacente alla main (ignorato) Grace notes
W004 Blocco grace privo di main adiacente (ignorato) Grace notes
W006 Pitch fuori dal range MIDI [1..127] Note e durate
W007 Token di notazione ritmica {…} non valido (durata o tuplet) Note e durate
W008 Pausa multi-misura RN su span con contenuto: degrado a pausa normale Note e durate (MMR)
W009 Modificatore non ammesso su spacer s (ignorato) Note e durate (spacer)
W103 Suffisso accordo non riconosciuto Accordi
W301 Impossibile dedurre titolo o credits dalla prima riga di header Header
W400 Nota del ritmo accordi con durata non positiva (omessa) Accordi (ritmo)

Allocazione codici 0.6+ (fonte unica)

Le righe A)/D)/L) condividono W131 (eccesso token) per identità semantica, non per collisione.

Codice Significato Famiglia (doc)
W130 D) senza riga N)/N+/N2 parent valida Dinamiche
W131 Token in eccesso rispetto agli eventi N) A)/D)/L) (condiviso)
W132 D) token - non riconducibile a extension/barline Dinamiche
W133 Container testuale non chiuso a fine riga Dinamiche
W134 Play directive vuota (=) Play directive
W135 Ordine slot invertito (tempo prima di style) Play directive
W136 BPM fuori range (10–999) Play directive
W137 Figura NRK non valida in metric modulation Play directive
W138 Play directive in riga diversa da M) Play directive
W139 Token A) fuori dal vocabolario Articolazioni
W140 Più di una sezione FORM) PLAY/FORM
W141 Durata |BARS non valida (1–999) PLAY/FORM
W142 Repeat count xN fuori range (2–99) PLAY/FORM
W143 Keyword &xxx non riservata PLAY/FORM
W144 Legatura A) malformata (non chiusa a fine riga) Articolazioni
W145 FORM) non in fondo al documento PLAY/FORM
W146 [!] ridondante: nessuna sezione opzionale da chiudere Markers
W147 Blocco %%NAME non chiuso (manca %%end) Versioni
W148 %%end orfano (nessun blocco aperto) Versioni
W149 Blocco %%NAME annidato Versioni
W150 HV) malformato Versioni
W151 Sezione collassabile non a inizio rigo (§4.7) Markers
W152 Riga item: in collezione nrk-book: Collezioni
W153 Chiave override sconosciuta in item: Collezioni
W154 Riga item: non seguita da un blocco-brano Collezioni
W155 Direttiva header collezione dopo il primo blocco Collezioni
W156 Collezione priva di blocchi-brano Collezioni
W157 LYRICS) [NAME] riferisce una sezione inesistente (reference-broken) Lyrics (blocco LYRICS))
W158 Gruppo pickup <…> di LYRICS) in overflow sulla corsa di note precedente Lyrics (blocco LYRICS))

Nota storica: W144 era stato bozzato anche per "PLAY) nidificata", caso impedito strutturalmente dal parser (mai emesso); il codice resta quindi alle articolazioni. La sezione collassabile non-a-inizio-rigo è stata spostata da W147 (che collideva con Versioni) a W151 (2026-05-26).


neumaRk 0.5.0 — Prima versione pubblica

Stato

Public preview. Il linguaggio è utilizzabile e coerente, ma soggetto a evoluzioni a breve termine.

Significato della versione

Questa è la prima versione pubblica di neumaRk. Il numero 0.5 riflette una maturazione concettuale già avanzata, pur senza garantire stabilità definitiva dell’interfaccia semantica.

Funzionalità incluse

  • struttura a datapack
  • header con deduzione conservativa
  • note con durate implicite ed esplicite
  • accordi con semantica ritmica e durate implicite ed esplicite
  • accordi con lista compatta di durate X(a,b,r16,c,...) (vedi §4.4)
  • gestione di ripetizioni e flusso
  • supporto a formati Compact / Human / Verbose

Chiarimenti normativi

  • contesto musicale persistente
  • semantica contestuale dei simboli
  • priorità della nota unica nella battuta
  • riga Format deducibile

Non ancora stabilizzato

Elenco storico alla 0.5.0; molte di queste voci sono state introdotte nella 0.6 (vedi Novità della 0.6).

  • articolazioni, dinamiche, lyrics
  • polyaccordi (sintassi [top|bottom], vedi neumaRk_chords.md §6)
  • multi-stave per datapack (fino a 4 righi, vedi neumaRk_datapack.md §4)
  • ripetizione di misura (sintassi % / %! / %2 / %!2 / %4 / %!4, vedi neumaRk_flow_and_repeats.md §7)
  • possibili estensioni sintattiche
  • raffinamento delle regole di deduzione
  • validazione formale completa

Compatibilità

Non esistono versioni pubbliche precedenti.