From c2e1f7166ddddd9a6b941f3acfec0045485b9b40 Mon Sep 17 00:00:00 2001 From: aurascoper Date: Mon, 27 Jul 2026 15:02:54 -0500 Subject: [PATCH] ci: run A2 app and session suites MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The deterministic Swift step names five targets. Package.swift declares nine, and two of the omitted ones carry PR #32's load-bearing regressions: NeuralComposeAppTests 116 tests fail-closed runtime, presentation DialecticSessionTests 5 tests headless runtime factory 121 tests that CI has never executed, which is most of the gap between the 417 CI reports and the 616 in the historical acceptance record. Both pass on this base with 0 failures. A `--filter` matching nothing exits 0, so adding the targets alone would risk another green step that ran nothing. The guard asserts one sentinel class per target and floors each target's discovered count, since sentinels alone would still pass if the rest of a target vanished. Floors sit below the current 116/5 so ordinary additions never trip them. RuntimeIdentityPresentationTests is deliberately not asserted: it arrives with #32 and does not exist on this base. Grepping for it here would fail CI immediately. #32 adds it as a third sentinel when that file lands. BCILLMTests and WorldModelDemoTests remain unselected — MLX .eval() faults on a GPU-less runner, and the WorldModel demo needs exported CoreML artifacts. ci.yml stays under its named D0/CI lane owner rather than growing #32 by a twenty-second unrelated file. Co-Authored-By: Claude Fable 5 --- .github/workflows/ci.yml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f83316..4c890a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,6 +65,44 @@ jobs: # covered socket-free by MuseOSCDecoderTests / MindMonitorDecoderTests, # which still run. Run the socket integration test locally. + # The step above names five targets. The package declares nine, and the + # app-level fail-closed, runtime-presentation, cancellation, and headless + # runtime-factory regressions live in two it never selected: + # NeuralComposeAppTests (116 tests) and DialecticSessionTests (5). + # + # Assert they are discoverable before running them. A `--filter` that + # matches nothing exits 0, so a renamed, moved, or emptied target would + # otherwise turn into another green step that ran nothing. + - name: Assert A2 suites are discoverable + run: | + swift test list > /tmp/neuralcompose-tests.txt + + # Sentinel classes, one per target. + grep -q "AppViewModelRuntimeFailClosedTests" /tmp/neuralcompose-tests.txt \ + || { echo "::error::AppViewModelRuntimeFailClosedTests not discoverable"; exit 1; } + grep -q "RuntimeFactoryClaudeResolutionTests" /tmp/neuralcompose-tests.txt \ + || { echo "::error::RuntimeFactoryClaudeResolutionTests not discoverable"; exit 1; } + + # Sentinels alone would still pass if the rest of a target vanished, + # so floor each target's discovered count too. Floors are set below + # the current 116/5 so ordinary test additions never trip them. + app=$(grep -c '^NeuralComposeAppTests\.' /tmp/neuralcompose-tests.txt) + session=$(grep -c '^DialecticSessionTests\.' /tmp/neuralcompose-tests.txt) + echo "discovered: NeuralComposeAppTests=$app DialecticSessionTests=$session" + [ "$app" -ge 100 ] \ + || { echo "::error::NeuralComposeAppTests discovered $app, expected >= 100"; exit 1; } + [ "$session" -ge 5 ] \ + || { echo "::error::DialecticSessionTests discovered $session, expected >= 5"; exit 1; } + + # RuntimeIdentityPresentationTests is deliberately NOT asserted here: it + # arrives with PR #32. Add it as a third sentinel when that lands, so the + # guard stays true at every revision rather than failing on this base. + - name: Test (A2 app and session suites) + run: | + swift test \ + --filter NeuralComposeAppTests \ + --filter DialecticSessionTests + # The Python contract suites had no CI at all until now, which is how a test # importing an uncommitted module (neuralcompose_eeg.structured_state) reached # a pull request unnoticed: build-and-test above is Swift-only.