Files
houseplan-card/dist/houseplan-assets.json
T
Codex ef3bc6d133 fix: габарит мебели равен заявленным размерам (#584)
Указанные ширина и глубина теперь совпадают с видимым габаритом предмета.
Раньше рисунок занимал внутри своего бокса около 88 % стороны, поэтому
«Кухонный напольный модуль» 60 × 60 выглядел меньше «Посудомоечной машины»
60 × 60 примерно на 14 % по стороне и на 30 % по площади: цифры совпадали,
картинка врала.

Пак `fix-584-1` от дизайнера (issue, комментарий от 16.09) проверен исполнением
своей метрикой, а не его отчётом: границы считаются аналитически по той же
математике, что у продакшен-экспорта в PDF. Все 44 плановых SVG заполняют
`viewBox` с худшим отклонением 0.000000 при допуске ТЗ 0,1; `pack.json` и 33
иконки меню побайтно прежние. Для сравнения, прежний набор в `dev` давал 65
нарушений того же контракта.

Что сделано в коде:

- `scripts/svg-path-bounds.mjs` — границы рисунка по настоящим экстремумам
  кривых (дуги приводятся к кубикам). Контрольные точки в габарит не входят:
  иначе «заполняет бокс» проверялось бы по выпуклой оболочке и поля проходили
  бы мимо. Генератор — `.mjs` и обязан работать без сборки TypeScript, поэтому
  разбор здесь свой; тест сверяет его с `parseSvgPath` продакшена на всей
  библиотеке, чтобы реализации не разъехались молча.
- `scripts/furniture-path-join.mjs` — склейка нескольких `<path>` с
  канонизацией только начального `moveto`. Приём подсказан патчем в поставке
  дизайнера; реализация и свидетели свои. Прежний `paths.join(' ')` продолжал
  координаты предыдущего пути: замер показал, что у иконок меню `stairs` и `tv`
  части рисунка уезжали за `viewBox` 110 × 110 — до 119. Теперь склейка
  побайтно воспроизводит «каждый путь из своего нуля».
- генератор проверяет плановый символ по контракту: один путь, подконтуры с
  абсолютной `M`, рисунок заполняет `viewBox` (допуск 0,1).
- `src/furniture.ts` — legacy `plant` растянут от центра в 1/0.96. Это
  единственный из двенадцати retained-примитивов с полями (0.02…0.98 unit box);
  форма прежняя, габарит стал заявленным.

Свидетели: `test/furniture-visual-bounds.test.mjs` (AC1–AC3, AC5 и сверка двух
реализаций границ) и `test/furniture-path-join.test.mjs` (AC4, включая реальные
`stairs`/`tv`). У AC1 есть положительный контроль: та же функция обязана видеть
поля на геометрии из шапки issue — утверждение «полей нет» стоит ровно столько,
сколько стоит измерение. Мутанты `furniture-symbol-may-keep-inner-padding` и
`furniture-paths-joined-without-reset` возвращают прежнее поведение и краснеют;
прогнаны лично через `mutation-gate --id=`.

Миграции пользовательских данных нет: координаты, размеры, поворот и
зеркалирование сохраняются.

npm test 2743/2742/0 fail, typecheck чистый, furniture:check зелёный.

Issue: #584
User-Visible: yes
2026-09-16 23:02:11 +03:00

298 lines
9.9 KiB
JSON

{
"schema": 1,
"fingerprint": "ead0f4146471ab778119d7575ca6c0fae2c76260315828e505380a3e32910549",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-QCQsWhm9.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 291158,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-QCQsWhm9.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 292680,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2327,
"lazyFiles": [
"houseplan-assets/backdrop-pick-CHXO6wCC.js",
"houseplan-assets/de-Ckd-utGr.js",
"houseplan-assets/editor-Cm8BzYup.js",
"houseplan-assets/fr-dTwY5e5m.js",
"houseplan-assets/furniture-plan-art.generated-DH4ULp8h.js",
"houseplan-assets/houseplan-editor-runtime-A7oaN5to.js",
"houseplan-assets/houseplan-onboarding-runtime-DF0pKq_1.js",
"houseplan-assets/hp-zigbee-topology-overlay-BLPQa5-z.js",
"houseplan-assets/iso-scene-render-B-LgWkof.js",
"houseplan-assets/live-interaction-runtime-B2_XndWb.js",
"houseplan-assets/pdf-export-Ddvg38aO.js",
"houseplan-assets/summary-panel-runtime-loaded-Ci-uYIPy.js",
"houseplan-assets/zigbee-topology-df97gjoC.js",
"houseplan-assets/zigbee-topology-runtime-BjT4xEwX.js"
],
"lazyGzipBytes": 433657,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-CHXO6wCC.js",
"houseplan-assets/editor-Cm8BzYup.js",
"houseplan-assets/furniture-plan-art.generated-DH4ULp8h.js",
"houseplan-assets/houseplan-editor-runtime-A7oaN5to.js",
"houseplan-assets/zigbee-topology-df97gjoC.js"
],
"lazyEditorGzipBytes": 218045,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-CHXO6wCC.js",
"houseplan-assets/houseplan-onboarding-runtime-DF0pKq_1.js"
],
"lazyOnboardingGzipBytes": 13919,
"lazyLocaleFiles": [
"houseplan-assets/de-Ckd-utGr.js",
"houseplan-assets/fr-dTwY5e5m.js"
],
"lazyLocaleGzipBytes": 54937,
"lazyIsometricFiles": [
"houseplan-assets/iso-scene-render-B-LgWkof.js"
],
"lazyIsometricGzipBytes": 15017,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-DH4ULp8h.js"
],
"lazyFurnitureArtGzipBytes": 23338,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-DH4ULp8h.js",
"houseplan-assets/pdf-export-Ddvg38aO.js"
],
"lazyPdfGzipBytes": 133208,
"files": [
{
"path": "houseplan-assets/backdrop-pick-CHXO6wCC.js",
"sha256": "36465bc759532e306598d53a85050f0b74b1530c529da70f79216f4b69c9c373",
"rawBytes": 19956,
"gzipBytes": 6880,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-Ckd-utGr.js",
"sha256": "a57614e4a6cca92f90d763c0c1d1cda24b24d329a40a5ac3cad38a8aa78b5681",
"rawBytes": 91590,
"gzipBytes": 27751,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-Cm8BzYup.js",
"sha256": "517ff6fc16f3e51a610c957d66204d61314ee26fe77189e7d401f109abd3c46a",
"rawBytes": 3831,
"gzipBytes": 1583,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-dTwY5e5m.js",
"sha256": "33b9690000ebb0bb53d91e00df0e105875ba1281e4b86d439e78dd98998d85a1",
"rawBytes": 93884,
"gzipBytes": 27186,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-DH4ULp8h.js",
"sha256": "0d6b8f7e60d366244931bfe015a94ed349689cf9d8ad21f1c7fae5efdaf4b73f",
"rawBytes": 90517,
"gzipBytes": 23338,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-QCQsWhm9.js",
"sha256": "4326ca9b05e0d1383e94e4a6439af56b3746962c210ce93c87dba80df7e0db2a",
"rawBytes": 1034124,
"gzipBytes": 290353,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-Ckd-utGr.js",
"houseplan-assets/editor-Cm8BzYup.js",
"houseplan-assets/fr-dTwY5e5m.js",
"houseplan-assets/furniture-plan-art.generated-DH4ULp8h.js",
"houseplan-assets/houseplan-editor-runtime-A7oaN5to.js",
"houseplan-assets/houseplan-onboarding-runtime-DF0pKq_1.js",
"houseplan-assets/hp-zigbee-topology-overlay-BLPQa5-z.js",
"houseplan-assets/iso-scene-render-B-LgWkof.js",
"houseplan-assets/live-interaction-runtime-B2_XndWb.js",
"houseplan-assets/pdf-export-Ddvg38aO.js",
"houseplan-assets/summary-panel-runtime-loaded-Ci-uYIPy.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-A7oaN5to.js",
"sha256": "d54628476b6722561afbdfc8d6dfa83b4bda516507f7ba33554637e39ef9bd47",
"rawBytes": 670154,
"gzipBytes": 178817,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-CHXO6wCC.js",
"houseplan-assets/furniture-plan-art.generated-DH4ULp8h.js",
"houseplan-assets/houseplan-card-QCQsWhm9.js",
"houseplan-assets/zigbee-topology-df97gjoC.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-BjT4xEwX.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-DF0pKq_1.js",
"sha256": "3b7e7fd5dc5c74fe8d8e7319e8ea922bab6966b7d4eb70805c1e90647d1c43d2",
"rawBytes": 28287,
"gzipBytes": 7039,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-CHXO6wCC.js",
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-BLPQa5-z.js",
"sha256": "b53bc8b0c7af9ed65be8efd205023d60f1561b95b10c47d9a3996a9c35b6b68c",
"rawBytes": 10756,
"gzipBytes": 3686,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js",
"houseplan-assets/zigbee-topology-df97gjoC.js",
"houseplan-assets/zigbee-topology-runtime-BjT4xEwX.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-B-LgWkof.js",
"sha256": "dcfdaee5d2b49794f00ebccffa269f275790cae594e4d06da6d52662ce13c336",
"rawBytes": 44439,
"gzipBytes": 15017,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-B2_XndWb.js",
"sha256": "9146866e15503381f4aa648d077ed549fb278bd9f42561d5aa79ab6b52c2c773",
"rawBytes": 8216,
"gzipBytes": 3211,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-Ddvg38aO.js",
"sha256": "abbfd9ad72786711fd60553b9c42a87a2b61b53ca00953f9df3c6cdcc5712a67",
"rawBytes": 236244,
"gzipBytes": 109870,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-DH4ULp8h.js",
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-BQEDzzj8.js",
"sha256": "c34475fa1a5eb4ca2d270d4f2751150d65ccf3d7f28a624ecdc11db41524d8e3",
"rawBytes": 14824,
"gzipBytes": 3402,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js",
"houseplan-assets/summary-panel-runtime-loaded-Ci-uYIPy.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-BAzt2V0V.js",
"sha256": "4a6f5b24ed4a5e2264a13f910e9d19454b0e04debf0dc3c771ca6dc11733b939",
"rawBytes": 2610,
"gzipBytes": 1307,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-Ci-uYIPy.js",
"sha256": "1d73ae628e53d078d195b6dfc460d97591ceba5a3cf9c98e904b093ff271e1f2",
"rawBytes": 73366,
"gzipBytes": 20089,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-BQEDzzj8.js",
"houseplan-assets/summary-panel-metrics-BAzt2V0V.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-df97gjoC.js",
"sha256": "f2ee5f6443203a28589cbef4a052b04b6385292af9eec9a8442f4facb8e8f0ba",
"rawBytes": 18961,
"gzipBytes": 7427,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-BjT4xEwX.js",
"sha256": "863961ec4a50885458b61718aa67ef149a04847c4ca7b734f1fb8e7190868392",
"rawBytes": 3941,
"gzipBytes": 1763,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js",
"houseplan-assets/zigbee-topology-df97gjoC.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "3d3522bf22c00355dc51dd06610373920bf9cd3529a624be0f5776c1be27d1fc",
"rawBytes": 1205,
"gzipBytes": 805,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "ff2f53182fa516127f9e85d7ebe2aab6708b4fd880c483f109bb4911527110b1",
"rawBytes": 6165,
"gzipBytes": 2327,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-QCQsWhm9.js"
],
"dynamicImports": []
}
]
}