What's wrong
storage.generate takes a spectral_alpha parameter that sets the k^-alpha singular-value decay for --fill decaying-spectrum (_fill_decaying_spectrum(mat, seed, rank, spectral_alpha)). The strategy CLI exposes --fill decaying-spectrum and --data-rank, but there is no flag for spectral_alpha and runner.run / runner.compare don't thread it through — so every --fill decaying-spectrum run is hardcoded to the default alpha=1.0. It is the only storage.generate knob with no CLI path.
That matters now that decaying-spectrum is a scored track with its own accuracy floor (0.90): a contributor can't sweep the decay rate to see where their transform holds up vs. where it degrades — the whole point of that fill ("prioritize the strongest structure").
Suggested fix
Add --spectral-alpha (float, default 1.0, >= 0) to the strategy CLI and thread it through runner.run / runner.compare to storage.generate. Reject negatives at the CLI boundary (a negative exponent grows the tail — not a decaying spectrum), matching the existing --n / --data-rank validation.
End-to-end effect (N=512, decaying-spectrum, M=48): --spectral-alpha 0.5 → rel_err 0.70; --spectral-alpha 3.0 → rel_err 0.004 — a steeper spectrum is more compressible, as expected.
strategy/ is an open (non-protected) zone → fix lane. Distinct from #229 (which only corrects the --data-rank help text).
What's wrong
storage.generatetakes aspectral_alphaparameter that sets thek^-alphasingular-value decay for--fill decaying-spectrum(_fill_decaying_spectrum(mat, seed, rank, spectral_alpha)). ThestrategyCLI exposes--fill decaying-spectrumand--data-rank, but there is no flag forspectral_alphaandrunner.run/runner.comparedon't thread it through — so every--fill decaying-spectrumrun is hardcoded to the defaultalpha=1.0. It is the onlystorage.generateknob with no CLI path.That matters now that
decaying-spectrumis a scored track with its own accuracy floor (0.90): a contributor can't sweep the decay rate to see where their transform holds up vs. where it degrades — the whole point of that fill ("prioritize the strongest structure").Suggested fix
Add
--spectral-alpha(float, default 1.0,>= 0) to the strategy CLI and thread it throughrunner.run/runner.comparetostorage.generate. Reject negatives at the CLI boundary (a negative exponent grows the tail — not a decaying spectrum), matching the existing--n/--data-rankvalidation.End-to-end effect (N=512, decaying-spectrum, M=48):
--spectral-alpha 0.5→ rel_err 0.70;--spectral-alpha 3.0→ rel_err 0.004 — a steeper spectrum is more compressible, as expected.strategy/is an open (non-protected) zone →fixlane. Distinct from #229 (which only corrects the--data-rankhelp text).