Conversation
…collisions — bump to v0.6.2
`derive_rust_qualified_name` previously built the RQN from the filesystem
path, which drops inline `mod tests` / nested `mod inner {}` segments. A
`#[test] fn foo()` inside `mod tests` collapsed to the same RQN as an outer
`fn foo()` in the same file, breaking probe-aeneas's RQN-keyed translation
matching and leaving verified functions rendered as unverified.
Charon enrichment had the same class of bug one layer down: its match key
was `(file-derived module, bare display_name)`, so a `#[test] fn mul()`
and a `Scalar52::mul` impl in the same file shared a key and the test atom
silently inherited the impl method's Charon RQN. The match key now comes
from the atom's SCIP-derived RQN, which preserves the `::test::` segment.
Verified end-to-end against curve25519-dalek: all 10 previously-colliding
test atoms (backend/serial/u64/scalar/test/{add,mul,sub,from_bytes_wide,
montgomery_mul}, edwards/test/{is_small_order,mul_base_clamped},
montgomery/test/mul_base_clamped, scalar/test/{reduce,from_bytes_mod_order_wide})
now get distinct RQNs with the `::test::` segment preserved.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
Summary
derive_rust_qualified_namenow parses the module chain from the SCIP symbol instead of reconstructing it from the filesystem path. The path-based approach silently dropped inlinemod testsand nestedmod inner {}segments, so a#[test] fn foo()insidemod testscollapsed to the same RQN as an outerfn foo()in the same file.charon_names::make_match_key_from_atomused(file-derived module, bare display_name)as its key, re-introducing the same collision one layer down — a#[test] fn mul()and aScalar52::mulimpl in the same file shared a key, so the test atom silently inherited Charon's RQN for the real method. The key now derives from the atom's SCIP-correct RQN, preserving the::test::segment.pkg_nameparameter is removed fromderive_rust_qualified_nameandconvert_to_atoms_*(the SCIP symbol already carries the crate name).Why this matters
probe-aeneas's
strategy_rust_qualified_name(translate.rs:135) andenrich_with_aeneas_metadata(extract.rs:634) key onrust-qualified-name. With the collision:funs_rust_names, so both gotis-disabled: false/is-relevant: true— test atoms that should have been hidden leaked into downstream tooling.verification-statusand showing up as unverified in the frontend.End-to-end verification against curve25519-dalek
All 10 previously-colliding test atoms now have distinct, correct RQNs:
backend/serial/u64/scalar/test/mul...::scalar::{...Scalar52}::mul...::scalar::test::mulbackend/serial/u64/scalar/test/add...::scalar::{...Scalar52}::add...::scalar::test::addbackend/serial/u64/scalar/test/sub...::scalar::{...Scalar52}::sub...::scalar::test::subbackend/serial/u64/scalar/test/from_bytes_wide...::scalar::{...Scalar52}::from_bytes_wide...::scalar::test::from_bytes_widebackend/serial/u64/scalar/test/montgomery_mul...::scalar::{...Scalar52}::montgomery_mul...::scalar::test::montgomery_muledwards/test/is_small_order...::edwards::{...EdwardsPoint}::is_small_order...::edwards::test::is_small_orderedwards/test/mul_base_clamped...::edwards::{...EdwardsPoint}::mul_base_clamped...::edwards::test::mul_base_clampedmontgomery/test/mul_base_clamped...::montgomery::{...MontgomeryPoint}::mul_base_clamped...::montgomery::test::mul_base_clampedscalar/test/from_bytes_mod_order_wide...::scalar::{...Scalar}::from_bytes_mod_order_wide...::scalar::test::from_bytes_mod_order_widescalar/test/reduce...::scalar::{...Scalar}::reduce...::scalar::test::reduceNon-test impl methods (
Scalar52::mul,EdwardsPoint::is_small_order,Scalar::reduce, etc.) still resolve to their correct Charon-style RQNs.Test plan
cargo fmt --allcargo clippy --all-targets -- -D warningscargo test(143 lib tests pass, up from 140 — added 3 new regression tests covering inlinemod tests, inline submodules, and the Charon match-key collision)is-disabled: trueafter running probe-aeneas🤖 Generated with Claude Code