use std::cell::RefCell;
use std::collections::{HashMap, HashSet, VecDeque};
use std::path::{Path, PathBuf};
use std::rc::Rc;
use std::sync::{Arc, LazyLock, Mutex};
use std::time::{Duration, Instant};
use serde_json::Value;
use super::admitted::Authority;
use super::forward::Caller;
use lean_ctx::core::context_admission::egress::{
self, EgressTarget, PartKind, SealedRequest, SealedVerdict, TrustedDestinationBinding,
};
#[cfg(not(test))]
mod engine {
pub(super) use lean_ctx::core::archive::delivered::{Lineage as Sources, LineageRefusal};
pub(super) fn lineage_of(digest: &str) -> Option<Sources> {
lean_ctx::core::archive::delivered::lineage_of(digest)
}
}
#[cfg(test)]
#[path = "sealed_origin_engine_stand_in.rs"]
pub(crate) mod engine;
use engine::{LineageRefusal, Sources};
#[path = "sealed_origin_stored.rs"]
mod stored;
#[allow(clippy::large_enum_variant)]
#[derive(Clone, serde::Serialize, serde::Deserialize)]
pub(crate) enum Lineage {
Unknown,
Complete(Option<Sources>),
}
impl std::fmt::Debug for Lineage {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
formatter.write_str(match self {
Self::Unknown => "Lineage::Unknown",
Self::Complete(None) => "Lineage::Complete(no sources)",
Self::Complete(Some(_)) => "Lineage::Complete(sources)",
})
}
}
impl Lineage {
pub(crate) fn is_unknown(&self) -> bool {
matches!(self, Self::Unknown)
}
fn delivered(digest: &str) -> Self {
match engine::lineage_of(digest) {
Some(sources) if sources.is_complete() => Self::Complete(Some(sources)),
_ => Self::Unknown,
}
}
fn add(&mut self, other: &Self) {
let joined = match (std::mem::replace(self, Self::Unknown), other) {
(Self::Complete(None), Self::Complete(sources)) => Self::Complete(sources.clone()),
(Self::Complete(Some(mine)), Self::Complete(None)) => Self::Complete(Some(mine)),
(Self::Complete(Some(mut mine)), Self::Complete(Some(theirs))) => {
mine.join(theirs.clone());
if mine.is_complete() {
Self::Complete(Some(mine))
} else {
Self::Unknown
}
}
_ => Self::Unknown,
};
*self = joined;
}
}
pub(crate) type LineageSlot = Rc<RefCell<Option<Lineage>>>;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct SealedContext {
origin: String,
project: Option<[u8; 32]>,
role: Option<[u8; 32]>,
person: Option<String>,
#[serde(skip)]
receipt: Option<String>,
}
impl PartialEq for SealedContext {
fn eq(&self, other: &Self) -> bool {
self.origin == other.origin
&& self.project == other.project
&& self.role == other.role
&& self.person == other.person
}
}
impl Eq for SealedContext {}
impl SealedContext {
pub(crate) fn new(
target: &EgressTarget<'_>,
binding: TrustedDestinationBinding<'_>,
project: Option<([u8; 32], [u8; 32])>,
principal: Option<Caller>,
) -> Self {
let destination = egress::destination_with_binding(target, binding);
let mut identity = blake3::Hasher::new();
for part in [
destination.provider.as_str(),
target.upstream_base.trim_end_matches('/'),
destination
.account_ref
.as_ref()
.map_or("", |account| account.as_str()),
destination
.region
.as_ref()
.map_or("", |region| region.as_str()),
] {
identity.update(&(part.len() as u64).to_be_bytes());
identity.update(part.as_bytes());
}
Self {
origin: identity.finalize().to_hex().to_string(),
project: project.map(|(project, _)| project),
role: project.map(|(_, role)| role),
person: principal.as_ref().and_then(|caller| caller.person.clone()),
receipt: principal.map(|caller| caller.receipt),
}
}
pub(crate) fn principal_ref(&self) -> Result<Option<String>, &'static str> {
self.receipt
.as_deref()
.map(lean_ctx::core::context_admission::receipt_store::keyed::principal_ref)
.transpose()
}
fn part_key(&self, text_digest: &str) -> [u8; 32] {
let mut key = blake3::Hasher::new();
key.update(b"leanctx-assistant-part-v1\0");
key.update(&(self.origin.len() as u64).to_be_bytes());
key.update(self.origin.as_bytes());
for fingerprint in [&self.project, &self.role] {
match fingerprint {
Some(fingerprint) => key.update(&[1]).update(fingerprint),
None => key.update(&[0]),
};
}
match &self.person {
Some(person) => key
.update(&[1])
.update(&(person.len() as u64).to_be_bytes())
.update(person.as_bytes()),
None => key.update(&[0]),
};
key.update(text_digest.as_bytes());
*key.finalize().as_bytes()
}
}
#[derive(Debug, Clone)]
pub(crate) struct SealedProducer {
pub(crate) context: SealedContext,
pub(crate) authority: Arc<Authority>,
pub(crate) lineage: Option<Arc<Lineage>>,
}
struct Entry {
digest: [u8; 32],
producer: SealedProducer,
recorded: Instant,
}
struct Register {
entries: VecDeque<Entry>,
max_entries: usize,
max_age: Duration,
loaded: bool,
}
const MAX_ENTRIES: usize = 8192;
const MAX_AGE: Duration = Duration::from_hours(24);
static REGISTER: Mutex<Register> = Mutex::new(Register {
entries: VecDeque::new(),
max_entries: MAX_ENTRIES,
max_age: MAX_AGE,
loaded: false,
});
fn register() -> std::sync::MutexGuard<'static, Register> {
let lock = || {
REGISTER
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
};
let register = lock();
if register.loaded {
return register;
}
drop(register);
let loaded = stored::read_register();
let mut register = lock();
if !register.loaded {
register.loaded = true;
stored::merge_register(&mut register, loaded);
}
register
}
fn digest_of(sealed: &str) -> [u8; 32] {
*blake3::hash(sealed.as_bytes()).as_bytes()
}
fn record(producer: &SealedProducer, sealed: &str) {
if sealed.is_empty() {
return;
}
let digest = digest_of(sealed);
stored::keep_producer(&digest, producer);
let mut register = register();
let max_age = register.max_age;
register.entries.retain(|entry| {
entry.recorded.elapsed() < max_age
&& !(entry.digest == digest && entry.producer.context == producer.context)
});
register.entries.push_back(Entry {
digest,
producer: producer.clone(),
recorded: Instant::now(),
});
while register.entries.len() > register.max_entries {
register.entries.pop_front();
}
}
fn producers_of(origin: &str, sealed: &str) -> Vec<SealedProducer> {
let digest = digest_of(sealed);
let register = register();
register
.entries
.iter()
.filter(|entry| {
entry.digest == digest
&& entry.producer.context.origin == origin
&& entry.recorded.elapsed() < register.max_age
})
.map(|entry| entry.producer.clone())
.collect()
}
struct Parts {
known: HashMap<[u8; 32], Part>,
order: VecDeque<([u8; 32], u64)>,
recorded: u64,
loaded: bool,
}
impl Parts {
fn insert(&mut self, key: [u8; 32], at: Instant, lineage: Arc<Lineage>) {
self.recorded += 1;
let serial = self.recorded;
self.known.insert(
key,
Part {
serial,
at,
lineage,
},
);
self.order.push_back((key, serial));
while self.known.len() > MAX_PARTS || self.order.len() > 4 * MAX_PARTS {
let Some((oldest, recorded_as)) = self.order.pop_front() else {
break;
};
if self.known.len() > MAX_PARTS
&& self
.known
.get(&oldest)
.is_some_and(|part| part.serial == recorded_as)
{
self.known.remove(&oldest);
}
}
}
}
struct Part {
serial: u64,
at: Instant,
lineage: Arc<Lineage>,
}
const MAX_PARTS: usize = 65_536;
static PARTS: LazyLock<Mutex<Parts>> = LazyLock::new(|| {
Mutex::new(Parts {
known: HashMap::new(),
order: VecDeque::new(),
recorded: 0,
loaded: false,
})
});
fn parts() -> std::sync::MutexGuard<'static, Parts> {
let lock = || {
PARTS
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
};
let parts = lock();
if parts.loaded {
return parts;
}
drop(parts);
let loaded = stored::read_parts();
let mut parts = lock();
if !parts.loaded {
parts.loaded = true;
stored::merge_parts(&mut parts, loaded);
}
parts
}
fn record_part(context: &SealedContext, text: &str, lineage: &Arc<Lineage>) {
let key = context.part_key(&lean_ctx::core::archive::delivered::digest(text));
stored::keep_part(&key, lineage);
let mut parts = parts();
let lineage = match parts.known.get(&key) {
Some(known) if known.at.elapsed() < MAX_AGE && !Arc::ptr_eq(&known.lineage, lineage) => {
let mut joined = (*known.lineage).clone();
joined.add(lineage);
Arc::new(joined)
}
_ => Arc::clone(lineage),
};
parts.insert(key, Instant::now(), lineage);
}
fn assistant_lineage(context: &SealedContext, text_digest: &str) -> Option<Arc<Lineage>> {
parts()
.known
.get(&context.part_key(text_digest))
.filter(|part| part.at.elapsed() < MAX_AGE)
.map(|part| Arc::clone(&part.lineage))
}
fn request_lineage(
context: &SealedContext,
request: &SealedRequest<'_>,
project: Option<&Path>,
) -> Lineage {
if request.server_state {
return Lineage::Unknown;
}
let mut lineage = Lineage::Complete(None);
let mut seen = HashSet::new();
for part in request.parts {
let source = part.kind == PartKind::Source;
if !seen.insert((source, part.digest.as_str())) {
continue;
}
if source {
let Some(project) = project else {
return Lineage::Unknown;
};
lineage.add(&in_project(project, || Lineage::delivered(&part.digest)));
} else {
match assistant_lineage(context, &part.digest) {
Some(produced) => lineage.add(&produced),
None => return Lineage::Unknown,
}
}
if lineage.is_unknown() {
break;
}
}
lineage
}
fn produced_under(context: &SealedContext, sealed: &str) -> Result<Arc<Lineage>, SealedVerdict> {
let producers = producers_of(&context.origin, sealed);
if producers.is_empty() {
return Err(SealedVerdict::UnknownOrigin);
}
let Some(producer) = producers
.into_iter()
.find(|producer| producer.context == *context)
else {
return Err(SealedVerdict::AuthorityLapsed);
};
if producer.authority.verify_current().is_err() {
return Err(SealedVerdict::AuthorityLapsed);
}
producer
.lineage
.ok_or(SealedVerdict::SourceAuthorityUnknown)
}
fn in_project<T>(project: &Path, operation: impl FnOnce() -> T) -> T {
lean_ctx::core::policy::runtime::REQUEST_PROJECT
.sync_scope(RefCell::new(Some(project.to_path_buf())), operation)
}
fn lineage_verdict(lineage: &Lineage, project: Option<&Path>) -> SealedVerdict {
match lineage {
Lineage::Unknown => SealedVerdict::SourceAuthorityUnknown,
Lineage::Complete(None) => SealedVerdict::ReturnedToOrigin,
Lineage::Complete(Some(sources)) => {
let Some(project) = project else {
return SealedVerdict::SourceAuthorityUnknown;
};
match in_project(project, || sources.still_permitted()) {
Ok(()) => SealedVerdict::ReturnedToOrigin,
Err(LineageRefusal::Unknown) => SealedVerdict::SourceAuthorityUnknown,
Err(LineageRefusal::SourceNotPresented) => SealedVerdict::SourceNotPresented,
Err(LineageRefusal::SourceNoLongerAdmitted) => SealedVerdict::AuthorityLapsed,
}
}
}
}
pub(crate) fn resolver(
context: SealedContext,
derive: Option<LineageSlot>,
project: Option<PathBuf>,
) -> Box<dyn Fn(&SealedRequest<'_>) -> Vec<SealedVerdict>> {
Box::new(move |request| {
lean_ctx::core::archive::authority::with_permission_memo(|| {
verdicts_for(&context, derive.as_ref(), project.as_deref(), request)
})
})
}
fn verdicts_for(
context: &SealedContext,
derive: Option<&LineageSlot>,
project: Option<&Path>,
request: &SealedRequest<'_>,
) -> Vec<SealedVerdict> {
let mut lineage = derive.map(|_| request_lineage(context, request, project));
let mut decided: Vec<(Arc<Lineage>, SealedVerdict)> = Vec::new();
let mut verdicts = Vec::with_capacity(request.items.len());
for sealed in request.items {
let verdict = match produced_under(context, sealed) {
Ok(produced) => {
if let Some(lineage) = &mut lineage {
lineage.add(&produced);
}
let known = decided
.iter()
.find(|(seen, _)| Arc::ptr_eq(seen, &produced))
.map(|(_, verdict)| *verdict);
known.unwrap_or_else(|| {
let verdict = lineage_verdict(&produced, project);
decided.push((produced, verdict));
verdict
})
}
Err(refused) => {
lineage = lineage.map(|_| Lineage::Unknown);
refused
}
};
verdicts.push(verdict);
}
if let Some(slot) = &derive {
*slot.borrow_mut() = lineage;
}
verdicts
}
#[cfg(test)]
pub(crate) struct Bounds;
#[cfg(test)]
pub(crate) fn bound_for_test(max_entries: usize, max_age: Duration) -> Bounds {
let mut register = register();
register.entries.clear();
register.max_entries = max_entries;
register.max_age = max_age;
forget_parts();
Bounds
}
#[cfg(test)]
pub(crate) fn forget_sealed_items_for_test() {
register().entries.clear();
}
#[cfg(test)]
pub(crate) fn restart_for_test() {
let mut register = register();
register.entries.clear();
register.loaded = false;
drop(register);
let mut parts = parts();
parts.known.clear();
parts.order.clear();
parts.loaded = false;
}
#[cfg(test)]
fn forget_parts() {
let mut parts = parts();
parts.known.clear();
parts.order.clear();
}
#[cfg(test)]
impl Drop for Bounds {
fn drop(&mut self) {
let mut register = register();
register.entries.clear();
register.max_entries = MAX_ENTRIES;
register.max_age = MAX_AGE;
forget_parts();
}
}
fn strings(value: &Value, depth: usize, visit: &mut dyn FnMut(&str)) {
if depth > 64 {
return;
}
match value {
Value::String(text) => visit(text),
Value::Array(elements) => {
for element in elements {
strings(element, depth + 1, visit);
}
}
Value::Object(members) => {
for member in members.values() {
strings(member, depth + 1, visit);
}
}
_ => {}
}
}
fn append(whole: &mut String, piece: &str) {
if whole.len() + piece.len() <= MAX_LINE_BYTES {
whole.push_str(piece);
}
}
#[derive(Default)]
struct StreamedBlock {
signature: String,
text: String,
thinking: String,
input: String,
}
fn kind(value: &Value) -> Option<&str> {
value.get("type").and_then(Value::as_str)
}
fn text_member<'a>(value: &'a Value, member: &str) -> Option<&'a str> {
value.get(member).and_then(Value::as_str)
}
fn each(value: Option<&Value>, visit: &mut dyn FnMut(&Value)) {
for element in value.and_then(Value::as_array).into_iter().flatten() {
visit(element);
}
}
pub(crate) struct Recorder {
producer: SealedProducer,
line: Vec<u8>,
blocks: HashMap<u64, StreamedBlock>,
gemini_text: HashMap<(usize, bool), String>,
}
impl Drop for Recorder {
fn drop(&mut self) {
for text in std::mem::take(&mut self.gemini_text).into_values() {
self.part(&text);
}
}
}
const MAX_LINE_BYTES: usize = 8 * 1024 * 1024;
impl Recorder {
pub(crate) fn new(producer: SealedProducer) -> Self {
Self {
producer,
line: Vec::new(),
blocks: HashMap::new(),
gemini_text: HashMap::new(),
}
}
fn part(&self, text: &str) {
if let Some(lineage) = &self.producer.lineage
&& !text.is_empty()
{
record_part(&self.producer.context, text, lineage);
}
}
fn parts_of(&self, produced: &Value) {
if self.producer.lineage.is_some() {
strings(produced, 0, &mut |text| self.part(text));
}
}
pub(crate) fn observe_body(&mut self, body: &[u8]) {
match serde_json::from_slice::<Value>(body) {
Ok(Value::Array(chunks)) => {
for chunk in &chunks {
self.observe(chunk);
}
}
Ok(document) => self.observe(&document),
Err(_) => {}
}
}
pub(crate) fn feed_eventstream(&mut self, chunk: &[u8]) {
use base64::{Engine as _, engine::general_purpose::STANDARD};
const PRELUDE: usize = 12;
const OVERHEAD: usize = 16;
self.line.extend_from_slice(chunk);
loop {
if self.line.len() < PRELUDE {
return;
}
let word = |at: usize| {
u32::from_be_bytes([
self.line[at],
self.line[at + 1],
self.line[at + 2],
self.line[at + 3],
])
};
let total = word(0) as usize;
let headers = word(4) as usize;
if !(OVERHEAD..=MAX_LINE_BYTES).contains(&total) || headers > total - OVERHEAD {
self.line.clear();
return;
}
if self.line.len() < total {
return;
}
let frame: Vec<u8> = self.line.drain(..total).collect();
let checksum = |at: usize| {
u32::from_be_bytes([frame[at], frame[at + 1], frame[at + 2], frame[at + 3]])
};
if super::bedrock::crc32(&frame[..8]) != checksum(8)
|| super::bedrock::crc32(&frame[..total - 4]) != checksum(total - 4)
{
continue;
}
let Ok(payload) = serde_json::from_slice::<Value>(&frame[PRELUDE + headers..total - 4])
else {
continue;
};
let wrapped = text_member(&payload, "bytes")
.and_then(|encoded| STANDARD.decode(encoded).ok())
.and_then(|event| serde_json::from_slice::<Value>(&event).ok());
self.observe(wrapped.as_ref().unwrap_or(&payload));
}
}
pub(crate) fn feed(&mut self, chunk: &[u8]) {
for &byte in chunk {
if byte != b'\n' {
if self.line.len() < MAX_LINE_BYTES {
self.line.push(byte);
}
continue;
}
let line = std::mem::take(&mut self.line);
let Ok(line) = std::str::from_utf8(&line) else {
continue;
};
let payload = line.strip_prefix("data:").unwrap_or(line).trim();
if payload.starts_with('{')
&& let Ok(event) = serde_json::from_str::<Value>(payload)
{
self.observe(&event);
}
}
}
fn seal(&self, sealed: Option<&str>) {
if let Some(sealed) = sealed {
record(&self.producer, sealed);
}
}
fn anthropic_block(&self, block: &Value) {
self.parts_of(block);
match kind(block) {
Some("thinking") => self.seal(text_member(block, "signature")),
Some("redacted_thinking") => self.seal(text_member(block, "data")),
_ => {}
}
}
fn openai_item(&self, item: &Value) {
self.parts_of(item);
match kind(item) {
Some("reasoning" | "compaction") => self.seal(text_member(item, "encrypted_content")),
Some("program") => self.seal(text_member(item, "fingerprint")),
_ => {}
}
}
fn gemini_part(&mut self, candidate: usize, part: &Value) {
self.parts_of(part);
if self.producer.lineage.is_some()
&& let Some(text) = text_member(part, "text")
{
let thought = part.get("thought").and_then(Value::as_bool) == Some(true);
append(
self.gemini_text.entry((candidate, thought)).or_default(),
text,
);
}
if ["functionCall", "function_call", "text"]
.iter()
.any(|member| part.get(*member).is_some())
{
self.seal(
text_member(part, "thoughtSignature")
.or_else(|| text_member(part, "thought_signature")),
);
}
}
fn observe(&mut self, document: &Value) {
each(document.get("content"), &mut |block| {
self.anthropic_block(block);
});
each(document.get("output"), &mut |item| self.openai_item(item));
let candidates = document.get("candidates").and_then(Value::as_array);
for (index, candidate) in candidates.into_iter().flatten().enumerate() {
let parts = candidate
.pointer("/content/parts")
.and_then(Value::as_array);
for part in parts.into_iter().flatten() {
self.gemini_part(index, part);
}
}
if let Some(item) = document.get("item")
&& kind(document) == Some("response.output_item.done")
{
self.openai_item(item);
}
each(document.pointer("/response/output"), &mut |item| {
self.openai_item(item);
});
let index = document.get("index").and_then(Value::as_u64);
match (kind(document), index) {
(Some("content_block_start"), _) => {
if let Some(block) = document.get("content_block") {
self.anthropic_block(block);
}
}
(Some("content_block_delta"), Some(index)) => {
if let Some(delta) = document.get("delta") {
let block = self.blocks.entry(index).or_default();
let piece = |member: &str| text_member(delta, member).unwrap_or_default();
match kind(delta) {
Some("signature_delta") => append(&mut block.signature, piece("signature")),
Some("text_delta") => append(&mut block.text, piece("text")),
Some("thinking_delta") => append(&mut block.thinking, piece("thinking")),
Some("input_json_delta") => append(&mut block.input, piece("partial_json")),
_ => {}
}
}
}
(Some("content_block_stop"), Some(index)) => {
if let Some(block) = self.blocks.remove(&index) {
if !block.signature.is_empty() {
self.seal(Some(&block.signature));
}
self.part(&block.text);
self.part(&block.thinking);
if let Ok(input) = serde_json::from_str::<Value>(&block.input) {
self.parts_of(&input);
}
}
}
_ => {}
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use lean_ctx::core::context_admission::egress::SealedPart;
fn producer(origin: &str) -> SealedProducer {
let target = EgressTarget {
provider: "Anthropic",
model: None,
upstream_base: origin,
};
let binding = TrustedDestinationBinding::default();
let admission =
crate::admitted::admit(crate::admitted::Payload::Opaque(0), &target, binding)
.expect("an empty payload is admitted");
SealedProducer {
context: SealedContext::new(&target, binding, None, None),
authority: Arc::new(admission.into_authority()),
lineage: Some(Arc::new(Lineage::Complete(None))),
}
}
fn asks(context: &SealedContext) -> impl Fn(&str) -> SealedVerdict {
let resolve = resolver(context.clone(), None, None);
move |sealed| {
resolve(&SealedRequest {
items: &[sealed.to_owned()],
parts: &[],
server_state: false,
})[0]
}
}
fn derived(context: &SealedContext, parts: &[(PartKind, &str)], server_state: bool) -> Lineage {
derived_in(context, parts, server_state, None)
}
fn derived_in(
context: &SealedContext,
parts: &[(PartKind, &str)],
server_state: bool,
project: Option<&Path>,
) -> Lineage {
let parts: Vec<SealedPart> = parts
.iter()
.map(|(kind, text)| SealedPart {
kind: *kind,
digest: lean_ctx::core::archive::delivered::digest(text),
})
.collect();
let slot: LineageSlot = Rc::new(RefCell::new(None));
let project = project.map(Path::to_path_buf);
let resolve = resolver(context.clone(), Some(Rc::clone(&slot)), project);
resolve(&SealedRequest {
items: &[],
parts: &parts,
server_state,
});
slot.take().expect("the caller stage derives a lineage")
}
#[test]
#[serial_test::serial(cache_telemetry)]
fn known_origin_without_a_complete_lineage_never_grants() {
let _data = lean_ctx::core::data_dir::isolated_data_dir();
let _community = lean_ctx::core::policy::runtime::TestPolicyOverride::set(None);
let _bounds = bound_for_test(64, Duration::from_mins(1));
let complete = producer("http://127.0.0.1:9");
let verdict = asks(&complete.context);
for (lineage, sealed, expected) in [
(None, "no-lineage", SealedVerdict::SourceAuthorityUnknown),
(
Some(Lineage::Unknown),
"unknown-lineage",
SealedVerdict::SourceAuthorityUnknown,
),
(
Some(Lineage::Complete(None)),
"host-text-only",
SealedVerdict::ReturnedToOrigin,
),
] {
let producer = SealedProducer {
lineage: lineage.map(Arc::new),
..complete.clone()
};
record(&producer, sealed);
assert_eq!(verdict(sealed), expected, "{sealed}");
}
assert_eq!(verdict("never-recorded"), SealedVerdict::UnknownOrigin);
}
#[test]
#[serial_test::serial(cache_telemetry)]
fn kept_items_survive_a_restart_and_tampered_records_are_not_loaded() {
let _data = lean_ctx::core::data_dir::isolated_data_dir();
let _community = lean_ctx::core::policy::runtime::TestPolicyOverride::set(None);
let _bounds = bound_for_test(64, Duration::from_mins(1));
let kept = producer("http://127.0.0.1:9");
let verdict = asks(&kept.context);
record(&kept, "kept-item");
restart_for_test();
assert_eq!(
verdict("kept-item"),
SealedVerdict::ReturnedToOrigin,
"loaded after a restart"
);
let store = lean_ctx::core::data_dir::lean_ctx_data_dir()
.expect("data dir")
.join("archives")
.join("sealed-origin");
let mut tampered = 0;
for shard in std::fs::read_dir(&store).expect("the register was written") {
let path = shard.expect("shard").path();
if path.extension().is_none_or(|extension| extension != "json") {
continue;
}
let mut document: Value =
serde_json::from_str(&std::fs::read_to_string(&path).expect("shard")).unwrap();
for entry in document["entries"].as_object_mut().unwrap().values_mut() {
for record in entry["value"].as_array_mut().unwrap() {
let body = record["body"].as_str().unwrap().to_owned();
record["body"] = Value::String(format!("{body} "));
tampered += 1;
}
}
std::fs::write(&path, document.to_string()).expect("tamper");
}
assert_eq!(tampered, 1);
restart_for_test();
assert_eq!(verdict("kept-item"), SealedVerdict::UnknownOrigin);
}
#[test]
#[serial_test::serial(cache_telemetry)]
fn request_lineage_is_complete_only_when_every_part_is_bound() {
let _data = lean_ctx::core::data_dir::isolated_data_dir();
let _community = lean_ctx::core::policy::runtime::TestPolicyOverride::set(None);
let _bounds = bound_for_test(64, Duration::from_mins(1));
let producer = producer("http://127.0.0.1:9");
let context = &producer.context;
engine::reset();
let no_sources = |lineage: Lineage| matches!(lineage, Lineage::Complete(None));
assert!(no_sources(derived(context, &[], false)));
assert!(derived(context, &[], true).is_unknown());
assert!(
derived(context, &[(PartKind::Assistant, "the answer")], false).is_unknown(),
"no recorded response produced this text"
);
assert!(
derived(context, &[(PartKind::Source, "tool output")], false).is_unknown(),
"the Engine has no record of this text"
);
engine::deliver("tool output", engine::Sources::presented("object://unit"));
let root = tempfile::tempdir().expect("project");
let bound = [(PartKind::Source, "tool output")];
assert!(matches!(
derived_in(context, &bound, false, Some(root.path())),
Lineage::Complete(Some(_))
));
assert!(derived(context, &bound, false).is_unknown());
engine::reset();
let mut whole = Recorder::new(producer.clone());
whole.observe_body(
br#"{"content":[{"type":"text","text":"the answer"},
{"type":"tool_use","id":"t1","name":"read","input":{"path":"src/lib.rs"}}]}"#,
);
let mut streamed = Recorder::new(producer.clone());
for event in [
r#"{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"streamed "}}"#,
r#"{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"answer"}}"#,
r#"{"type":"content_block_stop","index":0}"#,
r#"{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"path\":\"src/"}}"#,
r#"{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"main.rs\"}"}}"#,
r#"{"type":"content_block_stop","index":1}"#,
] {
streamed.feed(format!("data: {event}\n\n").as_bytes());
}
for produced in ["the answer", "src/lib.rs", "streamed answer", "src/main.rs"] {
let lineage = derived(context, &[(PartKind::Assistant, produced)], false);
assert!(no_sources(lineage), "{produced}");
}
assert!(
derived(context, &[(PartKind::Assistant, "streamed ")], false).is_unknown(),
"a piece of a streamed text is not what a client returns"
);
let elsewhere = self::producer("http://127.0.0.1:10");
let foreign = derived(
&elsewhere.context,
&[(PartKind::Assistant, "the answer")],
false,
);
assert!(foreign.is_unknown(), "produced for another context");
let unbound = SealedProducer {
lineage: Some(Arc::new(Lineage::Unknown)),
..producer.clone()
};
Recorder::new(unbound.clone())
.observe_body(br#"{"content":[{"type":"text","text":"the answer"}]}"#);
assert!(derived(context, &[(PartKind::Assistant, "the answer")], false).is_unknown());
record(&unbound, "sealed-under-unknown");
let slot: LineageSlot = Rc::new(RefCell::new(None));
let verdicts = resolver(context.clone(), Some(Rc::clone(&slot)), None)(&SealedRequest {
items: &["sealed-under-unknown".to_owned()],
parts: &[],
server_state: false,
});
assert_eq!(verdicts, [SealedVerdict::SourceAuthorityUnknown]);
assert!(matches!(slot.take(), Some(Lineage::Unknown)));
}
#[test]
#[serial_test::serial(cache_telemetry)]
fn sealed_items_are_recorded_from_provider_shapes_only() {
let _data = lean_ctx::core::data_dir::isolated_data_dir();
let _community = lean_ctx::core::policy::runtime::TestPolicyOverride::set(None);
let _bounds = bound_for_test(64, Duration::from_mins(1));
let producer = producer("http://127.0.0.1:9");
let verdict = asks(&producer.context);
let mut whole = Recorder::new(producer.clone());
whole.observe_body(
br#"{"content":[{"type":"thinking","thinking":"t","signature":"anthropic-sig"},
{"type":"redacted_thinking","data":"anthropic-data"},
{"type":"text","text":"x","signature":"namesake"}],
"output":[{"type":"reasoning","encrypted_content":"openai-reasoning"},
{"type":"compaction","encrypted_content":"openai-compaction"},
{"type":"program","fingerprint":"openai-program"},
{"type":"message","encrypted_content":"namesake-item"}],
"candidates":[{"content":{"parts":[
{"functionCall":{"name":"f","args":{}},"thoughtSignature":"gemini-sig"},
{"inlineData":{},"thoughtSignature":"namesake-part"}]}}]}"#,
);
let mut streamed = Recorder::new(producer.clone());
for chunk in [
&b"event: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,"[..],
b"\"delta\":{\"type\":\"signature_delta\",\"signature\":\"stream-\"}}\n\n",
b"data: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"signature_delta\",\"signature\":\"sig\"}}\n",
b"data: {\"type\":\"content_block_stop\",\"index\":0}\n",
b"data: {\"type\":\"response.output_item.done\",\"item\":{\"type\":\"reasoning\",\"encrypted_content\":\"stream-reasoning\"}}\n",
] {
streamed.feed(chunk);
}
for recorded in [
"anthropic-sig",
"anthropic-data",
"openai-reasoning",
"openai-compaction",
"openai-program",
"gemini-sig",
"stream-sig",
"stream-reasoning",
] {
assert_eq!(
verdict(recorded),
SealedVerdict::ReturnedToOrigin,
"{recorded}"
);
}
for unknown in [
"namesake",
"namesake-item",
"namesake-part",
"stream-",
"sig",
] {
assert_eq!(verdict(unknown), SealedVerdict::UnknownOrigin, "{unknown}");
}
}
fn frame(payload: &[u8]) -> Vec<u8> {
let total = u32::try_from(payload.len() + 16).unwrap();
let mut frame = total.to_be_bytes().to_vec();
frame.extend_from_slice(&0_u32.to_be_bytes());
let prelude = crate::bedrock::crc32(&frame);
frame.extend_from_slice(&prelude.to_be_bytes());
frame.extend_from_slice(payload);
let message = crate::bedrock::crc32(&frame);
frame.extend_from_slice(&message.to_be_bytes());
frame
}
fn bedrock_event(event: &Value) -> Vec<u8> {
use base64::{Engine as _, engine::general_purpose::STANDARD};
let wrapped = serde_json::json!({ "bytes": STANDARD.encode(event.to_string()) });
frame(wrapped.to_string().as_bytes())
}
#[test]
#[serial_test::serial(cache_telemetry)]
fn bedrock_eventstream_frames_record_sealed_items_only_when_complete() {
let _data = lean_ctx::core::data_dir::isolated_data_dir();
let _community = lean_ctx::core::policy::runtime::TestPolicyOverride::set(None);
let _bounds = bound_for_test(64, Duration::from_mins(1));
let producer = producer("http://127.0.0.1:9");
let verdict = asks(&producer.context);
let other = self::producer("http://127.0.0.1:10");
let elsewhere = asks(&other.context);
let delta = |signature: &str| {
bedrock_event(&serde_json::json!({
"type": "content_block_delta", "index": 0,
"delta": {"type": "signature_delta", "signature": signature}
}))
};
let stop = bedrock_event(&serde_json::json!({"type": "content_block_stop", "index": 0}));
let mut stream = delta("bedrock-sig");
stream.extend_from_slice(&stop);
let mut recorder = Recorder::new(producer.clone());
let (first, second) = stream.split_at(stream.len() / 3);
recorder.feed_eventstream(first);
assert_eq!(verdict("bedrock-sig"), SealedVerdict::UnknownOrigin);
recorder.feed_eventstream(second);
assert_eq!(verdict("bedrock-sig"), SealedVerdict::ReturnedToOrigin);
assert_eq!(verdict("bedrock-sih"), SealedVerdict::UnknownOrigin);
assert_eq!(elsewhere("bedrock-sig"), SealedVerdict::UnknownOrigin);
let mut truncated = Recorder::new(producer.clone());
truncated.feed_eventstream(&delta("cut-short"));
truncated.feed_eventstream(&stop[..stop.len() - 3]);
assert_eq!(verdict("cut-short"), SealedVerdict::UnknownOrigin);
let mut damaged_frame = delta("damaged");
let middle = damaged_frame.len() / 2;
damaged_frame[middle] ^= 0x01;
let mut damaged = Recorder::new(producer.clone());
damaged.feed_eventstream(&damaged_frame);
damaged.feed_eventstream(&stop);
assert_eq!(verdict("damaged"), SealedVerdict::UnknownOrigin);
}
#[test]
#[serial_test::serial(cache_telemetry)]
fn gemini_array_response_records_sealed_items_only_when_complete() {
let _data = lean_ctx::core::data_dir::isolated_data_dir();
let _community = lean_ctx::core::policy::runtime::TestPolicyOverride::set(None);
let _bounds = bound_for_test(64, Duration::from_mins(1));
let producer = producer("http://127.0.0.1:9");
let verdict = asks(&producer.context);
let chunks = |signature: &str| {
serde_json::json!([
{"candidates": [{"content": {"role": "model", "parts": [{"text": "thinking"}]}}]},
{"candidates": [{"content": {"role": "model", "parts": [
{"functionCall": {"name": "lookup", "args": {}}, "thoughtSignature": signature}
]}}]}
])
.to_string()
};
let mut recorder = Recorder::new(producer.clone());
let whole = chunks("gemini-array-sig");
let cut = chunks("gemini-cut-sig");
recorder.observe_body(&cut.as_bytes()[..cut.len() - 4]);
recorder.observe_body(whole.as_bytes());
assert_eq!(verdict("gemini-array-sig"), SealedVerdict::ReturnedToOrigin);
assert_eq!(verdict("gemini-cut-sig"), SealedVerdict::UnknownOrigin);
}
}