Commit Graph
60 Commits
Author SHA1 Message Date
ypshimandClaude Haiku 5.5 d8fd6adcf0 fix(rebar): pass the ③ material to C15/C16, coping bottom and column bars
The stair bars in the 철근표 and the 3D model, and the 3D bottom and column bars, were built with the default fck,
so a changed fck did not reach them. buildRebar3D now takes the material, and a material change rebuilds the scene.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 08:52:13 +09:00
ypshim b35f5ff0ed feat(rebar): add 3D coupler modeling for P1/P2 (368) and P4/P5 (35) with separate summary table rows 2026-10-22 18:00:28 +09:00
ypshim 9900aa6d8e feat(rebar): apply 4-bar symmetric vertical stacking offset (±1.5 db, ±0.5 db) to P6 crossties to resolve centre intersection interference 2026-10-22 17:50:57 +09:00
ypshim a2317caf6c feat(rebar): add downward 90° hooks (135 mm) to P6 crossties in 3D rebar model 2026-10-22 17:45:22 +09:00
ypshimandClaude Haiku 5.5 4aa8dbb3cb fix(view): ② and ③ use the ① layout — model above the table in the centre column
The model sits at the top of the centre column and the table or member card
below it, between the pier list on the left and the results on the right, as in
the ① screen and the 시안.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:33:36 +09:00
ypshimandClaude Haiku 5.5 a692f1f507 feat(view): 철근표 and the 3D rebar model point at each other (③)
- The 3D model of ③ draws each bar family from the rebar modules (coping top and
  bottom bars, shear loops, side bars, column bars and ties, footing B1–B8, bearing
  S1/S2) and names every bar as its 철근표 number.
- A table row click highlights the bar in 3D (the others dim); a click on a 3D bar
  selects its row in the table and sets the member tab. Drags still rotate.
- The rebar is shown only on ③. Not drawn yet: C14, C15/C16, B9–B12, the couplers,
  and the bars of a bent coping.
- Tests: family names and counts (P1 46), highlight behaviour.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:31:26 +09:00
ypshimandClaude Haiku 5.5 8c96ab76f5 feat(view): show the 3D model on the 형상계획 and 철근배근 screens
The 3D viewer (views, canvas, part toggles) moves into a slot at the top of ②
and ③ while those screens are shown, and back to ① otherwise. Moving the
element keeps the WebGL context; the viewer is measured after its screen is
visible.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:28:02 +09:00
ypshimandClaude Haiku 5.5 e7f57f0a8a feat(view): 교각 목록 and bulk line in the ③ left column (시안 ③)
The ③ screen had no pier list. The left column now has the 교각 목록 with
checkboxes and a 배근 status (계산됨 / 오류), the 선택 n기 line with 속성 복사…,
then 부재 · 배근 타입. The checks are shared with ① and ②.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:25:32 +09:00
ypshimandClaude Haiku 5.5 1074fdf428 feat(view): shear-segment table for 2·3주형 on the ③ coping tab
The segment table lists each column's Level and the segments between columns
(추천안, Q-K2), so a 2주형 shows 좌 경사 3, Level 1 9, Level 2 9, 기둥 사이 1 18,
우 경사 3. One column is unchanged.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:22:04 +09:00
ypshimandClaude Haiku 5.5 13318e9393 feat(core): rebar for 2·3주형 — shear bars per column, column bars per column (plan)
- Coping §9: C10 at each column centre (@300, k_max as for one column), C9 / C11
  outside, and the gaps between columns filled @250 from both C10 groups with the
  remaining length shared evenly (추천안, Q-K2). One column gives the T형 result.
- Column bars and couplers repeat per column (P1 230 × 2 for 2주형, × 3 for 3주형).
- Footings: each footing's bars are summed per name; the longest length governs.
- C14 is kept as the T형 layout with an RB-M01 note (per-column rule open, Q-K11).
- Tests: counts for 2주형 and 3주형; T형 unchanged; too-close columns refused.
- Not yet: the ③ shear-segment table for multi columns (still single column), the
  C14 per column, and a drawing for multi columns. Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:20:49 +09:00
ypshimandClaude Haiku 5.5 8ac5d2973c feat(view): 전단철근 구간 표 on the ③ coping tab (시안 ③)
- Segments of C9 (좌 경사), C10 (Level), C11 (우 경사): first and last bar in
  metres, spacing, count, and bar number. From the bar positions (코핑철근.md §3).
- Test: 0.300–4.550 (18 @250), 4.800–7.200 (9 @300), 7.450–11.700 (18 @250).
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:17:12 +09:00
ypshimandClaude Haiku 5.5 488b65af31 fix(view): alert [보기] highlights the bar it is about (시안 ③, spec §6.1)
[보기] only switched the member tab. The alert now names its bar (RB-F08 → B2),
and [보기] switches to the member, highlights that row, and scrolls to it.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:13:03 +09:00
ypshimandClaude Haiku 5.5 140d34a844 fix(view): ③ rebar table reads left to right and scrolls inside its panel
The text columns were right-aligned and the table pushed the 비고 column out of
view. Text columns are now left-aligned, numbers (길이, 개수) right-aligned, and
the table scrolls sideways inside its panel.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:09:47 +09:00
ypshimandClaude Haiku 5.5 cdc0e5ac9c feat(view): ③ screen follows the 시안 — table columns, basis badges, alert buttons
- 철근표 columns as in the 시안: 구분 · 번호 · 규격 · 간격 · 실간격 · 위치 · 방향 ·
  형상 · 길이 · 개수 · 근거 · 비고. Metadata per bar from the rebar documents.
- 근거 badges: 입력 / 기본값 / 계산 / 가정 (the 가정 badge is italic amber).
- 번호 click highlights that row.
- 알림: [보기] opens the member tab; I02 [입력] focuses the fck input.
- Member tabs show the warning count.
- 공통 설정 moved to the right column (알림 → 검토 필요 → 공통 설정), as in the 시안.
- The 시안's "fck를 입력해야 생성" blocker is not used: the defaults are assumed
  values (I02), as decided on 2026-10-22.
- Not in this step: the drawings and the 정면·단면 연동 (시안 도면 뷰어).
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:08:21 +09:00
ypshimandClaude Haiku 5.5 9ba7b55eab feat(core,view): ③ 공통 설정 — fck and fy as inputs (spec §6.2)
- Material {fck, fyH, fyS}, defaults 27 / 400 / 500 as assumed values (I02).
  The rebar calculations take the material: the C7/C8 splice, the P2 development
  length, the P3 lap, and the B2 split use it instead of fixed numbers.
- ③ screen: 공통 설정 inputs with a note that the defaults are assumed (I02).
- Project file stores the material as an optional field; older files open with
  the defaults.
- Tests: fck 27 → 35 shortens the laps by √(27/35); the C7 piece follows fck;
  a non-default fy drops I02; the file round trip.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:06:11 +09:00
ypshimandClaude Haiku 5.5 64d415f891 fix(view): stage navigation highlights the active stage
The highlight is the 'current' class, but the stage switch only changed
aria-current, so ① stayed highlighted while ③ was shown. The switch now moves
the class with aria-current.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:04:44 +09:00
ypshimandClaude Haiku 5.5 5cc166c2e1 feat(core): RB-C07 — delete P4 ties that interfere with the footing top bars
- A P4 is deleted when |z_P4 − z_bar| < (d_P4 + d_bar)/2 against B5 and B1
  (the 확대기초 top layer, from the 상면). B11/B12 are not checked (Q-C9 무시).
- The P6 crossties start from the first kept P4.
- Tests: the document's example keeps all 8; B5 moved to −70 deletes the P4 at
  −60; a P4 just outside the limit is kept.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:49:16 +09:00
ypshimandClaude Haiku 5.5 02d740d8ca fix(view): left-align the rebar table text and clarify the C14 note
- The 번호·규격 and 비고 columns of the ③ table read left to right; the note
  wraps instead of stretching the table.
- C14 note: "위 2줄 11본씩, 아래 5 · 6 · 3 · 2 (합 38)".

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:48:18 +09:00
ypshimandClaude Haiku 5.5 33d5edef35 fix(view): enable the import apply button after the sample names are filled
Setting the project name programmatically does not fire 'input', so the apply
button stayed disabled after 샘플 P1 사용 even with P1 checked. The button is
now refreshed after the names are filled.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:47:23 +09:00
ypshimandClaude Haiku 5.5 12239c6652 feat(view): standing input and names for the P1 project (운곡교P1 · 운곡교)
- The sample button and ?sample=1 fill the project name 운곡교P1 and the bridge
  name 운곡교. The sample is RAG/운곡교P1입력.xlsx.
- Test: the app's copy stays byte-identical to the RAG file (skipped when the
  RAG folder is absent) and reads one pier, P1, T형, 말뚝기초, 10 bearings.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:42:56 +09:00
ypshimandClaude Haiku 5.5 4d8bbf7f6e test(core): footing drawing-reproduction checks from the document's test table
- Leg offsets (B1 +25.4, B3 +22.25, B5 +28.6, B7 +23.85) and B11 / B12 heights
  (550 / 950 / 1350; 569.1 / 969.1 / 1369.1).
- Reproduction counts: W 7800 → B4 30 / B2 29; L 9350 → B8 36 / B6 35.
- Variables: W 8000 with s 150 → 50 steps, e 150; W 12000 → 92 steps.
- Splice cases: L 8700 → B2 11946 (no splice), L 12400 → B4 12200,
  W 8800 → B6 12046.
- Not covered: the 배근도 H 2200 case for B10 (the document's count is unclear).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:39:42 +09:00
ypshimandClaude Haiku 5.5 1c6194cd48 feat(core): cap bars of C9–C11 and piece count (추천안 for Q-K5)
- Recommended l_cap = h − 100 (top cover), so l_cap stays below h (RB-K04).
  Cap length = 1740 + 2·l_cap. The shear rows show U and cap ranges.
- Piece count 6 per position (3 closed stirrups × U + cap): C9 + C10 + C11 gives
  270 pieces, as in the document.
- P1/P2 per-line pieces are shown from the document (기둥철근.md §3.2).
- Tests: cap length and the 270 check.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:38:28 +09:00
ypshimandClaude Haiku 5.5 5641bbe265 feat(core): lengths for coping, column and the B2 split (추천안)
- Coping: C9/C10 lower U = 1740 + 2h with h linear along the slope and 2300 on
  the Level (3522 / 6098 / 6249 / 6340 from the document); C12 (3717–10183),
  C13 11746, C14 3447.5, C15 3852, C16 4070.
- Column: P3 = C_t + 1.3·l_d(H19) lap (추천안 for Q-C6, lap 1146.6), P5 = C_t.
- Footing: B2 13646 is split into two pieces at a splice with 1.3·l_d(S25,
  SD500) (추천안 for Q-B6), piece ≈ 7776 each.
- Not done: C9/C11 cap (삿갓) lengths (Q-K5 open), P1/P2 per-line pieces.
- Tests against the document values; P1 summary updated.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:37:08 +09:00
ypshimandClaude Haiku 5.5 73bff19aba feat(core): B9 shear bars of the footing (plan C5)
- B9 (확대기초철근 (1).md §9): H16 with the 135° stirrup hook, on the odd grid
  (i_W = 1, 5, …), 16 rows, 20 per row (even rows start at i_L 1, odd at 3),
  320 bars, length l_v 1750 + 2 × 189 ≈ 2128.
- The rebar summary now lists B9; the alert about B9 is gone. Positions and
  hooks are the document's proposed rules (Q-B18, Q-B19), noted on the row.
- Tests: the document's B9 values; P1 summary has 320 and only the splice alert.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:34:56 +09:00
ypshimandClaude Haiku 5.5 3af8729e9f feat(core,view): footing rebar B1–B12 (plan C5) and the ③ rebar screen v1
- Footing (확대기초철근 (1).md): grid counts from W and L, layer heights,
  B1–B4 and B5–B8 counts and lengths (B2 13646, B6 11396), B10-1/B10-2,
  B11 (60) and B12 (47) with their lengths. B9 is not computed yet.
- rebarSummary: one 철근표 per pier from the model (bearing, coping, column,
  footing), with alerts: RB-F08 (B2 needs a splice, Q-B6), RB-F09 (B9 not
  computed).
- ③ screen v1: stage nav button, member tabs (받침블럭 · 코핑 · 기둥 · 확대기초),
  rebar table with 번호 · 규격 · 개수 · 길이 · 비고, alert list, and the open
  questions (Q-B5, Q-B6, Q-C9). Drawings and the 강조 연동 are not in v1.
- Tests: footing values from the document; P1 summary totals; warnings.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:33:47 +09:00
ypshimandClaude Haiku 5.5 a403ab9641 feat(core): coping main bars C1–C8 (plan C3) and column rebar C4
- Nominal bar diameters (H29 28.6, S32 31.8, …) as used by the documents. With
  them, C7/C8 l_s = 1.3·l_d(28.6, fck 27) = 1717.6, which is the document's 1717.
- C1–C8 (코핑철근.md §5): width layout 127 · 110.5 · 21@125 · 110.5 · 127 with 24
  bars (12 + 12); heights 43.284 / 43.227 / 43.170; top bar lengths 12744 /
  12629.6 / 12515.2; bottom pieces ≈ 7448.
- C4 (기둥철근.md): P1 r 875 and P2 r 843.2; couplers P1 +3/6/9/12 m, P2 +150;
  230 + 230 main pieces and 368 couplers; tie radius 900.45; P3 38 at @300 from
  2.340; P5 19 at @120; P4 8 at @120 from −0.060; P6 8 levels × 4 = 32, length
  ≈ 2071.
- Not yet: C4 interference checks (P4 vs B11, Q-C9), bar lengths of P3/P5/P4
  and coupler shapes, the coping/column drawing checks, and the ③ screen.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:28:03 +09:00
ypshimandClaude Haiku 5.5 b962cf1a1c feat(core): bearing-block drawing check and coping rebar C3 (plan C2·C3)
- Drawing check (spec §6.3): an integrated 2500 × 1200 block gives 18@125 = 2250
  along (ends 50 + 75) and 7@125 = 875 across (ends 162.5).
- C3 coping rebar, from RAG/코핑철근.md (2026-10-22 final):
  - C10: 9 bars @300 at 4800–7200 (k_max 4, beyond the Level edge).
  - C9 / C11: 18 bars each @250 outward, ends at 300 and 11700 (end gap 300).
  - Refuses a coping too short for C9 (RB-K01).
  - Side bars C12 5 rows / C13 2 rows at the 42.538 break; C14 38 bars;
    C15 11 bars, C16 22 bars.
- spec §6.4 is older than 코핑철근.md (C10/C9/C11 layout, C12 row count, C14
  dimensions). This follows the final document; spec §6.4 needs an update.
- Not yet: C1–C8 main bars (shape and lengths), the C12/C13 bar lengths and
  shapes, the drawing check of the coping sheet, and the ③ screen.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:08:27 +09:00
ypshimandClaude Haiku 5.5 daf78d0586 feat(core): rebar common rules (plan C1) and bearing-block bars (plan C2)
- C1: development length l_d = 0.6·d_b·fy/(λ√fck), splice 1.3·l_d, standard
  hooks (main 90°, tie 90°, stirrup 135° as written in the spec). fck 27 and
  fy 400/500 are marked as assumed values (I02).
- C2: bearing-block bars, one block per bearing (배치 분리). Bars S1 and S2 at
  @125 with 8 bars per 1200 mm side (7 gaps = 875, ends 162.5), 2500 mm long,
  coping embedment from the block height (pad included, Q16 결정).
- Tests: development and splice lengths; hook table limits; embedment 600 /
  550 / 619.1 / 569.1; P1 has 80 bars each of S1 and S2 over 10 blocks.
- Not yet: the ③ screen and the drawing check against the bearing-block drawing.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:05:27 +09:00
ypshimandClaude Haiku 5.5 e297db1251 fix(core): replace abolished E04 with I02 in the unimplemented list
E04 (fck 미입력 차단) was abolished on 2026-10-22; fck and fy are now inputs
with assumed defaults, reported as I02 in the rebar stage (spec §10, §13 Q8).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:03:14 +09:00
ypshimandClaude Haiku 5.5 17b5b24682 feat(core,view): per-row pile counts 열별 본수 (plan C4)
- A 열 is one row across the footing width; each has its own count along the
  length. Default floor((L − 1400) / 2250) + 1 per 열, as in spec §4.6.
- Counts are validated: one per 열, whole numbers 2–30. Spacing below the
  2250 mm minimum is shown as a warning, not refused (the plan's 6본 → 5@1800
  example).
- PierInput gains an optional pileRows; absent means the defaults, so existing
  files and the P1 results are unchanged.
- Change tracking compares arrays by value; 열별 본수 can be reverted and
  copied (copy item off by default).
- The footing card has −/+ per 열 with spacing, total, and the display string.
- Tests: defaults 4열 × 5본 = 20 and the 1단계 text; 6본 → 5@1800; limits;
  model-level 21 piles.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 10:34:39 +09:00
ypshimandClaude Haiku 5.5 5b162c2441 feat(core,view): shape-option rules (plan C5) and pier selection rules (plan C6)
- C5: each member's options come from one table. Only the defaults (the 1단계
  model) are selectable. The others show as disabled chips with 규칙 미정 (Q6).
  The member summary is built from the defaults.
