Skip to content

fix(deps): bump openssl, tar, serde_with + friends past open advisories (Rust lockfiles) - #366

Merged
Nic-dorman merged 2 commits into
mainfrom
nic/v2-1582-rust-advisory-locks
Oct 19, 2026
Merged

Nic-dorman merged 2 commits into
mainfrom
nic/v2-1582-rust-advisory-locks

Conversation

@Nic-dorman

@Nic-dorman Nic-dorman commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

Summary

Lockfile-only bumps in antd/, antd-rust/ and ffi/rust/ that clear every open advisory with a semver-compatible fix. No Cargo.toml or source changes.

osv-scanner found these. It also reads GitHub advisories that the RustSec database doesn't carry, so cargo audit doesn't list most of them. The 2026-10-15 baseline for V2-1582 found them.

Crate Before → after Advisories Lockfiles
openssl 0.10.78 / 0.10.76 → 0.10.81 GHSA-phqj-4mhp-q6mq (out-of-bounds write, AES-KW-PAD), GHSA-xv59-967r-8726 (heap overflow, AES key wrap), GHSA-xp3w-r5p5-63rr (undefined behaviour in OCSP responders); ffi/rust also GHSA-8c75-8mhr-p7r9, -ghm9-cr32-g9qj, -hppc-g8h3-xhp3, -pqf5-4pqq-29f5, -xmgf-hq76-4vx2 antd, ffi/rust
tar 0.4.45 → 0.4.46 GHSA-3pv8-6f4r-ffg2 (PAX header desync) antd, ffi/rust
serde_with 3.18 / 3.20 → 3.21.0 GHSA-7gcf-g7xr-8hxj all three
anyhow 1.0.102 → 1.0.104 RUSTSEC-2026-0190 (unsound) all three
rand 0.8.5 / 0.9.2 → 0.8.8 / 0.9.5 RUSTSEC-2026-0097 (unsound) ffi/rust
chacha20, spin 0.10.0 → 0.10.2, 0.9.8 → 0.9.9 yanked releases antd, ffi/rust

The openssl advisories are in the Rust bindings (the openssl crate, rust-openssl), not in the OpenSSL C library. openssl-src, the vendored C library, is unchanged; this is not an OpenSSL version upgrade. ant-core depends on openssl with features = ["vendored"], so the bindings are statically linked into the Linux antd and ant-ffi builds (Windows uses schannel). The affected functions (AES key-wrap, OCSP responders, PSK/cookie callbacks, PEM password callbacks) are unlikely to be used by our TLS client paths, but the fix is a patch-level lockfile bump.

serde_with is pinned to 3.21.0, the first fixed release. Plain cargo update would take 3.24, which adds ~20 new crates (syn 3, jiff, defmt, darling 0.24), too much churn for a security bump. ffi/node's lockfile already carries the fixed versions of all of these.

Not addressed here

  • lru 0.16 (RUSTSEC-2026-0253, unsound): the fix is lru 0.18, which is semver-incompatible and comes in through alloy-provider → evmlib, so it needs an upgrade upstream.
  • zip 2.4.2 (RUSTSEC-2026-0367, -0368, -0369) in antd and ffi/rust. These were already on main, and nothing here touches them. The fix is zip >= 9, which is semver-incompatible and comes in through ant-core (V2-1632, then V2-1634). Until then each crate's .cargo/audit.toml ignores them, with the reasons written down (ci(deps): ignore zip extract() advisories until ant-core moves to zip 9 (RUSTSEC-2026-0367, -0368, -0369) #372). Run without that config, cargo audit exits non-zero on them.
  • Unmaintained-crate warnings (atomic-polyfill, bincode, derivative, paste, proc-macro-error2, rustls-pemfile, unsafe-libyaml): none has a drop-in replacement. They're warnings only.
  • antd-rust declares rust-version = "1.82", but serde_with already needed Rust 1.88 before this PR, and 3.21.0 still does. The mismatch is inherited, not introduced here, and Rust 1.82 isn't tested.

Test plan

Refreshed against main on 2026-10-19 (7ad254d). antd/Cargo.lock conflicted with main's ant-core 0.13.0 repin. I took main's lockfile and re-applied the same bumps with cargo update -p … --precise …. Against main it moves only the crates in the table above, plus bs58 0.5.1, which the bumps pull in. The antd-rust and ffi/rust lockfiles are byte-identical to this PR's originals.

  • CI at 7ad254d (Linux): ci.yml (antd 149 passed, antd-rust, notices, audit) and ffi-ci.yml (ant-ffi 23 passed, 1 ignored), with locked clippy
  • Windows at 7ad254d: cargo test --locked, antd 149 passed, ffi/rust 23 passed (1 ignored). Logs are in the PR comment.
  • cargo metadata --locked: all three lockfiles are consistent with main's manifests
  • cargo audit with each crate's .cargo/audit.toml: 0 vulnerabilities. Remaining warnings are lru and the unmaintained crates; zip is ignored, see above.
  • osv-scanner scan source -L <Cargo.lock> against main's lockfiles: antd 16 → 10, antd-rust 6 → 4, ffi/rust 24 → 11. Everything left is listed under "Not addressed here".
  • Earlier (15 Oct, Windows, pre-refresh): locked clippy clean in all three; antd 113, antd-rust 139, ffi/rust 23 passed

Refs V2-1582.

🤖 Generated with Claude Code

…ries (Rust lockfiles)

cargo audit reports these lockfiles clean, but osv-scanner (which also
reads GitHub advisories that RustSec does not carry) flags:

- openssl 0.10.76/0.10.78 -> 0.10.81: GHSA-phqj-4mhp-q6mq,
  GHSA-xp3w-r5p5-63rr, GHSA-xv59-967r-8726 (and in ffi/rust also
  GHSA-8c75-8mhr-p7r9, -ghm9-cr32-g9qj, -hppc-g8h3-xhp3,
  -pqf5-4pqq-29f5, -xmgf-hq76-4vx2). Vendored into the Linux antd
  and ant-ffi builds via ant-core.
- tar 0.4.45 -> 0.4.46: GHSA-3pv8-6f4r-ffg2 (PAX header desync).
- serde_with -> 3.21.0: GHSA-7gcf-g7xr-8hxj. Pinned to the first fixed
  release; 3.24 pulls ~20 new crates (syn 3, jiff, defmt).
- anyhow 1.0.102 -> 1.0.104: RUSTSEC-2026-0190 (unsound).
- rand 0.8.5/0.9.2 -> 0.8.8/0.9.5 (ffi/rust): RUSTSEC-2026-0097.
- chacha20 0.10.0 -> 0.10.2, spin 0.9.8 -> 0.9.9: yanked releases.

Lockfile-only: antd/, antd-rust/, ffi/rust/. ffi/node already carries
these versions. Left as-is: lru 0.16 (RUSTSEC-2026-0253, fix needs
lru 0.18 via an alloy-provider upgrade upstream) and the unmaintained
warnings, none of which have a drop-in replacement.

Refs V2-1582.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
antd/Cargo.lock conflicted with main's ant-core 0.13.0 repin. Resolved by taking main's lock and re-applying this PR's bumps with cargo update --precise: anyhow 1.0.104, chacha20 0.10.2, openssl 0.10.81, openssl-sys 0.9.117, serde_with(+macros) 3.21.0, spin 0.9.9, tar 0.4.46 (+ bs58 0.5.1). Against main the lock moves only those. All three lockfiles pass cargo metadata --locked; cargo audit 0 vulnerabilities.

@dirvine dirvine left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review — 7ad254d42e7ddef7192d0b96f08012f49db11953

REQUEST_CHANGES: Windows validation is still missing for the changed dependency graph. No introduced code defect was found.

Required before approval: validate the affected Windows lockfiles

