lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

commit 2e3542ef92467fcf11ea5abc825491ab747ab64f
parent 6638b555d09f1f466413c381b0e3d1136a4d2c5f
Author: triesap <tyson@radroots.org>
Date:   Mon,  3 Aug 2026 07:42:32 +0000

transport-nostr: quarantine superseded package surface

- Mark the broad net and Nostr runtime predecessors publish-frozen and hidden.
- Record app_rt and NostrDB consumers with exact Step 215 and 313 removals.
- Forbid new consumers, features, contracts, and behavior in both bridges.
- Enforce private release classification with transport-owned quarantine tests.

Diffstat:
Mcrates/net/Cargo.toml | 7+++++++
Mcrates/net/README | 30++++++++++++++++++------------
Mcrates/net/src/lib.rs | 1+
Mcrates/nostr_runtime/Cargo.toml | 7+++++++
Mcrates/nostr_runtime/README | 18+++++++++++++++---
Mcrates/nostr_runtime/src/lib.rs | 1+
Acrates/transport_nostr/tests/legacy_quarantine.rs | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdocs/implementation/COMPATIBILITY_SHIMS.md | 12+++++++-----
Mdocs/implementation/deviations.toml | 25+++++++++++++++++++++++++
9 files changed, 160 insertions(+), 20 deletions(-)

