Repository navigation
Name packages by their logical identity in module identities - #1450
Merged
Merged
Conversation
Every native module identity carried the package root's absolute directory, so symbol hashes and the emitted LLVM IR changed with the checkout location. The package component is now the manifest's [package].name, or name@version when a version is declared (PROFILE-002). An entry with no manifest has no package identity and is refused, as the bootstrap CLI does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJak9tcQcwEZgNXjANPTiA
Without one and without a library catalog, reading the package selects no runtime. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJak9tcQcwEZgNXjANPTiA
julia-script
marked this pull request as ready for review
October 11, 2026 22:16
An entry with no silk.toml in its directory or any parent now fails with MissingManifest, carrying the directory the upward search started from, and silkc reports it instead of a generic invalid source root. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJak9tcQcwEZgNXjANPTiA
julia-script
pushed a commit
that referenced
this pull request
Oct 11, 2026
#1450 removed the checkout path from package identities, so the Linux and macOS emissions agree without staging sources at a fixed path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJak9tcQcwEZgNXjANPTiA
julia-script
added a commit
that referenced
this pull request
Oct 18, 2026
Name packages by their logical identity in module identities
julia-script
added a commit
that referenced
this pull request
Oct 18, 2026
#1450 removed the checkout path from package identities, so the Linux and macOS emissions agree without staging sources at a fixed path.
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.
Every native module identity was
("file", <absolute package root>, logical path)(ModuleSources.silk), so instance keys, symbol hashes and the emitted LLVM IR changed with the checkout's directory. The same compiler building the same sources from two directories emitted different IR. The Linux seed chain hid it because N1 and N2 build from one path. The macOS leg (#1445), which compares IR emitted on two machines, exposed it.The reference already rules this out: module identity "is logical rather than an absolute host path" (MODULE-001), and a package's identity is
name@version, "Physical checkout paths are not identities" (PROFILE-002).[package].name, followed by@versionwhen[package].versionis declared. Corpus and harness manifests declare no version (a guarded input), so the version stays optional. A missing or empty name, or a non-text version, isInvalidSourceRoot.silk.tomlin its directory or any parent fails with the newMissingManifest {directory}, as the bootstrap CLI refuses withManifestNotFound. The old fallback used the entry's directory as the identity.silkcreports it assilkc: no silk.toml in <directory> or any parent directory; a build needs a package manifest.SemanticLoweringCases.silkgainspackageIdentityExcludesTheCheckoutDirectory. It builds one tiny composed package from two different directories and asserts equal entry identities and byte-identical LLVM IR. It also assertsname@version, and that a manifest-less entry fails withMissingManifestnaming its own directory. It sits beside the existing composition case, so it adds no test file.compiler/README.mddescribes package identity.diagnostic_main.silkandStrictInventoryCases.silkget the new error in their rows. Those two files already call a two-argumentModuleSources.makethat no longer exists, and no workflow builds them.Validation on head
c5212d7(selfhost with #1447 merged in)node packages/cli/dist/bin.js test --manifest-path compiler/silk.toml --root src/semantic/SemanticLoweringCases.silk --no-cachegives 125 passed, 0 failed, including the new case (21 min, 11.9 GB peak RSS).silkc test src/semantic/SemanticLoweringCases.silk --filter ackageIdentitypasses.ModuleSources.silkfails.a160c351…). Before this change it differed at the first package symbol. A small package gave identical IR with relative and with absolute entry paths.🤖 Generated with Claude Code
https://claude.ai/code/session_01SJak9tcQcwEZgNXjANPTiA