- C6: 전체 선택 acts only on visible, buildable piers; it reads 선택 해제 only
  when all of those are checked. A check survives a change of the type filter.
  The pier list scrolls past 300 px, for 20 piers.
- Tests: defaults are the only choices; unknown options refused; the 20-pier
  mixed list with two failed piers; filter and check persistence.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 10:15:03 +09:00
ypshimandClaude Haiku 5.5 56362570ec feat(view): 형상계획 ② screen skeleton with five members (plan.md C1)
- ① and ② are switched from the stage nav. ② shows the pier list with change
  counts, the five members (교량받침, 코핑, 기둥, 확대기초·말뚝, 지반·지층) with
  a change count each, a member card, and a change list with per-item revert.
- The member card shows 기본 and 선택 summaries separately. Only members with
  existing inputs get fields (코핑 폭·길이, 말뚝 길이); the others show values
  and a note that their inputs come in a later step. Unselected members' inputs
  are not shown.
- The field rows are shared between ① and ②.
- Added a global [hidden] rule so hidden screens stay hidden.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 10:07:34 +09:00
ypshimandClaude Haiku 5.5 f75431d898 feat(view): attribute-copy dialog (시안 ⑥, plan C8)
- 속성 복사… opens the four-step dialog: source (current inputs), items,
  targets (same-type filter on by default), and a preview with changed values
  and skipped items per target. Apply changes only the visible, ticked targets.
- Items that the model does not have yet (기둥, 받침, 배근, 기초 형상) are shown
  as 예정 and disabled. Coping length and pile length are off by default.
- Option: regenerate the targets right after applying (default on); otherwise
  they show as 재생성 필요 through the normal change tracking.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 10:01:18 +09:00
ypshimandClaude Haiku 5.5 4accf1f3be feat(core): attribute-copy engine (plan C7)
- planCopy previews the changes and the skipped items for one target; applyCopy
  applies exactly the planned changes.
- Default selection copies only the coping width; coping length and pile length
  are off by default (spec §9). Pile items are skipped when the foundation type
  differs. Coordinates, IPs, bearings and elevations are not in any item.
- Equal values are not counted, so the preview count equals the applied count.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:59:48 +09:00
ypshimandClaude Haiku 5.5 fae8d7b9b8 feat(view): reflect 시안 ① main screen and ⑤ save dialog
- Header follows the mockup: dark bar, project line, stage chips (② shows the
  pending change count), save status, 저장 / 엑셀 불러오기 / 프로젝트 열기 and
  the primary 선택 교각 다시 생성 · 변경 n button.
- Left column: pier list with header row, 선택 n기 bulk bar, 입력값 and the
  2단계 input card. The bottom input panel is gone.
- First save opens 시안 ⑤ (project name, bridge, client, author, 좌표계, memo);
  later Ctrl+S / 저장 write the same file, as the spec's B5 requires.
- Project info (client, author, 좌표계, memo) is kept in the project file.
- Style layer uses the mockup's tokens (#18212B header, #1F5FA8 primary,
  #D5DBE2 borders, #E3EDF8 selected row, JetBrains Mono for numbers).
- Not reflected: ② and ③ screens (not built yet), and the mockup's static
  front preview (the app draws the model in 3D). Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:57:02 +09:00
