The 3D highway is one of the renderers consuming the note-state
provider contract. Point AI maintainers landing in this CLAUDE.md
at the repo-root docs that cover the contract itself, so they can
ground a request like "make the sustain glow brighter" in the full
data flow rather than just the rendering code.
Signed-off-by: Kris Anderson <topkoa@gmail.com>
(cherry picked from commit 1f4c6a02bf218332c5a1981f01f40e2206cb5ff1)
Three new docs in docs/ that consolidate the path from audio detection
through to the highway, plus small cross-links in CLAUDE.md for
discoverability.
- realtime-scoring-pipeline.md: end-to-end trace with diagrams and a
concrete chord-strum example walked through every layer (engine,
IPC, note_detect, highway core, renderer).
- note-state-provider.md: full reference for setNoteStateProvider /
bundle.getNoteState (slopsmith#254). Return values, alpha ownership,
the time_string_fret keying convention, 'hit' vs 'active' sustain
semantics, common pitfalls.
- visualization-feedback-guide.md: practical walkthrough for a plugin
author adding hit feedback to a custom viz. Minimal 2D Canvas example
plus a troubleshooting decision tree.
The note-state provider contract was previously documented in three
places with different angles and assumed cross-reading. These docs
consolidate it into one coherent narrative + focused API reference +
how-to. The pipeline doc also documents the engine-verifier path
(audio:setChart / audio:getNoteVerdicts) which was previously only
described in NoteVerifier source comments.
Companion PR against byrongamatos/slopsmith-desktop covers the
engine-side internals.
Signed-off-by: Kris Anderson <topkoa@gmail.com>
(cherry picked from commit c8ec371813bf36c686f1884f3b2340f4a94f11a8)
- diagnostics_redact: keep '.psarc' in the song-filename scrub regex.
The purge swapped it for '.archive' (not a real extension), which
would leak real .psarc filenames still on users' disks into
diagnostic bundles. This is a redaction allow-list, not brand text.
- sloppak: the legacy lyrics-source alias was a no-op
({"notechart": "notechart"}), so old manifests with
lyrics_source=="sng" fell back to "xml" instead of migrating.
Map {"sng": "notechart"} so the rename stays back-compatible.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reword comments/docstrings/strings and rename identifiers that referenced
the external game and its file formats:
- format-id "psarc" -> "archive"; local vars psarc_path -> song_path,
psarc_base -> tone_base
- lyrics provenance value "sng" -> "notechart" (legacy "sng" still accepted)
- highway_3d fret-ghost scope value "rocksmith" -> "chords" (invalid/legacy
values fall back to the default, preserving behaviour)
- neutralise references in prose, test names/data, .gitattributes and docs
No functional change beyond the renamed identifiers; all Python compiles.
Remove the vestigial encrypted-archive ingestion path that the loader can
no longer service:
- scanner no longer lists .psarc files; library is sloppaks + loose folders
- upload endpoint accepts .sloppak only (drop .psarc + magic-byte branch)
- delete endpoint handles sloppak/loose only
- drop the psarc_platform (pc/mac) setting, its validation and tests
- default CONFIG_DIR no longer references an external game data folder
- drop the now-unused pycryptodome dependency (no module imports it)
- correct stale comments that described scanning as archive decryption
Updates test_settings_api / test_settings_export to match (scan fixtures
now build .sloppak stubs).
Drop an orphaned 4 MB binary fixture that no test references, and fix
two docstrings that inaccurately described the scanner as performing
archive decryption. The loader is sloppak/loose-folder only and does
not decode proprietary archives (see lib/scan_worker.py).