diff --git a/apps/web/src/lib/composerContextRecords.test.ts b/apps/web/src/lib/composerContextRecords.test.ts index dff3f83a59554..9ac0eaf03d086 100644 --- a/apps/web/src/lib/composerContextRecords.test.ts +++ b/apps/web/src/lib/composerContextRecords.test.ts @@ -267,6 +267,12 @@ describe("composerContextRecords", () => { expect(restored.elements[0]?.id).toBe("el_1"); }); + it("clamps an oversized annotation comment so the record still decodes", () => { + const record = previewAnnotationContextRecord({ ...annotation, comment: "c".repeat(8_001) }); + expect(record.comment.endsWith("… truncated …")).toBe(true); + expect(decodeMessageContext({ version: 1, records: [record] }).records).toEqual([record]); + }); + it("removes an expired terminal chip by its kind-scoped id, not the producer id", () => { const context = { id: "term-1", diff --git a/apps/web/src/lib/composerContextRecords.ts b/apps/web/src/lib/composerContextRecords.ts index a7ae316b5c865..2c107349de525 100644 --- a/apps/web/src/lib/composerContextRecords.ts +++ b/apps/web/src/lib/composerContextRecords.ts @@ -3,6 +3,7 @@ import { sourceControlClients, } from "@t3tools/client-runtime/source-control-clients"; import { + COMPOSER_CONTEXT_PREVIEW_COMMENT_MAX_CHARS, COMPOSER_CONTEXT_REVIEW_DIFF_MAX_CHARS, COMPOSER_CONTEXT_REVIEW_TEXT_MAX_CHARS, COMPOSER_CONTEXT_TERMINAL_TEXT_MAX_CHARS, @@ -301,7 +302,10 @@ export function previewAnnotationContextRecord( annotationId: annotation.id, pageUrl: annotation.pageUrl, pageTitle: annotation.pageTitle, - comment: annotation.comment.trim(), + comment: clampContextText( + annotation.comment.trim(), + COMPOSER_CONTEXT_PREVIEW_COMMENT_MAX_CHARS, + ), targetSummary: previewAnnotationTargetSummary(annotation), styleChanges: annotation.styleChanges.map( (change) => `${change.property}: ${change.previousValue || "(unset)"} → ${change.value}`, diff --git a/packages/contracts/src/composerContext.ts b/packages/contracts/src/composerContext.ts index d30ab84b73880..982202b05bc30 100644 --- a/packages/contracts/src/composerContext.ts +++ b/packages/contracts/src/composerContext.ts @@ -42,7 +42,7 @@ const COMPOSER_CONTEXT_ELEMENT_HTML_MAX_CHARS = 8_000; const COMPOSER_CONTEXT_ELEMENT_STYLES_MAX_CHARS = 8_000; export const COMPOSER_CONTEXT_REVIEW_TEXT_MAX_CHARS = 16_000; export const COMPOSER_CONTEXT_REVIEW_DIFF_MAX_CHARS = 32_000; -const COMPOSER_CONTEXT_PREVIEW_COMMENT_MAX_CHARS = 8_000; +export const COMPOSER_CONTEXT_PREVIEW_COMMENT_MAX_CHARS = 8_000; export const ComposerContextId = TrimmedNonEmptyString.check( Schema.isMaxLength(CONTEXT_ID_MAX_CHARS),