PASS A3 운곡교P1: same tables / rows PASS A3 운곡교P1: no existing cell changed or lost [] added cells: [('C12', 'A', '12.228~3.151'), ('C13', 'A', '12.167~12.044')] PASS A3 운곡교p2: same tables / rows PASS A3 운곡교p2: no existing cell changed or lost [] added cells: [('C12', 'A', '12.228~3.151'), ('C13', 'A', '12.167~12.044')] PASS A3 p2: C12 / C13 range text in column A [('C12', 'A', '12.228~3.151'), ('C13', 'A', '12.167~12.044')] PASS A3 p2: nothing else added [('C12', 'A', '12.228~3.151'), ('C13', 'A', '12.167~12.044')] PASS A3 산외교울산P1: same tables / rows PASS A3 산외교울산P1: no existing cell changed or lost [] added cells: [('C7', 'B', '3.106~1.656'), ('C8', 'B', '3.184~3.054'), ('C9', 'B', '2.977~1.526'), ('C10', 'A', '9.570~3.393'), ('C11', 'A', '9.560~3.383'), ('C12', 'A', '8.974~8.666'), ('C13', 'A', '9.764~9.456')] PASS A4 운곡교P1: expected / rebar_marks rows unchanged (166) PASS A4 운곡교P1: params rows found, none differ (91) ['bearing_seats.bearings.A', 'bearing_seats.bearings.B', 'bearing_seats.bearings.el_x', 'bearing_seats.bearings.h1', 'bearing_seats.bearings.h2', 'sole_plates.h3', 'sole_plates.table.L', 'sole_plates.table.S', 'sole_plates.table.T', 'sole_plates.table.W'] PASS A4 운곡교p2: expected / rebar_marks rows unchanged (166) PASS A4 운곡교p2: params rows found, none differ (91) ['bearing_seats.bearings.A', 'bearing_seats.bearings.B', 'bearing_seats.bearings.el_x', 'bearing_seats.bearings.h1', 'bearing_seats.bearings.h2', 'sole_plates.h3', 'sole_plates.table.L', 'sole_plates.table.S', 'sole_plates.table.T', 'sole_plates.table.W'] PASS A4 산외교울산P1: expected / rebar_marks rows unchanged (82) PASS A4 산외교울산P1: params rows found, none differ (40) ['bearing_seats.bearings.A', 'bearing_seats.bearings.B', 'bearing_seats.bearings.el_x', 'bearing_seats.bearings.h1', 'bearing_seats.bearings.h2', 'sole_plates.table.L', 'sole_plates.table.S', 'sole_plates.table.T', 'sole_plates.table.W', 'sole_plates.table.h3'] PASS A4 mutation: only the two changed params cells differ [['bearing_seats', 'bearings', 6, 'h1'], ['sole_plates', 'table', 2, 'W']] PASS A4 mutation: expected untouched by the params rows PASS A4 apply restores exactly the original params PASS A4 h3 common value proposed once (Ungok) chain: -4575, 200, 70@125, 200 PASS A5 chain of P1 bottom_Y1.pos (73) expands to the same list 73 PASS A5 drawing notation PASS A5 decimals kept PASS A5 rejects '' 치수 사슬이 비어 있습니다 PASS A5 rejects 'a, 1' 치수 사슬 형식 오류: 'a' (첫 값은 시작 위치, 이후는 증분 또는 n@간격) PASS A5 rejects '2@100' 치수 사슬 형식 오류: '2@100' (첫 값은 시작 위치, 이후는 증분 또는 n@간격) PASS A5 rejects '0, 0@5' 치수 사슬 형식 오류: '0@5' (반복 횟수는 1 이상) PASS A5 rejects '0, 3@x' 치수 사슬 형식 오류: '3@x' (첫 값은 시작 위치, 이후는 증분 또는 n@간격) PASS A5 expand_chains nested / other dicts untouched PASS A5 web save expands the chain to the same list (302, [-4625, -4375, -4125]) PASS A5 web rejects a bad chain, params unchanged PASS A5 section page shows the chain hint 21A76: {'type': 'LINE', 'layer': 'CS-CONC-MAJR', 'handle': '21A76', 'values': {'start': [17334.4, 8115.6], 'end': [6984.4, 8115.6], 'length': 10350.0, 'dx': -10350.0, 'dy': 0.0, 'bbox': [[6984.4, 8115.6], [17334.4, 8115.6]], 'bbox_size': [10350.0, 0.0]}} PASS A6 21A76 (footing, report: 10.350) found {'type': 'LINE', 'layer': 'CS-CONC-MAJR', 'handle': '21A76', 'values': {'start': [17334.4, 8115.6], 'end': [6984.4, 8115.6], 'length': 10350.0, 'dx': -10350.0, 'dy': 0.0, 'bbox': [[6984.4, 8115.6], [17334.4, 8115.6]], 'bbox_size': [10350.0, 0.0]}} 20E89: {'type': 'ARC', 'layer': 'CS-CONC-MAJR', 'handle': '20E89', 'values': {'centre': [19111.2, 6039.2], 'radius': 12000.0, 'start_angle': 93.592, 'end_angle': 119.187, 'arc_length': 5360.5, 'start_point': [18359.4, 18015.6], 'end_point': [13259.4, 16515.6], 'bbox': [[13259.4, 16515.6], [18359.4, 18015.6]], 'bbox_size': [5100.0, 1500.0]}} PASS A6 20E89 (coping soffit arc, params R12,000) is an ARC R12000 {'type': 'ARC', 'layer': 'CS-CONC-MAJR', 'handle': '20E89', 'values': {'centre': [19111.2, 6039.2], 'radius': 12000.0, 'start_angle': 93.592, 'end_angle': 119.187, 'arc_length': 5360.5, 'start_point': [18359.4, 18015.6], 'end_point': [13259.4, 16515.6], 'bbox': [[13259.4, 16515.6], [18359.4, 18015.6 PASS A6 unknown handle -> None PASS A6 web shows the object PASS A6 web reports a missing handle PASS A7 10 bearings: defaults unchanged PASS A7 4 bearings: ids within 1..4 {'G1': ['BS04', 'BP03'], 'G2': ['P2', 'P3'], 'G3': ['B4', 'B9'], 'G4': ['C11', 'S1'], 'G5': ['BB04', 'SP04']} PASS A7 pier override still wins RESULT PASS