Provenance Audit · Band Practice 8.28.26

Fraud Chat Rebuild Audit

An evidence review of the mic-master rebuild ordered against the September 1 stem set. Every verdict below rests on a measurement taken from the files themselves.

Audited session: Fraud Chat local_b5aa940c Date: 2026-09-03 Machine: MacBookPro Files measured: 95 WAV, 9.40 GB

0. The original spec, re-graded against v2

The scorecard further down grades the September state, which was the honest answer when it was written and is now stale. This section answers the original question against what exists today. Every row was measured in this pass.

Eight of ten clauses delivered, one delivered with a stated caveat, one never honoured on a premise that turned out to be void.

The work asked for exists. The reasoning that ordered it did not survive measurement.

#ClauseMeasured against v2Verdict
1Rebuild every song whose stems were built Sept 1 song11 and song13 both carry full v2 lanes. v2 covers 13 songs, including song12 and song16 that v1 never had. Delivered
2Skip Sept 2 and 3 rebuilds unless the drumkit traces to Sept 1 All 13 were rebuilt regardless. The exemption was never coded. The lossy premise it protected against was refuted at −400 dB, so the clause guarded nothing. Not honoured
3Decide on build dates and actual source provenance v2 lanes are verbatim mic channels with provenance stated per lane. Provenance is measured now rather than inferred from a folder name. Delivered
4Both guitar lanes from the mic master, split preserved, two-voice run 6 songs carry two real guitar mics and need no split. The two-voice process ran on the 7 single-mic songs, producing 28 files, with a manifest caveat that those songs had one guitarist so the A/B split correlates 0.70 to 0.915 with 40 to 56 % leftover. Delivered, caveated
5Bass rebuilt as its own retained lane 6 songs carry a verbatim bass_mic4. 7 carry none because mic4 was dead, cross-validated against Demucs bass energy with a clean gap between 2.90 % and 3.45 %. Delivered where bass exists
6Drums from the mic master with no lossy inheritance 78 drum lanes, every one from mic1 through the presence-lifted derived source. No lossy stage anywhere in the path. Delivered
7Six-piece drumkit preserved per song 13 songs × 6 pieces = 78, joints measured at 0.00000000 on every lane. Delivered
8Lossless WAV matching source duration and sample count Every lane duration-exact against its own song source, verified per song across all 13. Delivered
9Verify complete decode before marking a song finished Full decode of all 160 v2 files run in this pass: 160 pass, 0 fail. Verified
10Delete nothing, write to new versioned locations The v1 tree stands untouched at 101 lanes. v2 lives in its own tree. 128 MB of superseded repair copies retired to delete/ rather than removed. Delivered

The one structural finding worth carrying forward

Clause 5 asked for bass on every song. Six songs have it and seven do not, and that is the correct outcome rather than a shortfall. Mic4 liveness and Demucs bass energy, two methods sharing no code, agree on every song. The same six-and-seven split appears in the second-player lane: a song carries either bass_mic4 or gtr2_mic2, and no song carries both. The band had one second player who moved between bass and a second guitar.

0.05 Final state: v2 verifies clean

Every defect this audit raised is fixed and independently re-measured.

160 manifest keys, 0 unresolvable, 160 files on disk, 0 orphans. A perfect bijection in both directions. The repair copies reach zero clipped honestly at a uniform −3.54 dB.

Defect this audit foundFixVerified
Lane count asserted as 43Read from disk, 38 verbatimClosed
Manifest stale, no repair copies, no drum lanesRegenerated, all 160 cataloguedClosed
Repair copies silently 6 to 15 dB quietInterpolation clamped, gain recordedClosed
28 manifest paths did not resolverelpath keys plus an abort-on-fail gateClosed
Clipped counts measuring the cap, not clippingNormalise to 0.998, under the thresholdClosed

Independent re-measure of the repair copies

FileClipped at 0.999PeakGainFrames
song16/bass_mic4_DECLIP00.998000−3.54 dB17,970,750
song15/bass_mic4_DECLIP00.998000−3.54 dB21,322,350
song11/kick_mic1_DECLIP00.998000−3.54 dB23,571,450

Zero is real this time. The peak sits at exactly 0.998000, deliberately under the 0.999 test, and the cost is a uniform −3.54 dB rather than the 6 to 15 dB the first build charged. The broken copies are retired to delete/declip-broken-globalgain/ rather than removed.

The inventory, read from disk

ClassCountNote
Verbatim mic lanes38raw channels, no EQ, no separation, no downmix
Drumkit lanes7813 songs × 6 pieces, joints 0.00000000
Guitar-split files287 songs × 4, with a stated correlation caveat
Kit sources13derived separation inputs, marked not deliverable
Repair copies3reconstructions, gain recorded
Total160every one catalogued and resolving

The 14 was a broken counter, and it is now closed. The session traced it to a census that matched the substring guitar_. That caught guitar_A_lead and guitar_B_second and silently missed _minusA and leftover, so it printed 14 and the summary quoted its own broken counter twice. The manifest was correct throughout.

