Problem
When it_loopback_ir is routed through real ports (AC_LOOPBACK_OUT / AC_LOOPBACK_IN set), the daemon it spawns runs under an isolated HOME whose config is written by write_loopback_config (ac-rs/crates/ac-daemon/tests/it_loopback_ir.rs:270). That config sets no drive_max_dbfs, so the daemon falls back to the default ceiling of −10 dBFS (ac-rs/crates/ac-core/src/config.rs:18-19). The rig's own ceiling in ~/.config/ac/config.json is never read.
So on a rig, the only thing holding the sweep at the standing −40 dBFS is the request (AC_LOOPBACK_LEVEL_DBFS). .agents/rig.md → hard constraints says a request-side-only limit is not the interlock: the clamp must live in the config of the daemon actually running the session. plot_ir has honoured that clamp since #360, but this test's daemon gets it set 30 dB higher than the rig allows.
Observed 2026-09-14 on pupu (192.168.9.27) while verifying PR #441: AC_LOOPBACK_LEVEL_DBFS=-40 was the effective limit. scripts/rig/run-loopback-ir.sh in that PR adds a request-side refusal above the rig ceiling. That is a convenience, not the interlock, and does not fix this.
What must be true
- When the test drives real ports, its daemon's config carries a
drive_max_dbfs that is not above the rig's standing ceiling. Where the value comes from (env var, reading the rig config, fixed −40) is a design choice for this issue.
- The self-loop route (
jackd -d dummy, no port variables) keeps working unchanged.
What makes the check fail
A test must show that with real ports named and AC_LOOPBACK_LEVEL_DBFS set above the intended ceiling, the level that reaches the engine is the ceiling, not the request. A test that only asserts a key exists in the written config cannot go red on the harm case.
Problem
When
it_loopback_iris routed through real ports (AC_LOOPBACK_OUT/AC_LOOPBACK_INset), the daemon it spawns runs under an isolatedHOMEwhose config is written bywrite_loopback_config(ac-rs/crates/ac-daemon/tests/it_loopback_ir.rs:270). That config sets nodrive_max_dbfs, so the daemon falls back to the default ceiling of −10 dBFS (ac-rs/crates/ac-core/src/config.rs:18-19). The rig's own ceiling in~/.config/ac/config.jsonis never read.So on a rig, the only thing holding the sweep at the standing −40 dBFS is the request (
AC_LOOPBACK_LEVEL_DBFS)..agents/rig.md→ hard constraints says a request-side-only limit is not the interlock: the clamp must live in the config of the daemon actually running the session.plot_irhas honoured that clamp since #360, but this test's daemon gets it set 30 dB higher than the rig allows.Observed 2026-09-14 on pupu (192.168.9.27) while verifying PR #441:
AC_LOOPBACK_LEVEL_DBFS=-40was the effective limit.scripts/rig/run-loopback-ir.shin that PR adds a request-side refusal above the rig ceiling. That is a convenience, not the interlock, and does not fix this.What must be true
drive_max_dbfsthat is not above the rig's standing ceiling. Where the value comes from (env var, reading the rig config, fixed −40) is a design choice for this issue.jackd -d dummy, no port variables) keeps working unchanged.What makes the check fail
A test must show that with real ports named and
AC_LOOPBACK_LEVEL_DBFSset above the intended ceiling, the level that reaches the engine is the ceiling, not the request. A test that only asserts a key exists in the written config cannot go red on the harm case.