commit f600dbf5bd5df8c2faa2b8e05ff7630bd043f5e1
parent 67fd557efc2d2f5344b1cf474180f3b399288b9a
Author: triesap <tyson@radroots.org>
Date: Wed, 22 Jul 2026 02:34:49 +0000
event-codec: repair no-default all-target checks
- align unit-test cfg behavior with the established no-std crate boundary
- retain error source assertions only where the std error contract exists
- pin the raw crate-attribute witness and refresh successor authority
- make the governed serde-json no-default all-target lane pass
Diffstat:
5 files changed, 27 insertions(+), 9 deletions(-)
diff --git a/crates/event_codec/contracts/phase1_publication_artifact_v1.manifest.json b/crates/event_codec/contracts/phase1_publication_artifact_v1.manifest.json
@@ -303,8 +303,8 @@
{
"role": "operations_authority",
"path": "contracts/operations.toml",
- "byte_length": 75859,
- "sha256": "5bd81e76f4adaad23e1ff76576152802e6abd70607f65fcc39a737920da03aeb",
+ "byte_length": 75850,
+ "sha256": "c65893a44ee7ecee0617764f84b08018141e7e249cfdfa9c8144548c7371f510",
"hash_algorithm": "sha256_bytes_v1"
},
{
@@ -1612,8 +1612,8 @@
{
"role": "public_production_source",
"path": "crates/event_codec/src/lib.rs",
- "byte_length": 2540,
- "sha256": "872deae9f6b43b2f3f4c48794fce47f4e635f88dbc6df054bb26306976ea4745",
+ "byte_length": 2556,
+ "sha256": "f844cd20eefad594ede4fff0122b6d72081a68c15afefba7cc926b23820fcdd8",
"hash_algorithm": "sha256_bytes_v1"
},
{
@@ -2298,8 +2298,8 @@
{
"role": "superseded_nip09_contract_governance",
"path": "tools/xtask/src/contract/nip09_reconciliation.rs",
- "byte_length": 852224,
- "sha256": "22cf608eb6dae5d25f54ff439f01bf9dad8943998b455e198fff3e53383ba176",
+ "byte_length": 852432,
+ "sha256": "971d75198770265b17e17df23ba17a6096ad687d1cf2ac0f662a2c190ab39f94",
"hash_algorithm": "sha256_bytes_v1"
},
{
diff --git a/crates/event_codec/contracts/phase1_publication_artifact_v1.manifest.sha256 b/crates/event_codec/contracts/phase1_publication_artifact_v1.manifest.sha256
@@ -1 +1 @@
-fc0de2277097e49cf7afc6667d0c5862a4e83c2c9159c808ffd99baf3e2ba174
+0776e1d84c9366954047e75cdf12d9acc9a7108260157c3534f22067075a385a
diff --git a/crates/event_codec/src/lib.rs b/crates/event_codec/src/lib.rs
@@ -1,4 +1,4 @@
-#![cfg_attr(not(feature = "std"), no_std)]
+#![cfg_attr(all(not(feature = "std"), not(test)), no_std)]
#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
#![forbid(unsafe_code)]
#[cfg(not(feature = "std"))]
diff --git a/crates/event_codec/tests/codec_error_job.rs b/crates/event_codec/tests/codec_error_job.rs
@@ -1,6 +1,7 @@
#[path = "../src/test_fixtures.rs"]
mod test_fixtures;
+#[cfg(feature = "std")]
use std::error::Error as _;
use radroots_event_codec::error::{EventEncodeError, EventParseError};
@@ -20,11 +21,13 @@ fn parse_error_display_and_source_cover_variants() {
let missing = EventParseError::MissingTag("d");
assert_eq!(missing.to_string(), "missing tag: d");
assert_eq!(missing.code(), "missing_tag");
+ #[cfg(feature = "std")]
assert!(missing.source().is_none());
let invalid = EventParseError::InvalidTag("a");
assert_eq!(invalid.to_string(), "invalid tag structure for 'a'");
assert_eq!(invalid.code(), "invalid_tag");
+ #[cfg(feature = "std")]
assert!(invalid.source().is_none());
let invalid_kind = EventParseError::InvalidKind {
@@ -33,6 +36,7 @@ fn parse_error_display_and_source_cover_variants() {
};
assert_eq!(invalid_kind.to_string(), "invalid kind 1 (expected 30340)");
assert_eq!(invalid_kind.code(), "invalid_kind");
+ #[cfg(feature = "std")]
assert!(invalid_kind.source().is_none());
let parse_int = "x".parse::<u32>().expect_err("parse int error");
@@ -43,11 +47,13 @@ fn parse_error_display_and_source_cover_variants() {
.contains("invalid number in 'count'")
);
assert_eq!(invalid_number.code(), "invalid_number");
+ #[cfg(feature = "std")]
assert!(invalid_number.source().is_some());
let invalid_json = EventParseError::InvalidJson("content");
assert_eq!(invalid_json.to_string(), "invalid JSON in 'content'");
assert_eq!(invalid_json.code(), "invalid_json");
+ #[cfg(feature = "std")]
assert!(invalid_json.source().is_none());
}
@@ -148,14 +154,17 @@ fn job_encode_error_display_covers_variants() {
fn job_parse_error_display_and_source_covers_variants() {
let kind = JobParseError::KindOutOfRange(u32::from(u16::MAX) + 1);
assert!(kind.to_string().contains("Nostr event kind"));
+ #[cfg(feature = "std")]
assert!(kind.source().is_none());
let missing = JobParseError::MissingTag("e");
assert_eq!(missing.to_string(), "missing tag: e");
+ #[cfg(feature = "std")]
assert!(missing.source().is_none());
let invalid = JobParseError::InvalidTag("status");
assert_eq!(invalid.to_string(), "invalid tag structure for 'status'");
+ #[cfg(feature = "std")]
assert!(invalid.source().is_none());
let invalid_number = JobParseError::InvalidNumber("amount", "x".parse::<u32>().unwrap_err());
@@ -164,17 +173,21 @@ fn job_parse_error_display_and_source_covers_variants() {
.to_string()
.contains("invalid number in 'amount'")
);
+ #[cfg(feature = "std")]
assert!(invalid_number.source().is_some());
let non_whole = JobParseError::NonWholeSats("amount");
assert!(non_whole.to_string().contains("whole number of sats"));
+ #[cfg(feature = "std")]
assert!(non_whole.source().is_none());
let overflow = JobParseError::AmountOverflow("amount");
assert!(overflow.to_string().contains("does not fit u32 sat"));
+ #[cfg(feature = "std")]
assert!(overflow.source().is_none());
let missing_chain = JobParseError::MissingChainTag("e");
assert_eq!(missing_chain.to_string(), "missing required chain tag: e");
+ #[cfg(feature = "std")]
assert!(missing_chain.source().is_none());
}
diff --git a/tools/xtask/src/contract/nip09_reconciliation.rs b/tools/xtask/src/contract/nip09_reconciliation.rs
@@ -5312,7 +5312,12 @@ fn validate_raw_crate_attributes(relative: &str, source: &str) -> Result<(), Str
"#![cfg_attr(all(not(feature=\"std\"),not(test)),no_std)]",
"#![forbid(unsafe_code)]",
],
- "crates/event_codec/src/lib.rs" | "crates/blossom/src/lib.rs" => &[
+ "crates/event_codec/src/lib.rs" => &[
+ "#![cfg_attr(all(not(feature=\"std\"),not(test)),no_std)]",
+ "#![cfg_attr(coverage_nightly,feature(coverage_attribute))]",
+ "#![forbid(unsafe_code)]",
+ ],
+ "crates/blossom/src/lib.rs" => &[
"#![cfg_attr(not(feature=\"std\"),no_std)]",
"#![cfg_attr(coverage_nightly,feature(coverage_attribute))]",
"#![forbid(unsafe_code)]",