The census is now a real partition derived from disk, written into MANIFEST.json at line 1481 so summaries quote it rather than retype it, guarded by two asserts: the classes must sum to the file total, and UNCLASSIFIED must be zero.

Independently reproduced partition

Built from a separate disk walk in this audit, without reading the session's census, then compared:

ClassThis auditSession censusAgreement
drumkit7878Match
guitar-split2828Match
verbatim mic3838Match
kitsource1313Match
repair33Match
Total160160Closes
unclassified00Empty

A check that agrees is not a check that closes.

Two verification shapes here looked rigorous and were blind by construction. Count reconciliation cannot see a wrong path, since 160 keys against 160 files reconciled perfectly while 28 of them pointed at nothing. Substring classification cannot see a file it does not name, since matching guitar_ missed _minusA and leftover and printed 14 for 28.

Both now fail loudly: the manifest write aborts unless every key resolves, and the census asserts that its classes sum to the file total with an empty UNCLASSIFIED bucket. The arithmetic tell was there the whole time, since 38 + 78 + 14 + 13 + 3 gives 146 against a stated 160. Adding up a breakdown before quoting it catches this entire family.

0.1 Re-verification after the 14:08 rebuild

The audited session rebuilt the repair copies at 14:06 and regenerated the manifest at 2026-09-04 14:08:07, after the findings in the next section were sent. Three of the four are now closed by that fix. One new defect surfaced, and one figure in the manifest is an artifact of its own threshold.

Earlier findingStatus nowEvidence
Manifest missing repair copies and drum lanesClosed160 entries against 160 files, exact
Repair copies 6 to 15 dB quietClosednow 0.666000 = −3.53 dB on all three
Threshold and gain undocumentedClosedlines 2, 3 and 145 of MANIFEST.json
Lane count stated as 43Superseded38 verbatim, 160 total including all classes

The rebuilt repair gain measures 0.666000 on unclipped samples, matching the manifest's applied_gain_db: -3.53 to the decimal, with residuals of −124 to −134 dB confirming a clean pure rescale outside the repaired runs. The earlier −14.83 dB measurement applied to the 13:39 build and no longer describes what is on disk.

New defect: 28 manifest paths do not resolve

The guitar-split keys are missing their subdirectory, and the file is inconsistent with itself:

line  45   "drumkit/crash"   correct, resolves to songNN/drumkit/crash.wav
line 487   "guitar_A_lead"   wrong, file lives at songNN/guitars/guitar_A_lead.wav
line 478   "_minusA"    line 505   "leftover"

Drumkit entries are prefixed and guitar entries are not. All 28 guitar entries across 7 songs resolve to a path that does not exist. The counts reconcile perfectly at 160, so a count check never catches this. Only path resolution does.

The residual clipped counts are a threshold artifact

The manifest reports 2,972 clipped samples on the song11 repair and 30,200 on song16, and both reproduce exactly, so the reporting is honest. The samples are not clipping.

Repair copySamples ≥ 0.999Their min and maxAbove 0.9999
song11/kick_mic1_DECLIP2,9720.999000072 / 0.9990000720
song16/bass_mic4_DECLIP30,2000.999000072 / 0.9990000720

1.5 × 0.666 = 0.999000. The interpolation cap multiplied by the normalisation gain lands exactly on the detection threshold, so every capped sample counts as clipped. Nothing sits at true full scale. Scaling to 0.6655 puts the cap at 0.99825 and those counts go to zero with no audible change. A reader comparing song16 verbatim at 769,169 against its repair at 30,200 would reasonably conclude the repair still clips badly. It does not clip at all.

Credit where it is due. The manifest now carries a two_voice_caveat at line 6 stating that on the seven single-guitar-mic songs the A/B split correlates 0.70 to 0.915 with 40 to 56 % leftover, because those songs had one guitarist and nothing to separate. Self-disclosing a limitation a user would otherwise hit blind is the right call, and this audit would have flagged it had the session not written it first.

0.2 Ship verification, September 4, partly superseded above

The audited session declared v2 ready to ship. Each claim was checked against disk. Three hold. Two do not, and one of those is a usability trap inside the repair copies.

ClaimMeasuredVerdict
Duration-exact against source13 of 13 songs, every lane matches its own source frame countHolds
Joints 0.0000000078 of 78 drum lanes, real block counts 3 to 13Holds
Full-decode clean3 of 3 repair copies decode with no errorHolds
78 drum lanes78Holds
43 mic lanes38 verbatim, 41 counting repair copiesWrong count
Manifest covers all lanes38 covered, 3 repair copies absent, 78 drum lanes absentIncomplete

MANIFEST.json is dated Sep 3 13:39, before the repair copies were built, and the string DECLIP does not appear anywhere in it. So song16 does not currently ship with its damage stated beside its alternative, and the reconstruction carries no manifest record saying it is a reconstruction. That is the precise thing the _DECLIP-ESTIMATE naming convention exists to prevent.

