Skip to content

Document Indonesian notasi angka gap analysis and implementation plan - #31

Merged
denmase merged 2 commits into
mainfrom
claude/noteeditor-translate-english-fworkt
Sep 20, 2026
Merged

denmase merged 2 commits into
mainfrom
claude/noteeditor-translate-english-fworkt

Conversation

@denmase

@denmase denmase commented Sep 20, 2026

Copy link
Copy Markdown
Owner

Summary

Researched Indonesian numbered notation (notasi angka) conventions — pitch/octave/duration
marks, accidentals, articulation, dynamics, breath marks, repeat/navigation symbols, multi-verse
lyrics, SATB choral scores — and checked each against what JianpuEditor actually implements
(not from memory: grepped every OrnamentType reference, read JianpuPitchCodec's accidental
rendering, checked the model for dynamics/bar-line-type/multi-voice fields).

Key finding baked into the plan's design: almost none of the gaps are actually
Indonesian-vs-Chinese style differences — they're plain missing notation elements both traditions
use identically, safe to add as new empty-by-default fields. Exactly one gap (the accidental
symbol: Indonesian suffixes a slash, this renderer prefixes #/b) is a genuine regional style
difference, so only that one needs gating behind a notation-style setting, generalizing the
existing UnderlinesAbove toggle. Every phase in the plan carries an explicit acceptance check:
an existing Chinese/Western-style score must render unchanged.

Also surfaced that four OrnamentType values (Staccato, Accent, Tenuto, Glissando) and
four more (RepeatStart/RepeatEnd/Segno/Coda) are already declared in the enum with zero
implementation anywhere — dead code placeholders this plan's phases wire up rather than reinvent.

What changed

No code changes — planning document only, added to ROADMAP.md as a new section alongside the
existing feature-tracking entries (CLAP support, plugin system, etc.) rather than as a separate
file, matching this repo's existing convention for tracking planned work.

Test plan

Docs-only change; no build/behavior impact. CI should pass trivially.


🤖 Generated with Claude Code

https://claude.ai/code/session_01Pguj4XSScE141p1ScWoqEr


Generated by Claude Code

Researched Indonesian numbered notation (notasi angka) conventions --
pitch/octave/duration marks, accidentals, articulation, dynamics, breath
marks, repeat/navigation symbols, multi-verse lyrics, SATB choral
scores -- and checked each against what JianpuEditor actually
implements (not just against memory: grepped every OrnamentType
reference, read JianpuPitchCodec's accidental rendering, checked the
model for dynamics/bar-line-type/multi-voice fields).

Key finding baked into the plan's design: almost none of the gaps are
actually Indonesian-vs-Chinese style differences -- they're plain
missing notation elements both traditions use identically, safe to add
as new empty-by-default fields. Exactly one gap (the accidental symbol:
Indonesian suffixes a slash, this renderer prefixes #/b) is a genuine
regional style difference, so only that one needs gating behind a
notation-style setting, generalizing the existing UnderlinesAbove
toggle. Every implementation phase carries an explicit acceptance
check: an existing Chinese/Western-style score must render unchanged.

Also surfaced that four OrnamentType values (Staccato, Accent, Tenuto,
Glissando) and four more (RepeatStart/RepeatEnd/Segno/Coda) are already
declared in the enum with zero implementation anywhere -- dead code
placeholders this plan's phase 3 and 6 wire up rather than reinvent.

No code changes -- planning document only, added to ROADMAP.md
alongside the existing feature-tracking entries (CLAP support, plugin
system, etc.) rather than as a separate file.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pguj4XSScE141p1ScWoqEr
A second research pass (another agent) on Indonesian notasi angka was
cross-checked against the code rather than taken at face value. Its
Kepatihan section (gamelan cipher notation, a different notation system
entirely) is intentionally excluded per instruction. Two genuinely new,
verified findings from the rest of it:

- The tie tool has a real bug, not just a missing feature:
  TieEditorViewModel.TryCompleteTie only validates that the end note
  comes after the start note, never that the pitches match, and
  ScoreMidiSchedule.BuildTieEndSet unconditionally suppresses the tied
  end note's own NoteOn. A "tie" drawn between two different pitches
  today silently drops the second note's actual pitch during playback
  and MIDI export. This affects existing Chinese/Western scores too,
  independent of any Indonesian-specific work, so it's called out as
  its own high-priority phase (3) with a same-pitch validation fix,
  followed by real slur support once that guard exists (a slur has no
  pitch constraint and only affects rendering, not playback).
- Volta brackets (1st/2nd endings) folded into the repeat/navigation
  phase alongside bar-line types and D.C./D.S./Coda/Segno.

Also refined the Natural/pugar accidental note: modern typesetting uses
the plain natural sign (♮) rather than a slash variant, so unlike
sharp/flat it doesn't need a NotationStyle branch at all.

Phases renumbered accordingly (10 total, was 9). No code changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pguj4XSScE141p1ScWoqEr
@denmase
denmase merged commit 4727fb0 into main Sep 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants