From 80521bae92a7f53293130097fb6be21d6f4626e2 Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Fri, 18 Sep 2026 13:16:17 +0300 Subject: [PATCH] =?UTF-8?q?fix(zeroNotes):=20=D0=B3=D0=B5=D0=B9=D1=82=20?= =?UTF-8?q?=D0=BE=D1=82=20=D0=BE=D0=B1=D1=80=D0=B5=D0=B7=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=B0=20AI?= =?UTF-8?q?=20(=D0=BF=D1=83=D1=81=D1=82=D0=BE=D0=B9/=D0=BE=D0=B1=D0=BE?= =?UTF-8?q?=D1=80=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D1=82=20=D1=83=D0=BB=D0=B5=D1=82=D0=B0=D0=BB=20=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=B1=D0=BB=D0=B8=D0=BA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/zeroNotes.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/services/zeroNotes.js b/src/services/zeroNotes.js index 7cc2cbb..339d5bc 100644 --- a/src/services/zeroNotes.js +++ b/src/services/zeroNotes.js @@ -171,6 +171,19 @@ async function generateDraft(channelId, opts = {}) { .replace(/\s*```\s*$/i, '') .trim(); + // 5b. Защита от обрезанного ответа AI-шлюза: гейт возвращал коротким текстом + // без ошибки (например "Когда-то я дума"), и это тихо улетало в паблик. + // Считаем валидной заметку не короче 120 символов и заканчивающуюся на + // знак препинания/эмодзи (не оборванную на полуслове). + const MIN_NOTE_LEN = 120; + const endsCleanly = /[.!?…"»)\p{Emoji_Presentation}]\s*$/u.test(content); + if (content.length < MIN_NOTE_LEN || !endsCleanly) { + throw new Error( + `AI вернул обрезанный/подозрительно короткий текст (${content.length} симв., ` + + `конец="${content.slice(-20)}"). Черновик НЕ сохранён, генерацию нужно перезапустить.` + ); + } + // 6. Подбираем позу Зеро по тексту const pose = zeroChar.pickPose({ title: prompt.themeHint,