feedBack/tests
Byron Gamatos 0f1006972b
feat(highway): render teaching marks fg/ch/sd on 2D + 3D (§6.2.2) (#538)
Render the three per-note teaching marks on both highways, mirroring the
bend-curve render (#532). Display only — no scoring / NoteVerifier coupling.

- 2D static/highway.js: fg renders by default as a small finger numeral hugging
  the gem (T = thumb, 1..4); sd (degree label) and ch (strum bracket connecting
  notes that share a ch key, arrow direction from pkd) are opt-in behind a new
  `showTeachingMarks` toggle (exposed via toggle/get/set + the bundle's
  `teachingMarksVisible` flag). Pure helpers teachingFingerLabel /
  teachingDegreeLabel / strumGroupBuckets drive the glyphs. ch bracket is
  note-stream-only (chord notes already read as one gesture).
- 3D plugins/highway_3d/screen.js: fg (default) + sd (opt-in, mirrors the 2D
  toggle via bundle.teachingMarksVisible) render next to the per-note fret label
  via a new pooled sprite (pTeachMarkLbl); _scrChordNote resets fg/sd so chord
  notes don't inherit stale marks. ch strum brackets are deferred in 3D (no
  cross-note batch pass in the per-note render); 2D covers ch.

Tests: tests/js/highway_teaching_marks.test.js extracts the pure helpers from
both files (extract-and-eval) and asserts label mapping + strum-group bucketing.

Part of got-feedback/feedback#334

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 07:58:04 +02:00
..
browser Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
fixtures Remove unused binary test fixture; correct stale scan comments 2026-06-16 18:49:40 +01:00
js feat(highway): render teaching marks fg/ch/sd on 2D + 3D (§6.2.2) (#538) 2026-06-21 07:58:04 +02:00
plugins Clean release snapshot 2026-06-16 18:47:13 +02:00
__init__.py Clean release snapshot 2026-06-16 18:47:13 +02:00
conftest.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_audio_bundled.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_audio_effect_mappings.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_audio_local_path.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_audio.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_builtin_diagnostic_seed.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_correlation_id.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_demo_mode.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_diagnostics_bundle.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_diagnostics_hardware.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_diagnostics_redact.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_drums_lib.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_gp2midi.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_gp2notation.py feat(core): adopt feedpak_version — read on load + stamp on manifest writes (spec §4) (#530) 2026-06-20 21:59:04 +02:00
test_gp2rs_drums.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_gp2rs_gpx.py feat(core): teaching marks fg/ch/sd — wire + GP import + sd derivation (§6.2.2) (#536) 2026-06-21 07:57:50 +02:00
test_gp2rs.py feat(core): teaching marks fg/ch/sd — wire + GP import + sd derivation (§6.2.2) (#536) 2026-06-21 07:57:50 +02:00
test_gp_audio_sync.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_highway_3d_routes.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_highway_ws_notation.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_library_filters.py Improve wording in terminology cleanup 2026-06-16 19:43:45 +01:00
test_library_providers.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_lift_keys_notation.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_logging_setup.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_loose_traversal.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_loosefolder.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_lyrics_transcribe.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_midi_import_drums.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_midi_import.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_minigames_routes.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_notation_lib.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_notation_lift.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_notation_to_notes.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_parse_arrangement.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_playlists_api.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_plugin_manifest_contract.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_plugin_runtime_idempotence.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_plugins.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_profile_api.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_profile_domains.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_progression_api.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_progression.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_safepath.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_settings_api.py Make the library loader sloppak/loose-only 2026-06-16 19:09:53 +01:00
test_settings_export.py Make the library loader sloppak/loose-only 2026-06-16 19:09:53 +01:00
test_settings_instrument.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_sloppak_cent_offset.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_sloppak_cover_art.py Fix slow library cover loading: serve sloppak art without unpacking + revalidated caching (#534) 2026-06-20 00:22:43 +02:00
test_sloppak_drumtab_load.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_sloppak_feedpak_version.py feat(core): adopt feedpak_version — read on load + stamp on manifest writes (spec §4) (#530) 2026-06-20 21:59:04 +02:00
test_sloppak_file_traversal.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_sloppak_keys_load.py feat(core): consume keys.json — song-level key/scale track (loader + WS) (#528) 2026-06-20 21:23:48 +02:00
test_sloppak_notation_load.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_sloppak_song_timeline_load.py feat(core): consume song_timeline tempos + time_signatures + per-chart tempos (feedpak 1.2.0) (#529) 2026-06-20 21:35:07 +02:00
test_song_score.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_song_stats_api.py Purge external-format terminology from code, tests and docs 2026-06-16 19:36:53 +01:00
test_song.py feat(core): teaching marks fg/ch/sd — wire + GP import + sd derivation (§6.2.2) (#536) 2026-06-21 07:57:50 +02:00
test_songmeta.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_startup_status.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_tailwind_rebuild.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_tones.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_tunings.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_version_endpoint.py Repoint dead slopsmith URLs -> got-feedback 2026-06-17 11:02:04 +02:00
test_vocal_pitch.py Clean release snapshot 2026-06-16 18:47:13 +02:00
test_xp.py Clean release snapshot 2026-06-16 18:47:13 +02:00