ac4194c96b
CapturedStdout swallows compose_up_command()/compose_down_command()'s own fmt::print()/spdlog output (spdlog's default sink is stdout) so it doesn't pollute Catch2's console reporting -- but that also meant a failure had no diagnostic trail at all. Both captures are now kept and attached via INFO(), which Catch2 only actually prints alongside a failing assertion in the same scope, staying silent on a normal passing run. Also softens the port-forward reply REQUIRE to CHECK: a flaky reply on one run must never skip the -d/--down cleanup below it, which is exactly what a REQUIRE there would do -- found while investigating a real failure on the actual target device (managed networks not torn down by -d), where losing that diagnostic trail (and, if this were interactive, the -d skip compounding into a real leaked uplink relay) would have made root-causing much harder. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gv3s5jckJKzh6JkMoi2Akz