antd/Cargo.lock and ffi/rust/Cargo.lock also change Windows dependency edges. For example, unchanged parent crates now resolve to windows-sys 0.52/0.60 instead of 0.61, and iana-time-zone selects windows-core 0.57 instead of 0.62. This is reproducible Cargo output, not evidence of a hand-edited or invalid lockfile. It is nevertheless a Windows-specific change that Linux compilation cannot exercise.

The exact-head Check (antd), Check (antd-rust) and Check (ant-ffi) jobs pass on Linux. The green Windows Node FFI matrix uses ffi/node/Cargo.lock, not either changed lockfile. The PR's Windows checklist is author-reported; I have not verified current-head Windows build/test logs for these two workspaces.

Minimum to clear this gate: provide successful Windows logs at this exact head for:

cargo test --locked --manifest-path antd/Cargo.toml
cargo test --locked --manifest-path ffi/rust/Cargo.toml

Existing retained run logs are sufficient if they identify this head and these lockfiles; a source change or new CI workflow is not required just to satisfy this request. My macOS-to-Windows cross-check could not complete because the host lacks Windows C SDK headers required by unchanged native crypto dependencies. That is a toolchain limit, not a demonstrated product failure.

Verified

  • Exactly three lockfiles changed; no source, manifest, test or CI changes. Git dependency pins are unchanged.
  • All three head lockfiles reproduce byte-for-byte from the frozen main/base b2051ea2811dc39c0207e652e0fe2868692e8d3e with targeted cargo update -p ... --precise ... operations. The two additional replay checks were parent-executed after the panel evidence freeze.
  • All 11 added/replaced registry versions are published, non-yanked, and have matching crates.io checksums.
  • All nine cargo metadata --locked --all-features checks pass: three workspaces across macOS, Linux and Windows targets. This proves resolution, not native compilation.
  • Baseline/head OSV comparison removes the targeted findings and adds no new advisory findings.
  • Exact-head Linux logs: antd: 149 passed; antd-rust: 170 + 11 passed; ant-ffi: 23 passed, 1 ignored. The three jobs also pass locked Clippy; FFI binding-generation checks pass.

Non-blocking corrections and inherited issues

  • Please refresh the PR's clean-audit claim. Current cargo audit exits nonzero for antd and ffi/rust: unchanged zip 2.4.2 has RUSTSEC-2026-0367, RUSTSEC-2026-0368 and RUSTSEC-2026-0369. These findings are already present at base. They are not regressions from this PR; their fix requires a semver-incompatible dependency upgrade. Existing lru/unmaintained warnings also remain inherited.
  • antd-rust declares Rust 1.82, while its already-locked serde_with required 1.88 before this PR. Version 3.21.0 still requires 1.88. This PR does not introduce that MSRV mismatch. Rust 1.82 compilation was not tested.
  • openssl-src is unchanged. The Rust binding update must not be described as an OpenSSL C library version upgrade.

Review participation and adjudication

6/6 reviewed — 3/3 named models, each with independent correctness and adversarial roles: GLM 5.3 (z-ai/glm-5.3), Qwen 3.8 (qwen38-27b), and DS4 Flash (deepseek-v4-flash). All six receipts cover the complete frozen diff and recommend approval of the code change; none identifies an introduced code blocker. No seat is missing.

Parent adjudication differs on the validation gate: those opinions, reproducible resolution, and green Linux jobs do not establish a successful Windows build with the changed locks. I am holding formal approval until the Windows evidence above is available. This is not a claim of panel consensus on REQUEST_CHANGES.

No merge, release, live-network test or deployment was performed.

@Nic-dorman

Copy link
Copy Markdown
Member Author

Windows validation for the review gate, at exactly 7ad254d42e7ddef7192d0b96f08012f49db11953, using the two commands requested:

