//! The rendezvous registry: finding the other team weaving your cloth.
//!
//! # Purpose
//!
//! Duplicated work is invisible until it is finished. The registry exists to
//! make it visible *before* that: organisations publish similarity sketches
//! of their content and their design decisions, the registry notices
//! resemblance, and when two parties' work overlaps it brokers an
//! introduction — a token both sides receive, so the humans can decide to
//! talk. The registry never carries content between them.
//!
//! # The privacy argument, stated as code
//!
//! This crate depends on `jac-core` and `jac-sketch` and nothing else. It
//! cannot name `Blob`, `Snapshot`, or `Decision`, because the compiler has
//! never heard of them here — `cargo xtask boundary` proves the dependency
//! graph keeps it that way. Independently, every payload type is required to
//! be [`jac_core::DigestSafe`], checked by the const assertion in this
//! module: a payload that could carry content fails to compile before it
//! fails review.
//!
//! ```compile_fail
//! // Suppose someone tries to make raw text publishable by writing the
//! // assertion this crate uses for its real payloads:
//! jac_rendezvous::assert_digest_safe::<String>();
//! ```
//!
//! Honest scope: a sketch leaks resemblance by design — that is the product.
//! What the two mechanisms rule out is the registry ever *holding* content,
//! not an adversary testing a candidate text they already possess against a
//! published sketch.
pub mod introduction;
pub mod registry;
pub use introduction::Introduction;
pub use registry::{MemoryRegistry, Publication, PublishedSketch, Registry, SketchMatch};
/// Const-asserts that a type may cross the privacy boundary.
///
/// Used at the bottom of [`registry`] to prove every payload variant is
/// [`jac_core::DigestSafe`]; exported so the doctest above can show the
/// negative case failing to compile.
pub const fn assert_digest_safe<T: jac_core::DigestSafe>() {}