im: extract the IM delivery layer into the santi-im crate #43

Merged
PerishFire merged 1 commit from split-im-crate into main 2026-07-21 05:41:11 +00:00
Owner

Phase C first cut. The delete-and-re-add test showed IM is a peripheral feature (delete it, core still ingests), so it re-adds cleanly as a layer between adaptor and core. santi-im holds the IM logic as free fns taking &Connection + the Reply struct; depends only on rusqlite + santi-model. core's store/im.rs shrinks to thin SantiStore forwarders and re-exports Reply/enqueue_turn_in/deliveries_for_receipt_in so receipts/completion resolve unchanged. Public method surface byte-identical -> /im OpenAPI + all callers untouched. 0 faults, core 0, 44 test groups green.

Phase C first cut. The delete-and-re-add test showed IM is a peripheral feature (delete it, core still ingests), so it re-adds cleanly as a layer between adaptor and core. santi-im holds the IM logic as free fns taking &Connection + the Reply struct; depends only on rusqlite + santi-model. core's store/im.rs shrinks to thin SantiStore forwarders and re-exports Reply/enqueue_turn_in/deliveries_for_receipt_in so receipts/completion resolve unchanged. Public method surface byte-identical -> /im OpenAPI + all callers untouched. 0 faults, core 0, 44 test groups green.
im: extract the IM delivery layer into the santi-im crate
All checks were successful
guard / guard (pull_request) Successful in 2m9s
2518859f89
Phase C, first cut. The delete-and-re-add test showed IM is a peripheral
feature, not core spine: delete it and core still ingests messages, so it
re-adds cleanly as a layer between the adaptor and core rather than a
sibling of core. Its impl SantiStore was incidental convenience for the
shared Connection, not essential.

santi-im holds the IM logic as free functions taking &Connection (ensure_
participant, enqueue_inbox, poll_inbox, participant_for_strand, the
enqueue_turn_in reply primitive, deliveries_for_receipt_in) plus the Reply
input struct. It depends only on rusqlite + santi-model -- it does not even
need the adaptor, since it operates on a connection core hands it. core's
store/im.rs shrinks to thin SantiStore forwarders that lock the connection
and call the crate, and re-exports Reply / enqueue_turn_in /
deliveries_for_receipt_in so store::im::* paths in receipts.rs and
turns/completion.rs (the lone core->im edges, called in-transaction) resolve
unchanged. SantiStore's public method surface is byte-identical, so the /im
OpenAPI and every api/service/test caller are untouched.

WIRE_PATH gains santi-im/. 0 faults, core debt 0, 44 workspace test groups
green. internal debt +1 (a new free-fn name) -- a non-blocking warn by
design, not a gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PerishFire deleted branch split-im-crate 2026-07-21 05:41:11 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
PerishFire/santi!43
No description provided.