commit 653b4519d7eb006d407d83609fb994ab284f17f2
parent 893ea49ddb73a156b2a95562a0e548c7b54ff337
Author: triesap <tyson@radroots.org>
Date: Tue, 28 Jul 2026 18:14:10 +0000
deps: consume frozen library version
- select the exact 0.1.0-alpha library cohort across SDK dependencies
- make repository-owned versions explicit in the shared architecture contract
- refresh generated architecture projections and the resolved lock graph
- verify architecture policy and the runtime-contract consumer with locked Cargo
Diffstat:
2 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/tools/sdk_xtask_import/src/architecture.rs b/tools/sdk_xtask_import/src/architecture.rs
@@ -46,7 +46,6 @@ struct DeviationRecord {
#[derive(Debug, Deserialize)]
struct ArchitectureIdentity {
spec_id: String,
- initial_version: String,
edition: String,
resolver: String,
rust_version: String,
@@ -59,6 +58,7 @@ struct ArchitectureIdentity {
#[derive(Debug, Deserialize)]
struct ArchitectureRepository {
url: String,
+ version: String,
packages: Vec<String>,
}
@@ -213,12 +213,15 @@ fn validate_workspace_toolchain(
}
let workspace_package = &manifest.workspace.package;
let public_metadata = &manifest.workspace.metadata.radroots.public_package;
- if public_metadata.version != architecture.initial_version
- || architecture.initial_version != "0.1.0"
- {
+ let repository = architecture
+ .repositories
+ .values()
+ .find(|repository| repository.url == workspace_package.repository)
+ .ok_or_else(|| "workspace repository has no architecture allocation".to_owned())?;
+ if public_metadata.version != repository.version {
return Err(format!(
- "public package version source {} must match architecture initial_version {}",
- public_metadata.version, architecture.initial_version
+ "public package version source {} must match repository version {}",
+ public_metadata.version, repository.version
));
}
if public_metadata.authors != PUBLIC_AUTHORS {
@@ -350,7 +353,7 @@ fn validate_public_package_metadata(
package,
"version",
&workspace.workspace.package.version,
- &architecture.initial_version,
+ &repository.version,
name,
)?;
validate_public_manifest_field(
@@ -471,6 +474,16 @@ fn validate_public_dependency_versions(
.iter()
.map(|package| package.name.as_str())
.collect::<BTreeSet<_>>();
+ let package_versions = architecture
+ .repositories
+ .values()
+ .flat_map(|repository| {
+ repository
+ .packages
+ .iter()
+ .map(|package| (package.as_str(), repository.version.as_str()))
+ })
+ .collect::<BTreeMap<_, _>>();
for member in &workspace.workspace.members {
let manifest_path = workspace_root.join(member).join("Cargo.toml");
@@ -493,7 +506,7 @@ fn validate_public_dependency_versions(
workspace_dependencies,
public_packages: &public_packages,
local_packages: &local_packages,
- initial_version: &architecture.initial_version,
+ package_versions: &package_versions,
};
validate_public_dependency_sections(member, package_name, &manifest, &policy)?;
}
@@ -505,7 +518,7 @@ struct PublicDependencyPolicy<'a> {
workspace_dependencies: Option<&'a toml::value::Table>,
public_packages: &'a BTreeSet<&'a str>,
local_packages: &'a BTreeSet<&'a str>,
- initial_version: &'a str,
+ package_versions: &'a BTreeMap<&'a str, &'a str>,
}
fn validate_public_dependency_sections(
@@ -600,7 +613,10 @@ fn validate_public_dependency_table(
toml::Value::Table(table) => table.get("version").and_then(toml::Value::as_str),
_ => None,
};
- let exact_version = format!("={}", policy.initial_version);
+ let governed_version = policy.package_versions.get(dependency_name).ok_or_else(|| {
+ format!("public dependency {dependency_name} has no repository version authority")
+ })?;
+ let exact_version = format!("={governed_version}");
if policy.local_packages.contains(dependency_name)
&& (dependency_path.is_none() || version != Some(exact_version.as_str()))
{
@@ -1162,7 +1178,6 @@ adr_required = false
fn architecture() -> ArchitectureIdentity {
ArchitectureIdentity {
spec_id: "radroots.crates.release.v1".to_string(),
- initial_version: "0.1.0".to_string(),
edition: "2024".to_string(),
resolver: "3".to_string(),
rust_version: "1.97.1".to_string(),
@@ -1172,6 +1187,7 @@ adr_required = false
"sdk".to_string(),
ArchitectureRepository {
url: "https://github.com/radrootslabs/sdk".to_string(),
+ version: "0.1.0".to_string(),
packages: vec!["radroots".to_string()],
},
)]),
diff --git a/tools/sdk_xtask_import/src/check.rs b/tools/sdk_xtask_import/src/check.rs
@@ -2175,7 +2175,7 @@ mod tests {
fn write_publication_architecture(root: &Path) {
fs::create_dir_all(root.join("docs/specs")).expect("create spec directory");
let mut architecture = format!(
- "spec_id = \"radroots.crates.release.v1\"\npackage_count = 19\n\n[repositories.lib]\npackages = [{}]\n\n[repositories.sdk]\npackages = [{}]\n",
+ "spec_id = \"radroots.crates.release.v1\"\npackage_count = 19\n\n[repositories.lib]\nversion = \"0.1.0-alpha\"\npackages = [{}]\n\n[repositories.sdk]\nversion = \"0.1.0\"\npackages = [{}]\n",
toml_strings(&APPROVED_CRATES[..17]),
toml_strings(&APPROVED_CRATES[17..]),
);