diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 49a7b5594..5c3e0553c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -174,71 +174,6 @@ jobs: name: ${{ matrix.desktop-artifact-name }} path: ${{ matrix.desktop-artifact-path }} - # Cross-stack interop tests (T16). Builds the Rust hang-listen + - # hang-publish sidecars (nestsClient/tests/hang-interop/), `cargo install`s - # moq-relay + moq-token-cli at the version pinned in - # `nestsClient/tests/hang-interop/REV`, then runs `:nestsClient:jvmTest - # -DnestsHangInterop=true`. See - # `nestsClient/plans/2026-05-06-cross-stack-interop-test.md`. - # - # Linux-only: the cargo install of `moq-relay` 0.10.x has nontrivial - # native deps (aws-lc-sys, ring) that take 5+ min cold; we cache - # both ~/.cargo and the nestsClient/tests/hang-interop/target tree so the warm - # path is a few seconds. macOS / Windows runs would double the - # matrix cost without catching anything Linux doesn't catch — the - # protocol logic is platform-agnostic and the JNA libopus natives - # are already exercised by the unit-level JvmOpusRoundTripTest on - # the Android job. - hang-interop: - needs: lint - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Set up JDK 21 - uses: actions/setup-java@v5 - with: - distribution: 'zulu' - java-version: 21 - - - name: Set up Gradle - uses: gradle/actions/setup-gradle@v4 - with: - cache-read-only: ${{ github.ref != 'refs/heads/main' }} - - # Pin Rust to ≥ 1.95 — moq-relay 0.10.25's transitive dep - # `constant_time_eq 0.4.3` requires it, and ubuntu-latest's - # default Rust version drifts. - - name: Set up Rust - uses: dtolnay/rust-toolchain@stable - - # Cache cargo registry + the sidecar workspace's target/. - # First cold run takes ~6 min for the moq-relay install; - # cached runs ~30 s. - - name: Cache cargo - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - nestsClient/tests/hang-interop/target - ~/.cache/amethyst-nests-interop/hang-interop-cargo - key: ${{ runner.os }}-cargo-${{ hashFiles('nestsClient/tests/hang-interop/Cargo.lock', 'nestsClient/tests/hang-interop/REV') }} - restore-keys: | - ${{ runner.os }}-cargo- - - - name: Run cross-stack interop suite - run: ./gradlew :nestsClient:jvmTest -DnestsHangInterop=true - - - name: Upload interop test report - uses: actions/upload-artifact@v7 - if: failure() - with: - name: Hang Interop Test Reports - path: nestsClient/build/reports/tests/jvmTest/ - test-and-build-android: needs: lint runs-on: ubuntu-latest diff --git a/nestsClient/plans/2026-05-06-cross-stack-interop-test-results.md b/nestsClient/plans/2026-05-06-cross-stack-interop-test-results.md index 65eb63500..75c677ed8 100644 --- a/nestsClient/plans/2026-05-06-cross-stack-interop-test-results.md +++ b/nestsClient/plans/2026-05-06-cross-stack-interop-test-results.md @@ -2,8 +2,9 @@ **Status:** Phases 1–3 (and Phase 2.E follow-ups) landed. Phase 4 (browser harness) and Phase 5 (browser-only scenarios) are running in parallel -agent branches; not yet merged. CI gating (the `hang-interop` job in -`.github/workflows/build.yml`) is live and Linux-only. +agent branches; not yet merged. **CI gating intentionally NOT wired** — +the suite runs locally only via `-DnestsHangInterop=true`. See the +"CI integration" section below. **Scenario inventory (committed in this branch + sister branches):** @@ -422,18 +423,22 @@ relay-side timing under load. ## CI integration -`.github/workflows/build.yml` now has a `hang-interop` job: +**Not wired.** Intentionally kept out of `.github/workflows/build.yml` +for now — the full suite shows ~33% flake on +`late_join_listener_still_decodes_tail` (catalog cancelled, race +between speaker's `setOnNewSubscriber` hook and the listener's +catalog subscribe-bidi) that the per-method `resetShared()` fix +doesn't fully resolve. Wiring CI on a flaky suite would burn +maintainer time on false reds. -- Linux-only (Rust toolchain + libopus available out of the box) -- Caches `~/.cargo` and `~/.cache/amethyst-nests-interop/` between - runs so `cargo install moq-relay` and the workspace `cargo build` - are warm on the second run -- Runs `:nestsClient:jvmTest -DnestsHangInterop=true` -- Depends on the existing `lint` job (only runs after spotless + - ktlint pass) +The suite runs locally via `-DnestsHangInterop=true` and is +documented as the regression bar for any future MoQ wire-format +or moq-lite session-cycle changes. Re-evaluate CI gating after the +late-join flake's root cause lands. -Browser interop will land its own job once `feat/nests-browser-interop` -merges; that job adds `bun install` + Playwright Chromium caching. +Browser interop (`feat/nests-browser-interop`) follows the same +"locally only via `-DnestsBrowserInterop=true`" rule pending its own +flake assessment. ## Pending follow-ups