app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

commit 4a37ef1feefda4f0e6d95145dbf65dfadb8b15f2
parent 1b9433aa57e0357d684def3721257e9375e0e38e
Author: triesap <tyson@radroots.org>
Date:   Mon,  3 Aug 2026 15:43:38 +0000

docs: reconcile superseded studio sdk cutover

- Anchor the deviation to the reviewed and replacement source commits
- Map Steps 274 through 278 onto the current host-owned architecture
- Guard against escaped paths false SDK edges and restored legacy runtime
- Record locked Rust Gradle native and packaged validation evidence

Diffstat:
Adocs/architecture/radroots-crates-release-v1-reconciliation.md | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdocs/testing/final-validation-ledger.md | 7+++++++
2 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/docs/architecture/radroots-crates-release-v1-reconciliation.md b/docs/architecture/radroots-crates-release-v1-reconciliation.md @@ -0,0 +1,63 @@ +# Radroots crates release v1 reconciliation + +## Decision + +The Studio cutover described by Radroots crates release v1 Steps 274–278 is an +evidence-based obsolete-source deviation for the current `studio_app` capsule. +It must not be implemented by restoring the retired desktop runtime or by +adding an unused `radroots_sdk` dependency. + +The crates-release review inspected Studio commit +`8d849a204b0b67865603f5c877ad7409fc922d30`. That revision contained the GPUI +workspace, `crates/runtime/src/sdk.rs`, `studio.sqlite`, direct Radroots lower +crate dependencies, and sibling paths into `../lib` and `../sdk`. Commit +`ae0179669c59261fe273a58d781763f69ad2b198` deleted that runtime. The current +head descends from the reviewed revision and implements the later approved +Rust/UniFFI/Compose Nostr-account architecture completed by the capsule's +63-checkpoint runtime sequence. + +The current product does not implement the farms, listings, trades, generic +storage, or generic synchronization semantics owned by `radroots_sdk`. Its +canonical Rust `AppCore` owns only Studio account/session state and bounded +kind-zero profile refresh. Adding the SDK without consuming those semantics +would create a false dependency and two lifecycle owners. + +## Step reconciliation + +- Step 274 is satisfied by removal of all production sibling paths to the + Radroots crate repositories. Workspace `path` dependencies are capsule-local + composition between Studio-owned crates. There are no direct dependencies on + a lower `radroots_*` package. Direct `nostr` and `nostr-sdk` dependencies are + deliberate upstream protocol adapters for the current product contract. +- Step 275's reviewed supervisor no longer exists. The replacement retains one + host-owned `AppCore`, a supervised Tokio runtime, explicit async UniFFI + commands, revision-bound results, closeable observers, and explicit shutdown. +- Step 276 is satisfied by the Studio-owned migration-managed SQLite database + under `core/crates/storage`. SDK backup or status code cannot own, mutate, or + report this database because the current graph contains no SDK edge. +- Step 277's generic signing, transport, and sync effects were deleted with the + reviewed runtime. Current key handling stays behind `SecretStore`; profile + fetch is bounded, local-relay tested, account/revision bound, and presentation + state remains host-owned. +- Step 278 is satisfied by the capsule's locked Rust and Gradle checks, native + loader smoke, complete application tests, and current-host distribution + package. A local Radroots registry canary is not applicable because the + resolved graph contains no Radroots registry package. + +## Boundary guard + +The Studio manifest graph must continue to satisfy all of these conditions: + +1. no dependency path escapes the `studio_app` capsule; +2. no `radroots_*` dependency is added merely to claim SDK migration; +3. Studio account, preference, profile-cache, and presentation state remains + host-owned; +4. secrets remain in the operating-system credential adapter and never enter + SQLite, DTOs, logs, or generated bindings; +5. any future farms, listings, trades, or generic sync product surface must be + introduced through the then-current `radroots_sdk` API and its real package + artifacts, not by restoring the deleted runtime. + +This reconciliation preserves the crates-release architecture requirement: +consumers use the correct layer for the semantics they actually consume, and a +new SDK edge is required when Studio first consumes SDK-owned semantics. diff --git a/docs/testing/final-validation-ledger.md b/docs/testing/final-validation-ledger.md @@ -7,6 +7,13 @@ criteria in the authoritative handoff are satisfied by implemented source, tests, or an explicit documented platform-validation contract. No test uses a public relay. +The Radroots crates release v1 reconciliation was rerun on 2026-08-03. Locked +Rust formatting, workspace all-target checks, workspace all-target tests, +Gradle desktop checks, native-loader coverage, and the current-host DMG package +were green through the governed extbuild output router. The reviewed legacy SDK +runtime is absent; the evidence-based Step 274–278 deviation is recorded in +`docs/architecture/radroots-crates-release-v1-reconciliation.md`. + ## Acceptance reconciliation | # | Result | Evidence |