Corbusier stores conversation messages as an append-only sequence. History is retrieved in sequence order via the message repository.
use corbusier::context::{CorrelationId, RequestContext, SessionId, UserId};
use corbusier::tenant::TenantId;
use corbusier::message::{
adapters::memory::InMemoryMessageRepository,
domain::{
ContentPart, ConversationId, Message, MessageMetadata, Role, SequenceNumber, TextPart,
},
ports::repository::MessageRepository,
};
use mockable::DefaultClock;
async fn load_history() -> Result<(), Box<dyn std::error::Error>> {
let repo = InMemoryMessageRepository::new();
let clock = DefaultClock;
let conversation_id = ConversationId::new();
let ctx = RequestContext::new(
TenantId::new(),
CorrelationId::new(),
UserId::new(),
SessionId::new(),
);
let message = Message::builder(conversation_id, Role::User, SequenceNumber::new(1))
.with_content(ContentPart::Text(TextPart::new("Hello")))
.with_metadata(MessageMetadata::with_agent_backend("claude"))
.build(&clock)?;
repo.store(&ctx, &message).await?;
let history = repo.find_by_conversation(&ctx, conversation_id).await?;
assert_eq!(history.len(), 1);
Ok(())
}