sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

commit 76fe02a613a024605e2a89e9c3240d271d2d1394
parent 0d21ded103d6bccf8087fc27b824d2cc758c4372
Author: triesap <tyson@radroots.org>
Date:   Fri, 10 Jul 2026 10:13:30 +0000

sdk: guard proxy required target semantics

- add SDK source-boundary witnesses for proxy required targets
- lock proxy publish to required target fingerprints
- reject count-policy lowering in the RequiredTargets arm
- validate SDK source-boundary and generated checks

Diffstat:
Mcrates/sdk/tests/source_boundary.rs | 37+++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+), 0 deletions(-)

diff --git a/crates/sdk/tests/source_boundary.rs b/crates/sdk/tests/source_boundary.rs @@ -665,6 +665,43 @@ fn contains_sdk_target_set_new(source: &str) -> bool { } #[test] +fn sdk_proxy_required_targets_stay_fingerprint_exact() { + let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR")); + let sync_runtime = read_source(manifest_dir.join("src/sync_runtime.rs").as_path()); + + for required in [ + "let required_remaining_targets =\n proxy_required_remaining_targets(&plan.satisfaction_policy, &active_targets)?;", + "required_remaining_targets.as_deref()", + "fn proxy_required_remaining_targets", + "RadrootsTransportSatisfactionPolicy::RequiredTargets { class, targets }", + "target.endpoint_fingerprint == *required", + "target.status.counts_as_transport_satisfaction(*class)", + "target.status.is_ready_for_attempt()", + ] { + assert!( + sync_runtime.contains(required), + "SDK proxy publish must retain exact required-target witness `{required}`" + ); + } + + let required_targets_arm = source_between( + sync_runtime.as_str(), + "RadrootsTransportSatisfactionPolicy::RequiredTargets { .. } => {\n TransportPublishDeliveryPolicy::required_targets(", + " RadrootsTransportSatisfactionPolicy::Quorum { .. } => {", + ); + for forbidden in [ + "TransportPublishDeliveryPolicy::All", + "TransportPublishDeliveryPolicy::Any", + "TransportPublishDeliveryPolicy::Quorum", + ] { + assert!( + !required_targets_arm.contains(forbidden), + "SDK RequiredTargets proxy arm must not lower to count policy `{forbidden}`" + ); + } +} + +#[test] fn sdk_readme_documents_current_public_product_surface() { let readme_path = Path::new(env!("CARGO_MANIFEST_DIR")).join("README"); let readme = read_source(readme_path.as_path());