commit 0a37a2367da540346f240568bfc622b0d5ba2196
parent 7f642c39af0f265fbf4618fac14c893d21fbccef
Author: triesap <tyson@radroots.org>
Date: Thu, 10 Sep 2026 20:29:14 +0000
tera: Apply qualified authored-write durability
- Adopt the exact shared durable connection policy and native artifacts
- Flush explicit Save without cancelling the active persistence worker
- Preserve typed failures and exact receipt reconciliation on retry
- Qualify durable reopen, latency and complete standalone consumers
Diffstat:
17 files changed, 792 insertions(+), 312 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -1876,7 +1876,7 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
name = "radroots_blossom"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"mediatype",
"serde",
@@ -1888,7 +1888,7 @@ dependencies = [
[[package]]
name = "radroots_core"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"rust_decimal",
"serde",
@@ -1897,7 +1897,7 @@ dependencies = [
[[package]]
name = "radroots_event"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"hex",
"jiff-tzdb",
@@ -1915,7 +1915,7 @@ dependencies = [
[[package]]
name = "radroots_event_codec"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"hex",
"radroots_blossom",
@@ -1932,7 +1932,7 @@ dependencies = [
[[package]]
name = "radroots_identity"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"k256",
"serde",
@@ -1942,7 +1942,7 @@ dependencies = [
[[package]]
name = "radroots_nostr"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"base64",
"nostr 0.44.8",
@@ -1959,7 +1959,7 @@ dependencies = [
[[package]]
name = "radroots_protocol"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"serde",
]
@@ -1967,7 +1967,7 @@ dependencies = [
[[package]]
name = "radroots_sdk"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"radroots_blossom",
"radroots_core",
@@ -1992,7 +1992,7 @@ dependencies = [
[[package]]
name = "radroots_secrets"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"chacha20poly1305",
"sha2",
@@ -2003,7 +2003,7 @@ dependencies = [
[[package]]
name = "radroots_signing"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"hex",
"radroots_event",
@@ -2017,7 +2017,7 @@ dependencies = [
[[package]]
name = "radroots_storage"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"radroots_event",
"radroots_event_codec",
@@ -2031,7 +2031,7 @@ dependencies = [
[[package]]
name = "radroots_storage_sqlite"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"fs2",
"radroots_event",
@@ -2048,7 +2048,7 @@ dependencies = [
[[package]]
name = "radroots_sync"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"radroots_event",
"radroots_event_codec",
@@ -2063,7 +2063,7 @@ dependencies = [
[[package]]
name = "radroots_trade"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"hex",
"radroots_core",
@@ -2077,7 +2077,7 @@ dependencies = [
[[package]]
name = "radroots_transport"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"radroots_event",
"radroots_identity",
@@ -2089,7 +2089,7 @@ dependencies = [
[[package]]
name = "radroots_transport_nostr"
version = "0.1.0-alpha"
-source = "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+source = "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
dependencies = [
"async-wsocket",
"futures",
diff --git a/Cargo.toml b/Cargo.toml
@@ -31,18 +31,18 @@ jiff_tzdb = { package = "jiff-tzdb", version = "=0.1.8", default-features = fals
futures-util = { version = "0.3", default-features = false, features = ["sink", "std"] }
hex = { version = "0.4" }
nostr = { version = "0.44.7", default-features = false }
-radroots_blossom = { package = "radroots_blossom", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_event = { package = "radroots_event", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_event_codec = { package = "radroots_event_codec", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_identity = { package = "radroots_identity", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_nostr = { package = "radroots_nostr", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_protocol = { package = "radroots_protocol", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_sdk = { version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_signing = { package = "radroots_signing", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_storage = { package = "radroots_storage", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_sync = { package = "radroots_sync", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_transport = { package = "radroots_transport", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
-radroots_transport_nostr = { package = "radroots_transport_nostr", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "363b9be18831be2fd6ef505d6154fb878ed8efd7" }
+radroots_blossom = { package = "radroots_blossom", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_event = { package = "radroots_event", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_event_codec = { package = "radroots_event_codec", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_identity = { package = "radroots_identity", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_nostr = { package = "radroots_nostr", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_protocol = { package = "radroots_protocol", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_sdk = { version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_signing = { package = "radroots_signing", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_storage = { package = "radroots_storage", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_sync = { package = "radroots_sync", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_transport = { package = "radroots_transport", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
+radroots_transport_nostr = { package = "radroots_transport_nostr", version = "=0.1.0-alpha", default-features = false, git = "https://github.com/radrootslabs/lib", rev = "d3332ff1c68245a232f093434ee35fe2a342ed38" }
serde = { version = "1", default-features = false, features = ["derive", "alloc"] }
serde_json = { version = "1", default-features = false, features = ["alloc"] }
sha2 = { version = "0.10", default-features = false }
diff --git a/Tera.xcodeproj/project.pbxproj b/Tera.xcodeproj/project.pbxproj
@@ -51,6 +51,7 @@
81AF9DDA0E64DC4EEFCEF25D /* TeraRemoteQualificationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E351F52E77C74A4E99095E45 /* TeraRemoteQualificationTests.swift */; };
827D8CC5C0488F0D5D15CE99 /* TeraMediaOwnershipFFITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2521493B0CD2B82445974E81 /* TeraMediaOwnershipFFITests.swift */; };
8422EAEECA73BB72974D002A /* TeraTodayBackfillTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D3FEE2830E056E82AF05FD /* TeraTodayBackfillTests.swift */; };
+ 84429B5DEB5BB41EFD25A8ED /* TeraComposerDurabilityBoundaryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D536D6625083ACB3DA4A674 /* TeraComposerDurabilityBoundaryTests.swift */; };
852FF7514FF7F682A246FB47 /* TeraStateMigrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98E969BCFF7CED33A1D4A040 /* TeraStateMigrationTests.swift */; };
85404A5125CF3E64E6009DC1 /* TeraMediaBudgetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F596D3A9B9E236963DCE15D7 /* TeraMediaBudgetTests.swift */; };
888B178679E012BB053FE31B /* TeraEditingReplacementFFITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B310FD8CCA9F9C2DA19BE8CF /* TeraEditingReplacementFFITests.swift */; };
@@ -83,11 +84,13 @@
DF97F408D7D32F72C5AF5939 /* TeraRootShellUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5238B5F236C392C82CEF9838 /* TeraRootShellUITests.swift */; };
E4E85524E39F13D6C76650F1 /* TeraTodaySyncFixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5854504D0CAD5ABC29302292 /* TeraTodaySyncFixtures.swift */; };
E508A7061082B091B733D62B /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ACCE25979BA86C1EC5BFD6 /* App.swift */; };
+ E892ED14E1F39D81128A8F0E /* TeraComposerSaveLatencyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C4A465852C5D5BDFC879D6E /* TeraComposerSaveLatencyTests.swift */; };
E98A5C885E3955D4DC4BB1EC /* TeraTodayCacheFirstTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CB51FEF4CE772320B3264C /* TeraTodayCacheFirstTests.swift */; };
EF7293C553BF1DB45EEEBD49 /* local-social-personas.v1.json in Resources */ = {isa = PBXBuildFile; fileRef = 27D9D40699A01FFB02F30B11 /* local-social-personas.v1.json */; };
F14217EA66C2A9397E36E3FA /* TeraEditingOperationProtectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9B19425D3374B899485C17 /* TeraEditingOperationProtectionTests.swift */; };
F4AF91E71B691FE30C191852 /* TeraAddObservationStartupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A4460928B20A21A94BECCE /* TeraAddObservationStartupTests.swift */; };
F8C87782857DC930D47E6A90 /* TeraRuntimeResourceTaskTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D01C023E258AC3B3B1C27D /* TeraRuntimeResourceTaskTests.swift */; };
+ F8DB757CAC7AB2136483EC2B /* TeraComposerSaveSchedulingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C51E210CC4A6734CD302452 /* TeraComposerSaveSchedulingTests.swift */; };
FB585785DC906CB2AE4AE535 /* TeraBindingPortabilityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58E711687008866790042792 /* TeraBindingPortabilityTests.swift */; };
FBA9C3463CD1827392AF9599 /* TeraAddSchemaFixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8ED2718D5E9E8980ADF3423 /* TeraAddSchemaFixtures.swift */; };
/* End PBXBuildFile section */
@@ -111,6 +114,7 @@
/* Begin PBXFileReference section */
02F322CF98F8BEB908B93215 /* TeraMutationAdmissionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraMutationAdmissionTests.swift; sourceTree = "<group>"; };
+ 0C4A465852C5D5BDFC879D6E /* TeraComposerSaveLatencyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraComposerSaveLatencyTests.swift; sourceTree = "<group>"; };
0CDE3D76E1EDF909C19D0506 /* TeraUITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = TeraUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
0D243145C276EBF17915AB4E /* TeraEditingProtectionUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraEditingProtectionUITests.swift; sourceTree = "<group>"; };
0F97ECE43BB7028B5A497720 /* TeraEditingReplacementTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraEditingReplacementTests.swift; sourceTree = "<group>"; };
@@ -127,6 +131,7 @@
36AF0D194520F0F02EAD6B50 /* TeraCalendarTimingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraCalendarTimingTests.swift; sourceTree = "<group>"; };
3A756C16ACFABBD36C48DF62 /* TeraScopedAddTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraScopedAddTests.swift; sourceTree = "<group>"; };
3B808E67E85CD36E49C38B6F /* TeraCalendarFFICompatibilityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraCalendarFFICompatibilityTests.swift; sourceTree = "<group>"; };
+ 3C51E210CC4A6734CD302452 /* TeraComposerSaveSchedulingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraComposerSaveSchedulingTests.swift; sourceTree = "<group>"; };
4383B870D20178E633610113 /* TeraSessionResourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraSessionResourceTests.swift; sourceTree = "<group>"; };
44A4460928B20A21A94BECCE /* TeraAddObservationStartupTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraAddObservationStartupTests.swift; sourceTree = "<group>"; };
46DDEE781FDD92A292FD847B /* TeraUserMessagesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraUserMessagesTests.swift; sourceTree = "<group>"; };
@@ -144,6 +149,7 @@
6967B3EAC4CF1A410B26DD1A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
6B8677670E203FF68EC88983 /* TeraRootShellTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraRootShellTests.swift; sourceTree = "<group>"; };
6D2BE93A0818202625CAF1F5 /* TeraTodayCalendarScopeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraTodayCalendarScopeTests.swift; sourceTree = "<group>"; };
+ 6D536D6625083ACB3DA4A674 /* TeraComposerDurabilityBoundaryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraComposerDurabilityBoundaryTests.swift; sourceTree = "<group>"; };
714B4DD70B881D29A89812C9 /* TeraTodayReconciliationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraTodayReconciliationTests.swift; sourceTree = "<group>"; };
7283D1C8F6E90A236BC84AF6 /* TeraTodayRenderingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraTodayRenderingTests.swift; sourceTree = "<group>"; };
73EBD10E201ECA26DCED523F /* TeraRuntimeInvalidationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeraRuntimeInvalidationTests.swift; sourceTree = "<group>"; };
@@ -273,7 +279,10 @@
36AF0D194520F0F02EAD6B50 /* TeraCalendarTimingTests.swift */,
2A506546B0EC1792240C36F7 /* TeraClockTests.swift */,
E55E47B15C42F13ABF2DFF27 /* TeraComposerAutosaveTests.swift */,
+ 6D536D6625083ACB3DA4A674 /* TeraComposerDurabilityBoundaryTests.swift */,
A5938176A92F96A30CC39DFB /* TeraComposerPersistenceFFITests.swift */,
+ 0C4A465852C5D5BDFC879D6E /* TeraComposerSaveLatencyTests.swift */,
+ 3C51E210CC4A6734CD302452 /* TeraComposerSaveSchedulingTests.swift */,
DE21EEF3B1A13F1B5A10A3BF /* TeraComposerStartupTests.swift */,
ECE8A3704AB9582A5E461195 /* TeraDraftRecoveryTests.swift */,
AC9B19425D3374B899485C17 /* TeraEditingOperationProtectionTests.swift */,
@@ -551,7 +560,10 @@
9309D7175535546A0C878F75 /* TeraCalendarTimingTests.swift in Sources */,
70417FB635F06CC9829FB38C /* TeraClockTests.swift in Sources */,
4B093458FAF4C6E4860E313A /* TeraComposerAutosaveTests.swift in Sources */,
+ 84429B5DEB5BB41EFD25A8ED /* TeraComposerDurabilityBoundaryTests.swift in Sources */,
295A19317FC58A73A68C98DC /* TeraComposerPersistenceFFITests.swift in Sources */,
+ E892ED14E1F39D81128A8F0E /* TeraComposerSaveLatencyTests.swift in Sources */,
+ F8DB757CAC7AB2136483EC2B /* TeraComposerSaveSchedulingTests.swift in Sources */,
3410EC660FF36CC77F5F50DD /* TeraComposerStartupTests.swift in Sources */,
64F5AD3749E090316C7D015E /* TeraDraftRecoveryTests.swift in Sources */,
F14217EA66C2A9397E36E3FA /* TeraEditingOperationProtectionTests.swift in Sources */,
diff --git a/Tera/State/TeraComposerAutosave.swift b/Tera/State/TeraComposerAutosave.swift
@@ -23,6 +23,9 @@ final class TeraComposerAutosave {
private var current: TeraComposerForm?
private var attempted: TeraComposerSaveRequest?
private var worker: Task<Void, Never>?
+ private var coalescingTask: Task<Void, Error>?
+ private var immediateSave = false
+ private var lastFailure: Error?
private var paused = false
private var exhausted = false
@@ -34,7 +37,10 @@ final class TeraComposerAutosave {
self.delay = delay
}
- deinit { worker?.cancel() }
+ deinit {
+ coalescingTask?.cancel()
+ worker?.cancel()
+ }
var isDirty: Bool {
current != nil && (exhausted || acknowledged?.editSequence != editSequence || acknowledged?.form != current)
@@ -44,12 +50,15 @@ final class TeraComposerAutosave {
/// worker slot occupied until it exits, preventing abandoned task fan-out.
func reset(scope: TeraComposerScope?) {
generation = generation.invalidated()
+ immediateSave = false
+ coalescingTask?.cancel()
worker?.cancel()
self.scope = scope
id = nil
current = nil
acknowledged = nil
attempted = nil
+ lastFailure = nil
editSequence = 0
exhausted = false
paused = false
@@ -59,6 +68,8 @@ final class TeraComposerAutosave {
func stop() {
generation = generation.invalidated()
paused = true
+ immediateSave = false
+ coalescingTask?.cancel()
worker?.cancel()
if isDirty {
state = .unsaved
@@ -121,12 +132,20 @@ final class TeraComposerAutosave {
if state == .failed {
state = .unsaved
}
+ if isDirty {
+ immediateSave = true
+ coalescingTask?.cancel()
+ }
startWorker()
while let task = worker {
+ if isDirty {
+ immediateSave = true
+ coalescingTask?.cancel()
+ }
await task.value
try ensureCurrent(requested)
}
- guard !isDirty, let acknowledged else { throw TeraComposerAcknowledgment.unconfirmed }
+ guard !isDirty, let acknowledged else { throw lastFailure ?? TeraComposerAcknowledgment.unconfirmed }
return acknowledged
}
@@ -134,6 +153,7 @@ final class TeraComposerAutosave {
guard worker == nil, !paused, !exhausted, generation.isActive, scope != nil,
isDirty, state != .failed else { return }
let requested = generation
+ lastFailure = nil
worker = Task { [weak self] in
guard let self else { return }
await run(requested)
@@ -142,6 +162,9 @@ final class TeraComposerAutosave {
private func run(_ requested: TeraSessionGeneration) async {
defer {
+ if generation == requested {
+ immediateSave = false
+ }
worker = nil
startWorker()
}
@@ -149,7 +172,7 @@ final class TeraComposerAutosave {
while isDirty {
try ensureCurrent(requested)
state = .saving
- try await delay()
+ try await coalesce(requested)
try ensureCurrent(requested)
try await reconcileAttempt(requested)
try await persistCurrent(requested)
@@ -160,11 +183,27 @@ final class TeraComposerAutosave {
// A write may have committed before cancellation or a lost callback.
// Keep its exact request for a read before any retry in this lifetime.
if generation == requested, !paused {
+ lastFailure = error
state = .failed
}
}
}
+ private func coalesce(_ requested: TeraSessionGeneration) async throws {
+ guard !immediateSave else { return }
+ let task = Task { [delay] in try await delay() }
+ coalescingTask = task
+ defer { coalescingTask = nil }
+ do {
+ try await task.value
+ } catch {
+ try ensureCurrent(requested)
+ // Explicit Save cancels only batching; an in-flight write still owns
+ // its slot until its receipt or unknown-write reconciliation completes.
+ guard immediateSave, error is CancellationError else { throw error }
+ }
+ }
+
private func persistCurrent(_ requested: TeraSessionGeneration) async throws {
if id == nil {
let reserved = try await persistence.reserve()
diff --git a/TeraFFI/provenance.json b/TeraFFI/provenance.json
@@ -22,9 +22,9 @@
"sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c"
},
{
- "bytes": 74566032,
+ "bytes": 74580864,
"path": "TeraFFI.xcframework/ios-arm64-simulator/libtera_ffi.a",
- "sha256": "ea772fb6ac62a0e5fd3a459bdc2afb8dce24c1dec278d56b5d72d16fcb83bfc0"
+ "sha256": "c61c3bacad23947610b95c7bd061e576744d70e2f29b45b9e0f8bf0428164326"
},
{
"bytes": 74130,
@@ -37,9 +37,9 @@
"sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c"
},
{
- "bytes": 74631304,
+ "bytes": 74644816,
"path": "TeraFFI.xcframework/ios-arm64/libtera_ffi.a",
- "sha256": "435be2eb4695d932a56bab01103a21f926496c06b8634e4b134e017e286415a7"
+ "sha256": "e694a56e9d2efa2a473d42ca9a929c4102cd2d5d876da3144f0a31a5778479dd"
},
{
"bytes": 44380,
@@ -77,34 +77,34 @@
"sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c"
},
{
- "bytes": 20889792,
+ "bytes": 20890864,
"path": "native/aarch64-apple-darwin/libtera_ffi.dylib",
- "sha256": "985e22036f4c32f75eae0437f016e13c36fbad4b88b55dd21aa5c7f43b41f208"
+ "sha256": "82d8f5db99b68cd41dceeac219a2ea5e9c65580d864c4481c9c6c04f7c07ff6a"
},
{
- "bytes": 74566032,
+ "bytes": 74580864,
"path": "native/aarch64-apple-ios-sim/libtera_ffi.a",
- "sha256": "ea772fb6ac62a0e5fd3a459bdc2afb8dce24c1dec278d56b5d72d16fcb83bfc0"
+ "sha256": "c61c3bacad23947610b95c7bd061e576744d70e2f29b45b9e0f8bf0428164326"
},
{
- "bytes": 74631304,
+ "bytes": 74644816,
"path": "native/aarch64-apple-ios/libtera_ffi.a",
- "sha256": "435be2eb4695d932a56bab01103a21f926496c06b8634e4b134e017e286415a7"
+ "sha256": "e694a56e9d2efa2a473d42ca9a929c4102cd2d5d876da3144f0a31a5778479dd"
},
{
"bytes": 78901,
"path": "source/aarch64-apple-darwin.json",
- "sha256": "3e35363c2f01b2af4a76ae9800381f28c15b415e4b975586bd5a6809a53b03ce"
+ "sha256": "9b012714199bd32b7e36315a7ad0ff53e38ac183205cc6de1866e85135889bb7"
},
{
"bytes": 78745,
"path": "source/aarch64-apple-ios-sim.json",
- "sha256": "857590f081e97b5445982b2155d88c9aeb2be3982904dc10c33fc491aa0f232f"
+ "sha256": "1a3205a8c343b1483014b7dc625470d819e008014192be0db8cdfafa99235958"
},
{
"bytes": 78741,
"path": "source/aarch64-apple-ios.json",
- "sha256": "c598b77069dd1fc2baf0a0f3bcc6d88c3c00243c6238610726d5b0fd9de2668c"
+ "sha256": "f24780bdcb07df2d5a942cca123d1375ca7d2c3a53471449b546921e2d4c4f11"
}
],
"language": "swift",
@@ -112,7 +112,7 @@
"schema": "radroots.artifact-manifest.v2",
"source": {
"repository": "https://github.com/radrootslabs/tera",
- "tree": "d2d70cf73831ad89f077bf5ff5158fa6bcf55638"
+ "tree": "57e99e1ced148e6e75bc0718272dad8faff1c366"
},
"source_records": {
"aarch64-apple-darwin": "source/aarch64-apple-darwin.json",
@@ -139,9 +139,9 @@
"sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c"
},
{
- "bytes": 74566032,
+ "bytes": 74580864,
"path": "Tera/Frameworks/TeraFFI.xcframework/ios-arm64-simulator/libtera_ffi.a",
- "sha256": "ea772fb6ac62a0e5fd3a459bdc2afb8dce24c1dec278d56b5d72d16fcb83bfc0"
+ "sha256": "c61c3bacad23947610b95c7bd061e576744d70e2f29b45b9e0f8bf0428164326"
},
{
"bytes": 74130,
@@ -154,9 +154,9 @@
"sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c"
},
{
- "bytes": 74631304,
+ "bytes": 74644816,
"path": "Tera/Frameworks/TeraFFI.xcframework/ios-arm64/libtera_ffi.a",
- "sha256": "435be2eb4695d932a56bab01103a21f926496c06b8634e4b134e017e286415a7"
+ "sha256": "e694a56e9d2efa2a473d42ca9a929c4102cd2d5d876da3144f0a31a5778479dd"
},
{
"bytes": 581356,
@@ -176,17 +176,17 @@
{
"bytes": 78901,
"path": "TeraFFI/source/aarch64-apple-darwin.json",
- "sha256": "3e35363c2f01b2af4a76ae9800381f28c15b415e4b975586bd5a6809a53b03ce"
+ "sha256": "9b012714199bd32b7e36315a7ad0ff53e38ac183205cc6de1866e85135889bb7"
},
{
"bytes": 78745,
"path": "TeraFFI/source/aarch64-apple-ios-sim.json",
- "sha256": "857590f081e97b5445982b2155d88c9aeb2be3982904dc10c33fc491aa0f232f"
+ "sha256": "1a3205a8c343b1483014b7dc625470d819e008014192be0db8cdfafa99235958"
},
{
"bytes": 78741,
"path": "TeraFFI/source/aarch64-apple-ios.json",
- "sha256": "c598b77069dd1fc2baf0a0f3bcc6d88c3c00243c6238610726d5b0fd9de2668c"
+ "sha256": "f24780bdcb07df2d5a942cca123d1375ca7d2c3a53471449b546921e2d4c4f11"
}
],
"schema": "tera.installed-native-artifacts.v1"
diff --git a/TeraFFI/source.lock b/TeraFFI/source.lock
@@ -1,10 +1,10 @@
schema = "tera.installed-source.v1"
repository = "https://github.com/radrootslabs/tera"
-source_tree = "d2d70cf73831ad89f077bf5ff5158fa6bcf55638"
-manifest_sha256 = "3ec93a119b64fa97e6c6e293c34a7544e5286ee6a3cce24b90249cdf6f832101"
+source_tree = "57e99e1ced148e6e75bc0718272dad8faff1c366"
+manifest_sha256 = "d56aff8833d3125a11f91c5ab2a043b7beb95b164f28dc218563601365693499"
source_date_epoch = 1787871027
[foundation]
repository = "https://github.com/radrootslabs/lib"
-revision = "363b9be18831be2fd6ef505d6154fb878ed8efd7"
+revision = "d3332ff1c68245a232f093434ee35fe2a342ed38"
version = "0.1.0-alpha"
diff --git a/TeraFFI/source/aarch64-apple-darwin.json b/TeraFFI/source/aarch64-apple-darwin.json
@@ -186,36 +186,36 @@
"proc-macro2 v1.0.107|default,proc-macro (*)",
"quote v1.0.47|default,proc-macro",
"quote v1.0.47|default,proc-macro (*)",
- "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std",
- "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std (*)",
- "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,events,std",
- "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,events,std (*)",
- "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,nostr,sqlite,sync",
- "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,nostr,sqlite,sync (*)",
- "radroots_secrets v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde",
- "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde (*)",
- "radroots_storage_sqlite v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)| (*)",
- "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std",
- "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std (*)",
- "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)| (*)",
+ "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std",
+ "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std (*)",
+ "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,events,std",
+ "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,events,std (*)",
+ "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,nostr,sqlite,sync",
+ "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,nostr,sqlite,sync (*)",
+ "radroots_secrets v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde",
+ "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde (*)",
+ "radroots_storage_sqlite v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)| (*)",
+ "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std",
+ "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std (*)",
+ "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)| (*)",
"rand v0.8.7|alloc,getrandom,libc,rand_chacha,std,std_rng",
"rand v0.9.5|alloc,default,os_rng,small_rng,std,std_rng,thread_rng",
"rand_chacha v0.3.1|std",
@@ -385,15 +385,15 @@
"symbol_reader": "llvm-nm, compatible with GNU nm\nLLVM (http://llvm.org/):\n LLVM version 22.1.6-rust-1.97.1-stable\n Optimized build.",
"target": "aarch64-apple-darwin"
},
- "cargo_lock_sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0",
+ "cargo_lock_sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02",
"disposition": "local_staged_source_only",
"foundation": {
"architecture": "radroots.crates.release.v2",
- "lockfile_sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0",
+ "lockfile_sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02",
"repository": "https://github.com/radrootslabs/lib",
- "revision": "363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "revision": "d3332ff1c68245a232f093434ee35fe2a342ed38",
"schema": "radroots.lib.source-lock.v1",
- "source_archive_sha256": "9c9af522b74a2b342c0202cc919189d5234a4de2bc7bbb7c96b4e3c3696e5a6a",
+ "source_archive_sha256": "fc3cc82de74e0db7a640f8dfddb6eb0c8402b38cfebe14a2dbb61856561f3856",
"version": "0.1.0-alpha",
"workspace_catalog_sha256": "ee295f2352e2577a4052d980624415aec9871197d4fc9910a4c21c83a9179200"
},
@@ -502,15 +502,15 @@
"files": {
"Cargo.lock": {
"bytes": 94853,
- "git_blob": "eb2f815db496f5a7651fe698e71f6766c8dc5674",
+ "git_blob": "4eaa9a35cc43f407a1da15aef6b30a50ce6ae336",
"mode": "100644",
- "sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0"
+ "sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02"
},
"Cargo.toml": {
"bytes": 4442,
- "git_blob": "bee7a05c0fe55a2979f174a6bc839ddd0c5e5bf0",
+ "git_blob": "b76fa73c06a6178ff196fd733ace45a7ed5b337d",
"mode": "100644",
- "sha256": "e179e1251a94766787c8d76153c8c2f0fcab30ba2a29d369d02756f27b4b3983"
+ "sha256": "a598efa44c347ea8e07e9ba59ff78bb04f1ee272e86168b1a385767d0ebe5acd"
},
"Makefile": {
"bytes": 3934,
@@ -1384,9 +1384,9 @@
},
"radroots.lib.source-lock.v1.toml": {
"bytes": 482,
- "git_blob": "d8d25e5b4f516bad46fccb2bf560bfd9c858c177",
+ "git_blob": "afef222c863e3456d0cc55ecda3705db8f34339a",
"mode": "100644",
- "sha256": "6820983b4309ce49a37bac587eb90b28d5cdecb9ce7ad3aab51477322efe9533"
+ "sha256": "64c993dcde1de74fae4a02ca0c1e53e75cb90de20f081913ca50b3f136edcd99"
},
"rust-toolchain.toml": {
"bytes": 79,
@@ -1702,6 +1702,6 @@
}
},
"policy": "staged_inputs",
- "tree": "d2d70cf73831ad89f077bf5ff5158fa6bcf55638"
+ "tree": "57e99e1ced148e6e75bc0718272dad8faff1c366"
}
}
diff --git a/TeraFFI/source/aarch64-apple-ios-sim.json b/TeraFFI/source/aarch64-apple-ios-sim.json
@@ -186,36 +186,36 @@
"proc-macro2 v1.0.107|default,proc-macro (*)",
"quote v1.0.47|default,proc-macro",
"quote v1.0.47|default,proc-macro (*)",
- "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std",
- "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std (*)",
- "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,events,std",
- "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,events,std (*)",
- "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,nostr,sqlite,sync",
- "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,nostr,sqlite,sync (*)",
- "radroots_secrets v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde",
- "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde (*)",
- "radroots_storage_sqlite v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)| (*)",
- "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std",
- "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std (*)",
- "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)| (*)",
+ "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std",
+ "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std (*)",
+ "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,events,std",
+ "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,events,std (*)",
+ "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,nostr,sqlite,sync",
+ "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,nostr,sqlite,sync (*)",
+ "radroots_secrets v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde",
+ "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde (*)",
+ "radroots_storage_sqlite v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)| (*)",
+ "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std",
+ "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std (*)",
+ "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)| (*)",
"rand v0.8.7|alloc,getrandom,libc,rand_chacha,std,std_rng",
"rand v0.9.5|alloc,default,os_rng,small_rng,std,std_rng,thread_rng",
"rand_chacha v0.3.1|std",
@@ -381,15 +381,15 @@
"symbol_reader": "llvm-nm, compatible with GNU nm\nLLVM (http://llvm.org/):\n LLVM version 22.1.6-rust-1.97.1-stable\n Optimized build.",
"target": "aarch64-apple-ios-sim"
},
- "cargo_lock_sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0",
+ "cargo_lock_sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02",
"disposition": "local_staged_source_only",
"foundation": {
"architecture": "radroots.crates.release.v2",
- "lockfile_sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0",
+ "lockfile_sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02",
"repository": "https://github.com/radrootslabs/lib",
- "revision": "363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "revision": "d3332ff1c68245a232f093434ee35fe2a342ed38",
"schema": "radroots.lib.source-lock.v1",
- "source_archive_sha256": "9c9af522b74a2b342c0202cc919189d5234a4de2bc7bbb7c96b4e3c3696e5a6a",
+ "source_archive_sha256": "fc3cc82de74e0db7a640f8dfddb6eb0c8402b38cfebe14a2dbb61856561f3856",
"version": "0.1.0-alpha",
"workspace_catalog_sha256": "ee295f2352e2577a4052d980624415aec9871197d4fc9910a4c21c83a9179200"
},
@@ -498,15 +498,15 @@
"files": {
"Cargo.lock": {
"bytes": 94853,
- "git_blob": "eb2f815db496f5a7651fe698e71f6766c8dc5674",
+ "git_blob": "4eaa9a35cc43f407a1da15aef6b30a50ce6ae336",
"mode": "100644",
- "sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0"
+ "sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02"
},
"Cargo.toml": {
"bytes": 4442,
- "git_blob": "bee7a05c0fe55a2979f174a6bc839ddd0c5e5bf0",
+ "git_blob": "b76fa73c06a6178ff196fd733ace45a7ed5b337d",
"mode": "100644",
- "sha256": "e179e1251a94766787c8d76153c8c2f0fcab30ba2a29d369d02756f27b4b3983"
+ "sha256": "a598efa44c347ea8e07e9ba59ff78bb04f1ee272e86168b1a385767d0ebe5acd"
},
"Makefile": {
"bytes": 3934,
@@ -1380,9 +1380,9 @@
},
"radroots.lib.source-lock.v1.toml": {
"bytes": 482,
- "git_blob": "d8d25e5b4f516bad46fccb2bf560bfd9c858c177",
+ "git_blob": "afef222c863e3456d0cc55ecda3705db8f34339a",
"mode": "100644",
- "sha256": "6820983b4309ce49a37bac587eb90b28d5cdecb9ce7ad3aab51477322efe9533"
+ "sha256": "64c993dcde1de74fae4a02ca0c1e53e75cb90de20f081913ca50b3f136edcd99"
},
"rust-toolchain.toml": {
"bytes": 79,
@@ -1698,6 +1698,6 @@
}
},
"policy": "staged_inputs",
- "tree": "d2d70cf73831ad89f077bf5ff5158fa6bcf55638"
+ "tree": "57e99e1ced148e6e75bc0718272dad8faff1c366"
}
}
diff --git a/TeraFFI/source/aarch64-apple-ios.json b/TeraFFI/source/aarch64-apple-ios.json
@@ -186,36 +186,36 @@
"proc-macro2 v1.0.107|default,proc-macro (*)",
"quote v1.0.47|default,proc-macro",
"quote v1.0.47|default,proc-macro (*)",
- "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std",
- "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std (*)",
- "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,events,std",
- "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,events,std (*)",
- "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,nostr,sqlite,sync",
- "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|blossom,nostr,sqlite,sync (*)",
- "radroots_secrets v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde",
- "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde (*)",
- "radroots_storage_sqlite v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)| (*)",
- "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std",
- "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|json,serde,std (*)",
- "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std",
- "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|serde,std (*)",
- "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)|",
- "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be1)| (*)",
+ "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_blossom v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_core v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_event v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std",
+ "radroots_event_codec v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std (*)",
+ "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_identity v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,events,std",
+ "radroots_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,events,std (*)",
+ "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_protocol v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,nostr,sqlite,sync",
+ "radroots_sdk v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|blossom,nostr,sqlite,sync (*)",
+ "radroots_secrets v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_signing v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde",
+ "radroots_storage v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde (*)",
+ "radroots_storage_sqlite v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_sync v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)| (*)",
+ "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std",
+ "radroots_trade v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|json,serde,std (*)",
+ "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std",
+ "radroots_transport v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|serde,std (*)",
+ "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)|",
+ "radroots_transport_nostr v0.1.0-alpha (https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1)| (*)",
"rand v0.8.7|alloc,getrandom,libc,rand_chacha,std,std_rng",
"rand v0.9.5|alloc,default,os_rng,small_rng,std,std_rng,thread_rng",
"rand_chacha v0.3.1|std",
@@ -381,15 +381,15 @@
"symbol_reader": "llvm-nm, compatible with GNU nm\nLLVM (http://llvm.org/):\n LLVM version 22.1.6-rust-1.97.1-stable\n Optimized build.",
"target": "aarch64-apple-ios"
},
- "cargo_lock_sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0",
+ "cargo_lock_sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02",
"disposition": "local_staged_source_only",
"foundation": {
"architecture": "radroots.crates.release.v2",
- "lockfile_sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0",
+ "lockfile_sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02",
"repository": "https://github.com/radrootslabs/lib",
- "revision": "363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "revision": "d3332ff1c68245a232f093434ee35fe2a342ed38",
"schema": "radroots.lib.source-lock.v1",
- "source_archive_sha256": "9c9af522b74a2b342c0202cc919189d5234a4de2bc7bbb7c96b4e3c3696e5a6a",
+ "source_archive_sha256": "fc3cc82de74e0db7a640f8dfddb6eb0c8402b38cfebe14a2dbb61856561f3856",
"version": "0.1.0-alpha",
"workspace_catalog_sha256": "ee295f2352e2577a4052d980624415aec9871197d4fc9910a4c21c83a9179200"
},
@@ -498,15 +498,15 @@
"files": {
"Cargo.lock": {
"bytes": 94853,
- "git_blob": "eb2f815db496f5a7651fe698e71f6766c8dc5674",
+ "git_blob": "4eaa9a35cc43f407a1da15aef6b30a50ce6ae336",
"mode": "100644",
- "sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0"
+ "sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02"
},
"Cargo.toml": {
"bytes": 4442,
- "git_blob": "bee7a05c0fe55a2979f174a6bc839ddd0c5e5bf0",
+ "git_blob": "b76fa73c06a6178ff196fd733ace45a7ed5b337d",
"mode": "100644",
- "sha256": "e179e1251a94766787c8d76153c8c2f0fcab30ba2a29d369d02756f27b4b3983"
+ "sha256": "a598efa44c347ea8e07e9ba59ff78bb04f1ee272e86168b1a385767d0ebe5acd"
},
"Makefile": {
"bytes": 3934,
@@ -1380,9 +1380,9 @@
},
"radroots.lib.source-lock.v1.toml": {
"bytes": 482,
- "git_blob": "d8d25e5b4f516bad46fccb2bf560bfd9c858c177",
+ "git_blob": "afef222c863e3456d0cc55ecda3705db8f34339a",
"mode": "100644",
- "sha256": "6820983b4309ce49a37bac587eb90b28d5cdecb9ce7ad3aab51477322efe9533"
+ "sha256": "64c993dcde1de74fae4a02ca0c1e53e75cb90de20f081913ca50b3f136edcd99"
},
"rust-toolchain.toml": {
"bytes": 79,
@@ -1698,6 +1698,6 @@
}
},
"policy": "staged_inputs",
- "tree": "d2d70cf73831ad89f077bf5ff5158fa6bcf55638"
+ "tree": "57e99e1ced148e6e75bc0718272dad8faff1c366"
}
}
diff --git a/TeraTests/TeraComposerAutosaveTests.swift b/TeraTests/TeraComposerAutosaveTests.swift
@@ -234,6 +234,7 @@ actor ComposerTestStorage {
private var failure: Failure?
private(set) var requests: [TeraComposerSaveRequest] = []
private(set) var readCount = 0
+ private(set) var cancelledWrites = 0
let completed = ResourceTestGate()
nonisolated var port: TeraComposerPersistence {
@@ -263,6 +264,9 @@ actor ComposerTestStorage {
let failure = failure
self.failure = nil
await pause?.wait()
+ if Task.isCancelled {
+ cancelledWrites += 1
+ }
if failure == .beforeCommit {
throw TeraComposerAcknowledgment.unconfirmed
}
diff --git a/TeraTests/TeraComposerDurabilityBoundaryTests.swift b/TeraTests/TeraComposerDurabilityBoundaryTests.swift
@@ -0,0 +1,104 @@
+import Foundation
+@testable import TeraApp
+import XCTest
+
+@MainActor
+final class TeraComposerDurabilityBoundaryTests: XCTestCase {
+ func testTypedStorageAndProtectedDataFailuresKeepEditingAndNeverClaimSaved() async throws {
+ // Actual SQLite COMMIT/capacity/busy faults are qualified by the owning
+ // storage crate. This fixture checks their typed host presentation boundary.
+ let cases: [(String, TeraUserMessageKey)] = [
+ ("storage_space_insufficient", .storageFull),
+ ("database_busy", .secureStateUnavailable),
+ ("composer_storage_failed", .secureStateUnavailable),
+ ("protected_data_unavailable", .protectedDataUnavailable),
+ ]
+ for (code, message) in cases {
+ let backend = try TeraScopeBackend()
+ let client = try await TeraScopeFixtures.client(backend)
+ let store = TeraAddStore(runtimeClient: client)
+ store.configure(snapshot: TeraScopeFixtures.snapshot())
+ await store.start()
+ store.updateForm(\.content, "acknowledged baseline")
+ await store.save()
+ let baseline = try XCTUnwrap(store.savedComposer)
+ let failure = TeraRuntimeFailure.local(operation: "test.composer", code: code,
+ safeMessage: "Controlled unavailable storage.")
+ let pause = await backend.pause(.composer, failure: failure)
+ store.updateForm(\.content, "preserve this incomplete edit")
+ let save = Task { await store.save() }
+ await pause.entered.wait()
+ XCTAssertEqual(store.savedComposer, baseline)
+ XCTAssertNil(store.message)
+ await pause.resume.open()
+ await save.value
+ XCTAssertEqual(store.composerState, .failed, code)
+ XCTAssertEqual(store.lastFailureCode, code)
+ XCTAssertEqual(store.message, TeraUserMessages.text(message))
+ XCTAssertEqual(store.form.content, "preserve this incomplete edit")
+ XCTAssertEqual(store.savedComposer, baseline)
+ store.updateForm(\.content, "newest retained edit")
+ await store.save()
+ let retried = try XCTUnwrap(store.savedComposer)
+ XCTAssertEqual(retried.id, baseline.id)
+ XCTAssertEqual(retried.revision, baseline.revision + 1)
+ XCTAssertEqual(retried.form.content, "newest retained edit")
+ XCTAssertEqual(store.composerState, .saved)
+ XCTAssertEqual(store.message, "Draft saved on this device.")
+ store.stop()
+ _ = try await client.stop()
+ }
+ }
+
+ func testUnavailableProtectedDataRejectsProductionStartupAndReopensBaselineAfterUnlock() async throws {
+ let fixture = try MediaOwnershipFixture()
+ defer { fixture.remove() }
+ let signer = ComposerForbiddenSigner()
+ let client = TeraRuntimeClient.production()
+ let available = configuration(fixture, signer: signer, protectedData: .available)
+ let snapshot = try await client.start(configuration: available)
+ let store = TeraAddStore(runtimeClient: client)
+ store.configure(snapshot: snapshot)
+ await store.start()
+ store.updateForm(\.content, "committed before protected data became unavailable")
+ await store.save()
+ let baseline = try XCTUnwrap(store.savedComposer)
+ store.stop()
+ _ = try await client.stop()
+ do {
+ _ = try await client.start(configuration: configuration(fixture, signer: signer, protectedData: .unavailable))
+ XCTFail("Unavailable protected data must deny the actual runtime startup.")
+ } catch let TeraRuntimeClientError.startup(failure) {
+ XCTAssertEqual(failure.code, "protected_data_unavailable")
+ XCTAssertEqual(TeraUserMessages.key(for: failure, fallback: .startupFailed), .protectedDataUnavailable)
+ }
+ do {
+ _ = try await client.saveComposer(request: TeraComposerSaveRequest(
+ scope: baseline.scope, id: baseline.id, expectedRevision: baseline.revision,
+ editSequence: baseline.editSequence + 1, form: baseline.form
+ ))
+ XCTFail("A stopped runtime must never acknowledge a write.")
+ } catch { XCTAssertEqual(error as? TeraRuntimeClientError, .notRunning) }
+ _ = try await client.start(configuration: available)
+ let reopened = try await client.loadComposer(scope: baseline.scope, id: baseline.id)
+ XCTAssertEqual(reopened, baseline)
+ _ = try await client.stop()
+ let signingRequests = await signer.requests
+ XCTAssertEqual(signingRequests, 0)
+ }
+
+ private func configuration(
+ _ fixture: MediaOwnershipFixture, signer: ComposerForbiddenSigner, protectedData: TeraProtectedDataState
+ ) -> TeraRuntimeLaunchConfiguration {
+ TeraRuntimeLaunchConfiguration(
+ applicationSupportDirectory: fixture.root.path,
+ publicKeyHex: "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
+ sourceGenerationHex: String(repeating: "04", count: 32),
+ sourceGenerationCreatedAtUnixMilliseconds: 1_800_000_000_000,
+ protectedData: protectedData, networkProfile: .publicNetwork,
+ writableRelays: ["wss://relay.example"], blossom: nil,
+ app: TeraRuntimeAppMetadata(bundleIdentifier: "test.composer-durability", version: "1", buildNumber: "1", buildSHA: nil),
+ signerGeneration: "composer-durability", signer: signer, adoptBootstrapSettings: false
+ )
+ }
+}
diff --git a/TeraTests/TeraComposerSaveLatencyTests.swift b/TeraTests/TeraComposerSaveLatencyTests.swift
@@ -0,0 +1,89 @@
+import Foundation
+@testable import TeraApp
+import XCTest
+
+@MainActor
+final class TeraComposerSaveLatencyTests: XCTestCase {
+ func testTextOnlyExplicitSaveMeasuresActualDurableReceiptsAndReopen() async throws {
+ let fixture = try MediaOwnershipFixture()
+ defer { fixture.remove() }
+ let signer = ComposerForbiddenSigner()
+ let configuration = configuration(fixture, signer: signer)
+ let client = TeraRuntimeClient.production()
+ let snapshot = try await client.start(configuration: configuration)
+ let store = TeraAddStore(runtimeClient: client)
+ store.configure(snapshot: snapshot)
+ await store.start()
+ store.updateForm(\.content, "warm text-only save")
+ await store.save()
+ var previous = try XCTUnwrap(store.savedComposer)
+ var samples: [Double] = []
+ let clock = ContinuousClock()
+ for index in 0 ..< 24 {
+ let content = "bounded text-only sample \(index)"
+ store.updateForm(\.content, content)
+ let started = clock.now
+ await store.save()
+ let duration = started.duration(to: clock.now).components
+ samples.append(Double(duration.seconds) * 1000 + Double(duration.attoseconds) / 1e15)
+ let saved = try XCTUnwrap(store.savedComposer)
+ XCTAssertEqual(store.composerState, .saved)
+ XCTAssertEqual(saved.form.content, content)
+ XCTAssertTrue(saved.form.media.isEmpty)
+ XCTAssertEqual(saved.id, previous.id)
+ XCTAssertEqual(saved.revision, previous.revision + 1)
+ previous = saved
+ }
+ store.stop()
+ _ = try await client.stop()
+ _ = try await client.start(configuration: configuration)
+ let reopened = try await client.loadComposer(scope: previous.scope, id: previous.id)
+ XCTAssertEqual(reopened, previous)
+ _ = try await client.stop()
+ let signingRequests = await signer.requests
+ XCTAssertEqual(signingRequests, 0)
+ try record(samples)
+ }
+
+ private func record(_ samples: [Double]) throws {
+ XCTAssertEqual(samples.count, 24)
+ XCTAssertTrue(samples.allSatisfy { $0.isFinite && $0 >= 0 })
+ let ordered = samples.sorted()
+ #if targetEnvironment(simulator)
+ let platform = "ios_simulator"
+ #else
+ let platform = "ios_physical_device"
+ #endif
+ let value: [String: Any] = try [
+ "schema": "tera.explicit-save-latency.v1",
+ "platform": platform,
+ "os": ProcessInfo.processInfo.operatingSystemVersionString,
+ "sample_count": samples.count,
+ "warmup_count": 1,
+ "samples_ms": samples,
+ "p50_ms": ordered[ordered.count / 2],
+ "p95_ms": ordered[Int(ceil(Double(ordered.count) * 0.95)) - 1],
+ "max_ms": XCTUnwrap(ordered.last),
+ "measurement": "Explicit Add Save through production FFI to its acknowledged receipt; final revision reopened.",
+ ]
+ let data = try JSONSerialization.data(withJSONObject: value, options: [.sortedKeys])
+ let attachment = XCTAttachment(data: data, uniformTypeIdentifier: "public.json")
+ attachment.name = "tera-explicit-save-latency.json"
+ attachment.lifetime = .keepAlways
+ add(attachment)
+ try print("TERA_EXPLICIT_SAVE_LATENCY \(XCTUnwrap(String(data: data, encoding: .utf8)))")
+ }
+
+ private func configuration(_ fixture: MediaOwnershipFixture, signer: ComposerForbiddenSigner) -> TeraRuntimeLaunchConfiguration {
+ TeraRuntimeLaunchConfiguration(
+ applicationSupportDirectory: fixture.root.path,
+ publicKeyHex: "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
+ sourceGenerationHex: String(repeating: "04", count: 32),
+ sourceGenerationCreatedAtUnixMilliseconds: 1_800_000_000_000,
+ protectedData: .available, networkProfile: .publicNetwork,
+ writableRelays: ["wss://relay.example"], blossom: nil,
+ app: TeraRuntimeAppMetadata(bundleIdentifier: "test.composer-latency", version: "1", buildNumber: "1", buildSHA: nil),
+ signerGeneration: "composer-latency", signer: signer, adoptBootstrapSettings: false
+ )
+ }
+}
diff --git a/TeraTests/TeraComposerSaveSchedulingTests.swift b/TeraTests/TeraComposerSaveSchedulingTests.swift
@@ -0,0 +1,229 @@
+import Foundation
+@testable import TeraApp
+import XCTest
+
+@MainActor
+final class TeraComposerSaveSchedulingTests: XCTestCase {
+ private let scope = TeraComposerScope(authorPublicKey: String(repeating: "a", count: 64), localNetworkID: "default")
+
+ func testOrdinaryEditsCoalesceUntilDelayCompletes() async {
+ let storage = ComposerTestStorage()
+ let delay = ComposerCoalescingGate()
+ let composer = make(storage, delay: delay)
+ composer.change(form("first"))
+ await delay.entered.wait()
+ for index in 1 ... 1000 {
+ composer.change(form("edit \(index)"))
+ }
+ let before = await storage.requests
+ XCTAssertTrue(before.isEmpty)
+ XCTAssertTrue(composer.isDirty)
+ await delay.open()
+ await TeraScopeFixtures.eventually { composer.state == .saved }
+ let writes = await storage.requests
+ XCTAssertEqual(writes.count, 1)
+ XCTAssertEqual(writes.first?.form.content, "edit 1000")
+ XCTAssertEqual(writes.first?.editSequence, 1001)
+ }
+
+ func testExplicitSaveCancelsOnlyPendingDelayAndWaitsForReceipt() async throws {
+ let storage = ComposerTestStorage()
+ let write = await storage.pauseNext()
+ let delay = ComposerCoalescingGate()
+ let composer = make(storage, delay: delay)
+ composer.change(form("pending"))
+ await delay.entered.wait()
+ let save = Task { try await composer.save(form("newest")) }
+ await write.entered.wait()
+ let cancelled = await delay.cancelled
+ XCTAssertTrue(cancelled)
+ XCTAssertNil(composer.acknowledged)
+ XCTAssertTrue(composer.isDirty)
+ await write.resume.open()
+ let receipt = try await save.value
+ XCTAssertEqual(receipt.form.content, "newest")
+ XCTAssertEqual(receipt.revision, 1)
+ let writes = await storage.requests
+ XCTAssertEqual(writes.count, 1)
+ }
+
+ func testExplicitSaveDuringActiveWriteDrainsNewestWithoutCancellingWriter() async throws {
+ let storage = ComposerTestStorage()
+ let write = await storage.pauseNext()
+ let delay = ComposerCoalescingGate()
+ let composer = make(storage, delay: delay)
+ composer.change(form("first"))
+ await delay.entered.wait()
+ await delay.open()
+ await write.entered.wait()
+ let next = await storage.pauseNext()
+ let save = Task { try await composer.save(form("second")) }
+ await TeraScopeFixtures.eventually { composer.editSequence == 2 }
+ await write.resume.open()
+ await next.entered.wait()
+ XCTAssertEqual(composer.acknowledged?.form.content, "first")
+ XCTAssertTrue(composer.isDirty)
+ await next.resume.open()
+ let receipt = try await save.value
+ XCTAssertEqual(receipt.form.content, "second")
+ XCTAssertEqual(receipt.revision, 2)
+ let cancelledWrites = await storage.cancelledWrites
+ let waits = await delay.waitCount
+ XCTAssertEqual(cancelledWrites, 0)
+ XCTAssertEqual(waits, 1)
+ }
+
+ func testNoOpExplicitSaveDoesNotDisableNextAutosaveDelay() async throws {
+ let storage = ComposerTestStorage()
+ let delay = ComposerCoalescingGate()
+ let composer = make(storage, delay: delay)
+ let first = try await composer.save(form("saved"))
+ let same = try await composer.save(form("saved"))
+ XCTAssertEqual(first, same)
+ composer.change(form("later edit"))
+ await delay.entered.wait()
+ let writes = await storage.requests
+ XCTAssertEqual(writes.count, 1)
+ XCTAssertEqual(composer.acknowledged, first)
+ await delay.open()
+ await TeraScopeFixtures.eventually { composer.state == .saved }
+ XCTAssertEqual(composer.acknowledged?.form.content, "later edit")
+ }
+
+ func testStopCancelsDelayWithoutWritingAndResumeExplicitlySavesPendingEdit() async throws {
+ let storage = ComposerTestStorage()
+ let delay = ComposerCoalescingGate()
+ let composer = make(storage, delay: delay)
+ composer.change(form("pending"))
+ await delay.entered.wait()
+ composer.stop()
+ XCTAssertEqual(composer.state, .unsaved)
+ let writes = await storage.requests
+ XCTAssertTrue(writes.isEmpty)
+ XCTAssertNil(composer.acknowledged)
+ composer.resume()
+ let receipt = try await composer.save(form("pending"))
+ XCTAssertEqual(receipt.form.content, "pending")
+ XCTAssertEqual(receipt.revision, 1)
+ }
+
+ func testReplacingScopeDuringDelaySavesOnlyTheNewScope() async throws {
+ let storage = ComposerTestStorage()
+ let delay = ComposerCoalescingGate()
+ let composer = make(storage, delay: delay)
+ composer.change(form("old scope"))
+ await delay.entered.wait()
+ let next = TeraComposerScope(authorPublicKey: scope.authorPublicKey, localNetworkID: "next")
+ composer.reset(scope: next)
+ let receipt = try await composer.save(form("new scope"))
+ XCTAssertEqual(receipt.scope, next)
+ XCTAssertEqual(receipt.form.content, "new scope")
+ let writes = await storage.requests
+ XCTAssertEqual(writes.count, 1)
+ XCTAssertEqual(writes.first?.scope, next)
+ }
+
+ func testExplicitFlushDoesNotHideANonCancellationFailureAtDelayBoundary() async {
+ let storage = ComposerTestStorage()
+ let pause = ResourceTestPause()
+ let composer = TeraComposerAutosave(persistence: storage.port, delay: {
+ await pause.wait()
+ throw TeraRuntimeFailure.local(operation: "test.delay", code: "protected_data_unavailable",
+ safeMessage: "Protected data unavailable.")
+ })
+ composer.reset(scope: scope)
+ composer.change(form("pending"))
+ await pause.entered.wait()
+ let save = Task { try await composer.save(form("newest")) }
+ await TeraScopeFixtures.eventually { composer.editSequence == 2 }
+ await pause.resume.open()
+ do {
+ _ = try await save.value
+ XCTFail("Only the coalescing cancellation may be bypassed.")
+ } catch {
+ XCTAssertEqual(TeraAddPresentation.failure(for: error)?.code, "protected_data_unavailable")
+ }
+ XCTAssertEqual(composer.state, .failed)
+ XCTAssertTrue(composer.isDirty)
+ XCTAssertNil(composer.acknowledged)
+ let writes = await storage.requests
+ XCTAssertTrue(writes.isEmpty)
+ }
+
+ func testSaveKeepsFlushingWhenAcknowledgmentStartsASuccessorWorker() async throws {
+ let storage = ComposerTestStorage()
+ let delay = ComposerCoalescingGate()
+ let composer = make(storage, delay: delay)
+ var addedSuccessor = false
+ composer.stateChanged = { state in
+ guard state == .saved, !addedSuccessor else { return }
+ addedSuccessor = true
+ composer.change(self.form("successor edit"))
+ }
+ defer { composer.stateChanged = { _ in } }
+ let completed = expectation(description: "Explicit Save drains the successor without batching")
+ let save = Task {
+ defer { completed.fulfill() }
+ return try await composer.save(form("first edit"))
+ }
+ await fulfillment(of: [completed], timeout: 2)
+ // Release even on a failed expectation so a regression cannot strand work.
+ await delay.open()
+ let receipt = try await save.value
+ XCTAssertTrue(addedSuccessor)
+ XCTAssertEqual(receipt.form.content, "successor edit")
+ XCTAssertEqual(receipt.revision, 2)
+ XCTAssertEqual(composer.state, .saved)
+ XCTAssertFalse(composer.isDirty)
+ let writes = await storage.requests
+ let cancelledWrites = await storage.cancelledWrites
+ XCTAssertEqual(writes.count, 2)
+ XCTAssertEqual(writes.first?.id, writes.last?.id)
+ XCTAssertEqual(cancelledWrites, 0)
+ }
+
+ private func make(_ storage: ComposerTestStorage, delay: ComposerCoalescingGate) -> TeraComposerAutosave {
+ let composer = TeraComposerAutosave(persistence: storage.port, delay: { try await delay.wait() })
+ composer.reset(scope: scope)
+ return composer
+ }
+
+ private func form(_ content: String) -> TeraComposerForm {
+ var form = TeraComposerForm(commandType: .createUpdate)
+ form.content = content
+ return form
+ }
+}
+
+actor ComposerCoalescingGate {
+ let entered = ResourceTestGate()
+ private var continuation: CheckedContinuation<Void, Error>?
+ private var finished = false
+ private(set) var cancelled = false
+ private(set) var waitCount = 0
+
+ func wait() async throws {
+ waitCount += 1
+ await entered.open()
+ try await withTaskCancellationHandler {
+ try Task.checkCancellation()
+ guard !finished else { return }
+ try await withCheckedThrowingContinuation { continuation = $0 }
+ } onCancel: {
+ Task { await self.cancel() }
+ }
+ }
+
+ func open() {
+ finished = true
+ continuation?.resume()
+ continuation = nil
+ }
+
+ private func cancel() {
+ cancelled = true
+ finished = true
+ continuation?.resume(throwing: CancellationError())
+ continuation = nil
+ }
+}
diff --git a/project.yml b/project.yml
@@ -48,6 +48,9 @@ targets:
- path: TeraTests/TeraRuntimeClientTests.swift
- path: TeraTests/TeraComposerPersistenceFFITests.swift
- path: TeraTests/TeraComposerAutosaveTests.swift
+ - path: TeraTests/TeraComposerSaveLatencyTests.swift
+ - path: TeraTests/TeraComposerSaveSchedulingTests.swift
+ - path: TeraTests/TeraComposerDurabilityBoundaryTests.swift
- path: TeraTests/TeraDraftRecoveryTests.swift
- path: TeraTests/TeraEditingProtectionTests.swift
- path: TeraTests/TeraEditingReplacementTests.swift
diff --git a/radroots.lib.source-lock.v1.toml b/radroots.lib.source-lock.v1.toml
@@ -1,8 +1,8 @@
schema = "radroots.lib.source-lock.v1"
repository = "https://github.com/radrootslabs/lib"
-revision = "363b9be18831be2fd6ef505d6154fb878ed8efd7"
+revision = "d3332ff1c68245a232f093434ee35fe2a342ed38"
architecture = "radroots.crates.release.v2"
workspace_catalog_sha256 = "ee295f2352e2577a4052d980624415aec9871197d4fc9910a4c21c83a9179200"
version = "0.1.0-alpha"
-source_archive_sha256 = "9c9af522b74a2b342c0202cc919189d5234a4de2bc7bbb7c96b4e3c3696e5a6a"
-lockfile_sha256 = "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0"
+source_archive_sha256 = "fc3cc82de74e0db7a640f8dfddb6eb0c8402b38cfebe14a2dbb61856561f3856"
+lockfile_sha256 = "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02"
diff --git a/release/provenance.json b/release/provenance.json
@@ -2,11 +2,11 @@
"artifacts": {
"app_api_sha256": "020924097c0d7efc33128cb8fd3d3b2026d95f57c44da71880e585aff80f070b",
"ffi_api_sha256": "472b6b7d854781438ff5f8dc526d22626996e3196bcb82697d195db83ec9802d",
- "ffi_provenance_sha256": "3ec93a119b64fa97e6c6e293c34a7544e5286ee6a3cce24b90249cdf6f832101",
+ "ffi_provenance_sha256": "d56aff8833d3125a11f91c5ab2a043b7beb95b164f28dc218563601365693499",
"info_plist_sha256": "15ef08b1cdd1096cfb9eeaf5be5bf8f814807a7ca9350bbbb47860fa72ec13ef",
"privacy_manifest_sha256": "a331d51864743ebe4e00dd22360b4a538b6b3ac26a6b3eb54094e60a36959a12",
- "sbom_sha256": "61e3d99a2c7f051a91d6a38b3b1f7974fb4c56da3a1c9758f5ad06fc66f1d856",
- "xcode_project_sha256": "7ad75c2109f739287070d67bb6c2e331e25f2479d9f0aaab372321e9f8460e1f"
+ "sbom_sha256": "374a98323bf66c55bd2f3ec28027d3068e8dccb4eeae1dbd070f0ac95fec9510",
+ "xcode_project_sha256": "938e68ba32d14c9bd8f43c5049709881420d15699e1bb1ae4126cf1dca8fff0c"
},
"disposition": "unsigned",
"platforms": [
@@ -17,12 +17,12 @@
"repository": "https://github.com/radrootslabs/tera",
"schema": "tera.release-provenance.v1",
"source": {
- "cargo_lock_sha256": "e191ca1e3e73c6c1414169f3ae4ef8b6c2140c2598c10b09109d88c4260eb8d0",
- "consumer_source_lock_sha256": "6820983b4309ce49a37bac587eb90b28d5cdecb9ce7ad3aab51477322efe9533",
- "lib_revision": "363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo_lock_sha256": "62a48bf3f3989c1fa0737a76a238f58104c55cf42711176ff361a5acb305fa02",
+ "consumer_source_lock_sha256": "64c993dcde1de74fae4a02ca0c1e53e75cb90de20f081913ca50b3f136edcd99",
+ "lib_revision": "d3332ff1c68245a232f093434ee35fe2a342ed38",
"source_date_epoch": 1787871027,
"swift_package_lock_sha256": "94ae067a374726cdaf6b4ca0a5e44663c57fcdc5334060c5ffef5e79cfbf04c0",
- "tera_ffi_source_tree": "d2d70cf73831ad89f077bf5ff5158fa6bcf55638",
+ "tera_ffi_source_tree": "57e99e1ced148e6e75bc0718272dad8faff1c366",
"xcode_package_lock_sha256": "c7f41934ea25f7a287bdc4f3a6ecabbf09a3a0bdd0f5a3e58183f355ca814096"
},
"version": "0.1.0-alpha"
diff --git a/release/sbom.cdx.json b/release/sbom.cdx.json
@@ -4034,7 +4034,7 @@
"version": "6.0.0"
},
{
- "bom-ref": "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4048,14 +4048,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4069,14 +4069,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4090,14 +4090,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4111,14 +4111,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4132,14 +4132,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4153,14 +4153,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4174,14 +4174,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_sdk@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_sdk@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4195,14 +4195,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_secrets@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_secrets@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4216,14 +4216,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4237,14 +4237,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4258,14 +4258,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_storage_sqlite@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_storage_sqlite@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4279,14 +4279,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_sync@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_sync@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4300,14 +4300,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4321,14 +4321,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4342,14 +4342,14 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
"version": "0.1.0-alpha"
},
{
- "bom-ref": "cargo:radroots_transport_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "bom-ref": "cargo:radroots_transport_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"licenses": [
{
"expression": "MIT OR Apache-2.0"
@@ -4363,7 +4363,7 @@
},
{
"name": "radroots.package.source",
- "value": "git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "value": "git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
}
],
"type": "library",
@@ -9273,45 +9273,45 @@
"cargo:unicode-general-category@1.1.0?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:url@2.5.8?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
"cargo:rust_decimal@1.42.1?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
"cargo:hex@0.4.3?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:jiff-tzdb@0.1.8?source=registry+https://github.com/rust-lang/crates.io-index",
- "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:unicode-general-category@1.1.0?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:url@2.5.8?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
"cargo:hex@0.4.3?source=registry+https://github.com/rust-lang/crates.io-index",
- "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:secp256k1@0.29.1?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
@@ -9319,51 +9319,51 @@
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:thiserror@2.0.19?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
"cargo:base64@0.22.1?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:nostr@0.44.8?source=registry+https://github.com/rust-lang/crates.io-index",
- "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:thiserror@2.0.19?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
- "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_storage_sqlite@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_sync@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_transport_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_storage_sqlite@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_sync@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_transport_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:reqwest@0.12.28?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:tokio@1.53.1?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:uuid@1.24.0?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_sdk@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_sdk@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
@@ -9372,81 +9372,81 @@
"cargo:subtle@2.6.1?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:zeroize@1.9.0?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_secrets@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_secrets@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
"cargo:hex@0.4.3?source=registry+https://github.com/rust-lang/crates.io-index",
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
"cargo:fs2@0.4.3?source=registry+https://github.com/rust-lang/crates.io-index",
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_secrets@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_secrets@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sqlx@0.9.0?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_storage_sqlite@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_storage_sqlite@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_sync@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_sync@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
"cargo:hex@0.4.3?source=registry+https://github.com/rust-lang/crates.io-index",
- "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_core@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_trade@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
@@ -9454,17 +9454,17 @@
"cargo:futures@0.3.33?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:nostr-relay-pool@0.44.3?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:nostr-sdk@0.44.1?source=registry+https://github.com/rust-lang/crates.io-index",
- "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:tokio-tungstenite@0.26.2?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:tokio@1.53.1?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:url@2.5.8?source=registry+https://github.com/rust-lang/crates.io-index"
],
- "ref": "cargo:radroots_transport_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7"
+ "ref": "cargo:radroots_transport_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38"
},
{
"dependsOn": [
@@ -9959,18 +9959,18 @@
"cargo:jiff-tzdb@0.1.8?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:jiff@0.2.35?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:nostr@0.44.8?source=registry+https://github.com/rust-lang/crates.io-index",
- "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_sdk@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_sync@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_transport_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event_codec@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_identity@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_protocol@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_sdk@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_sync@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_transport@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_transport_nostr@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:serde@1.0.229?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:sha2@0.10.9?source=registry+https://github.com/rust-lang/crates.io-index",
@@ -9991,11 +9991,11 @@
"cargo:nostr-relay-builder@0.44.0?source=git+https://github.com/rust-nostr/nostr.git?rev=5bba5163eb77107f82c4a8262cf29d7f33a73219#5bba5163eb77107f82c4a8262cf29d7f33a73219",
"cargo:nostr-sdk@0.44.0?source=git+https://github.com/rust-nostr/nostr.git?rev=5bba5163eb77107f82c4a8262cf29d7f33a73219#5bba5163eb77107f82c4a8262cf29d7f33a73219",
"cargo:nostr@0.44.1?source=git+https://github.com/rust-nostr/nostr.git?rev=5bba5163eb77107f82c4a8262cf29d7f33a73219#5bba5163eb77107f82c4a8262cf29d7f33a73219",
- "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_sdk@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
- "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=363b9be18831be2fd6ef505d6154fb878ed8efd7#363b9be18831be2fd6ef505d6154fb878ed8efd7",
+ "cargo:radroots_blossom@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_event@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_sdk@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_signing@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
+ "cargo:radroots_storage@0.1.0-alpha?source=git+https://github.com/radrootslabs/lib?rev=d3332ff1c68245a232f093434ee35fe2a342ed38#d3332ff1c68245a232f093434ee35fe2a342ed38",
"cargo:rustix@1.1.4?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:secp256k1@0.29.1?source=registry+https://github.com/rust-lang/crates.io-index",
"cargo:serde_json@1.0.151?source=registry+https://github.com/rust-lang/crates.io-index",