Command Result
cargo test --locked --manifest-path antd/Cargo.toml 149 passed, 0 failed (468 crates built)
cargo test --locked --manifest-path ffi/rust/Cargo.toml 23 passed, 0 failed, 1 ignored (244 crates built)
  • Host: Windows 11 Pro 10.0.26200, x86_64; rustc / cargo 1.97.1, target x86_64-pc-windows-msvc (MSVC toolchain).
  • Build: fresh target directory, clean tree (no tracked changes before or after). --locked passed, so both runs used the committed lockfiles unchanged.
  • Lockfiles:
    • antd/Cargo.lock: sha256 5ac99558…19fb11b2 (blob 20150505).
    • ffi/rust/Cargo.lock: sha256 848219ba…bfe3accf (blob 39bbe529).
  • Windows dependencies compiled: the antd build includes the version pairs from the review: windows-sys 0.52.0 / 0.60.2 / 0.61.2 and windows-core 0.57.0 / 0.62.2. The ffi/rust build includes windows-sys 0.52.0 and windows-core 0.61.2.

The logs below are verbatim except that the Compiling lines are removed, along with a broken host-info line from my wrapper script. The host is given above.

antd: cargo test --locked (Windows)
### ant-sdk PR #366 Windows validation: cargo test --locked --manifest-path antd/Cargo.toml
### head: 7ad254d42e7ddef7192d0b96f08012f49db11953 (tree clean: yes)
### antd/Cargo.lock sha256: 5ac99558c43f5734ae30db770d37020c983acc85ee4a7dd4409bca0419fb11b2 (git blob 201505055d14e08fed2d2863236fa6a74bdf78fc)
### rustc 1.97.1 (8bab26f4f 2026-07-14) host: x86_64-pc-windows-msvc 
### cargo 1.97.1 (c980f4866 2026-06-30)
### started: 2026-10-19T17:20:10Z
    Finished `test` profile [unoptimized + debuginfo] target(s) in 4m 26s
warning: the following packages contain code that will be rejected by a future version of Rust: proc-macro-error2 v2.0.1
note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
     Running unittests src\main.rs (target-win\debug\deps\antd-3b662f13df3d94c6.exe)

running 149 tests
test config::tests::long_version_matches_health_fields ... ok
test error::tests::close_group_shortfall_is_a_503_not_an_internal_error ... ok
test config::tests::star_cannot_be_combined ... ok
test config::tests::version_flags_render_the_crate_version ... ok
test config::tests::star_allows_any_origin ... ok
test config::tests::absent_flag_disables_cors ... ok
test error::tests::core_not_found_maps_to_not_found ... ok
test config::tests::bare_flag_is_accepted_but_allows_no_origins ... ok
test config::tests::origin_list_is_parsed_and_lowercased ... ok
test config::tests::chunk_cache_capacity_defaults_to_a_bounded_cache ... ok
test config::tests::chunk_cache_capacity_rejects_zero ... ok
test error::tests::core_partial_upload_is_not_retryable_and_says_re_prepare ... ok
test config::tests::origins_with_path_or_missing_scheme_are_rejected ... ok
test error::tests::not_found_is_http_404 ... ok
test config::tests::ipv4_only_defaults_off_and_is_a_bare_flag ... ok
test error::tests::not_found_is_grpc_not_found ... ok
test error::tests::pointer_refusals_are_409s ... ok
test error::tests::grpc_statuses_carry_the_antd_code_where_they_share_a_grpc_code ... ok
test error::tests::grpc_status_carries_retryable_as_metadata ... ok
test error::tests::range_not_satisfiable_is_grpc_out_of_range ... ok
test error::tests::range_not_satisfiable_is_http_416_with_content_range ... ok
test config::tests::bool_values_keep_old_env_contract ... ok
test error::tests::unknown_core_errors_still_map_to_internal ... ok
test error::tests::retryable_partial_upload_says_finalize_again ... ok
test error::tests::partial_upload_body_carries_counts_and_retryable ... ok
test error::tests::retained_pointer_finalize_says_retryable_in_the_body ... ok
test evm_defaults::tests::evm_network_local_even_when_network_is_default ... ok
test evm_defaults::tests::local_network_keeps_localhost_default ... ok
test evm_defaults::tests::vault_address_legacy_var_is_honoured ... ok
test evm_defaults::tests::vault_address_new_var_beats_legacy_var ... ok
test evm_defaults::tests::individual_env_vars_override_preset ... ok
test evm_defaults::tests::arbitrary_network_name_defaults_to_arbitrum_one ... ok
test evm_defaults::tests::evm_network_sepolia_picks_sepolia_addresses ... ok
test evm_defaults::tests::default_network_picks_arbitrum_one ... ok
test manifests::tests::build_rejects_colliding_names ... ok
test manifests::tests::decode_turns_a_file_link_into_one_public_entry ... ok
test manifests::tests::decode_rejects_hostile_input_cleanly ... ok
test manifests::tests::parse_entries_treats_empty_strings_as_absent ... ok
test manifests::tests::parse_entries_reports_every_invalid_entry ... ok
test manifests::tests::torrent_hashes_merge_v1_and_v2 ... ok
test manifests::tests::large_manifests_get_no_link ... ok
test peers::tests::legacy_peers_shape_yields_quic_multiaddrs ... ok
test peers::tests::current_quic_shape_preserves_peer_pins_and_ignores_webrtc ... ok
test peers::tests::malformed_file_is_an_error_not_an_empty_list ... ok
test peers::tests::malformed_webrtc_entry_rejects_the_whole_file ... ok
test peers::tests::bundled_default_peers_are_non_empty_quic_multiaddrs ... ok
test peers::tests::valid_webrtc_entries_are_accepted_but_not_returned ... ok
test manifests::tests::small_manifests_get_a_link_that_decodes_to_the_same_entries ... ok
test manifests::tests::build_is_deterministic_and_matches_ant_core_encoding ... ok
test pointer_keys::tests::an_empty_directory_fails_the_load ... ok
test pointer_keys::tests::a_key_of_the_wrong_length_fails_the_load ... ok
test pointers::tests::a_prepare_needs_the_arguments_its_op_uses ... ok
test datamap::tests::flat_map_passes_through_without_fetching ... ok
test pointer_keys::tests::a_file_that_is_not_a_key_fails_the_load_without_quoting_it ... ok
test pointers::tests::addresses_accept_bare_or_prefixed_hex_and_nothing_else ... ok
test pointer_keys::tests::debug_output_shows_no_key_material ... ok
test pointers::tests::a_paid_operation_finishes_after_its_caller_gives_up ... ok
test pointer_keys::tests::a_single_key_file_loads_to_the_pointer_it_owns ... ok
test pointers::tests::finality_flattens_each_status ... ok
test pointers::tests::kinds_default_to_chunk_and_refuse_the_unknown ... ok
test pointers::tests::pointer_outcomes_map_to_the_codes_callers_act_on ... ok
test pointers::tests::tx_hashes_must_be_32_bytes_each ... ok
test range::tests::clamps_last_past_eof ... ok
test range::tests::content_range_is_inclusive ... ok
test range::tests::offset_length ... ok
test pointer_keys::tests::surrounding_whitespace_is_ignored ... ok
test range::tests::parses_first_last ... ok
test range::tests::parses_open_ended ... ok
test range::tests::parses_suffix ... ok
test range::tests::rejects_malformed ... ok
test range::tests::start_at_or_past_eof_is_unsatisfiable ... ok
test range::tests::whole_object_window ... ok
test range::tests::windows_are_chunk_aligned_and_cover_the_range_exactly ... ok
test range::tests::windows_cover_the_last_partial_chunk ... ok
test range::tests::windows_span_a_chunk_boundary ... ok
test range::tests::windows_within_one_chunk ... ok
test rest::tests::actual_request_carries_cors_header_too ... ok
test rest::tests::empty_allowlist_from_bare_cors_allows_nothing ... ok
test rest::tests::allow_any_sends_wildcard ... ok
test rest::tests::allowlist_echoes_listed_origin_only ... ok
test rest::tests::disabled_sets_no_cors_headers ... ok
test rest::tests::explicitly_listed_extension_origin_is_allowed ... ok
test pointer_keys::tests::two_files_holding_one_key_fail_the_load ... ok
test rest::upload::tests::bad_hex_rejected ... ok
test pointers::tests::a_record_shows_its_counter_as_a_string_even_when_final ... ok
test rest::upload::tests::bad_hex_rejected_without_consuming_anything ... ok
test rest::upload::tests::both_inputs_rejected ... ok
test rest::upload::tests::empty_map_rejected_when_payments_expected ... ok
test rest::upload::tests::empty_map_valid_when_no_payments_expected ... ok
test rest::upload::tests::finalize_request_json_accepts_null_and_empty_entries ... ok
test rest::upload::tests::legacy_single_hash_rejected_for_multi_batch ... ok
test rest::upload::tests::full_coverage_resolves_with_extra_entries_tolerated ... ok
test rest::upload::tests::legacy_single_hash_resolves_for_one_batch ... ok
test rest::upload::tests::list_count_mismatch_rejected ... ok
test rest::upload::tests::list_resolves_with_unpaid_markers ... ok
test rest::upload::tests::neither_input_rejected ... ok
test rest::upload::tests::missing_receipt_rejected_before_consuming_upload ... ok
test rest::upload::tests::merkle_fully_paid_requires_every_winner ... ok
test rest::tests::verify_route_accepts_bodies_up_to_its_own_limit ... ok
test rest::tests::verify_route_rejects_bodies_over_its_own_limit_below_the_daemon_default ... ok
test pointers::tests::an_open_record_names_its_target_and_no_transfer ... ok
test pointers::tests::an_unknown_target_kind_is_named_unknown_with_its_tag ... ok
test pointer_keys::tests::a_directory_loads_every_key_and_skips_hidden_files ... ok
test signed_quotes::tests::forged_signature_is_rejected ... ok
test signed_quotes::tests::baseline_quote_verifies ... ok
test signed_quotes::tests::encoded_length_bound_admits_real_quotes_and_sidecars ... ok
test state::tests::compose_layers_store_marker_without_touching_readiness ... ok
test signed_quotes::tests::off_curve_price_is_rejected ... ok
test signed_quotes::tests::wrong_quote_hash_is_rejected ... ok
test state::tests::readiness_recovers_when_counts_recover ... ok
test state::tests::store_marker_transitions_from_none_to_fresh ... ok
test types::tests::adjust_for_public_upload_bumps_count_and_scales_cost ... ok
test types::tests::adjust_for_public_upload_handles_large_atto_values ... ok
test types::tests::adjust_for_public_upload_handles_uneven_division ... ok
test types::tests::adjust_for_public_upload_unparseable_cost_only_bumps_count ... ok
test types::tests::adjust_for_public_upload_zero_chunks_only_bumps_count ... ok
test types::tests::adjust_for_public_upload_zero_cost_round_trips ... ok
test types::tests::finalize_chunk_request_deserializes ... ok
test types::tests::finalize_chunk_response_serializes ... ok
test types::tests::finalize_request_backward_compat_with_required_tx_hashes ... ok
test types::tests::finalize_request_merkle_deserializes ... ok
test types::tests::finalize_request_minimal_deserializes ... ok
test signed_quotes::tests::oversized_sidecar_text_is_rejected_before_decode ... ok
test types::tests::finalize_request_wave_batch_deserializes ... ok
test types::tests::finalize_response_omits_data_map_address_when_private ... ok
test types::tests::finalize_response_serializes_data_map_address ... ok
test types::tests::health_response_keeps_empty_strings_for_unconfigured_evm ... ok
test types::tests::health_response_serializes_all_fields ... ok
test types::tests::parse_visibility_accepts_known_values ... ok
test types::tests::parse_visibility_rejects_unknown_values ... ok
test types::tests::prepare_chunk_request_deserializes ... ok
test types::tests::prepare_chunk_response_for_already_stored_omits_payment_fields ... ok
test types::tests::prepare_chunk_response_for_new_chunk_includes_payment_shape ... ok
test types::tests::prepare_data_request_visibility_defaults_to_none ... ok
test types::tests::prepare_response_merkle_serializes_without_wave_fields ... ok
test types::tests::prepare_request_visibility_defaults_to_none ... ok
test types::tests::prepare_request_visibility_round_trips_public ... ok
test types::tests::prepare_response_wave_batch_serializes_without_merkle_fields ... ok
test types::tests::public_upload_chunks_stored_counts_the_data_map_chunk ... ok
test signed_quotes::tests::tampered_amount_is_rejected ... ok
test signed_quotes::tests::oversized_signed_quote_text_is_rejected_before_decode ... ok
test signed_quotes::tests::pinned_quote_with_matching_commitment_verifies ... ok
test signed_quotes::tests::entries_builder_emits_only_paid_quotes_and_attaches_sidecar_by_pin ... ok
test signed_quotes::tests::pinned_quote_without_sidecar_is_rejected ... ok
test manifests::tests::build_names_the_entry_whose_wrapper_records_are_missing ... ok
test manifests::tests::build_embeds_roots_records_exact_sizes_and_sorts ... ok
test datamap::tests::child_map_misreports_size_and_resolution_restores_it ... ok
test manifests::tests::build_without_embed_roots_keeps_the_shrunk_map_and_skips_the_network ... ok
test manifests::tests::decode_reports_embedded_data_maps_and_resolves_public_entries ... ok

test result: ok. 149 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s

### finished: 2026-10-19T17:24:38Z exit=0
ffi/rust: cargo test --locked (Windows)
### ant-sdk PR #366 Windows validation: cargo test --locked --manifest-path ffi/rust/Cargo.toml
### head: 7ad254d42e7ddef7192d0b96f08012f49db11953 (tree clean: yes)
### ffi/rust/Cargo.lock sha256: 848219baa3ac01932c79fd2ef72ffd169515110b45974bc361d998b9bfe3accf (git blob 39bbe529a299ff4b83751a4eee39ecb77c584829)
### rustc 1.97.1 (8bab26f4f 2026-07-14) host: x86_64-pc-windows-msvc 
### cargo 1.97.1 (c980f4866 2026-06-30)
### started: 2026-10-19T17:24:40Z
    Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 53s
warning: the following packages contain code that will be rejected by a future version of Rust: proc-macro-error2 v2.0.1
note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
     Running unittests src\lib.rs (target-win\debug\deps\ant_ffi-d5b0d59ec7366ea9.exe)

running 24 tests
test devnet_tests::devnet_external_signer_wave_round_trip ... ignored, needs a running ant-devnet; set ANT_FFI_DEVNET_MANIFEST
test client::tests::cost_confidence_maps_from_core ... ok
test client::tests::visibility_maps_to_core ... ok
test client::tests::decode_hash_accepts_32_bytes_with_or_without_0x ... ok
test client::tests::payment_mode_round_trips_through_core ... ok
test client::tests::decode_hash_rejects_wrong_length ... ok
test payments::tests::merkle_topic0_is_keccak_of_event_signature ... ok
test payments::tests::approve_calldata_matches_known_vector ... ok
test session::tests::peek_sees_both_states_without_removing ... ok
test session::tests::cancel_drops_prepared_and_resume_entries ... ok
test session::tests::partial_finalize_retains_resume_under_same_id_until_complete ... ok
test client::tests::decode_hash_rejects_non_hex ... ok
test payments::tests::hex_field_to_dec_parses_and_defaults ... ok
test payments::tests::network_info_known_networks ... ok
test session::tests::prepared_is_taken_once_and_then_unknown ... ok
test session::tests::unroutable_shape_is_refused_without_removal ... ok
test client::tests::default_bootstrap_peers_are_valid_multiaddrs ... ok
test session::tests::with_prepared_rejects_resume_state_as_already_paid ... ok
test session::tests::wrong_method_is_lossless_for_prepared_and_resume ... ok
test tests::ant_ffi_version_is_semverish ... ok
test tests::core_timeout_maps_to_timeout_variant ... ok
test tests::core_io_other_kinds_stay_internal ... ok
test tests::core_partial_upload_maps_to_structured_variant ... ok
test tests::core_io_storage_full_maps_to_insufficient_disk_space ... ok

test result: ok. 23 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\uniffi-bindgen.rs (target-win\debug\deps\uniffi_bindgen-5f16d0278dc4ec5d.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests ant_ffi

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

### finished: 2026-10-19T17:27:37Z exit=0

@dirvine dirvine left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review — 7ad254d42e7ddef7192d0b96f08012f49db11953

APPROVE. The retained Windows logs now satisfy the evidence requirement in my earlier review. No introduced blocker was found.

The head is unchanged. This verdict replaces my earlier REQUEST_CHANGES; the new inputs are comment 6273225290 and the updated PR description.

Windows evidence checked

  • cargo test --locked --manifest-path antd/Cargo.toml: the retained output reports 149 passed, 0 failed, 0 ignored, with exit=0.
  • cargo test --locked --manifest-path ffi/rust/Cargo.toml: the retained output reports 23 passed, 0 failed, 1 ignored, with exit=0. The ignored test requires a running devnet. The additional binding-generator and doc-test groups report zero tests and success.
  • Both logs identify this exact head, the requested manifests, a Windows MSVC host and Windows test executables. I checked every named test result against the summaries and exact-head Linux test output.
  • The reported Git blob IDs match the committed lockfiles. The antd SHA-256 matches the committed bytes. The FFI SHA-256 matches the exact CRLF representation of the committed LF file; this is a line-ending difference, not different dependency content.

Provenance limit: these are retained author-supplied logs, not Windows tests I ran or authenticated CI output. Hash checks establish that the reported identifiers are consistent with the committed files; they do not independently attest execution. My earlier requirement explicitly allowed retained logs. I accept this evidence for this dependency PR. The separate Windows Node FFI matrix still uses ffi/node/Cargo.lock and is not a substitute for these logs.

Other checks and scope

  • The complete diff still contains exactly three lockfiles. No source, manifest, test or CI changes were added. All three locks reproduce byte-for-byte from the frozen base with targeted Cargo updates; Git dependency pins are unchanged.
  • The exact-head Linux checks and the first review's registry-checksum and baseline/head advisory comparisons remain applicable to the unchanged head. The registry/advisory comparison is the retained first-review snapshot, not a claim that no new advisory can appear later.
  • Audit clarification to my earlier review: that nonzero scan ran from the repository root without the workspace ignore configuration. I now ran cargo audit --no-fetch --json from each of antd, antd-rust and ffi/rust. All three exit 0 against the cached database and report zero unignored vulnerabilities. Existing warnings remain. The configured result does not mean the inherited lru and zip advisories were fixed; the PR now explains these limits.
  • The inherited minimum-Rust mismatch remains: antd-rust declares 1.82, while its existing serde_with dependency already required 1.88 before this PR. Rust 1.82 compilation was not tested.
  • The OpenSSL clarification is sound: target-specific locked feature trees show vendored OpenSSL enabled through ant-core on Linux and no openssl-sys selection on Windows. This PR updates the Rust bindings; openssl-src and the vendored C-library version do not change. The author's assessment that affected APIs are unlikely to be used is not a guarantee of non-use.

Panel and adjudication

6/6 reviewed — 3/3 named models. GLM 5.3 (z-ai/glm-5.3), Qwen 3.8 (qwen38-27b) and DS4 Flash (deepseek-v4-flash) each completed independent correctness and adversarial reviews of the complete frozen diff and new Windows evidence. All six recommend APPROVE; there is no material dissent and no missing seat. DS4 correctness and Qwen adversarial completed on one same-model retry after initial queue timeouts.

I checked each receipt's actual provider/model, revision and evidence digest. I agree with approval, subject to the provenance and inherited limits above. Matching hashes and matching Linux totals are not independent proof of Windows execution.

No merge, release, live-network test or deployment was performed.

@Nic-dorman
Nic-dorman merged commit 1b76622 into main Oct 19, 2026
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants