Keep It Greasey: three verdicts
The three open defects on Frank Zappa's Keep It Greasey, drums by Vinnie Colaiuta, taken to a verdict against stated null models. Two close. One stays open and now says exactly how far short it falls.
2026-09-08 · s604777 / copy s6862054 at r8972975 · repairs applied: 0- The reproduction check that came first
- KIG-M003, the premise that did not survive
- KIG-M002, a change nobody could see
- The velocity trap across four staves
- A third route reaches the same finding on M002
- One drum staff, no percussion staff
- Staff-line numbers are per-tab
- A units error, and pitch-to-line inside one tab
- KIG-M004, still open, and by how much
- A second landmark family, and what it moved
- The clap timbre test, and the control that killed it
- The piecewise map, and why it was withdrawn
- The third family, and where the blocker moved
- The named method that supersedes my window-size fix
- The reference class this result sits in
- Step 5 started: MsDTW reproduces the known result
- A provenance error, and KIG-M001 verified
- A provably minimal repair, and its acceptance test
- An attribution corrected, and the standard provenance
- Read the source, do not grep it
- A provenance slip inside the provenance note
- A third recitation slip, and the write-time rule
- Superseded figures, and the queue I never read
- A count is a timestamp, and the 329 defect
- The 329 undercount, measured
- The song-wide pass: bar level holds, note level fails
- The subband representation: helps, not enough
- A bug fixed, and the fix made it worse
- The diagnosis put to the eye
- The path-shape lever, two ways
- Quantisation refuted, misses decomposed
- The missed positions are near-silent
- The map was fitted with the thing it was measuring
- The census filter, measured
- The acceptance test, controlled both ways
- A fourth recitation slip, caught by measuring
- The energy result is withdrawn
- The non-drum map
- The vocal map is invalid
- The bass map, a valid non-drum alignment
- Files and reproduction
1. The reproduction check that came first
An independent walk of the published Guitar Pro file returns every published figure from a separate route, so the file on disk is the file that was measured.
| Measure | Published bundle | This walk |
|---|---|---|
| drum note instances | 4,948 | 4,948 |
| ghost flags, all on MIDI 38 | 629 | 629 |
| resolved dynamics on those ghosts | ppp 12 / pp 94 / p 376 / mp 33 / mf 114 | identical |
| GM 39 hand-clap events | 21 | 21 |
| kicks after KIG-M001 | 1,312 | 1,312 |
2. KIG-M003, the premise that did not survive
The open item said 114 of the 629 ghost flags resolve to a dynamic of mf, that the two encodings disagree, and that nothing on hand decides which the transcriber meant. The first half of that is a reading error.
The 114 came from a resolved field, never an authored one
| Field | Where it lives | Beats carrying a value |
|---|---|---|
Songsterr velocity | on a beat, sticky and sparse | 989 of 3,756 |
GPIF <Dynamic> | on a beat, written by the exporter | 3,756 of 3,756 |
The Guitar Pro exporter resolves the sticky Songsterr value onto every beat, so reading the export hands each ghost a dynamic whether or not the transcriber wrote one there. Splitting the 114 by whether a mark was actually authored at that beat:
| The 114 "mf ghosts" | Count |
|---|---|
authored velocity: "mf" on that beat | 3 |
| inherited mf from an earlier, unflagged beat | 111 |
The control, and the null
Across the whole staff the transcriber authored 363 dynamics at ghosted notes. Every distribution below is a direct field count.
| Authored dynamic at a ghosted beat | ppp | pp | p | mp | mf | f | ff | fff |
|---|---|---|---|---|---|---|---|---|
| count | 6 | 69 | 262 | 23 | 3 | 0 | 0 | 0 |
| Gate N3, the chance baseline | Value |
|---|---|
| base rate of mf among the 989 authored dynamics, staff-wide | 44.3% |
| observed at ghosted notes | 3 / 363 = 0.83% |
| ratio, observed over chance | 0.019x |
| expected under independence | 160.8, observed 3 |
| binomial, two-sided | p = 3.0e-86 |
What the notation standard adds
Norman Weinberg's PAS drumset guidelines settle the symbol: a drumset ghost is a notehead change, never a point on a dynamic ladder. Guitar Pro naming the flag AntiAccent invites the ladder reading and the ladder reading is wrong. A ghost notehead inside an mf passage is well-formed notation, so the remaining 3 are not a defect either.
The transcriber's own words, in the file
Bar 22 beat 0 carries a text annotation:
The person who wrote the flags was tracking them bar by bar in this exact section.
Note 659 is never edited, so the copy-on-write that guarded 515 out-of-plan instances never has to run. The three authored-mf ghosts sit at bars 119, 124 and 227 and are recorded rather than repaired.3. KIG-M002, a change nobody could see
Twenty-one events on GM 39, Hand Clap, drawn at the snare staff position. The open item called the placement certain and the intent unrecoverable.
One, the figure is deliberate
| Bars | Section marker | Signature | Claps | Metrical slot |
|---|---|---|---|---|
| 22-32 | Verse 1 | 19/16 | one per bar, 11 | 16th 13-14 of 19 in ten of eleven bars |
| 42-44 | Verse 2 | 21/16 | 2-3 per bar, 8 | 16ths 7, 17, 19 of 21, repeated |
| 65, 82 | — | 4/4 | 1 each | 16th 11 of 16 |
The snare never thins inside those bars, running 4 to 8 events per bar throughout, so the claps are an added layer rather than a substitution. A stray GM number does not land on the same subdivision of eleven consecutive bars.
Two, the change is invisible to every reader
| Articulation | Name | Staff line | Noteheads |
|---|---|---|---|
| 0 | Snare (hit) | 3 | noteheadBlack noteheadHalf noteheadWhole |
| 84 | Hand Clap (hit) | 3 | noteheadBlack noteheadHalf noteheadWhole |
| 34 | Snare (side stick) | 3 | noteheadXBlack, a distinguishable option that was not used |
Songsterr agrees from its own side: all 21 claps and all 1,423 snares sit on string: 1.5, and its note schema has no notehead field. That is two field reads, so the question then went to the eye with a control.
| Bar 22 rendered from | Differing pixels against the published bar |
|---|---|
| a copy with the clap rewritten as GM 38 snare | 0 |
| a copy with the clap rewritten as GM 49 crash, positive control | 5,467, bbox x 1399-1575, y 420-725 |
The two source files differ by sha256 and the two render pages differ by sha256, and the control fires at the clap's own position in the bar, so the pipeline sees edits. Rewriting the clap as a snare produces a byte-identical PNG.


Three, no independent printed witness notates a clap
Marc Atkinson's Rock Charts transcription is the only complete-song printed chart on hand. Its music key lists tom-toms, snare, bass drum, hi-hat by hand and by foot, ride, crash and additional toms, with no clap, cowbell or auxiliary lane at all.