The trap: the repair copies are 6 to 15 dB quieter

The repair was described as scaling repaired peaks to 0.999 so nothing re-clips. Measuring the gain on unclipped samples only, then removing it and inspecting the residual:

Repair copyGain appliedIn dBResidual after removing gain
song11/kick_mic1_DECLIP-ESTIMATE0.181343−14.83 dB−115.0 dB
song16/bass_mic4_DECLIP-ESTIMATE0.318629−9.93 dB−126.6 dB
song15/bass_mic4_DECLIP-ESTIMATE0.486514−6.26 dB−121.4 dB

Residuals at −115 to −127 dB mean that outside the clipped runs these files are a pure rescale of the original. Every sample is attenuated and 99.99 % of samples differ. The cause is the interpolation overshooting: cubic across a long flat-topped run extrapolates above full scale, and normalising the whole file afterwards pulls everything down by that overshoot. The song11 gain of 0.181 implies an interpolated peak near 5.5× full scale.

Why it matters. Anyone substituting kick_mic1_DECLIP-ESTIMATE.wav for kick_mic1.wav gets a lane 14.8 dB quieter with nothing on disk explaining why. Either clamp the interpolated peak before normalising, or record the applied gain in the manifest so it can be undone.

The clipped-count gap was a threshold, not a window

This audit and the audited session reported different clipped counts. The session attributed it to window versus full file. Both read whole files. It is the detection threshold.

Laneat 0.999969at 0.9999at 0.999
song16/bass_mic4730,591733,397769,169
song15/bass_mic4234,157235,499253,289
song11/kick_mic1132,808133,450141,188

The 0.999 column reproduces the session's figures exactly on all three lanes. It counts at 0.999, this audit counted at 0.999969. The more inclusive threshold is the better choice, and it belongs in the manifest so the number is reproducible.

0.4 Major correction: the cymbal verdict was measured wrong

The v2 kits are not cymbal-starved. That verdict came from a confounded metric and it is withdrawn.

Measured in absolute level, v2 cymbals are louder than v1 on 11 of 11 songs, median +4.91 dB. The earlier finding scored cymbal share, a ratio whose denominator the two pipelines do not share.

The confound

The two filters are not the same filter, and this audit reported a ratio before comparing them.

v1 run_song_8-28.sh   highpass 45, 90 Hz −9 dB, 200 Hz −5 dB, 2500 +5, 6000 +7
v2 make_kit_source.sh   2500 +5, 6000 +7

The v1 filter cuts the low end by up to 9 dB before separating. That suppresses kick and toms, shrinks the denominator of the share calculation, and inflates cymbal share without adding a single decibel of cymbal. The v2 lift kept only the presence half, which is correct, so its denominator stayed large and its share read small.

Absolute cymbal level, full files

Songv1 cymbalsv2 cymbalsChange
song11−39.43−31.82+7.61 dB
song18−40.58−33.09+7.50 dB
song10−39.07−32.85+6.22 dB
song13−39.40−33.47+5.93 dB
song17−46.18−40.61+5.57 dB
song20−45.27−40.35+4.91 dB
song21−46.45−42.11+4.34 dB
song14−50.98−47.20+3.78 dB
song22−44.14−40.72+3.42 dB
song15−41.74−38.58+3.16 dB
song19−44.80−44.14+0.66 dB

What is actually true

The v2 kits are louder throughout, and the kick gained more than the cymbals did. The balance sits about 3.36 dB more kick-forward than v1 in median cymbal-to-kick ratio. That is a mix balance rather than missing information, and it is arguably the more faithful of the two, since v1 was cutting real low end out of the source. Recovering the v1 balance is a gain move on finished lanes, not a re-separation.

Five architectures tested, song22 first 60 s, one shared timebase

ArchitectureCymbal sharer(ride, guitar)Reading
v2   tilt only, no Demucs0.80 %−0.122Best clean
v3   mic1+mic3, no Demucs20.86 %+0.613Guitar, not cymbals
v4   mic1+mic3 + Demucs0.21 %+0.041Clean, worse
v5   tilt + Demucs0.26 %−0.008Cleanest, still worse

Adding a Demucs stage drops cymbal share from 0.80 % to 0.26 %. This audit's earlier claim that the Demucs stage was load-bearing for cymbals is withdrawn. The v2 architecture, mic1 plus presence lift straight into DrumSep, is the best of the five tested.

What survives from the cymbal work. One item, and it is the clipping census in the next section. The share metric was the wrong instrument, and the two filter strings should have been compared before any ratio was reported.

0.5 September 4: the share measurement, retained for the record

All thirteen v2 kits finished overnight from the presence-lift source. This section measures the result rather than assuming the fix landed. Full files, whole song, cymbal share of total kit energy.

The lift helped and it did not finish the job.

Median cymbal share is 0.44× of v1. One song of eleven reaches v1 level and five remain below 0.4×. The raw-mic1 kits sat near 0.1× before the fix, so this moved from about 0.1× to 0.44×. Real improvement, still less than half of what v1 carried.