ypshimandClaude Haiku 5.5 0b62f694c5 feat(core,view): input cards with change tracking (plan B1 · C2)
- Three values per pier: defaults (as imported), input (generated), draft
  (current cards). Overrides = draft vs defaults; pending = draft vs input.
- Editable now: 코핑 폭, 코핑 길이, 말뚝 길이. Changing a card does not touch the
  3D view until 다시 생성; the header and the card show 변경 n.
- Revert puts a field back to its imported default.
- Project files store defaults and draft (optional; v1 files still open).
- Tests: 코핑 폭 3100 → 3300 gives one override and one pending change;
  regenerating clears pending but keeps the override; revert; file round trip.
- Not verified in a browser (no debuggable Chrome in this session).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:48:47 +09:00
ypshimandClaude Haiku 5.5 f5303e4c2b feat(view): project save/open, Ctrl+S, save status, IndexedDB auto-backup (plan B2–B5)
- 저장 (Ctrl+S) downloads <교량명>_교각설계.pzr.json; 프로젝트 열기 reads it
  back and regenerates every pier without the source workbook.
- Save status in the header: 저장 전 / 변경 있음 · 미저장 / 저장됨. The
  snapshot excludes the history so a save is not counted as a change.
- Auto-backup to IndexedDB 0.8 s after changes while unsaved; on start a banner
  offers recovery or discard. Storage failures are reported, not fatal.
- beforeunload warns while there are unsaved changes.
- B1 (default-vs-changed tracking) is not added yet: inputs are not editable
  until the 2단계 input cards exist.
- Not verified in a browser (no debuggable Chrome in this session).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:44:49 +09:00
ypshimandClaude Haiku 5.5 5ce6d0e2f1 feat(core): project file save/open with schema check (plan B3)
- serializeProject / parseProject for the .pzr.json format (spec §8,
  schemaVersion 1). Parsing refuses other versions and damaged piers, and
  names the first broken pier.
- The 3D model is not stored; it is regenerated on open.
- Tests: save → open equality without the source workbook; regenerated
  models equal for 20 piers; version and damage refusals.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:39:44 +09:00
ypshimandClaude Haiku 5.5 9e1e25f8fe feat(core,view): bent coping stage 3 — footings and piles in stretch frames
- Footings, blindings and piles on a bent axis are placed in their stretch's
  frame; 일체기초 is grouped per stretch, so a combined footing never crosses
  the kink (separate footings, each aligned with its stretch).
- Footings, blindings and piles are trimmed at the mitre plane like the coping.
- The stage-2 refusal for bent foundations is removed; the Level-half-width
  refusal for columns at the kink remains.
- Tests: T형 footing crossing the kink stays in stretch 0; 2주형 with columns
  on both sides gives one footing per stretch, with mitre clipping in the scene.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:38:01 +09:00
ypshimandClaude Haiku 5.5 c9dae4ff9b fix(core): refuse bends that double back; use a valid synthetic bend in tests
The earlier synthetic bend (IP3 at (6, 2)) put IP4 ahead of IP3 on the turned
line, so the axis folded back on itself. buildPier now refuses a kink behind
IP1 along IP1→IP2 or an IP3 behind the kink along the turned direction. Tests
use IP3 (9, −3.464), a valid 60° right turn with kink (7, 0).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:33:09 +09:00
ypshimandClaude Haiku 5.5 5371932cca feat(core,view): bent coping stage 2 — mitred coping, stretch-local bearings, blocks and columns
- buildPier builds on buildAxis: each object carries its stretch k and a local
  s from that stretch's base; coping parts are per stretch with the mitre plane
  trimming the overlap in the scene (renderer.localClippingEnabled).
- Straight P1 output is unchanged (regression tests pass).
- Bent coping is supported for 현장타설말뚝 only; footings and piles on a bent
  axis remain 미실시 until stage 3. Kink outside the coping and columns within
  the Level half-width of the kink are refused.
- W03/W04 use coping coordinates (g).
- Tests: constructed 60° bend — world coordinates of bearings, blocks and the
  column survive the stretch frames; mitre sides; scene mesh count; refusals.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:22:57 +09:00
ypshimandClaude Haiku 5.5 46709be532 feat(core): polyline coping axis with per-stretch frames (bent coping stage 1)
- buildAxis: IP1 → IP4 → IP3 as stretches with their own frames; arc length s
  from IP1; mitre normal u1 + u2 at the kink.
