Merge issue #298 into dev

Owner-approved review exception: the external reviewer is unavailable. Both r1 High findings were fixed, the exact branch SHA passed all recorded gates, and generated bundles were rebuilt after conflict resolution with #296.

Issue: #298
User-Visible: no
This commit is contained in:
Sergey Matyunin
2026-08-24 23:12:16 +03:00
22 changed files with 1823 additions and 272 deletions
+27
View File
@@ -234,6 +234,33 @@ export const MUTANTS = [
replace: " if (false && !movingAxis) return { enabled: false, reason: 'diagonal' };",
}],
},
{
id: 'safe-resize-wall-endpoints-affine-scaled',
guard: 'npx tsc -p tsconfig.test.json && node scripts/fix-test-build.mjs '
+ '&& node --test --test-name-pattern="issue 298" test/wall-thickness.test.mjs',
because: 'fixed-topology Resize may translate a moving wall or move its topology endpoint, '
+ 'but proportional scaling invents a wall-record coordinate with no carrier (#298)',
patches: [{
file: 'src/wall-thickness.ts',
find: " if (mode === 'fixed-topology') {\n"
+ ' const adx = move.na[0] - move.oa[0], ady = move.na[1] - move.oa[1];',
replace: " if (false && mode === 'fixed-topology') {\n"
+ ' const adx = move.na[0] - move.oa[0], ady = move.na[1] - move.oa[1];',
}],
},
{
id: 'safe-resize-legacy-midpoint-fail-open',
guard: 'npx tsc -p tsconfig.test.json && node scripts/fix-test-build.mjs '
+ '&& node --test --test-name-pattern="issue 298 fixed-topology legacy" '
+ 'test/wall-thickness.test.mjs',
because: 'Safe Resize must reject an affected key-only midpoint unless it names '
+ 'one unambiguous whole changed edge (#298)',
patches: [{
file: 'src/wall-thickness.ts',
find: " if (mode === 'fixed-topology') {\n const direct = wholeEdgeMoves.get(w.key);",
replace: " if (false && mode === 'fixed-topology') {\n const direct = wholeEdgeMoves.get(w.key);",
}],
},
{
id: 'safe-resize-third-room-cascade-enabled',
guard: 'npx tsc -p tsconfig.test.json && node scripts/fix-test-build.mjs '