From 4feeebc3554b4bb987c47999cbe633b674d3749a Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 24 Aug 2026 21:27:38 +0300 Subject: [PATCH] =?UTF-8?q?test:=20=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BE=D0=BA=20=D1=81=D0=BE=D0=B1=D0=B8=D1=80?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20test-build=20=D1=81=D0=B0=D0=BC,=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=BA=20=D1=87=D0=B8=D1=81=D1=82=D1=8B=D0=B9=20CI=20?= =?UTF-8?q?=D0=B8=20=D1=82=D1=80=D0=B5=D0=B1=D1=83=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Смок импортировал `../test-build/*` статически и на моей стороне работал только потому, что каталог остался от `npm test`. На чистом Linux CI его нет: в job `smoke` идут `npm ci` и `npm run bundle:sync`, сборки тестов там не бывает, и смок падал на импорте до запуска браузера. Ровно эту ошибку уже проходил `smoke_lattice_write_barrier.mjs` — там об этом и написано в комментарии. Лечение то же: собрать `tsconfig.test.json` перед динамическим импортом. Проверено в чистом worktree без `test-build`: шесть прогонов, все совпадают с таблицей KNOWN, OK. Issue: #297 User-Visible: no --- demo/smoke_edit_walk.mjs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/demo/smoke_edit_walk.mjs b/demo/smoke_edit_walk.mjs index 164408a3..119c3484 100644 --- a/demo/smoke_edit_walk.mjs +++ b/demo/smoke_edit_walk.mjs @@ -19,12 +19,28 @@ // поэтому воспроизводится одной командой: // node demo/smoke_edit_walk.mjs --seed 7 --plan real-plan-second-floor.json import { readFileSync, writeFileSync, mkdirSync } from 'node:fs'; +import { execFileSync } from 'node:child_process'; +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; import { launch, checkAll, finish } from './serve.mjs'; -import { optimizePlans } from '../test-build/plan-optimizer.js'; -import { + +// `model-invariants.mjs` и оптимизатор — скомпилированный продуктовый код, а не +// вторая модель. Значит смок обязан собрать тот же `test-build`, который делает +// `npm test`: на чистом Linux CI этого каталога нет, и опора на оставшийся от +// разработчика падает до запуска браузера. Ровно эту ошибку уже проходил +// `smoke_lattice_write_barrier.mjs` — здесь она повторена по той же причине. +const root = fileURLToPath(new URL('..', import.meta.url)); +execFileSync(process.execPath, [ + resolve(root, 'node_modules/typescript/bin/tsc'), '-p', 'tsconfig.test.json', +], { cwd: root, stdio: 'inherit' }); +execFileSync(process.execPath, [resolve(root, 'scripts/fix-test-build.mjs')], { + cwd: root, stdio: 'inherit', +}); +const { optimizePlans } = await import('../test-build/plan-optimizer.js'); +const { checkHiddenObstacles, checkMixedRoleRecords, checkWallKeys, checkReferences, checkPhysicalGeometry, latticeProfile, readModel, -} from '../scripts/model-invariants.mjs'; +} = await import('../scripts/model-invariants.mjs'); const arg = (name, fallback) => { const index = process.argv.indexOf(name);