@@ -17,7 +17,7 @@ use chrono::Utc;
1717
1818use crate :: memory:: chunks:: {
1919 self , chunk_markdown, claim_source_ingest_tx, delete_source_ingest, get_chunk_lifecycle_status,
20- is_source_ingested, set_chunk_lifecycle_status, set_chunk_raw_refs, upsert_chunks ,
20+ is_source_ingested, set_chunk_lifecycle_status, set_chunk_raw_refs, upsert_staged_chunks_tx ,
2121 with_connection, ChunkerInput , ChunkerOptions , SourceKind , CHUNK_STATUS_PENDING_EXTRACTION ,
2222} ;
2323use crate :: memory:: config:: MemoryConfig ;
@@ -146,7 +146,7 @@ async fn persist_score_enqueue(
146146) -> Result < IngestSummary > {
147147 // 3. Write each chunk body to the content store (atomic write + sha256).
148148 let content_root = chunks:: content_root ( config) ;
149- content:: stage_chunks ( & content_root, & chunks)
149+ let staged = content:: stage_chunks ( & content_root, & chunks)
150150 . map_err ( |e| anyhow ! ( "stage_chunks failed: {e}" ) ) ?;
151151
152152 // 4. Snapshot each chunk's CURRENT lifecycle BEFORE the upsert. A chunk that
@@ -159,7 +159,12 @@ async fn persist_score_enqueue(
159159 }
160160
161161 // 5. Persist chunk rows (idempotent on deterministic chunk id).
162- let chunks_written = upsert_chunks ( config, & chunks) ?;
162+ let chunks_written = with_connection ( config, |connection| {
163+ let transaction = connection. unchecked_transaction ( ) ?;
164+ let count = upsert_staged_chunks_tx ( & transaction, & staged) ?;
165+ transaction. commit ( ) ?;
166+ Ok ( count)
167+ } ) ?;
163168
164169 // 5b. Raw-archive-backed bodies: attach refs so a worker can resolve them.
165170 if let Some ( refs) = opts. raw_refs . as_ref ( ) {
0 commit comments