commit 66592c657952a5484f3593fbdc68ed07c44ea8ac
parent 8c8c37ddcb705f0b7b1c5408a2c205d42e4b924e
Author: triesap <tyson@radroots.org>
Date: Thu, 20 Aug 2026 07:04:10 +0000
bindings: expose evidence attestation contracts
- Expose final evidence manifest, report, and verified kind-3441 SDK adapters.
- Generate exact TypeScript, Wasm, UniFFI, and retained-mobile value surfaces.
- Keep manifest and signed-event admission bounded, strict, and secret-safe.
- Refresh dependency locks, inventories, fixtures, and the reviewed SDK API baseline.
Diffstat:
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/core/crates/tera_core/src/runtime/sdk.rs b/core/crates/tera_core/src/runtime/sdk.rs
@@ -1,5 +1,10 @@
use radroots_sdk::capability::{Availability, Maturity};
+pub use radroots_sdk::trade::{
+ RadrootsRhiEvidenceReportV1, RadrootsTradeEvidenceCoverageV1, RadrootsTradeEvidenceManifestV1,
+ RadrootsTradeEvidenceOutcomeV1,
+};
+
use super::RadrootsRuntime;
#[cfg(feature = "mobile-social")]
use super::product_surface::{BlossomPreferences, RelayPreferences};
diff --git a/core/crates/tera_core/tests/package_boundary.rs b/core/crates/tera_core/tests/package_boundary.rs
@@ -78,3 +78,24 @@ fn production_runtime_requires_validated_sqlite_and_memory_is_test_only() {
assert!(RUNTIME.contains("#[cfg(test)]\n pub(crate) fn test_memory()"));
assert!(!RUNTIME.contains("pub fn new()"));
}
+
+#[test]
+fn mobile_core_reuses_the_final_sdk_evidence_vocabulary() {
+ for required in [
+ "RadrootsRhiEvidenceReportV1",
+ "RadrootsTradeEvidenceCoverageV1",
+ "RadrootsTradeEvidenceManifestV1",
+ "RadrootsTradeEvidenceOutcomeV1",
+ ] {
+ assert!(
+ SDK.contains(required),
+ "missing SDK evidence type `{required}`"
+ );
+ }
+ for forbidden in ["SecretKey", "sign_event", "publish_event", "tokio::spawn"] {
+ assert!(
+ !SDK.contains(forbidden),
+ "mobile evidence projection gained forbidden authority `{forbidden}`"
+ );
+ }
+}