build: the ADM test is built here but runs where audio exists #61

Merged
triform-admin merged 1 commit from adm/move-out-of-compile-lane into main 2026-07-31 09:34:22 +00:00

The lane is green again, verified by what executed

chromeless-build-adm on 54e33e1Complete, STEP 7 OK, STEP 8 packaged.

Read from the persisted build log rather than trusting the job's exit status
(the recurring lesson from #60):

SKIP-RUN: cloud_browser_adm_unittests built OK but NOT executed in this lane.
SKIP-RUN: reason: needs a live PulseAudio server with a capture source;
          compile pod has none. Runs in the runtime image (M5.5).
          Still compiled+linked here.
STEP 7 summary: ran 7 target(s) minus 1 skipped: cloud_browser_adm_unittests
STEP 7 summary: those were COMPILED and LINKED here, just not run.

binaries INVOKED:                       SUCCESS lines: 6
  cloud_browser_encoder_unittests
  cloud_browser_framesink_capturer_unittests
  cb_wire_envelope_unittests
  cloud_browser_input_dispatch_unittests
  cloud_browser_pointer_state_unittests
  cb_env_config_unittests

STEP 7/10 unit tests OK (2s)
STEP 8/10 package binary OK (2s)

6 invoked, 6 green, 1 skipped by name with its reason in the log. All 8
declared test targets still compile and link here — including the skipped one,
which is the part worth keeping: compiling it is what found the abstract
CbAudioTestRecorder and the missing link-time webrtc_overrides deps.

build_targets_lint still counts adm as covered, correctly — it genuinely is
built.

What this does not claim

The ADM test is still RED wherever it runs. It is a deliberate RED-first test
and stays that way until the M5.5 audio work lands. This change moves it to a
place where its verdict can mean something, and stops it holding the compile
lane hostage in the meantime.

## The lane is green again, verified by what executed `chromeless-build-adm` on `54e33e1` — **Complete**, STEP 7 OK, STEP 8 packaged. Read from the persisted build log rather than trusting the job's exit status (the recurring lesson from #60): ``` SKIP-RUN: cloud_browser_adm_unittests built OK but NOT executed in this lane. SKIP-RUN: reason: needs a live PulseAudio server with a capture source; compile pod has none. Runs in the runtime image (M5.5). Still compiled+linked here. STEP 7 summary: ran 7 target(s) minus 1 skipped: cloud_browser_adm_unittests STEP 7 summary: those were COMPILED and LINKED here, just not run. binaries INVOKED: SUCCESS lines: 6 cloud_browser_encoder_unittests cloud_browser_framesink_capturer_unittests cb_wire_envelope_unittests cloud_browser_input_dispatch_unittests cloud_browser_pointer_state_unittests cb_env_config_unittests STEP 7/10 unit tests OK (2s) STEP 8/10 package binary OK (2s) ``` 6 invoked, 6 green, 1 skipped **by name with its reason in the log**. All 8 declared test targets still compile and link here — including the skipped one, which is the part worth keeping: compiling it is what found the abstract `CbAudioTestRecorder` and the missing link-time `webrtc_overrides` deps. `build_targets_lint` still counts adm as covered, correctly — it genuinely is built. ### What this does not claim The ADM test is still RED wherever it runs. It is a deliberate RED-first test and stays that way until the M5.5 audio work lands. This change moves it to a place where its verdict can mean something, and stops it holding the compile lane hostage in the meantime.
build: the ADM test is built here but runs where audio exists
All checks were successful
CodeQL / Analyze go (pull_request) Has been skipped
CodeQL / Analyze javascript-typescript (pull_request) Has been skipped
CI / Docs link check (pull_request) Successful in 31s
native-peer-gate / native-peer-gate-scaffold (permissive) (pull_request) Successful in 33s
CI / Container smoke test (pull_request) Successful in 1m4s
CI / Lint (pull_request) Successful in 1m17s
E2E / docker-compose + Playwright (pull_request) Successful in 2m21s
native-peer-gate / native-peer-gate-strict (M7 gate) (pull_request) Successful in 5m25s
54e33e15d0
STEP 7 gains CHROMELESS_TESTS_SKIP_RUN — an opt-in, per-lane list of test
binaries that a lane BUILDS but does not EXECUTE — and the t7 lane uses it
for cloud_browser_adm_unittests.

Why that test specifically. It drives the real libwebrtc Pulse backend, so it
needs a live audio server with an actual capture source. This is a compile
pod. Even with pulseaudio installed and running (which the previous commit
did), there is no sound card and no monitor source, so InitRecording()
returns -1 and the test is RED for a reason that says nothing about the code.
It is an integration test wearing a unit test's clothes; the runtime image
already runs pulseaudio under supervisord, and that is where its verdict can
mean something.

It is still BUILT here, deliberately. Compiling it is what found two real
defects earlier today — CbAudioTestRecorder was abstract, and the test
passthrough was missing link-time webrtc_overrides deps — and the ~10-week
gap this whole mechanism came out of was "declared but never COMPILED".
Skipping the run gives up nothing that compiling it buys.

The obvious risk is recreating the silent-skip class STEP 7 was rewritten to
close. Three guards, all tested against a harness with fake binaries rather
than reasoned about:

  1. opt-IN per lane, never a default                     (T1: no skip -> all run)
  2. every skip logged BY NAME with its reason, at the
     same volume as a failure — a skip you cannot see
     is a lie                                             (T2: skip logged, others run)
  3. a name in the list that is not in this lane's
     target list is a HARD ERROR, so a stale entry
     cannot survive a rename and quietly stop running
     something                                            (T3: rc=1)

and the ordering matters: the is-it-executable check runs BEFORE the skip
check, so a skipped binary that failed to LINK is still a build failure
(T4: rc=1). Skipping the run must never soften "it did not build".

After this the lane can go green again while still compiling all 8 declared
test targets, and build_targets_lint still counts adm as covered — because it
genuinely is.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
triform/chromeless!61
No description provided.