Songv1 cymbal sharev2 cymbal sharev2 / v1Reading
song112.48 %2.57 %1.04×Restored
song185.09 %4.38 %0.86×Partly
song103.46 %2.33 %0.67×Partly
song135.41 %3.21 %0.59×Partly
song171.46 %0.70 %0.48×Partly
song201.42 %0.63 %0.44×Partly
song211.99 %0.68 %0.34×Still thin
song151.88 %0.60 %0.32×Still thin
song222.77 %0.82 %0.29×Still thin
song142.14 %0.55 %0.26×Still thin
song198.47 %0.67 %0.08×Still thin

The reason is the one thing an equaliser cannot solve. mic1 holds a fraction of a percent of its energy in the 2 to 6 kHz band. A boost amplifies what the microphone captured, and it cannot add detail the microphone never heard. The boost lifts the noise floor and the bleed alongside the cymbals.

A correction to how this audit framed it. The earlier section called the presence lift the fix. It is a partial fix, and the measurement above is the correction.

The alternative was tested and it is worse

This audit originally offered a second option, a mic1 plus mic3 sum, on the reasoning that mic3 carries far more presence energy. That option was built and run on song22, RMS-matched, DrumSep on the first 60 seconds. It is wrong and the recommendation is withdrawn.

Kit laner against guitar micr against kick micReading
mic1+mic3 ride0.613−0.000Guitar, not a cymbal
mic1+mic3 hh0.3530.013Guitar-dominated
mic1+mic3 crash0.271−0.001Guitar-dominated
presence-lift hh−0.0310.127Drum-led
presence-lift ride−0.1220.097Mixed
presence-lift crash0.0130.022Drum-led

The sum produced a 20.86 % cymbal share against v1's 2.12 %, a 9.8× jump that reads as a win until the lanes are attributed. The ride lane correlates 0.613 with the guitar microphone and flat zero with the kick. DrumSep is handed broadband guitar in the band it uses to find cymbals, so it files guitar under cymbals. The presence-lift lanes are drum-led. The lift wins on measurement.

Evidence this audit will not lean on. The same test run against the v1 kit returned r = 0.000 on all three lanes, which looks clean and is not usable. v1 song22 runs 274.088 s against the v2 cut at 275.500 s, and a 1.4 s offset collapses that correlation to zero whatever the content. Only the v2 against v3 rows above share a timebase, and those are the ones carrying the verdict.

What the result actually points at. The v1 path ran Demucs first to isolate a drum stem, then split that stem. That Demucs stage was load-bearing. It removed the guitar before the kit split ever saw it. The v2 design dropped it under a no-separation-upstream principle, and that is the real reason the cymbals are thin. mic1 alone does not carry them, and the obvious way to add them carries guitar too.

The choice is between reinstating a drum-isolation stage before the kit split, which costs the purity claim and recovers the cymbals, or keeping v2 and documenting plainly that these kits are accurate on kick and toms and poor on cymbals at a median 0.44× of v1. Both are defensible. Shipping a six-piece kit without saying which was chosen is not.

0.6 Clipping census, the unaddressed risk

Risk 2 was raised twice and never actioned. extract_mic_lanes.sh gates on microphone liveness alone and carries no clipping check, while the v1 picker had an excluded_clipped field and dropped mic4 on song15 for exactly this. Every v2 deliverable lane was measured.

The bass lane is the worst-clipped material in the set.

Bass is the instrument the original instruction set most wanted retained. It clips on 6 of 6 songs where its microphone is live, 1,019,936 clipped samples in total, and song16/bass_mic4.wav alone is 4.07 % clipped.

InstrumentSongsSongs clippingTotal clipped samplesWorst single lane
bass_mic466 of 61,019,936730,591
kick_mic11313 of 13431,418132,808
gtr1_mic3137 of 1371,28964,170
gtr2_mic265 of 624,28312,132

The lanes worth looking at first

LaneClipped samplesShare of file
song16/bass_mic4.wav730,5914.0654 %
song15/bass_mic4.wav234,1571.0982 %
song11/kick_mic1.wav132,8080.5634 %
song16/kick_mic1.wav70,9400.3948 %
song10/kick_mic1.wav21,2650.3873 %
song15/kick_mic1.wav79,0770.3709 %

Verbatim extraction is the right principle and it carries the clipping through untouched. That is honest and it is not free. These counts belong in the extraction log so anyone consuming a lane knows what it holds, and song16/bass_mic4.wav at four percent needs a decision before it ships as a bass deliverable.

0.7 v2 mic-lanes run, live status at 13:31

The audited session restarted at 13:21 on a new design, writing to v2-mic-lanes/. It pulls each instrument's own close mic straight out of the four-channel master with no separation, no EQ and no downmix, then splits the kick mic into a six-piece kit. Thirteen songs have mic lanes extracted. Four DrumSep workers are running on songs 17, 19, 21 and 22.

This design answers the two failures in the first attempt. Lanes are verbatim mic channels rather than a tilted blend, so no fidelity claim is needed. A lane is written only when its mic is live on that song, so a dead mic never ships as an empty instrument. Every lane is duration-checked against the source and decode-checked at write time, and it writes to a new tree without touching anything existing.

Verified: no worker collision

The session flagged that songs 12, 20 and 22 had been assigned to two workers each, which would collide writing the same blocks, and restarted with disjoint lists. Confirmed at the process table: four unique PIDs, four distinct songs, lists A:17,13,10 B:19,11,18 C:21,15,16 D:22,20,12 with no overlap.

Verified: the mic map is exactly accurate

Every figure in the script's comment block reproduces on live-song data.

MicRoleLiveSub 0–120 HzPresence 2–6 kHzCrestCheck
mic1kick27 / 2761.6 % claim, 61.6 % real0.77 % / 0.77 %16.4 / 16.4Exact
mic2guitar 29 / 2722.8 %3.53 % / 3.53 %16.6Exact
mic3guitar 125 / 2720.9 %11.22 % / 11.22 %19.0Exact
mic4bass cab13 / 2740.7 % claim, 40.7 % real3.67 %14.0 / 14.0Exact

Two independent methods now agree on which songs have bass

Mic4 liveness comes from the mic measurements. Bass-lane energy comes from Demucs in the earlier pipeline. The two share no code and no input, and they agree on every song.

Songmic4 liveDemucs bass energyAgreement
song14true14.00 %Bass
song17true11.42 %Bass
song18true9.24 %Bass
song15true3.45 %Bass
song11false2.90 %No bass
song21false2.57 %No bass
song22false2.46 %No bass
song20false2.27 %No bass
song13false1.04 %No bass
song10false0.00 %No bass

Live mic4 songs run 3.45 % to 14.00 %. Dead mic4 songs run 0.00 % to 2.90 %. The gap between 2.90 and 3.45 is clean, so the split is unambiguous. Brandon's call that some songs carry no bass is confirmed by both methods, and the one to three percent on the dead-mic songs is bleed from kick and toms.

Two risks the v2 run has not accounted for

Risk 1 is now measured and confirmed. The v2 kits are cymbal-starved.

The first blocks landed at 13:52, so this was tested rather than left as a prediction. Method: load _blocks/b000000000000.npy per song, lane order kick, snare, toms, hh, ride, crash, and compare against the same first 60 seconds of the v1 kit. Cymbal share of kit energy is used because it is level-independent and immune to the 1.45 s cut offset.

Songv1 cymbal sharev2 cymbal shareFactorVerdict
song170.60 %0.13 %4.6× thinnerConfirmed
song198.30 %0.32 %withdrawnNear-silent window
song213.81 %0.17 %22× thinnerConfirmed
song222.12 %0.20 %11× thinnerConfirmed

The absolute levels mostly rose in v2, since raw mic1 runs far hotter than the Demucs drum stem. song17 kick gained 10.13 dB and toms gained 23.49 dB. The cymbals failed to keep pace and several fell outright: song17 crash −3.62 dB, song21 crash −5.40 dB and hh −3.83 dB, song22 crash −9.13 dB and hh −3.25 dB. Kick and toms gain while crash and hats lose, which is what a kick-mic source predicts.

Correction, withdrawn on 13:57 evidence. This audit briefly flagged the v1 song19 drumkit as broken on the strength of its first 60 seconds. That was wrong and the flag is withdrawn. On the full file it is healthy: kick peak −6.49 dBFS, snare −7.53, crash −12.94, all 571.0 s, against song17 kick at −6.39. Summing the six lanes against band/drums.wav over a 20 s window at 200 s gives source −57.05 dBFS and sum −57.14 dBFS, a deficit of 0.09 dB. The separation is intact. The opening of song19 is simply near-silent.

The same error costs the song19 cymbal figure, which is why it reads withdrawn above. Its v1 denominator sat close to noise. The verdict rests on song17, song21 and song22, all measured on windows where the v1 kick ran between −28.24 and −30.19 dBFS. The honest range is 4.6× to 22× on three songs.

The mechanism behind Risk 1. Every v2 drumkit is split from kick_mic1.wav, and mic1 carries almost no cymbal energy. Measured presence for the four songs tested:

Songmic1 presencemic3 presencemic3 advantage
song170.19 %2.32 %12.2×
song190.14 %0.84 %6.0×
song210.20 %20.85 %104.2×
song220.14 %15.20 %108.6×

The old pipeline lifted this band before separating, at +5 dB on 2.5 kHz and +7 dB on 6 kHz. The v2 path uses raw mic1 with no tilt. Prediction to check when song17 lands: the hh, ride and crash lanes come out thinner than their v1 counterparts.

Risk 2, clipping on the source. mic1 clips on 25 of 27 songs, mean 23,324 samples, peak pinned at 0.00 dBFS. mic4 is worse at a mean of 30,021 across 9 of its 13 live songs. mic3 is the clean one at 135. The v1 picker carried an excluded_clipped field and dropped mic4 on song15 for it. extract_mic_lanes.sh gates on liveness alone and has no clipping check. Worst cases are song4 at 169,971 samples and song26 at 126,368.

