Stakes. Every Phase 2 board figure was taken at construction defaults, and
the pattern revision's §1.4 already records that four of the sixteen handed the
probe back unchanged. This is the same defect one layer down, and it is worse
than the digest check can see: a class can differ from the bare probe's digest
and still be doing no work at all.
Measured, tools/expander_evidence.py --only boardpatch on branch
effects/p2b-expander, over measure_effect_cost.py's own 128 blocks:
the runner's probe is −20.03 dBFS RMS, −8.62 dBFS peak.
| Expander patch |
digest |
wet:dry |
worst gain reduction |
|
| (bare probe) |
4169efd90ecf44dd |
— |
— |
|
| 0 Gentle Lift |
2bbae09de08c393e |
−0.034 dB |
+0.00 dB |
IDLING |
| 1 Noise Floor Trim |
8094896422edfe43 |
−0.001 dB |
+0.00 dB |
IDLING |
| 2 Snare Tighten |
df0a18570b91ff9d |
−0.240 dB |
−9.42 dB |
working |
| 3 Guitar Amp Hum |
2e054cf90264d160 |
−0.081 dB |
+0.00 dB |
IDLING |
| 4 Room Reduction |
04f32424baa949c6 |
−0.083 dB |
+0.00 dB |
IDLING |
| 5 Hard Downward |
29c081348924face |
−0.001 dB |
+0.00 dB |
IDLING |
| 6 Expander - lean |
2b8339e5f36901dd |
−0.002 dB |
+0.00 dB |
IDLING |
Six of the seven idle: the probe sits above every threshold the class ships,
so the gain computer returns 0 dB on every block and the bytes move only by the
int16 round trip. None of them hands back the bare digest, so the refusal
§1.4 proposes — refuse a render whose digest is the source's — would not have
caught a single one of them.
Expander's own evidence pack named patch 5 Hard Downward as the state a
board run must use. That is right for noise_det and wrong for the runner's
probe. A patch is only a working patch for a given probe, and neither the
dossier template nor the evidence template asks anyone to say which probe.
Three things this suggests, none of them decided here.
measure_effect_cost.py should refuse, or at least flag, a target that
never leaves its own null state — for a dynamics class that is
gain_reduction_db() never moving, for a drive stage a THD near zero, for
a reverb mix 0. A per-family "am I working" readout, not a digest
comparison.
- The evidence template's §4 should carry the probe as well as the patch
in its "settings the figure was taken at" column.
- Every Phase 2 board figure is a figure for an idling graph unless somebody
checks. Twelve classes are already parked on their budgets
(audiocomponents#48) — if the figures were taken idling, the overruns are
understated, and the re-derivation that issue proposes has to be done
from working-patch runs.
Done on the branch: measure_effect_cost.py gained two additive target
suffixes so a run can be taken in the right state and on the right class —
effect:<Name>#<patch> calls program_change() before the timing starts, and
effect:<Name>@rebuilt measures audioeffects.rebuilt.<name> directly (a
parked class is not what create() returns, so a cost run for one silently
measures the old class — Expander's old class digests 2d7c9c11f8455993).
Expander's owed board run is effect:Expander@rebuilt#2, desktop digest
df0a18570b91ff9d.
Stakes. Every Phase 2 board figure was taken at construction defaults, and
the pattern revision's §1.4 already records that four of the sixteen handed the
probe back unchanged. This is the same defect one layer down, and it is worse
than the digest check can see: a class can differ from the bare probe's digest
and still be doing no work at all.
Measured,
tools/expander_evidence.py --only boardpatchon brancheffects/p2b-expander, overmeasure_effect_cost.py's own 128 blocks:4169efd90ecf44dd2bbae09de08c393e8094896422edfe43df0a18570b91ff9d2e054cf90264d16004f32424baa949c629c081348924face2b8339e5f36901ddSix of the seven idle: the probe sits above every threshold the class ships,
so the gain computer returns 0 dB on every block and the bytes move only by the
int16 round trip. None of them hands back the bare digest, so the refusal
§1.4 proposes — refuse a render whose digest is the source's — would not have
caught a single one of them.
Expander's own evidence pack named patch 5 Hard Downward as the state aboard run must use. That is right for
noise_detand wrong for the runner'sprobe. A patch is only a working patch for a given probe, and neither the
dossier template nor the evidence template asks anyone to say which probe.
Three things this suggests, none of them decided here.
measure_effect_cost.pyshould refuse, or at least flag, a target thatnever leaves its own null state — for a dynamics class that is
gain_reduction_db()never moving, for a drive stage a THD near zero, fora reverb
mix0. A per-family "am I working" readout, not a digestcomparison.
in its "settings the figure was taken at" column.
checks. Twelve classes are already parked on their budgets
(audiocomponents#48) — if the figures were taken idling, the overruns are
understated, and the re-derivation that issue proposes has to be done
from working-patch runs.
Done on the branch:
measure_effect_cost.pygained two additive targetsuffixes so a run can be taken in the right state and on the right class —
effect:<Name>#<patch>callsprogram_change()before the timing starts, andeffect:<Name>@rebuiltmeasuresaudioeffects.rebuilt.<name>directly (aparked class is not what
create()returns, so a cost run for one silentlymeasures the old class —
Expander's old class digests2d7c9c11f8455993).Expander's owed board run iseffect:Expander@rebuilt#2, desktop digestdf0a18570b91ff9d.