Skip to content

Say which parts carry translations and when body and translations can differ - #745

Open
yasser-aboelgheit-intercom wants to merge 3 commits into
mainfrom
yasser/preview-translations-notes
Open

yasser-aboelgheit-intercom wants to merge 3 commits into
mainfrom
yasser/preview-translations-notes

Conversation

@yasser-aboelgheit-intercom

@yasser-aboelgheit-intercom yasser-aboelgheit-intercom commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Why?

The Preview translations description doesn't say which parts carry the field, so readers may expect it on contact replies too. It also doesn't mention that translations and body can disagree, which looks like a bug if you don't know why.

How?

Adds two sentences to the shared description on conversation parts, ticket parts and ticket replies: the field is null or left out on contact parts, and for parts created with a plain-text body the two can differ because translations is built from the part's content blocks.

Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this. I checked it with the spec comparator, ref checks, and fern check (0 errors, no new warnings), and checked each claim against how the API behaves.

A few questions:

  1. "Only present on parts authored by an admin or bot" — Contact parts never get translations, so the gate is right. But when you retrieve a conversation, contact parts come back with "translations": null rather than without the key. The key is left out only in search results, ticket part lists and ticket replies. Could this say "null or omitted on parts from a contact"? Admin parts can also be null, for example when there are no locales or the part is a rating request.
  2. Can briefly differ — Confirmed. Translations are rendered on every request, while body can come from the stored copy. No change needed.

Holding approval for the wording in item 1.

~ Automated via Claude

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the follow-up. I re-ran the spec comparator, ref checks and fern check (0 errors, same warnings as main), and rechecked the new sentence against how the API behaves.

Earlier item 1 (contact parts) is resolved. "Can be null or omitted, and always is on parts from a contact" matches the API: contact parts never get translations, conversation retrieve returns them as null, and search results, ticket part lists and ticket replies leave the key out. Item 2 was already confirmed. Nothing is wrong with the new wording, and nothing is still open.

Not approving only because this is my own PR.

~ Automated via Claude

@yasser-aboelgheit-intercom
yasser-aboelgheit-intercom requested a review from a team October 27, 2026 13:58

@cathalging cathalging left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Translations: one claim I couldn't confirm

The rest checks out:

  • translations is null or left out on parts from a contact.
  • It's sent as null on retrieve and left out elsewhere.
  • Only descriptions change, so there's no SDK impact.

Question: where does the "briefly differ" come from?

L36431-36432, L45533-45534 and L45732-45733 say:

The translations are rendered on every request while body can come from a cached copy, so the two can briefly differ.

I couldn't find a cache behind body on the REST endpoints. Retrieving a conversation loads its parts directly and renders body and translations from the same record in the same request. The one difference I found isn't brief. For parts created with a plain-text body, body comes from that stored text while translations is rendered from the part's content blocks, so the two can differ for as long as the part exists.

Could you point to the cache this refers to? If there isn't one, I'd suggest describing the lasting difference instead, and applying the same change to the companion reference.

~ Automated via Claude

There is no cache behind body on the REST endpoints. For parts created
with a plain-text body, body returns that text while translations are
built from the part's content blocks, so the two can differ.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@yasser-aboelgheit-intercom yasser-aboelgheit-intercom changed the title Say which parts carry translations and that body can briefly lag Say which parts carry translations and when body and translations can differ Oct 27, 2026
@yasser-aboelgheit-intercom

Copy link
Copy Markdown
Contributor Author

Thanks, you're right: there's no cache behind body on the REST endpoints. I've replaced the sentence in all three places with the lasting difference: for parts created with a plain-text body, body returns that text while the translations are built from the part's content blocks, so the two can differ. The same change is going into the companion reference.

~ Automated via Claude

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants