commit a12b4cc4e00b9d17289d2839d48f91ff8577595e
parent ba2e09c8e8c96882e37c2fbcc9ef9729b2b87b8e
Author: triesap <tyson@radroots.org>
Date: Tue, 14 Jul 2026 18:48:44 +0000
tests: harden foundation source guard
Diffstat:
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()))