Wishlist
Wishlist
Living parking lot for features we haven’t picked up yet. Entries graduate out of this doc when they get scheduled into a phase plan; new entries land here whenever a triage decision says “Future” or “Drop”.
When a feature graduates, leave a one-line breadcrumb pointing at the phase plan that absorbed it. When a feature ships, remove the entry entirely.
Future Work — Likely
These are features we’d take if the time + design budget materialize.
Score rendering fixes
Phase 13 shipped a Verovio-based score viewer panel, but the rendered
output had enough layout and SMuFL font-metric issues that we
feature-flagged it off rather than ship it broken. The flag is
GP_ENABLE_SCORE_VIEWER in CMakeLists.txt (default OFF); release
builds do not include the panel.
The renderer integration itself works end-to-end (MusicXML in,
juce::Drawable SVG out) — the failures are downstream of Verovio,
in how its SVG output interacts with JUCE’s drawable parser and how
SMuFL glyph metrics align with the surrounding text. Reviving the
viewer means:
- Re-examining
MusicXmlEngraver’sEngraveResultSVG →Drawablehand-off and the embedded font references Verovio emits. - Resolving the SMuFL metric issues that originally drove the Phase 11 / 12 hand-rolled renderer’s failure.
- Re-enabling
GP_ENABLE_SCORE_VIEWERin releases and removing theOFF-by-default note frombuilding.md/releases.md.
Picking this up also unblocks the play-from-cursor angle of the in-app MIDI playback entry below.
Apple Developer ID signing + notarisation
The macOS DMG ships unsigned today, which trips Gatekeeper warnings
(“app is broken”) on user machines that never ran the binary
themselves. Production-grade distribution needs an Apple Developer
Program seat ($99/year), a Developer ID Application certificate,
codesign integration in scripts/build-release.sh, and a
notarytool step using an App Store Connect API key or app-specific
password. Windows Authenticode is the equivalent on that side — out
of scope until there’s a Windows-user with the same complaint.
In-app MIDI playback (PB1)
Route the export’s MidiMessageSequence to juce::MidiOutput so users
can hear the result without bouncing through a DAW. ~100 LOC for system
MIDI; ideally pairs with a hostable VST so playback uses the same
keyswitched instrument.
This stands on its own — it doesn’t need the score viewer — but a play-from-cursor transport becomes the natural next step once the score-rendering fixes above land.
Multi-document / multi-window (AP2) — investigated, deferred
Today’s app is single-document — one Project per AppController,
re-binding when the user opens a new file. AP2 would let multiple
projects coexist in one process via juce::TabbedComponent.
Phase 10 F10.4 was a time-boxed spike. The investigation found nothing structurally hostile to multi-doc, but the work is a focused ~20-hour initiative (2-3 days), not the one-day spike the plan budgeted — notably because modal panel ownership (per-tab vs. process-global) is a UX decision rather than a mechanical refactor.
Full findings + entry-point sketch in
multi-document-investigation.md.
When the work is picked up: start with an AppShell class owning
OwnedArray<AppController>, per-tab panel construction, then route
MainWindow commands through appShell_->activeController().
Profile / project Git sync
Power users could link their profile directory to a Git repo and pull / push from the editor. Frames cloud-sync as a thin Git wrapper instead of a hosted service. Lower priority than the F9.7 zip archive, which already covers the “move my library to a new machine” case.
Future Work — Maybe
These are nice-to-haves that may never reach the bar.
.mscz (MuseScore) import (IM2)
MuseScore’s native compressed format. Different tool family; most users
who’d want this also have a Guitar Pro -> MusicXML path that already
works. Lower priority than the native .gp / .gpx import that already
shipped in Phase 17.
Sanguine Bass profile
The six bundled VST profiles in resources/profiles/vst-presets/
cover the most common heavy-metal targets, but Sanguine Bass is still
missing. Its keyswitch chart is only visible inside the running plugin,
so the entry sits here until someone with the VST contributes a
profile JSON — it’s a one-file PR once the chart is in hand.
Technique enum gaps — remaining
Phase 14 shipped NaturalHarmonic, PinchHarmonic, TremoloPick, and the
muting / pluck / slap / pop family. Phase 17.3 added PickScrape with
its native-GP Slide bit 0x40 / 0x80 detection. Phase 22 added
AutoSlide for GP’s “host-decides-direction” legato slides. The
remaining gaps are niche:
Rake
Deliberate muted strum into a target note. Shreddage uses velocity
routing on the Sustain KS (vel 116-126); a separate Technique::Rake
would let us emit that velocity band when MusicXML flags a rake.
Power-chord variants
Shreddage exposes Power Chord Sustain / Mute / Staccato as separate
keyswitches — useful for distinguishing rhythm-section power chords
from individual notes. Unlikely to need its own Technique value;
better routed via a chord-detection pass that emits the right keyswitch
based on simultaneous interval content.
FX / Buzz Trill
Catch-all keyswitches for noise effects. Probably never worth a dedicated enum value; users wanting these can open the editor and wire a free MIDI note manually (no parser detection needed).
Dropped
Decisions made during Phase 10 triage. These won’t ship; the entry persists so the rationale survives future “why don’t we just…?” conversations.
In-app sampler / synth (PB2)
Bundling a SoundFont (~tens of MB) or writing a JUCE Synthesiser wrapper to play exports without external MIDI routing. Superfluous and beyond the scope of the project — the user’s DAW or system MIDI synth is the listening surface.
Auto-profile from MIDI program (PR7)
Suggesting a profile per part based on the GM patch byte. F9.3 dropped the always-on bundled defaults, so there’s nothing for an auto-suggester to match against. Users mint or import profiles deliberately; suggesting one would just add UI noise.
Profile cloud sync (SH1, hosted variant)
Upload / download profiles to a hosted registry. Out of scope for v1 per
PROJECT_CONTEXT.md (“local-only is fine for v1”). The F9.7 zip
archive + the Git-sync future-work entry cover everything cloud sync
would have, without the hosting cost.