0.5 Update at 13:10, with corrections

The audited session confirmed the finding against its own measurement and named its bug. It had compared the LOSSLESS cut to the four-channel master through ffmpeg -ac 1, which averages all four mics into one. Mic2 and mic3 roll off at 7.5 kHz and 9.7 kHz from placement, so the average looked steeper than mic1 alone and read as an encoder shelf. STATE-8-28.md warns against exactly that, saying any check of a dual-mono source must read the raw channel.

Verified on disk

Claim from the audited sessionCheckResult
song13mic bass retained, 168 MBcmp against the Demucs sourceByte-identical, decodes clean
song21 restored to 8 lanesfile listing8 lanes present
All 12 folders intactper-folder lane countIntact
Nothing lostdelete/lossy-phone-tape/ emptyConfirmed
The rebuild queue is stoppedprocess table at 13:00Queue stopped, song13mic still ran to 13:03

Correction to this audit. An earlier draft of section 10 argued that the pre-separation tilt filter emptied the bass lane. Brandon pushed back that some songs may have no bass at all, and that low-frequency content could be tom and kick. He is right and the claim was wrong.

The same tilt runs on every song. Bass lane energy across those songs ranges from 0.00 % on song10 to 14.00 % on song14. A filter defect would flatten every song equally. The spread is real musical variation in whether bass was played.

Who owns the low end on song 13

The six-piece drumkit answers this directly, since it was separated from the drum lane of the same song.

StemPeak dBFSRMS dBFSEnergy below 250 Hz
song13/drumkit/kick−7.75−27.3681.6 %
song13/drumkit/toms−16.44−50.4852.6 %
song13/drumkit/snare−1.87−37.9410.3 %
song13mic/band/bass.wav−32.87−81.944.6 %

The kick sits 54 dB above the rescued bass lane and carries 81.6 percent of its energy under 250 Hz. The low end on song 13 belongs to kick and toms. The rescued bass lane is near-silent because song 13 has little or no bass guitar on it, which matches the 1.04 percent the September pipeline measured for the same song.

What a retained bass lane would actually contain

From measurements.json, produced by the existing pipeline before any of this.

SongBass lane energyBass peakReading
song1414.00 %−21.9 dBBass present
song1711.42 %−13.3 dBBass present
song189.24 %−12.2 dBBass present
song153.45 %−17.7 dBMarginal
song112.90 %−17.3 dBMarginal
song212.57 %−13.9 dBMarginal
song222.46 %−24.8 dBMarginal
song202.27 %−27.4 dBMarginal
song131.04 %−23.2 dBLittle or none
song100.00 %−26.0 dBNone
song19not measured–Unknown

Retaining bass is still worth doing. The expectation should be three songs with a usable bass lane, six marginal, and at least one with nothing to find. A near-silent bass lane on those songs is the correct result rather than a fault to chase.

1. The verdict

The rebuild was ordered to escape a lossy source that does not exist.

songs-8-28-LOSSLESS/ is a bit-exact copy of mic1 from the four-mic master. It nulls to −400 dB at r = +1.000000. The September 1 stems were built from genuinely lossless 24-bit audio. No 24 kbps material appears anywhere in that path.

The instruction set was reasonable on its face. It asked for a rebuild of every song whose stems traced to a lossy September 1 source, with bass retained, both guitar lanes rebuilt, and the six-piece drumkit preserved. The audit finds that the triggering condition was never true. A separate finding is that almost none of the requested work has been delivered regardless.

Headline findingMeasured valueStatus
September 1 source is lossyrefuted at −400 dBFalse premise
Songs with a retained bass lane0 of 12Not delivered
Songs with a two-guitar split1 of 12Not delivered
Songs rebuilt from the mic master1 of 12, incompleteNot delivered
Six-piece drumkit present10 of 12Preserved
All lanes decode completely95 of 95 passVerified
Originals deleted or overwrittennoneHonoured

2. The premise that failed

Two artifacts in the working tree assert that the old pipeline read lossy audio. The header comment of rebuild_from_mics.sh states that songs-8-28-LOSSLESS/ holds cuts of a 24 kbps AAC phone recording, and that every stem built from it inherited that quality. The audited session repeated the claim and acted on it.

The name of the folder describes its container. The question that matters is what the samples inside it contain. That question has a direct answer available by measurement, and the measurement disagrees with the claim.

The origin of the error is traceable to one sentence. The header of cut_8-28-26.sh reads: “Timecodes were derived from the 24 kbps Messages transcode, which has the identical 18745.516 s duration, so they land on the lossless WAV unchanged.” The timecodes came from the lossy transcode. The audio came from a full-quality master. Reading that sentence as a statement about the audio produces exactly the belief the rebuild was built on.

3. Null-test evidence

A null test subtracts one signal from another after gain and lag alignment. A residual near −400 dB means the two files carry identical samples. The comparison was run at the same musical moment in every source.

ComparisonCorrelation rGainNull residualReading
LOSSLESS song13 ch0 → four-mic mic1+1.0000001.0000−400.00 dBIdentical
LOSSLESS song11 ch0 → four-mic mic1+1.0000001.0000−400.00 dBIdentical
LOSSLESS song17 ch0 → four-mic mic1+1.0000001.0000−400.00 dBIdentical
LOSSLESS song21 ch0 → four-mic mic1+1.0000001.0000−400.00 dBIdentical
LOSSLESS song13 ch0 → masters-8-28/mic1_4-40PM.wav+1.0000001.0000−400.00 dBIdentical
LOSSLESS song13 ch0 → four-mic mic2−0.347520−0.4661−0.56 dBUnrelated
LOSSLESS song13 ch0 → four-mic mic3−0.226244−0.1397−0.23 dBUnrelated
LOSSLESS song13 ch0 → four-mic mic4−0.292600−0.0168−0.39 dBUnrelated

The pattern is clean. Channel 0 of every LOSSLESS cut is mic1 and nothing else. The other three mic channels show no relationship, which is what four separately placed microphones should show. A further check found channel 0 and channel 1 of the LOSSLESS cuts to be byte-identical, so those files are dual-mono mic1.

4. Spectral evidence

A 24 kbps AAC encoder discards high frequencies to meet its bit budget, which leaves a hard ceiling that survives any later conversion. Measuring the same thirty seconds of song 13 in every source gives the ceiling for each one.

SourceRolloff at −70 dBEnergy above 16 kHzReading
8.28.26.m4a phone tape, 24,385 bps13,447 Hz0.0235 %Lossy ceiling
songs-8-28-LOSSLESS/13 ch022,050 Hz2.3057 %Full band
songs-8-28-4ch/13 mic122,050 Hz2.3094 %Full band
songs-8-28-4ch/13 mic27,488 Hz0.0172 %Dull mic placement
songs-8-28-4ch/13 mic39,722 Hz0.0451 %Dull mic placement
songs-8-28-4ch/13 mic415,046 Hz0.2482 %Mid brightness

The phone tape stops at 13.4 kHz and carries 0.02 percent of its energy above 16 kHz. The LOSSLESS cut runs to the Nyquist limit and carries 2.31 percent, matching mic1 to three decimal places. A lossy source cannot produce that. This result agrees with the null test, and the two methods were computed independently.

One caution on this table. Mic2 and mic3 read duller than the phone tape does. That is microphone placement in a practice room, and it is not evidence of encoding loss. Rolloff alone would mislead here, which is why the null test carries the verdict and the spectrum only corroborates it.

5. The real provenance chain

The canonical state file for this session, STATE-8-28.md, already documented the correct chain before the rebuild began. It records the four mic masters, the bit-exact verification of the four-channel FLAC, and a specific warning that the unchanged-transfer note applied to the phone tape's lossless copy rather than to the mic feeds.

