Repository navigation
ci(browser): restore the Chromium job on Rust 1.99 and prove it ran - #217
Merged
grumbach merged 1 commit intoOct 7, 2026
Merged
Conversation
The "Real Chromium and local nodes" job builds the pinned ant-node with the workflow's `RUSTFLAGS: -D warnings` on the latest stable toolchain. Since stable moved to Rust 1.99 on 2026-10-01, the pin (c092f225) no longer compiles: 1.99 deprecates `Atomic::fetch_update`, which its `web_rtc` byte budget calls twice. The devnet never starts and no browser test runs. - Pin 26129a26, the ant-node main commit that merges the Rust 1.99 update into the 0.21.0 release. Its tree is the v0.21.0 tag plus that one change, whose only non-test source edit renames the two calls to `try_update`, the same method. The lockfile is unchanged, so the nodes run the code of the current release, with the pointer rules this suite already exercised. No release contains the rename, and the release archives ship `ant-node` without the `ant-devnet` binary the suite runs, so a release binary cannot replace the build. - Build the pin without `-D warnings`. It is old code kept to test this client against older nodes. Each new stable toolchain can add warnings to it, and those are not this repository's to fix. The browser bindings built from this repository earlier in the job still deny warnings. - Without `ANT_NODE_DIR`, refuse to start the devnet unless the sibling checkout is the pinned revision without tracked edits, and build it with `--locked`, so a run cannot test a different node or re-resolve its dependencies. An explicit `ANT_NODE_DIR` builds as before. - Fail an otherwise passing run unless every test ran and passed, and reject `.only` in CI. Playwright exits 0 when tests are skipped.
dirvine
approved these changes
Oct 6, 2026
dirvine
left a comment
Member
There was a problem hiding this comment.
Reviewed WithAutonomi/ant-client at 56e653d. No blocking findings.
Independent review: GLM-5.2 returned APPROVE-WITH-CONCERNS with no blockers. Its completed API response was recovered after the coordinating worker timed out (model z-ai/glm-5.2, finish_reason stop). Coordinator adjudication resolved its substantive concerns:
- A local Playwright 1.62.1 probe confirms --grep excludes unselected tests correctly; no false failure.
- Rejecting test.fail() expected failures is deliberate: this integration suite must actually pass its operations. The PR documents that behaviour.
- The merge between v0.21.0 and the compiler-fix commit has an identical tree to v0.21.0 (GitHub comparison has no changed files). The inferred extra docs/workflow change was not real.
- A malformed/empty pin fails closed; diagnostic wording is not a blocker.
Verification:
- Warning override applies only to npm test/node compilation. Client browser bindings retain -D warnings.
- New node pin preserves the release lockfile. Rust 1.99 fetch_update directly delegates to try_update. Published ant-protocol 3.1.0 src is byte-identical to the old protocol git pin (14 files).
- Nine local reporter integration cases passed, including --grep, skips, expected failure, real failure, CI .only, empty discovery and --list.
- Seven temporary-Git/stub-cargo pin-check cases passed. These check harness control flow, not Rust compilation.
- Hosted Chromium job ran both real-browser tests and reported 'Run guard: all 2 tests ran and passed': https://github.com/WithAutonomi/ant-client/actions/runs/37408059513/job/112105188412
- Head unchanged and all returned CI checks green, including Security Audit and both Merkle E2E jobs.
Limits: Full Chromium/node integration was verified from hosted logs, not rerun locally. This is code-review approval, not merge or deployment authorisation.
2 of 7 tasks
2 of 7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
From stable Rust's move to 1.99 on 2026-10-01 until this PR, the "Real Chromium and local nodes" job failed on every PR before any test ran, including #208, #210 and the merged #215 and #216. Those runs built the pinned ant-node,
c092f225, with the workflow'sRUSTFLAGS: -D warnings. Rust 1.99 deprecatesAtomic::fetch_update, which that node calls twice insrc/web_rtc.rs, so the build stopped at two errors and the devnet never started. The last green run was on 2026-10-01 at 10:44 UTC on Rust 1.98.1.This PR moves the pin past ant-node's Rust 1.99 fix while keeping released node code, so the suite still tests this client against older nodes. It stops future toolchain warnings in that old code from breaking the job, and makes the job prove that it ran the pinned node and every Chromium test.
Changes
node-revision:c092f225→26129a26. That is the ant-nodemaincommit that merges the Rust 1.99 update (ant-node #245) into the 0.21.0 release. Its tree is thev0.21.0tag plus that one change. The only non-test source edit renames the two calls totry_update, the same method.Cargo.lockis unchanged, so the nodes run the code of the current release. Fromc092f225tov0.21.0, the runtime changes are the version number, one Windows-only lockfile edge (winapi-util→windows-sys0.48), andant-protocol3.1.0 from crates.io. That release'ssrc/is identical to ant-protocold11d1010, the git revisionc092f225pinned. The pointer rules this suite exercises are therefore unchanged. No release contains the rename.-D warnings(RUSTFLAGS: ""on the one step that compiles it). The pin is deliberately old code: each new stable can add warnings to it, and those are not this repository's to fix. The browser bindings built from this repository earlier in the job still deny warnings.start-devnet.mjs: withoutANT_NODE_DIR, it refuses to start unless the sibling checkout is the pinned revision without tracked edits, and builds it with--locked. WithANT_NODE_DIRit builds whatever is there, as before.run-guard.jsPlaywright reporter: fails an otherwise passing run unless every discovered test ran and passed.forbidOnlyrejects.onlyin CI. Plain Playwright exits 0 when tests are skipped.Alternatives considered
c092f225, or pin thev0.21.0tag, and only drop-D warnings. This works:c092f225builds with two warnings and passes the suite (below). But the pin would still fail the repository's own flags on today's toolchain. Moving the pin makes the build clean today, and dropping-D warningscovers the next toolchain.cargo +1.98.1). That fixes the compiler version, but it is a second pin to keep in step withnode-revision, plus a toolchain install on every run. Warnings are what broke this job. A hard compiler break in old code would still fail the job loudly.ant-nodeandbootstrap_peers.toml. The suite runsant-devnet(seven nodes, Anvil and the browser manifest), which no release ships.Linear issue
Closes V2-1399
ant-node #245, one of this issue's Rust 1.99 PRs, says in its description: "
ant-clientandevmlibwere checked and need nothing". This job turned out to be the ant-client part.Risk tier
Proposing T0: only the CI workflow and the browser test harness change. No crate source changes.
Compatibility
Semver impact
Test evidence
All local runs used macOS arm64, rustc 1.99.0 (the toolchain the hosted job now gets), Playwright 1.62.1 and wasm-pack 0.15.0.
Failure reproduced.
c092f225withRUSTFLAGS="-D warnings" cargo +1.99.0 build --bin ant-devnetexits 101 with the same twofetch_updateerrors atsrc/web_rtc.rs:170and:202as the hosted run on fix(browser): gather ICE candidates one connection at a time #216.New pin builds.
26129a26with--lockedbuilds without warnings under bothRUSTFLAGS=""and the old-D warnings. Cargo does not re-resolve the lockfile.Full browser suite on the new pin (
CI=1,RUSTFLAGS="",npm test): three local runs, the last on this commit. Each printed 2 passed, thenRun guard: all 2 tests ran and passed. The upload/recovery and pointer tests ran in real Chromium against seven nodes and Anvil. The two earlier runs used drafts ofstart-devnet.mjsthat started the pinned node the same way. They differed only in how the pin check treats tracked edits, a missing checkout andANT_NODE_DIR.Hosted run on this PR (job, head
56e653d, rustc 1.99.0): the node was checked out at26129a2, and the step ran withRUSTFLAGS:empty. The log showsStarting ant-devnet from the pinned node 26129a26…andant-node v0.21.0built in 5m35s. Then2 passed (5.8m)andRun guard: all 2 tests ran and passed. The job took 10 minutes.Unrelated hosted flake, passed on re-run.
Merkle E2E (ubuntu-latest)first failedtest_merkle_payment_across_batch_boundary. All three attempts collected fewer merkle candidates than the 16 needed (14, 13, then 7). That test runs a native 35-node testnet on the crates.ioant-node, not this pin or harness. The same failure hit fix(pointer): read back a completed write, and pay only for writes that can land #208's branch on 2026-09-30. The re-run passed (7 of 7 tests), so all 18 checks pass on56e653d.Old pin without
-D warnings.c092f225viaANT_NODE_DIRwithRUSTFLAGS="": two deprecation warnings, build succeeds, 2 passed. The flag change alone would have prevented this outage.Pin check (via
npm test, and with a stubcargothat prints its arguments): a sibling checkout atc092f225is refused ("is at c092f225…, not the pinned 26129a26…"), and so is a tracked edit at the pin. A missing or non-git sibling gets the same instruction. All four exit 1 before building. An untracked file is allowed. The pinned path passes--locked. An explicitANT_NODE_DIRskips the check and--locked.Run guard (dummy specs under the same config):
test.fail())--list.onlywithCI=1forbidOnlyDependency drift. No
Cargo.toml,Cargo.lock,package.jsonorpackage-lock.jsonchanges here. The pinned node's lockfile is byte-identical tov0.21.0's.Rust checks.
cargo clippy --all-targets --all-features,cargo clippy -- -D warnings,cargo fmt(no changes) andcargo doc --no-depswith-D warningsall pass on rustc 1.99.0.cargo test --lib --allwith-D warnings: 753 passed.New dependency
none
ADR
n/a
Mitigation / rollback
Revert this commit. The job is not a required check, so neither this change nor its revert can block merges.