commit ffdbb255870ae898d135380ea1cc7327f15113a3
parent ec2ff203594277b698f630bb5ae70e4004086461
Author: triesap <tyson@radroots.org>
Date: Fri, 31 Jul 2026 19:58:48 +0000
deps: align the prepublication release cohort
- Pin the workspace and toolchain to Rust 1.97.1.
- Align sibling Radroots dependencies to 0.1.0-alpha.
- Add local registry patches for coordinated sibling checkouts.
- Guard dependency and patch cohorts with source tests.
Diffstat:
8 files changed, 471 insertions(+), 87 deletions(-)
diff --git a/.cargo/config.toml b/.cargo/config.toml
@@ -0,0 +1,25 @@
+# Migration-only local development overrides. The SDK retains registry-only
+# production manifests; these patches allow a coordinated sibling checkout to
+# resolve the canonical pre-publication Radroots cohort.
+[patch.crates-io]
+radroots_blossom = { path = "../lib/crates/blossom" }
+radroots_core = { path = "../lib/crates/core" }
+radroots_event_store = { path = "../lib/crates/event_store" }
+radroots_event = { path = "../lib/crates/event" }
+radroots_event_codec = { path = "../lib/crates/event_codec" }
+radroots_geocoder = { path = "../lib/crates/geocoder" }
+radroots_identity = { path = "../lib/crates/identity" }
+radroots_nostr = { path = "../lib/crates/nostr" }
+radroots_nostr_connect = { path = "../lib/crates/nostr_connect" }
+radroots_nostr_signer = { path = "../lib/crates/nostr_signer" }
+radroots_outbox = { path = "../lib/crates/outbox" }
+radroots_protocol = { path = "../lib/crates/protocol" }
+radroots_protected_store = { path = "../lib/crates/protected_store" }
+radroots_secret_vault = { path = "../lib/crates/secret_vault" }
+radroots_signing = { path = "../lib/crates/signing" }
+radroots_transport = { path = "../lib/crates/transport" }
+radroots_transport_nostr = { path = "../lib/crates/transport_nostr" }
+radroots_transport_reticulum = { path = "../lib/crates/transport_reticulum" }
+radroots_runtime_paths = { path = "../lib/crates/runtime_paths" }
+radroots_sql_core = { path = "../lib/crates/sql_core" }
+radroots_trade = { path = "../lib/crates/trade" }
diff --git a/AGENTS.md b/AGENTS.md
@@ -32,6 +32,7 @@ Before making substantial changes:
- Run validation from the repository root.
- Prefer the narrowest relevant validation first.
- Use documented commands before inventing new ones.
+- `.github/**` and capsule-local CI workflows are forbidden; keep validation forge-agnostic, and place any required monorepo orchestration exclusively under the parent monorepo's root `.act/**` authority.
- Current canonical commands are:
- `cargo metadata --format-version 1 --no-deps`
- `cargo check -p radroots_studio_app`
@@ -48,7 +49,7 @@ Before making substantial changes:
## 7. Rust engineering rules
-- Use Rust `1.92.0`, edition `2024`, and safe Rust only.
+- Use Rust `1.97.1`, edition `2024`, and safe Rust only.
- Keep state, data flow, and side effects explicit.
- Avoid hidden panics in non-test code.
- Keep code readable and direct.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
@@ -13,8 +13,8 @@ Keep the filetree small and direct until a larger application boundary is justif
Install the pinned Rust toolchain:
```bash
-rustup toolchain install 1.97.0
-rustup override set 1.97.0
+rustup toolchain install 1.97.1
+rustup override set 1.97.1
```
Confirm your environment:
@@ -28,6 +28,12 @@ rustc --version
Run these commands from the repository root.
+Before the initial Radroots crate cohort is published, the checked-in Cargo
+configuration resolves the SDK's registry dependencies from sibling `lib` and
+`sdk` checkouts. Keep all three repositories adjacent in a coordinated source
+checkout. Exact `=0.1.0-alpha` requirements remain enforced; the local patches
+change only dependency source selection.
+
```bash
cargo metadata --format-version 1 --no-deps
cargo check -p radroots_studio_app
diff --git a/Cargo.lock b/Cargo.lock
@@ -557,6 +557,12 @@ dependencies = [
]
[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
name = "base62"
version = "2.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1393,6 +1399,12 @@ dependencies = [
]
[[package]]
+name = "critical-section"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
+
+[[package]]
name = "crossbeam-channel"
version = "0.5.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1442,6 +1454,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
[[package]]
+name = "crypto-bigint"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
name = "crypto-common"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1727,6 +1751,23 @@ dependencies = [
]
[[package]]
+name = "elliptic-curve"
+version = "0.13.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "ff",
+ "generic-array",
+ "group",
+ "rand_core 0.6.4",
+ "sec1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
name = "embed-resource"
version = "3.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1756,6 +1797,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
[[package]]
+name = "enum-as-inner"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
+dependencies = [
+ "heck 0.5.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
name = "enum-iterator"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1949,6 +2002,16 @@ dependencies = [
]
[[package]]
+name = "ff"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
+dependencies = [
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
name = "fiat-crypto"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2307,6 +2370,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
+ "zeroize",
]
[[package]]
@@ -2781,6 +2845,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12101ecc8225ea6d675bc70263074eab6169079621c2186fe0c66590b2df9681"
[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
name = "h2"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2905,6 +2980,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
[[package]]
+name = "hickory-proto"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna",
+ "ipnet",
+ "once_cell",
+ "rand 0.9.4",
+ "ring",
+ "thiserror 2.0.18",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "hickory-resolver"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "hickory-proto",
+ "ipconfig",
+ "moka",
+ "once_cell",
+ "parking_lot",
+ "rand 0.9.4",
+ "resolv-conf",
+ "smallvec",
+ "thiserror 2.0.18",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
name = "hidden-trait"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3347,6 +3468,19 @@ dependencies = [
]
[[package]]
+name = "ipconfig"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222"
+dependencies = [
+ "socket2",
+ "widestring",
+ "windows-registry 0.6.1",
+ "windows-result 0.4.1",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
name = "ipnet"
version = "2.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3444,6 +3578,16 @@ dependencies = [
]
[[package]]
+name = "k256"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b"
+dependencies = [
+ "cfg-if",
+ "elliptic-curve",
+]
+
+[[package]]
name = "khronos-egl"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3964,6 +4108,23 @@ dependencies = [
]
[[package]]
+name = "moka"
+version = "0.12.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "equivalent",
+ "parking_lot",
+ "portable-atomic",
+ "smallvec",
+ "tagptr",
+ "uuid",
+]
+
+[[package]]
name = "moxcms"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4479,6 +4640,10 @@ name = "once_cell"
version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+dependencies = [
+ "critical-section",
+ "portable-atomic",
+]
[[package]]
name = "oo7"
@@ -4867,6 +5032,12 @@ dependencies = [
]
[[package]]
+name = "portable-atomic"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3"
+
+[[package]]
name = "postage"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5115,15 +5286,15 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
name = "radroots_authority"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"radroots_event",
- "radroots_nostr",
+ "radroots_identity",
]
[[package]]
name = "radroots_blossom"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"mediatype",
"serde",
@@ -5134,22 +5305,22 @@ dependencies = [
[[package]]
name = "radroots_core"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"rust_decimal",
- "rust_decimal_macros",
"serde",
]
[[package]]
name = "radroots_event"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"hex",
"jiff-tzdb",
"radroots_blossom",
"radroots_core",
- "secp256k1",
+ "radroots_identity",
+ "radroots_protocol",
"serde",
"serde_json",
"sha2",
@@ -5159,23 +5330,28 @@ dependencies = [
[[package]]
name = "radroots_event_codec"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
- "nostr",
"radroots_blossom",
"radroots_core",
"radroots_event",
+ "radroots_identity",
+ "radroots_protocol",
+ "secp256k1",
"serde",
"serde_json",
]
[[package]]
name = "radroots_event_store"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
+ "getrandom 0.2.17",
"hex",
+ "radroots_blossom",
"radroots_event",
- "radroots_nostr",
+ "radroots_event_codec",
+ "radroots_identity",
"radroots_transport",
"serde",
"serde_json",
@@ -5186,7 +5362,7 @@ dependencies = [
[[package]]
name = "radroots_geocoder"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"futures-executor",
"hex",
@@ -5197,27 +5373,22 @@ dependencies = [
"sqlx",
"tempfile",
"thiserror 1.0.69",
+ "tokio",
"url",
]
[[package]]
name = "radroots_identity"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
- "nostr",
- "radroots_protected_store",
- "radroots_runtime",
- "radroots_runtime_paths",
- "radroots_secret_vault",
+ "k256",
"serde",
- "serde_json",
- "thiserror 1.0.69",
- "tracing",
+ "thiserror 2.0.18",
]
[[package]]
name = "radroots_log"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"chrono",
"serde_json",
@@ -5229,13 +5400,13 @@ dependencies = [
[[package]]
name = "radroots_nostr"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"nostr",
- "nostr-sdk",
"radroots_event",
"radroots_event_codec",
"radroots_identity",
+ "radroots_signing",
"serde",
"serde_json",
"thiserror 1.0.69",
@@ -5243,8 +5414,9 @@ dependencies = [
[[package]]
name = "radroots_nostr_accounts"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
+ "nostr",
"radroots_identity",
"radroots_nostr_signer",
"radroots_protected_store",
@@ -5258,9 +5430,13 @@ dependencies = [
[[package]]
name = "radroots_nostr_connect"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"nostr",
+ "radroots_event",
+ "radroots_identity",
+ "radroots_nostr",
+ "radroots_protocol",
"serde",
"serde_json",
"thiserror 1.0.69",
@@ -5269,7 +5445,7 @@ dependencies = [
[[package]]
name = "radroots_nostr_signer"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"hex",
"nostr",
@@ -5287,11 +5463,12 @@ dependencies = [
[[package]]
name = "radroots_outbox"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"hex",
"radroots_event",
"radroots_event_store",
+ "radroots_protocol",
"radroots_transport",
"serde",
"serde_json",
@@ -5302,7 +5479,7 @@ dependencies = [
[[package]]
name = "radroots_protected_store"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"chacha20poly1305",
"getrandom 0.2.17",
@@ -5313,15 +5490,15 @@ dependencies = [
]
[[package]]
-name = "radroots_protocol_contract_v1"
-version = "1.0.0-alpha.1"
+name = "radroots_protocol"
+version = "0.1.0-alpha"
dependencies = [
"serde",
]
[[package]]
name = "radroots_runtime"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"anyhow",
"chacha20poly1305",
@@ -5342,16 +5519,8 @@ dependencies = [
]
[[package]]
-name = "radroots_runtime_contract_v1"
-version = "0.1.0"
-dependencies = [
- "radroots_protocol_contract_v1",
- "serde",
-]
-
-[[package]]
name = "radroots_runtime_paths"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"serde",
"thiserror 1.0.69",
@@ -5359,7 +5528,7 @@ dependencies = [
[[package]]
name = "radroots_runtime_store"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"radroots_sql_core",
"serde",
@@ -5369,12 +5538,11 @@ dependencies = [
[[package]]
name = "radroots_sdk"
-version = "0.1.0"
+version = "0.1.0-alpha"
dependencies = [
"base64 0.22.1",
"hex",
"nostr",
- "radroots_authority",
"radroots_event",
"radroots_event_codec",
"radroots_event_store",
@@ -5385,9 +5553,10 @@ dependencies = [
"radroots_nostr_signer",
"radroots_outbox",
"radroots_protected_store",
- "radroots_runtime_contract_v1",
+ "radroots_protocol",
"radroots_runtime_paths",
"radroots_secret_vault",
+ "radroots_signing",
"radroots_trade",
"radroots_transport",
"radroots_transport_nostr",
@@ -5402,11 +5571,20 @@ dependencies = [
[[package]]
name = "radroots_secret_vault"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
+
+[[package]]
+name = "radroots_signing"
+version = "0.1.0-alpha"
+dependencies = [
+ "radroots_event",
+ "radroots_identity",
+ "radroots_protocol",
+]
[[package]]
name = "radroots_sql_core"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"chrono",
"futures-executor",
@@ -5450,6 +5628,7 @@ dependencies = [
"thiserror 2.0.18",
"tokio",
"tokio-tungstenite",
+ "toml 0.8.23",
"tracing",
"tracing-subscriber",
"uuid",
@@ -5577,36 +5756,37 @@ dependencies = [
[[package]]
name = "radroots_trade"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"base64 0.22.1",
"hex",
- "radroots_authority",
"radroots_core",
"radroots_event",
"radroots_event_codec",
- "radroots_event_store",
+ "radroots_identity",
"serde",
"serde_json",
"sha2",
- "sqlx",
- "thiserror 1.0.69",
]
[[package]]
name = "radroots_transport"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
+ "radroots_event",
+ "radroots_identity",
+ "radroots_protocol",
"serde",
"sha2",
]
[[package]]
name = "radroots_transport_nostr"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"futures",
"nostr",
+ "nostr-sdk",
"radroots_event",
"radroots_event_store",
"radroots_nostr",
@@ -5621,7 +5801,7 @@ dependencies = [
[[package]]
name = "radroots_transport_reticulum"
-version = "1.0.0-alpha.1"
+version = "0.1.0-alpha"
dependencies = [
"radroots_transport",
]
@@ -5884,9 +6064,8 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
dependencies = [
"base64 0.22.1",
"bytes",
- "futures-channel",
"futures-core",
- "futures-util",
+ "hickory-resolver",
"http",
"http-body",
"http-body-util",
@@ -5895,6 +6074,7 @@ dependencies = [
"hyper-util",
"js-sys",
"log",
+ "once_cell",
"percent-encoding",
"pin-project-lite",
"quinn",
@@ -5917,6 +6097,12 @@ dependencies = [
]
[[package]]
+name = "resolv-conf"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"
+
+[[package]]
name = "resvg"
version = "0.45.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -6093,16 +6279,6 @@ dependencies = [
]
[[package]]
-name = "rust_decimal_macros"
-version = "1.40.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74a5a6f027e892c7a035c6fddb50435a1fbf5a734ffc0c2a9fed4d0221440519"
-dependencies = [
- "quote",
- "syn 2.0.117",
-]
-
-[[package]]
name = "rustc-hash"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -6359,6 +6535,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
name = "secp256k1"
version = "0.29.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -7192,6 +7381,12 @@ dependencies = [
]
[[package]]
+name = "tagptr"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
+
+[[package]]
name = "take-until"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8424,6 +8619,12 @@ dependencies = [
]
[[package]]
+name = "widestring"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
+
+[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8624,6 +8825,17 @@ dependencies = [
]
[[package]]
+name = "windows-registry"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
+dependencies = [
+ "windows-link 0.2.1",
+ "windows-result 0.4.1",
+ "windows-strings 0.5.1",
+]
+
+[[package]]
name = "windows-result"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8642,6 +8854,15 @@ dependencies = [
]
[[package]]
+name = "windows-result"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
+[[package]]
name = "windows-strings"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8660,6 +8881,15 @@ dependencies = [
]
[[package]]
+name = "windows-strings"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
+[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
@@ -17,7 +17,7 @@ resolver = "2"
version = "0.1.0"
edition = "2024"
authors = ["Radroots Authors"]
-rust-version = "1.97.0"
+rust-version = "1.97.1"
license = "GPL-3.0-or-later"
repository = "https://github.com/radrootslabs/studio_app"
homepage = "https://radroots.org"
@@ -32,21 +32,21 @@ gpui-component = "0.5.1"
gpui-component-assets = "0.5.1"
mf2_i18n = { version = "=0.1.0", git = "https://github.com/triesap/mf2_i18n.git", rev = "e95f0fe090764dc62f5f67f4ff9e207d7e1cd901", default-features = false }
nostr = "0.44.2"
-radroots_core = { version = "=1.0.0-alpha.1", path = "../lib/crates/core", default-features = false, features = ["std"] }
-radroots_authority = { version = "=1.0.0-alpha.1", path = "../lib/crates/authority" }
-radroots_event = { version = "=1.0.0-alpha.1", path = "../lib/crates/event", default-features = false, features = ["serde", "std"] }
-radroots_event_codec = { version = "=1.0.0-alpha.1", path = "../lib/crates/event_codec", features = ["serde_json"] }
-radroots_identity = { version = "=1.0.0-alpha.1", path = "../lib/crates/identity" }
-radroots_runtime_store = { version = "=1.0.0-alpha.1", path = "../lib/crates/runtime_store", features = ["native"] }
-radroots_nostr = { version = "=1.0.0-alpha.1", path = "../lib/crates/nostr", features = ["client"] }
-radroots_nostr_accounts = { version = "=1.0.0-alpha.1", path = "../lib/crates/nostr_accounts" }
-radroots_nostr_connect = { version = "=1.0.0-alpha.1", path = "../lib/crates/nostr_connect" }
-radroots_protected_store = { version = "=1.0.0-alpha.1", path = "../lib/crates/protected_store" }
-radroots_runtime_paths = { version = "=1.0.0-alpha.1", path = "../lib/crates/runtime_paths" }
-radroots_secret_vault = { version = "=1.0.0-alpha.1", path = "../lib/crates/secret_vault", default-features = false, features = ["std"] }
-radroots_sdk = { path = "../sdk/crates/sdk", features = ["local-runtime"] }
-radroots_sql_core = { version = "=1.0.0-alpha.1", path = "../lib/crates/sql_core", features = ["native"] }
-radroots_trade = { version = "=1.0.0-alpha.1", path = "../lib/crates/trade", default-features = false, features = ["std", "serde", "serde_json"] }
+radroots_core = { version = "=0.1.0-alpha", path = "../lib/crates/core", default-features = false, features = ["std"] }
+radroots_authority = { version = "=0.1.0-alpha", path = "../lib/crates/authority" }
+radroots_event = { version = "=0.1.0-alpha", path = "../lib/crates/event", default-features = false, features = ["serde", "std"] }
+radroots_event_codec = { version = "=0.1.0-alpha", path = "../lib/crates/event_codec", features = ["json"] }
+radroots_identity = { version = "=0.1.0-alpha", path = "../lib/crates/identity" }
+radroots_runtime_store = { version = "=0.1.0-alpha", path = "../lib/crates/runtime_store", features = ["native"] }
+radroots_nostr = { version = "=0.1.0-alpha", path = "../lib/crates/nostr", features = ["client"] }
+radroots_nostr_accounts = { version = "=0.1.0-alpha", path = "../lib/crates/nostr_accounts" }
+radroots_nostr_connect = { version = "=0.1.0-alpha", path = "../lib/crates/nostr_connect" }
+radroots_protected_store = { version = "=0.1.0-alpha", path = "../lib/crates/protected_store" }
+radroots_runtime_paths = { version = "=0.1.0-alpha", path = "../lib/crates/runtime_paths" }
+radroots_secret_vault = { version = "=0.1.0-alpha", path = "../lib/crates/secret_vault", default-features = false, features = ["std"] }
+radroots_sdk = { version = "=0.1.0-alpha", path = "../sdk/crates/sdk", features = ["local-runtime"] }
+radroots_sql_core = { version = "=0.1.0-alpha", path = "../lib/crates/sql_core", features = ["native"] }
+radroots_trade = { version = "=0.1.0-alpha", path = "../lib/crates/trade", default-features = false, features = ["std", "serde", "serde_json"] }
radroots_studio_app_core = { path = "crates/runtime", version = "0.1.0" }
radroots_studio_app_i18n = { path = "crates/i18n", version = "0.1.0" }
radroots_studio_app_types = { path = "crates/types", version = "0.1.0" }
diff --git a/crates/desktop/Cargo.toml b/crates/desktop/Cargo.toml
@@ -44,6 +44,7 @@ uuid.workspace = true
[dev-dependencies]
nostr.workspace = true
radroots_studio_app_sqlite = { workspace = true, features = ["test-support"] }
+toml.workspace = true
tracing-subscriber.workspace = true
[lints]
diff --git a/crates/desktop/src/source_guards.rs b/crates/desktop/src/source_guards.rs
@@ -6,6 +6,48 @@ use std::{
const ALLOWED_MENU_LITERALS: &[&str] = &["cmd-q", "settings window should open"];
+const SIBLING_RADROOTS_DEPENDENCIES: &[&str] = &[
+ "radroots_authority",
+ "radroots_core",
+ "radroots_event",
+ "radroots_event_codec",
+ "radroots_identity",
+ "radroots_nostr",
+ "radroots_nostr_accounts",
+ "radroots_nostr_connect",
+ "radroots_protected_store",
+ "radroots_runtime_paths",
+ "radroots_runtime_store",
+ "radroots_sdk",
+ "radroots_secret_vault",
+ "radroots_sql_core",
+ "radroots_trade",
+];
+const SIBLING_RADROOTS_VERSION_REQUIREMENT: &str = "=0.1.0-alpha";
+const LOCAL_RADROOTS_REGISTRY_PATCHES: &[&str] = &[
+ "radroots_blossom",
+ "radroots_core",
+ "radroots_event",
+ "radroots_event_codec",
+ "radroots_event_store",
+ "radroots_geocoder",
+ "radroots_identity",
+ "radroots_nostr",
+ "radroots_nostr_connect",
+ "radroots_nostr_signer",
+ "radroots_outbox",
+ "radroots_protected_store",
+ "radroots_protocol",
+ "radroots_runtime_paths",
+ "radroots_secret_vault",
+ "radroots_signing",
+ "radroots_sql_core",
+ "radroots_trade",
+ "radroots_transport",
+ "radroots_transport_nostr",
+ "radroots_transport_reticulum",
+];
+
const ALLOWED_WINDOW_LITERALS: &[&str] = &[
"",
" ",
@@ -1372,6 +1414,85 @@ const SDK_BOUNDARY_EXCEPTIONS: &[SdkBoundaryExceptionEntry] = &[
];
#[test]
+fn sibling_radroots_dependencies_use_the_canonical_release_cohort() {
+ let manifest_source = read_source_path(app_root().join("Cargo.toml").as_path());
+ let manifest: toml::Value =
+ toml::from_str(manifest_source.as_str()).expect("workspace Cargo.toml should parse");
+ let dependencies = manifest
+ .get("workspace")
+ .and_then(|workspace| workspace.get("dependencies"))
+ .and_then(toml::Value::as_table)
+ .expect("workspace.dependencies should be a TOML table");
+
+ let discovered = dependencies
+ .iter()
+ .filter_map(|(name, dependency)| {
+ dependency
+ .get("path")
+ .and_then(toml::Value::as_str)
+ .is_some_and(|path| path.starts_with("../lib/") || path.starts_with("../sdk/"))
+ .then_some(name.as_str())
+ })
+ .collect::<BTreeSet<_>>();
+ let expected = SIBLING_RADROOTS_DEPENDENCIES
+ .iter()
+ .copied()
+ .collect::<BTreeSet<_>>();
+
+ assert_eq!(
+ discovered, expected,
+ "every sibling Radroots dependency must be covered by the canonical release cohort guard"
+ );
+ for name in SIBLING_RADROOTS_DEPENDENCIES {
+ let requirement = dependencies
+ .get(*name)
+ .and_then(|dependency| dependency.get("version"))
+ .and_then(toml::Value::as_str);
+ assert_eq!(
+ requirement,
+ Some(SIBLING_RADROOTS_VERSION_REQUIREMENT),
+ "{name} must use the canonical exact Radroots release cohort"
+ );
+ }
+}
+
+#[test]
+fn local_registry_patches_cover_the_sdk_prepublication_cohort() {
+ let app_root = app_root();
+ let config_source = read_source_path(app_root.join(".cargo/config.toml").as_path());
+ let config: toml::Value =
+ toml::from_str(config_source.as_str()).expect(".cargo/config.toml should parse");
+ let patches = config
+ .get("patch")
+ .and_then(|patch| patch.get("crates-io"))
+ .and_then(toml::Value::as_table)
+ .expect("patch.crates-io should be a TOML table");
+ let discovered = patches.keys().map(String::as_str).collect::<BTreeSet<_>>();
+ let expected = LOCAL_RADROOTS_REGISTRY_PATCHES
+ .iter()
+ .copied()
+ .collect::<BTreeSet<_>>();
+
+ assert_eq!(
+ discovered, expected,
+ "local registry patches must cover exactly the SDK prepublication cohort"
+ );
+ for name in LOCAL_RADROOTS_REGISTRY_PATCHES {
+ let path = patches
+ .get(*name)
+ .and_then(|patch| patch.get("path"))
+ .and_then(toml::Value::as_str)
+ .unwrap_or_else(|| panic!("{name} must define a local patch path"));
+ let package_manifest = app_root.join(path).join("Cargo.toml");
+ assert!(
+ package_manifest.is_file(),
+ "{name} patch target must contain Cargo.toml: {}",
+ package_manifest.display()
+ );
+ }
+}
+
+#[test]
fn desktop_menu_source_uses_localized_copy_paths() {
assert_eq!(
extract_string_literals(include_str!("menus.rs")),
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
@@ -1,5 +1,5 @@
[toolchain]
-channel = "1.97.0"
+channel = "1.97.1"
targets = [
"aarch64-apple-ios",
"aarch64-apple-ios-sim",