---
log: 028
title: "Silence graded A: the day the grader's best loop was nothing at all"
date: 2026-08-21
task: "#20 finish the Fred pack · #21 La Cale"
tags: [tooling, sampling, foundry, ui, measurement]
shareable: true
---

## Cap (what & why)

Finish the Fred again.. stem pack into loadable Tidal kits, and build the page PLN
asked for to hear whether they are any good — *"click-based looping not just strudel
coding"*. The pack was "done" three times before it was done.

## Manœuvre (how)

The gate blocked the pack, so I measured the files it flagged instead of adjusting the
flag. 24 of 153 shipped loops had a peak between **-104 and -75 dBFS**. Not quiet.
Digital silence. Graded **0.707-0.896, tier A and B**.

Every sub-score in the loop rubric is vacuously perfect on nothing. The seam between
two silences is immaculate. The DC of silence is exactly zero. Its zero crossings are
trivially fine. Its length is a bar multiple by construction. Level carries 10% of the
composite, so silence scores 0.90 × perfect + 0.10 × nothing and comes out **tier A**.
The composite had a degenerate optimum at *no audio at all*, and the finder, doing
exactly its job, walked into it: `fred_marea_bass` shipped three loops and all three
were silence — from a stem measuring -22 dBFS RMS at 54% activity.

Nothing downstream could catch it. The dead-bar check compares bars to **each other**,
so it finds a loop that fades out and is blind to one that was never there: a uniformly
silent clip has a perfectly flat bar profile.

So presence stopped being a weighted term and became a **precondition**. The floor was
placed, not tuned: the pack's peaks run -104…-75 and then jump to -47.1, a **28.4 dB
empty gap**, so -60 dBFS sits in clean air.

Then the second half of the same bug. Filtering at export was the right fix in the wrong
place: BIGHEN's strings stem plays in two sections and rests between them, and all six
windows the finder ranked highest sat inside a rest — so `fred_bighen_tonal` went from
four silent loops to **one** real one when it should have gone to four. The finder's
composite is degenerate on silence too (a rest is maximally self-similar in the SSM), so
presence is now checked **before** ranking, sharing one constant with the grader by
import.

Meanwhile: **La Cale**, `armada/ui/kits.html`. The rack schedules every voice at
`rate = dur / (bars × barlen)`, which is literally `loopAt`, so what you hear is what
the rig plays and the exported `.tidal` block is the same two numbers in Tidal's syntax.

## Prise (findings / artifacts)

- `engine/grade.py` — `empty_dbfs = -60`, presence measured on the **channels**, not the
  mono sum (an anti-phase pair sums to zero and is not empty).
- `engine/loops.py` — presence gate before ranking, via a per-beat peak table so it is
  free; `engine/kitcheck.py` asks the same question from its own code path.
- `kitgate.py` — 5th check: does `n 3` on disk address the file the cheat sheet names.
- `armada/ui/kits.html` + `src/kits/` + `tools/foundry/kitindex.py`.
- Python suite 112 → 125; new vitest suite 24 cases.

## Sel (the shareable learning)

**A composite score is a specification of what you want, and every term you weight
lightly is a loophole.** Nobody wrote "prefer silence". It fell out of five reasonable
measures, each correctly implemented, none of which had an opinion about whether there
was any audio. Presence is not a quality you trade against seam cleanliness — it is a
precondition, and preconditions belong outside the weighted sum.

**Three tests today passed while proving nothing**, and finding that out was most of the
value. The finder test used the stem's own beat grid, which finds no beats inside
silence, so no window was ever generated there and it passed with the gate disabled —
the bug needs a grid shared from *another* stem, which is exactly how the real caller
works. The niceness test looked its hook up in the wrong scope, got `None`, fell back to
a no-op lambda, and went green. Now the habit is explicit: **break the fix, watch the
test fail, put the fix back.**

**And a background job that takes the desktop down is not a background job.** Nine
children at 88% of a core each put the load average at 15.6 on 16 cores, on the machine
PLN performs on. `nice 19` + `SCHED_IDLE` and half the cores by default — the work is
genuinely background, nothing waits on it but me.

## Hameçon (hook)

"My sample cutter's favourite loop was four bars of nothing — and it scored an A. Here
is why every one of its five measurements agreed."

## Sillage (what it unlocks)

The presence precondition is general, so #23 (auditing the 111 kits that predate the
Foundry) will find the same thing in hand-cut material. La Cale is the missing feedback
loop for every future cut: PLN can now hear a kit in seconds and the manifest's claims
get checked by ear instead of accumulating.