2b. The velocity trap across four staves, and the limit on it
A peer session reproduced the sticky-velocity finding and sent a spread. Every figure was re-fetched here from uncredentialed CloudFront reads of the live heads, not accepted. These are direct counts of a stored field, not detector output, so no chance baseline applies to any row.
| songId | Tab | Beats carrying velocity, out of all beats | Peer's figure |
|---|---|---|---|
| 604777 | Keep It Greasey, original, measured here | 989 of 3,756 | match |
| 35870 | Montana | 569 of 1,435 | match |
| 35886 | Muffin Man | 254 of 1,133 | match |
| 68246 | Alien Orifice | 2 of 1,006 | match |
ff and one fff. A Guitar Pro export of that tab carries 1,006 resolved values standing on 2 authored ones, so any dynamics conclusion drawn from it is a statement about the exporter.The limit, which carries more weight than the spread
ghost is a NOTE field and it is NOT sticky. On Keep It Greasey's MIDI 38 acoustic snare lane it appears on 0 of 3,756 beats and on 629 of 4,974 note objects, with no carry rule. A snare-lane ghost audit off the Songsterr JSON is therefore safe in the way a dynamics audit is not, and the M003 analysis above read ghost per note object and never carried it, so its 629 count was already correct.Two reproduction details found alongside
Montana s35870 has 18 tracks and its drums sit at index 15, with further drum tracks at 16 and 17. A scan capped at 14 parts misses the drum staff entirely. The meta's popularTrackDrum field gives the index directly and was confirmed as 15 here.
The part path is https://dqsljvtekg760.cloudfront.net/{songId}/{revisionId}/{image}/{trackIndex}.json, where {image} is the meta's image field, a v0-3-2-... string. Passing the per-track hash instead returns 403 on all three tabs. Responses are gzipped.
3b. A third route reaches the same finding on M002
A separate session measured this song with a two-hands playability gate, which shares no method with the rendering test or the field reads above. Its claims were re-derived here rather than accepted.
| MIDI | Name | Staff position, my own read | Events |
|---|---|---|---|
| 35 | kick | string 4 | 1,311 |
| 38 | snare | string 1.5 | 1,423 |
| 39 | hand clap | string 1.5 | 21 |
| 42 | hi-hat closed | string -0.5 | 533 |
| 44 | hi-hat pedal | string 4.5 | 195 |
| 46 | hi-hat open | string -0.5 | 428 |
Every value matches what the peer reported. Both versions of tr_score.py were then loaded here and run over all 4,948 events and 3,730 written instants:
| Version of the hands gate | over_hands | over_feet |
|---|---|---|
| fixed, keyed on staff line | 0 | 0 |
| backup, keyed on MIDI pitch | 3 | 0 |
| Bar | Position | Pitches | Names |
|---|---|---|---|
| 42 | 5 | 38, 39, 42 | snare, clap, hh closed |
| 43 | 5 | 38, 39, 42 | snare, clap, hh closed |
| 44 | 5 | 38, 39, 42 | snare, clap, hh closed |
Exactly the three beats claimed, at exactly the bars claimed, and they are the same collisions recorded above as (38, 39, 42) stacks. ./run_selftests.sh was also run here directly and returns ALL SUITES PASS, exit 0.
3c. One drum staff, no percussion staff, and what that removes
A peer session's track census reported this and it was re-derived here from the s604777 meta rather than accepted. Nine tracks, exactly one instrumentId 1024 staff at index 8 named Vinnie Colaiuta, and no staff named for tambourine, cowbell, shaker, conga, timbale or percussion anywhere. popularTrackDrum reads 8, matching.
| Reading | Where the clap goes | Hands cost |
|---|---|---|
| Vinnie strikes it on the snare surface | his own staff, snare line | 0 extra |
| Someone else overdubs it | his staff, for want of a percussion staff | 0, no drummer hand at all |
The verdict on KIG-M002 is unchanged: no change to the tab.
The peer's own correction, recorded because it bears on other songs. That session had told the record that Peaches En Regalia s35889 has no separate percussion track. It has a staff named tambourine at index 10. Their census had searched for percussion among staves whose instrumentId was not 1024, so a percussion staff carrying 1024 was invisible to it. Their published instant counts were not affected, because those already measured every 1024 staff rather than the first, and they checked rather than assumed. Nothing on this page depends on it, since Keep It Greasey has a single 1024 staff.
3d. Staff-line numbers are PER-TAB, and this page had been treating them as stable
The peer reported that a line value means something only inside one tab. Built independently here from the drum staff of five tabs, uncredentialed CloudFront reads, taking each pitch's most common line:
| Pitch | Alien Orifice 68246 | Muffin Man 35886 | Carolina 68248 | Idiot Bastard 68253 | Keep It Greasey |
|---|---|---|---|---|---|
| kick 35 | 4 | n/a | 4 | 5 | 4 |
| kick 36 | 3.5 | 3.5 | 3.5 | n/a | n/a |
| snare 38 | 1.5 | 1.5 | n/a | 4 | 1.5 |
| hatClosed 42 | -0.5 | -0.5 | -0.5 | 1 | -0.5 |
| hatOpen 46 | -0.5 | -0.5 | -0.5 | 2 | -0.5 |
| crash 49 | -1 | -1 | -1 | n/a | -1 |
| ride 51 | 0 | 0 | n/a | n/a | 0 |
| tambourine 54 | n/a | n/a | 1.5 | 1 | n/a |
s68253 uses a different one throughout, with kick down at 5, snare at 4 and the hats up at 1 and 2. Any global pitch-to-lane map built from these numbers is wrong.The Carolina case, corrected
s68248 puts tambourine 54 at line 1.5, that Carolina has no snare 38, and that a ported map therefore reads its tambourine as a snare with nothing to contradict it. The zero-38 part is right and the conclusion was not. The table above omitted a row.| Pitch | AlienOrifice | MuffinMan | Carolina | IdiotBastard | KeepItGreasey |
|---|---|---|---|---|---|
| snare 38 | 1.5 (207) | 1.5 (484) | n/a | 4 (139) | 1.5 (1423) |
| snare2 40 | 1.5 (23) | 1.5 (494) | 1.5 (229) | n/a | n/a |
| tambourine 54 | n/a | n/a | 1.5 (192) | 1 (342) | n/a |
| clap 39 | n/a | n/a | n/a | n/a | 1.5 (21) |
Carolina carries snare2 MIDI 40 at line 1.5 with 229 notes, so line 1.5 there genuinely is the snare line, with a real snare voice on it. My own filtering caused the error: the five-tab script listed a hardcoded set of pitches that omitted 40, so the row could not appear.
s68253's line 1 holds hatClosed (5) and tambourine (342). Both are tab-level sharing with instant-level solitude, and the density is what lets them coexist. One rule covers both.A recurring artifact the full table exposed
Listing every pitch also showed out-of-kit MIDI 65 sitting on the kick line in three of the five tabs: Alien Orifice 4 (2), Carolina 4 (3), Keep It Greasey s604777 4 (1). That last one is KIG-M001, the Timbale high corrected to kick 35 on the copy. The same artifact sits uncorrected in at least two other tabs, so it is a class rather than a one-off.
This explains the near-miss above
On s68253 both hatClosed 42 and tambourine 54 fall on line 1 across the tab, so a tab-level census shows them sharing. At each of the 118 instants the tambourine is still alone there, because hatClosed sounds only 5 times on the entire staff. Lane-level co-occupancy across a tab is not instant-level sharing.
string: 1.5 and its hats at -0.5. Those values are correct for this tab and must not be ported. The memory note behind them has been amended to carry the same warning, since as written it could have been read as a stable map.The peer's resolution of the 172, recorded as theirs
Their per-instant run-length test resolved the wider set: of the 172 non-kit instants, 155 are a second player, 16 are ambiguous four-bar runs on Call Any Vegetable s68241, and exactly 1 is a likely real drummer flag, an isolated single tambourine bar in Brown Shoes s35869. True catalogue two-hands failure count 611 rather than the 822 a naive read would have shipped. Not re-derived here, per the one-song rule.
3e. My correction of the peer's cell was itself a units error
s68253 as 4 (133) and that my read gave 4 (139), so I changed it.| Reading | Value |
|---|---|
| snare 38 on line 4 | 133 |
| snare 38 across the staff | 139, being 133 on line 4 plus 6 on line 2 |
| kick 35, all on line 5 | 133 |
Their 133 was per-line and my 139 was per-pitch. Both correct, counting different things. The table's other cells confirm the convention: hatOpen 46 reads 2 (171) while its staff total is 177. The cell is per-line, so 133 was right and I broke the convention by imposing my own units. Reverted, and the note now states its cell format explicitly.
A pitch-to-line map is wrong inside a single tab
The unfiltered census exposed something stronger than the per-tab rule above. Six of s68253's eleven pitches occupy two lines each:
| Pitch | Lines it uses |
|---|---|
| snare 38 | 4 (133) and 2 (6) |
| hatOpen 46 | 2 (171) and 1 (6) |
| tambourine 54 | 1 (337) and 0 (5) |
| tom 41 | 3 (2) and 4 (1) |
| tom 43 | 3 (5) and 1 (1) |
| crash2 57 | 1 (2) and 0 (1) |
string field, and never look a line up from a pitch in any scope.The same error shape hit both sessions in one exchange
My hardcoded pitch dict could not show midi 40. The peer's range(35,82) boundary could not show midi 65, because High Timbale sits inside GM percussion while sitting outside the standard drum kit, which is the whole point of that finding.
4. KIG-M004, still open, and by how much
Thirty-two kick onsets the score omits, listed by audio time only. Placing them needs an anchor, so one was fitted on kick and hi-hat only across bars 22 to 32, with snare and clap held out because the claps are the target and the snare shares their staff row and their stem.
| Measure | Value |
|---|---|
| winner | bar 22 downbeat at 35.980 s, scale 0.984 |
one-to-one match, mir_eval.onset, 50 ms | 121 / 172 = 70.3%, against a rotation-null baseline of 32.6% |
| busiest single detected onset | 1 |
| rotation null, 2,000 draws | mean 56.0, sd 14.28, 0 exceedances |
| z against the rotation null | 4.55 |
| # | Declared in advance | Result |
|---|---|---|
| 1 | unique maximum, no tie inside 1 match | PASS, 0 competing cells |
| 2 | match rate at least 2.0x the surface median | PASS, 2.01x |
| 3 | z at least 5.0 | FAIL, z = 4.11 |
| 4 | busiest single onset absorbs at most 3 | PASS, 1 |
| 5 | scale inside 0.94 to 1.06, off the boundary | PASS, 0.984 |
verdict_gate.py, the numeric engine shipped with the notation gate, returns UNDETERMINED on the same numbers independently. Under the pre-registration's own rule the clap timbre test never ran.
The one thing worth carrying forward
The fitted 35.980 s sits within about a second of DRUM! Magazine's printed "Verse 1 at 0:35", a source that never entered the fit and shares no method with it. The score's own constant-tempo timeline says 38.217 s and drifts to 517.9 s against 501.8 s of real audio, so the notated tempo map is the thing that is off.
That agreement is recorded as one candidate landmark. The absolute bar identity gate requires twelve across two source families, six each, so no bar position is claimed from it. The obvious second family, sung-lyric onsets from the isolated vocals stem, is unavailable: the score's newLyrics field holds five entries and every text value is empty, so the lyrics would have to be entered by hand first.
4b. A second landmark family, found by not accepting the first dead end
newLyrics field is empty. That read one closed path as no capability. Lyric text was never what the family needed. The Ike Willis vocal part carries 458 notated attacks across 79 bars with full bar positions, and the vocals stem is isolated.Two families, fitted separately, sharing no stem and no notated part
| Family | Fitted on | Stem | Bar 22 downbeat | Scale |
|---|---|---|---|---|
| A | kick + hat, bars 22-32, 172 attacks | kick, hat | 35.980 s | 0.984 |
| B | Ike Willis vocal part, 437 attacks | vocals | 36.136 s | 0.978 |
They disagree by 156 ms. A 19/16 bar here runs about 2.09 s, so both land on the same bar. The 2026-09-07 gate failed its primary external-family requirement because lead and bass disagreed by 2.673 s.
The integer-shift contest
| Shift | Family A, kick+hat | Family B, vocals |
|---|---|---|
| -2 bars | 67/172 (39.0%) | 132/437 (30.2%) |
| -1 bar | 88/172 (51.2%) | 118/437 (27.0%) |
| 0 | 121/172 (70.3%) | 163/437 (37.3%) |
| +1 bar | 79/172 (45.9%) | 130/437 (29.7%) |
| +2 bars | 73/172 (42.4%) | 139/437 (31.8%) |
Zero shift wins separately in both families, by +33 and +24 matches over the nearest competitor. That is the condition the earlier pass failed, where kick, snare, hat and tom all leaned to plus one bar.
| Family | Matched | Median absolute residual | 90th percentile |
|---|---|---|---|
| A, kick+hat | 121 | 17.6 ms | 42.3 ms |
| B, vocals | 163 | 28.8 ms | 52.1 ms |
The gate asks for a median under 75 ms and a p90 under 150 ms. Both families clear both, inside the fitted span.
What still blocks M004, precisely
The anchor is local and it does not extrapolate. Carried across the whole recording it collapses to chance.
| Whole-song extrapolation | Value |
|---|---|
| offset, scale, tolerance | 35.980 s, 0.984, 60 ms |
| one-to-one kick match, against a 32.6% rotation-null baseline | 512 / 1,311 = 39.1%, ratio 1.20x, which is chance |
verdict_gate.py --counts | UNDETERMINED, under the 2.0x floor |
| predicted score end | 508.0 s against 501.84 s of real audio, drift +6.1 s |
ABSOLUTE_ANCHORS.csv was hashed, so the twelve-landmark gate is not claimed as passed.Net movement: bar identity at bar 22 now has two-family corroboration and wins its shift contest, where it previously had neither. Placing the 32 events needs a piecewise map with landmarks bracketing each one.
4c. The clap timbre test was run, and its own control killed the interesting part
Pre-registration v2, sha256 383fe83e...25f0b7, written with no timbre yet measured. v1 stays failed and none of its thresholds were moved. v2 rests on the two-family anchor that did not exist when v1 was written, and declares the same timbre thresholds v1 declared.
The declared test returned UNEVALUABLE
Entry rule fixed in advance: an instant enters only if a detected snare-stem onset lies within 60 ms of it.
| Population | Notated | Entered | Dropped |
|---|---|---|---|
| target, the 11 GM 39 claps | 11 | 0 | 11 |
| control, the 58 same-bar GM 38 snares | 58 | 33 | 25 |
Zero of eleven entered, so neither the centroid nor the low-band comparison could run.
The post-hoc observation, and the control that withdrew it
Not pre-registered, and reported here because it looked like a finding. The 11 clap instants scored 0 in the snare stem while the same-bar notated snares scored 33 of 58 = 56.9%, giving a binomial p = 9.5e-05. That baseline was circular, comparing beats with no notated snare against beats that have one.
| Group, bars 22-32, snare stem, 60 ms | n | Hits | Rate |
|---|---|---|---|
| clap, no snare on the beat | 11 | 0 | 0.0% |
| kick-only, no snare on the beat | 69 | 8 | 11.6% |
| snare on the beat | 58 | 33 | 56.9% |
For completeness, 9 of the 11 clap instants do carry an onset in at least one of the seven stems, so the anchor is not wrong at those instants. Twelve of the 21 claps stack with a notated kick, which accounts for the hits in the kick, cymbal and other lanes.
4d. The piecewise map was built, and it failed its own external check
Pre-registration sha256 2e328671...3e80f10, hashed in advance of any window fit. M004 was waiting on this step, so it was run rather than queued.
Sixty windows, 8 score bars wide stepping 4, each fitted independently on kick and hat only, offset searched across the whole 501.84 s, scale 0.93 to 1.07, one-to-one at 50 ms. Fifteen windows passed the four declared criteria and placed 64 surplus kick onsets across 48.3% of the recording.
Then the control ran
The same two-family logic that made the bar-22 anchor credible, applied per window at that window's own offset and scale, tolerance 60 ms: does the isolated vocals stem corroborate it?
| Passing window | Drum offset | Vocal family's own best | Disagreement |
|---|---|---|---|
| bars 10-17 | 38.345 s | 84.500 s | +46.155 s |
| bars 38-45 | 69.325 s | 4.500 s | -64.825 s |
| bars 42-49 | 77.230 s | 77.440 s | +0.210 s |
One of three testable windows corroborates. The other twelve sit in the instrumental solo and carry too few vocal attacks to test, so they are UNEVALUABLE rather than passing.
The lesson, which is the useful output
An 8-bar window carries too little information to lock uniquely across 501.84 s of a dense, repetitive drum part. Spurious locks cleared the declared 2.0x rotation-null threshold, so 2.0x was too loose at this window size. Raising it alone is not the fix, since refitting a declared threshold on the same data is the error these gates exist to stop.
- A window must be corroborated by a second family to place anything. Only 3 of 15 were testable, so the vocal part cannot reach the solo section and a third family is needed there.
- Monotonicity must be enforced against passing neighbours, and the code must assert a window's offset lies in a plausible band for its bar range. Bar 210 at 42 s should have been rejected ahead of any statistic.
- The search should be local. A free full-song search per window invites the spurious lock that produced +46 s and -65 s.
4e. The third family exists, and finding it moved the blocker
The previous section named the next step as find a corroboration family reaching the instrumental solo, since the vocal part stops at bar 101. That search was run rather than queued.
| Notated part | Total bars | Bars inside 100-240 | Stem |
|---|---|---|---|
| Arthur Barrow, bass | 222 | 139 of 141 | bass |
| Warren Cuccurullo, part 7 | 164 | 139 of 141 | rhythm |
| Frank Zappa, solo | 21 | 21 | lead |
| Ike Willis, vocals | 79 | 2 | vocals |
The "no family reaches the solo" blocker is dissolved. Two candidates cover it, and a third covers the solo passage itself.
The bass cross-check, and why it is not carried as a refutation
The bass family made all 15 previously-passing windows testable, where the vocal family could test only 3. Every one of the 15 disagreed with its window's drum offset, by between 3.985 s and 405.500 s.
| Window | Bass attacks | Peak | Surface median | Ratio |
|---|---|---|---|---|
| 10-17 | 86 | 72 | 44.0 | 1.64x |
| 38-45 | 69 | 55 | 35.0 | 1.57x |
| 42-49 | 66 | 53 | 34.0 | 1.56x |
| 102-109 | 96 | 83 | 50.0 | 1.66x |
| 150-157 | 96 | 86 | 47.0 | 1.83x |
| 166-173 | 96 | 87 | 46.0 | 1.89x |
| 170-177 | 96 | 88 | 46.0 | 1.91x |
| 174-181 | 96 | 87 | 47.0 | 1.85x |
All eight clear the 1.5x floor, and all eight clear it narrowly, against a surface median near 51%. Gate N4's own warning covers this: above a 35% null a small excess goes significant while meaning little. Compare the whole-part vocal fit at 7.65x and the bars 22-32 drum fit at 2.01x. A second contributor: the score notates 2,424 bass attacks while the bass stem yields 1,825 onsets, so 599 can never match and a perfect map still caps near 75%.
4f. The window-size fix is superseded by a named method
What was built here was the wrong shape. Sixty windows, each fitted by an independent free search across the whole 501.84 s, with nothing tying one window's answer to its neighbour except a monotonicity check applied afterwards. That is how a window covering bars 210-217 came back at 41.980 s. Widening the windows would have reduced that failure without removing its cause.
The named methods
None of the four was run in this pass, so for every one of them the offset, scale, tolerance and match rate are all not applicable here.
- Multiscale DTW (MsDTW), Müller, Mattes and Kurth, ISMIR 2006. Coarse-to-fine: a low-resolution result is projected onto the next level and refined inside a bounded region, which supplies exactly the neighbour bound this run lacked.
- Path-constrained partial synchronization, Müller and Appelt, ICASSP 2008. Built for the case where only parts of two sequences correspond, which is this case, since the drum staff runs 248 bars while any one family covers a subset.
- Subsequence DTW and common subsequence matching, FMP C7S3. Matches a short query against any subsequence of a reference, the right primitive for one region without a whole-song map.
- Music synchronization with chroma features, FMP C3. The chapter the whole task belongs to.
Two setup facts, corrected after trying
The FMP source text is catalogued in this project at /Volumes/Black/complete/Springer/ and that volume is not mounted on this machine right now, so the chapter was not read here. The method names, authors and venues come from the search.
libfmp is now installed, and it was not the one-line install this page first claimed. Three attempts into ~/.venvs/notation-gate each reported exit 0 while the log ended partway through a 20.1 MB music21 download, with import libfmp still failing. A fourth run, left fully detached with no timeout, completed, and the import now succeeds. The earlier failures were the install being cut off partway, never a broken package.Neither gap blocks the next attempt. MsDTW needs only numpy and scipy, and the FMP notebooks are readable on the web at the links above.
6. The reference class this result sits in
A peer session tested the completeness of the 38-id scope list the Zappa program works from. The two headline figures were re-derived here by paging /api/songs directly, not accepted.
| Measure | This session | Peer |
|---|---|---|
Tabs filed under artistId 5912 (see section 14: this is not a count of Zappa tabs) | 329 | 329 |
of those carrying an instrumentId 1024 staff | 262 | 262 |
| ids the program has been sweeping | 38 | 38 |
| never measured | 230 | 230 |
artistId=5912 to /api/songs and got 600 rows back whose first entry was Metallica. That parameter is ignored. The working form is ?pattern=Frank+Zappa&size=100&from=N, paged, then filtered client-side on artistId == 5912, saturating at 329 by from=400.What this does to the Keep It Greasey result
What it does change
It changes what a clean result would mean if anyone generalised from the program. The 38 ids are not a random draw from 262. A tab enters that list because someone had a reason to look at it, so the set is selected, and a low defect count across selected tabs licenses nothing about the other 230.
| Final sweep | Count |
|---|---|
| tabs measured | 262 of 262, 0 failures |
| tabs carrying work | 36 |
| three-surface instants | 822 |
The 822 must not be read undecomposed, because three different things were being summed:
| Class | Count |
|---|---|
| kit-only, three separate kit surfaces (SUPERSEDED, see section 13) | |
| tambourine / clap / cowbell dependent | 172 |
| on a pitched-percussion staff, the peer's own false positive | 40 |
Corrected kit-only ranking: Flakes s35897 270, Tryin' to Grow a Chin s68245 78, Brown Shoes Don't Make It s35869 54, Filthy Habits s68237 24, King Kong Itself s35863 21, Let's Move To Cleveland s68238 18, Sinister Footwear II s21874 16, Mother People s60347 16, Carolina s68248 15, Dog Breath Variations s68247 9.
Two structural claims I did re-derive, because this page republishes them
| Claim | My read of the meta |
|---|---|
Flakes s35897 has two instrumentId 1024 staves | CONFIRMED: index 6 named "Percussion Organ", index 8 named "Drums", both non-empty, popularTrackDrum 8 |
The Idiot Bastard Son s68253 has a drum staff | CONFIRMED: one 1024 staff at index 3, popularTrackDrum 3 |
The pitched-percussion artifact is the same class as KIG-M001
A staff named "Percussion Organ" carrying instrumentId 1024 holds melodic pitches while wearing the drum instrument id, and the sweep counted its events as drum-kit failures until the peer caught it. That is 40 of the 822.
fret 65 Timbale high sitting on a lane carrying 1,311 kicks and nothing else. KIG-M002 is a GM 39 hand clap drawn on the snare line. In all three cases a GM number or an instrument id does not mean what a reader assumes, and the fix is the same each time: read the field the human acts on, which is the staff line, never the pitch.What the 172 does to KIG-M002
The clap question looked local when it was 21 events in one song. The finished sweep puts 172 of the 822 instants on the tambourine, clap and cowbell question, and The Idiot Bastard Son s68253 carries 118 instants of which zero are kit-only, with 112 of the 118 being hatOpen plus snare plus tambourine.
Why Keep It Greasey's case works, and the 172 do not
At KIG bars 42-44 the GM 39 clap sits on string 1.5, the same line as the snare, with a snare sounding at the same instant. Two surfaces either way, so removing the clap changes nothing. Measured here on the largest affected tab, The Idiot Bastard Son s68253, revision 704236, drum staff index 3, 817 events, uncredentialed CloudFront read:
| Measure | Result |
|---|---|
| three-line instants containing MIDI 54 tambourine | 118 (peer said 118) |
| of those, MIDI 54 alone on its line at that instant | 118 |
| of those, MIDI 54 sharing its line | 0 |
| instants that fall to two hand lines once the tambourine is removed | 118 of 118 |
A sample instant reads (54, line 1), (46, line 2), (38, line 4), which is tambourine, open hat and snare on three separate lines.
| Reading | Surfaces at that instant | Verdict |
|---|---|---|
| the drummer strikes the tambourine | three separate lines | real failure |
| another player overdubs it | two drummer lines | not a failure |
The lane position varies per tab, at 0, 1, 1.5 and 5 across the five affected songs, which is itself evidence the transcribers gave the tambourine a deliberate separate lane rather than folding it onto a kit surface.
Nothing about Keep It Greasey changes. M002 stays closed at no change, and the 21 GM 39 events stay exactly as Ben Dibden1 wrote them.
4g. Step 5 started, and the method reproduces the known result
The method was named earlier and the work deferred at that point. That deferral has ended: libfmp now imports, so the subsequence-DTW primitive from FMP C7S3 was run here on the one window whose answer two independent families already agree on. The criterion was fixed in the script ahead of reading the result: the recovered bar-22 downbeat must land within one 19/16 bar, 2.095 s, of 35.980 s.
Setup. Reference is the pooled kick and hat onset envelope across the whole 501.84 s at a 50 ms hop, 10,037 frames. Query is the score's own kick and hat attacks for bars 22 to 32, 172 attacks over 23.4 s, 470 frames. Parameters for every row below: offset is what the run recovers rather than an input, scale is not a parameter of this method since the path is free to warp, tolerance is the 50 ms frame hop, and the match rate is replaced by a mean accumulated cost of 0.0183 over a 511-step path.
| Method | Bar 22 downbeat |
|---|---|
| kick+hat matched filter | 35.980 s |
| Ike Willis vocals matched filter | 36.136 s |
subsequence DTW, libfmp C7S3 | 36.300 s |
Path spans reference frames 726 to 1182, 36.300 s to 59.100 s, a 22.8 s span against the 23.05 s the score's eleven 19/16 bars occupy at 136 BPM.
Why this carries more than a fourth number
The two matched filters share a model, one offset and one scale. Subsequence DTW lets the path warp, so it is a different method class rather than a third run of the same idea, and it lands in the same place without being told where to look. The recovered span also matches the notated duration of the section, which the run was never given.
7. A provenance error of mine, and KIG-M001 verified properly
kig_songsterr_rows.json, the dataset behind the clap and dynamics tables above, was built from s604777_r8852151_part8, the ORIGINAL. My verification script labelled it the copy, so it compared the original against itself.| Source | kick 35 | MIDI 65 | snare 38 | clap 39 | ghosts | beats |
|---|---|---|---|---|---|---|
s604777 original r8852151, part JSON | 1,311 | 1 | 1,423 | 21 | 629 | 3,756 |
s6862054 copy r8972975, published .gp | 1,312 | 0 | 1,423 | 21 | 629 | 3,756 |
What it does to the figures here: nothing, and why
Every other column is identical between the two files, because KIG-M001 touched one note in bar 231. Snare 1,423, clap 21, ghosts 629, beats 3,756 and velocity beats 989 all hold on both, so the clap and dynamics tables are correct as published.
What it does to provenance: one row was mislabelled and is fixed
The four-stave velocity table credited 989 of 3,756 to 6862054. The measurement came from 604777. Corrected in place; the number never changed, the label was wrong.
s604777 r8852151 part JSON; the reproduction check in section 1 is measured on the published copy s6862054 r8972975 .gp. Both stated rather than left to be inferred.The MIDI 65 class is six tabs, not three
My five-tab census found Alien Orifice 2, Carolina 3 and Keep It Greasey 1, all three exact against the peer's full 262-tab rescan. The two it could not reach are the large ones: Seal Call s604408 at 33 and The Deathless Horsie s35885 at 28, and on Seal Call the timbale outnumbers the kick on their shared line, 33 against 25. A five-tab sample sized the class at half its real membership, which is the reference-class point applied to my own finding. Those counts are the peer's and are not re-derived here.
8. The KIG-M001 repair is provably minimal, and that yields an acceptance test
Both sessions censused the two files independently and agree on every cell.
| Measure | s604777 original r8852151 | s6862054 copy r8972975 |
|---|---|---|
| beats | 3,756 | 3,756 |
beats with velocity | 989 | 989 |
| snare 38 | 1,423 | 1,423 |
| clap 39 | 21 | 21 |
| ghost-flagged notes | 629 | 629 |
| kick 35 | 1,311 | 1,312 |
| MIDI 65 | 1 | 0 |
989 of 3,756 holds on both files, so it was right measured on either. Neither session could have known the two files agreed without checking, which is why the relabelling above was correct regardless.The acceptance test for any repair of this class
| Tab | kick prior | MIDI 65 | kick after | base count source |
|---|---|---|---|---|
Seal Call s604408 | 25 | 33 | 58 | peer, not re-derived here |
The Deathless Horsie s35885 | 674 | 28 | 702 | peer, not re-derived here |
Packard Goose s35875 | 10 | 4 | 14 | peer, not re-derived here |
Carolina s68248 | 8 | 3 | 11 | matches my own census |
Alien Orifice s68246 | 8 | 2 | 10 | matches my own census |
Keep It Greasey s604777 | 1,311 | 1 | 1,312 | matches, already demonstrated |
All six rows are arithmetically consistent, and three of the base counts were confirmed by my independent five-tab census.
Why a full census catches what a targeted check cannot
A check aimed at the edited note cannot see collateral damage. A peer session earlier lost 179 note instances across 79 bars by editing a shared GPIF Beat in place, and the edit looked correct at the target. A full census would have shown a count moving that nobody intended.
range(35,82) filter had erased MIDI 65 entirely.9. An attribution I got wrong, and the standard's real provenance
The 179 is grounded, checked here
reference_gpif_note_beat_dedup_copy_on_write documents it: removing 15 refuted notes from CODA-s6857183-Brandon-edit.gp by editing shared beats in place deleted 179 note instances across 79 bars that were never targeted, because <Beat> id 899 is referenced by 176 voices. The damaged file was quarantined rather than deleted. The standard's strongest claim rests on a measured case, not an anecdote.
The correction makes the standard stronger
| Session | Contribution |
|---|---|
| Watermelon In Easter Hay | the collateral-damage case, 179 instances across 79 bars |
| Keep It Greasey, here | the minimal-repair demonstration, 2 of 7 cells moved |
| the 262-tab census | the class it generalises to |
A pre-write check the note was missing
The census runs after an edit. The matching check that runs ahead of an edit is the id histogram: a plan whose rows repeat one id is editing a shared definition. The Watermelon removal plan printed the same note id 13 times and the same beat id 12 times, and that was the tell.
The peer independently verified the note against their own measurements: the seven-row KIG table matches cell for cell, the six-row acceptance table holds arithmetically, both wikilinks resolve, and the MEMORY.md index line is correct.
10. Read the source, do not grep it, and a citation of mine that proves it
The peer reported they had verified the grounding note and found it sound. They had grepped it, not read it, and the pattern 179|79 bars|shared|in place matched none of the terms in its most actionable sentence. They caught that themselves and said so.
| I wrote | Measured here |
|---|---|
| the tell sits at line 65 | line 67, the last line of a 67-line file |
| my census note is 74 lines | 73 lines, pairing at 56, provenance at 65 |
Both came from reciting what I remembered reading rather than re-opening the file. Corrected in the handoff, the only place they appeared.
Four instances of one failure, in a single exchange
| Filter chosen ahead of the question | What it could not show |
|---|---|
my hardcoded pitch dict {35,36,38,42,46,49,51,54} | midi 40, Carolina's snare2 at line 1.5 with 229 notes |
the peer's range(35,82) boundary | midi 65, inside GM percussion and outside the drum kit |
the peer's grep 179|79 bars|shared|in place | line 67, the sentence that mattered most |
| my own recollection of a line number | that it was 67, not 65, and the file 73 lines, not 74 |
The rule that generalises it
Recorded as feedback_read_the_source_do_not_grep_it_when_citing_grounding and indexed in MEMORY.md, since it applies well beyond this project.
The line that was nearly lost
Histogram ahead of the write, census after it. For the five outstanding MIDI 65 repairs both apply, and the histogram counts most on Seal Call s604408 at 33 notes and The Deathless Horsie s35885 at 28, the two large enough that a shared-beat reference is plausible.
11. A provenance slip inside the note that argues for provenance
The peer read the new rule note end to end rather than grepping it, which is the only honest way to check a note whose rule is "read it, do not grep it". Their verification, re-checked here:
| Claim | Measured |
|---|---|
| the note is 44 lines | 44 |
reference_prove_a_repair_is_minimal_by_full_census_diff resolves | 73 lines |
reference_gpif_note_beat_dedup_copy_on_write resolves | 67 lines |
feedback_ground_every_claim_label_provenance_hard_gate resolves | 32 lines |
| indexed in MEMORY.md | line 203, correct hook |
What reading it caught that a grep would have passed
The fourth table row read: "reciting a line number from memory | that the line was 67, not 65, and the file 73 lines, not 74".
reference_gpif_note_beat_dedup_copy_on_write, which is 67 lines. The 74-versus-73 mistake was in reference_prove_a_repair_is_minimal_by_full_census_diff, which is 73 lines. As written the row implies one file that is 73 lines and has a line 67, and no such file exists. A provenance slip inside the note that argues for provenance. Corrected.Why my instance is the worst of the four
A related shape: a check positioned where it cannot act
| Check | Why it could not act |
|---|---|
| my anti-AI voice gate | run after the deploy command on one shell line, joined by ; rather than &&. It scored 23 against a threshold of 20 and the failing page shipped anyway |
| the peer's stop gate | cannot clear a turn-count ceiling from inside the session it is counting |
&&. Applied to this section's own deploy.12. A third recitation slip, inside the message documenting recitation slips
The peer read the note again end to end and flagged one figure. They are right: I wrote that the note was 64 lines and it was 63.
| Written from memory | Measured |
|---|---|
| the tell is at line 65 | line 67 |
| the census note is 74 lines | 73 |
| this note is 64 lines | 63 |
The operational fix, which "read the source" does not cover
Reading a document is the rule for citing it. For a number about a document the rule has to be stricter, because a number can be recited long after the file was read and nothing in the text signals that it has drifted.
The peer's catalogue sweep, final, recorded as theirs
262 of 262 Zappa drum tabs measured, 611 real two-hands failures after decomposition, and 172 of 172 non-kit instants resolved to 155 second-player, 16 ambiguous, 1 real. The MIDI 65 class is fully specified at target 35 across six tabs with acceptance counts. Not re-derived here, per the one-song rule.
13. Two figures here are superseded, and a plan I queued was wrong
run_gates.py, 852 lines: HANDOFF_PATH = re.compile(r"SVG/\[[^\]]+\]") and handed = bool(HANDOFF_PATH.search(tail)). One substring in the current reply clears G20. It was never a turn-count trap.Reading the standing queue, which I never did
Measured: 216 open Zappa and Songsterr items, 141 predating today. I added items all session without once reading what was already there. Two consequences, both mine.
One: a plan I queued was wrong on three of six tabs
q-2026-09-08-335753 specified converting MIDI 65 to 35 on all six, preserving line 4. That conflicts with q-2026-08-31-227358, in_progress since 2026-08-31, which says the 8 stray lane-35 kicks on Alien Orifice s68246 and Carolina s68248 should normalise onto lane 36, the house convention used alone by 13 of 20 songs. My plan adds notes to the lane that item wants emptied.
q-2026-09-08-764f1b: on the three tabs carrying both kicks, send the stray 35s and the 65s to 36, one edit rather than two. The target stays 35 only on s604408, s35885 and s604777, where the kick already lives on line 4 alone. My item is closed and replaced by q-2026-09-08-757b21.Two: this page published a superseded count
It carried 610 kit-only and 611 catalogue failures as current. q-2026-09-08-501572 shows 610 is an over-count: 84 of those instants pair two same-instrument pitches on different staff lines, being 48 two-hi-hat, 17 two-snare, 15 two-tom and 4 two-cymbal.
The rule now covers more than documents
| Never opened | What it could not show |
|---|---|
| the standing queue being added to | 216 open items, 141 predating the session, and one in_progress plan the new one contradicted |
| the gate being complied with | that one substring clears G20 |
feedback_read_the_source_do_not_grep_it_when_citing_grounding, now 98 lines, measured at write time.14. A count is a timestamp, and my 329 census carries the same filter defect
The queue disagreement resolves, and it is entirely filter definition
Two sessions counted the same shift_queue.jsonl and reported 216 open against 141. Measured again here at 2026-09-09T03:34:47Z, with the pattern pasted rather than named:
| Filter, pattern stated | Open | Predating 09-08 | On 09-08 |
|---|---|---|---|
zappa|greasey|montana|muffin|watermelon|zomby|inca|flakes | 182 | 124 | 58 |
the same plus timbale|midi 65 | 182 | 124 | 58 |
the same plus songsterr|s\d{5,7} | 209 | 143 | 66 |
| no filter at all | 351 open, 589 distinct ids | ||
The rule this yields, theirs, stronger than mine
My 329 catalogue count has the same defect
This page publishes 329 Zappa tabs and 262 with a drum staff. Both came from paging /api/songs?pattern=Frank+Zappa and filtering client-side on artistId == 5912. The peer reports a tab filed under artistId 67452 "Unknown Artist" rather than Zappa, which such a filter can never see.
I could not verify that tab uncredentialed. s6627570 returns ERR_UNPUBLISHED, "Only authors can view their own unpublished tabs", so their reading came from a signed-in session.
artistId 5912, never a count of Zappa tabs, and the difference is exactly the filter mechanism this whole exchange is about. Any Zappa tab under another artist id is invisible to it, and the 262 drum-staff subset inherits the same ceiling.Recorded in feedback_read_the_source_do_not_grep_it_when_citing_grounding, now 112 lines, measured at write time.
15. The 329 undercount has a measured size, and I repeated the filter error finding it
The peer showed the artistId ceiling is reproducible without credentials, so it was re-derived here rather than left queued. Measured 2026-09-09T03:42:05Z, rule stated rather than named: artist name matches zappa|mothers\s+of\s+invention, case-insensitive, over 1,705 rows paged from /api/songs for Frank+Zappa, Zappa and Mothers+of+Invention.
| artistId | Artist | Tabs |
|---|---|---|
| 5912 | Frank Zappa | 329 |
| 42853 | Dweezil Zappa | 16 |
| 434594 | Frank Zappa, The Mothers | 9 |
| 101599 | Zappa | 6 |
| 474498 | frank zappa | 5 |
| 404381 | Frank Zappa, The Mothers Of Invention | 4 |
| 565748 | Frank zappa | 4 |
| 403168 | The Mothers of Invention | 4 |
| 24 further ids at 1 or 2 each | ||
| Count | |
|---|---|
under artistId 5912 | 329 |
| under other Zappa or Mothers ids | 77 across 31 ids |
| total | 406 across 32 ids |
The residual is classification, not measurement. Of the 77, some are plainly other acts: Dweezil Zappa at 16, Zappa plays Zappa, Ozzy Osbourne & Dweezil Zappa, and two surname collisions, Zappacosta and Alfie Zappacosta. Others are plainly Frank under a variant spelling: frank zappa, Frank zappa, Frank ZappA, Frank Zappa., Frank Vincent Zappa, Frank Zappa 2. A crude Dweezil filter puts the split at 58 Frank against 19 other; the peer put it at about 51 against 26. The gap is which side the collaboration rows fall on, and it should be settled by naming each row rather than by a regex.
I repeated the filter error while measuring the filter error
zappa|mothers and returned 479 across 47 ids. Its own top rows say why: The Modern Mothers Of Modern Day Science at 25, Mothers Milk at 24, The Buzz Mothers at 9, none of them Zappa. The word "mothers" alone matches any band containing it.What stays queued
q-2026-09-08-2f523c had two halves. The reproducible half is done and is above. The half that remains needs a signed-in browser read, since s6627570 returns ERR_UNPUBLISHED to anonymous requests and sits under artistId 67452 "Unknown Artist", outside even the 406. Unpublished and misfiled tabs cannot be counted from an uncredentialed session at all.
16. The song-wide pass ran. The map holds at bar level and fails at note level.
Pre-registered and hashed with nothing yet computed, sha256 47adf4eb...533b90a. This is the step KIG-M004 had been waiting on. Parameters, stated once for every row: offset recovered rather than supplied, scale is not a parameter since the path warps freely, tolerance 60 ms at note level, one-to-one match rate 510/1,311 = 38.9% against a 25.1% rotation-null baseline.
Coarse pass at a 200 ms hop, 2,595 score frames against 2,510 audio frames, 6.5 million cells, path length 3,247, projected to a 50 ms grid and refined inside a plus or minus 2.0 s band, the constraint region the piecewise run lacked.
| Declared check | Result |
|---|---|
| bar 22 within 2.095 s of 35.980 s | PASS at 36.017 s, 37 ms out |
| monotonic across all bars | PASS, 248 of 248 |
| every bar inside 0 to 501.84 s | PASS |
Then the placement step returned an impossible number
The real measurement, one-to-one on the mir_eval convention
| Tolerance | Kick one-to-one | Median absolute residual |
|---|---|---|
| 30 ms | 299/1,311 = 22.8% | 14.5 ms |
| 50 ms | 460/1,311 = 35.1% | 24.0 ms |
| 60 ms | 510/1,311 = 38.9% | 26.4 ms |
| 100 ms | 712/1,311 = 54.3% | 39.2 ms |
| 200 ms | 852/1,311 = 65.0% | 57.3 ms |
Rotation null at 60 ms, 300 draws: mean 25.1%. Observed 38.9%, gain +13.8 points, z = 9.13. verdict_gate.py returns UNDETERMINED, at 1.55x against a 2.0x floor.
What this pass did settle
17. The subband representation was built and run. It helps, and it is not enough.
Log-compressed spectral novelty per subband, FMP 6.1.2, replacing the pooled envelope: STFT 2048 hop 256, log(1 + gamma * |X|), positive first differences summed inside a band, local-average subtraction, half-wave rectify. Kick band 30-180 Hz at gamma 100, hat band 4-16 kHz at gamma 10. Every row below is a full coarse-to-fine map at offset recovered, no scale parameter, 60 ms tolerance.
| delta | kick det | hat det | bar 22 | error | one-to-one | null | ratio |
|---|---|---|---|---|---|---|---|
| 0.06 | 1,935 | 1,113 | 34.417 s | 1.563 s | 44.2% | 34.7% | 1.27x |
| 0.10 | 1,493 | 1,035 | 38.017 s | 2.037 s | 39.4% | 26.5% | 1.49x |
| 0.14 | 1,373 | 942 | 36.017 s | 0.037 s | 42.6% | 25.3% | 1.69x |
| 0.18 | 1,350 | 869 | 36.017 s | 0.037 s | 42.0% | 25.1% | 1.67x |
| 0.24 | 1,329 | 773 | 36.017 s | 0.037 s | 39.7% | 25.0% | 1.59x |
| 0.30 | 1,301 | 686 | 36.217 s | 0.237 s | 41.2% | 25.2% | 1.64x |
delta 0.06 has the highest raw match rate at 44.2% and the worst ratio at 1.27x, because over-detecting 1,935 kicks against 1,311 notated inflates its own rotation null to 34.7%. A first pass picked that row as "best by match rate", which was wrong, and the null column is what shows it.| Pooled envelope | FMP 6.1.2 subband | |
|---|---|---|
| kick one-to-one at 60 ms | 38.9% | 42.6% |
| rotation null | 25.1% | 25.5% |
| ratio | 1.55x | 1.67x |
| bar 22 error | 37 ms | 37 ms |
Gain +17.1 points, z = 11.35. verdict_gate.py: UNDETERMINED, under its 2.0x floor.
18. I found a bug in my own map, fixed it, and the fix made the result worse
msdtw_songwide.py computes a banded fine refinement and then never uses it. Line 62 interpolates the coarse 200 ms path. The refinement ran and its output was discarded, so every figure in the two sections above came from a 200 ms grid, which is also why the median residual sat at 27.6 ms.msdtw_v3.py carries no repair and claims no landmark evidence. Its parameters: 20 ms grid, plus or minus 1.0 s band, 2,646,390 cells, backtracking enabled, offset recovered, no scale parameter, 60 ms tolerance.
| v2, coarse 200 ms only | v3, refined at 20 ms | |
|---|---|---|
| bar 22 error | 37 ms | 380 ms |
| median residual at 60 ms | 27.6 ms | 19.5 ms |
| kick one-to-one at 60 ms | 42.6% | 31.4% |
| rotation null | 25.5% | 25.7% |
| ratio | 1.67x | 1.22x |
| monotonic | yes | yes |
Why, and the finding in it
Where KIG-M004 stands, with both levers measured
| Lever tried | Effect on the ratio |
|---|---|
| better onset representation, FMP 6.1.2 subband against pooled envelope | 1.55x to 1.67x, plus 0.12 |
| finer path resolution, 20 ms refined against 200 ms coarse | 1.67x to 1.22x, minus 0.45 |
verdict_gate.py still UNDETERMINED. The remaining error is in neither the onset picking nor the path resolution, since both were tried and measured, and one went backwards. No onset placed, no repair built, M004 open, with the next candidate being the path-shape constraint itself: a smoothness penalty or step-size restriction that keeps fine resolution without letting the path chase noise.19. The "chases noise" diagnosis put to the eye, and the eye agrees
| Measure | v2 coarse 200 ms | v3 refined 20 ms |
|---|---|---|
| path points | 3,251 | 27,835 |
| local slope, standard deviation | 0.291 | 0.596 |
| flat steps, audio advancing while the score stands still | 741 of 3,251 = 22.8% | 10,267 of 27,835 = 36.9% |
| backward steps | 0 | 0 |

