refactor: isolate Feature System input migration and compaction policy

This commit is contained in:
2026-10-20 03:21:22 +09:00
parent bb5c50f9ab
commit 6e729ed06c
27 changed files with 2226 additions and 646 deletions
@@ -547,30 +547,40 @@ async fn backend_real_runtime_journal_release_and_next_body_persisted_startup()
let segments = session.list_segments(session_id).unwrap();
assert_eq!(segments.len(), 1);
let entries = session.read_all_read_only(session_id, segments[0]).unwrap();
#[derive(serde::Deserialize)]
struct SavedJournal {
snapshot: serde_json::Value,
snapshot_sha256: String,
prompt_provenance: session_store::PromptRenderProvenance,
}
let startup: Vec<_> = entries
.iter()
.enumerate()
.filter_map(|(index, log)| match log {
session_store::LogEntry::AnnotatedSystemItem { entry, .. } => match &entry.item {
session_store::SystemItem::JournalStartup {
snapshot,
snapshot_sha256,
body,
prompt_provenance,
} => Some((index, snapshot, snapshot_sha256, body, prompt_provenance)),
_ => None,
},
_ => None,
.filter_map(|(index, log)| {
let session_store::LogEntry::AnnotatedSystemItem { entry, .. } = log else {
return None;
};
let payload = entry
.metadata
.system_input
.as_ref()?
.feature_payload()?
.decode::<SavedJournal>("journal:startup", 1)
.ok()?;
Some((index, payload, entry.item.history_text()))
})
.collect();
assert_eq!(startup.len(), 1, "startup must be durably committed once");
let (startup_index, snapshot, digest, body, provenance) = startup[0];
let (startup_index, payload, body) = &startup[0];
let snapshot = &payload.snapshot;
let digest = &payload.snapshot_sha256;
let provenance = &payload.prompt_provenance;
let first_input = entries
.iter()
.position(|entry| matches!(entry, session_store::LogEntry::AnnotatedUserInput { .. }))
.expect("new body persisted its initial human input");
assert!(
startup_index < first_input,
*startup_index < first_input,
"startup reference must be persisted before the first human input/model request"
);
assert_eq!(snapshot["subject_id"], subject.id);