Multiple buildings and fire-space validation

91/91cases passed.30October2026. Shared/perimeter6m route geometry only. Perimeter alone does not establish building-side access.9m turning,45t capacity,overhead,levels and full CFO approval are unverified. No podium.

Studio · Base404tests · Expected/actual results

CaseExpectedActualEvidenceToleranceResult
Height gap at 14.99966UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 1566UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 17.566UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 1866UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 18.00177UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 2177UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 21.00188UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 2488UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 24.00199UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 2799UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 27.0011010UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 301010UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 30.0011111UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 331111UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 33.0011212UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 361212UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 36.0011313UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 391313UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 39.0011414UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 421414UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 42.0011515UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 451515UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 45.0011616UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 481616UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 511616UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Height gap at 1001616UP§3.2.4.3pp52–53;max(6,table,6+ceil((H−18)/3)capped16);conflict flagged0.000001pass
Shortest rectangular gap2020Centres30m apart minus5+5half-widths0.000001pass
Rotated90degree footprint gap1010Projected widths20m;30−10−10=100.000001pass
Rotated45degree parallel gap2019.999999999999996Local-x translation30m minus10m width0.000001pass
Touching rectangles gap zero00Independent geometry / stated model invariant0.000001pass
Overlapping rectangles gap zero00Independent geometry / stated model invariant0.000001pass
Union of two overlapped squares150150100+100−500.000001pass
Union of four identical squares100100Inclusion-exclusion avoids double-counting0.000001pass
Taller block controls required gap99maxheight25m;prose9m,table7m;larger flagged scenario0.000001pass
Raising one block increases required gap1515Independent geometry / stated model invariant0.000001pass
Actual distance threshold 8.999falsefalseRequired9m;distance=centre separation−10m0.000001pass
Actual distance threshold 9truetrueRequired9m;distance=centre separation−10m0.000001pass
Actual distance threshold 9.001truetrueRequired9m;distance=centre separation−10m0.000001pass
Plot setback also grows with taller neighbourtruetrueIndependent geometry / stated model invariant0.000001pass
Shared plot FAR is not multiplied by block count[16000,15000,true][16000,15000,true]Two40×40plates×5floors=16000;plot10000×1.5=150000.000001pass
High-rise fire trigger 14.999falsefalseNBCPart4§1.2high-rise/Part2height15m;flat-site model basis0.000001pass
High-rise fire trigger 15truetrueNBCPart4§1.2high-rise/Part2height15m;flat-site model basis0.000001pass
High-rise fire trigger 15.001truetrueNBCPart4§1.2high-rise/Part2height15m;flat-site model basis0.000001pass
Education/health9m trigger primary 8.999falsefalseNBCPart4§1.2(b)(2)–(3),PDFp2620.000001pass
Education/health9m trigger primary 9truetrueNBCPart4§1.2(b)(2)–(3),PDFp2620.000001pass
Education/health9m trigger clinic 8.999falsefalseNBCPart4§1.2(b)(2)–(3),PDFp2620.000001pass
Education/health9m trigger clinic 9truetrueNBCPart4§1.2(b)(2)–(3),PDFp2620.000001pass
Special-occupancy one-floor500m²boundary 499.999falsefalseNBCPart4§1.2(b)(1):more than500m²on any floor,not gross sum0.000001pass
Special-occupancy one-floor500m²boundary 500falsefalseNBCPart4§1.2(b)(1):more than500m²on any floor,not gross sum0.000001pass
Special-occupancy one-floor500m²boundary 500.001truetrueNBCPart4§1.2(b)(1):more than500m²on any floor,not gross sum0.000001pass
Gross600m²alone does not trigger500m²floor rulefalsefalseTwo300m²floors;neither floor exceeds500m²0.000001pass
Assembly triggers even below9m/500m²truetrueNBCPart4§1.2(b)(4):all assembly buildings0.000001pass
Fire strip geometric area504504(20+12)×(10+12)−20×10=5040.000001pass
Fire strip outside plot detected24241m outside at left×24m expanded depth0.000001pass
Park in setback may still obstruct fire strip144144Park startsx60;blockBendsx60;6×24=144m²fire strip obstructed0.000001pass
Neighbouring clear fire strips may be sharedfalsefalse6m gap is one shared clear lane,not two separately charged lanes0.000001pass
Automatic entry crossing another building is rejectedtruetrueStraight6m connector to rear high-rise crosses front low-rise0.000001pass
Fire review never implies checked turning/load approvaltruetrueIndependent geometry / stated model invariant0.000001pass
Generated1building layout satisfies encoded geometrytruetrueShared baseFAR3.5×12000=42000;gap/fire/park/plot checks run0.000001pass
Generated2building layout satisfies encoded geometrytruetrueShared baseFAR3.5×12000=42000;gap/fire/park/plot checks run0.000001pass
Generated4building layout satisfies encoded geometrytruetrueShared baseFAR3.5×12000=42000;gap/fire/park/plot checks run0.000001pass
Layout generation preserves input and fixed site factstruetrueIndependent geometry / stated model invariant0.000001pass
Independent heights survive rearrangementtruetrueIndependent geometry / stated model invariant0.000001pass
Linked edits preserve separate positionstruetrueIndependent geometry / stated model invariant0.000001pass
Plotted house does not silently acquire multiple blocksfalsefalseIndependent geometry / stated model invariant0.000001pass
Unsupported three-building model rejectedtruetrueIndependent geometry / stated model invariant0.000001pass
Corrupt/duplicate building identifiers rejectedtruetrueIndependent geometry / stated model invariant0.000001pass
Infeasible narrow layout does not force massingfalsefalseIndependent geometry / stated model invariant0.000001pass
Layout JSON round trip preserves measured areatruetrueIndependent geometry / stated model invariant0.000001pass
Single-building fit cannot ignore a fire-space failuretruetrueClear ring crosses plot boundary; locked dimensions cannot claim a valid fit0.000001pass
Partial ground floor fire strip uses measured footprinttruetrueSingle quarter-area plate=10x10m; 6m offset=22x22=484m20.000001pass
Scaled footprints pack at one12m gap, not two margins[12,12][12,12]UP section3.2.4.3 Note2 p53: one higher-block gap; final footprints, not unscaled grid cells0.000001pass
Four scaled blocks have one gap at each facing grid pair442x2 grid: four orthogonal facing pairs share one required distance; diagonal gaps larger0.000001pass
Perimeter route reserves one site ring22562256100x100 plot minus88x88 interior=2256m2;6m inward reservation0.000001pass
Perimeter road never claims complete building accesstruetrueNBC Part3 section4.6(c) p123 retains building-side access; no duplicated automatic building loops in perimeter drawing0.000001pass
Park obstructing shared perimeter road is detected120119.999999999999946m x20m park intersection with left perimeter route0.000001pass
Too narrow plot cannot contain perimeter routefalsefalse6m inward offsets leave empty inner polygon0.000001pass
Perimeter scenario generates1blocks with clear routetruetrueChecked plot/park/building intrusion; side-access/turning approval still review0.000001pass
Perimeter scenario generates2blocks with clear routetruetrueChecked plot/park/building intrusion; side-access/turning approval still review0.000001pass
Perimeter scenario generates4blocks with clear routetruetrueChecked plot/park/building intrusion; side-access/turning approval still review0.000001pass
Plot editing scales actual polygon area2000020000Scale x2; original10000m2 becomes20000m20.000001pass
Custom polygon direct edit preserves convex shape and area ratiotruetrueHorizontal x2 and vertical x0.5 preserve area, vertex order and convexity0.000001pass
Direct plot editing preserves road and approval factstruetrueIndependent geometry / stated model invariant0.000001pass
Resizing rotated footprint preserves anchored opposite cornertruetrueOpposite corner remains fixed under local rotated width/depth resize0.000001pass
Linked footprint resize preserves other building positiontruetrueIndependent geometry / stated model invariant0.000001pass
Unlinked direct editing changes only selected footprinttruetrueIndependent geometry / stated model invariant0.000001pass
Negative plot edit rejectedtruetrueIndependent geometry / stated model invariant0.000001pass
Over-range building edit rejectedtruetrueIndependent geometry / stated model invariant0.000001pass
Directly edited plot regenerates same building counttruetrue120x140x3.5=58800 counted area; one shared entitlement after user site edit0.000001pass
One-floor partial plate shows its measured size[10,10][10,10]20x20 nominal plate at25percent area has10x10 measured footprint0.000001pass
Direct edit of partial ground plate preserves physical anchortruetruePhysical opposite corner remains fixed; new measured footprint12x14=168m20.000001pass