- toAxis / fromAxis: world ↔ (k, s, n) round trip; stretch chosen by the mitre plane.
- copingSpan (centred on L_IP/2) and nearKink (columns within the Level half-width).
- Straight P1 regression against spec §12 bearing values; bent round trip and continuity.
- Not wired into buildPier yet; the model still refuses bent coping (미실시).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:18:31 +09:00
ypshimandClaude Haiku 5.5 d8944e9023 fix(core): clockwise-positive bend angle for IP4 (right turn when travelling IP1→IP2)
Sign convention approved: a right (clockwise) deflection is positive.
solveIp4 now rotates the IP1→IP2 direction by −θ. Test covers a +10°
right turn with IP4 at (5, 0).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:13:54 +09:00
ypshimandClaude Haiku 5.5 d0fa9b94eb feat(core): lateral coping step (Q1·Q2) and IP4 bend-point solve (spec §4.1)
- Front and back coping tops that differ by 5 mm or more in any segment are
  drawn as two coping parts split at the midline between the bearing rows.
  Tolerance 5 mm and midline position are the draft assumptions (Q1·Q2).
- Scene extrudes each coping part across its own width.
- solveIp4 computes IP4 as the intersection of the IP1→IP2 line with the
  line through IP3 turned by the bend angle (positive = counter-clockwise,
  sign convention to be confirmed). Bent coping geometry remains 미실시.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:04:12 +09:00
ypshimandClaude Haiku 5.5 ad59c0c74d feat(core): 일체기초 footings for 2·3주형 with per-footing pile grid
- Columns closer than one footing length (10400) share a 일체기초 whose
  length is the outer-column distance + 10400, centred between them (spec §4.6).
- Pile grid is computed from each footing's length (rows across 8150,
  pile count along the length from (length − 1400) / 2250 + 1).
- Blinding concrete follows each combined footing.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:01:40 +09:00
ypshimandClaude Haiku 5.5 5466b3522e feat(core): haunch-and-Level-300 coping underside, steel pile 609.6, W03/W04 checks
- Multi-column coping (2·3주형): underside between columns drops 300 below
  Level with 300 × 300 haunches (spec §4.5, Q3 추천안).
- Steel pipe pile diameter 609.6 mm (spec §4.5, Q5 추천안).
- Direct foundation keeps the 100 mm blinding concrete (Q4 추천안, test added).
- W03: bearing centre closer than half a block width to a step boundary.
- W04: block footprint outside the coping plan.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 08:58:57 +09:00
ypshimandClaude Haiku 5.5 112f460f1f test(ui): keep verification run logs as evidence (force-add, *.log is ignored)
- rag-input-run-2026-10-21.log: RAG input uploaded directly
- console-run-2026-10-21.log: V10 3 console check

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-21 18:19:33 +09:00
ypshimandClaude Haiku 5.5 68e56d1037 feat(input): use RAG/운곡교P1입력.xlsx as the P1 input
- public/samples/운곡교P1입력.xlsx is a byte copy of RAG/운곡교P1입력.xlsx
- loadP1 and the sample loader read the three-sheet input
- spec workbook (intent.PR) stays for the single-sheet regression tests
- test: input file has sheets 교각 · IP · 받침 and parses to P1 with no issues

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-21 18:18:51 +09:00
ypshimandClaude Haiku 5.5 def1e1b9fc test(ui): verify the template download button saves the file in Chrome
- scripts/verify-template-download.cjs clicks 입력 템플릿 다운로드 and reports the saved file
- result: 교각입력템플릿.xlsx (19,391 bytes), sheets 교각 · IP · 받침
- verify/template-download-2026-10-21.xlsx keeps the saved copy as evidence

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-21 18:17:27 +09:00
ypshimandClaude Haiku 5.5 6319cccb8e feat(import): input template download with three sheets (spec 2.3 step 4)
- buildTemplateWorkbook: 교각 · IP · 받침 sheets with the headers the parser
  reads; value cells left empty so no blank-name rows raise E05
- dialog button 입력 템플릿 다운로드 (.xlsx)
- tests: sheet order, parser recognition, write-and-read round trip

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-21 18:14:33 +09:00