feat(email): Slice 3 buyer-visible withheld-media next actions - #1400
feat(email): Slice 3 buyer-visible withheld-media next actions#1400seonghobae wants to merge 3 commits into
Conversation
Read already-persisted email_media_quarantine_records through an
authenticated owner-scoped GET /api/emails/{email_id}/media-quarantine
and render the three buyer next-action strings on EmailDetail. Empty
lists fail closed. Withheld image bytes are not rendered.
Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Document the authenticated media-quarantine read, EmailDetail next-action copy, fail-closed empty list, and the merge-boundary that this stacked draft must stay Draft. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
|
Warning Review limit reached
Next review available in: 12 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 (12)
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 |
|
|
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>
|
@coderabbitai review Please review the unchanged exact current head |
|
|
|
Caution Review failedAn error occurred during the review process. Please try again later. 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 |
Description
#1350 Slice 3 follow-on stacked on Draft #1399. Quarantine rows now persist in
email_media_quarantine_records, but the mail UI did not tell the customer that an inline image was withheld and was not sent to a model.This draft adds an authenticated owner-scoped read of already-persisted rows and renders the next action on the existing
EmailDetailmail surface. It does not invent a second classifier, does not copy the #1376EmailMediaArtifactpixel contract, does not render withheld image bytes, and does not fetch remotehttp(s).Exact previous head:
d392fc742d9129eaddf615f2283e378270c1babc(stale parent0bc7f62c2bcdfe273ff75e2b96067ab29f4ab0da)Exact current head:
db7ca961de800a514cf9bee34d324f1c5cf233bbExact parent SHA (live #1399 head):
ff1dc18cd9de5e06649ac516b163af2db4bbde83Live #1398 / #1397 / develop:
1af546dbb01964e9a620ed341ae0dd3dab9439fd/37b4af566d749028f7dc99545fff1db517d61d1a/dd8d15191338b841f9e6f3a06507c6a5643b95d0Predecessor evidence does not transfer. The previous #1400 head tests, coverage, and review evidence, and #1399 / #1398 / #1397 predecessor-head evidence, are not this head's proof. Re-run the focused UI/API and persist/admission/resolution/parser tests on this exact head.
Refs #1350
Customer next action
Tell the customer what was withheld and what to do next. The mail detail surface now shows:
Empty persist sets fail closed to
{quarantine_records: []}and invent no withheld-media copy. 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 #1399, #1398, and #1397 Draft as well.Type of change
Exact-head verification
Retarget: normal merge
db7ca961of live #1399 (cursor/email-media-quarantine-persist-0ad6@ff1dc18c, which already contains #1398 @1af546db→ #1397 @37b4af56/develop@dd8d1519) intocursor/email-media-quarantine-ui-5fff. Not a squash. Not a force-push of develop.Focused product tests on this exact head:
Owned read-module coverage on this exact head:
Local counts on
db7ca961: 101 passed backend, 27 passed frontend. Predecessor-head #1400 / #1399 / #1398 / #1397 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 #1399, #1398, or #1397, or treat predecessor/stacked/#1376 evidence as this head's proof.