radrootsd

JSON-RPC bridge for Radroots event publishing
git clone https://radroots.dev/git/radrootsd.git
Log | Files | Refs | README | LICENSE

commit a12b4cc4e00b9d17289d2839d48f91ff8577595e
parent ba2e09c8e8c96882e37c2fbcc9ef9729b2b87b8e
Author: triesap <tyson@radroots.org>
Date:   Tue, 14 Jul 2026 18:48:44 +0000

tests: harden foundation source guard

Diffstat:
Mtests/source_boundary.rs | 34++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+), 0 deletions(-)

diff --git a/tests/source_boundary.rs b/tests/source_boundary.rs @@ -57,6 +57,26 @@ const FORBIDDEN_DAEMON_TRANSPORT_CONCEPTS: &[ForbiddenConcept] = &[ const FORBIDDEN_FOUNDATION_HARDENING_RETIRED_CONCEPTS: &[ForbiddenConcept] = &[ ForbiddenConcept { + pattern: "WireEventParts", + reason: "event construction must use current Radroots NIP-01 wire part names", + }, + ForbiddenConcept { + pattern: "RadrootsFrozenEventDraft", + reason: "event draft surfaces must use the current RadrootsEventDraft name", + }, + ForbiddenConcept { + pattern: "RadrootsNostrEvent", + reason: "product-level event surfaces must use protocol-neutral event names", + }, + ForbiddenConcept { + pattern: "RadrootsNostrEventRef", + reason: "product-level event references must use RadrootsEventRef", + }, + ForbiddenConcept { + pattern: "RadrootsNostrEventPtr", + reason: "product-level event pointers must use RadrootsEventPtr", + }, + ForbiddenConcept { pattern: "SignedNostrEvent", reason: "generic signed-event surfaces must use product-neutral signed-event names", }, @@ -207,6 +227,10 @@ fn foundation_hardening_sources_reject_retired_names_and_ambiguous_docs() { let relative_path = relative_path(manifest_dir, path.as_path()); for concept in FORBIDDEN_FOUNDATION_HARDENING_RETIRED_CONCEPTS { + if foundation_hardening_retired_concept_allowed(relative_path.as_str(), concept.pattern) + { + continue; + } if contains_forbidden_concept(source, concept.pattern) { findings.push(format!( "{} contains retired Foundation Hardening concept `{}`: {}", @@ -524,6 +548,16 @@ fn foundation_hardening_guard_files(manifest_dir: &Path) -> Vec<PathBuf> { paths } +fn foundation_hardening_retired_concept_allowed(relative_path: &str, pattern: &str) -> bool { + pattern == "RadrootsNostrEvent" && daemon_nostr_protocol_context(relative_path) +} + +fn daemon_nostr_protocol_context(relative_path: &str) -> bool { + relative_path == "src/core/transport_publish.rs" + || relative_path.starts_with("src/transport/nostr/") + || relative_path.contains("/nip46/") +} + fn collect_foundation_hardening_guard_files(root: &Path, paths: &mut Vec<PathBuf>) { for entry in fs::read_dir(root) .unwrap_or_else(|error| panic!("failed to read {}: {error}", root.display()))