This is the first eye check run on any map in this lineage, and it was run because a gate asked whether the detector had been put to the eye. It had not.
20. The path-shape lever, tried two ways, separates two different problems
Two constraints added to the fine banded DTW: a step-size restriction capping consecutive same-direction runs, and a wider envelope bump at fine resolution, on the hypothesis that a 20 ms grid leaves the onset envelope too sparse for the cost to discriminate.
| Variant | bar 22 error | kick one-to-one at 60 ms | null | ratio | flat steps |
|---|---|---|---|---|---|
| v2 coarse 200 ms | 37 ms | 559 of 1,311 = 42.6% | 25.5% | 1.67x | 741 of 3,251 = 22.8% |
| v3 fine 20 ms, unrestricted | 380 ms | 412 of 1,311 = 31.4% | 25.7% | 1.22x | 10,267 of 27,835 = 36.9% |
| v4 fine 20 ms, MAXRUN 3 | 297 ms | 426 of 1,311 = 32.5% | 25.7% | 1.27x | 8,891 of 26,471 = 33.6% |
| v5 fine 20 ms, MAXRUN 3, 120 ms bumps | 57 ms | 427 of 1,311 = 32.6% | 25.7% | 1.27x | 8,956 of 26,536 = 33.8% |
The two problems come apart
What that points at, and it is not the map
A 200 ms grid beating a 20 ms grid on note matching is not a resolution story. The remaining hypothesis is that the cap is in the score rather than the alignment: the notation is quantised and the performance is not, so a 60 ms window against quantised positions may simply be too tight for the 61 percent that miss. That would make the miss rate a property of the transcription, not of the map.
verdict_gate.py UNDETERMINED under its 2.0x floor. No onset placed. No repair built. KIG-M004 open.21. The quantisation hypothesis is refuted, and the misses decompose
Section 20 raised one hypothesis for the capped match rate: quantised notation against an unquantised performance, which would show as misses clustering off the beat. Tested, and it is wrong.
| Position | Matched | Rate |
|---|---|---|
| on the quarter, sixteenth mod 4 equals 0 | 193 of 452 | 42.7% |
| off the quarter | 366 of 859 | 42.6% |
The misses decompose: mostly detection, partly map
| Value | |
|---|---|
| observed per-bar match-rate sd, 197 bars with 4+ kicks | 0.273 |
| expected from binomial noise alone at p = 0.426 | 0.201 |
| ratio | 1.36x |
One localised map failure, and it has an address
20 bars of 197 match nothing at all, and the largest are contiguous: bars 204, 205, 206, 208 and 218, each with 6 to 8 notated kicks and none matched. Twelve bars match everything.
What this leaves
22. The missed positions are near-silent in the isolated kick stem
For every notated kick, the isolated kick stem's peak level was measured in a window spanning 20 ms ahead of its mapped position to 60 ms after, and the matched and missed populations compared.
| Population | n | Median peak | Mean | sd |
|---|---|---|---|---|
| matched | 559 | -15.58 dB | -18.41 | 9.73 |
| missed | 752 | -57.59 dB | -51.99 | 20.03 |
| Threshold | Missed below it | Matched below it |
|---|---|---|
| -40 dB | 548 of 752 = 72.9% | 39 of 559 = 7.0% |
| -35 dB | 569 of 752 = 75.7% | 47 of 559 = 8.4% |
| -30 dB | 607 of 752 = 80.7% | 53 of 559 = 9.5% |
| -25 dB | 626 of 752 = 83.2% | 63 of 559 = 11.3% |
The stem's median sample level is -67.4 dB, so a missed position at -57.59 dB sits about 10 dB above the noise floor of the file.
What this settles
What it does NOT settle, and the gate that says so
| Reading | What it would mean |
|---|---|
| the drummer did not play there | the transcription writes 752 kicks the performance does not contain |
| the separator did not route it there | the kicks are real and masked, and the kick stem is the wrong evidence for them |
23. The map was fitted with the thing it was measuring
Section 22 left two readings open and named the full mix as the measurement that would separate them. A kick the separator failed to route into the kick stem would still leave low-frequency energy in the mix, so the mix can tell a silent performance apart from a silent stem.
The bandpass had to be repaired first
20*log10(1e-9). That value is what the code prints when the filter output is zero everywhere. A 4th-order Butterworth in transfer-function form at Wn = 30/22050 = 0.00136 is numerically unstable at that corner. Rebuilt with second-order sections over audio decimated to 8 kHz, the same 30-180 Hz band returns a mix RMS of -31.2 dB and a kick-stem RMS of -29.5 dB. Nothing from the broken run was recorded and no conclusion was drawn from it.The full mix, under the same map section 22 used
| Signal | Group | Observed | Rotation null median | z | Rotations at or above |
|---|---|---|---|---|---|
| mix 30-180 Hz | matched, 559 | -24.93 dB | -28.15 | +4.39 | 0.5% |
| mix 30-180 Hz | missed, 752 | -29.78 dB | -28.23 | -1.99 | 98.0% |
| kick stem | matched, 559 | -15.96 dB | -46.43 | +12.76 | 0.0% |
| kick stem | missed, 752 | -58.18 dB | -46.72 | -3.42 | 100.0% |
Two hundred circular rotations per cell, seed 20260909. Read on its own this says the 752 missed positions are quieter than a random instant in the song, in the full mix as well as in the stem, which would have settled the question.
The confound that reading carries
The independent map
The same machinery built from hats alone, 1,156 notated hat events against 942 detected hat onsets, gives the 1,311 notated kicks a placement that never saw a kick onset. Under it, 450 of the 1,311 notated kicks match a detected kick onset within 60 ms.
| Signal | Group | n | Observed | Null median | z | Rotations at or above |
|---|---|---|---|---|---|---|
| mix 30-180 Hz | all notated kicks | 1311 | -27.33 dB | -28.22 | +1.25 | 10.5% |
| mix 30-180 Hz | matched | 450 | -24.67 dB | -28.17 | +6.22 | 0.0% |
| mix 30-180 Hz | missed | 861 | -28.27 dB | -28.29 | +0.01 | 48.5% |
| kick stem | all notated kicks | 1311 | -35.19 dB | -46.66 | +3.86 | 0.5% |
| kick stem | matched | 450 | -16.20 dB | -46.94 | +14.24 | 0.0% |
| kick stem | missed | 861 | -50.06 dB | -46.16 | -0.96 | 82.5% |
What this corrects in section 22
| Section 22 as published | Under the independent map |
|---|---|
| missed median -57.59 dB against matched -15.58 dB | -50.06 dB against -16.20 dB |
| a 42 dB gap | a 33.86 dB gap |
| missed positions below the stem's chance level, z = -3.42 | at chance, z = -0.96, 82.5% of rotations above |
| 752 missed positions | 861 missed positions |
Read the direction of that correction carefully. Section 22 reported the missed positions as quieter than chance, which reads as evidence that nothing was played there. The independent map returns them to chance, which is a null result and carries no verdict about the record either way.
The number that closes KIG-M004
| Map | Matched | Rate | Rotation null | Ratio | z | verdict_gate |
|---|---|---|---|---|---|---|
| kick and hat informed | 559 of 1311 | 42.6% | 25.5% | 1.67x | 11.35 | UNDETERMINED |
| hat-only independent | 450 of 1311 | 34.3% | 25.3% | 1.36x | 7.15 | UNDETERMINED |
Three hundred rotations of the mapped notated positions against the fixed detector output, one-to-one matching on the mir_eval.onset convention, 60 ms tolerance. Both runs of verdict_gate.py --counts return UNDETERMINED against its 2.0x counts-mode floor, at p = 1.55e-41 and p = 2.19e-13.
Exactly which sections inherit the limit, and which do not
The claim that downstream figures inherit this limit was checked against this page rather than asserted. Six sections above carry a ratio measured through the fitted map, sections 16 through 21, and each now opens with a banner naming this one. Section 22 is corrected in the table above.
Standing result
24. The census filter, measured against the staff it was filtering
Section 14 recorded a hardcoded pitch list as a defect and left the reusable guard unbuilt. The guard is built now, at ~/.claude/skills/_shared/census_guard.py, and its self-test replays the real failure against the real part file rather than a synthetic fixture.
What the literal cost, measured
The Keep It Greasey drum staff holds 4,948 notes across 17 distinct pitches. The literal {35, 36, 38, 42, 46, 49, 51, 54} declares eight keys, six of which are present.
| Measure | Count |
|---|---|
| pitches on the staff | 17 |
| pitches the literal could show | 6 |
| pitches hidden | 11 |
| notes hidden | 993 of 4,948, 20.1% of the staff |
| declared and absent from the data | 36 and 54 |
Hidden pitches with their note counts: 39(21), 41(14), 43(112), 44(195), 45(85), 47(170), 48(109), 50(3), 53(282), 55(1), 65(1).
The exhaustive enumeration
Every note's own string field read, never a pitch-to-line lookup.
| Pitch | Line (notes) | Pitch | Line (notes) | Pitch | Line (notes) |
|---|---|---|---|---|---|
| 35 | 4 (1311) | 45 | 2.5 (85) | 50 | 0.5 (3) |
| 38 | 1.5 (1423) | 46 | -0.5 (428) | 51 | 0 (87) |
| 39 | 1.5 (21) | 47 | 2 (170) | 53 | 0 (282) |
| 41 | 3 (14) | 48 | 1 (109) | 55 | -1 (1) |
| 42 | -0.5 (533) | 49 | -1 (173) | 65 | 4 (1) |
| 43 | 3 (112) | 44 | 4.5 (195) |
n/a cells were right. No pitch on this staff occupies two lines, which is a fact about this tab rather than a general one.The audit reaches section 23 from the source side
Run across the 18 archived scripts in the working folder, --audit flags 12 literal key sets across 12 files of the 18 scanned, and 11 of the 12 are the same expression:
r["fret"] in (35, 42, 44, 46) |
25. The acceptance test, built and controlled in both directions
Section 8 established that a repair is provably minimal only by full census diff, and left the reusable test unbuilt. The test is built now at ~/.claude/skills/_shared/repair_census_diff.py, composed on top of the census guard from section 24 so its enumeration is exhaustive by construction.
It censuses 8 scalar dimensions (measures, beats, notes, beats carrying velocity, rests, ghosts, dead notes, ties) and 5 keyed dimensions (fret, string, fret_string, velocity, duration), then reports every cell that moved. A repair declares its targets as --expect fret:35:+1, and anything else that moved is collateral.
The real repair, s604777 r8852151 against s6862054 r8972975
| Dimension | Before | After |
|---|---|---|
| measures | 248 | 248 |
| beats | 3,756 | 3,756 |
| notes | 4,948 | 4,948 |
| beats carrying velocity | 989 | 989 |
| rests | 26 | 26 |
| ghost notes | 629 | 629 |
| dead notes | 0 | 0 |
| tied notes | 0 | 0 |
fret 35 at 1311 to 1312 and fret 65 at 1 to 0, both declared. Two are the same edit seen through fret_string. VERDICT MINIMAL, exit 0, across 4,948 notes and 3,756 beats.Its own vacuous-pass hole, found by testing it against nothing
A second hole in the same pass: a malformed --expect was only reported after the full diff had printed, so a typo in the declaration looked like a completed run. Expectations are now parsed ahead of any fetch or census.
Six exit codes, all measured in one command
| Case | The mutation | What caught it | Exit |
|---|---|---|---|
| empty | an empty object on both sides | the zero-census guard, no verdict issued | 2 |
| malformed | a bad --expect string | refused ahead of any fetch or census | 2 |
| A | one snare note moved from line 1.5 to line 2, pitch untouched | string, 1.5 at 1444 to 1443 and 2 at 170 to 171 | 1 |
| B | three ghost flags silently dropped | notes_ghost, 629 to 626 | 1 |
| identity | the file against itself | nothing moved | 0 |
| real repair | declared correctly | only declared cells moved | 0 |
fret dimension is blind to it, and a check aimed at pitch counts would call that file clean. The string dimension catches it alone. That is the 179-lost-instances failure shape reproduced deliberately and caught. Both controls and both zero cases had to be run to find the vacuous-pass hole, since the real repair passing was never evidence the tool worked.Line 1.5 holding 1,444 notes is itself a check: snare 1,423 plus clap 21 equals 1,444, so the two lanes that share that line account for it exactly.
One of those six exit codes was published without being measured
--expect at exit 2. On the final verification sweep it returned 1. raise SystemExit("some message") prints the message and exits 1, never 2, and the number in the table came from what the code was meant to do.SystemExit(2). All seven were then re-measured in a single command. Six of the seven are repair_census_diff cases; the seventh is a different tool. census_guard --selftest 0, empty 2, malformed 2, control A 1, control B 1, real repair 0, identity 0.Third instance of the same class on this page, after the audit file count in section 26 and the count in section 24. A number written from intent reads exactly like a number written from measurement, and only the measurement tells them apart.
26. A fourth recitation slip, in the section about filters, caught by measuring
Section 24 first published the audit result as "12 literal key sets in 11 files, every one of them r["fret"] in (35,42,44,46)." Both halves were wrong, and both were written by reading the output rather than measuring it.
| Written from the output | Measured in the command that wrote the correction |
|---|---|
| 12 hits in 11 files | 12 hits in 12 files |
| every one is the fret literal | 11 of the 12 are |
The twelfth hit is score_timeline.py:58:
for b in (1,2,6,22,32,33,34,42,49,57,83,102,106,236,248): |
27. The energy result is withdrawn. The null never reproduced the selection step.
An external check on this page named the defect ahead of any measurement here: "If each rotation moves the positions while retaining the original matched and missed labels, the surrogate does not reproduce that selection step, and the observed missed group can look unusually quiet partly because membership was conditioned on failure to encounter a detected onset." The measurement below was run to test that claim, and it confirms it.
What was wrong
The corrected null
Each surrogate now rotates the candidate positions, re-runs the one-to-one 60 ms matching against the fixed detector, rebuilds matched and missed membership, and only then computes the energy statistic. 200 surrogates, seed 20260909, hat-only map.
| Signal | Group | Observed | Null median | z, labels frozen | z, selection reproduced |
|---|---|---|---|---|---|
| mix 30-180 Hz | matched, 450 | -24.67 dB | -24.98 | +6.22 | +0.22 |
| mix 30-180 Hz | missed, 861 | -28.27 dB | -28.91 | +0.01 | +0.75 |
| kick stem | matched, 450 | -16.20 dB | -16.20 | +14.24 | +0.02 |
| kick stem | missed, 861 | -50.06 dB | -55.61 | -0.96 | +2.09 |
Surrogate match rate 0.254 mean, sd 0.014, against an observed 0.343, which independently reproduces the 25.3% baseline the alignment ratio uses.
What collapses
Three of the four cells fall to chance. The fourth, the missed group in the kick stem at z +2.09 with 2.0 percent of surrogates above it, is weak tail evidence at 200 draws across four related cells, and it is technically an above-null result rather than a chance-centred one. Its sign runs against the absence argument rather than for it: those positions carry somewhat MORE kick-band energy than the reproduced selection null predicts, the opposite direction from the near-silence section 22 published.
What survives
p = 2.4e-150 and A = 0.9212, and every statement that the missed positions are quiet, near-silent, below chance, or at chance relative to a null. None of those had a null that reproduced how their own populations were built.The rule this replaces
28. The non-drum map. The alignment does not survive full independence.
This runs the strongest of three controls named by an external check on section 23: "A sufficiently accurate map derived from vocals, bass, guitar, or other non-drum landmarks would provide stronger alignment independence because drum co-occurrence would leave the fitting stage entirely."
Notated vocal attacks were built from the vocal part s604777_r8852151_part0.json through the same constant-tempo walk that produced the drum timeline, using the drum part's tempo automation since both parts share one score. 437 notated vocal attacks against 521 detected vocal onsets on the isolated lead stem, and the 1,311 notated kicks mapped through that path. No drum event of any kind enters this fit.
| Map | Independence | Matched | Rate | Null | Ratio | z | p |
|---|---|---|---|---|---|---|---|
| kick and hat | none, kick onsets in the fit | 559 of 1311 | 42.6% | 25.5% | 1.67x | 11.35 | 0.0033 |
| hat only | partial, drum score retained | 450 of 1311 | 34.3% | 25.3% | 1.36x | 7.15 | 0.0033 |
| vocal only | full, no drum event in the fit | 97 of 360 | 26.9% | 23.9% | 1.13x | 0.83 | 0.2060 |
This is not a power failure
At n = 360 with a null of 23.9% and a rotation sd of 3.7 points, the test detects 1.31x or greater at z = 2.
| Effect | Where it would have landed |
|---|---|
| the circular 1.67x | 39.9%, z 4.33 |
| the hat-only 1.36x | 32.5%, z 2.33 |
| observed | 26.9%, z 0.82 |
The limit on this result
Standing result
29. The vocal map is invalid. Both of its figures are withdrawn.
The external check named this risk within minutes of section 28 being published: "the sequence alone cannot distinguish that explanation from a degraded third alignment whose input sequences cover substantially different spans." It is a degraded alignment.
The one-line validity check
A score-to-audio map must have a slope near 1.0, because score time already carries the tempo map. Anything else means the path is absorbing time it should not.
| Map | Score span | Audio span | Slope | Verdict |
|---|---|---|---|---|
| kick and hat | 0.0 to 518.8 | 0.0 to 501.8 | 0.967 | plausible |
| hat only | 0.0 to 518.8 | 0.0 to 501.8 | 0.967 | plausible |
| vocal, endpoint DTW | 0.0 to 195.8 | 0.0 to 501.8 | 2.563 | IMPLAUSIBLE |
| vocal, subsequence DTW | 0.0 to 195.8 | 55.8 to 189.2 | 0.681 | IMPLAUSIBLE |
Why the vocal part cannot carry a song-wide map
| Measure | Drums | Vocals |
|---|---|---|
| measures | 248 | 248 |
| beats | 3,756 | 683 |
| rests | 26 | 246 |
| last sung or struck event | 498.3 s | 194.9 s |
| events in the second half of the score | thousands | 0 |
Total measure time is identical to four decimal places, 498.1647 s for both parts, so the walk is sound. The vocal part simply stops. It covers the first 39 percent of the score and holds zero events after that, while the detected vocal onsets run to 285.6 s. No DTW variant can reconcile a 195.8 s query with a 501.8 s reference without distortion, and the slope numbers are that distortion measured.
What is withdrawn
What survives, and it is the useful part
One word narrowed, and it names a live route
The slope check is a REJECTION guard, not an acceptance criterion
A separate discrepancy, recorded rather than resolved
score_timeline.json from the original script puts it at 517.9 s, a 19.62 s difference. Every figure on this page uses the original script's timeline. The reimplementation was written only to reach the vocal part, and the two do not agree. Nothing published here rests on it, and the disagreement is not yet explained.30. The bass map. A valid non-drum alignment, and the score clock explained.
This executes the route section 29 left open, and it passes its slope check.
First, the 19.62 s score-clock discrepancy is explained
The original score_timeline.py advances the bar clock with t = max(t, tt), the longest voice's actual beat sum. A second walk advances by the nominal signature. On this tab those diverge, and the reason is measurable.
| Clock | Total |
|---|---|
| nominal signature | 498.1647 s |
| max voice sum | 518.4855 s |
| difference | 20.32 s |
max(t, tt) clock is per-part and inherits each part's own notation defects, which would desynchronise two parts by construction.The bass map
| Vocal map, withdrawn | Bass map | |
|---|---|---|
| notated attacks | 437 | 2,422 |
| score span | 9.0 to 194.9 s | 1.1 to 498.1 s |
| detected onsets | 521, to 285.6 s | 1,382, 0.1 to 501.7 s |
| slope | 2.563 / 0.681 FAIL | 1.006 PASS |
| notated kicks inside the span | 360 of 1,311 | all 1,311 |
Arthur Barrow's part, s604777_r8852151_part4.json, on the nominal clock, against librosa spectral onsets on the isolated bass stem. No drum event enters this fit.
The result
| Map | Independence | Matched | Rate | Null | Ratio | z | p |
|---|---|---|---|---|---|---|---|
| kick and hat | none, withdrawn as circular | 559 / 1311 | 42.6% | 25.5% | 1.67x | 11.35 | 0.0033 |
| hat only | partial, drum score retained | 450 / 1311 | 34.3% | 25.3% | 1.36x | 7.15 | 0.0033 |
| bass only | full, slope-validated | 339 / 1311 | 25.9% | 22.0% | 1.17x | 1.82 | 0.0166 |
300 rotations, one-to-one 60 ms matching, membership regenerated inside every draw.
How 1.17x should be read
The bass map removes drum events from the fit, which kills the circularity behind 1.67x and reduces the rhythmic dependence left in 1.36x. It cannot remove the fact that Barrow and Colaiuta are playing the same composition in the same meter, with bass attacks and kick attacks often organised around related beat positions. A whole-song circular rotation deliberately breaks that phase relationship, so a correctly registered score can outperform rotations even where the particular written kick notes carry little extra information.
On the statistics: the empirical p of 0.0166 and the z of 1.82 do not conflict. A rotation distribution need not follow a normal tail, and 300 draws make an empirical z coarse. A surrogate test is interpretable only through the structure its null preserves and destroys, and this one destroys metrical phase along with everything else.
Standing result
5. Files and reproduction
Onsets were detected on isolated stems, never the mix, at 44.1 kHz over 501.84 s, hop 256, log-compressed spectral novelty per FMP 6.1.2. The kick count reproduces the earlier surplus finding independently, 1,332 detected against 1,312 notated.
| Lane | Onsets | Median peak |
|---|---|---|
| kick | 1,332 | -14.98 dB |
| snare | 1,103 | -13.00 dB |
| hat | 1,047 | -17.51 dB |
| cymbals | 450 | -18.91 dB |
| toms | 556 | -20.32 dB |
~/Projects/_outputs/zappa-keep-it-greasey-transcriptions/04-clap-test/ holds the pre-registration, its sha256, the results, every script and every evidence image.
Live tab: Keep It Greasey, Brandon edit, s6862054 · source revision r8972975, unchanged by this pass.