From 85119fd9a2bccc7142872e270950c693142cecae Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Sat, 26 Sep 2026 12:42:03 +0300 Subject: [PATCH] =?UTF-8?q?test:=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B8=D1=82=D1=8C=20=D0=B7=D0=B0=D1=89=D0=B8?= =?UTF-8?q?=D1=82=D1=83=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B0=20(#6?= =?UTF-8?q?60)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Предрелизный гейт снова держит лимит монолитного файла, а защитный мутант #648 привязан к новой формуле общего бюджета сцены и панели. Мутант предметно краснит smoke_sections_resize. Issue: #660 User-Visible: no --- docs/images/screenshots.json | 24 ++++++++++++------------ scripts/mutation-registry.mjs | 4 ++-- src/houseplan-card.ts | 7 ++----- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/docs/images/screenshots.json b/docs/images/screenshots.json index a90d9537..17a4b36e 100644 --- a/docs/images/screenshots.json +++ b/docs/images/screenshots.json @@ -3,7 +3,7 @@ "fixture": "synthetic-only", "chromium": "151.0.7922.34", "oxipng": null, - "sourceFingerprint": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceFingerprint": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "captureScriptSha256": "e2d14d89de793011615662af7c83c433768d4761f6cec7f0b3860c797494299e", "command": "npm run build && node demo/docs/capture.mjs", "scenarios": { @@ -15,7 +15,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "1bde1bff8d4ab5f197320b54ef57186b3c07cf2121d5414ada63ce357826bfa8" }, "view-touch": { @@ -26,7 +26,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "f9dd5b54f86b814c00bc84149af84485f052b103cdcc9263b5c50bf5d32c69d6" }, "space-create": { @@ -37,7 +37,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "aab4811bba3afa6cc849cb9d3989d126b8c327b69a2f8f853e55fc077e0e9a1b" }, "room-contour-close": { @@ -48,7 +48,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "e106ff9db6c96adb08beba12cc299a88ac5fa47c079be316f185e5657bc656f0" }, "plan-context-tray": { @@ -59,7 +59,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "9b0db923fa7c8aff783b5c7050ee5b410b1b04df81a9e48bbc8111a7d0d47e76" }, "device-editor": { @@ -70,7 +70,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "198c084c0a45aa3afdf79181b80d8bb0347c95f3248b4fac9e05d69eb8a35f8f" }, "device-display-preview": { @@ -81,7 +81,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "e9b88d65dca74133646aa849d47bc09ad85eb8b16a168c4df6930e8f5856b5f5" }, "background-editor": { @@ -92,7 +92,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "44beadd61365ac1730c1efde846e528bfe92d8935fd167f1b6bf3bbad6af8f33" }, "room-card": { @@ -103,7 +103,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "d47988b03e6a078508b27b5612b6eafe8ecc33c891b589ddda1cc7c71f43b7c8" }, "device-info": { @@ -114,7 +114,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "4ec8c6df671742b90ca55222917076c47c5035a6df0587282e60873c0ce5f64e" }, "pdf-export": { @@ -125,7 +125,7 @@ }, "theme": "light", "language": "en", - "sourceSha256": "9ae61c23df8295028939cdda1cd01e366d206ef5b856490bc2ea83aacf4d2588", + "sourceSha256": "490a776a02e7150ba38ebca89beb5046917eaaf908a3ed9e81c9006fdb1305cf", "imageSha256": "ad3d735135b180ce015c9cda07fdcec08d7c8707abe0665734ef7b450a8a7093" } }, diff --git a/scripts/mutation-registry.mjs b/scripts/mutation-registry.mjs index 97791924..3be6a553 100644 --- a/scripts/mutation-registry.mjs +++ b/scripts/mutation-registry.mjs @@ -1217,8 +1217,8 @@ const MUTANT_DEFINITIONS = [ + 'window.innerHeight makes the animated stage escape the card at minimum height (#648 AC5)', patches: [{ file: 'src/houseplan-card.ts', - find: '(containerOwnedHeight ? this.clientHeight : innerHeight)', - replace: 'innerHeight /* mutant: ignore the fixed Sections slot */', + find: 'from.stageHeight + from.editorChromeHeight - targetChromeHeight', + replace: 'innerHeight - targetChromeHeight /* mutant: ignore the fixed card budget */', }], }, { diff --git a/src/houseplan-card.ts b/src/houseplan-card.ts index ea4b7e37..0c0625ec 100755 --- a/src/houseplan-card.ts +++ b/src/houseplan-card.ts @@ -1344,11 +1344,8 @@ export class HouseplanCard extends LitElement { } const inner = this.renderRoot.querySelector('.editorchrome-inner') as HTMLElement | null; const targetChromeHeight = targetMode === 'view' ? 0 : inner?.scrollHeight || 0; - // The hidden measurement frame deliberately keeps the painted source - // chrome/stage coordinates inline. Measuring stage.top here therefore - // still reports the source header, not the incoming editor chrome. The - // shared controller owns a constant stage + editor-chrome budget, so - // derive the target from that budget and let each RAF move both edges. + // The hidden frame preserves source sizes; keep the stage + chrome budget + // constant so every RAF moves both edges without a final layout jump. const targetStageHeight = Math.max(1, from.stageHeight + from.editorChromeHeight - targetChromeHeight); const targetStageWidth = this._stageEl?.clientWidth || from.stageWidth;