At main 2b2deff, the hand-authored-RBS probe does not apply existing signatures to namespaced runtime methods. Its registry builder stores ActiveRecord::Connection under Connection, but build_method_ctx looks up the ingested ActiveRecord::Connection ID. A declared String parameter is consequently counted as unresolved.
This is a defect in tests/inference_on_spinel_blog_runtime_with_rbs.rs, not a claim that the production analyzer loses these signatures.
The existing connection.rbs already contains:
module ActiveRecord
class Connection
def quote_string: (String str) -> String
end
end
To expose the mismatch, add this assertion to that integration-test file and run cargo test --locked --test inference_on_spinel_blog_runtime_with_rbs qualified_probe_seed_expected -- --exact:
#[test]
fn qualified_probe_seed_expected() {
let (_, sigs) = build_class_registry();
let classes = ingest_runtime_classes();
let (_, class) = classes.iter()
.find(|(_, c)| c.name.0.as_str() == "ActiveRecord::Connection")
.unwrap();
let method = class.methods.iter()
.find(|m| m.name.as_str() == "quote_string")
.unwrap();
let ctx = build_method_ctx(&class.name, method, &sigs, &HashMap::new());
assert_eq!(ctx.local_bindings.get(&Symbol::from("str")), Some(&Ty::Str));
}
The current lookup yields None instead of Some(Str). The same identity mismatch affects self-sends and declared return types: a receiver typed ActiveRecord::Result cannot find its rows reader in a registry keyed only by Result.
Preserve canonical IDs for signatures and method dispatch. The probe has no constant resolver, so its bare constants still need short-name aliases; aliases must be unambiguous and must not merge unrelated classes with the same final name.
A controlled run using the unchanged main runtime inputs measured 1,273 unresolved nodes with the existing probe and 45 with the corrected probe. Both runs used the same candidate analyzer and isolated runtime inputs; this is not a pristine full Cargo gate. The standalone correction in PR #437 passes three focused probe tests, four runtime source integration tests, and the required full cargo test --locked gate (3,530 passed, zero failed, 130 ignored) on supported Ruby 3.4.11 / Rails 8.1.4. Production sources and the validated source hashes were unchanged. The proposed correction keeps the same node traversal and lowers the ceiling to the measured 45; it does not exclude methods or raise the allowance.
At main 2b2deff, the hand-authored-RBS probe does not apply existing signatures to namespaced runtime methods. Its registry builder stores ActiveRecord::Connection under Connection, but build_method_ctx looks up the ingested ActiveRecord::Connection ID. A declared String parameter is consequently counted as unresolved.
This is a defect in tests/inference_on_spinel_blog_runtime_with_rbs.rs, not a claim that the production analyzer loses these signatures.
The existing connection.rbs already contains:
To expose the mismatch, add this assertion to that integration-test file and run
cargo test --locked --test inference_on_spinel_blog_runtime_with_rbs qualified_probe_seed_expected -- --exact:The current lookup yields None instead of Some(Str). The same identity mismatch affects self-sends and declared return types: a receiver typed ActiveRecord::Result cannot find its rows reader in a registry keyed only by Result.
Preserve canonical IDs for signatures and method dispatch. The probe has no constant resolver, so its bare constants still need short-name aliases; aliases must be unambiguous and must not merge unrelated classes with the same final name.
A controlled run using the unchanged main runtime inputs measured 1,273 unresolved nodes with the existing probe and 45 with the corrected probe. Both runs used the same candidate analyzer and isolated runtime inputs; this is not a pristine full Cargo gate. The standalone correction in PR #437 passes three focused probe tests, four runtime source integration tests, and the required full
cargo test --lockedgate (3,530 passed, zero failed, 130 ignored) on supported Ruby 3.4.11 / Rails 8.1.4. Production sources and the validated source hashes were unchanged. The proposed correction keeps the same node traversal and lowers the ceiling to the measured 45; it does not exclude methods or raise the allowance.