diff --git a/.gitignore b/.gitignore index 7a60b85..b4bc537 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ __pycache__/ *.pyc +node_modules/ diff --git a/.specify/memory/constitution.md b/.specify/memory/constitution.md index 3ef3d1d..e1ab1d8 100644 --- a/.specify/memory/constitution.md +++ b/.specify/memory/constitution.md @@ -3,44 +3,53 @@ ## Inheritance feedBack's core plugin contract governs everything in this repo (manifest, -plugin context: `get_dlc_dir`, `get_sloppak_cache_dir`, asset serving, the -`slopsmithViz_*` visualization factory contract, splitscreen mounting). This -constitution lists Tab View's own non-negotiables. +the `slopsmithViz_*` visualization factory contract, splitscreen mounting). +This constitution lists Tab View's own non-negotiables. ## Core Principles ### I. alphaTab is the renderer; we're the bridge Tab View MUST NOT render notation glyphs itself. alphaTab is the source of truth for all musical glyphs, beam grouping, stems, and bar layout. Our job -is to translate arrangement XML → Guitar Pro 5 (`rs2gp.py`) and to drive -alphaTab's cursor (`tickPosition`) from `audio.currentTime` using beat -timing data the highway already exposes. +is to translate the renderer bundle (notes/chords/tuning/stringCount/beats) +into an alphaTab `Score` (`src/chart-quantize.js` + `src/score-builder.js`) +and to drive our own boundsLookup-driven marker from `window.highway.getTime()` +(single-player) or `bundle.currentTime` (splitscreen), using beat timing data +the highway exposes. ### II. Multi-instance by construction (slopsmith#36) Per-instance state lives in factory closures returned from `createFactory()`. Module-level scope is reserved for genuine singletons: - The CDN script load promise (one `