Repository navigation
Reference-derived edges skip substrate vocabulary: a kernel or container spelling binds no module - #12200
Merged
Conversation
…erived producer no longer resolves it to a same-named declaration ExprVarClassification classify treated a dotted chain's head as a namespace segment only when no declaration anywhere shared its spelling, and reference_resolution_facts runs with no declaration index, so the head of every v2.std.* path fell to the free-reference default and resolved UniqueBare to test.claim.secret_rotation_witness fn v2(). A head whose chain names a declared module is now QualifiedChainHead; binders still outrank it and value chains keep their edges. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ner spelling binds no module dag/std/primitives (import-free) annotates data with the kernel type String, and the producer resolved it UniqueBare to std.string_type. The census pull already skipped kernel and container spellings; that rule is now the named is_substrate_vocabulary and the reference-derived producer reads it too. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…r lands on the two helpers inserted above it (review 70749) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-substrate-vocab # Conflicts: # dag/gunbc/recurring_failure_mode/a_namespace_root_segment_resolves_as_a_bare_reference.dag # dag/test/claim/namespace_root_reference_edge_witness_test.dag
…(E0428); its doc block returns to ref_field_chain Co-Authored-By: Claude Opus 5.5 (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.
Reference-derived edges skip substrate vocabulary: a kernel or container spelling binds no module
Stacked on #12190, which has merged. Main is merged in, so the diff is now only this change.
Defect, the second arm of #12190's class. With #12190 applied, the Pkg7e plan's two-closure join shrank from 24 disagreements to 1:
std.string_typewas in the live closure DAG ofv2.compiler.compile, but the seed emission writes no file for it. That is not host realization. Tracing the live edges intostd.string_typefinds exactly one importer,dag/std/primitives. That module is import-free and annotatesdata primitive_contract_roster_note: String, so the reference-derived producer resolved the kernel spellingStringUniqueBare to the nearest module declaring it. The seed's resolver never binds a kernel or container spelling to a module. The census pull already skipped them ("SUBSTRATE VOCABULARY IS NOT A MODULE MEMBER"); the reference producer did not.Repair. The census pull's inline closure becomes the named
v1_compiler.cli_runis_substrate_vocabulary, built onstd_types::kernel_type_setandcontainer_type_arity.reference_resolution_factsreads it before resolving a bare name. One rule now serves both producers; there is no new list.Evidence, by execution, in
test.claim.namespace_root_reference_edge_witness, overfixtures/substrate_vocabulary_edge. The pool sits outside the corpus roots. In it,svk.decldeclarestype String, andsvk.consumerannotatesdata note: String.a_kernel_type_spelling_never_resolves_to_a_declaring_module: FAIL on the binary without this commit, PASS with it. The fixture was first authored withStringonly in parameter and field positions. That version produced no edge even on the old binary, so its RED was green by construction. It was re-shaped to the specimen's data-annotation position before this measurement.an_ordinary_type_reference_keeps_its_edge: PASS on both binaries.gunbc.recurring_failure_modea_namespace_root_segment_resolves_as_a_bare_referencenow records this second arm and the shared recognition rule.v1 admission. This is v2 self-host work under
gunbc.v1_maintenance_standingv1_seed_standing: the dependency facts decide the emitted compiler's crate partition. Hand-item delta: +1 fn (is_substrate_vocabulary, promoted from an inline closure, so the net change is 0 rules) and one guard inreference_resolution_facts. No emitted mirror changes.🤖 Generated with Claude Code