Every Songsterr tab, Guitar Pro file, and stem folder for the ten songs, matched song by song, with the blockers named before any correction pass starts.
All ten songs have a Songsterr tab, a .gp file, and a stem folder. What separates them is whether the stems can actually prove the guitar part. Two songs were separated to four stems only, so the guitar is buried inside other and no per-attack guitar evidence exists for them.
| Measure | Value | What it means |
|---|---|---|
| Attack recall | 88.9%, 16 of 18 | The highest recall on the record, from the emptiest file |
| Attack precision | 1.1%, 7 of 663 | The number that exposes it. The audio holds 663 onsets and the tab accounts for seven. |
| Map | 1 anchor, 8 tab attacks | Health gate FAILS: fewer than two anchors |
| Pitch separation | -22.2, agreement 55.6% against a 77.8% control | Inverted, on n=18 |
| Length | 274.7 s at 173 bpm in 3/4 against a 278.9 s mix | The shell has the right bar count and tempo |
| Stage | Result |
|---|---|
| Length | 170.0 s at 144 bpm against a 173.0 s mix, 1.7% apart |
| Map | 66.3% alignment against a 14.5% control, gain +51.7, 20 anchors |
| Map health | PASS, and the best numbers measured: clamped 1.7%, max run 12, unique 0.984, span 98% |
| Attack recall | 68.9%, 717 of 1041, decoy 25.1% |
| Attack precision | 89.0%, 381 of 428 |
| Timing | median 70.0 ms, p90 176.3 ms, n=919 |
| Pitch agreement | 62.8% against a 52.8% control, separation +10.0 |
| Duration | -0.015 against +0.014, no power |
| Classification | 0 supported, 5 unresolved, 88 unsupported |
Jackie's map beats The Mutiny's on every health measure: 1.7% clamped against 6.0%, a max collapse run of 12 against 66, and 0.984 unique audio times per attack against 0.940. Its single guitar staff is genuine, and the notation carries zero playability faults.
/goal requirementThe /goal condition asks for two things in order: audio accuracy against the stems reported as measured numbers, then physical playability. Below is every requirement in that condition, against what The Mutiny has been measured to hold.
/goal requirement | Status | Evidence |
|---|---|---|
| Attack precision and recall against detected stem events | Done | 88.0% and 74.1%, validated at 5.70x against a wrong stem |
| Pitch agreement | Done | 53.4% against a 51.0% control, no power, reported with its control |
| Timing error | Done | median 48.2 ms, p90 204.0 ms, n=2534 |
| Duration and tie agreement | Not implemented | audio_accuracy_audit.py documents it in its header and never codes it. Two mentions in the file, both in docstrings. |
| Channel ownership per note | Done | Refused at -0.0115 against a 0.05 threshold, refusal reported |
| DTW beat-to-seconds map, validated | Done | 5.75x, bar-length CV 2.22% over 126 of 135 bars, PASSES the health gate |
| Full playability tier | Done | Lead REVIEW, Rhythm one flag, refuted as a held-pedal false positive |
| Candidate artifact hash | Done | source 21b37b73b6f35faa, rejected candidate c2c7710ee5488821 |
| Preservation census | Done | 3260 in, 3260 out, zero lost, zero invented |
| Checkpoint ledger entry | Missing | No ledger baseline exists for this song, so --assert-best has nothing to compare |
| Per-note discrepancy classification | Missing | The 795 unmatched attacks have a count and no itemisation |
written_attacks() already returns duration_beats per note, so the data is there and the comparison against decay-to-half-energy is missing. Ship it with a shifted-time control like every other measure, and report it refused if it loses.np.interp. The tool's own BM.apply_map(tab_t, rec_t, times) is the call that produces 74.1%, so extraction goes through that call and yields each miss with its staff and bar./goal uses. On present evidence most will fall under unresolved, since an onset detector misses attacks inside a held chord, and saying so per note is the requirement.--init-checkpoint so any future candidate has a baseline to beat.Run 2026-08-17 through the audit's own BM.build, BM.apply_map, nearest and DECOY_S, so the numbers match what that tool reports rather than a reimplementation. New tool: miss_and_duration_audit.py.
| Measure | n | Correlation | Shifted-time control | Separation | Verdict |
|---|---|---|---|---|---|
| Written duration against decay-to-half-energy | 2219 | -0.060 | +0.021 | -0.081 | No discriminating power |
The /goal line item is satisfied: the measure exists, ran, and is reported with its control. It joins the refused list rather than the usable one.
Classification, in the wording /goal uses | Bars | Meaning |
|---|---|---|
| Supported correction | 0 | Miss rate far above the song's own AND the decoy stays low there |
| Unresolved ambiguity | 9 | Miss rate high, and the decoy misses there too, so the detector explains it |
| Unsupported change | 122 | No evidence of a discrepancy at all |
Song-wide the attack measure discriminates hard: 74.1% real against 11.1% for the decoy at +7.3 s, a 6.7x separation. Per bar it never isolates a discrepancy. The nine unresolved bars are 3, 20, 49, 117, 124, 125, 126, 129 and 130, and every one has a decoy miss rate of 75% to 100%, so the onset detector rather than the notation accounts for them.
/goal answered: every measure run against its own control, every discrepancy classified, and the classification returns no licensed correction.
Initialised for The Mutiny. CHECKPOINT.json and RECEIPTS.jsonl now sit beside the song, status best_validated_so_far, so any future candidate has a baseline to beat rather than a filename to argue from.
AAA.nearest returns a DISTANCE, and 0.0 is falsy in Python, so the expression (nearest(t) or 9e9) <= WINDOW turned every EXACT match into a miss. The tell appeared on The Alligator, where the tool read 0.3% recall against audio_accuracy_audit.py's 40.9% on identical inputs. On The Mutiny the same bug read 67.7% against the reference tool's 74.1%, close enough that the first run was let through.
| The Mutiny | Published from the buggy run | Corrected |
|---|---|---|
| Attack recall | 67.7% | 74.1%, matching the reference tool exactly |
| Misses | 991 | 795 |
| Supported correction | 0 | 0, unchanged |
| Unresolved ambiguity | 12 bars | 9 bars |
| Unsupported change | 119 bars | 122 bars |
The conclusion for The Mutiny survives: zero supported corrections. The lesson is the process one. A derived metric has to be cross-checked against the reference tool's own number BEFORE any classification is built on it, and "close enough" is not a check.
| Stage | Result |
|---|---|
| Two guitars or one staff covering | MIXED, co-activity 97.7%, role flip 34.3. The second staff's chord share moves 34.3 points when the first falls silent, which is one staff covering for another. The Mutiny was clean TWO_PARTS. |
| Map | 42.0% against a 4.1% control, gain +37.9, 8 anchors |
| Map health | PASS, though marginally: clamped 10.6% against a 12% limit, max run 73 against 120, unique 0.895 against 0.85, span 90% against 85% |
| Attack recall | 40.9%, 893 of 2186, decoy 4.8% |
| Attack precision | 100.0%, 154 of 154 onsets accounted for, which is the saturation shape |
| Pitch agreement | 63.5% against a 39.6% control, separation +24.0, the first pitch measure this session that was not labelled no-power |
| Timing | median 54.9 ms, p90 236.4 ms |
| Duration | +0.249 against a +0.273 control, separation -0.024, no power |
| Playability | PASS on both staves, zero faults of any kind |
86 bars at 120 bpm is 172.0 s. The stem runs 216.1 s. The GPIF holds zero repeat markers and zero alternate endings, and the map runs close to one-to-one, with tab 154.00 s falling at recording 153.77 s, so the tempo is right. About 44 seconds of the song, roughly 22 bars, is not transcribed at all. No audio metric was needed to find this and none of them would have.
| Classification | Bars | Which |
|---|---|---|
| Supported correction | 2 | bar 21 (11 attacks, miss 100%, decoy 81.8%) and bar 54 (38 attacks, miss 100%, decoy 81.6%) |
| Unresolved ambiguity | 4 | bars 18, 42, 44, 57 |
| Unsupported change | 80 | no evidence of a discrepancy |
| Stem tried | Onsets | Alignment | Gain | Anchors | Clamped | Max run | Span | Health |
|---|---|---|---|---|---|---|---|---|
Rhythm Guitars | 83 | 16.6% | +14.1 | 3 | 38.1% | 302 | 62% | FAIL x4 |
Solo Guitars | 85 | 24.0% | +21.0 | 4 | 26.8% | 175 | 73% | FAIL x4 |
Other Guitar | 132 | 75.4% | +72.1 | 2 | 73.9% | 704 | 26% | FAIL x4 |
Other Guitar scores 75.4% alignment and +72.1 gain, beating The Mutiny's best, on two anchors. Those two anchors clamp 73.9% of the tab and collapse 704 consecutive attacks onto one audio time. beat_map.py ACCEPTED it, since it judges gain against a random control and nothing else. Without the health gate this would have become So Far So's headline number.
All three stems fail on all four criteria, so no per-note audio metric is interpretable for So Far So. The cause is onset yield: 83 to 132 onsets across 259 seconds is 0.32 to 0.51 per second, against The Mutiny's 2.86. Song-level alignment and attack recall stay reportable; nothing per-note does.
| Stage | Result |
|---|---|
| Tab length against the song | 258.5 s written against a 259.7 s stem, 0.4% apart. Complete, unlike The Alligator. |
| Two guitars or one covering | MIXED, co-activity 66.7% over 64 of 96 bars, role flip 39.6, the worst of the three songs so far. Genuine two-guitar runs at bars 26-30, 45-50, 55-70, 96-100 and 103-134. |
| Playability | FAIL, one IMPOSSIBLE_SPAN per staff |
Both playability faults involve ties, the same shape that turned out to be a held pedal on The Mutiny:
| IMPOSSIBLE_SPAN bar 66.0 Lead Guitar. Written s2f9 s3f7 s4f3~, span 6, tie on s4, sounding [57, 60, 60]. Alternative offered at span 5. |
| IMPOSSIBLE_SPAN bar 106.0 Rhythm Guitar. Written s0f4 s1f2 s2f9~ s3f4 s4f3 s5f2, span 7, tie on s2, sounding [40, 45, 57, 57, 60, 64]. The offered alternative is ALSO span 7, so the tool admits no narrower voicing exists. |
The Lead staff also carries the same TUNING_EVIDENCE review as The Mutiny: string 0 detuned by 2 with its open pitch never used in that staff.
| Stage | Result |
|---|---|
| Tab length against the song | 282.1 s written against a 286.9 s stem, 1.7% apart |
| Two guitars or one covering | TWO_PARTS, co-activity 94.0% over 125 of 133 bars, role flip 8.3, genuine two-guitar runs across bars 9 to 133 |
| Map health, all three stems | All three PASS, the first song where every guitar stem yields a usable map |
| Attack recall | 66.3%, 949 of 1432, decoy 10.2%, a 6.5x separation |
| Pitch agreement | 55.8% against a 52.2% control, +3.6, no power |
| Duration | +0.012 against a -0.039 control, +0.051, no power |
| Playability | PASS on both staves, zero faults of any kind |
| Classification | 1 supported correction (bar 81), 7 unresolved, 111 unsupported |
| Stem | Onsets | Alignment | Gain | Anchors | Clamped | Max run | Health |
|---|---|---|---|---|---|---|---|
Rhythm Guitars | 456 | 64.4% | +52.8 | 18 | 5.3% | 57 | PASS |
Other Guitar | 367 | 50.4% | +43.2 | 14 | 9.1% | 98 | PASS |
Solo Guitars | 321 | 45.8% | +40.2 | 12 | 7.6% | 82 | PASS |
| Song | Length match | Staff roles | Map health | Attack recall | Playability | Supported bars |
|---|---|---|---|---|---|---|
| The Mutiny | good | TWO_PARTS, flip 7.0 | PASS | 74.1% | clean once the flag was refuted | 0 |
| My Mirror Hates Me | 1.7% apart | TWO_PARTS, flip 8.3 | PASS on all 3 stems | 66.3% | PASS, zero faults | 1, too thin to act on |
| The Alligator | 44 s untranscribed | MIXED, flip 34.3 | PASS, marginal | 40.9% | PASS, zero faults | 2, marginal |
| So Far So | 0.4% apart | MIXED, flip 39.6 | FAIL, all 3 stems | n/a | FAIL x2, both tie-related | not measurable |
I then suspected the tooling mishandled the meter, since ASE.events derives each bar's length from its notes and defaults to 4.0 for an empty bar rather than reading the time signature. Measured, that hypothesis is refuted: drift is -0.4 s across 248 s on Endless Summer and 0.0 s on The Mutiny, because filled bars derive their span correctly.
| Stage | Result |
|---|---|
| Meter | 3/4 dominant, 179 of 192 bars, 581 quarter-beats |
| Tab length | 249.0 s at 140 bpm against a 246.4 s song and mix, 1% apart |
| Two guitars or one covering | TWO_PARTS, co-activity 56.8%, role flip 9.2 |
| Map health | Both stems PASS. lead 18 anchors, 4.2% clamped, max run 29. rhythm 13 anchors, 5.1% clamped. |
| Playability, source | Lead PASS. Rhythm FAIL, IMPOSSIBLE_SPAN x20 |
| Shape | Span | Alternative | New span | Pitches | Ties | Instances |
|---|---|---|---|---|---|---|
| s0f6 s1f3 s2f6 s3f8 | 5 | s0f6 s1f3 s2f6 s4f4 | 3 | [42,46,54,61] both ways | none | 12 |
| s2f10 s3f12 s4f15 | 5 | s1f15 s2f17 s4f15 | 2 | [58,65,72] both ways | none | 8 |
Every one of the 20 records carries ties: [], so the tie-chain trap that regressed The Mutiny candidate does not apply. Both alternatives were verified pitch-identical before any edit.
Editing the notes in place changed 3 notes and the position gate reported 274 notes moved, 10% of the staff. Faults went from 20 to IMPOSSIBLE_SPAN x177 plus SAME_STRING x178 plus TIE_COLLISION x178.
GPIF keeps every <Note> in one shared pool and each <Beat> references notes by id, and the same id is reused by many beats. So an in-place edit does not repair one beat, it rewrites every beat referencing that note. That is also why The Mutiny's single-note edit moved three playback positions and turned 1 fault into 5.
| Attempt | Notes edited | Notes moved | Faults before | Faults after |
|---|---|---|---|---|
| The Mutiny, in place | 1 | 3 positions | 1 | 5 |
| Endless Summer, in place | 3 | 274 | 20 | 533 |
| Endless Summer, cloned | 0 edited, 9 cloned | 0 | 20 | 0 |
The fix is to deepcopy the notes a flagged beat needs changed into fresh ids, apply the refret to the clones, and repoint only that beat. Beat shapes also have to be snapshotted BEFORE editing, since an earlier edit changes what a later beat looks like: the in-place run found 1 beat per shape where the cloned run found 3.
| Gate | Result |
|---|---|
| Tier 1, pitch preservation | PASS, 3917 in and 3917 out, zero lost, zero invented, 27 distinct pitches both ways |
| Tier 1b, position | PASS, zero notes moved outside the repaired beats |
| Playability | PASS on both staves, IMPOSSIBLE_SPAN 20 to 0 |
| Checkpoint comparison | KEEP THE CHECKPOINT. Hard total falls 20 to 0, and hand skip rises 0.0% to 1.8%. The gate holds the candidate as a draft and asks for that trade to be licensed with evidence rather than assumed. |
| Hashes | source a54bbb8f582aad48, candidate 1bf5b965e04ff740 |
--license-skip-regression with the evidence, which the gate records in the receipt.
| Stage | Result |
|---|---|
| Meter and length | 122 bars all 4/4, 488 quarter-beats, 344.5 s at 85 bpm against a 348.1 s stem |
| Two guitars or one covering | TWO_PARTS, co-activity 69.2%, role flip 2.3, the cleanest of all six songs |
| Playability, source | Lead REVIEW, hand skip 59% in the uncorrected band. Rhythm FAIL, IMPOSSIBLE_SPAN x15 |
| Stem | Onsets | Alignment | Gain | Anchors | Clamped | Max run | Health |
|---|---|---|---|---|---|---|---|
Rhythm Guitars | 60 | 52.7% | +51.5 | 3 | 58.3% | 568 | FAIL x4 |
Solo Guitars | 437 | 34.3% | +27.1 | 18 | 22.8% | 222 | FAIL x4 |
Other Guitar | 427 | 38.1% | +30.3 | 20 | 5.7% | 55 | PASS |
The Rhythm stem scores the highest gain of the three on 3 anchors and 60 onsets, clamping 58.3% of the tab and collapsing 568 consecutive attacks onto one audio time. The stem that actually carries the tab is Other Guitar, which scores lower and is the only one that is interpretable.
| Shape | Span | Alternative | New span | Ties | Instances | Action |
|---|---|---|---|---|---|---|
| s0f2 s1f5 s2f7 s3f7 | 5 | s0f2 s2f0 s3f2 s4f3 | 1 | none | 12 | repaired |
| s0f1 s1f5 s2f7 s3f7 | 6 | s0f1 s2f0 s3f2 s4f3 | 2 | none | 2 | repaired |
| s1f8~ s2f8~ s3f7~ s4f3 s5f1 | 7 | s0f13 s1f13 s2f12 s3f7 s4f6 | 7 | s1, s2, s3 | 1 | left as written |
The two repaired shapes share the same three pitch-identical moves in D Standard: s1f5 to s2f0, s2f7 to s3f2, s3f7 to s4f3. The third shape holds ties on three strings and its own suggested alternative is also span 7, which is the held-chord pattern that proved to be correct notation on The Mutiny, so it was left alone. The repair script skipped those two beats by itself and said so.
| Candidate | run_id | Artifact | Gate | Checkpoint | Hard faults | Preservation | Position | Declared |
|---|---|---|---|---|---|---|---|---|
| endless-summer-refret-cloned.gp | 9108ce5b89c369e4 | 1bf5b965e04ff740 | 553ab252e1d1cd72 | a54bbb8f582aad48 | 20 to 0 | PASS | PASS | True |
| not-too-much-refret-cloned.gp | d27623407f403a43 | 15911652a98631e2 | 553ab252e1d1cd72 | e0a024dbc0023730 | 15 to 1 | PASS | PASS | True |
The Phase 0 re-pull could not be completed as a .gp: Songsterr serves notation as JSON per track and offers no .gp export over plain HTTP, and the only other Lazarus file on disk, _gp_extract_Shiner-Lazarus-05-04-2026.gp, holds the identical 138 bars and identical three tracks. So the audit ran on the local file, and the live s5476396 with its vocal and drum staves remains the better source that nothing local can yet supply.
| Stage | Result |
|---|---|
| Meter and length | 138 bars all 4/4, 552 quarter-beats, 283.1 s at 117 bpm against a 281.0 s stem, 0.7% apart |
| Tempo | The GPIF says 117. The stem folder is named "180bpm", which is wrong, so folder names stay unreliable. |
| Staves | Three only. Rhythm 100% occupancy, Lead 50.7%, Bass 95.7%. No vocal staff, no drum staff. |
| Two guitars or one covering | TWO_PARTS, co-activity 50.7% |
| Playability | Rhythm PASS, 1392 notes, zero faults. Lead REVIEW, SHIFT x68, severe JUMP x12, TUNING_EVIDENCE |
| Stem | Onsets | Alignment | Anchors | Clamped | Max run | Health |
|---|---|---|---|---|---|---|
rhythm | 13 | 8.7% | 1 | n/a | n/a | FAIL, fewer than two anchors |
lead | 134 | 22.8% | 6 | 18.3% | 202 | FAIL x4 |
Thirteen onsets across 281 seconds is 0.05 per second. Lazarus joins So Far So as a song where no stem yields an interpretable map.
136 SHIFT and JUMP records concentrate on one string: s5 carries 210 of them, s4 carries 60, s2 carries 2. The shape is the same throughout, an octave leap on a single string:
| SHIFT bar 16.812 s5f8 sounding [70] hand moves 12.0 frets in 128 ms |
| JUMP bar 16.938 s5f20 sounding [82] 12.0 frets in 256 ms, 47 frets/sec |
| JUMP bar 17.062 s5f20 sounding [82] 12.0 frets in 128 ms, 94 frets/sec |
Pitch 82 has exactly one placement on a Drop C guitar, s5f20. Pitch 70 has four: s2f22, s3f17, s4f13, s5f8. So the high note cannot move, and the only refret available is to raise the low note to s4f13, which shortens the leap from 12 frets to 7. The gate flags a 7-fret move in 128 ms as a JUMP too, at 55 frets/sec, so that repair trades one flag for another.
I reported the work as blocked on the missing T7 Shield volume. That was too broad. A complete copy of all ten .gp files sits on the internal disk at ~/Desktop/Brandon-Vault/New Folder With Items 2/New Folder With Items 7/IF YOU CAN'T FIND SOMETHING ITS HERE/BandBooks/BELIEVEYOUME/_canonical_2026-06-04/songs/. What is genuinely missing is the STEMS, which exist nowhere on the internal disk apart from a drum-only extract.
| Work | Needs | Runnable without the drive |
|---|---|---|
| Content gate, staff roles, playability | the .gp only | YES |
| Beat map, audio accuracy, mir_eval | stems | no |
| Stage | Result |
|---|---|
| Content | 171 bars, 9071 notes, 53.0 per bar, PASS |
| Two guitars or one covering | TWO_PARTS, co-activity 60.9%, role flip 0.0, the cleanest of all eight measured |
| Structure | FAIL, TRACKCOUNT: 3 guitar staves against a gate of 2 |
| Lead Guitar | REVIEW, TUNING_EVIDENCE, plus a JUMP at bar 41 of 17 frets in 259 ms, 66 frets per second |
| Rhythm Guitar | PASS, zero faults, and its Copy scores identically |
| Vocals | 335 notes, 67 stacked beats, max stack 2, the most vocal harmony written on the record |
Rhythm Guitar Copy holds 2671 notes at 98.8% occupancy, identical to Rhythm Guitar. Copy holds 530 at 96.5%, identical to the bass. Phase 0 already established that the live s5084035 returns five clean tracks with no duplicates and with Lead 924, Rhythm 2671 and Vocals 335 matching ours exactly. So the structural fail is an artifact of the local file, and the correct action is to take the live tab rather than to edit ours.
| Song | Content gate | Staff roles | Playability | Vocals |
|---|---|---|---|---|
| Asleep in the Trunk | FAIL, EMPTY SHELL. 264 bars, 173 notes, 0.66 per bar. Lead Guitar holds ZERO notes. Rhythm plays 12 of 264 bars. | n/a on a shell | Lead REVIEW on zero notes. Rhythm REVIEW, hand skip 57%. | 14 notes over 264 bars, monophonic |
| Jackie | PASS, 102 bars, 3013 notes, 29.5 per bar | SINGLE_STAFF, one guitar only | Rhythm Guitar PASS, zero faults | 139 notes, 39.2% occupancy, monophonic |
Asleep confirms on the local copy exactly what Phase 0 found against the live tab: our file is a shell while s5085156 holds 7245 notes. Jackie's single guitar staff is genuine rather than a local defect, since the live tab also returns one.
mir_eval.transcription note-level F-measure is the MIREX standard and the one thing this pipeline had never executed. It pairs onset AND pitch into a single matched-note decision, which is neither of the questions the earlier measures asked. It has now been run. It needed no drive: the tabs, the full-mix mp3s and per-instrument YIN transcriptions of the stems are all on the internal disk.
so_far_so_rhythm_guitar_PYIN.mid holds 105 notes across 189.6 s against the Mutiny reference's 7639 across 248.4 s. A ratio against that measures the file's emptiness rather than a mismatch. Re-run against three density-matched controls, the number collapses.
| Pairing | Reference notes | F at 50 ms | F at 250 ms | Ratio, 50 ms |
|---|---|---|---|---|
| CORRECT, the_mutiny rhythm YIN | 7639 over 248.4 s | 0.046 | 0.112 | reference |
| WRONG, endless_summer rhythm YIN | 8381 over 245.2 s | 0.036 | 0.097 | 1.28 |
| WRONG, my_mirror rhythm YIN | 8225 over 283.5 s | 0.021 | 0.052 | 2.14 |
| WRONG, so_far_so rhythm YIN | 3537 over 248.7 s | 0.023 | 0.054 | 2.00 |
Worst-case discrimination is 1.28x at 50 ms and 1.16x at 250 ms, both under the 1.5 bar. Endless Summer is the closest control on both note count and duration, and it is the one the metric struggles hardest to separate. Attack recall remains the leader at 5.70x.
basic_pitch is present in ~/venvs/audio_midi_311 and crashes with SIGFPE, exit 136, because neither tensorflow nor tflite-runtime is installed there; it warns about both on import. pip install 'basic-pitch[tf]' into that venv should fix it, and then mir_eval can be re-run against a polyphonic reference on the same tabs and the same local audio. That is a package install rather than research, and it is the highest-value next action on the whole board.
The monophonic YIN run gave a weak 1.28x and was not a fair test of the metric. The fair test needs a polyphonic reference, and basic_pitch crashed with SIGFPE on this box. The fix turned out to be free. Its default model is nmp.mlpackage, CoreML, which is what crashes. nmp.onnx ships in the same directory and onnxruntime 1.23.2 is already installed, so selecting the ONNX backend fixed it. No tensorflow, no tflite-runtime, no download.
| Pairing, reference is basic_pitch on the full mix | Ref notes | P | R | F at 50 ms | F at 250 ms | Ratio, 50 ms |
|---|---|---|---|---|---|---|
| CORRECT the_mutiny.mp3 | 1444 | 0.060 | 0.100 | 0.075 | 0.205 | reference |
| WRONG endless_summer.mp3 | 1860 | 0.036 | 0.047 | 0.041 | 0.101 | 1.83 |
| WRONG so_far_so.mp3 | 1231 | 0.009 | 0.017 | 0.012 | 0.046 | 6.48 |
| WRONG my_mirror_hates_me.mp3 | 1642 | 0.004 | 0.006 | 0.005 | 0.011 | 15.14 |
| Measure | Worst-case discrimination | Verdict |
|---|---|---|
| Attack recall, through a health-gated map | 5.70x | the leader |
| Map alignment | 5.75x | valid, song level only |
| mir_eval note F, polyphonic reference | 2.04x at 250 ms | USABLE, the second validated discriminator |
| mir_eval note F, monophonic YIN reference | 1.28x | weak, the reference was the handicap |
| Everything else measured this session | under 1.5x or inverted | unusable |
basic_pitch is transcribing bass, drums and vocals alongside the guitar while the estimate is one guitar staff. The isolated guitar stem would raise it, and that is the one thing still wanting the T7 Shield drive. The DISCRIMINATION is what matters here, and it holds without the stem.
The local full-mix mp3s cover all ten songs, so the audio pipeline runs on them exactly as it ran on The Mutiny. The isolated stem would be better and is not required.
| Stage | Result |
|---|---|
| Length | 353.8 s at 116 bpm against a 362.7 s mix, 2.5% apart |
| Map | 35.1% alignment against a 5.1% control, gain +30.0, 16 anchors |
| Map health | PASS, clamped 8.3%, max run 114, unique 0.917, span 92% |
| Attack recall | 32.9%, 1855 of 5645, decoy 5.3%, a 6.2x separation |
| Attack precision | 89.6%, 311 of 347 onsets accounted for |
| Timing | median 125.4 ms, p90 176.3 ms, n=2340 |
| Pitch agreement | 53.2% against a 44.8% control, separation +8.4, not labelled no-power |
| Duration | -0.079 against a -0.006 control, no power |
| Classification | 2 supported (bars 4 and 28), 0 unresolved, 146 unsupported |
Rhythm Guitar Copy and Copy, so roughly a third of those attacks are counted twice. Attack recall is depressed accordingly, and the honest reading is that 32.9% is a floor. The re-pull of s5084035, which has five clean tracks, would raise it.
Both supported bars carry 40 and 90 attacks with 100% miss against decoys at 80.0% and 83.3%, so they clear the threshold by a wider margin than The Alligator's did. They are listening candidates rather than proven defects, and the duplicate-staff inflation applies to them too.
After Phase 1, /goal on The Mutiny reduces to one question. Nine measures were tested with controls on both sides and only attack recall survived, so today a corrected file cannot be justified note by note. Three ways forward:
other, so they need six-stem re-separation before any guitar question./goal line items that are missing for implementation reasons rather than research reasons, so the remaining gap is exactly one thing stated precisely, instead of a mix of unfinished work and genuine unknowns. Per-note correction stays blocked either way.
Executed 2026-08-17. Live notation pulled per track off the Songsterr CDN route st_gpdiff.py uses, then counted bar by bar. Four of the five Phase 0 items are now settled by measurement rather than by inference.
{"notes":[{"rest":true}]}, so the first counting pass scored rests as notes and returned 100% occupancy on every track. Every number below excludes rests. The occupancy column now separates a part that plays throughout from one that enters rarely.
| Song | Live rev | Live notes | Local notes | Verdict | What the measurement settled |
|---|---|---|---|---|---|
| Asleep in the Trunk | 7798309 | 7245 | 173 | Re-pull | The source was always fine. Our copy was the defect. 42 times the content. Vocals go from 14 notes to 311, with 15 stacked beats. |
| Lazarus | 7834445 | 8672 | 3319 | Re-pull | The new tab carries the vocal and drum staves the local file lacks, 228 and 2040 notes. It runs 207 bars against the local 138. |
| Jackie | 7834599 | 3014 | 3013 | No action | Correction. The local copy is current. Track for track the counts match, vocals 139 against 139. The revision date moved and the content did not. |
| Broken Satellites | 6648000 | 5870 | 9071 | Use live | The Copy tracks exist only in our file. Songsterr holds five tracks with no duplicates. Lead 924, Rhythm 2671, Vocals 335, identical to ours track for track. The extra 3201 local notes are the two copies. |
| Broken Satellites BC | 7791000 | 4700 | n/a | Reject | The rival tab has almost no lead. 129 notes at 13.3% occupancy with zero stacks, against 924 at 60.2% with 144 stacks on s5084035. |
| Song | Track | Notes | Occupancy | Stacked | Max stack | Songsterr isVocalTrack |
|---|---|---|---|---|---|---|
| Asleep in the Trunk | Lead Guitar | 731 | 45.1% | 195 | 4 | false |
| Rhythm Guitar | 3027 | 97.0% | 1038 | 4 | false | |
| Bass | 1402 | 100.0% | 0 | 1 | false | |
| Drums | 1774 | 78.4% | 495 | 3 | false | |
| Vocals | 311 | 66.3% | 15 | 2 | true | |
| Lazarus | Lead Guitar | 154 | 43.0% | 0 | 1 | false |
| Rhythm Guitar | 5040 | 99.5% | 1553 | 4 | false | |
| Bass | 1210 | 94.7% | 0 | 1 | false | |
| Drums | 2040 | 93.7% | 565 | 3 | false | |
| Vocals | 228 | 44.9% | 0 | 1 | true | |
| Jackie | Rhythm Guitar | 1242 | 99.0% | 275 | 3 | false |
| Bass | 581 | 97.1% | 0 | 1 | false | |
| Drums | 1052 | 97.1% | 362 | 2 | false | |
| Vocals | 139 | 39.2% | 0 | 1 | true | |
| Broken Satellites | Lead Guitar | 924 | 60.2% | 144 | 6 | false |
| Rhythm Guitar | 2671 | 98.8% | 773 | 6 | false | |
| Bass | 530 | 96.5% | 0 | 1 | false | |
| Drums | 1410 | 91.2% | 359 | 2 | false | |
| Vocals | 335 | 54.4% | 67 | 2 | true |
isVocalTrack: true on exactly one track. Not one returns two. The live Asleep vocal carries 15 stacked beats and the live Broken Satellites carries 67, so the harmony pattern is the same as the local files: written as stacks on one staff, never as a second staff.
Run 2026-08-17 against 08_the_mutiny/songsterr.gp, sha256 21b37b73b6f35faa, 135 bars, 4906 notes. Every number below is validator output rather than a claim.
| Measure | Result | Reading |
|---|---|---|
staff_role_audit.py co-activity | 50.4%, both staves play in 68 of 135 bars | Verdict TWO_PARTS. Genuine two-guitar runs at bars 7-35, 71-80, 101-105, 111-130. |
| Role flip | 7.0 | The Mutiny is clear of the one-part-chopped-in-two defect. Its two staves are two guitarists. |
Three stems were tried at offset 4.04s, 130 bpm. The right channel wins by a wide margin, and the reason matters: the stereo sum masks transients that the isolated channel keeps.
| Stem | Onsets detected | Alignment | Random control | Gain | Anchors | Bar-length CV | Verdict |
|---|---|---|---|---|---|---|---|
Rhythm Guitars (stereo) | 236 | 30.8% | 7.3% | +23.5 | 12 | 7.20%, 10 bars off | Reject |
RhythmGtr [L] | 292 | 35.2% | 8.5% | +26.7 | 15 | 3.02% | Weaker |
RhythmGtr [R] | 718 | 73.6% | 17.5% | +56.1 | 32 | 2.22%, 0 bars off | Accepted |
The accepted map covers 126 of 135 bars, mean bar length 1.8469s against a nominal 1.8462s. The last nine bars fall beyond the final anchor and are not measured. Passing the chance test alone was not enough: the first bar-length reading looked catastrophic until the extrapolation past the anchor span was removed, so the covered span is stated explicitly rather than implied.
| Measure | Number | Control | Verdict |
|---|---|---|---|
| Attack recall | 74.1%, 2273 of 3068 written attacks match a detected onset | n/a | Usable |
| Attack precision | 88.0%, 632 of 718 onsets accounted for | n/a | Usable |
| Timing, post-warp | median 0.0 ms | circular | Discarded, the warp minimises its own residual |
| Timing, as the tab asserts it | median 48.2 ms, p90 204.0 ms, n=2534 | n/a | Usable |
| Pitch agreement | 53.4% | 51.0% shifted-time, separation +2.4 | No discriminating power |
| Ownership separation | +0.2651 | +0.2766 shifted-time, gain -0.0115 against a 0.05 threshold | Refused |
| Attack-string evidence | separation -0.197 | its own control 0.018, so -0.215 over control | Not usable |
| Register evidence | 1368 of 3260 notes (42.0%) below the measured 150 Hz floor | n/a | BLIND_REGISTER, an attribution gap |
The guitar stem holds under 2% of its energy below 150 Hz, so the obvious repair is to read the low band from the full mix. The mix at Music to Stem/Beleiveyoume/BELIEVEYOUME (2025)/03 - The Mutiny.flac runs 251.490295s against the stems' 251.490295s, identical to the sample, so no time correction was needed. A combined file was built with a 4-pole crossover: guitar right channel above 150 Hz, full mix below it.
Then a negative control, which is the test that settles it: the same Mutiny tab measured against So Far So's guitar stem, a deliberately wrong pairing.
| Pairing | Map alignment | Attack recall | Attack precision | Pitch agreement | Pitch control | Pitch separation |
|---|---|---|---|---|---|---|
Mutiny tab vs its own RhythmGtr [R] | 73.6% | 74.1% | 88.0% | 53.4% | 51.0% | +2.4 |
| Mutiny tab vs register-aware combine | 73.4% | 74.1% | 87.8% | 51.0% | 47.2% | +3.9 |
| Mutiny tab vs its own full mix | 54.9% | 53.2% | 90.2% | 52.9% | 51.0% | +1.9 |
| Mutiny tab vs SO FAR SO guitar (wrong on purpose) | 12.8% | 13.0% | 94.0% | 42.4% | 33.7% | +8.7 |
| Metric | Correct over wrong | Usable |
|---|---|---|
| Map alignment | 5.75x (73.6 / 12.8) | VALID |
| Attack recall | 5.70x (74.1 / 13.0) | VALID |
| Attack precision | 0.94x (88.0 / 94.0) | INVALID, the wrong stem scores higher |
| Pitch separation | 0.28x (+2.4 / +8.7) | INVALID and inverted |
With pitch, ownership and attack-string all disqualified, the only surviving audio metric is attack support. A new tool, bar_support_audit.py, localises it: rather than judging a note, it asks which BARS have no acoustic support while their neighbours do. A single unmatched attack proves nothing, since an onset detector systematically misses attacks inside a held distorted chord, and a region carries information a note cannot.
It ships with a decoy control, the same tab shifted 3.7 seconds. Two constructions were tried and both were refused:
| Construction | Real support | Decoy at +3.7s | Gain | Needs | Verdict |
|---|---|---|---|---|---|
| DTW fitted to the events it then scores | 100.0% | 92.0% | +8.0 | +15.0 | Refused, circular |
| DTW fitted to all tracks, subset scored through it | 100.0% | 95.3% | +4.7 | +15.0 | Refused |
Cause: 718 onsets across 251 seconds is one every 0.35 seconds. The DTW map compresses any input into that distribution, so a tab shifted by nearly four seconds still falls beside an onset. Onset density this high leaves the measure no headroom, which is a property of dense distorted rhythm guitar rather than a coding error. The tool is kept, exits nonzero, and emits nothing whenever the decoy keeps up.
The obvious reading of Step 5 was that the material defeats pitch matching, since dense distorted power chords in Drop C are close to chroma-stationary. That is testable. My Mirror Hates Me differs on every property that could explain it: Standard E rather than Drop C, 114 bpm rather than 130, and 1.59 onsets per second rather than 2.86.
| Pairing | Map alignment | Attack recall | Pitch agreement | Pitch control | Pitch separation |
|---|---|---|---|---|---|
| My Mirror tab vs its own Rhythm Guitars | 64.4% | 66.3% | 55.8% | 52.2% | +3.6, no power |
| My Mirror tab vs THE MUTINY's guitar (wrong on purpose) | 48.7% | 44.6% | 63.3% | 48.3% | +15.0 |
Attack recall stayed correctly ordered on both songs, 74.1% against 13.0% on The Mutiny and 66.3% against 44.6% here. Its discrimination is much weaker on this pairing, 1.49x against 5.70x, because the two songs run 287s and 251s and the warp absorbs some of the difference. Attack recall remains the only metric that has never pointed the wrong way.
Step 7 said the defect was in the measure's construction, which was as far as the evidence went at the time. It goes further. The cause is a degenerate DTW map, and it is measurable directly.
| Case | Anchors | Alignment | Unique audio times per attack | Longest collapse run | Clamped share |
|---|---|---|---|---|---|
| Mutiny vs its own guitar | 32 | 73.5% | 0.940 | 66 | 6.0% |
| Mutiny vs So Far So (wrong) | 4 | 12.8% | 0.738 | 284 | 26.3% |
| My Mirror vs its own guitar | 18 | 64.4% | 0.948 | 57 | 5.3% |
| My Mirror vs Mutiny (wrong) | 10 | 48.7% | 0.778 | 239 | 22.3% |
A wrong pairing yields few anchors, so interpolation pins a quarter of the tab outside the anchor span and collapses up to 284 consecutive attacks onto a single audio time. Every one of those notes is then compared against the same frame. When that frame is a sustained chord, a large share of written pitches agree with it, while the shifted-time control falls on a different and sparser frame and collapses. That is the large spurious separation, appearing on the pairing that is most wrong.
beat_map.py accepted both wrong maps.
Gain +11.24 and +44.1, over its +8.0 threshold, because it judges alignment gain against a random control and nothing else. audio_accuracy_audit.py then measured pitch through those maps. No stage asked whether the map was healthy enough to carry a per-note question.
map_health_gate.py.
It reads a beat_map.py --json file and fails a map on clamped share above 12%, a collapse run over 120, fewer than 0.85 distinct audio times per attack, or under 85% span coverage. Thresholds sit between the two measured groups with margin. Validated 4 for 4: both correct pairings PASS, both wrong ones FAIL on all four criteria at once. A failing map still supports song-level alignment and attack recall, which is what those metrics were always measuring.
This changes the standing conclusion. Pitch agreement is not inherently inverted. It was being fed maps that could not carry it, on pairings nothing was screening. Whether it becomes usable on a map that passes the health gate is the next thing to measure, and it now has a gate in front of it.
With the health gate in place the earlier comparison can be redone properly. The wrong pairing that appeared to invert the metric fails the health gate on all four criteria, so it is disqualified as a control. What remains is pitch measured only through maps that pass.
| Pairing | Map health | Attack recall | Pitch agreement | Pitch control | Separation | Tool's own verdict |
|---|---|---|---|---|---|---|
Mutiny tab vs its [R] channel | PASS | 74.1% | 53.4% | 51.0% | +2.4 | no power |
Mutiny tab vs its [L] channel | PASS | 34.9% | 52.3% | 49.7% | +2.6 | no power |
| My Mirror tab vs its own guitar | PASS | 66.3% | 55.8% | 52.2% | +3.6 | no power |
| Mutiny tab vs So Far So (wrong) | FAIL, 4 criteria | 13.0% | 42.4% | 33.7% | +8.7 | disqualified |
The [L] and [R] comparison is the sharpest form of it. Two channels of the same song at the same instant, both maps healthy, and pitch scores 53.4% against 52.3%. Attack recall separates them 2.1 times over, 74.1% against 34.9%, so the tab's attacks clearly follow the right channel. Chroma cannot see a difference that attack timing makes obvious.
The natural next question is which audio feature can order a correct pairing above an incorrect one when chroma cannot. The obvious control, My Mirror's tab against The Mutiny's stem, fails the health gate on all four criteria, so it is disqualified before any feature is computed. The one healthy-map pairing that is nonetheless wrong is The Mutiny's own left channel: both channel maps pass, both cover the same song at the same instant, and attack recall already orders them 2.13 to one.
Four candidates, each sampled at the tab's 3068 attack times mapped through that channel's own healthy map, each against a within-channel control at the same times shifted 3.7 seconds.
| Feature | [R] tab | [R] control | [R] gain | [L] gain | R/L | Verdict |
|---|---|---|---|---|---|---|
| Onset strength envelope | 0.559 | 0.567 | 0.986 | 0.996 | 0.990 | Loses to its own control |
| Spectral flux ratio | 1.259 | 1.277 | 0.986 | 0.996 | 0.990 | Loses to its own control |
| Attack sharpness, post over pre | 1.065 | 1.045 | 1.019 | 1.072 | 0.951 | Orders the channels backwards |
| Transient over sustain | 0.994 | 1.001 | 0.992 | 0.998 | 0.994 | Loses to its own control |
| Attack recall, the reference | 74.1% on [R] | 34.9% on [L] | 2.13 | The target to beat | ||
| Pitch agreement, the failure | 53.4% on [R] | 52.3% on [L] | 1.02 | Cannot tell them apart | ||
The searchable space narrows to discrete event matching rather than continuous spectral features. Onset strength, spectral flux, transient clarity and attack envelope sharpness are all ruled out on this material with proper controls, so a future attempt should start from event-level questions rather than from frame-level ones.
Playability needs no audio, so the audio blocker never applied to it. Dumping the tie state across bars 3 to 8 resolves the single hard fault on the file.
| Bar / beat | String 4, the moving line | String 3, the pedal |
|---|---|---|
| bar 3, beat 99 | s4f8 tie origin, p65 | s3f5 tie origin, p58 |
| bar 3, beat 100 | s4f8 tie dest | s3f5 tie dest |
| bar 3, beat 101, the flagged beat | s4f10 tie origin, p67 | s3f5 tie origin, p58 |
| bar 4, beats 102 to 104 | s4f10, then s4f8 | s3f5 held |
| bar 4 to 5, beats 105 to 106 | s4f9 | s3f5 held |
| bar 7 to 8, beats 107 to 110 | s4f10 | s3f5 held, with s2f5 and s1f3 |
String 3 fret 5 is a pedal held by an unbroken tie chain from bar 3 through bar 8 while the melody moves on string 4 through frets 8, 9 and 10. One finger holds, another reaches. That is index and pinky across adjacent strings at position 5, which every guitarist does. The gate models it as four fingers fitting inside four frets at once, which is the wrong model for a two-finger pedal and reach.
s2f10 + s4f10 collides with the s2f5 tie held from bar 7, which is why applying it took the file from 1 fault to 5. s2f10 + s3f14 needs string 3, which carries the pedal. s4f1 + s5f5 moves the pedal onto string 4, the string carrying the moving line.
Step 10 concluded the surviving signal class was discrete event matching rather than continuous features. That is testable without a DTW map at all, which sidesteps both the circularity of Step 6 and the map degeneracy of Step 8. Tab attacks placed at linear time from bpm alone, compared against the audio's onset stream as a sequence.
| Pairing | Kind | Tab attacks | Onsets | Density correlation | Inter-onset similarity |
|---|---|---|---|---|---|
Mutiny tab vs its own [R] | correct | 2582 | 718 | -0.004 | 0.381 |
Mutiny tab vs its own [L] | other channel | 2582 | 292 | -0.126 | 0.246 |
| Mutiny tab vs its summed rhythm | correct | 2582 | 236 | -0.367 | 0.267 |
| Mutiny tab vs So Far So | wrong song | 2582 | 83 | -0.078 | 0.248 |
| Mutiny tab vs My Mirror | wrong song | 2582 | 456 | +0.042 | 0.269 |
| My Mirror tab vs its own | correct | 3326 | 456 | -0.129 | 0.166 |
| My Mirror tab vs The Mutiny | wrong song | 3326 | 236 | -0.522 | 0.112 |
| Measure | Correct mean | Wrong-song mean | Ratio | Verdict |
|---|---|---|---|---|
| Density correlation | -0.167 | -0.186 | 0.90 | No ordering |
| Inter-onset similarity | +0.271 | +0.210 | 1.29 | Weak, under the 1.5 bar |
| Attack recall, the reference | 74.1% | 13.0% | 5.70 | The unique survivor |
| Track | Notes | Hand skip | Same-string | Tie faults | Wide | Octave copies | Verdict |
|---|---|---|---|---|---|---|---|
| Lead Guitar | 674 | 7% | 0 | 0 | 0 | 0 | REVIEW TUNING_EVIDENCE |
| Rhythm Guitar | 2586 | 0% | 0 | 0 | 1 | 0 | FAIL IMPOSSIBLE_SPAN x1 |
The single hard fault, in full:
| IMPOSSIBLE_SPAN bar 3.875, Rhythm Guitar. Written s3f5 s4f10, span 5, sounding [58, 67]. Held span 5 frets against a 4-fret hand at 130 bpm. Simplest legal alternative, span 0: s2f10 s4f10. |
The Lead REVIEW says string 0 is detuned by 2 from the rest of the tuning and its open pitch is never used in that staff. The whole guitar is in Drop C for the Rhythm part, which uses the low C. Read on its own, the Lead staff gives no evidence for the drop. That is a review flag rather than a fault.
The refret preserves pitch exactly, since s3f5 is 53+5 = 58 and s2f10 is 48+10 = 58. Three beats carry that shape and only one was flagged, so the edit was narrowed to beat 101, bar 3 last eighth, copy-on-write.
| Fault | Source | Candidate |
|---|---|---|
| IMPOSSIBLE_SPAN | 1 | 1, moved to bar 7.0 |
| SAME_STRING | 0 | 1 |
| TIE_COLLISION | 0 | 1 |
| TIE_DROPPED | 0 | 1 |
| TIE_UNMATCHED | 0 | 1 |
| total | 1 | 5 |
Every preservation gate stayed green while the file got worse. Tier 1 pitch preservation passed with 3260 notes in and 3260 out, zero lost and zero invented. Tier 1b position passed. The fault count is the measure that caught it.
The cause: the note on string 3 anchored a tie chain. Moving it left a tie on string 3 with nothing struck on that string, and put fret 10 on string 2 where a tie already reserved that string until beat 28. The span-5 voicing the gate called impossible exists because a tie holds string 3, and the suggested alternative is computed per beat with no view of tie reservations.
Candidate kept as evidence at ~/Projects/_outputs/impossible-guitar-parts/the-mutiny-span-fix-REJECTED-broke-tie-chains.gp, sha256 c2c7710ee5488821. Nothing was promoted and nothing was deleted.
.gp files and 17 live Songsterr revisions, counting any track whose name matches vocal, voice, sing, vox, lyric or harmon, and cross-checking against MIDI program 66. Every tab holds exactly one Vocals staff. The old Lazarus holds none. Zero of 27 hold two.
Harmony does exist, written as stacked notes on that single staff. Five of the ten stack notes inside the vocal part, up to three at once. The other four are strictly one note at a time, so any harmony those songs actually sing is absent from the notation entirely.
| Song | Vocal staves | Vocal notes | Stacked beats | Max stack | Reading |
|---|---|---|---|---|---|
| So Far So | 1 | 342 | 53 | 3 | Three-part harmony written on one staff |
| Broken Satellites | 1 | 335 | 67 | 2 | Most stacked beats on the record |
| The Mutiny | 1 | 247 | 18 | 2 | Two-part in places |
| My Mirror Hates Me | 1 | 177 | 17 | 3 | Three-part in places |
| Not Too Much | 1 | 189 | 6 | 2 | Barely stacked |
| The Alligator | 1 | 178 | 0 | 1 | Monophonic, no written harmony |
| Endless Summer | 1 | 210 | 0 | 1 | Monophonic, no written harmony |
| Jackie | 1 | 139 | 0 | 1 | Monophonic, no written harmony |
| Asleep in the Trunk | 1 | 14 | 0 | 1 | 14 notes across 264 bars. The staff is empty. |
| Lazarus (local) | 0 | 0 | 0 | 0 | No vocal staff. The live 2026-07-11 build has one. |
Counted out of the GPIF by walking MasterBar to Bar to Voice to Beat to Notes. This is the measure that separates a real transcription from a correctly-shaped empty one.
| Song | Bars | Total notes | Lead | Rhythm | Bass | Drums | Vocal | Notes/bar |
|---|---|---|---|---|---|---|---|---|
| Broken Satellites | 171 | 9071 | 924 | 2671 | 530 | 1410 | 335 | 53.0 |
| Not Too Much | 122 | 6885 | 811 | 3333 | 876 | 1676 | 189 | 56.4 |
| Endless Summer | 192 | 5639 | 1139 | 2778 | 595 | 917 | 210 | 29.4 |
| So Far So | 140 | 4941 | 579 | 1413 | 770 | 1837 | 342 | 35.3 |
| The Mutiny | 135 | 4906 | 674 | 2586 | 505 | 894 | 247 | 36.3 |
| My Mirror Hates Me | 134 | 4722 | 342 | 1270 | 612 | 2321 | 177 | 35.2 |
| The Alligator | 86 | 4134 | 698 | 1586 | 439 | 1233 | 178 | 48.1 |
| Lazarus | 138 | 3319 | 718 | 1392 | 1209 | 0 | 0 | 24.1 |
| Jackie | 102 | 3013 | 0 | 1241 | 581 | 1052 | 139 | 29.5 |
| Asleep in the Trunk | 264 | 173 | 0 | 33 | 101 | 25 | 14 | 0.7 |
264 bars, 173 notes, a Lead Guitar staff holding zero. Every other song on the record runs 24 to 56 notes per bar. This file carries all five expected staves, the right Drop C tuning, the right MIDI programs, and a Vocals track at program 66, so it clears every rule preflight_import.py owns, because that gate counts staff presence and role identity and never parses a single Beat.
Built today to close it: ~/.claude/skills/impossible-guitar-parts/empty_staff_gate.py. It measures notes per bar, per-staff occupancy, zero-note staves, and the vocal stack. Validated against all ten files: exit 1 on Asleep with five separate faults, exit 0 on the other nine.
Ordered by dependency. Nothing below Phase 0 is worth doing against a file that has not been re-pulled and content-checked, because four of the issues found so far turned out to be defects in the local copy rather than in the source.
| # | Issue | Fix | Skill or gate | Past mistake it guards |
|---|---|---|---|---|
| 1 | Asleep local .gp is a 173-note shell | DONE Live measured at 7245 notes against our 173. Re-pull confirmed necessary. | /songsterr-tab-guide, st_gpdiff.py | Fixed-shape tools emit full-size empty files |
| 2 | Lazarus local has no vocal and no drum staff | DONE Live carries vocals 228 and drums 2040 over 207 bars. Re-pull confirmed necessary. | /songsterr-tab-guide | Judging a source by a stale local export |
| 3 | Jackie local is two months stale | DONE Content identical track for track. No re-pull needed, the staleness claim was wrong. | /songsterr-tab-guide | Same |
| 4 | Broken Satellites local carries Copy tracks | DONE Copies are local only. s5084035 beats s5965143, whose lead holds 129 notes at 13.3%. | octave_copy_gate.py | A lead staff that was 77.4% fret+12 copy reached Songsterr |
| 5 | Nothing measured whether a file holds content | DONE Gate built, validated, and run. A rest-counting bug in the live reader was caught and fixed before reporting. | empty_staff_gate.py, built today | Exit 0 and file-exists prove a tool ran, never that its output is good |
| # | Issue | Fix | Skill or gate | Past mistake it guards |
|---|---|---|---|---|
| 6 | Beat-to-seconds map has to exist before any audio check | Build and validate the map on The Mutiny | /composite-stem-alignment, beat_map.py | A map that beats a random control can still be seven bars wrong |
| 7 | Two guitars written onto one staff | Split by register and pitch against the real RhythmGtr [L] and [R] files | attack_string_evidence.py, register_evidence.py, ownership_audit.py | Splitting by panning or stem loudness, when 19 to 56% of notes appear in BOTH channels |
| 8 | A lead staff going tacet while rhythm covers for it | Co-activity and role-character audit | staff_role_audit.py | A lead with no events from bar 57 while rhythm flipped to single notes |
| 9 | Voicings no hand can play | Five-tier playability grade | impossible_gate.py | 1111 unreachable chords shipped |
| 10 | A rebuild silently losing notes | Pitch-preservation check first, skip percentage last | /impossible-guitar-parts tier order | A processing-order bug deleted 32 notes at pitch 38 while every ergonomic score stayed clean |
| # | Issue | Fix | Skill or gate | Past mistake it guards |
|---|---|---|---|---|
| 11 | No bass staff has been checked against a bass stem | Per-beat fundamental on the bass stem, compared bar by bar | /audio-stems-to-midi, crepe and yin | Tab MIDI encodes fingering rather than sounded harmony |
| 12 | Broken Satellites bass tuning conflict | Resolve after the re-pull, since the live tab is Drop C | empty_staff_gate.py then octave_copy_gate.py | Treating a local edit as a source defect |
| # | Issue | Fix | Skill or gate | Past mistake it guards |
|---|---|---|---|---|
| 13 | Five songs write harmony as stacks on one staff | Verify every stack against the vocal stem before splitting it into its own staff | /audio-stems-to-midi, /five-stem-song-analyst | A pitch found in one stem never proves which part sang it |
| 14 | Four songs write a strictly monophonic vocal | Check the vocal stem for harmony the notation omits, then add a staff only where the stem carries one | /audio-stems-to-midi | Inventing a part the evidence does not support |
| 15 | Asleep has 14 vocal notes across 264 bars | Covered by the Phase 0 re-pull, then re-measure | empty_staff_gate.py | Shipping a staff that exists and is empty |
| 16 | No gate exists for vocal-harmony fidelity | Build one after Phase 3 measurement, on the model of octave_copy_gate.py | GAP, nothing covers this yet | One mention means a recurring class, so the gate gets built |
| # | Issue | Fix | Skill or gate | Past mistake it guards |
|---|---|---|---|---|
| 17 | Asleep and Jackie were separated to four stems | Re-separate with the Moises role split, which emits Rhythm, Solo and Other Guitar | Moises Guitar parts module | A pitch inside other proving nothing about the guitar |
| 18 | Asleep time signature, 3/4 against 4/4 | Settle against the audio using the validated beat map | /composite-stem-alignment | Correcting 264 bars against the wrong bar grid |
| 19 | Jackie has a single guitar staff | Decide whether a second guitar exists, by pan bimodality on the re-separated stems | /impossible-guitar-parts guitar count | Counting guitarists by stereo width rather than per-attack bimodality |
| # | Issue | Fix | Skill or gate | Past mistake it guards |
|---|---|---|---|---|
| 20 | An import that deletes parts the existing tab holds | Preflight every upload, and refuse on any role drop | /songsterr-upload, preflight_import.py | 72 files shipped with no vocal at all |
| 21 | A vocal uploaded as a guitar program | Keep program 66 and the sax instrument type, classify by name | preflight_import.py | The vocal filed under horns by a program-first rule |
| 22 | Upload order silently losing the audio sync | YouTube first, then the file import, then wait for SAVED | /songsterr-upload | Importing first produces a silent tab with no audio attached |
| # | Song | Verdict | GP guitars | GP vocal | Isolated gtr stem | Vocal stem | Bass stem | Bars | What stands in the way |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Asleep in the Trunk | Blocked | 2 | yes | none | yes | yes | 264 | Local file is a 173-note shell with a zero-note Lead staff. Also 4-stem FLAC, guitar inside other.flac. Re-pull, then re-separate. |
| 2 | The Alligator | Ready | 2 | yes | lead + rhythm | yes | yes | 86 | Carries an audio_truth.gp3 stem-corrected prior to regress against. |
| 3 | The Mutiny | Ready · best first | 2 | yes | Rhythm L + R + Solo | yes | yes | 135 | Only song with true RhythmGtr [L] / [R] splits. Start here. |
| 4 | So Far So | Ready | 2 | yes | Rhythm + Solo + Other | yes | yes | 140 | Private tab s5110187 is Drop C. A public s4938058 also exists in Drop D, a different arrangement. Use the private one. |
| 5 | My Mirror Hates Me | Ready | 2 | yes | Rhythm + Solo + Other | yes | yes | 134 | Standard E tuning, the only one. Has a separate piano.wav alongside keys.wav. |
| 6 | Endless Summer | Ready | 2 | yes | lead + rhythm | yes | yes | 192 | Moises 6-stem. Bass is written as finger where its neighbours use pick. |
| 7 | Lazarus | Re-pull first | 2 | yes, live | lead + rhythm | yes | yes | 138 | The local file is a stale 3-track May export. Songsterr s5476396 from 2026-07-11 carries 5 tracks with Vocals and Drums. Re-pull. |
| 8 | Not Too Much | Ready | 2 | yes | Rhythm + Solo + Other | yes | yes | 122 | D Standard rather than Drop D. The GP carries the corrected tuning; prose elsewhere may not. |
| 9 | Broken Satellites | Repair first | 3 + 1 dupe local | yes | Rhythm + Solo + Other | yes | yes | 171 | The copy tracks are a LOCAL artifact. Live s5084035 is a clean 5-track Drop C, and a second 2026-07-08 upload s5965143 exists. Re-pull, then pick. |
| 10 | Jackie | Blocked | 1 | yes | none | yes | yes | 102 | 4-stem FLAC and a single guitar staff. Fails the two-guitar rule on both sides at once. |
Every ID resolved with a following curl -sIL on 2026-08-17. Tempo, tuning, and time signature are the values Songsterr displays; they were read off the site in the 2026-06-03 audit and match the tuning bytes inside each .gp, which I re-read today.
| Song | ID | HTTP | Tempo | Tuning | Time | Tab URL |
|---|---|---|---|---|---|---|
| Asleep in the Trunk | s5085156 | 200 | ♩=173 | Drop C | 3/4 | shiner-asleep-in-the-trunk |
| The Alligator | s5083283 | 200 | ♩=120 | Drop C | 4/4 | shiner-the-alligator |
| The Mutiny | s5083529 | 200 | ♩=130 | Drop C | 4/4 | gerken-the-mutiny |
| So Far So | s5110187 | 403 | ♩=130 | Drop C | 4/4 | private / unpublished, signed-in access only |
| My Mirror Hates Me | s5418315 | 200 | ♩=114 | Standard E | 4/4 | shiner-my-mirror-hates-me |
| Endless Summer | s5083970 | 200 | ♩=140 | Drop C | 4/4 | gerken-endless-summer |
| Lazarus | s5082702 | 200 | ♩=117 | Drop C | 4/4 | shiner-lazarus |
| Not Too Much | s5084025 | 200 | ♩=85 | D Standard | 4/4 | shiner-not-too-much |
| Broken Satellites | s5084035 | 200 | ♩=116 | Drop C | 4/4 | gerken-broken-satellites |
| Jackie | s5418285 | 200 | ♩=144 | Drop C | 4/4 | shiner-jackie |
Read straight out of each Content/score.gpif today. Tuning is given as MIDI pitch numbers low to high, exactly as the file stores them.
| Song | Tracks | Guitar tuning | Bass tuning | Artist field | Note |
|---|---|---|---|---|---|
| Asleep in the Trunk | Lead, Rhythm, Bass pick, Drums, Vocals | 36 43 48 53 57 62 | 24 31 36 41 | Shiner | Clean five-track shape. |
| The Alligator | Lead, Rhythm, Bass pick, Drums, Vocals | 36 43 48 53 57 62 | 24 31 36 41 | Shiner | Clean. |
| The Mutiny | Lead, Rhythm, Bass pick, Drums, Vocals | 36 43 48 53 57 62 | 24 31 36 41 | full lineup | Clean. |
| So Far So | Lead, Rhythm, Bass pick, Drums, Vocals | 36 43 48 53 57 62 | 24 31 36 41 | Shiner | Title stored with literal quote marks. |
| My Mirror Hates Me | Lead, Rhythm, Bass pick, Drums, Vocals | 40 45 50 55 59 64 | 28 33 38 43 | Unknown Artist | Standard E throughout. |
| Endless Summer | Lead, Rhythm, Bass finger, Drums, Vocals | 36 43 48 53 57 62 | 24 31 36 41 | full lineup | Clean. |
| Lazarus | Rhythm, Lead, Bass only | 36 43 48 53 57 62 | 24 31 36 41 | Shiner | No Vocals staff, no Drums staff. |
| Not Too Much | Lead, Rhythm, Bass pick, Drums, Vocals | 38 43 48 53 57 62 | 26 31 36 41 | Shiner | D Standard confirmed in the file itself. |
| Broken Satellites | Vocals, Lead, Rhythm, Rhythm Copy, Bass, Copy, Drums | 36 43 48 53 57 62 | 23 28 33 38 43 | full lineup | Two duplicate staves, and a 5-string standard bass under a Drop C guitar. |
| Jackie | Rhythm only, Bass pick, Drums, Vocals | 36 43 48 53 57 62 | 24 31 36 41 | Unknown Artist | Single guitar staff. |
Vocals. Classify these by track name and ignore the program, or the preflight will read the album as having no vocal at all.
Two roots hold BELIEVEYOUME stems. Moises_Stems/BelieveYouMeStems/ is the superset with all ten songs; Full wav files for music books are here/ holds the same eight and is missing Asleep and Jackie. Eight of the ten stems_pointer.txt files point at the smaller root.
| Song | Files | Separation shape | Guitar layers | Drum split | Extras |
|---|---|---|---|---|---|
| Asleep in the Trunk | 4 | 4-stem FLAC | none, inside other | drums_pieces/ present | alt copy in Stems/BELIEVEYOUME/ |
| The Alligator | 7 | Moises 6-stem | lead, rhythm | single drums | metronome |
| The Mutiny | 14 | custom multi | Rhythm, RhythmGtr [L], [R], Solo | c, g3, h, l, s, t | oth, other |
| So Far So | 12 | custom multi | Rhythm, Solo, Other | Kick, Snare, Toms, HiHat, Cymbals, other drum | n/a |
| My Mirror Hates Me | 14 | custom multi | Rhythm, Solo, Other | full 6-piece split | keys, piano |
| Endless Summer | 7 | Moises 6-stem | lead, rhythm | single drums | metronome |
| Lazarus | 7 | Moises 6-stem | lead, rhythm | single drums | metronome |
| Not Too Much | 14 | custom multi | Rhythm, Solo, Other | full 6-piece split | keys, strings |
| Broken Satellites | 13 | custom multi | Rhythm, Solo, Other | full 6-piece split | keys |
| Jackie | 4 | 4-stem FLAC | none, inside other | single drums | n/a |
The canonical folder was exported 2026-06-02/03. Songsterr has moved since. Every row below was read from songsterr.com/api/meta/<id>/revisions and the matching revision endpoint on 2026-08-17, so the track titles and tuning come from the live revision rather than from the local file.
| Song | ID | Latest revision | Built | Source | Tracks | Held locally? |
|---|---|---|---|---|---|---|
| So Far So | s5110187 | private | n/a | n/a | 5, Drop C | yes |
| So Far So | s4938058 | 6458676 | 2026-04-24 | AI | 5, Drop D | no |
| The Alligator | s5083283 | 6647001 | 2026-05-05 | AI | 5 | yes |
| The Alligator | s2132594 | 2834004 | 2025-08-25 | AI | 4 | no |
| The Mutiny | s5083529 | 6647326 | 2026-05-05 | AI | 5 | yes |
| Asleep In The Trunk | s5085156 | 7798309 | 2026-07-08 | Editor, hand-built | 5 | stale copy |
| Asleep In The Trunk | s4937622 | 6458071 | 2026-04-24 | AI | 5 | no |
| My Mirror Hates Me | s5418315 | 7085816 | 2026-05-29 | AI | 5 | yes |
| Endless Summer | s5083970 | 6647906 | 2026-05-05 | AI | 5 | yes |
| Lazarus | s5082702 | 6646409 | 2026-05-04 | GP import | 3 | yes, this is the stale one |
| Lazarus | s5476396 | 7834445 | 2026-07-11 | Editor, hand-built | 5, with Vocals + Drums | no |
| Not Too Much | s5084025 | 6647986 | 2026-05-05 | AI | 5 | yes |
| Broken Satellites | s5084035 | 6648000 | 2026-05-05 | AI | 5, clean | stale copy |
| Broken Satellites BC version | s5965143 | 7791000 | 2026-07-08 | AI | 5 | no |
| Jackie | s5418285 | 7834599 | 2026-07-11 | Editor, hand-built | 4 | stale copy |
| Surgery | s5071338 | 6631358 | 2026-05-04 | AI | 5 | not an album track |
| The Truth About Cows | s5097434 | 6665514 | 2026-05-06 | AI | 5 | not an album track |
s5476396 holds Lead Guitar, Rhythm Guitar, bass, drums, and a Vocals staff at MIDI program 66. The three-track local file is simply an old GP import. Re-pull before deciding anything about Lazarus.
41 36 31 24. Rhythm Guitar Copy, the bass Copy, and the five-string standard tuning exist only in the local songsterr.gp. That is a local edit, so treat it as such rather than as a defect in the source.
shiner-tabs-a86009 and shiner-allen-epley-josh-newton-paul-malinowski-jason-gerken-tabs-a829768. The Mutiny, Endless Summer, Broken Satellites, and the new Lazarus live on the second page. Searching only the first one finds seven of the ten.
The canonical song folders are numbered by one order and the stem folders by another. They collide instead of missing cleanly, which is the dangerous kind:
| Album order | Canonical folder | Stem folder |
|---|---|---|
| 1 Asleep in the Trunk | 05_asleep_in_the_trunk | 01 - Asleep in the Trunk |
| 2 The Alligator | 02_the_alligator | 1-02 The Alligator-G major-120bpm-441hz |
| 3 The Mutiny | 08_the_mutiny | 03 - The Mutiny |
| 4 So Far So | 01_so_far_so | 04 - So Far So |
| 5 My Mirror Hates Me | 09_my_mirror_hates_me | 05 - My Mirror Hates Me |
| 6 Endless Summer | 07_endless_summer | 1-06 Endless Summer-Bb major-142bpm-440hz |
| 7 Lazarus | 04_lazarus | 1-07 Lazarus-G major-180bpm-440hz |
| 8 Not Too Much | 06_not_too_much | 08 - Not Too Much |
| 9 Broken Satellites | 03_broken_satellites | 09 - Broken Satellites |
| 10 Jackie | 10_jackie | 10 - Jackie |
Canonical 03_ is Broken Satellites. Stem 03 - is The Mutiny. Match on title, and ignore the leading digits entirely. Album order above comes from sources.yaml and the stem prefixes, which agree with each other.
The local file carries Rhythm Guitar Copy next to Rhythm Guitar, and a track literally named Copy next to the bass, plus a five-string standard B E A D G bass under a Drop C guitar. None of that is on Songsterr: the live revision returns five clean tracks with a Drop C bass. So the duplication happened locally. A part filled by duplicating another part is a duplication rather than a transcription, so run the octave-copy gate on the local file, and re-pull the live tab as the reference.
Songsterr's transcriber entered 3/4 explicitly. The MIDI metadata says 4/4 and so do the book cards. That is unresolved, and it changes every bar number in the song, so it has to be settled before bar-level correction on a 264-bar chart. The 2026-06-03 audit left the caveat that the song may open in 3/4 and move to 4/4.
Asleep in the Trunk and Jackie were separated to four stems, so their guitars are mixed into other. No amount of care on the tab will produce a per-attack guitar attribution from a stem that also contains keys and everything else. A pitch found in other does not prove the guitar played it. Both need re-separation to a six-stem model before they enter the queue.
RhythmGtr [L] and [R] files, so the two-guitar split can be validated against ground truth rather than inferred. Whatever the splitter concludes on Mutiny is the calibration for the other nine.audio_truth.gp3 from the 2026-06-02 stem pass. That gives a prior to regress against, and a resolved key at high confidence.s5476396 first. The vocal and drum staves exist there, so nothing has to be built from scratch.s5084035 and the 2026-07-08 s5965143, then correct./Volumes/T7 Shield/BandBooks/BELIEVEYOUME/_canonical_2026-06-04/songs/<NN_slug>/, each holding songsterr.gp, songsterr.mid, fromcdn.mid, 3guitar.mid, chart_GBV_TAB.md, lyrics.txt, stems_pointer.txt/Volumes/T7 Shield/Moises_Stems/BelieveYouMeStems//Volumes/T7 Shield/Full wav files for music books are here//Volumes/T7 Shield/BandBooks/BELIEVEYOUME/keys_resolved.yaml/Volumes/T7 Shield/BandBooks/BELIEVEYOUME/SONGSTERR_AUDIT_2026-06-03.md/Volumes/T7 Shield/BandBooks/BELIEVEYOUME/STEM_VS_MIDI_AUDIT_2026-06-03.md/Volumes/T7 Shield/BandBooks/BELIEVEYOUME/3-guitar-derivation//impossible-guitar-parts: grades a staff for playability and finds the two-guitars-on-one-staff cause/composite-stem-alignment: the beat-to-seconds map the audio checks depend on/songsterr-tab-guide and /songsterr-upload: build, diff, and push corrected tabs back, preflight first/five-stem-song-analyst and /audio-stems-to-midi: the vocal and bass evidence layer