field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

commit 3e27097917acde3127a8a412cb118f1e0aacf253
parent cef43c597b8dc892d6385b4665266914e96e63e5
Author: triesap <tyson@radroots.org>
Date:   Sun,  9 Aug 2026 16:58:49 +0000

blossom: retain bounded server error evidence

- parse only validated public service error identifiers
- preserve generic SDK failure codes and HTTP status
- propagate server evidence through mobile runtime and UniFFI
- cover bounds, redaction, and FFI schema evolution

Diffstat:
Mcore/crates/tera_core/src/runtime/builder.rs | 3++-
Mcore/crates/tera_core/src/runtime/sdk.rs | 2++
2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/core/crates/tera_core/src/runtime/builder.rs b/core/crates/tera_core/src/runtime/builder.rs @@ -185,12 +185,13 @@ mod tests { .sdk_blossom_evidence() .expect("Blossom evidence") .expect("configured evidence"); - assert_eq!(evidence.schema_version, 1); + assert_eq!(evidence.schema_version, 2); assert_eq!(evidence.state, "configured_unobserved"); assert_eq!(evidence.last_successful_state, "configured_unobserved"); assert_eq!(evidence.transport_security, "development_cleartext"); assert!(evidence.observed_at_unix_ms.is_none()); assert!(evidence.error_code.is_none()); + assert!(evidence.server_error_code.is_none()); assert!( runtime .configure_blossom( diff --git a/core/crates/tera_core/src/runtime/sdk.rs b/core/crates/tera_core/src/runtime/sdk.rs @@ -61,6 +61,7 @@ pub struct SdkBlossomEvidenceRecord { pub observed_at_unix_ms: Option<u64>, pub http_status: Option<u16>, pub error_code: Option<String>, + pub server_error_code: Option<String>, pub error_phase: Option<String>, pub retryable: bool, pub possible_orphan: bool, @@ -294,6 +295,7 @@ fn sdk_blossom_evidence_record( observed_at_unix_ms: value.observed_at_unix_ms(), http_status: value.http_status(), error_code: value.error_code().map(str::to_owned), + server_error_code: value.server_error_code().map(str::to_owned), error_phase: value .error_phase() .map(blossom_phase_label)