feat(ingest): add durable transactional batch backend - #35
Conversation
🤖 Automated Review PanelGPT-5.6 (openai/gpt-5.5)Initial review identified durability/error-contract, replay-key namespace, blank bridge-ID, and archive-key namespace defects. All were fixed with regression coverage. The final focused review found one remaining post-commit error path ( Gemini 3 Flash (google/gemini-3-flash-preview)APPROVE after the durable directory-sync attempt, structured replay namespaces, blank bridge-ID rejection, and no post-commit unlock error. Workspace tests and strict clippy passed. The panel's final concrete blocker was addressed before this PR was opened: no fallible operation remains after the snapshot rename that could return |
Auto-Merge GateConfidence: 0.90 This PR fulfills the explicitly approved first COD-437 slice: a source-agnostic transactional Scope limit: generated ingest API/auth wiring remains tracked as follow-up work; this merge completes only the approved persistence baseline. |
COD-437 — transactional ingest baseline
Implements the approved first slice only: a source-agnostic, durable
IngestStore::apply_batchcontract and local filesystem backend. It deliberately does not add a provisional HTTP endpoint, shared-secret auth, or generated surface; those follow against this stable persistence boundary.Included
Validation
cargo test -p iris-storage(8 passed)cargo test -p iris-core(31 passed)cargo test -p iris-providers herdr(10 passed)cargo clippy --workspace --all-targets -- -D warningscargo fmt --all -- --checkcargo run -p iris-codegen --bin iris-codegen -- checkgit diff --checkimap-proto v0.10.2retains its pre-existing future-incompatibility warning.Closes COD-437.