From b2b545344a4acc6e61a1470224a44ae1e24917ef Mon Sep 17 00:00:00 2001 From: min Date: Tue, 2 Jun 2026 20:09:36 +0300 Subject: [PATCH] =?UTF-8?q?fix(11):=20guard=20=D0=BE=D1=82=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=B8=20userModels/scripts=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=B0=D0=B2=D1=82=D0=BE=D1=81=D0=B5=D0=B9=D0=B2=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При частичной загрузке сцены (terrain догрузился, модели/скрипты ещё нет из-за таймаута) автосейв затирал scene нулями. Блокируем сейв если ранее загружено >0 объектов, а сейчас 0 и пользователь не редактировал; loadFailedRef в safety-timer блокирует автосейв при таймауте загрузки. Co-Authored-By: Claude Opus 4.8 --- src/editor/KubikonEditor.jsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/editor/KubikonEditor.jsx b/src/editor/KubikonEditor.jsx index 54842ef..ea8fc60 100644 --- a/src/editor/KubikonEditor.jsx +++ b/src/editor/KubikonEditor.jsx @@ -549,6 +549,12 @@ const KubikonEditor = () => { // не отработал, или setSceneLoading(false) попал в обход (race). const safetyTimer = setTimeout(() => { console.warn('[KubikonEditor] safety timer: forcing setSceneLoading(false) after 60s'); + // Загрузка не завершилась штатно за 60с (медленная сеть / таймаут + // getProject / частично загруженные модели) → помечаем как СБОЙ + // загрузки, чтобы автосейв НЕ затёр проект частичной/пустой сценой. + // Без этого terrain мог загрузиться частично (напр. 3 из 13173) и + // автосейв писал эту пустышку в БД (инцидент 2026-06-02). + loadFailedRef.current = true; setSceneLoading(false); }, 60000); return () => {