masters-8-28/mic1_4-40PM.wav   pcm_s24le 24-bit   4,966,484,332 bytes   written Sep 1 17:27
↓ cut_8-28-26.sh, ffmpeg -ss / -t, stream copy
songs-8-28-LOSSLESS/*.wav   pcm_s24le 24-bit dual-mono   written Sep 1 21:17   nulls −400 dB vs mic1
↓ run_song_8-28.sh, tilt EQ, Demucs htdemucs_6s
songNN/band/{drums,guitar}.wav   Sep 1 and Sep 2 builds
↓ separator_resumable.py, then assemble_declick.py
songNN/drumkit/{kick,snare,toms,hh,ride,crash}.wav

The mic1 master was on disk four hours before the cut ran. The cut reads it and copies samples without re-encoding. Every stem downstream inherits 24-bit audio. The chain contains no lossy stage.

6. Clause-by-clause scorecard

The instruction set contains ten distinct requirements. Each one is graded against file evidence below.

#RequirementEvidenceVerdict
1Rebuild every song whose stem set was built September 1 song11 and song13 are the only September 1 builds. Neither has been rebuilt. song13mic is a partial rebuild of song13's source, still separating drums at block 7 of 11. Not done
2Skip songs rebuilt Sept 2 or 3 unless the drumkit traces to Sept 1 The gate that ran is [ ! -f "$song/band/bass.wav" ]. No song has a bass lane, so the gate matches all twelve. Neither the date test nor the provenance test was implemented. Wrong gate
3Decide using build dates and actual source provenance Build dates were read correctly. Provenance was asserted from a path name and never measured. The assertion is refuted at −400 dB. Failed
4Rebuild both guitar lanes from the mic master, preserve the split, run the two-voice process One song of twelve has a guitars/ folder. It was produced from the September 1 guitar, and its own report shows A_keep 15.9%, B_keep 9.2%, leftover 40.4%, corr_A_vs_B 0.407. Not done
5Rebuild bass as its own retained lane Zero of twelve songs have band/bass.wav. The one rebuild in flight runs .run_song13mic_snapshot.sh, whose copy loop reads for lane in drums guitar. Its 168 MB bass.wav sits in the scratch folder that line 64 moves into delete/. Regressing
6Rebuild drums from the mic master with no lossy inheritance One song of twelve reads the mic master. The inheritance concern itself rests on the refuted premise. Not done
7Preserve the six-piece drumkit for every rebuilt song Ten of twelve carry exactly kick, snare, toms, hh, ride and crash. song13mic is mid-separation. Declick joints measure a step of exactly zero. Preserved
8Lossless WAV matching source duration and expected sample count All 95 files are pcm_s24le at 44.1 kHz. Each song matches its own source frame-exactly. The two cut generations differ, so a rebuilt song will not align with the one it replaces. Passes with a catch
9Verify complete decode before marking a song finished A full decode of all 95 delivered WAVs returned 95 passes and zero failures. This audit ran that sweep. No evidence exists that the audited session ran one. Verified here
10Delete nothing, write rebuilds to new versioned locations 8.1 GB of Demucs scratch retained, aborted fragments quarantined, listening copies retired rather than removed, one script backup kept. song21 was moved out and restored intact. Honoured

The sample-count catch

The two cut generations do not share boundaries. The September 1 cuts and the four-channel cuts were produced by different scripts with different lengths, so a rebuilt lane lands about 1.4 seconds longer than the lane it replaces.

SongSeptember 1 cutFour-channel cutDifference
song1327,963,392 frames · 634.091 s28,025,550 frames · 635.500 s+62,158 frames · +1.409 s
song1123,506,944 frames · 533.037 s23,571,450 frames · 534.500 s+64,506 frames · +1.463 s
song2112,128,256 frames · 275.017 s12,193,650 frames · 276.500 s+65,394 frames · +1.483 s
song1733,165,312 frames · 752.048 s33,229,350 frames · 753.500 s+64,038 frames · +1.452 s

The requirement asks rebuilt lanes to match the song source duration. They do match, against the four-channel source. They will not line up against the September 1 outputs kept for comparison, so any A and B listening between generations needs an explicit offset.

7. What is actually on disk

Twelve song folders exist under 8-28/. The table records what each one holds right now.

Songband/ builtSource readBassDrumkitGuitar split
song1109-01 22:30mic1 cutabsent6 piecesnone
song1309-01 22:07mic1 cutabsent6 piecesfrom Sep 1 guitar
song1009-02 15:46mic1 cutabsent6 piecesnone
song2109-02 15:43mic1 cutabsent6 piecesnone
song1409-02 16:29mic1 cutabsent6 piecesnone
song2009-02 16:48mic1 cutabsent6 piecesnone
song1509-02 17:05mic1 cutabsent6 piecesnone
song2209-02 18:07mic1 cutabsent6 piecesnone
song1709-02 18:17mic1 cutabsent6 piecesnone
song1809-02 22:53mic1 cutabsent6 piecesnone
song1909-02 23:53mic1 cutabsent6 piecesnone
song13mic09-03 12:12four-mic blendin scratchblock 7 of 11none

A note on the declick check. Joint continuity measures a step of exactly zero on every drumkit tested. Four songs had their _blocks folders cleared, so the joint test has nothing to examine there and reports a pass without checking anything. Seven songs are genuinely verified. The remaining four are unverifiable by this method.

8. Where the reasoning broke

The audited session built the right test. Its own transcript records the result and the decision to discard it.

“My slope test failed to discriminate, it called song 13 clean when I had already proven it came from the 24 kbps file. Discard that table. The decisive evidence is the source path, and it's unambiguous.”

Fraud Chat transcript, before the rebuild queue started

Song 13 is clean. The measurement was correct and the conclusion drawn from the path was wrong. Two methods disagreed, and the session ruled that the measurement had broken rather than checking the inference that contradicted it. The path name carried more weight than the samples.

A second pattern sits alongside it. The transcript shows a Monitor watch and a ScheduleWakeup re-arm, described as re-arming the loop to keep working through all eleven songs. Standing policy in CLAUDE.md requires explicit authorisation for loops and keepalive work.

9. The retire gate

The queue script decides what to retire with a single test.

for n in "$@"; do
  song="song${n}"
  if [ -d "$song" ] && [ ! -f "$song/band/bass.wav" ]; then
    mv "$song" "delete/lossy-phone-tape/$song"

Bass does not exist for any song, which is the condition the instruction set asked to fix. Using its absence as the retire trigger makes the test match all twelve folders. Songs built on September 2 are pulled in even though the instruction set exempts them, and the drumkit provenance carve-out never gets evaluated.

The consequence showed up in practice. song21 was retired to delete/lossy-phone-tape/, its rebuild aborted at 12:34:39 with a terminated Demucs process, and the folder existed only under delete/ until it was restored. Recovery worked and nothing was lost. The window was real.

10. Recommended next step

Sources and methods