use std::any::type_name;
const GOVERNED_SURFACE_ALLOWLIST: &[&str] = &[
"Engine",
"OpenedEngine",
"OpenReport",
"WriteReceipt",
"SearchResult",
"PreparedWrite",
"EngineError",
"EngineOpenError",
"CorruptionDetail",
"CorruptionKind",
"CorruptionLocator",
"OpenStage",
"RecoveryHint",
"SoftFallback",
"SoftFallbackBranch",
"CounterSnapshot",
"Subscription",
"TraversalDirection",
"NodeRecord",
"SearchExpandResult",
"SearchFilter",
"Predicate",
"ScalarValue",
"ComparisonOp",
"ExtractDocument",
"IngestWithExtractorReceipt",
"Explanation",
"QueryTrace",
"PerHitExplain",
];
const RECOVERY_DENYLIST: &[&str] = &["recover", "restore", "repair", "fix", "rebuild"];
fn denylist_hits(allowlist: &[&str], denylist: &[&str]) -> Vec<String> {
allowlist
.iter()
.filter(|name| denylist.iter().any(|verb| name.eq_ignore_ascii_case(verb)))
.map(|name| name.to_string())
.collect()
}
#[test]
fn t_074_rust_governed_surface_resolves() {
let _ = type_name::<fathomdb::Engine>();
let _ = type_name::<fathomdb::OpenedEngine>();
let _ = type_name::<fathomdb::OpenReport>();
let _ = type_name::<fathomdb::WriteReceipt>();
let _ = type_name::<fathomdb::SearchResult>();
let _ = type_name::<fathomdb::PreparedWrite>();
let _ = type_name::<fathomdb::EngineError>();
let _ = type_name::<fathomdb::EngineOpenError>();
let _ = type_name::<fathomdb::CorruptionDetail>();
let _ = type_name::<fathomdb::CorruptionKind>();
let _ = type_name::<fathomdb::CorruptionLocator>();
let _ = type_name::<fathomdb::OpenStage>();
let _ = type_name::<fathomdb::RecoveryHint>();
let _ = type_name::<fathomdb::SoftFallback>();
let _ = type_name::<fathomdb::SoftFallbackBranch>();
let _ = type_name::<fathomdb::CounterSnapshot>();
let _ = type_name::<fathomdb::Subscription>();
let _ = type_name::<fathomdb::TraversalDirection>();
let _ = type_name::<fathomdb::NodeRecord>();
let _ = type_name::<fathomdb::SearchExpandResult>();
let _ = type_name::<fathomdb::SearchFilter>();
let _ = type_name::<fathomdb::Predicate>();
let _ = type_name::<fathomdb::ScalarValue>();
let _ = type_name::<fathomdb::ComparisonOp>();
let _ = type_name::<fathomdb::ExtractDocument>();
let _ = type_name::<fathomdb::IngestWithExtractorReceipt>();
let _ = type_name::<fathomdb::Explanation>();
let _ = type_name::<fathomdb::QueryTrace>();
let _ = type_name::<fathomdb::PerHitExplain>();
assert_eq!(
GOVERNED_SURFACE_ALLOWLIST.len(),
29,
"GOVERNED_SURFACE_ALLOWLIST must list exactly the 29 resolved governed types"
);
}
#[test]
fn t_074_recovery_denylist_absent_from_governed_surface() {
let hits = denylist_hits(GOVERNED_SURFACE_ALLOWLIST, RECOVERY_DENYLIST);
assert!(
hits.is_empty(),
"governed Rust surface must not contain recovery-denylist verbs, found: {hits:?}"
);
}
#[test]
fn t_074_denylist_detector_is_not_vacuous() {
assert_eq!(
denylist_hits(&["Engine", "rebuild"], RECOVERY_DENYLIST),
vec!["rebuild".to_string()],
"the denylist detector must flag an injected recovery verb"
);
assert!(
denylist_hits(&["Engine", "WriteReceipt", "RecoveryHint"], RECOVERY_DENYLIST).is_empty(),
"the denylist detector must NOT flag typed names like RecoveryHint (exact-match, not substring)"
);
}
#[cfg(feature = "operator")]
#[test]
fn t_074_operator_seam_resolves_with_feature() {
let _ = type_name::<fathomdb::CheckIntegrityOpts>();
let _ = type_name::<fathomdb::IntegrityReport>();
let _ = type_name::<fathomdb::SafeExportArtifact>();
let _ = type_name::<fathomdb::TraceReport>();
let _ = type_name::<fathomdb::TraceEvent>();
let _ = type_name::<fathomdb::RebuildReport>();
let _ = type_name::<fathomdb::RebuildKind>();
let _ = type_name::<fathomdb::ExciseReport>();
let _ = type_name::<fathomdb::VerifyEmbedderReport>();
let _ = type_name::<fathomdb::VerifyEmbedderStatus>();
let _ = type_name::<fathomdb::DumpSchemaReport>();
let _ = type_name::<fathomdb::SchemaObject>();
let _ = type_name::<fathomdb::DumpRowCountsReport>();
let _ = type_name::<fathomdb::TableRowCount>();
let _ = type_name::<fathomdb::DumpProfileReport>();
let _ = type_name::<fathomdb::TruncateWalReport>();
let _ = type_name::<fathomdb::TruncateWalStatus>();
let _ = type_name::<fathomdb::Finding>();
let _ = type_name::<fathomdb::MeanRecomputeReport>();
let _ = type_name::<fathomdb::Section>();
let _ = fathomdb::Engine::rebuild_projections;
let _ = fathomdb::Engine::rebuild_vec0;
let _ = fathomdb::Engine::excise_source;
let _ = fathomdb::Engine::check_integrity;
let _ = fathomdb::Engine::safe_export;
let _ = fathomdb::Engine::trace_source_ref;
let _ = fathomdb::Engine::verify_embedder;
let _ = fathomdb::Engine::dump_schema;
let _ = fathomdb::Engine::dump_row_counts;
let _ = fathomdb::Engine::dump_profile;
let _ = fathomdb::Engine::truncate_wal;
let _ = fathomdb::Engine::recompute_mean;
}