diff --git a/crates/net/Cargo.toml b/crates/net/Cargo.toml @@ -11,6 +11,13 @@ repository.workspace = true homepage.workspace = true readme = "README" +[package.metadata.radroots.compatibility] +status = "publish_frozen" +replacement = "radroots_transport + radroots_sync + radroots_sdk" +deviation = "RCRV1-DEV-010" +removal_step = 313 +new_consumers_forbidden = true + [features] default = ["std"] std = ["serde/std"] diff --git a/crates/net/README b/crates/net/README @@ -1,20 +1,26 @@ # radroots_net -This is the README for `radroots_net`, which provides network orchestration and -runtime interfaces for the `radroots` core libraries. +`radroots_net` is a private, publication-frozen compatibility package for the +superseded broad network/runtime layer. New consumers and new behavior are +forbidden. Final transport contracts belong to `radroots_transport`, shared +orchestration belongs to `radroots_sync`, and application composition belongs +to `radroots_sdk` or the host. -## Overview +## Compatibility quarantine - * networking configuration and builders; - * runtime-aware network handle and lifecycle support; - * optional Nostr client integration and key management helpers; - * optional logging and runtime-path persistence integration. +The existing `app_rt` consumer still resolves this package as +`radroots_net_core` while its downstream cutover is pending. Removing the +package now would break that standalone consumer, so `RCRV1-DEV-010` retains +only this documentation-hidden, `publish = false` bridge. Step 313 removes the +package after the first-party consumer matrix proves the cutover complete. + +Do not add consumers, features, public contracts, transport implementations, +or runtime behavior here. In particular, the optional legacy Nostr-client +surface is not the public `radroots_transport_nostr` API and cannot enter a +release feature closure. ## Copyright Except as otherwise noted, all files in the `radroots_net` distribution are - - Copyright (c) 2025 Tyson Lupul - -For information on usage and redistribution, and for a DISCLAIMER OF ALL -WARRANTIES, see LICENSE included in the `radroots_net` distribution. +copyright (c) 2025 Tyson Lupul. See `LICENSE` for usage, redistribution, and +warranty terms. diff --git a/crates/net/src/lib.rs b/crates/net/src/lib.rs @@ -1,3 +1,4 @@ +#![doc(hidden)] #![cfg_attr(not(feature = "std"), no_std)] extern crate alloc; diff --git a/crates/nostr_runtime/Cargo.toml b/crates/nostr_runtime/Cargo.toml @@ -11,6 +11,13 @@ repository.workspace = true homepage.workspace = true readme = "README" +[package.metadata.radroots.compatibility] +status = "publish_frozen" +replacement = "radroots_transport_nostr + radroots_sync" +deviation = "RCRV1-DEV-010" +removal_step = 215 +new_consumers_forbidden = true + [features] default = ["std"] std = [] diff --git a/crates/nostr_runtime/README b/crates/nostr_runtime/README @@ -2,9 +2,21 @@ `radroots_nostr_runtime` is a private, publication-frozen predecessor package. Its former client/runtime integration is no longer active by default and must -not receive new consumers. Final source/sink orchestration belongs to -`radroots_sync`; the remaining opt-in predecessor surface is governed by -`RCRV1-DEV-007` and must be removed at its sync-orchestration gate. +not receive new consumers. Final relay I/O belongs to +`radroots_transport_nostr`; final source/sink orchestration belongs to +`radroots_sync`. + +## Compatibility quarantine + +The private `radroots_nostrdb` runtime adapter still resolves the predecessor +sink types behind an opt-in, non-default feature. `RCRV1-DEV-010` therefore +retains this documentation-hidden, `publish = false` package only until the +sync-orchestration cutover. Step 215 removes the package and the adapter after +their behavior is owned by `radroots_sync`. + +Do not add consumers, features, public contracts, or runtime behavior here. +The remaining opt-in source is also governed by `RCRV1-DEV-007` and cannot +enter a release feature closure. ## Overview diff --git a/crates/nostr_runtime/src/lib.rs b/crates/nostr_runtime/src/lib.rs @@ -1,3 +1,4 @@ +#![doc(hidden)] #![cfg_attr(not(feature = "std"), no_std)] #![forbid(unsafe_code)] diff --git a/crates/transport_nostr/tests/legacy_quarantine.rs b/crates/transport_nostr/tests/legacy_quarantine.rs @@ -0,0 +1,79 @@ +const DEVIATIONS: &str = include_str!("../../../docs/implementation/deviations.toml"); +const SHIMS: &str = include_str!("../../../docs/implementation/COMPATIBILITY_SHIMS.md"); +const PUBLISH_POLICY: &str = include_str!("../../../contracts/releases/publish_policy.toml"); + +const PREDECESSORS: &[(&str, &str, &str, &str, &str, &str)] = &[ + ( + "radroots_nostr_runtime", + "radroots_transport_nostr + radroots_sync", + "215", + include_str!("../../nostr_runtime/Cargo.toml"), + include_str!("../../nostr_runtime/src/lib.rs"), + include_str!("../../nostr_runtime/README"), + ), + ( + "radroots_net", + "radroots_transport + radroots_sync + radroots_sdk", + "313", + include_str!("../../net/Cargo.toml"), + include_str!("../../net/src/lib.rs"), + include_str!("../../net/README"), + ), +]; + +#[test] +fn superseded_transport_packages_are_fail_closed_compatibility_quarantines() { + let approved = PUBLISH_POLICY + .split_once("[workspace_classification]") + .map(|(publication, _)| publication) + .expect("workspace classification"); + let private = PUBLISH_POLICY + .split_once("private = [") + .and_then(|(_, rest)| rest.split_once(']')) + .map(|(entries, _)| entries) + .expect("private package classification"); + + for (package, replacement, removal_step, manifest, root, readme) in PREDECESSORS { + for required in [ + "publish = false", + "[package.metadata.radroots.compatibility]", + "status = \"publish_frozen\"", + "deviation = \"RCRV1-DEV-010\"", + "new_consumers_forbidden = true", + ] { + assert!( + manifest.contains(required), + "{package} manifest is missing `{required}`" + ); + } + assert!(manifest.contains(&format!("replacement = \"{replacement}\""))); + assert!(manifest.contains(&format!("removal_step = {removal_step}"))); + assert!(!manifest.contains("documentation = \"https://docs.rs/")); + assert!(root.starts_with("#![doc(hidden)]")); + assert!(readme.contains("## Compatibility quarantine")); + assert!(readme.contains(&format!("Step {removal_step} removes"))); + assert!(readme.contains("package")); + assert!(!approved.contains(package)); + assert!(private.contains(&format!("\"{package}\""))); + assert!(SHIMS.contains(&format!("| `{package}` |"))); + } +} + +#[test] +fn quarantine_records_consumers_and_exact_removal_gates() { + for required in [ + "id = \"RCRV1-DEV-010\"", + "app_rt resolving radroots_net as radroots_net_core", + "radroots_nostrdb runtime-adapter feature", + "Step 215 sync retirement gate", + "delete it at Step 313", + "opt-in predecessor feature closures do not compile", + ] { + assert!( + DEVIATIONS.contains(required), + "transport quarantine is missing `{required}`" + ); + } + assert!(SHIMS.contains("| `radroots_nostr_runtime` |")); + assert!(SHIMS.contains("| `radroots_net` |")); +} diff --git a/docs/implementation/COMPATIBILITY_SHIMS.md b/docs/implementation/COMPATIBILITY_SHIMS.md @@ -1,20 +1,22 @@ # Compatibility shim quarantine -Step 109 searched every first-party Rust source and manifest before attempting -to remove superseded signing packages. Active consumers make immediate -deletion unsafe, so only private source bridges remain. None is an approved -public crate identity or a second contract authority. +First-party source and manifest censuses run before each retirement checkpoint. +Active consumers make immediate deletion unsafe for the bridges below, so only +private source compatibility remains. None is an approved public crate +identity or a second contract authority. | Bridge | Final owner | Remaining first-party consumers | Assigned cutover | Exact final removal | | --- | --- | --- | --- | --- | | `radroots_authority` | `radroots_signing` | `oss/cli`, `oss/studio_app` | downstream Steps 269-293; matrix Step 294 | Step 313 | | `radroots_nostr_signer` | `radroots_signing`, `radroots_nostr_connect`, Myc-private state | `radroots_net`, `radroots_nostr_accounts`, `oss/sdk`, `oss/myc`, `oss/cli` | crate Steps 109-143; SDK Step 248; downstream Steps 269-293; matrix Step 294 | Step 313 | | hidden `radroots_nostr_connect::prelude` and prefixed client bridge | final `radroots_nostr_connect` modules and client state machine | `oss/cli`, `oss/myc`, enterprise NIP-46 adapters, integration harnesses | CLI Step 271; Myc Step 288; residual consumers Step 293; matrix Step 294 | Step 313 | +| `radroots_nostr_runtime` | `radroots_transport_nostr`, `radroots_sync` | private `radroots_nostrdb` runtime adapter | sync Steps 202-214 | Step 215 | +| `radroots_net` | `radroots_transport`, `radroots_sync`, `radroots_sdk` | `app_rt` as `radroots_net_core` | downstream Steps 269-293; matrix Step 294 | Step 313 | Both compatibility package manifests and `radroots_nostr_connect` keep `publish = false`. Release policy classifies the shims as private and excludes them from the exact 19-package public API inventory. The -`radroots_nostr_signer` manifest intentionally has no docs.rs URL. No new +Compatibility package manifests intentionally have no docs.rs URL. No new consumer, feature, public contract, or behavior may be added before removal. The Step 294 matrix must prove all listed consumers have migrated. Step 313 diff --git a/docs/implementation/deviations.toml b/docs/implementation/deviations.toml @@ -37,6 +37,31 @@ normative_architecture_change = false adr_required = false [[deviation]] +id = "RCRV1-DEV-010" +date = "2026-08-03" +status = "active" +approval = "All code-review recommendations and the full multi-RCLD implementation sequence were explicitly approved by the user." +affected_steps = ["201", "215", "269", "294", "313"] +spec_anchors = [ + "docs/specs/radroots_crates_release_v1.md#15-radroots_transport_nostr", + "docs/specs/radroots_crates_release_v1.md#20-current-to-target-migration-map", +] +source_evidence = [ + "The first-party Step 201 census found app_rt resolving radroots_net as radroots_net_core through a sibling path while its downstream cutover remains scheduled for Steps 269-293.", + "The private radroots_nostrdb runtime-adapter feature still resolves radroots_nostr_runtime predecessor sink types until canonical sync orchestration is complete.", + "Both predecessor packages are excluded from the exact release inventory and neither is reachable from a default public package feature closure.", +] +replacement_action = "Keep radroots_nostr_runtime as a documentation-hidden publish-frozen bridge only until the Step 215 sync retirement gate; keep radroots_net as a documentation-hidden publish-frozen bridge only until the downstream matrix is green, then delete it at Step 313. Forbid all new consumers, features, contracts, and behavior in both packages." +verification = [ + "Both manifests carry machine-readable publish-frozen metadata naming their final owners, this deviation, exact removal step, and new-consumer prohibition.", + "Transport-owned quarantine tests require both roots to remain documentation-hidden, private, and absent from the approved publication inventory.", + "Step 215 removes radroots_nostr_runtime and its NostrDB adapter; Step 313 rejects residual radroots_net package, dependency, alias, and source identities after the downstream matrix.", +] +unresolved_risk = "The opt-in predecessor feature closures do not compile against the final adapter API; package-realistic publication remains blocked until the exact removal gates delete them." +normative_architecture_change = false +adr_required = false + +[[deviation]] id = "RCRV1-DEV-008" date = "2026-08-01" status = "active"