feat(email): Slice 3 persist quarantined inline media - #1399
Conversation
Prove buyer-visible persist of tracking_pixel, unsupported_media, and unresolved_cid_reference from admit/resolve outcomes, including parse_eml wiring, idempotent re-parse, fail-closed persist, and the 0018 Alembic revision shape. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Record tracking_pixel, unsupported_media, and unresolved_cid_reference from resolve_email_inline_media on the parse_eml path. Upsert purpose-bound rows without image bytes, body, or remote URLs. Fail closed if persist fails so a tracker cannot continue as document_image. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Document the closed persist set, purpose-bound columns, fail-closed re-parse upsert, and customer next-action copy for withheld inline media. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
|
Warning Review limit reached
Next review available in: 14 minutes Limit details: You’ve used all 1 included review currently available under your plan. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (14)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
PR governance metadata gate is not ready for
|
|
@coderabbitai review Please review the unchanged exact current head |
|
|
|
@coderabbitai review Please review the unchanged exact current head |
|
|
Normal merge of cursor/email-media-quarantine-persist-0ad6 @ ff1dc18 into cursor/email-media-quarantine-ui-5fff. Not a squash. Not a force-push. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Description
#1350 Slice 3 follow-on stacked on Draft #1398. Wiring drops
tracking_pixel/unsupported_media/unresolved_cid_referencefrom filename-bearing image attachments, but nothing durable recorded that quarantine. A later parse of the same message could lose the operator/customer next-action.This draft persists those already-produced admission/resolution outcomes into
email_media_quarantine_recordson the existingparse_eml/parse_eml_bytes/resolve_email_inline_mediapath (and on import/IMAP save after theemail_recordsrow is flushed). Only the closed error_code set is stored.document_imageis never a quarantine. Re-parse is an idempotent upsert. Persist failure is fail-closed. No OCR, VLM, NewsDOM, egress, or #1376EmailMediaArtifactpixel contract.Exact previous head:
0bc7f62c2bcdfe273ff75e2b96067ab29f4ab0da(stale parentdb9688768cb682edbc0195913e8ae9b0e1551dfb)Exact current head:
ff1dc18cd9de5e06649ac516b163af2db4bbde83Exact parent SHA (live #1398 head):
1af546dbb01964e9a620ed341ae0dd3dab9439fdLive #1397 / develop:
37b4af566d749028f7dc99545fff1db517d61d1a/dd8d15191338b841f9e6f3a06507c6a5643b95d0Predecessor evidence does not transfer. The previous persist-head tests, coverage, and review evidence, and #1398 / #1397 predecessor-head evidence, are not this head's proof. Re-run the focused persist tests on this exact head.
Refs #1350
Customer next action
Tell the customer what was withheld and why. Example: "This inline image was withheld as a tracking pixel. It was not sent to a model." Do not send a tracker, unsupported part, or unresolved CID to a model. Do not merge this draft until it is no longer Draft and a qualifying independent APPROVE exists on the unchanged head. Keep #1398 and #1397 Draft as well.
Type of change
Exact-head verification
Retarget: normal merge
ff1dc18cof live #1398 (cursor/email-media-admission-wiring-cd1a@1af546db, which already contains #1397 @37b4af56/develop@dd8d1519) intocursor/email-media-quarantine-persist-0ad6. Not a squash. Not a force-push of develop. #1400 was not retargeted.Focused product tests on this exact head:
Owned persist module coverage on this exact head:
Local count on
ff1dc18c: 92 passed. Predecessor-head #1398 / #1397 / previous #1399 figures do not transfer.Checklist:
Merge boundary
This PR must remain Draft. Merge is prohibited while Draft and prohibited without a qualifying independent non-author APPROVE on the unchanged head. Do not self-approve, mark Ready, squash-merge over a draft, merge #1398 or #1397, or treat predecessor/stacked/#1376 evidence as this head's proof.